<?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>20483</bug_id>
          
          <creation_ts>2008-08-22 02:15:59 -0700</creation_ts>
          <short_desc>WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?)</short_desc>
          <delta_ts>2008-10-14 12:24: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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Marco Barisione">marco.barisione</assigned_to>
          <cc>christian</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>marco.barisione</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>89094</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-22 02:15:59 -0700</bug_when>
    <thetext>WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?)

I may cry the next time I see a patch with g_free in it. :(  It&apos;s just an accident waiting to happen.

Can we please have a smart pointer which knows how to call g_free from its destructor?

The only thing special about a GFreePtr (besides being a direct copy/paste from OwnPtr) is that it will need an accessor to get at the underlying raw pointer.

Something like:

PtrType&amp; rawPtr();

That would make it possible to use GFreePtr with calls like this:

GFreePtr contents;
some_gtk_method_which_returns_via_arguments(contents.rawPtr());

Then &quot;contents&quot; (if it got set as part of the function call) would automagically have g_free called on it when it went out of scope!  No more leaks due to early returns!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89095</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-08-22 02:22:51 -0700</bug_when>
    <thetext>OwnPtr very nearly does what is needed here.  By implementing deleteOwnedPtr with an appropriate argument type, the Gtk port could have g_free called when appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89098</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-22 02:40:29 -0700</bug_when>
    <thetext>Well, &quot;gpointer&quot; is void*.  I think gtk just passes around a whole bunch of void*s, so I&apos;m not sure that would work. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90268</commentid>
    <comment_count>3</comment_count>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-09-05 08:08:44 -0700</bug_when>
    <thetext>*** Bug 20317 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90270</commentid>
    <comment_count>4</comment_count>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-09-05 08:36:10 -0700</bug_when>
    <thetext>I marked 20317 as dup of this even if it was older as there is more discussion here.

I would call it GOwnPtr as g_free is not alwyas the right function to call. Moreover, also a GRefPtr could be useful for GObjects or other refcounted glib structures.

Where should I put the files for GOwnPtr? WebCore/platform/gtk? Or JavascriptCore/wtf with the other ones?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90852</commentid>
    <comment_count>5</comment_count>
      <attachid>23345</attachid>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-09-11 06:39:05 -0700</bug_when>
    <thetext>Created attachment 23345
Add and use smart pointers for glib memory management

- Add GOwnPtr, it behaves like OwnPtr but frees the memory using g_free (or different functions if the glib structs need to be freed with something else).
- Add GRefPtr, it behaves like RefPtr but uses g_object_ref/unref (or other functions if needed).
- I didn&apos;t add a GPassRefPtr as its use would be very limited.
- The private data of GObjects exported by WebKit GTK are now correctly initialised and destroyed. I had to use placement new and calling directly the destructor as the memory is allocated and destroyed by GLib so we cannot call new/delete.
- Switched the existing code to use the new smart pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92063</commentid>
    <comment_count>6</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2008-09-21 19:28:12 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=23345) [edit]
&gt; Add and use smart pointers for glib memory management
&gt; 
&gt; - Add GOwnPtr, it behaves like OwnPtr but frees the memory using g_free (or
&gt; different functions if the glib structs need to be freed with something else).

Why is it not possible to use OwnPtr for that? The windows platform can use it for the various windows types.



</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92319</commentid>
    <comment_count>7</comment_count>
      <attachid>23345</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-23 04:46:04 -0700</bug_when>
    <thetext>Comment on attachment 23345
Add and use smart pointers for glib memory management

ap: I&apos;m not sure it would be possible to use OwnPtr&lt;&gt; for this, since g_free takes a void* and thus it would be difficult to differentiate when things should have fastFree() called on them, vs. g_free.

This patch would be much easier to review if it was just GOwnPtr or GRefPtr, not both.  Or if you were adding one and converting *some* callers, but not all.

I really don&apos;t think I can do a good review of this whole thing as-is.  (Even though I&apos;m *very* excited about this patch landing for Gtk)

Why are you calling the destructor directly here?
+    priv-&gt;~WebKitWebFramePrivate();

And using placement new here?
+    new(priv) WebKitWebFramePrivate;

(btw, we would normally put a space between new and ( -- at least that how every other placement new in WebCore that I have seen has been written)

I look forward to reviewing this patch in smaller pieces.  Maybe you can find someone who can handle it in this huge hunk, but that&apos;s not me. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93891</commentid>
    <comment_count>8</comment_count>
      <attachid>24050</attachid>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-10-03 07:17:40 -0700</bug_when>
    <thetext>Created attachment 24050
Add GOwnPtr

This patch just adds GOwnPtr and converts just some small parts of the code to use it, just for testing. When the patch is ready and committed I will post another patch to add GRefPtr and the a patch to convert the existing code to use them.

(In reply to comment #6)
&gt; Why is it not possible to use OwnPtr for that? The windows platform can use it
&gt; for the various windows types.

Because they are different types from the ones used elsewhere in WebCore, while GOwnPtr is for types that could be allocated both with new or g_malloc. For instance the value held by GOwnPtr&lt;gchar&gt; (gchar is the same as char) will be deleted with g_free, while the one held by OwnPtr&lt;char&gt; will be deleted with delete.
Moreover, in the future we could want to add a way to use different free functions, for instance if the data is allocated with the slice allocator instead of the normal one.

&gt; Why are you calling the destructor directly here?
&gt; +    priv-&gt;~WebKitWebFramePrivate();

&gt; And using placement new here?
&gt; +    new(priv) WebKitWebFramePrivate;

The memory is allocated by glib with g_malloc but I still have to initialise the struct to have the objects contained in it initialised and destroyed.

&gt; (btw, we would normally put a space between new and ( -- at least that how
&gt; every other placement new in WebCore that I have seen has been written)

I will fix it in the patch including this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93939</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 12:46:12 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt;&gt; Why is it not possible to use OwnPtr for that? The windows platform can use it
&gt;&gt; for the various windows types.

By the way, I was the one who made OwnPtr work for the Windows types, and I think that was probably a mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93943</commentid>
    <comment_count>10</comment_count>
      <attachid>24050</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-03 12:53:27 -0700</bug_when>
    <thetext>Comment on attachment 24050
Add GOwnPtr

Are you sure that overloading this for GDir and making it close is the right thing to do? We don&apos;t do this for OwnPtr and FILE -- we try to limit ourselves to things that are just simple freeing of memory.

 #include &lt;wtf/Noncopyable.h&gt;
+#if PLATFORM(GTK)
+#include &lt;wtf/GOwnPtr.h&gt;
+#endif

We normally leave a blank line to paragraph each #if section of includes separately.

+    template &lt;typename T&gt; inline void freeOwnedPtr(T* ptr) { g_free(reinterpret_cast&lt;void*&gt;(ptr)); }
+    template&lt;&gt; void freeOwnedPtr&lt;GError&gt;(GError*);
+    template&lt;&gt; void freeOwnedPtr&lt;GList&gt;(GList*);
+    template&lt;&gt; void freeOwnedPtr&lt;GCond&gt;(GCond*);
+    template&lt;&gt; void freeOwnedPtr&lt;GMutex&gt;(GMutex*);
+    template&lt;&gt; void freeOwnedPtr&lt;GPatternSpec&gt;(GPatternSpec*);
+    template&lt;&gt; void freeOwnedPtr&lt;GDir&gt;(GDir*);

The name for this needs to include &quot;G&quot; in it. We might later want to make one that works with plain old free or with fastFree.

+        T*&amp; rawPtr() { return m_ptr; }

I&apos;m sort of disappointed to see this. With this function, you can easily cause a storage leak, overwriting something that&apos;s not freed. Maybe we should change this to have an assertion that m_ptr is 0, and give it a name that makes it clear that it&apos;s specifically for &quot;out&quot; arguments.

If this is something good, we probably want it in both GOwnPtr and OwnPtr, I think.

I&apos;ll say review+ even though I think those things should be resolved. The patch is OK as-is, even though I think it could be improved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95155</commentid>
    <comment_count>11</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-10-13 04:47:35 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 24050 [edit])
&gt; 
&gt; I&apos;ll say review+ even though I think those things should be resolved. The patch
&gt; is OK as-is, even though I think it could be improved.

Landed GOwnPtr patch in r37556. Will keep this bug open as some stuff still needs to be reviewed and landed from the original patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95331</commentid>
    <comment_count>12</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-10-14 12:24:45 -0700</bug_when>
    <thetext>I&apos;ve set up https://bugs.webkit.org/show_bug.cgi?id=21594 for moving stuff to GOwnPtr. Closing this now as the patch already landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23345</attachid>
            <date>2008-09-11 06:39:05 -0700</date>
            <delta_ts>2008-10-03 07:17:40 -0700</delta_ts>
            <desc>Add and use smart pointers for glib memory management</desc>
            <filename>glib-smart-pointers.patch</filename>
            <type>text/plain</type>
            <size>105232</size>
            <attacher name="Marco Barisione">marco.barisione</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbmUgMzYzMzMpCisrKyBKYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5hbQkoY29waWEgbG9jYWxlKQpAQCAtMjMzLDYgKzIzMyw5IEBACiAJ
SmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0Zv
cndhcmQuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0dldFB0ci5oIFwKKwlKYXZhU2NyaXB0Q29y
ZS93dGYvR093blB0ci5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmggXAorCUph
dmFTY3JpcHRDb3JlL3d0Zi9HUmVmUHRyLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoQ291
bnRlZFNldC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvSGFzaEZ1bmN0aW9ucy5oIFwKIAlKYXZh
U2NyaXB0Q29yZS93dGYvSGFzaEl0ZXJhdG9ycy5oIFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0
Zi9HT3duUHRyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvR093blB0ci5j
cHAJKHJldmlzaW9uZSAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0dPd25QdHIuY3BwCShyZXZp
c2lvbmUgMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEgTHRkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdPd25QdHIuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlIDw+IHZvaWQgZnJlZU93bmVkUHRyPEdFcnJvcj4oR0Vycm9yKiBwdHIpCit7CisgICAgaWYg
KHB0cikKKyAgICAgICAgZ19lcnJvcl9mcmVlKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQg
ZnJlZU93bmVkUHRyPEdMaXN0PihHTGlzdCogcHRyKQoreworICAgIGdfbGlzdF9mcmVlKHB0cik7
Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkUHRyPEdDb25kPihHQ29uZCogcHRyKQor
eworICAgIGlmIChwdHIpCisgICAgICAgIGdfY29uZF9mcmVlKHB0cik7Cit9CisKK3RlbXBsYXRl
IDw+IHZvaWQgZnJlZU93bmVkUHRyPEdNdXRleD4oR011dGV4KiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ19tdXRleF9mcmVlKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJl
ZU93bmVkUHRyPEdQYXR0ZXJuU3BlYz4oR1BhdHRlcm5TcGVjKiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ19wYXR0ZXJuX3NwZWNfZnJlZShwdHIpOworfQorCit0ZW1wbGF0ZSA8PiB2
b2lkIGZyZWVPd25lZFB0cjxHRGlyPihHRGlyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAg
ICAgZ19kaXJfY2xvc2UocHRyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
d3RmL1RocmVhZGluZy5oCShyZXZpc2lvbmUgMzYzMzMpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYv
VGhyZWFkaW5nLmgJKGNvcGlhIGxvY2FsZSkKQEAgLTYyLDYgKzYyLDkgQEAKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8d3RmL0dPd25QdHIu
aD4KKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOX09TKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4K
QEAgLTExNCw4ICsxMTcsOCBAQAogdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgUGxhdGZvcm1NdXRl
eDsKIHR5cGVkZWYgcHRocmVhZF9jb25kX3QgUGxhdGZvcm1Db25kaXRpb247CiAjZWxpZiBQTEFU
Rk9STShHVEspCi10eXBlZGVmIEdNdXRleCogUGxhdGZvcm1NdXRleDsKLXR5cGVkZWYgR0NvbmQq
IFBsYXRmb3JtQ29uZGl0aW9uOwordHlwZWRlZiBHT3duUHRyPEdNdXRleD4gUGxhdGZvcm1NdXRl
eDsKK3R5cGVkZWYgR093blB0cjxHQ29uZD4gUGxhdGZvcm1Db25kaXRpb247CiAjZWxpZiBQTEFU
Rk9STShRVCkKIHR5cGVkZWYgUU11dGV4KiBQbGF0Zm9ybU11dGV4OwogdHlwZWRlZiBRV2FpdENv
bmRpdGlvbiogUGxhdGZvcm1Db25kaXRpb247CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvR093
blB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmgJKHJldmlz
aW9uZSAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0dPd25QdHIuaAkocmV2aXNpb25lIDApCkBA
IC0wLDAgKzEsMTAxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEdPd25QdHJfaAorI2RlZmluZSBHT3duUHRy
X2gKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7CisKK25hbWVzcGFjZSBXVEYgeworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBmcmVlT3duZWRQdHIoVCogcHRyKSB7IGdf
ZnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIpKTsgfQorICAgIHRlbXBsYXRlPD4gdm9p
ZCBmcmVlT3duZWRQdHI8R0Vycm9yPihHRXJyb3IqKTsKKyAgICB0ZW1wbGF0ZTw+IHZvaWQgZnJl
ZU93bmVkUHRyPEdMaXN0PihHTGlzdCopOworICAgIHRlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRQ
dHI8R0NvbmQ+KEdDb25kKik7CisgICAgdGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZFB0cjxHTXV0
ZXg+KEdNdXRleCopOworICAgIHRlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRQdHI8R1BhdHRlcm5T
cGVjPihHUGF0dGVyblNwZWMqKTsKKyAgICB0ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVkUHRyPEdE
aXI+KEdEaXIqKTsKKworICAgIHRlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRQdHI8R3RrV2lkZ2V0
PihHdGtXaWRnZXQqKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBHT3duUHRy
IDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgR093blB0cihU
KiBwdHIgPSAwKSA6IG1fcHRyKHB0cikgeyB9CisgICAgICAgIH5HT3duUHRyKCkgeyBmcmVlT3du
ZWRQdHIobV9wdHIpOyB9CisKKyAgICAgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7
IH0KKyAgICAgICAgVCogcmVsZWFzZSgpIHsgVCogcHRyID0gbV9wdHI7IG1fcHRyID0gMDsgcmV0
dXJuIHB0cjsgfQorICAgICAgICBUKiYgcmF3UHRyKCkgeyByZXR1cm4gbV9wdHI7IH0KKworICAg
ICAgICB2b2lkIHNldChUKiBwdHIpIHsgQVNTRVJUKCFwdHIgfHwgbV9wdHIgIT0gcHRyKTsgZnJl
ZU93bmVkUHRyKG1fcHRyKTsgbV9wdHIgPSBwdHI7IH0KKyAgICAgICAgdm9pZCBjbGVhcigpIHsg
ZnJlZU93bmVkUHRyKG1fcHRyKTsgbV9wdHIgPSAwOyB9CisKKyAgICAgICAgVCYgb3BlcmF0b3Iq
KCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9CisgICAgICAgIFQqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVybiBtX3B0cjsgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9CisKKyAgICAgICAg
Ly8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRv
IGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAgICAgICB0eXBlZGVmIFQq
IEdPd25QdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlOworICAgICAgICBvcGVyYXRvciBVbnNwZWNp
ZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmR093blB0cjo6bV9wdHIgOiAw
OyB9CisKKyAgICAgICAgdm9pZCBzd2FwKEdPd25QdHImIG8pIHsgc3RkOjpzd2FwKG1fcHRyLCBv
Lm1fcHRyKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVCogbV9wdHI7CisgICAgfTsKKyAg
ICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgc3dhcChHT3duUHRyPFQ+
JiBhLCBHT3duUHRyPFQ+JiBiKSB7IGEuc3dhcChiKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR093blB0cjxU
PiYgYSwgVSogYikKKyAgICB7IAorICAgICAgICByZXR1cm4gYS5nZXQoKSA9PSBiOyAKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29s
IG9wZXJhdG9yPT0oVCogYSwgY29uc3QgR093blB0cjxVPiYgYikgCisgICAgeworICAgICAgICBy
ZXR1cm4gYSA9PSBiLmdldCgpOyAKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHT3duUHRyPFQ+JiBhLCBV
KiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYjsgCisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0o
VCogYSwgY29uc3QgR093blB0cjxVPiYgYikKKyAgICB7IAorICAgICAgICByZXR1cm4gYSAhPSBi
LmdldCgpOyAKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB0
eXBlbmFtZSBHT3duUHRyPFQ+OjpQdHJUeXBlIGdldFB0cihjb25zdCBHT3duUHRyPFQ+JiBwKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHAuZ2V0KCk7CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjpHT3duUHRyOworCisjZW5kaWYgLy8gR093blB0cl9oCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS93dGYvR1JlZlB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3d0Zi9HUmVmUHRyLmgJKHJldmlzaW9uZSAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0dSZWZQ
dHIuaAkocmV2aXNpb25lIDApCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIFdURl9HUmVmUHRyX2gKKyNkZWZpbmUgV1RGX0dSZWZQdHJfaAorCisjaW5jbHVkZSAi
QWx3YXlzSW5saW5lLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisKK25hbWVzcGFjZSBXVEYgeworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgVCogcmVmUHRyKFQqIHB0cikgeyBpZiAocHRyKSBnX29iamVjdF9yZWYoR19PQkpFQ1QocHRy
KSk7IHJldHVybiBwdHI7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQg
ZGVyZWZQdHIoVCogcHRyKSB7IGlmIChwdHIpIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKHB0cikp
OyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgR1JlZlB0ciB7CisgICAgcHVi
bGljOgorICAgICAgICBHUmVmUHRyKCkgOiBtX3B0cigwKSB7IH0KKyAgICAgICAgLy8gR1JlZlB0
ciB0YWtlcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBwdHIsIG1ha2luZyBpdCBlYXN5IHRvIHVzZSBp
dCB3aXRoIEdMaWIuCisgICAgICAgIEdSZWZQdHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyB9Cisg
ICAgICAgIEdSZWZQdHIoY29uc3QgR1JlZlB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IGlmIChU
KiBwdHIgPSBtX3B0cikgcmVmUHRyKHB0cik7IH0KKworICAgICAgICB+R1JlZlB0cigpIHsgaWYg
KFQqIHB0ciA9IG1fcHRyKSBkZXJlZlB0cihwdHIpOyB9CisKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+IEdSZWZQdHIoY29uc3QgR1JlZlB0cjxVPiYgbykgOiBtX3B0cihvLmdldCgpKSB7
IGlmIChUKiBwdHIgPSBtX3B0cikgcmVmUHRyKHB0cik7IH0KKworICAgICAgICBUKiBnZXQoKSBj
b25zdCB7IHJldHVybiBtX3B0cjsgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKSB7IGlmIChUKiBw
dHIgPSBtX3B0cikgZGVyZWZQdHIocHRyKTsgbV9wdHIgPSAwOyB9CisKKyAgICAgICAgVCYgb3Bl
cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CisgICAgICAgIEFMV0FZU19JTkxJTkUg
VCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9wdHI7IH0KKworICAgICAgICAvLyBUaGlzIGNv
bnZlcnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQg
bm90IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCisgICAgICAgIHR5cGVkZWYgVCogR1JlZlB0cjo6
KlVuc3BlY2lmaWVkQm9vbFR5cGU7CisgICAgICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA/ICZHUmVmUHRyOjptX3B0ciA6IDA7IH0KKworICAg
ICAgICBHUmVmUHRyJiBvcGVyYXRvcj0oY29uc3QgR1JlZlB0ciYpOworICAgICAgICBHUmVmUHRy
JiBvcGVyYXRvcj0oVCopOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gR1JlZlB0ciYg
b3BlcmF0b3I9KGNvbnN0IEdSZWZQdHI8VT4mKTsKKworICAgICAgICB2b2lkIHN3YXAoR1JlZlB0
ciYpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIFQqIGhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KC0xKTsgfQorCisgICAgICAgIFQq
IG1fcHRyOworICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIEdSZWZQ
dHI8VD4mIEdSZWZQdHI8VD46Om9wZXJhdG9yPShjb25zdCBHUmVmUHRyPFQ+JiBvKQorICAgIHsK
KyAgICAgICAgVCogb3B0ciA9IG8uZ2V0KCk7CisgICAgICAgIGlmIChvcHRyKQorICAgICAgICAg
ICAgcmVmUHRyKG9wdHIpOworICAgICAgICBUKiBwdHIgPSBtX3B0cjsKKyAgICAgICAgbV9wdHIg
PSBvcHRyOworICAgICAgICBpZiAocHRyKQorICAgICAgICAgICAgZGVyZWZQdHIocHRyKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gaW5saW5lIEdSZWZQdHI8VD4mIEdSZWZQdHI8VD46Om9wZXJh
dG9yPShjb25zdCBHUmVmUHRyPFU+JiBvKQorICAgIHsKKyAgICAgICAgVCogb3B0ciA9IG8uZ2V0
KCk7CisgICAgICAgIGlmIChvcHRyKQorICAgICAgICAgICAgcmVmUHRyKG9wdHIpOworICAgICAg
ICBUKiBwdHIgPSBtX3B0cjsKKyAgICAgICAgbV9wdHIgPSBvcHRyOworICAgICAgICBpZiAocHRy
KQorICAgICAgICAgICAgZGVyZWZQdHIocHRyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAg
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgR1JlZlB0cjxUPiYgR1JlZlB0
cjxUPjo6b3BlcmF0b3I9KFQqIG9wdHIpCisgICAgeworICAgICAgICBUKiBwdHIgPSBtX3B0cjsK
KyAgICAgICAgbV9wdHIgPSBvcHRyOworICAgICAgICBpZiAocHRyKQorICAgICAgICAgICAgZGVy
ZWZQdHIocHRyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRlbXBsYXRl
IDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBHUmVmUHRyPFQ+Ojpzd2FwKEdSZWZQdHI8VD4mIG8pCisg
ICAgeworICAgICAgICBzdGQ6OnN3YXAobV9wdHIsIG8ubV9wdHIpOworICAgIH0KKworICAgIHRl
bXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKEdSZWZQdHI8VD4mIGEsIEdSZWZQdHI8
VD4mIGIpCisgICAgeworICAgICAgICBhLnN3YXAoYik7CisgICAgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR1Jl
ZlB0cjxUPiYgYSwgY29uc3QgR1JlZlB0cjxVPiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBh
LmdldCgpID09IGIuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR1JlZlB0cjxUPiYgYSwgVSog
YikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmdldCgpID09IGI7CisgICAgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oVCog
YSwgY29uc3QgR1JlZlB0cjxVPiYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGIuZ2V0
KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgR1JlZlB0cjxUPiYgYSwgY29uc3QgR1JlZlB0cjxVPiYg
YikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgR1JlZlB0cjxUPiYgYSwgVSogYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmdl
dCgpICE9IGI7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBib29sIG9wZXJhdG9yIT0oVCogYSwgY29uc3QgR1JlZlB0cjxVPiYgYikKKyAgICB7
CisgICAgICAgIHJldHVybiBhICE9IGIuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBHUmVmUHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nh
c3QoY29uc3QgR1JlZlB0cjxVPiYgcCkKKyAgICB7CisgICAgICAgIHJldHVybiBHUmVmUHRyPFQ+
KHN0YXRpY19jYXN0PFQqPihwLmdldCgpKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBHUmVmUHRyPFQ+IGNvbnN0X3BvaW50ZXJfY2FzdChj
b25zdCBHUmVmUHRyPFU+JiBwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8VD4oY29u
c3RfY2FzdDxUKj4ocC5nZXQoKSkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgVCogZ2V0UHRyKGNvbnN0IEdSZWZQdHI8VD4mIHApCisgICAgeworICAgICAgICBy
ZXR1cm4gcC5nZXQoKTsKKyAgICB9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OkdSZWZQdHI7Cit1c2luZyBXVEY6OnJlZlB0cjsKK3VzaW5nIFdURjo6ZGVyZWZQdHI7Cit1c2lu
ZyBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q7Cit1c2luZyBXVEY6OmNvbnN0X3BvaW50ZXJfY2Fz
dDsKKworI2VuZGlmIC8vIFdURl9HUmVmUHRyX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9U
aHJlYWRpbmdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRp
bmdHdGsuY3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFk
aW5nR3RrLmNwcAkoY29waWEgbG9jYWxlKQpAQCAtMTYxLDIyICsxNjEsMjEgQEAKIAogTXV0ZXg6
On5NdXRleCgpCiB7Ci0gICAgZ19tdXRleF9mcmVlKG1fbXV0ZXgpOwogfQogCiB2b2lkIE11dGV4
Ojpsb2NrKCkKIHsKLSAgICBnX211dGV4X2xvY2sobV9tdXRleCk7CisgICAgZ19tdXRleF9sb2Nr
KG1fbXV0ZXguZ2V0KCkpOwogfQogCiBib29sIE11dGV4Ojp0cnlMb2NrKCkKIHsKLSAgICByZXR1
cm4gZ19tdXRleF90cnlsb2NrKG1fbXV0ZXgpOworICAgIHJldHVybiBnX211dGV4X3RyeWxvY2so
bV9tdXRleC5nZXQoKSk7CiB9CiAKIHZvaWQgTXV0ZXg6OnVubG9jaygpCiB7Ci0gICAgZ19tdXRl
eF91bmxvY2sobV9tdXRleCk7CisgICAgZ19tdXRleF91bmxvY2sobV9tdXRleC5nZXQoKSk7CiB9
CiAKIFRocmVhZENvbmRpdGlvbjo6VGhyZWFkQ29uZGl0aW9uKCkKQEAgLTE4NiwxMiArMTg1LDEx
IEBACiAKIFRocmVhZENvbmRpdGlvbjo6flRocmVhZENvbmRpdGlvbigpCiB7Ci0gICAgZ19jb25k
X2ZyZWUobV9jb25kaXRpb24pOwogfQogCiB2b2lkIFRocmVhZENvbmRpdGlvbjo6d2FpdChNdXRl
eCYgbXV0ZXgpCiB7Ci0gICAgZ19jb25kX3dhaXQobV9jb25kaXRpb24sIG11dGV4LmltcGwoKSk7
CisgICAgZ19jb25kX3dhaXQobV9jb25kaXRpb24uZ2V0KCksIG11dGV4LmltcGwoKS5nZXQoKSk7
CiB9CiAKIGJvb2wgVGhyZWFkQ29uZGl0aW9uOjp0aW1lZFdhaXQoTXV0ZXgmIG11dGV4LCBkb3Vi
bGUgaW50ZXJ2YWwpCkBAIC0yMTQsMTcgKzIxMiwxNyBAQAogICAgICAgICB0YXJnZXRUaW1lLnR2
X3NlYysrOwogICAgIH0KIAotICAgIHJldHVybiBnX2NvbmRfdGltZWRfd2FpdChtX2NvbmRpdGlv
biwgbXV0ZXguaW1wbCgpLCAmdGFyZ2V0VGltZSk7CisgICAgcmV0dXJuIGdfY29uZF90aW1lZF93
YWl0KG1fY29uZGl0aW9uLmdldCgpLCBtdXRleC5pbXBsKCkuZ2V0KCksICZ0YXJnZXRUaW1lKTsK
IH0KIAogdm9pZCBUaHJlYWRDb25kaXRpb246OnNpZ25hbCgpCiB7Ci0gICAgZ19jb25kX3NpZ25h
bChtX2NvbmRpdGlvbik7CisgICAgZ19jb25kX3NpZ25hbChtX2NvbmRpdGlvbi5nZXQoKSk7CiB9
CiAKIHZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQogewotICAgIGdfY29uZF9icm9h
ZGNhc3QobV9jb25kaXRpb24pOworICAgIGdfY29uZF9icm9hZGNhc3QobV9jb25kaXRpb24uZ2V0
KCkpOwogfQogCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uZSAzNjMzMykKKysrIEphdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkoY29waWEgbG9jYWxlKQpAQCAtMSwzICsxLDczIEBACisyMDA4LTA5
LTExICBNYXJjbyBCYXJpc2lvbmUgIDxtYXJjby5iYXJpc2lvbmVAY29sbGFib3JhLmNvLnVrPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdCBH
VEsgUG9ydCBuZWVkcyBhIHNtYXJ0cG9pbnRlciB0byBoYW5kbGUgZ19mcmVlIChHRnJlZVB0cj8p
CisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDgzCisK
KyAgICAgICAgQWRkIGEgR093blB0ciBzbWFydCBwb2ludGVyIChzaW1pbGFyIHRvIE93blB0cikg
dG8gaGFuZGxlIG1lbW9yeQorICAgICAgICBhbGxvY2F0ZWQgYnkgR0xpYi4KKyAgICAgICAgQWRk
IGEgR1JlZlB0ciBzbWFydCBwb2ludGVyIChzaW1pbGFyIHRvIFJlZlB0cikgdG8gaGFuZGxlIHJl
ZmVyZW5jZQorICAgICAgICBjb3VudGVkIG9iamVjdHMgYWxsb2NhdGVkIGJ5IEdMaWIvR09iamVj
dC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHd0Zi9HT3duUHRyLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OkdFcnJvcik6CisgICAgICAgIChXVEY6OkdMaXN0KToK
KyAgICAgICAgKFdURjo6R0NvbmQpOgorICAgICAgICAoV1RGOjpHTXV0ZXgpOgorICAgICAgICAo
V1RGOjpHUGF0dGVyblNwZWMpOgorICAgICAgICAoV1RGOjpHRGlyKToKKyAgICAgICAgKiB3dGYv
R093blB0ci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6ZnJlZU93bmVkUHRyKToKKyAgICAgICAg
KFdURjo6R093blB0cjo6R093blB0cik6CisgICAgICAgIChXVEY6OkdPd25QdHI6On5HT3duUHRy
KToKKyAgICAgICAgKFdURjo6R093blB0cjo6Z2V0KToKKyAgICAgICAgKFdURjo6R093blB0cjo6
cmVsZWFzZSk6CisgICAgICAgIChXVEY6OkdPd25QdHI6OnJhd1B0cik6CisgICAgICAgIChXVEY6
OkdPd25QdHI6OnNldCk6CisgICAgICAgIChXVEY6OkdPd25QdHI6OmNsZWFyKToKKyAgICAgICAg
KFdURjo6R093blB0cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6R093blB0cjo6b3BlcmF0
b3ItPik6CisgICAgICAgIChXVEY6OkdPd25QdHI6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6
OkdPd25QdHI6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAgICAoV1RGOjpH
T3duUHRyOjpzd2FwKToKKyAgICAgICAgKFdURjo6c3dhcCk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6Z2V0UHRy
KToKKyAgICAgICAgKiB3dGYvR1JlZlB0ci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cmVmUHRy
KToKKyAgICAgICAgKFdURjo6ZGVyZWZQdHIpOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpHUmVm
UHRyKToKKyAgICAgICAgKFdURjo6R1JlZlB0cjo6fkdSZWZQdHIpOgorICAgICAgICAoV1RGOjpH
UmVmUHRyOjpnZXQpOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpjbGVhcik6CisgICAgICAgIChX
VEY6OkdSZWZQdHI6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6OkdSZWZQdHI6Om9wZXJhdG9y
LT4pOgorICAgICAgICAoV1RGOjpHUmVmUHRyOjpvcGVyYXRvciEpOgorICAgICAgICAoV1RGOjpH
UmVmUHRyOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFdURjo6R1Jl
ZlB0cjo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6OjpvcGVyYXRvcik6
CisgICAgICAgIChXVEY6Ojo6c3dhcCk6CisgICAgICAgIChXVEY6OnN3YXApOgorICAgICAgICAo
V1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChX
VEY6OnN0YXRpY19wb2ludGVyX2Nhc3QpOgorICAgICAgICAoV1RGOjpjb25zdF9wb2ludGVyX2Nh
c3QpOgorICAgICAgICAoV1RGOjpnZXRQdHIpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDog
VXNlIEdPd25QdHIuCisgICAgICAgICogd3RmL1RocmVhZGluZ0d0ay5jcHA6IERpdHRvLgorICAg
ICAgICAoV1RGOjpNdXRleDo6fk11dGV4KToKKyAgICAgICAgKFdURjo6TXV0ZXg6OmxvY2spOgor
ICAgICAgICAoV1RGOjpNdXRleDo6dHJ5TG9jayk6CisgICAgICAgIChXVEY6Ok11dGV4Ojp1bmxv
Y2spOgorICAgICAgICAoV1RGOjpUaHJlYWRDb25kaXRpb246On5UaHJlYWRDb25kaXRpb24pOgor
ICAgICAgICAoV1RGOjpUaHJlYWRDb25kaXRpb246OndhaXQpOgorICAgICAgICAoV1RGOjpUaHJl
YWRDb25kaXRpb246OnRpbWVkV2FpdCk6CisgICAgICAgIChXVEY6OlRocmVhZENvbmRpdGlvbjo6
c2lnbmFsKToKKyAgICAgICAgKFdURjo6VGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QpOgorCiAy
MDA4LTA5LTEwICBTaW1vbiBIYXVzbWFubiAgPGhhdXNtYW5uQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgTm90IHJldmlld2VkIGJ1dCB0cml2aWFsIG9uZS1saW5lciBmb3IgeWV0IHVudXNlZCBtYWNy
by4KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVD
bGllbnRHdGsuY3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcAkoY29waWEgbG9jYWxlKQpAQCAtNTksNyArNTks
NyBAQAogCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdf
R0VUX1BSSVZBVEUod2ViVmlldyk7CiAgICAgR3RrV2lkZ2V0KiBpbUNvbnRleHRNZW51ID0gZ3Rr
X21lbnVfbmV3KCk7Ci0gICAgZ3RrX2ltX211bHRpY29udGV4dF9hcHBlbmRfbWVudWl0ZW1zKEdU
S19JTV9NVUxUSUNPTlRFWFQocHJpdi0+aW1Db250ZXh0KSwgR1RLX01FTlVfU0hFTEwoaW1Db250
ZXh0TWVudSkpOworICAgIGd0a19pbV9tdWx0aWNvbnRleHRfYXBwZW5kX21lbnVpdGVtcyhHVEtf
SU1fTVVMVElDT05URVhUKHByaXYtPmltQ29udGV4dC5nZXQoKSksIEdUS19NRU5VX1NIRUxMKGlt
Q29udGV4dE1lbnUpKTsKIAogICAgIGd0a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoR1RLX01FTlVf
SVRFTShtZW51aXRlbSksIGltQ29udGV4dE1lbnUpOwogCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBX
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKGNvcGlhIGxvY2Fs
ZSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAjaW5jbHVkZSAiRGF0
YWJhc2VUcmFja2VyLmgiCiAjZW5kaWYKKyNpbmNsdWRlIDx3dGYvR093blB0ci5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjI2LDExICsyMjcsMTAgQEAKIGJvb2wgQ2hyb21l
Q2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpCiB7CiAg
ICAgZ2Jvb2xlYW4gcmV0dmFsOwotICAgIGdjaGFyKiB2YWx1ZSA9IDA7Ci0gICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG1fd2ViVmlldywgInNjcmlwdC1wcm9tcHQiLCBraXQoZnJhbWUpLCBtZXNz
YWdlLnV0ZjgoKS5kYXRhKCksIGRlZmF1bHRWYWx1ZS51dGY4KCkuZGF0YSgpLCAmdmFsdWUsICZy
ZXR2YWwpOworICAgIEdPd25QdHI8Z2NoYXI+IHZhbHVlOworICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZShtX3dlYlZpZXcsICJzY3JpcHQtcHJvbXB0Iiwga2l0KGZyYW1lKSwgbWVzc2FnZS51dGY4
KCkuZGF0YSgpLCBkZWZhdWx0VmFsdWUudXRmOCgpLmRhdGEoKSwgJnZhbHVlLnJhd1B0cigpLCAm
cmV0dmFsKTsKICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgcmVzdWx0ID0gU3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7Ci0gICAgICAgIGdfZnJlZSh2YWx1ZSk7CisgICAgICAgIHJlc3VsdCA9IFN0
cmluZzo6ZnJvbVVURjgodmFsdWUuZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uZSAzNjMzMykKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShjb3BpYSBsb2Nh
bGUpCkBAIC01MSw2ICs1MSw3IEBACiAjaWYgUExBVEZPUk0oVU5JWCkKICNpbmNsdWRlIDxzeXMv
dXRzbmFtZS5oPgogI2VuZGlmCisjaW5jbHVkZSA8d3RmL0dSZWZQdHIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTI2NiwxMyArMjY3LDEwIEBACiAgICAgICAgIHJldHVybjsK
IAogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUp
OwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0X25ldHdvcmtfcmVx
dWVzdF9uZXcocmVzb3VyY2VSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIEdSZWZQdHI8V2ViS2l0TmV0d29ya1JlcXVlc3Q+IHJlcXVlc3QgPSB3ZWJraXRfbmV0d29y
a19yZXF1ZXN0X25ldyhyZXNvdXJjZVJlcXVlc3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CiAgICAgV2ViS2l0TmF2aWdhdGlvblJlc3BvbnNlIHJlc3BvbnNlOworICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibmF2aWdhdGlvbi1yZXF1ZXN0ZWQiLCBtX2ZyYW1lLCBy
ZXF1ZXN0LmdldCgpLCAmcmVzcG9uc2UpOwogCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdl
YlZpZXcsICJuYXZpZ2F0aW9uLXJlcXVlc3RlZCIsIG1fZnJhbWUsIHJlcXVlc3QsICZyZXNwb25z
ZSk7Ci0KLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQogICAgIGlmIChyZXNwb25zZSA9
PSBXRUJLSVRfTkFWSUdBVElPTl9SRVNQT05TRV9JR05PUkUpIHsKICAgICAgICAgKGNvcmUobV9m
cmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTUzNyw4ICs1MzUsNyBAQAogICAgICAqIFRoaXMgbWVhbnMgdGhlIFVSSSBp
cyB2YWxpZCBhbmQgc3VjY2Vzc2Z1bGx5IGlkZW50aWZ5IHRoZSBwYWdlIHRoYXQncyBnb2luZyB0
byBiZSBsb2FkZWQuCiAgICAgICovCiAgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBmcmFtZURh
dGEgPSBXRUJLSVRfV0VCX0ZSQU1FX0dFVF9QUklWQVRFKG1fZnJhbWUpOwotICAgIGdfZnJlZShm
cmFtZURhdGEtPnVyaSk7Ci0gICAgZnJhbWVEYXRhLT51cmkgPSBnX3N0cmR1cChjb3JlKG1fZnJh
bWUpLT5sb2FkZXIoKS0+dXJsKCkucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZnJh
bWVEYXRhLT51cmkuc2V0KGdfc3RyZHVwKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT51cmwoKS5w
cmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpKSk7CiAKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9mcmFtZSwgImxvYWQtY29tbWl0dGVkIik7CiAKQEAgLTYzNyw4ICs2MzQsNyBAQAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgS1VS
TCYgdXJsKQogewogICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogZnJhbWVEYXRhID0gV0VCS0lU
X1dFQl9GUkFNRV9HRVRfUFJJVkFURShtX2ZyYW1lKTsKLSAgICBnX2ZyZWUoZnJhbWVEYXRhLT50
aXRsZSk7Ci0gICAgZnJhbWVEYXRhLT50aXRsZSA9IGdfc3RyZHVwKHRpdGxlLnV0ZjgoKS5kYXRh
KCkpOworICAgIGZyYW1lRGF0YS0+dGl0bGUuc2V0KGdfc3RyZHVwKHRpdGxlLnV0ZjgoKS5kYXRh
KCkpKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQ29u
dGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50
IGxlbmd0aFJlY2VpdmVkKQpAQCAtNzg2LDcgKzc4Miw3IEBACiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KS0+YWxsb2NhdGlvbi5oZWln
aHQpOwogICAgICAgICBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGZyYW1lLCBzaXplKTsKICAg
ICAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BS
SVZBVEUoY29udGFpbmluZ1dpbmRvdyk7Ci0gICAgICAgIGZyYW1lVmlldy0+c2V0R3RrQWRqdXN0
bWVudHMocHJpdi0+aG9yaXpvbnRhbEFkanVzdG1lbnQsIHByaXYtPnZlcnRpY2FsQWRqdXN0bWVu
dCk7CisgICAgICAgIGZyYW1lVmlldy0+c2V0R3RrQWRqdXN0bWVudHMocHJpdi0+aG9yaXpvbnRh
bEFkanVzdG1lbnQuZ2V0KCksIHByaXYtPnZlcnRpY2FsQWRqdXN0bWVudC5nZXQoKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGZyYW1lVmlldyA9IG5ldyBGcmFtZVZpZXcoZnJhbWUpOwogCkluZGV4
OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCShyZXZp
c2lvbmUgMzYzMzMpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0
ay5jcHAJKGNvcGlhIGxvY2FsZSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJ3ZWJraXRw
cml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKQEAgLTU1LDEyICs1NiwxMSBAQAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoY2xp
ZW50LT5tX3dlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7
CiAgICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7CiAKLSAgICBnY2hhciogcHJl
ZWRpdCA9IE5VTEw7CisgICAgR093blB0cjxnY2hhcj4gcHJlZWRpdDsKICAgICBnaW50IGN1cnNv
clBvcyA9IDA7CiAgICAgLy8gV2UgaWdub3JlIHRoZSBwcm92aWRlZCBQYW5nb0F0dHJMaXN0IGZv
ciBub3cuCi0gICAgZ3RrX2ltX2NvbnRleHRfZ2V0X3ByZWVkaXRfc3RyaW5nKGNvbnRleHQsICZw
cmVlZGl0LCBOVUxMLCAmY3Vyc29yUG9zKTsKLSAgICBTdHJpbmcgcHJlZWRpdFN0cmluZyA9IFN0
cmluZzo6ZnJvbVVURjgocHJlZWRpdCk7Ci0gICAgZ19mcmVlKHByZWVkaXQpOworICAgIGd0a19p
bV9jb250ZXh0X2dldF9wcmVlZGl0X3N0cmluZyhjb250ZXh0LCAmcHJlZWRpdC5yYXdQdHIoKSwg
MCwgJmN1cnNvclBvcyk7CisgICAgU3RyaW5nIHByZWVkaXRTdHJpbmcgPSBTdHJpbmc6OmZyb21V
VEY4KHByZWVkaXQuZ2V0KCkpOwogCiAgICAgLy8gc2V0Q29tcG9zaXRpb24oKSB3aWxsIHJlcGxh
Y2UgdGhlIHVzZXIgc2VsZWN0aW9uIGlmIHBhc3NlZCBhbiBlbXB0eQogICAgIC8vIHByZWVkaXQu
IFdlIGRvbid0IHdhbnQgdGhpcyB0byBoYXBwZW4uCkBAIC03NywxNSArNzcsMTUgQEAKICAgICBX
ZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IG1fd2ViVmlldy0+cHJpdjsKIAogICAgIGlmIChh
Y3RpdmUpCi0gICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKHByaXYtPmltQ29udGV4dCk7
CisgICAgICAgIGd0a19pbV9jb250ZXh0X2ZvY3VzX2luKHByaXYtPmltQ29udGV4dC5nZXQoKSk7
CiAgICAgZWxzZQotICAgICAgICBndGtfaW1fY29udGV4dF9mb2N1c19vdXQocHJpdi0+aW1Db250
ZXh0KTsKKyAgICAgICAgZ3RrX2ltX2NvbnRleHRfZm9jdXNfb3V0KHByaXYtPmltQ29udGV4dC5n
ZXQoKSk7CiAKICNpZmRlZiBNQUVNT19DSEFOR0VTCiAgICAgaWYgKGFjdGl2ZSkKLSAgICAgICAg
aGlsZG9uX2d0a19pbV9jb250ZXh0X3Nob3cocHJpdi0+aW1Db250ZXh0KTsKKyAgICAgICAgaGls
ZG9uX2d0a19pbV9jb250ZXh0X3Nob3cocHJpdi0+aW1Db250ZXh0LmdldCgpKTsKICAgICBlbHNl
Ci0gICAgICAgIGhpbGRvbl9ndGtfaW1fY29udGV4dF9oaWRlKHByaXYtPmltQ29udGV4dCk7Cisg
ICAgICAgIGhpbGRvbl9ndGtfaW1fY29udGV4dF9oaWRlKHByaXYtPmltQ29udGV4dC5nZXQoKSk7
CiAjZW5kaWYKIH0KIApAQCAtMjIyLDcgKzIyMiw3IEBACiAgICAgdW5zaWduZWQgZW5kOwogICAg
IGlmICghdGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5nZXRDb21wb3NpdGlvblNlbGVjdGlvbihzdGFy
dCwgZW5kKSkgewogICAgICAgICAvLyBndGtfaW1fY29udGV4dF9yZXNldCgpIGNsZWFycyB0aGUg
Y29tcG9zaXRpb24gZm9yIHVzLgotICAgICAgICBndGtfaW1fY29udGV4dF9yZXNldChwcml2LT5p
bUNvbnRleHQpOworICAgICAgICBndGtfaW1fY29udGV4dF9yZXNldChwcml2LT5pbUNvbnRleHQu
Z2V0KCkpOwogICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlv
bldpdGhvdXREaXN0dXJiaW5nU2VsZWN0aW9uKCk7CiAgICAgfQogfQpAQCAtNDU0LDcgKzQ1NCw3
IEBACiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBtX3dlYlZpZXctPnByaXY7CiAK
ICAgICAvLyBUT0RPOiBEaXNwYXRjaCBJRS1jb21wYXRpYmxlIHRleHQgaW5wdXQgZXZlbnRzIGZv
ciBJTSBldmVudHMuCi0gICAgaWYgKGd0a19pbV9jb250ZXh0X2ZpbHRlcl9rZXlwcmVzcyhwcml2
LT5pbUNvbnRleHQsIGV2ZW50LT5rZXlFdmVudCgpLT5nZGtFdmVudEtleSgpKSkKKyAgICBpZiAo
Z3RrX2ltX2NvbnRleHRfZmlsdGVyX2tleXByZXNzKHByaXYtPmltQ29udGV4dC5nZXQoKSwgZXZl
bnQtPmtleUV2ZW50KCktPmdka0V2ZW50S2V5KCkpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKIH0KIApAQCAtNDYyLDE1ICs0NjIsMTUgQEAKICAgICA6IG1fd2ViVmlldyh3
ZWJWaWV3KQogewogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gbV93ZWJWaWV3LT5w
cml2OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+aW1Db250ZXh0LCAiY29tbWl0IiwgR19D
QUxMQkFDSyhpbUNvbnRleHRDb21taXR0ZWQpLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KHByaXYtPmltQ29udGV4dCwgInByZWVkaXQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soaW1Db250ZXh0
UHJlZWRpdENoYW5nZWQpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPmltQ29u
dGV4dC5nZXQoKSwgImNvbW1pdCIsIEdfQ0FMTEJBQ0soaW1Db250ZXh0Q29tbWl0dGVkKSwgdGhp
cyk7CisgICAgZ19zaWduYWxfY29ubmVjdChwcml2LT5pbUNvbnRleHQuZ2V0KCksICJwcmVlZGl0
LWNoYW5nZWQiLCBHX0NBTExCQUNLKGltQ29udGV4dFByZWVkaXRDaGFuZ2VkKSwgdGhpcyk7CiB9
CiAKIEVkaXRvckNsaWVudDo6fkVkaXRvckNsaWVudCgpCiB7CiAgICAgV2ViS2l0V2ViVmlld1By
aXZhdGUqIHByaXYgPSBtX3dlYlZpZXctPnByaXY7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKHByaXYtPmltQ29udGV4dCwgKGdwb2ludGVyKWltQ29udGV4dENvbW1p
dHRlZCwgdGhpcyk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHBy
aXYtPmltQ29udGV4dCwgKGdwb2ludGVyKWltQ29udGV4dFByZWVkaXRDaGFuZ2VkLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocHJpdi0+aW1Db250ZXh0
LmdldCgpLCAoZ3BvaW50ZXIpaW1Db250ZXh0Q29tbWl0dGVkLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocHJpdi0+aW1Db250ZXh0LmdldCgpLCAoZ3Bv
aW50ZXIpaW1Db250ZXh0UHJlZWRpdENoYW5nZWQsIHRoaXMpOwogfQogCiB2b2lkIEVkaXRvckNs
aWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqKQpJbmRleDogV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYmZyYW1lLmNwcAkocmV2aXNpb25lIDM2MzMzKQorKysgV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCShjb3BpYSBsb2NhbGUpCkBAIC05OCwxMiArOTgsOCBA
QAogICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogcHJpdiA9IGZyYW1lLT5wcml2OwogCiAgICAg
cHJpdi0+Y29yZUZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQW5kQ2xlYXIoKTsKLSAgICBwcml2LT5j
b3JlRnJhbWUgPSAwOworICAgIHByaXYtPn5XZWJLaXRXZWJGcmFtZVByaXZhdGUoKTsKIAotICAg
IGdfZnJlZShwcml2LT5uYW1lKTsKLSAgICBnX2ZyZWUocHJpdi0+dGl0bGUpOwotICAgIGdfZnJl
ZShwcml2LT51cmkpOwotCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl9mcmFtZV9wYXJl
bnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCkBAIC0yMDIsNiArMTk4LDggQEAKIAog
ICAgIC8vIFRPRE86IE1vdmUgY29uc3RydWN0b3IgY29kZSBoZXJlLgogICAgIGZyYW1lLT5wcml2
ID0gcHJpdjsKKworICAgIG5ldyhwcml2KSBXZWJLaXRXZWJGcmFtZVByaXZhdGU7CiB9CiAKIC8q
KgpAQCAtMjU1LDcgKzI1Myw3IEBACiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9GUkFNRShmcmFtZSksIE5VTEwpOwogCiAgICAgV2ViS2l0V2ViRnJhbWVQcml2YXRlKiBw
cml2ID0gZnJhbWUtPnByaXY7Ci0gICAgcmV0dXJuIHByaXYtPnRpdGxlOworICAgIHJldHVybiBw
cml2LT50aXRsZS5nZXQoKTsKIH0KIAogLyoqCkBAIC0yNzEsNyArMjY5LDcgQEAKICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0ZSQU1FKGZyYW1lKSwgTlVMTCk7CiAKICAg
ICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIHByaXYgPSBmcmFtZS0+cHJpdjsKLSAgICByZXR1cm4g
cHJpdi0+dXJpOworICAgIHJldHVybiBwcml2LT51cmkuZ2V0KCk7CiB9CiAKIC8qKgpAQCAtMzA4
LDE0ICszMDYsMTQgQEAKICAgICBXZWJLaXRXZWJGcmFtZVByaXZhdGUqIHByaXYgPSBmcmFtZS0+
cHJpdjsKIAogICAgIGlmIChwcml2LT5uYW1lKQotICAgICAgICByZXR1cm4gcHJpdi0+bmFtZTsK
KyAgICAgICAgcmV0dXJuIHByaXYtPm5hbWUuZ2V0KCk7CiAKICAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShmcmFtZSk7CiAgICAgQVNTRVJUKGNvcmVGcmFtZSk7CiAKICAgICBTdHJpbmcgc3Ry
aW5nID0gY29yZUZyYW1lLT50cmVlKCktPm5hbWUoKTsKLSAgICBwcml2LT5uYW1lID0gZ19zdHJk
dXAoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBwcml2LT5uYW1lOworICAgIHBy
aXYtPm5hbWUuc2V0KGdfc3RyZHVwKHN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJu
IHByaXYtPm5hbWUuZ2V0KCk7CiB9CiAKIC8qKgpAQCAtNTU2LDEzICs1NTQsMTIgQEAKIAogICAg
IFByaW50Q29udGV4dCBwcmludENvbnRleHQoY29yZUZyYW1lKTsKIAotICAgIEd0a1ByaW50T3Bl
cmF0aW9uKiBvcCA9IGd0a19wcmludF9vcGVyYXRpb25fbmV3KCk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdChHX09CSkVDVChvcCksICJiZWdpbi1wcmludCIsIEdfQ0FMTEJBQ0soYmVnaW5fcHJpbnQp
LCAmcHJpbnRDb250ZXh0KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKG9wKSwgImRy
YXctcGFnZSIsIEdfQ0FMTEJBQ0soZHJhd19wYWdlKSwgJnByaW50Q29udGV4dCk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChHX09CSkVDVChvcCksICJlbmQtcHJpbnQiLCBHX0NBTExCQUNLKGVuZF9w
cmludCksICZwcmludENvbnRleHQpOwotICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICAgIGd0
a19wcmludF9vcGVyYXRpb25fcnVuKG9wLCBHVEtfUFJJTlRfT1BFUkFUSU9OX0FDVElPTl9QUklO
VF9ESUFMT0csIEdUS19XSU5ET1codG9wTGV2ZWwpLCAmZXJyb3IpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKG9wKTsKKyAgICBHUmVmUHRyPEd0a1ByaW50T3BlcmF0aW9uPiBvcCA9IGd0a19wcmludF9v
cGVyYXRpb25fbmV3KCk7CisgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChvcC5nZXQoKSks
ICJiZWdpbi1wcmludCIsIEdfQ0FMTEJBQ0soYmVnaW5fcHJpbnQpLCAmcHJpbnRDb250ZXh0KTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKG9wLmdldCgpKSwgImRyYXctcGFnZSIsIEdf
Q0FMTEJBQ0soZHJhd19wYWdlKSwgJnByaW50Q29udGV4dCk7CisgICAgZ19zaWduYWxfY29ubmVj
dChHX09CSkVDVChvcC5nZXQoKSksICJlbmQtcHJpbnQiLCBHX0NBTExCQUNLKGVuZF9wcmludCks
ICZwcmludENvbnRleHQpOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBndGtfcHJp
bnRfb3BlcmF0aW9uX3J1bihvcC5nZXQoKSwgR1RLX1BSSU5UX09QRVJBVElPTl9BQ1RJT05fUFJJ
TlRfRElBTE9HLCBHVEtfV0lORE9XKHRvcExldmVsKSwgJmVycm9yLnJhd1B0cigpKTsKIAogICAg
IGlmIChlcnJvcikgewogICAgICAgICBHdGtXaWRnZXQqIGRpYWxvZyA9IGd0a19tZXNzYWdlX2Rp
YWxvZ19uZXcoR1RLX1dJTkRPVyh0b3BMZXZlbCksCkBAIC01NzAsNyArNTY3LDYgQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19NRVNTQUdF
X0VSUk9SLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1RLX0JVVFRPTlNfQ0xPU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfZXJyb3Jf
ZnJlZShlcnJvcik7CiAKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJyZXNwb25z
ZSIsIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwgTlVMTCk7CiAgICAgICAgIGd0a193
aWRnZXRfc2hvdyhkaWFsb2cpOwpJbmRleDogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0
dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRp
bmdzLmNwcAkocmV2aXNpb25lIDM2MzMzKQorKysgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
c2V0dGluZ3MuY3BwCShjb3BpYSBsb2NhbGUpCkBAIC0yOSwxMyArMjksMTMgQEAKIEdfREVGSU5F
X1RZUEUoV2ViS2l0V2ViU2V0dGluZ3MsIHdlYmtpdF93ZWJfc2V0dGluZ3MsIEdfVFlQRV9PQkpF
Q1QpCiAKIHN0cnVjdCBfV2ViS2l0V2ViU2V0dGluZ3NQcml2YXRlIHsKLSAgICBnY2hhciogZGVm
YXVsdF9lbmNvZGluZzsKLSAgICBnY2hhciogY3Vyc2l2ZV9mb250X2ZhbWlseTsKLSAgICBnY2hh
ciogZGVmYXVsdF9mb250X2ZhbWlseTsKLSAgICBnY2hhciogZmFudGFzeV9mb250X2ZhbWlseTsK
LSAgICBnY2hhciogbW9ub3NwYWNlX2ZvbnRfZmFtaWx5OwotICAgIGdjaGFyKiBzYW5zX3Nlcmlm
X2ZvbnRfZmFtaWx5OwotICAgIGdjaGFyKiBzZXJpZl9mb250X2ZhbWlseTsKKyAgICBHT3duUHRy
PGdjaGFyPiBkZWZhdWx0X2VuY29kaW5nOworICAgIEdPd25QdHI8Z2NoYXI+IGN1cnNpdmVfZm9u
dF9mYW1pbHk7CisgICAgR093blB0cjxnY2hhcj4gZGVmYXVsdF9mb250X2ZhbWlseTsKKyAgICBH
T3duUHRyPGdjaGFyPiBmYW50YXN5X2ZvbnRfZmFtaWx5OworICAgIEdPd25QdHI8Z2NoYXI+IG1v
bm9zcGFjZV9mb250X2ZhbWlseTsKKyAgICBHT3duUHRyPGdjaGFyPiBzYW5zX3NlcmlmX2ZvbnRf
ZmFtaWx5OworICAgIEdPd25QdHI8Z2NoYXI+IHNlcmlmX2ZvbnRfZmFtaWx5OwogICAgIGd1aW50
IGRlZmF1bHRfZm9udF9zaXplOwogICAgIGd1aW50IGRlZmF1bHRfbW9ub3NwYWNlX2ZvbnRfc2l6
ZTsKICAgICBndWludCBtaW5pbXVtX2ZvbnRfc2l6ZTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBn
Ym9vbGVhbiBlbmFibGVfc2NyaXB0czsKICAgICBnYm9vbGVhbiBlbmFibGVfcGx1Z2luczsKICAg
ICBnYm9vbGVhbiByZXNpemFibGVfdGV4dF9hcmVhczsKLSAgICBnY2hhciogdXNlcl9zdHlsZXNo
ZWV0X3VyaTsKKyAgICBHT3duUHRyPGdjaGFyPiB1c2VyX3N0eWxlc2hlZXRfdXJpOwogICAgIGdm
bG9hdCB6b29tX3N0ZXA7CiB9OwogCkBAIC0yNzQsNiArMjc0LDggQEAKIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfc2V0dGluZ3NfaW5pdChXZWJLaXRXZWJTZXR0aW5ncyogd2ViX3NldHRpbmdzKQog
ewogICAgIHdlYl9zZXR0aW5ncy0+cHJpdiA9IFdFQktJVF9XRUJfU0VUVElOR1NfR0VUX1BSSVZB
VEUod2ViX3NldHRpbmdzKTsKKworICAgIG5ldyh3ZWJfc2V0dGluZ3MtPnByaXYpIFdlYktpdFdl
YlNldHRpbmdzUHJpdmF0ZSgpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NldHRpbmdz
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKQEAgLTI4MSwxNCArMjgzLDcgQEAKICAgICBXZWJL
aXRXZWJTZXR0aW5ncyogd2ViX3NldHRpbmdzID0gV0VCS0lUX1dFQl9TRVRUSU5HUyhvYmplY3Qp
OwogICAgIFdlYktpdFdlYlNldHRpbmdzUHJpdmF0ZSogcHJpdiA9IHdlYl9zZXR0aW5ncy0+cHJp
djsKIAotICAgIGdfZnJlZShwcml2LT5kZWZhdWx0X2VuY29kaW5nKTsKLSAgICBnX2ZyZWUocHJp
di0+Y3Vyc2l2ZV9mb250X2ZhbWlseSk7Ci0gICAgZ19mcmVlKHByaXYtPmRlZmF1bHRfZm9udF9m
YW1pbHkpOwotICAgIGdfZnJlZShwcml2LT5mYW50YXN5X2ZvbnRfZmFtaWx5KTsKLSAgICBnX2Zy
ZWUocHJpdi0+bW9ub3NwYWNlX2ZvbnRfZmFtaWx5KTsKLSAgICBnX2ZyZWUocHJpdi0+c2Fuc19z
ZXJpZl9mb250X2ZhbWlseSk7Ci0gICAgZ19mcmVlKHByaXYtPnNlcmlmX2ZvbnRfZmFtaWx5KTsK
LSAgICBnX2ZyZWUocHJpdi0+dXNlcl9zdHlsZXNoZWV0X3VyaSk7CisgICAgcHJpdi0+fldlYktp
dFdlYlNldHRpbmdzUHJpdmF0ZSgpOwogCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl9z
ZXR0aW5nc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQpAQCAtMzAwLDMyICsy
OTUsMjUgQEAKIAogICAgIHN3aXRjaChwcm9wX2lkKSB7CiAgICAgY2FzZSBQUk9QX0RFRkFVTFRf
RU5DT0RJTkc6Ci0gICAgICAgIGdfZnJlZShwcml2LT5kZWZhdWx0X2VuY29kaW5nKTsKLSAgICAg
ICAgcHJpdi0+ZGVmYXVsdF9lbmNvZGluZyA9IGdfc3RyZHVwKGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBwcml2LT5kZWZhdWx0X2VuY29kaW5nLnNldChnX3ZhbHVlX2R1cF9z
dHJpbmcodmFsdWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0NVUlNJVkVfRk9O
VF9GQU1JTFk6Ci0gICAgICAgIGdfZnJlZShwcml2LT5jdXJzaXZlX2ZvbnRfZmFtaWx5KTsKLSAg
ICAgICAgcHJpdi0+Y3Vyc2l2ZV9mb250X2ZhbWlseSA9IGdfc3RyZHVwKGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBwcml2LT5jdXJzaXZlX2ZvbnRfZmFtaWx5LnNldChnX3Zh
bHVlX2R1cF9zdHJpbmcodmFsdWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0RF
RkFVTFRfRk9OVF9GQU1JTFk6Ci0gICAgICAgIGdfZnJlZShwcml2LT5kZWZhdWx0X2ZvbnRfZmFt
aWx5KTsKLSAgICAgICAgcHJpdi0+ZGVmYXVsdF9mb250X2ZhbWlseSA9IGdfc3RyZHVwKGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBwcml2LT5kZWZhdWx0X2ZvbnRfZmFtaWx5
LnNldChnX3ZhbHVlX2R1cF9zdHJpbmcodmFsdWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBQUk9QX0ZBTlRBU1lfRk9OVF9GQU1JTFk6Ci0gICAgICAgIGdfZnJlZShwcml2LT5mYW50YXN5
X2ZvbnRfZmFtaWx5KTsKLSAgICAgICAgcHJpdi0+ZmFudGFzeV9mb250X2ZhbWlseSA9IGdfc3Ry
ZHVwKGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBwcml2LT5mYW50YXN5X2Zv
bnRfZmFtaWx5LnNldChnX3ZhbHVlX2R1cF9zdHJpbmcodmFsdWUpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBQUk9QX01PTk9TUEFDRV9GT05UX0ZBTUlMWToKLSAgICAgICAgZ19mcmVlKHBy
aXYtPm1vbm9zcGFjZV9mb250X2ZhbWlseSk7Ci0gICAgICAgIHByaXYtPm1vbm9zcGFjZV9mb250
X2ZhbWlseSA9IGdfc3RyZHVwKGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBw
cml2LT5tb25vc3BhY2VfZm9udF9mYW1pbHkuc2V0KGdfdmFsdWVfZHVwX3N0cmluZyh2YWx1ZSkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfU0FOU19TRVJJRl9GT05UX0ZBTUlMWToK
LSAgICAgICAgZ19mcmVlKHByaXYtPnNhbnNfc2VyaWZfZm9udF9mYW1pbHkpOwotICAgICAgICBw
cml2LT5zYW5zX3NlcmlmX2ZvbnRfZmFtaWx5ID0gZ19zdHJkdXAoZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIHByaXYtPnNhbnNfc2VyaWZfZm9udF9mYW1pbHkuc2V0KGdfdmFs
dWVfZHVwX3N0cmluZyh2YWx1ZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfU0VS
SUZfRk9OVF9GQU1JTFk6Ci0gICAgICAgIGdfZnJlZShwcml2LT5zZXJpZl9mb250X2ZhbWlseSk7
Ci0gICAgICAgIHByaXYtPnNlcmlmX2ZvbnRfZmFtaWx5ID0gZ19zdHJkdXAoZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIHByaXYtPnNlcmlmX2ZvbnRfZmFtaWx5LnNldChnX3Zh
bHVlX2R1cF9zdHJpbmcodmFsdWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0RF
RkFVTFRfRk9OVF9TSVpFOgogICAgICAgICBwcml2LT5kZWZhdWx0X2ZvbnRfc2l6ZSA9IGdfdmFs
dWVfZ2V0X2ludCh2YWx1ZSk7CkBAIC0zNTgsOCArMzQ2LDcgQEAKICAgICAgICAgcHJpdi0+cmVz
aXphYmxlX3RleHRfYXJlYXMgPSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBQUk9QX1VTRVJfU1RZTEVTSEVFVF9VUkk6Ci0gICAgICAgIGdfZnJl
ZShwcml2LT51c2VyX3N0eWxlc2hlZXRfdXJpKTsKLSAgICAgICAgcHJpdi0+dXNlcl9zdHlsZXNo
ZWV0X3VyaSA9IGdfc3RyZHVwKGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBw
cml2LT51c2VyX3N0eWxlc2hlZXRfdXJpLnNldChnX3ZhbHVlX2R1cF9zdHJpbmcodmFsdWUpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX1pPT01fU1RFUDoKICAgICAgICAgcHJpdi0+
em9vbV9zdGVwID0gZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpOwpAQCAtMzc3LDI1ICszNjQsMjUg
QEAKIAogICAgIHN3aXRjaCAocHJvcF9pZCkgewogICAgIGNhc2UgUFJPUF9ERUZBVUxUX0VOQ09E
SU5HOgotICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPmRlZmF1bHRfZW5j
b2RpbmcpOworICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPmRlZmF1bHRf
ZW5jb2RpbmcuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfQ1VSU0lWRV9G
T05UX0ZBTUlMWToKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT5jdXJz
aXZlX2ZvbnRfZmFtaWx5KTsKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2
LT5jdXJzaXZlX2ZvbnRfZmFtaWx5LmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQ
Uk9QX0RFRkFVTFRfRk9OVF9GQU1JTFk6Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1
ZSwgcHJpdi0+ZGVmYXVsdF9mb250X2ZhbWlseSk7CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmlu
Zyh2YWx1ZSwgcHJpdi0+ZGVmYXVsdF9mb250X2ZhbWlseS5nZXQoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgUFJPUF9GQU5UQVNZX0ZPTlRfRkFNSUxZOgotICAgICAgICBnX3ZhbHVlX3Nl
dF9zdHJpbmcodmFsdWUsIHByaXYtPmZhbnRhc3lfZm9udF9mYW1pbHkpOworICAgICAgICBnX3Zh
bHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPmZhbnRhc3lfZm9udF9mYW1pbHkuZ2V0KCkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfTU9OT1NQQUNFX0ZPTlRfRkFNSUxZOgotICAg
ICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPm1vbm9zcGFjZV9mb250X2ZhbWls
eSk7CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgcHJpdi0+bW9ub3NwYWNlX2Zv
bnRfZmFtaWx5LmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX1NBTlNfU0VS
SUZfRk9OVF9GQU1JTFk6Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgcHJpdi0+
c2Fuc19zZXJpZl9mb250X2ZhbWlseSk7CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1
ZSwgcHJpdi0+c2Fuc19zZXJpZl9mb250X2ZhbWlseS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgUFJPUF9TRVJJRl9GT05UX0ZBTUlMWToKLSAgICAgICAgZ192YWx1ZV9zZXRfc3Ry
aW5nKHZhbHVlLCBwcml2LT5zZXJpZl9mb250X2ZhbWlseSk7CisgICAgICAgIGdfdmFsdWVfc2V0
X3N0cmluZyh2YWx1ZSwgcHJpdi0+c2VyaWZfZm9udF9mYW1pbHkuZ2V0KCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFBST1BfREVGQVVMVF9GT05UX1NJWkU6CiAgICAgICAgIGdfdmFsdWVf
c2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGVmYXVsdF9mb250X3NpemUpOwpAQCAtNDI4LDcgKzQxNSw3
IEBACiAgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPnJlc2l6YWJsZV90
ZXh0X2FyZWFzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX1VTRVJfU1RZTEVTSEVF
VF9VUkk6Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgcHJpdi0+dXNlcl9zdHls
ZXNoZWV0X3VyaSk7CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgcHJpdi0+dXNl
cl9zdHlsZXNoZWV0X3VyaS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9a
T09NX1NURVA6CiAgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBwcml2LT56b29tX3N0
ZXApOwpAQCAtNDY0LDEzICs0NTEsMTMgQEAKICAgICBXZWJLaXRXZWJTZXR0aW5nc1ByaXZhdGUq
IHByaXYgPSB3ZWJfc2V0dGluZ3MtPnByaXY7CiAKICAgICBXZWJLaXRXZWJTZXR0aW5ncyogY29w
eSA9IFdFQktJVF9XRUJfU0VUVElOR1MoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9TRVRU
SU5HUywKLSAgICAgICAgICAgICAgICAgImRlZmF1bHQtZW5jb2RpbmciLCBwcml2LT5kZWZhdWx0
X2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAiY3Vyc2l2ZS1mb250LWZhbWlseSIsIHByaXYt
PmN1cnNpdmVfZm9udF9mYW1pbHksCi0gICAgICAgICAgICAgICAgICJkZWZhdWx0LWZvbnQtZmFt
aWx5IiwgcHJpdi0+ZGVmYXVsdF9mb250X2ZhbWlseSwKLSAgICAgICAgICAgICAgICAgImZhbnRh
c3ktZm9udC1mYW1pbHkiLCBwcml2LT5mYW50YXN5X2ZvbnRfZmFtaWx5LAotICAgICAgICAgICAg
ICAgICAibW9ub3NwYWNlLWZvbnQtZmFtaWx5IiwgcHJpdi0+bW9ub3NwYWNlX2ZvbnRfZmFtaWx5
LAotICAgICAgICAgICAgICAgICAic2Fucy1zZXJpZi1mb250LWZhbWlseSIsIHByaXYtPnNhbnNf
c2VyaWZfZm9udF9mYW1pbHksCi0gICAgICAgICAgICAgICAgICJzZXJpZi1mb250LWZhbWlseSIs
IHByaXYtPnNlcmlmX2ZvbnRfZmFtaWx5LAorICAgICAgICAgICAgICAgICAiZGVmYXVsdC1lbmNv
ZGluZyIsIHByaXYtPmRlZmF1bHRfZW5jb2RpbmcuZ2V0KCksCisgICAgICAgICAgICAgICAgICJj
dXJzaXZlLWZvbnQtZmFtaWx5IiwgcHJpdi0+Y3Vyc2l2ZV9mb250X2ZhbWlseS5nZXQoKSwKKyAg
ICAgICAgICAgICAgICAgImRlZmF1bHQtZm9udC1mYW1pbHkiLCBwcml2LT5kZWZhdWx0X2ZvbnRf
ZmFtaWx5LmdldCgpLAorICAgICAgICAgICAgICAgICAiZmFudGFzeS1mb250LWZhbWlseSIsIHBy
aXYtPmZhbnRhc3lfZm9udF9mYW1pbHkuZ2V0KCksCisgICAgICAgICAgICAgICAgICJtb25vc3Bh
Y2UtZm9udC1mYW1pbHkiLCBwcml2LT5tb25vc3BhY2VfZm9udF9mYW1pbHkuZ2V0KCksCisgICAg
ICAgICAgICAgICAgICJzYW5zLXNlcmlmLWZvbnQtZmFtaWx5IiwgcHJpdi0+c2Fuc19zZXJpZl9m
b250X2ZhbWlseS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgInNlcmlmLWZvbnQtZmFtaWx5Iiwg
cHJpdi0+c2VyaWZfZm9udF9mYW1pbHkuZ2V0KCksCiAgICAgICAgICAgICAgICAgICJkZWZhdWx0
LWZvbnQtc2l6ZSIsIHByaXYtPmRlZmF1bHRfZm9udF9zaXplLAogICAgICAgICAgICAgICAgICAi
ZGVmYXVsdC1tb25vc3BhY2UtZm9udC1zaXplIiwgcHJpdi0+ZGVmYXVsdF9tb25vc3BhY2VfZm9u
dF9zaXplLAogICAgICAgICAgICAgICAgICAibWluaW11bS1mb250LXNpemUiLCBwcml2LT5taW5p
bXVtX2ZvbnRfc2l6ZSwKQEAgLTQ4MSw3ICs0NjgsNyBAQAogICAgICAgICAgICAgICAgICAiZW5h
YmxlLXNjcmlwdHMiLCBwcml2LT5lbmFibGVfc2NyaXB0cywKICAgICAgICAgICAgICAgICAgImVu
YWJsZS1wbHVnaW5zIiwgcHJpdi0+ZW5hYmxlX3BsdWdpbnMsCiAgICAgICAgICAgICAgICAgICJy
ZXNpemFibGUtdGV4dC1hcmVhcyIsIHByaXYtPnJlc2l6YWJsZV90ZXh0X2FyZWFzLAotICAgICAg
ICAgICAgICAgICAidXNlci1zdHlsZXNoZWV0LXVyaSIsIHByaXYtPnVzZXJfc3R5bGVzaGVldF91
cmksCisgICAgICAgICAgICAgICAgICJ1c2VyLXN0eWxlc2hlZXQtdXJpIiwgcHJpdi0+dXNlcl9z
dHlsZXNoZWV0X3VyaS5nZXQoKSwKICAgICAgICAgICAgICAgICAgInpvb20tc3RlcCIsIHByaXYt
Pnpvb21fc3RlcCwKICAgICAgICAgICAgICAgICAgTlVMTCkpOwogCkluZGV4OiBXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuY3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAJKGNvcGlhIGxvY2FsZSkK
QEAgLTIwLDEzICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAid2Vi
a2l0bmV0d29ya3JlcXVlc3QuaCIKKyNpbmNsdWRlIDx3dGYvR093blB0ci5oPgogCiBleHRlcm4g
IkMiIHsKIAogR19ERUZJTkVfVFlQRShXZWJLaXROZXR3b3JrUmVxdWVzdCwgd2Via2l0X25ldHdv
cmtfcmVxdWVzdCwgR19UWVBFX09CSkVDVCk7CiAKIHN0cnVjdCBfV2ViS2l0TmV0d29ya1JlcXVl
c3RQcml2YXRlIHsKLSAgICBnY2hhciogdXJpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpOwogfTsK
IAogI2RlZmluZSBXRUJLSVRfTkVUV09SS19SRVFVRVNUX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTkVUV09SS19SRVFVRVNU
LCBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUpKQpAQCAtMzYsNyArMzcsNyBAQAogICAgIFdl
YktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX05FVFdPUktfUkVRVUVTVChvYmpl
Y3QpOwogICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0UHJpdmF0ZSogcHJpdiA9IHJlcXVlc3QtPnBy
aXY7CiAKLSAgICBnX2ZyZWUocHJpdi0+dXJpKTsKKyAgICBwcml2LT5+V2ViS2l0TmV0d29ya1Jl
cXVlc3RQcml2YXRlKCk7CiAKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfbmV0d29ya19yZXF1
ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CkBAIC01Miw2ICs1Myw4IEBA
CiB7CiAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX05FVFdP
UktfUkVRVUVTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKICAgICByZXF1ZXN0LT5wcml2ID0gcHJp
djsKKworICAgIG5ldyhwcml2KSBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUoKTsKIH0KIAog
V2ViS2l0TmV0d29ya1JlcXVlc3QqIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KGNvbnN0IGdj
aGFyKiB1cmkpCkBAIC02MSw3ICs2NCw3IEBACiAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJl
cXVlc3QgPSBXRUJLSVRfTkVUV09SS19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9O
RVRXT1JLX1JFUVVFU1QsIE5VTEwpKTsKICAgICBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUq
IHByaXYgPSByZXF1ZXN0LT5wcml2OwogCi0gICAgcHJpdi0+dXJpID0gZ19zdHJkdXAodXJpKTsK
KyAgICBwcml2LT51cmkuc2V0KGdfc3RyZHVwKHVyaSkpOwogCiAgICAgcmV0dXJuIHJlcXVlc3Q7
CiB9CkBAIC03Myw4ICs3Niw3IEBACiAKICAgICBXZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGUq
IHByaXYgPSByZXF1ZXN0LT5wcml2OwogCi0gICAgZ19mcmVlKHByaXYtPnVyaSk7Ci0gICAgcHJp
di0+dXJpID0gZ19zdHJkdXAodXJpKTsKKyAgICBwcml2LT51cmkuc2V0KGdfc3RyZHVwKHVyaSkp
OwogfQogCiBHX0NPTlNUX1JFVFVSTiBnY2hhciogd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRf
dXJpKFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQpAQCAtODIsNyArODQsNyBAQAogICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCks
IE5VTEwpOwogCiAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3RQcml2YXRlKiBwcml2ID0gcmVxdWVz
dC0+cHJpdjsKLSAgICByZXR1cm4gcHJpdi0+dXJpOworICAgIHJldHVybiBwcml2LT51cmkuZ2V0
KCk7CiB9CiAKIH0KSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lv
bmUgMzYzMzMpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkoY29waWEg
bG9jYWxlKQpAQCAtMTQxLDEwICsxNDEsOCBAQAogCiAgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3
LCB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tQT1BVTEFURV9QT1BVUF0sIDAsIG1lbnUpOwogCi0g
ICAgR0xpc3QqIGl0ZW1zID0gZ3RrX2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5F
UihtZW51KSk7Ci0gICAgYm9vbCBlbXB0eSA9ICFnX2xpc3RfbnRoKGl0ZW1zLCAwKTsKLSAgICBn
X2xpc3RfZnJlZShpdGVtcyk7Ci0gICAgaWYgKGVtcHR5KQorICAgIEdPd25QdHI8R0xpc3Q+IGl0
ZW1zKGd0a19jb250YWluZXJfZ2V0X2NoaWxkcmVuKEdUS19DT05UQUlORVIobWVudSkpKTsKKyAg
ICBpZiAoIWl0ZW1zKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKICAgICBXZWJLaXRXZWJWaWV3
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKQEAg
LTM5Myw3ICszOTEsNyBAQAogICAgIGlmIChmb2N1c2VkRnJhbWUgJiYgZm9jdXNlZEZyYW1lLT5l
ZGl0b3IoKS0+Y2FuRWRpdCgpKSB7CiAjaWZkZWYgTUFFTU9fQ0hBTkdFUwogICAgICAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7Ci0gICAgICAgIGhpbGRvbl9n
dGtfaW1fY29udGV4dF9maWx0ZXJfZXZlbnQocHJpdi0+aW1Db250ZXh0LCAoR2RrRXZlbnQqKWV2
ZW50KTsKKyAgICAgICAgaGlsZG9uX2d0a19pbV9jb250ZXh0X2ZpbHRlcl9ldmVudChwcml2LT5p
bUNvbnRleHQuZ2V0KCksIChHZGtFdmVudCopZXZlbnQpOwogI2VuZGlmCiAgICAgfQogCkBAIC00
OTksMjggKzQ5NywxNyBAQAogCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyh3aWRnZXQpOwogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmll
dy0+cHJpdjsKLSAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dpbmRvdyhwcml2LT5pbUNv
bnRleHQsIHdpZGdldC0+d2luZG93KTsKKyAgICBndGtfaW1fY29udGV4dF9zZXRfY2xpZW50X3dp
bmRvdyhwcml2LT5pbUNvbnRleHQuZ2V0KCksIHdpZGdldC0+d2luZG93KTsKIH0KIAogc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X3NldF9zY3JvbGxfYWRqdXN0bWVudHMoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgR3RrQWRqdXN0bWVudCogaGFkaiwgR3RrQWRqdXN0bWVudCogdmFkaikKIHsK
ICAgICBGcmFtZVZpZXcqIHZpZXcgPSBjb3JlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFt
ZSh3ZWJWaWV3KSktPnZpZXcoKTsKLQotICAgIGlmIChoYWRqKQotICAgICAgICBnX29iamVjdF9y
ZWYoaGFkaik7Ci0gICAgaWYgKHZhZGopCi0gICAgICAgIGdfb2JqZWN0X3JlZih2YWRqKTsKLQog
ICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKIAotICAgIGlm
IChwcml2LT5ob3Jpem9udGFsQWRqdXN0bWVudCkKLSAgICAgICAgZ19vYmplY3RfdW5yZWYocHJp
di0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOwotICAgIGlmIChwcml2LT52ZXJ0aWNhbEFkanVzdG1l
bnQpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPnZlcnRpY2FsQWRqdXN0bWVudCk7Cisg
ICAgcHJpdi0+aG9yaXpvbnRhbEFkanVzdG1lbnQgPSByZWZQdHIoaGFkaik7CisgICAgcHJpdi0+
dmVydGljYWxBZGp1c3RtZW50ID0gcmVmUHRyKHZhZGopOwogCi0gICAgcHJpdi0+aG9yaXpvbnRh
bEFkanVzdG1lbnQgPSBoYWRqOwotICAgIHByaXYtPnZlcnRpY2FsQWRqdXN0bWVudCA9IHZhZGo7
Ci0KICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjIyLDkgKzYwOSw4IEBA
CiAKICAgICB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKHdlYlZp
ZXcpKTsKICAgICBkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSURHRVRfVE9Q
TEVWRUwod2luZG93KSA/IEdUS19XSU5ET1cod2luZG93KSA6IDAsIEdUS19ESUFMT0dfREVTVFJP
WV9XSVRIX1BBUkVOVCwgbWVzc2FnZVR5cGUsIGJ1dHRvbnMsICIlcyIsIG1lc3NhZ2UpOwotICAg
IGdjaGFyKiB0aXRsZSA9IGdfc3RyY29uY2F0KCJKYXZhU2NyaXB0IC0gIiwgd2Via2l0X3dlYl9m
cmFtZV9nZXRfdXJpKGZyYW1lKSwgTlVMTCk7Ci0gICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RL
X1dJTkRPVyhkaWFsb2cpLCB0aXRsZSk7Ci0gICAgZ19mcmVlKHRpdGxlKTsKKyAgICBHT3duUHRy
PGdjaGFyPiB0aXRsZShnX3N0cmNvbmNhdCgiSmF2YVNjcmlwdCAtICIsIHdlYmtpdF93ZWJfZnJh
bWVfZ2V0X3VyaShmcmFtZSksIE5VTEwpKTsKKyAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtf
V0lORE9XKGRpYWxvZyksIHRpdGxlLmdldCgpKTsKIAogICAgIGlmICh0eXBlID09IFdFQktJVF9T
Q1JJUFRfRElBTE9HX1BST01QVCkgewogICAgICAgICBlbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsK
QEAgLTcxNCwyMiArNzAwLDEzIEBACiAKICAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5n
KFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKIAotICAgIGNvcmUocHJpdi0+bWFpbkZyYW1lKS0+
bG9hZGVyKCktPmRldGFjaENoaWxkcmVuKCk7CisgICAgY29yZShwcml2LT5tYWluRnJhbWUuZ2V0
KCkpLT5sb2FkZXIoKS0+ZGV0YWNoQ2hpbGRyZW4oKTsKICAgICBkZWxldGUgcHJpdi0+Y29yZVBh
Z2U7CiAKLSAgICBpZiAocHJpdi0+aG9yaXpvbnRhbEFkanVzdG1lbnQpCi0gICAgICAgIGdfb2Jq
ZWN0X3VucmVmKHByaXYtPmhvcml6b250YWxBZGp1c3RtZW50KTsKLSAgICBpZiAocHJpdi0+dmVy
dGljYWxBZGp1c3RtZW50KQotICAgICAgICBnX29iamVjdF91bnJlZihwcml2LT52ZXJ0aWNhbEFk
anVzdG1lbnQpOwotICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPmJhY2tGb3J3YXJkTGlzdCk7Ci0g
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHByaXYtPndlYlNldHRpbmdz
LCAoZ3BvaW50ZXIpd2Via2l0X3dlYl92aWV3X3NldHRpbmdzX25vdGlmeSwgd2ViVmlldyk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYocHJpdi0+d2ViU2V0dGluZ3MpOwotICAgIGdfb2JqZWN0X3VucmVm
KHByaXYtPm1haW5GcmFtZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocHJpdi0+aW1Db250ZXh0KTsK
LSAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYocHJpdi0+Y29weV90YXJnZXRfbGlzdCk7Ci0gICAg
Z3RrX3RhcmdldF9saXN0X3VucmVmKHByaXYtPnBhc3RlX3RhcmdldF9saXN0KTsKLSAgICBkZWxl
dGUgcHJpdi0+dXNlckFnZW50OworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlf
ZnVuYyhwcml2LT53ZWJTZXR0aW5ncy5nZXQoKSwgKGdwb2ludGVyKXdlYmtpdF93ZWJfdmlld19z
ZXR0aW5nc19ub3RpZnksIHdlYlZpZXcpOwogCisgICAgcHJpdi0+fldlYktpdFdlYlZpZXdQcml2
YXRlKCk7CisKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKIH0KIApAQCAtMTI1OSw3ICsxMjM2LDcgQEAKIHN0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfdmlld19zY3JlZW5fY2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBHZGtTY3JlZW4qIHByZXZpb3VzU2NyZWVuLCBncG9pbnRlciB1c2VyZGF0YSkKIHsKICAgICBX
ZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7Ci0gICAgV2ViS2l0V2Vi
U2V0dGluZ3MqIHdlYlNldHRpbmdzID0gcHJpdi0+d2ViU2V0dGluZ3M7CisgICAgV2ViS2l0V2Vi
U2V0dGluZ3MqIHdlYlNldHRpbmdzID0gcHJpdi0+d2ViU2V0dGluZ3MuZ2V0KCk7CiAgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gY29yZSh3ZWJWaWV3KS0+c2V0dGluZ3MoKTsKIAogICAgIGd1aW50
IGRlZmF1bHRGb250U2l6ZSwgZGVmYXVsdE1vbm9zcGFjZUZvbnRTaXplLCBtaW5pbXVtRm9udFNp
emUsIG1pbmltdW1Mb2dpY2FsRm9udFNpemU7CkBAIC0xMjkxLDUzICsxMjY4LDQ0IEBACiBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfdXBkYXRlX3NldHRpbmdzKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCiB7CiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2
OwotICAgIFdlYktpdFdlYlNldHRpbmdzKiB3ZWJTZXR0aW5ncyA9IHByaXYtPndlYlNldHRpbmdz
OworICAgIFdlYktpdFdlYlNldHRpbmdzKiB3ZWJTZXR0aW5ncyA9IHByaXYtPndlYlNldHRpbmdz
LmdldCgpOwogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGNvcmUod2ViVmlldyktPnNldHRpbmdz
KCk7CiAKLSAgICBnY2hhciogZGVmYXVsdEVuY29kaW5nLCAqY3Vyc2l2ZUZvbnRGYW1pbHksICpk
ZWZhdWx0Rm9udEZhbWlseSwgKmZhbnRhc3lGb250RmFtaWx5LCAqbW9ub3NwYWNlRm9udEZhbWls
eSwgKnNhbnNTZXJpZkZvbnRGYW1pbHksICpzZXJpZkZvbnRGYW1pbHksICp1c2VyU3R5bGVzaGVl
dFVyaTsKKyAgICBHT3duUHRyPGdjaGFyPiBkZWZhdWx0RW5jb2RpbmcsIGN1cnNpdmVGb250RmFt
aWx5LCBkZWZhdWx0Rm9udEZhbWlseSwgZmFudGFzeUZvbnRGYW1pbHksIG1vbm9zcGFjZUZvbnRG
YW1pbHksIHNhbnNTZXJpZkZvbnRGYW1pbHksIHNlcmlmRm9udEZhbWlseSwgdXNlclN0eWxlc2hl
ZXRVcmk7CiAgICAgZ2Jvb2xlYW4gYXV0b0xvYWRJbWFnZXMsIGF1dG9TaHJpbmtJbWFnZXMsIHBy
aW50QmFja2dyb3VuZHMsIGVuYWJsZVNjcmlwdHMsIGVuYWJsZVBsdWdpbnMsIHJlc2l6YWJsZVRl
eHRBcmVhczsKIAogICAgIGdfb2JqZWN0X2dldChHX09CSkVDVCh3ZWJTZXR0aW5ncyksCi0gICAg
ICAgICAgICAgICAgICJkZWZhdWx0LWVuY29kaW5nIiwgJmRlZmF1bHRFbmNvZGluZywKLSAgICAg
ICAgICAgICAgICAgImN1cnNpdmUtZm9udC1mYW1pbHkiLCAmY3Vyc2l2ZUZvbnRGYW1pbHksCi0g
ICAgICAgICAgICAgICAgICJkZWZhdWx0LWZvbnQtZmFtaWx5IiwgJmRlZmF1bHRGb250RmFtaWx5
LAotICAgICAgICAgICAgICAgICAiZmFudGFzeS1mb250LWZhbWlseSIsICZmYW50YXN5Rm9udEZh
bWlseSwKLSAgICAgICAgICAgICAgICAgIm1vbm9zcGFjZS1mb250LWZhbWlseSIsICZtb25vc3Bh
Y2VGb250RmFtaWx5LAotICAgICAgICAgICAgICAgICAic2Fucy1zZXJpZi1mb250LWZhbWlseSIs
ICZzYW5zU2VyaWZGb250RmFtaWx5LAotICAgICAgICAgICAgICAgICAic2VyaWYtZm9udC1mYW1p
bHkiLCAmc2VyaWZGb250RmFtaWx5LAorICAgICAgICAgICAgICAgICAiZGVmYXVsdC1lbmNvZGlu
ZyIsICZkZWZhdWx0RW5jb2RpbmcucmF3UHRyKCksCisgICAgICAgICAgICAgICAgICJjdXJzaXZl
LWZvbnQtZmFtaWx5IiwgJmN1cnNpdmVGb250RmFtaWx5LnJhd1B0cigpLAorICAgICAgICAgICAg
ICAgICAiZGVmYXVsdC1mb250LWZhbWlseSIsICZkZWZhdWx0Rm9udEZhbWlseS5yYXdQdHIoKSwK
KyAgICAgICAgICAgICAgICAgImZhbnRhc3ktZm9udC1mYW1pbHkiLCAmZmFudGFzeUZvbnRGYW1p
bHkucmF3UHRyKCksCisgICAgICAgICAgICAgICAgICJtb25vc3BhY2UtZm9udC1mYW1pbHkiLCAm
bW9ub3NwYWNlRm9udEZhbWlseS5yYXdQdHIoKSwKKyAgICAgICAgICAgICAgICAgInNhbnMtc2Vy
aWYtZm9udC1mYW1pbHkiLCAmc2Fuc1NlcmlmRm9udEZhbWlseS5yYXdQdHIoKSwKKyAgICAgICAg
ICAgICAgICAgInNlcmlmLWZvbnQtZmFtaWx5IiwgJnNlcmlmRm9udEZhbWlseS5yYXdQdHIoKSwK
ICAgICAgICAgICAgICAgICAgImF1dG8tbG9hZC1pbWFnZXMiLCAmYXV0b0xvYWRJbWFnZXMsCiAg
ICAgICAgICAgICAgICAgICJhdXRvLXNocmluay1pbWFnZXMiLCAmYXV0b1Nocmlua0ltYWdlcywK
ICAgICAgICAgICAgICAgICAgInByaW50LWJhY2tncm91bmRzIiwgJnByaW50QmFja2dyb3VuZHMs
CiAgICAgICAgICAgICAgICAgICJlbmFibGUtc2NyaXB0cyIsICZlbmFibGVTY3JpcHRzLAogICAg
ICAgICAgICAgICAgICAiZW5hYmxlLXBsdWdpbnMiLCAmZW5hYmxlUGx1Z2lucywKICAgICAgICAg
ICAgICAgICAgInJlc2l6YWJsZS10ZXh0LWFyZWFzIiwgJnJlc2l6YWJsZVRleHRBcmVhcywKLSAg
ICAgICAgICAgICAgICAgInVzZXItc3R5bGVzaGVldC11cmkiLCAmdXNlclN0eWxlc2hlZXRVcmks
CisgICAgICAgICAgICAgICAgICJ1c2VyLXN0eWxlc2hlZXQtdXJpIiwgJnVzZXJTdHlsZXNoZWV0
VXJpLnJhd1B0cigpLAogICAgICAgICAgICAgICAgICBOVUxMKTsKIAotICAgIHNldHRpbmdzLT5z
ZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShkZWZhdWx0RW5jb2RpbmcpOwotICAgIHNldHRpbmdz
LT5zZXRDdXJzaXZlRm9udEZhbWlseShjdXJzaXZlRm9udEZhbWlseSk7Ci0gICAgc2V0dGluZ3Mt
PnNldFN0YW5kYXJkRm9udEZhbWlseShkZWZhdWx0Rm9udEZhbWlseSk7Ci0gICAgc2V0dGluZ3Mt
PnNldEZhbnRhc3lGb250RmFtaWx5KGZhbnRhc3lGb250RmFtaWx5KTsKLSAgICBzZXR0aW5ncy0+
c2V0Rml4ZWRGb250RmFtaWx5KG1vbm9zcGFjZUZvbnRGYW1pbHkpOwotICAgIHNldHRpbmdzLT5z
ZXRTYW5zU2VyaWZGb250RmFtaWx5KHNhbnNTZXJpZkZvbnRGYW1pbHkpOwotICAgIHNldHRpbmdz
LT5zZXRTZXJpZkZvbnRGYW1pbHkoc2VyaWZGb250RmFtaWx5KTsKKyAgICBzZXR0aW5ncy0+c2V0
RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoZGVmYXVsdEVuY29kaW5nLmdldCgpKTsKKyAgICBzZXR0
aW5ncy0+c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY3Vyc2l2ZUZvbnRGYW1pbHkuZ2V0KCkpOworICAg
IHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoZGVmYXVsdEZvbnRGYW1pbHkuZ2V0KCkp
OworICAgIHNldHRpbmdzLT5zZXRGYW50YXN5Rm9udEZhbWlseShmYW50YXN5Rm9udEZhbWlseS5n
ZXQoKSk7CisgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseShtb25vc3BhY2VGb250RmFt
aWx5LmdldCgpKTsKKyAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShzYW5zU2Vy
aWZGb250RmFtaWx5LmdldCgpKTsKKyAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KHNl
cmlmRm9udEZhbWlseS5nZXQoKSk7CiAgICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21h
dGljYWxseShhdXRvTG9hZEltYWdlcyk7CiAgICAgc2V0dGluZ3MtPnNldFNocmlua3NTdGFuZGFs
b25lSW1hZ2VzVG9GaXQoYXV0b1Nocmlua0ltYWdlcyk7CiAgICAgc2V0dGluZ3MtPnNldFNob3Vs
ZFByaW50QmFja2dyb3VuZHMocHJpbnRCYWNrZ3JvdW5kcyk7CiAgICAgc2V0dGluZ3MtPnNldEph
dmFTY3JpcHRFbmFibGVkKGVuYWJsZVNjcmlwdHMpOwogICAgIHNldHRpbmdzLT5zZXRQbHVnaW5z
RW5hYmxlZChlbmFibGVQbHVnaW5zKTsKICAgICBzZXR0aW5ncy0+c2V0VGV4dEFyZWFzQXJlUmVz
aXphYmxlKHJlc2l6YWJsZVRleHRBcmVhcyk7Ci0gICAgc2V0dGluZ3MtPnNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oS1VSTCh1c2VyU3R5bGVzaGVldFVyaSkpOworICAgIHNldHRpbmdzLT5zZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKEtVUkwodXNlclN0eWxlc2hlZXRVcmkuZ2V0KCkpKTsKIAot
ICAgIGdfZnJlZShkZWZhdWx0RW5jb2RpbmcpOwotICAgIGdfZnJlZShjdXJzaXZlRm9udEZhbWls
eSk7Ci0gICAgZ19mcmVlKGRlZmF1bHRGb250RmFtaWx5KTsKLSAgICBnX2ZyZWUoZmFudGFzeUZv
bnRGYW1pbHkpOwotICAgIGdfZnJlZShtb25vc3BhY2VGb250RmFtaWx5KTsKLSAgICBnX2ZyZWUo
c2Fuc1NlcmlmRm9udEZhbWlseSk7Ci0gICAgZ19mcmVlKHNlcmlmRm9udEZhbWlseSk7Ci0gICAg
Z19mcmVlKHVzZXJTdHlsZXNoZWV0VXJpKTsKLQogICAgIHdlYmtpdF93ZWJfdmlld19zY3JlZW5f
Y2hhbmdlZCh3ZWJWaWV3LCBOVUxMLCBOVUxMKTsKIH0KIApAQCAtMTM5Niw2ICsxMzY0LDggQEAK
ICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJ
VkFURSh3ZWJWaWV3KTsKICAgICB3ZWJWaWV3LT5wcml2ID0gcHJpdjsKIAorICAgIG5ldyhwcml2
KSBXZWJLaXRXZWJWaWV3UHJpdmF0ZSgpOworCiAgICAgcHJpdi0+aW1Db250ZXh0ID0gZ3RrX2lt
X211bHRpY29udGV4dF9uZXcoKTsKICAgICBwcml2LT5jb3JlUGFnZSA9IG5ldyBQYWdlKG5ldyBX
ZWJLaXQ6OkNocm9tZUNsaWVudCh3ZWJWaWV3KSwgbmV3IFdlYktpdDo6Q29udGV4dE1lbnVDbGll
bnQod2ViVmlldyksIG5ldyBXZWJLaXQ6OkVkaXRvckNsaWVudCh3ZWJWaWV3KSwgbmV3IFdlYktp
dDo6RHJhZ0NsaWVudCwgbmV3IFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50KTsKIApAQCAtMTQwMywx
MiArMTM3MywxMiBAQAogICAgIHByaXYtPnZlcnRpY2FsQWRqdXN0bWVudCA9IEdUS19BREpVU1RN
RU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSk7CiAK
ICNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwxMCwwKQotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHBy
aXYtPmhvcml6b250YWxBZGp1c3RtZW50KTsKLSAgICBnX29iamVjdF9yZWZfc2luayhwcml2LT52
ZXJ0aWNhbEFkanVzdG1lbnQpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHByaXYtPmhvcml6b250
YWxBZGp1c3RtZW50LmdldCgpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayhwcml2LT52ZXJ0aWNh
bEFkanVzdG1lbnQuZ2V0KCkpOwogI2Vsc2UKLSAgICBnX29iamVjdF9yZWYocHJpdi0+aG9yaXpv
bnRhbEFkanVzdG1lbnQpOwotICAgIGd0a19vYmplY3Rfc2luayhHVEtfT0JKRUNUKHByaXYtPmhv
cml6b250YWxBZGp1c3RtZW50KSk7Ci0gICAgZ19vYmplY3RfcmVmKHByaXYtPnZlcnRpY2FsQWRq
dXN0bWVudCk7CisgICAgZ19vYmplY3RfcmVmKHByaXYtPmhvcml6b250YWxBZGp1c3RtZW50Lmdl
dCgpKTsKKyAgICBndGtfb2JqZWN0X3NpbmsoR1RLX09CSkVDVChwcml2LT5ob3Jpem9udGFsQWRq
dXN0bWVudC5nZXQoKSkpOworICAgIGdfb2JqZWN0X3JlZihwcml2LT52ZXJ0aWNhbEFkanVzdG1l
bnQuZ2V0KCkpOwogICAgIGd0a19vYmplY3Rfc2luayhHVEtfT0JKRUNUKHByaXYtPnZlcnRpY2Fs
QWRqdXN0bWVudCkpOwogI2VuZGlmCiAKQEAgLTE0MjgsMTggKzEzOTgsMTggQEAKICNlbmRpZgog
ICAgIC8qIFRhcmdldHMgZm9yIGNvcHkgKi8KICAgICBwcml2LT5jb3B5X3RhcmdldF9saXN0ID0g
Z3RrX3RhcmdldF9saXN0X25ldyhOVUxMLCAwKTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKHBy
aXYtPmNvcHlfdGFyZ2V0X2xpc3QsIHRleHRIdG1sLCAwLCBXRUJLSVRfV0VCX1ZJRVdfVEFSR0VU
X0lORk9fSFRNTCk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMocHJpdi0+
Y29weV90YXJnZXRfbGlzdCwgV0VCS0lUX1dFQl9WSUVXX1RBUkdFVF9JTkZPX1RFWFQpOworICAg
IGd0a190YXJnZXRfbGlzdF9hZGQocHJpdi0+Y29weV90YXJnZXRfbGlzdC5nZXQoKSwgdGV4dEh0
bWwsIDAsIFdFQktJVF9XRUJfVklFV19UQVJHRVRfSU5GT19IVE1MKTsKKyAgICBndGtfdGFyZ2V0
X2xpc3RfYWRkX3RleHRfdGFyZ2V0cyhwcml2LT5jb3B5X3RhcmdldF9saXN0LmdldCgpLCBXRUJL
SVRfV0VCX1ZJRVdfVEFSR0VUX0lORk9fVEVYVCk7CiAKICAgICAvKiBUYXJnZXRzIGZvciBwYXN0
aW5nICovCiAgICAgcHJpdi0+cGFzdGVfdGFyZ2V0X2xpc3QgPSBndGtfdGFyZ2V0X2xpc3RfbmV3
KE5VTEwsIDApOwotICAgIGd0a190YXJnZXRfbGlzdF9hZGQocHJpdi0+cGFzdGVfdGFyZ2V0X2xp
c3QsIHRleHRIdG1sLCAwLCBXRUJLSVRfV0VCX1ZJRVdfVEFSR0VUX0lORk9fSFRNTCk7Ci0gICAg
Z3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMocHJpdi0+cGFzdGVfdGFyZ2V0X2xpc3Qs
IFdFQktJVF9XRUJfVklFV19UQVJHRVRfSU5GT19URVhUKTsKKyAgICBndGtfdGFyZ2V0X2xpc3Rf
YWRkKHByaXYtPnBhc3RlX3RhcmdldF9saXN0LmdldCgpLCB0ZXh0SHRtbCwgMCwgV0VCS0lUX1dF
Ql9WSUVXX1RBUkdFVF9JTkZPX0hUTUwpOworICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90
YXJnZXRzKHByaXYtPnBhc3RlX3RhcmdldF9saXN0LmdldCgpLCBXRUJLSVRfV0VCX1ZJRVdfVEFS
R0VUX0lORk9fVEVYVCk7CiAKICAgICBwcml2LT53ZWJTZXR0aW5ncyA9IHdlYmtpdF93ZWJfc2V0
dGluZ3NfbmV3KCk7CiAgICAgd2Via2l0X3dlYl92aWV3X3VwZGF0ZV9zZXR0aW5ncyh3ZWJWaWV3
KTsKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJzY3JlZW4tY2hhbmdlZCIsIEdfQ0FM
TEJBQ0sod2Via2l0X3dlYl92aWV3X3NjcmVlbl9jaGFuZ2VkKSwgTlVMTCk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChwcml2LT53ZWJTZXR0aW5ncywgIm5vdGlmeSIsIEdfQ0FMTEJBQ0sod2Via2l0
X3dlYl92aWV3X3NldHRpbmdzX25vdGlmeSksIHdlYlZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QocHJpdi0+d2ViU2V0dGluZ3MuZ2V0KCksICJub3RpZnkiLCBHX0NBTExCQUNLKHdlYmtpdF93
ZWJfdmlld19zZXR0aW5nc19ub3RpZnkpLCB3ZWJWaWV3KTsKIH0KIAogR3RrV2lkZ2V0KiB3ZWJr
aXRfd2ViX3ZpZXdfbmV3KHZvaWQpCkBAIC0xNDU1LDEwICsxNDI1LDggQEAKICAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19XRUJfU0VUVElOR1Mod2ViU2V0dGluZ3MpKTsKIAogICAgIFdl
YktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKLSAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocHJpdi0+d2ViU2V0dGluZ3MsIChncG9pbnRlcil3
ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90aWZ5LCB3ZWJWaWV3KTsKLSAgICBnX29iamVjdF91
bnJlZihwcml2LT53ZWJTZXR0aW5ncyk7Ci0gICAgZ19vYmplY3RfcmVmKHdlYlNldHRpbmdzKTsK
LSAgICBwcml2LT53ZWJTZXR0aW5ncyA9IHdlYlNldHRpbmdzOworICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhwcml2LT53ZWJTZXR0aW5ncy5nZXQoKSwgKGdwb2ludGVy
KXdlYmtpdF93ZWJfdmlld19zZXR0aW5nc19ub3RpZnksIHdlYlZpZXcpOworICAgIHByaXYtPndl
YlNldHRpbmdzID0gcmVmUHRyKHdlYlNldHRpbmdzKTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfdXBk
YXRlX3NldHRpbmdzKHdlYlZpZXcpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViU2V0dGluZ3Ms
ICJub3RpZnkiLCBHX0NBTExCQUNLKHdlYmtpdF93ZWJfdmlld19zZXR0aW5nc19ub3RpZnkpLCB3
ZWJWaWV3KTsKICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJzZXR0aW5n
cyIpOwpAQCAtMTQ2OSw3ICsxNDM3LDcgQEAKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIE5VTEwpOwogCiAgICAgV2ViS2l0V2ViVmlld1ByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwotICAgIHJldHVybiBwcml2LT53ZWJTZXR0aW5nczsK
KyAgICByZXR1cm4gcHJpdi0+d2ViU2V0dGluZ3MuZ2V0KCk7CiB9CiAKIC8qKgpAQCAtMTUwMyw3
ICsxNDcxLDcgQEAKICAgICBpZiAoIWNvcmUod2ViVmlldykgfHwgIWNvcmUod2ViVmlldyktPmJh
Y2tGb3J3YXJkTGlzdCgpLT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAg
cmV0dXJuIHByaXYtPmJhY2tGb3J3YXJkTGlzdDsKKyAgICByZXR1cm4gcHJpdi0+YmFja0Zvcndh
cmRMaXN0LmdldCgpOwogfQogCiAvKioKQEAgLTE3NTUsNyArMTcyMyw3IEBACiAgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKIAogICAg
IFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKLSAgICByZXR1cm4g
cHJpdi0+bWFpbkZyYW1lOworICAgIHJldHVybiBwcml2LT5tYWluRnJhbWUuZ2V0KCk7CiB9CiAK
IC8qKgpAQCAtMjAxMyw3ICsxOTgxLDcgQEAKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIE5VTEwpOwogCiAgICAgV2ViS2l0V2ViVmlld1ByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwotICAgIHJldHVybiBwcml2LT5jb3B5X3RhcmdldF9s
aXN0OworICAgIHJldHVybiBwcml2LT5jb3B5X3RhcmdldF9saXN0LmdldCgpOwogfQogCiAvKioK
QEAgLTIwMzMsNyArMjAwMSw3IEBACiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKIAogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBw
cml2ID0gd2ViVmlldy0+cHJpdjsKLSAgICByZXR1cm4gcHJpdi0+cGFzdGVfdGFyZ2V0X2xpc3Q7
CisgICAgcmV0dXJuIHByaXYtPnBhc3RlX3RhcmdldF9saXN0LmdldCgpOwogfQogCiAvKioKQEAg
LTIxNDksNyArMjExNyw3IEBACiAKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdl
YlZpZXctPnByaXY7CiAgICAgZ2Zsb2F0IHpvb21NdWx0aXBsaWVyUmF0aW87Ci0gICAgZ19vYmpl
Y3RfZ2V0KHByaXYtPndlYlNldHRpbmdzLCAiem9vbS1zdGVwIiwgJnpvb21NdWx0aXBsaWVyUmF0
aW8sIE5VTEwpOworICAgIGdfb2JqZWN0X2dldChwcml2LT53ZWJTZXR0aW5ncy5nZXQoKSwgInpv
b20tc3RlcCIsICZ6b29tTXVsdGlwbGllclJhdGlvLCBOVUxMKTsKIAogICAgIHdlYmtpdF93ZWJf
dmlld19zZXRfem9vbV9sZXZlbCh3ZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2
ZWwod2ViVmlldykgKyB6b29tTXVsdGlwbGllclJhdGlvKTsKIH0KQEAgLTIxNzAsNyArMjEzOCw3
IEBACiAKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAg
ICAgZ2Zsb2F0IHpvb21NdWx0aXBsaWVyUmF0aW87Ci0gICAgZ19vYmplY3RfZ2V0KHByaXYtPndl
YlNldHRpbmdzLCAiem9vbS1zdGVwIiwgJnpvb21NdWx0aXBsaWVyUmF0aW8sIE5VTEwpOworICAg
IGdfb2JqZWN0X2dldChwcml2LT53ZWJTZXR0aW5ncy5nZXQoKSwgInpvb20tc3RlcCIsICZ6b29t
TXVsdGlwbGllclJhdGlvLCBOVUxMKTsKIAogICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9s
ZXZlbCh3ZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwod2ViVmlldykgLSB6
b29tTXVsdGlwbGllclJhdGlvKTsKIH0KSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHBy
aXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUu
Y3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRl
LmNwcAkoY29waWEgbG9jYWxlKQpAQCAtMTAyLDkgKzEwMiw4IEBACiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiAgICAgLy8gRklYTUU6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgY2xpZW50IGFw
cGxpY2F0aW9ucyB0byBvdmVycmlkZSB0aGlzIGRlZmF1bHQgbG9jYXRpb24KLSAgICBnY2hhciog
ZGF0YWJhc2VEaXJlY3RvcnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIo
KSwgIndlYmtpdCIsICJkYXRhYmFzZXMiLCBOVUxMKTsKLSAgICBXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXIoKS5zZXREYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3Rv
cnkpOwotICAgIGdfZnJlZShkYXRhYmFzZURpcmVjdG9yeSk7CisgICAgR093blB0cjxnY2hhcj4g
ZGF0YWJhc2VEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCks
ICJ3ZWJraXQiLCAiZGF0YWJhc2VzIiwgTlVMTCkpOworICAgIFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLnNldERhdGFiYXNlRGlyZWN0b3J5UGF0aChkYXRhYmFzZURpcmVjdG9y
eS5nZXQoKSk7CiAjZW5kaWYKIAogICAgIFBhZ2VHcm91cDo6c2V0U2hvdWxkVHJhY2tWaXNpdGVk
TGlua3ModHJ1ZSk7CkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJoaXN0b3J5aXRl
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViaGlzdG9yeWl0
ZW0uY3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJo
aXN0b3J5aXRlbS5jcHAJKGNvcGlhIGxvY2FsZSkKQEAgLTEwNSwxMCArMTA1LDcgQEAKICAgICBX
ZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllf
SVRFTShvYmplY3QpOwogICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSogcHJpdiA9IHdl
Ykhpc3RvcnlJdGVtLT5wcml2OwogCi0gICAgcHJpdi0+dGl0bGUgPSBXZWJDb3JlOjpDU3RyaW5n
KCk7Ci0gICAgcHJpdi0+YWx0ZXJuYXRlVGl0bGUgPSBXZWJDb3JlOjpDU3RyaW5nKCk7Ci0gICAg
cHJpdi0+dXJpID0gV2ViQ29yZTo6Q1N0cmluZygpOwotICAgIHByaXYtPm9yaWdpbmFsVXJpID0g
V2ViQ29yZTo6Q1N0cmluZygpOworICAgIHByaXYtPn5XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZh
dGUoKTsKIAogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CkBAIC0yMDgsNiArMjA1LDcgQEAKIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2luaXQoV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IHdlYkhpc3RvcnlJdGVtKQogewogICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2ID0gV0VCS0lUX1dF
Ql9ISVNUT1JZX0lURU1fR0VUX1BSSVZBVEUod2ViSGlzdG9yeUl0ZW0pOworICAgIG5ldyAod2Vi
SGlzdG9yeUl0ZW0tPnByaXYpIFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSgpOwogfQogCiBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9zZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgJKHJldmlzaW9uZSAzNjMzMykK
KysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAkoY29waWEgbG9jYWxlKQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3Qu
aD4KIAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsu
aCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50LmgiCiAKICNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViS2l0V2ViVmlldyogZ2V0Vmlld0Zyb21GcmFtZShX
ZWJLaXRXZWJGcmFtZSopOwpAQCAtNjYsMjggKzY4LDI3IEBACiAgICAgdHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdQcml2YXRlIFdlYktpdFdlYlZpZXdQcml2YXRlOwogICAgIHN0cnVjdCBf
V2ViS2l0V2ViVmlld1ByaXZhdGUgewogICAgICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlUGFnZTsK
LSAgICAgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHdlYlNldHRpbmdzOworICAgICAgICBHUmVmUHRy
PFdlYktpdFdlYlNldHRpbmdzPiB3ZWJTZXR0aW5nczsKIAotICAgICAgICBXZWJLaXRXZWJGcmFt
ZSogbWFpbkZyYW1lOwotICAgICAgICBXZWJDb3JlOjpTdHJpbmcgYXBwbGljYXRpb25OYW1lRm9y
VXNlckFnZW50OwotICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJBZ2VudDsKKyAgICAgICAg
R1JlZlB0cjxXZWJLaXRXZWJGcmFtZT4gbWFpbkZyYW1lOworICAgICAgICAvL1dlYkNvcmU6OlN0
cmluZyogdXNlckFnZW50OwogCi0gICAgICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0OworICAgICAgICBHUmVmUHRyPFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdD4g
YmFja0ZvcndhcmRMaXN0OwogCiAgICAgICAgIGdpbnQgbGFzdFBvcHVwWFBvc2l0aW9uOwogICAg
ICAgICBnaW50IGxhc3RQb3B1cFlQb3NpdGlvbjsKIAogICAgICAgICBIYXNoU2V0PEd0a1dpZGdl
dCo+IGNoaWxkcmVuOwogICAgICAgICBib29sIGVkaXRhYmxlOwotICAgICAgICBHdGtJTUNvbnRl
eHQqIGltQ29udGV4dDsKKyAgICAgICAgR1JlZlB0cjxHdGtJTUNvbnRleHQ+IGltQ29udGV4dDsK
IAotICAgICAgICBHdGtUYXJnZXRMaXN0KiBjb3B5X3RhcmdldF9saXN0OwotICAgICAgICBHdGtU
YXJnZXRMaXN0KiBwYXN0ZV90YXJnZXRfbGlzdDsKKyAgICAgICAgR1JlZlB0cjxHdGtUYXJnZXRM
aXN0PiBjb3B5X3RhcmdldF9saXN0OworICAgICAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IHBh
c3RlX3RhcmdldF9saXN0OwogCiAgICAgICAgIGdib29sZWFuIHRyYW5zcGFyZW50OwogCi0gICAg
ICAgIEd0a0FkanVzdG1lbnQqIGhvcml6b250YWxBZGp1c3RtZW50OwotICAgICAgICBHdGtBZGp1
c3RtZW50KiB2ZXJ0aWNhbEFkanVzdG1lbnQ7CisgICAgICAgIEdSZWZQdHI8R3RrQWRqdXN0bWVu
dD4gaG9yaXpvbnRhbEFkanVzdG1lbnQ7CisgICAgICAgIEdSZWZQdHI8R3RrQWRqdXN0bWVudD4g
dmVydGljYWxBZGp1c3RtZW50OwogCiAgICAgICAgIGdib29sZWFuIHpvb21GdWxsQ29udGVudDsK
ICAgICB9OwpAQCAtOTksOSArMTAwLDkgQEAKICAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnQqIGNsaWVudDsKICAgICAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKIAotICAgICAg
ICBnY2hhciogbmFtZTsKLSAgICAgICAgZ2NoYXIqIHRpdGxlOwotICAgICAgICBnY2hhciogdXJp
OworICAgICAgICBHT3duUHRyPGdjaGFyPiBuYW1lOworICAgICAgICBHT3duUHRyPGdjaGFyPiB0
aXRsZTsKKyAgICAgICAgR093blB0cjxnY2hhcj4gdXJpOwogICAgIH07CiAKICAgICBXZWJLaXRX
ZWJGcmFtZSoKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxv
ZwkoY29waWEgbG9jYWxlKQpAQCAtMSwzICsxLDQ5IEBACisyMDA4LTA5LTExICBNYXJjbyBCYXJp
c2lvbmUgIDxtYXJjby5iYXJpc2lvbmVAY29sbGFib3JhLmNvLnVrPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdCBHVEsgUG9ydCBuZWVkcyBh
IHNtYXJ0cG9pbnRlciB0byBoYW5kbGUgZ19mcmVlIChHRnJlZVB0cj8pCisgICAgICAgIGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDgzCisKKyAgICAgICAgVXNlIEdP
d25QdHIgYW5kIEdSZWZQdHIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRQ
cm9tcHQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6aW5wdXRNZXRob2RzTWVudUl0ZW0pOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmltQ29u
dGV4dFByZWVkaXRDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpzZXRJ
bnB1dE1ldGhvZFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpyZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50OjpoYW5k
bGVJbnB1dE1ldGhvZEtleWRvd24pOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnQ6OkVk
aXRvckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudDo6fkVkaXRvckNsaWVu
dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50OjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFu
c2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0bmV0
d29ya3JlcXVlc3QuY3BwOgorICAgICAgICAoX1dlYktpdE5ldHdvcmtSZXF1ZXN0UHJpdmF0ZTo6
d2Via2l0X25ldHdvcmtfcmVxdWVzdF9maW5hbGl6ZSk6CisgICAgICAgIChfV2ViS2l0TmV0d29y
a1JlcXVlc3RQcml2YXRlOjp3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2luaXQpOgorICAgICAgICAo
X1dlYktpdE5ldHdvcmtSZXF1ZXN0UHJpdmF0ZTo6d2Via2l0X25ldHdvcmtfcmVxdWVzdF9uZXcp
OgorICAgICAgICAoX1dlYktpdE5ldHdvcmtSZXF1ZXN0UHJpdmF0ZTo6d2Via2l0X25ldHdvcmtf
cmVxdWVzdF9zZXRfdXJpKToKKyAgICAgICAgKF9XZWJLaXROZXR3b3JrUmVxdWVzdFByaXZhdGU6
OndlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaSk6CisgICAgICAgICogd2Via2l0L3dlYmtp
dHByaXZhdGUuY3BwOgorICAgICAgICAod2Via2l0X2luaXQpOgorICAgICAgICAqIHdlYmtpdC93
ZWJraXRwcml2YXRlLmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoKKyAg
ICAgICAgKiB3ZWJraXQvd2Via2l0d2ViaGlzdG9yeWl0ZW0uY3BwOgorICAgICAgICAoX1dlYktp
dFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZmluYWxpemUp
OgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1faW5pdCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmNwcDoK
KyAgICAgICAgKF9XZWJLaXRXZWJTZXR0aW5nc1ByaXZhdGU6OndlYmtpdF93ZWJfc2V0dGluZ3Nf
aW5pdCk6CisgICAgICAgIChfV2ViS2l0V2ViU2V0dGluZ3NQcml2YXRlOjp3ZWJraXRfd2ViX3Nl
dHRpbmdzX2ZpbmFsaXplKToKKyAgICAgICAgKF9XZWJLaXRXZWJTZXR0aW5nc1ByaXZhdGU6Ondl
YmtpdF93ZWJfc2V0dGluZ3Nfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKF9XZWJLaXRXZWJTZXR0
aW5nc1ByaXZhdGU6OndlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAg
KF9XZWJLaXRXZWJTZXR0aW5nc1ByaXZhdGU6OndlYmtpdF93ZWJfc2V0dGluZ3NfY29weSk6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorCiAyMDA4LTA5LTEwICBBbHAgVG9r
ZXIgIDxhbHBAbnVhbnRpLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCklu
ZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHJldmlzaW9uZSAzNjMzMykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKGNv
cGlhIGxvY2FsZSkKQEAgLTE5MjMsNiArMTkyMyw4IEBACiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RXZlbnRMb29wR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dS
ZWZQdHJHdGsuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9LZXlib2FyZENvZGVzLmggXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0xhbmd1YWdlLmNwcCBcCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5j
cHAJKHJldmlzaW9uZSAzNjMzMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0
ay5jcHAJKGNvcGlhIGxvY2FsZSkKQEAgLTM1LDE0ICszNSwxMSBAQAogCiBQb3B1cE1lbnU6OlBv
cHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkKICAgICA6IG1fcG9wdXBDbGllbnQoY2xp
ZW50KQotICAgICwgbV9wb3B1cCgwKQogewogfQogCiBQb3B1cE1lbnU6On5Qb3B1cE1lbnUoKQog
ewotICAgIGlmIChtX3BvcHVwKQotICAgICAgICBnX29iamVjdF91bnJlZihtX3BvcHVwKTsKIH0K
IAogdm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2
aWV3LCBpbnQgaW5kZXgpCkBAIC01MiwxNCArNDksMTQgQEAKICAgICBpZiAoIW1fcG9wdXApIHsK
ICAgICAgICAgbV9wb3B1cCA9IEdUS19NRU5VKGd0a19tZW51X25ldygpKTsKICNpZiBHTElCX0NI
RUNLX1ZFUlNJT04oMiwxMCwwKQotICAgICAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCht
X3BvcHVwKSk7CisgICAgICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNUKG1fcG9wdXAuZ2V0
KCkpKTsKICNlbHNlCi0gICAgICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChtX3BvcHVwKSk7Ci0g
ICAgICAgIGd0a19vYmplY3Rfc2luayhHVEtfT0JKRUNUKG1fcG9wdXApKTsKKyAgICAgICAgZ19v
YmplY3RfcmVmKEdfT0JKRUNUKG1fcG9wdXAuZ2V0KCkpKTsKKyAgICAgICAgZ3RrX29iamVjdF9z
aW5rKEdUS19PQkpFQ1QobV9wb3B1cC5nZXQoKSkpOwogI2VuZGlmCi0gICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9wb3B1cCwgInVubWFwIiwgR19DQUxMQkFDSyhtZW51VW5tYXBwZWQpLCB0aGlz
KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3BvcHVwLmdldCgpLCAidW5tYXAiLCBHX0NB
TExCQUNLKG1lbnVVbm1hcHBlZCksIHRoaXMpOwogICAgIH0gZWxzZQotICAgICAgICBndGtfY29u
dGFpbmVyX2ZvcmVhY2goR1RLX0NPTlRBSU5FUihtX3BvcHVwKSwgcmVpbnRlcnByZXRfY2FzdDxH
dGtDYWxsYmFjaz4obWVudVJlbW92ZUl0ZW0pLCB0aGlzKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5l
cl9mb3JlYWNoKEdUS19DT05UQUlORVIobV9wb3B1cC5nZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8
R3RrQ2FsbGJhY2s+KG1lbnVSZW1vdmVJdGVtKSwgdGhpcyk7CiAKICAgICBpbnQgeCwgeTsKICAg
ICBnZGtfd2luZG93X2dldF9vcmlnaW4oR1RLX1dJREdFVCh2aWV3LT5jb250YWluaW5nV2luZG93
KCkpLT53aW5kb3csICZ4LCAmeSk7CkBAIC04MCwyMCArNzcsMjAgQEAKIAogICAgICAgICAvLyBG
SVhNRTogQXBwbHkgdGhlIFJlbmRlclN0eWxlIGZyb20gY2xpZW50KCktPml0ZW1TdHlsZShpKQog
ICAgICAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoaXRlbSwgY2xpZW50KCktPml0ZW1Jc0Vu
YWJsZWQoaSkpOwotICAgICAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwo
bV9wb3B1cCksIGl0ZW0pOworICAgICAgICBndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVf
U0hFTEwobV9wb3B1cC5nZXQoKSksIGl0ZW0pOwogICAgICAgICBndGtfd2lkZ2V0X3Nob3coaXRl
bSk7CiAgICAgfQogCi0gICAgZ3RrX21lbnVfc2V0X2FjdGl2ZShtX3BvcHVwLCBpbmRleCk7Cisg
ICAgZ3RrX21lbnVfc2V0X2FjdGl2ZShtX3BvcHVwLmdldCgpLCBpbmRleCk7CiAKIAogICAgIC8v
IFRoZSBzaXplIGNhbGxzIGFyZSBkaXJlY3RseSBjb3BpZWQgZnJvbSBndGtjb21ib2JveC5jIHdo
aWNoIGlzIExHUEwKICAgICBHdGtSZXF1aXNpdGlvbiByZXF1aXNpdGlvbjsKLSAgICBndGtfd2lk
Z2V0X3NldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3BvcHVwKSwgLTEsIC0xKTsKLSAgICBn
dGtfd2lkZ2V0X3NpemVfcmVxdWVzdChHVEtfV0lER0VUKG1fcG9wdXApLCAmcmVxdWlzaXRpb24p
OwotICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChHVEtfV0lER0VUKG1fcG9wdXApLCBN
QVgocmVjdC53aWR0aCgpLCByZXF1aXNpdGlvbi53aWR0aCksIC0xKTsKKyAgICBndGtfd2lkZ2V0
X3NldF9zaXplX3JlcXVlc3QoR1RLX1dJREdFVChtX3BvcHVwLmdldCgpKSwgLTEsIC0xKTsKKyAg
ICBndGtfd2lkZ2V0X3NpemVfcmVxdWVzdChHVEtfV0lER0VUKG1fcG9wdXAuZ2V0KCkpLCAmcmVx
dWlzaXRpb24pOworICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdChHVEtfV0lER0VUKG1f
cG9wdXAuZ2V0KCkpLCBNQVgocmVjdC53aWR0aCgpLCByZXF1aXNpdGlvbi53aWR0aCksIC0xKTsK
IAotICAgIEdMaXN0KiBjaGlsZHJlbiA9IEdUS19NRU5VX1NIRUxMKG1fcG9wdXApLT5jaGlsZHJl
bjsKKyAgICBHTGlzdCogY2hpbGRyZW4gPSBHVEtfTUVOVV9TSEVMTChtX3BvcHVwLmdldCgpKS0+
Y2hpbGRyZW47CiAgICAgaWYgKHNpemUpCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoaSA+IGluZGV4KQpAQCAtMTEwLDEzICsxMDcsMTMg
QEAKICAgICAgICAgLy8gQ2VudGVyIHZlcnRpY2FsbHkgdGhlIGVtcHR5IHBvcHVwIGluIHRoZSBj
b21ibyBib3ggYXJlYQogICAgICAgICBtX21lbnVQb3NpdGlvbi5zZXRZKG1fbWVudVBvc2l0aW9u
LnkoKSAtIHJlY3QuaGVpZ2h0KCkgLyAyKTsKIAotICAgIGd0a19tZW51X3BvcHVwKG1fcG9wdXAs
IE5VTEwsIE5VTEwsIHJlaW50ZXJwcmV0X2Nhc3Q8R3RrTWVudVBvc2l0aW9uRnVuYz4obWVudVBv
c2l0aW9uRnVuY3Rpb24pLCB0aGlzLCAwLCBndGtfZ2V0X2N1cnJlbnRfZXZlbnRfdGltZSgpKTsK
KyAgICBndGtfbWVudV9wb3B1cChtX3BvcHVwLmdldCgpLCBOVUxMLCBOVUxMLCByZWludGVycHJl
dF9jYXN0PEd0a01lbnVQb3NpdGlvbkZ1bmM+KG1lbnVQb3NpdGlvbkZ1bmN0aW9uKSwgdGhpcywg
MCwgZ3RrX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoKSk7CiB9CiAKIHZvaWQgUG9wdXBNZW51Ojpo
aWRlKCkKIHsKICAgICBBU1NFUlQobV9wb3B1cCk7Ci0gICAgZ3RrX21lbnVfcG9wZG93bihtX3Bv
cHVwKTsKKyAgICBndGtfbWVudV9wb3Bkb3duKG1fcG9wdXAuZ2V0KCkpOwogfQogCiB2b2lkIFBv
cHVwTWVudTo6dXBkYXRlRnJvbUVsZW1lbnQoKQpAQCAtMTUyLDcgKzE0OSw3IEBACiB2b2lkIFBv
cHVwTWVudTo6bWVudVJlbW92ZUl0ZW0oR3RrV2lkZ2V0KiB3aWRnZXQsIFBvcHVwTWVudSogdGhh
dCkKIHsKICAgICBBU1NFUlQodGhhdC0+bV9wb3B1cCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9yZW1v
dmUoR1RLX0NPTlRBSU5FUih0aGF0LT5tX3BvcHVwKSwgd2lkZ2V0KTsKKyAgICBndGtfY29udGFp
bmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKHRoYXQtPm1fcG9wdXAuZ2V0KCkpLCB3aWRnZXQpOwog
fQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsuY3BwCShyZXZp
c2lvbmUgMzYzMzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHAJ
KGNvcGlhIGxvY2FsZSkKQEAgLTM3LDQ2ICszNywzNCBAQAogI2luY2x1ZGUgPGdsaWIuaD4KICNp
bmNsdWRlIDxnbGliL2dpMThuLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0
Zi9HT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgc3RyaW5n
QnlBZG9wdGluZ0ZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihnY2hhciogc3lzdGVtRmlsZW5hbWUs
IFN0cmluZyYgcmVzdWx0KQotewotICAgIGlmICghc3lzdGVtRmlsZW5hbWUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfZmlsZW5hbWVfdG9fdXRmOChz
eXN0ZW1GaWxlbmFtZSwgLTEsIDAsIDAsIDApOwotICAgIGdfZnJlZShzeXN0ZW1GaWxlbmFtZSk7
Ci0KLSAgICBpZiAoIWZpbGVuYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1
bHQgPSBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKTsKLSAgICBnX2ZyZWUoZmlsZW5hbWUpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIEZpbGVDaG9vc2VyOjpvcGVuRmlsZUNob29zZXIo
RG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50LT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBHdGtXaWRnZXQq
IGRpYWxvZyA9IGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhfKCJVcGxvYWQgRmlsZSIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19X
SU5ET1coZ3RrX3dpZGdldF9nZXRfdG9wbGV2ZWwoR1RLX1dJREdFVCh2aWV3LT5jb250YWluaW5n
V2luZG93KCkpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX0ZJTEVfQ0hPT1NFUl9BQ1RJT05fT1BFTiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLCBHVEtf
UkVTUE9OU0VfQ0FOQ0VMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdUS19TVE9DS19PUEVOLCBHVEtfUkVTUE9OU0VfQUNDRVBULAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAg
IEd0a1dpZGdldCogZGlhbG9nKGd0a19maWxlX2Nob29zZXJfZGlhbG9nX25ldyhfKCJVcGxvYWQg
RmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHVEtfV0lORE9XKGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKEdUS19XSURHRVQodmlldy0+Y29u
dGFpbmluZ1dpbmRvdygpKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX09QRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RL
X1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT1BFTiwgR1RL
X1JFU1BPTlNFX0FDQ0VQVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMKSk7CiAKICAgICAvLyBXZSBuZWVkIHRoaXMgcHJvdGVj
dG9yIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIGNhbiBiZSBkZWxldGVkIGlmIHRoZSBmaWxlIHVwbG9h
ZCBjb250cm9sIGlzIGRldGFjaGVkIHdoaWxlCiAgICAgLy8gd2UncmUgd2l0aGluIHRoZSBndGtf
cnVuX2RpYWxvZyBjYWxsLgogICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJvdGVjdG9yKHRoaXMp
OwotICAgIFN0cmluZyByZXN1bHQ7CiAKLSAgICBjb25zdCBib29sIGFjY2VwdGVkRGlhbG9nID0g
Z3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKSA9PSBHVEtfUkVTUE9OU0VfQUNDRVBU
OwotICAgIGlmIChhY2NlcHRlZERpYWxvZyAmJiBzdHJpbmdCeUFkb3B0aW5nRmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKGd0a19maWxlX2Nob29zZXJfZ2V0X2ZpbGVuYW1lKEdUS19GSUxFX0NIT09T
RVIoZGlhbG9nKSksIHJlc3VsdCkpCi0gICAgICAgIGNob29zZUZpbGUocmVzdWx0KTsKKyAgICBp
ZiAoZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKSA9PSBHVEtfUkVTUE9OU0VfQUND
RVBUKSB7CisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHN5c3RlbUZpbGVuYW1lKGd0a19maWxlX2No
b29zZXJfZ2V0X2ZpbGVuYW1lKEdUS19GSUxFX0NIT09TRVIoZGlhbG9nKSkpOworICAgICAgICBH
T3duUHRyPGdjaGFyPiBmaWxlbmFtZShnX2ZpbGVuYW1lX3RvX3V0Zjgoc3lzdGVtRmlsZW5hbWUu
Z2V0KCksIC0xLCAwLCAwLCAwKSk7CisgICAgICAgIGlmIChmaWxlbmFtZSkKKyAgICAgICAgICAg
IGNob29zZUZpbGUoZmlsZW5hbWUuZ2V0KCkpOworICAgIH0KKwogICAgIGd0a193aWRnZXRfZGVz
dHJveShkaWFsb2cpOwogfQogCkBAIC04OCwxMiArNzYsMTEgQEAKICAgICBTdHJpbmcgc3RyaW5n
ID0gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKIAogICAgIGlmICghbV9maWxlbmFt
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ2NoYXIqIHN5c3RlbUZpbGVuYW1lID0gZ19maWxlbmFt
ZV9mcm9tX3V0ZjgobV9maWxlbmFtZS51dGY4KCkuZGF0YSgpLCAtMSwgMCwgMCwgMCk7CisgICAg
ICAgIEdPd25QdHI8Z2NoYXI+IHN5c3RlbUZpbGVuYW1lKGdfZmlsZW5hbWVfZnJvbV91dGY4KG1f
ZmlsZW5hbWUudXRmOCgpLmRhdGEoKSwgLTEsIDAsIDAsIDApKTsKICAgICAgICAgaWYgKHN5c3Rl
bUZpbGVuYW1lKSB7Ci0gICAgICAgICAgICBnY2hhciogc3lzdGVtQmFzZW5hbWUgPSBnX3BhdGhf
Z2V0X2Jhc2VuYW1lKHN5c3RlbUZpbGVuYW1lKTsKLSAgICAgICAgICAgIGdfZnJlZShzeXN0ZW1G
aWxlbmFtZSk7Ci0KLSAgICAgICAgICAgIHN0cmluZ0J5QWRvcHRpbmdGaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24oc3lzdGVtQmFzZW5hbWUsIHN0cmluZyk7CisgICAgICAgICAgICBHT3duUHRyPGdj
aGFyPiBzeXN0ZW1CYXNlbmFtZShnX3BhdGhfZ2V0X2Jhc2VuYW1lKHN5c3RlbUZpbGVuYW1lLmdl
dCgpKSk7CisgICAgICAgICAgICBHT3duUHRyPGdjaGFyPiBiYXNlbmFtZShnX2ZpbGVuYW1lX3Rv
X3V0Zjgoc3lzdGVtRmlsZW5hbWUuZ2V0KCksIC0xLCAwLCAwLCAwKSk7CisgICAgICAgICAgICBz
dHJpbmcgPSBiYXNlbmFtZS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9DdXJzb3JHdGsuY3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9DdXJzb3JHdGsuY3BwCShjb3BpYSBsb2NhbGUpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ3Vyc29yR3RrLmgiCiAKKyNpbmNsdWRlICJH
UmVmUHRyR3RrLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgogCkBAIC00NCwxMSArNDUsOSBAQAogICAgICAgICBjb25zdCBHZGtDb2xv
ciBmZyA9IHsgMCwgMCwgMCwgMCB9OwogICAgICAgICBjb25zdCBHZGtDb2xvciBiZyA9IHsgNjU1
MzUsIDY1NTM1LCA2NTUzNSwgNjU1MzUgfTsKIAotICAgICAgICBHZGtQaXhtYXAqIHNvdXJjZSA9
IGdka19iaXRtYXBfY3JlYXRlX2Zyb21fZGF0YShOVUxMLCBjdXJzb3IuYml0cywgMzIsIDMyKTsK
LSAgICAgICAgR2RrUGl4bWFwKiBtYXNrID0gZ2RrX2JpdG1hcF9jcmVhdGVfZnJvbV9kYXRhKE5V
TEwsIGN1cnNvci5tYXNrX2JpdHMsIDMyLCAzMik7Ci0gICAgICAgIGMgPSBnZGtfY3Vyc29yX25l
d19mcm9tX3BpeG1hcChzb3VyY2UsIG1hc2ssICZmZywgJmJnLCBjdXJzb3IuaG90X3gsIGN1cnNv
ci5ob3RfeSk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKHNvdXJjZSk7Ci0gICAgICAgIGdfb2Jq
ZWN0X3VucmVmKG1hc2spOworICAgICAgICBHUmVmUHRyPEdka1BpeG1hcD4gc291cmNlID0gZ2Rr
X2JpdG1hcF9jcmVhdGVfZnJvbV9kYXRhKE5VTEwsIGN1cnNvci5iaXRzLCAzMiwgMzIpOworICAg
ICAgICBHUmVmUHRyPEdka1BpeG1hcD4gbWFzayA9IGdka19iaXRtYXBfY3JlYXRlX2Zyb21fZGF0
YShOVUxMLCBjdXJzb3IubWFza19iaXRzLCAzMiwgMzIpOworICAgICAgICBjID0gZ2RrX2N1cnNv
cl9uZXdfZnJvbV9waXhtYXAoc291cmNlLmdldCgpLCBtYXNrLmdldCgpLCAmZmcsICZiZywgY3Vy
c29yLmhvdF94LCBjdXJzb3IuaG90X3kpOwogICAgIH0KICAgICByZXR1cm4gYzsKIH0KQEAgLTU3
LDggKzU2LDYgQEAKIEN1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCiAgICAgOiBt
X2ltcGwob3RoZXIubV9pbXBsKQogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIGdka19jdXJz
b3JfcmVmKG1faW1wbCk7CiB9CiAKIEN1cnNvcjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9p
bnQmKQpAQCAtNjgsMTQ5ICs2NSwxNDMgQEAKIAogQ3Vyc29yOjp+Q3Vyc29yKCkKIHsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBnZGtfY3Vyc29yX3VucmVmKG1faW1wbCk7CiB9CiAKIEN1cnNv
ciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKIHsKLSAgICBnZGtfY3Vy
c29yX3JlZihvdGhlci5tX2ltcGwpOwotICAgIGdka19jdXJzb3JfdW5yZWYobV9pbXBsKTsKICAg
ICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1DdXJzb3I6
OkN1cnNvcihHZGtDdXJzb3IqIGMpCitDdXJzb3I6OkN1cnNvcihQbGF0Zm9ybUN1cnNvciBjKQog
ICAgIDogbV9pbXBsKGMpCiB7Ci0gICAgbV9pbXBsID0gYzsKICAgICBBU1NFUlQoYyk7Ci0gICAg
Z2RrX2N1cnNvcl9yZWYoYyk7CiB9CiAKIGNvbnN0IEN1cnNvciYgcG9pbnRlckN1cnNvcigpCiB7
Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfUFRSKTsKKyAg
ICBzdGF0aWMgQ3Vyc29yIGMoZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfUFRSKSk7CiAgICAgcmV0
dXJuIGM7CiB9CiAKIGNvbnN0IEN1cnNvciYgY3Jvc3NDdXJzb3IoKQogewotICAgIHN0YXRpYyBD
dXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19DUk9TUyk7CisgICAgc3RhdGljIEN1cnNvciBj
KGdka19jdXJzb3JfbmV3KEdES19DUk9TUykpOwogICAgIHJldHVybiBjOwogfQogCiBjb25zdCBD
dXJzb3ImIGhhbmRDdXJzb3IoKQogewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3Jf
bmV3KEdES19IQU5EMik7CisgICAgc3RhdGljIEN1cnNvciBjKGdka19jdXJzb3JfbmV3KEdES19I
QU5EMikpOwogICAgIHJldHVybiBjOwogfQogCiBjb25zdCBDdXJzb3ImIG1vdmVDdXJzb3IoKQog
ewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19GTEVVUik7CisgICAg
c3RhdGljIEN1cnNvciBjKGdka19jdXJzb3JfbmV3KEdES19GTEVVUikpOwogICAgIHJldHVybiBj
OwogfQogCiBjb25zdCBDdXJzb3ImIGlCZWFtQ3Vyc29yKCkKIHsKLSAgICBzdGF0aWMgQ3Vyc29y
IGMgPSBnZGtfY3Vyc29yX25ldyhHREtfWFRFUk0pOworICAgIHN0YXRpYyBDdXJzb3IgYyhnZGtf
Y3Vyc29yX25ldyhHREtfWFRFUk0pKTsKICAgICByZXR1cm4gYzsKIH0KIAogY29uc3QgQ3Vyc29y
JiB3YWl0Q3Vyc29yKCkKIHsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhH
REtfV0FUQ0gpOworICAgIHN0YXRpYyBDdXJzb3IgYyhnZGtfY3Vyc29yX25ldyhHREtfV0FUQ0gp
KTsKICAgICByZXR1cm4gYzsKIH0KIAogY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKIHsKLSAg
ICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfUVVFU1RJT05fQVJST1cpOwor
ICAgIHN0YXRpYyBDdXJzb3IgYyhnZGtfY3Vyc29yX25ldyhHREtfUVVFU1RJT05fQVJST1cpKTsK
ICAgICByZXR1cm4gYzsKIH0KIAogY29uc3QgQ3Vyc29yJiBlYXN0UmVzaXplQ3Vyc29yKCkKIHsK
LSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfUklHSFRfU0lERSk7Cisg
ICAgc3RhdGljIEN1cnNvciBjKGdka19jdXJzb3JfbmV3KEdES19SSUdIVF9TSURFKSk7CiAgICAg
cmV0dXJuIGM7CiB9CiAKIGNvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQogewotICAg
IHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19UT1BfU0lERSk7CisgICAgc3Rh
dGljIEN1cnNvciBjKGdka19jdXJzb3JfbmV3KEdES19UT1BfU0lERSkpOwogICAgIHJldHVybiBj
OwogfQogCiBjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpCiB7Ci0gICAgc3Rh
dGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9SSUdIVF9DT1JORVIpOworICAg
IHN0YXRpYyBDdXJzb3IgYyhnZGtfY3Vyc29yX25ldyhHREtfVE9QX1JJR0hUX0NPUk5FUikpOwog
ICAgIHJldHVybiBjOwogfQogCiBjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigp
CiB7Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9MRUZUX0NP
Uk5FUik7CisgICAgc3RhdGljIEN1cnNvciBjKGdka19jdXJzb3JfbmV3KEdES19UT1BfTEVGVF9D
T1JORVIpKTsKICAgICByZXR1cm4gYzsKIH0KIAogY29uc3QgQ3Vyc29yJiBzb3V0aFJlc2l6ZUN1
cnNvcigpCiB7Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRP
TV9TSURFKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGMoZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9T
SURFKSk7CiAgICAgcmV0dXJuIGM7CiB9CiAKIGNvbnN0IEN1cnNvciYgc291dGhFYXN0UmVzaXpl
Q3Vyc29yKCkKIHsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfQk9U
VE9NX1JJR0hUX0NPUk5FUik7CisgICAgc3RhdGljIEN1cnNvciBjKGdka19jdXJzb3JfbmV3KEdE
S19CT1RUT01fUklHSFRfQ09STkVSKSk7CiAgICAgcmV0dXJuIGM7CiB9CiAKIGNvbnN0IEN1cnNv
ciYgc291dGhXZXN0UmVzaXplQ3Vyc29yKCkKIHsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtf
Y3Vyc29yX25ldyhHREtfQk9UVE9NX0xFRlRfQ09STkVSKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGMo
Z2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9MRUZUX0NPUk5FUikpOwogICAgIHJldHVybiBjOwog
fQogCiBjb25zdCBDdXJzb3ImIHdlc3RSZXNpemVDdXJzb3IoKQogewotICAgIHN0YXRpYyBDdXJz
b3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpOworICAgIHN0YXRpYyBDdXJzb3Ig
YyhnZGtfY3Vyc29yX25ldyhHREtfTEVGVF9TSURFKSk7CiAgICAgcmV0dXJuIGM7CiB9CiAKIGNv
bnN0IEN1cnNvciYgbm9ydGhTb3V0aFJlc2l6ZUN1cnNvcigpCiB7Ci0gICAgc3RhdGljIEN1cnNv
ciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9URUUpOworICAgIHN0YXRpYyBDdXJzb3IgYyhn
ZGtfY3Vyc29yX25ldyhHREtfVE9QX1RFRSkpOwogICAgIHJldHVybiBjOwogfQogCiBjb25zdCBD
dXJzb3ImIGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkKIHsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBn
ZGtfY3Vyc29yX25ldyhHREtfTEVGVF9TSURFKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGMoZ2RrX2N1
cnNvcl9uZXcoR0RLX0xFRlRfU0lERSkpOwogICAgIHJldHVybiBjOwogfQogCiBjb25zdCBDdXJz
b3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCiB7Ci0gICAgc3RhdGljIEN1cnNv
ciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1NJWklORyk7CisgICAgc3RhdGljIEN1cnNvciBjKGdk
a19jdXJzb3JfbmV3KEdES19TSVpJTkcpKTsKICAgICByZXR1cm4gYzsKIH0KIAogY29uc3QgQ3Vy
c29yJiBub3J0aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3IoKQogewotICAgIHN0YXRpYyBDdXJz
b3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19TSVpJTkcpOworICAgIHN0YXRpYyBDdXJzb3IgYyhn
ZGtfY3Vyc29yX25ldyhHREtfU0laSU5HKSk7CiAgICAgcmV0dXJuIGM7CiB9CiAKIGNvbnN0IEN1
cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKIHsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtf
Y3Vyc29yX25ldyhHREtfRE9VQkxFX0FSUk9XKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGMoZ2RrX2N1
cnNvcl9uZXcoR0RLX0RPVUJMRV9BUlJPVykpOwogICAgIHJldHVybiBjOwogfQogCiBjb25zdCBD
dXJzb3ImIHJvd1Jlc2l6ZUN1cnNvcigpCiB7Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1
cnNvcl9uZXcoR0RLX0RPVUJMRV9BUlJPVyk7CisgICAgc3RhdGljIEN1cnNvciBjKGdka19jdXJz
b3JfbmV3KEdES19ET1VCTEVfQVJST1cpKTsKICAgICByZXR1cm4gYzsKIH0KICAgICAKQEAgLTI2
Miw3ICsyNTMsNyBAQAogCiBjb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCiB7Ci0g
ICAgc3RhdGljIEN1cnNvciBjID0gY3VzdG9tQ3Vyc29yTmV3KEN1c3RvbUN1cnNvclZlcnRpY2Fs
VGV4dCk7CisgICAgc3RhdGljIEN1cnNvciBjKGN1c3RvbUN1cnNvck5ldyhDdXN0b21DdXJzb3JW
ZXJ0aWNhbFRleHQpKTsKICAgICByZXR1cm4gYzsKIH0KIApAQCAtMjc0LDcgKzI2NSw3IEBACiAK
IGNvbnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJzb3IoKQogewotICAgIHN0YXRpYyBDdXJzb3Ig
YyA9IGN1c3RvbUN1cnNvck5ldyhDdXN0b21DdXJzb3JDb250ZXh0TWVudSk7CisgICAgc3RhdGlj
IEN1cnNvciBjKGN1c3RvbUN1cnNvck5ldyhDdXN0b21DdXJzb3JDb250ZXh0TWVudSkpOwogICAg
IHJldHVybiBjOwogfQogCkBAIC0yODYsNyArMjc3LDcgQEAKIAogY29uc3QgQ3Vyc29yJiBjb3B5
Q3Vyc29yKCkKIHsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBjdXN0b21DdXJzb3JOZXcoQ3VzdG9t
Q3Vyc29yQ29weSk7CisgICAgc3RhdGljIEN1cnNvciBjKGN1c3RvbUN1cnNvck5ldyhDdXN0b21D
dXJzb3JDb3B5KSk7CiAgICAgcmV0dXJuIGM7CiB9CiAKQEAgLTI5OCw3ICsyODksNyBAQAogCiBj
b25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkKIHsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBjdXN0
b21DdXJzb3JOZXcoQ3VzdG9tQ3Vyc29yQWxpYXMpOworICAgIHN0YXRpYyBDdXJzb3IgYyhjdXN0
b21DdXJzb3JOZXcoQ3VzdG9tQ3Vyc29yQWxpYXMpKTsKICAgICByZXR1cm4gYzsKIH0KIApAQCAt
MzE2LDEzICszMDcsMTMgQEAKIAogY29uc3QgQ3Vyc29yJiB6b29tSW5DdXJzb3IoKQogewotICAg
IHN0YXRpYyBDdXJzb3IgYyA9IGN1c3RvbUN1cnNvck5ldyhDdXN0b21DdXJzb3Jab29tSW4pOwor
ICAgIHN0YXRpYyBDdXJzb3IgYyhjdXN0b21DdXJzb3JOZXcoQ3VzdG9tQ3Vyc29yWm9vbUluKSk7
CiAgICAgcmV0dXJuIGM7CiB9CiAKIGNvbnN0IEN1cnNvciYgem9vbU91dEN1cnNvcigpCiB7Ci0g
ICAgc3RhdGljIEN1cnNvciBjID0gY3VzdG9tQ3Vyc29yTmV3KEN1c3RvbUN1cnNvclpvb21PdXQp
OworICAgIHN0YXRpYyBDdXJzb3IgYyhjdXN0b21DdXJzb3JOZXcoQ3VzdG9tQ3Vyc29yWm9vbU91
dCkpOwogICAgIHJldHVybiBjOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVm
UHRyR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5o
CShyZXZpc2lvbmUgMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaAkocmV2
aXNpb25lIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBHUmVmUHRyR3RrX2gKKyNkZWZpbmUgR1JlZlB0ckd0a19oCisK
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL0dSZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKKyAgdGVtcGxhdGUgPD4gR3RrVGFyZ2V0TGlzdCogcmVmUHRyKEd0a1Rhcmdl
dExpc3QqIHB0cik7CisgIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZQdHIoR3RrVGFyZ2V0TGlzdCog
cHRyKTsKKworICB0ZW1wbGF0ZSA8PiBHZGtDdXJzb3IqIHJlZlB0cihHZGtDdXJzb3IqIHB0cik7
CisgIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZQdHIoR2RrQ3Vyc29yKiBwdHIpOworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEdSZWZQdHJHdGtfaApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAJKHJldmlzaW9uZSAzNjMzMykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCShjb3BpYSBsb2NhbGUpCkBAIC0xNTAsMjAgKzE1
MCwxOSBAQAogewogICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7CiAKLSAgICBHRGlyKiBkaXIg
PSBnX2Rpcl9vcGVuKChwYXRoLnV0ZjgoKSkuZGF0YSgpLCAwLCAwKTsKKyAgICBHT3duUHRyPEdE
aXI+IGRpcihnX2Rpcl9vcGVuKChwYXRoLnV0ZjgoKSkuZGF0YSgpLCAwLCAwKSk7CiAgICAgaWYg
KCFkaXIpCiAgICAgICAgIHJldHVybiBlbnRyaWVzOwogCi0gICAgR1BhdHRlcm5TcGVjICpwc3Bl
YyA9IGdfcGF0dGVybl9zcGVjX25ldygoZmlsdGVyLnV0ZjgoKSkuZGF0YSgpKTsKLSAgICB3aGls
ZSAoY29uc3QgY2hhciogbmFtZSA9IGdfZGlyX3JlYWRfbmFtZShkaXIpKSB7Ci0gICAgICAgIGlm
ICghZ19wYXR0ZXJuX21hdGNoX3N0cmluZyhwc3BlYywgbmFtZSkpCisgICAgR093blB0cjxHUGF0
dGVyblNwZWM+IHBzcGVjKGdfcGF0dGVybl9zcGVjX25ldygoZmlsdGVyLnV0ZjgoKSkuZGF0YSgp
KSk7CisgICAgd2hpbGUgKGNvbnN0IGNoYXIqIG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyLmdl
dCgpKSkgeworICAgICAgICBpZiAoIWdfcGF0dGVybl9tYXRjaF9zdHJpbmcocHNwZWMuZ2V0KCks
IG5hbWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgZ2NoYXIqIGVudHJ5ID0g
Z19idWlsZF9maWxlbmFtZSgocGF0aC51dGY4KCkpLmRhdGEoKSwgbmFtZSwgTlVMTCk7CiAgICAg
ICAgIGVudHJpZXMuYXBwZW5kKGVudHJ5KTsKICAgICAgICAgZ19mcmVlKGVudHJ5KTsKICAgICB9
Ci0gICAgZ19kaXJfY2xvc2UoZGlyKTsKIAogICAgIHJldHVybiBlbnRyaWVzOwogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAJKHJldmlzaW9uZSAzNjMzMykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCShjb3BpYSBsb2NhbGUpCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAibWFya3VwLmgiCiAKICNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00MywyMSArNDQsMTYgQEAKIAogY2xhc3MgUGFzdGVib2FyZFNlbGVjdGlvbkRhdGEgewogcHVi
bGljOgotICAgIFBhc3RlYm9hcmRTZWxlY3Rpb25EYXRhKGdjaGFyKiB0ZXh0LCBnY2hhciogbWFy
a3VwKQotICAgICAgICA6IG1fdGV4dCh0ZXh0KQotICAgICAgICAsIG1fbWFya3VwKG1hcmt1cCkg
eyB9CisgICAgUGFzdGVib2FyZFNlbGVjdGlvbkRhdGEoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBTdHJpbmcmIG1hcmt1cCkKKyAgICAgICAgOiBtX3RleHQoZ19zdHJkdXAodGV4dC51dGY4KCku
ZGF0YSgpKSkKKyAgICAgICAgLCBtX21hcmt1cChnX3N0cmR1cChtYXJrdXAudXRmOCgpLmRhdGEo
KSkpIHsgfQogCi0gICAgflBhc3RlYm9hcmRTZWxlY3Rpb25EYXRhKCkgewotICAgICAgICBnX2Zy
ZWUobV90ZXh0KTsKLSAgICAgICAgZ19mcmVlKG1fbWFya3VwKTsKLSAgICB9CisgICAgY29uc3Qg
Z2NoYXIqIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQuZ2V0KCk7IH0KKyAgICBjb25zdCBn
Y2hhciogbWFya3VwKCkgY29uc3QgeyByZXR1cm4gbV9tYXJrdXAuZ2V0KCk7IH0KIAotICAgIGNv
bnN0IGdjaGFyKiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9Ci0gICAgY29uc3QgZ2No
YXIqIG1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFya3VwOyB9Ci0KIHByaXZhdGU6Ci0gICAg
Z2NoYXIqIG1fdGV4dDsKLSAgICBnY2hhciogbV9tYXJrdXA7CisgICAgR093blB0cjxnY2hhcj4g
bV90ZXh0OworICAgIEdPd25QdHI8Z2NoYXI+IG1fbWFya3VwOwogfTsKIAogc3RhdGljIHZvaWQg
Y2xpcGJvYXJkX2dldF9jb250ZW50c19jYihHdGtDbGlwYm9hcmQgKmNsaXBib2FyZCwgR3RrU2Vs
ZWN0aW9uRGF0YSAqc2VsZWN0aW9uX2RhdGEsCkBAIC0xMDQsOCArMTAwLDggQEAKIHsKICAgICBH
dGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IG1faGVscGVyLT5nZXRDbGlwYm9hcmQoZnJhbWUpOwog
I2lmIEdUS19DSEVDS19WRVJTSU9OKDIsMTAsMCkKLSAgICBnY2hhciogdGV4dCA9IGdfc3RyZHVw
KGZyYW1lLT5zZWxlY3RlZFRleHQoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBnY2hhciogbWFya3Vw
ID0gZ19zdHJkdXAoY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50
ZXJjaGFuZ2UpLnV0ZjgoKS5kYXRhKCkpOworICAgIFN0cmluZyB0ZXh0ID0gZnJhbWUtPnNlbGVj
dGVkVGV4dCgpOworICAgIFN0cmluZyBtYXJrdXAgPSBjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5n
ZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7CiAgICAgUGFzdGVib2FyZFNlbGVjdGlvbkRh
dGEqIGRhdGEgPSBuZXcgUGFzdGVib2FyZFNlbGVjdGlvbkRhdGEodGV4dCwgbWFya3VwKTsKIAog
ICAgIGdpbnQgbl90YXJnZXRzOwpAQCAtMTg2LDE2ICsxODIsMTcgQEAKICAgICBpZiAoIWFsbG93
UGxhaW5UZXh0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChnY2hhciogdXRmOCA9IGd0
a19jbGlwYm9hcmRfd2FpdF9mb3JfdGV4dChjbGlwYm9hcmQpKSB7Ci0gICAgICAgIFN0cmluZyB0
ZXh0ID0gU3RyaW5nOjpmcm9tVVRGOCh1dGY4KTsKLSAgICAgICAgZ19mcmVlKHV0ZjgpOworICAg
IEdPd25QdHI8Z2NoYXI+IHV0ZjgoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KGNsaXBib2Fy
ZCkpOworICAgIGlmICghdXRmOCkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgY2hvc2VQ
bGFpblRleHQgPSB0cnVlOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQuZ2V0KCksIHRleHQpOwotICAgICAg
ICBpZiAoZnJhZ21lbnQpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwot
ICAgIH0KKyAgICBTdHJpbmcgdGV4dCA9IFN0cmluZzo6ZnJvbVVURjgodXRmOC5nZXQoKSk7CiAK
KyAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCB0ZXh0KTsK
KyAgICBpZiAoZnJhZ21lbnQpCisgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisK
ICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjAzLDE0ICsyMDAsMTEgQEAKIHsKICAgICBHdGtDbGlw
Ym9hcmQqIGNsaXBib2FyZCA9IG1faGVscGVyLT5nZXRDbGlwYm9hcmQoZnJhbWUpOwogCi0gICAg
Z2NoYXIqIHV0ZjggPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQoY2xpcGJvYXJkKTsKLQor
ICAgIEdPd25QdHI8Z2NoYXI+IHV0ZjgoZ3RrX2NsaXBib2FyZF93YWl0X2Zvcl90ZXh0KGNsaXBi
b2FyZCkpOwogICAgIGlmICghdXRmOCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAg
U3RyaW5nIHRleHQgPSBTdHJpbmc6OmZyb21VVEY4KHV0ZjgpOwotICAgIGdfZnJlZSh1dGY4KTsK
LQorICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5nOjpmcm9tVVRGOCh1dGY4LmdldCgpKTsKICAgICBy
ZXR1cm4gdGV4dDsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcAko
cmV2aXNpb25lIDM2MzMzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3Bw
CShjb3BpYSBsb2NhbGUpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8Z2RrL2dkay5oPgog
I2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CiAjaW5jbHVkZSA8Z3RrL2d0a3ZlcnNpb24uaD4K
KyNpbmNsdWRlIDx3dGYvR093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ4
MCwxNiArNDgxLDE0IEBACiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBndW5pY2hhciBj
ID0gZ2RrX2tleXZhbF90b191bmljb2RlKHZhbCk7CiAgICAgICAgICAgICBnbG9uZyBud2M7Ci0g
ICAgICAgICAgICBndW5pY2hhcjIqIHVjaGFyMTYgPSBnX3VjczRfdG9fdXRmMTYoJmMsIDEsIDAs
ICZud2MsIDApOworICAgICAgICAgICAgR093blB0cjxndW5pY2hhcjI+IHVjaGFyMTYoZ191Y3M0
X3RvX3V0ZjE2KCZjLCAxLCAwLCAmbndjLCAwKSk7CiAKICAgICAgICAgICAgIFN0cmluZyByZXRW
YWw7CiAgICAgICAgICAgICBpZiAodWNoYXIxNikKLSAgICAgICAgICAgICAgICByZXRWYWwgPSBT
dHJpbmcoKFVDaGFyKil1Y2hhcjE2LCBud2MpOworICAgICAgICAgICAgICAgIHJldFZhbCA9IFN0
cmluZygoVUNoYXIqKXVjaGFyMTYuZ2V0KCksIG53Yyk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgcmV0VmFsID0gU3RyaW5nKCk7CiAKLSAgICAgICAgICAgIGdfZnJlZSh1Y2hh
cjE2KTsKLQogICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKICAgICB9CiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcAkocmV2aXNpb25lIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmNwcAkocmV2aXNpb25lIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1JlZlB0ckd0
ay5oIgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gR3RrVGFyZ2V0TGlzdCogcmVm
UHRyKEd0a1RhcmdldExpc3QqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBndGtfdGFy
Z2V0X2xpc3RfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9p
ZCBkZXJlZlB0cihHdGtUYXJnZXRMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAg
Z3RrX3RhcmdldF9saXN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdka0N1cnNvciog
cmVmUHRyKEdka0N1cnNvciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdka19jdXJz
b3JfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZlB0cihHZGtDdXJzb3IqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnZGtfY3Vyc29y
X3VucmVmKHB0cik7Cit9CisKK30KKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3Bw
CShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3Bw
CShjb3BpYSBsb2NhbGUpCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogdm9pZCBXaWRnZXQ6OnNldEN1
cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICBHZGtDdXJzb3IqIHBjdXIgPSBjdXJz
b3IuaW1wbCgpOworICAgIEdka0N1cnNvciogcGN1ciA9IGN1cnNvci5pbXBsKCkuZ2V0KCk7CiAK
ICAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM4OAogICAg
IC8vIFtHVEtdIFdpZGdldDo6c2V0Q3Vyc29yKCkgZ2V0cyBjYWxsZWQgZnJlcXVlbnRseQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL0N1cnNvci5oCShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0N1cnNv
ci5oCShjb3BpYSBsb2NhbGUpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjZWxpZiBQTEFURk9STShHVEspCisj
aW5jbHVkZSAiR1JlZlB0ci5oIgogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNlbGlmIFBMQVRGT1JN
KFFUKQogI2luY2x1ZGUgPFFDdXJzb3I+CkBAIC03MSw3ICs3Miw3IEBACiAjZWxpZiBQTEFURk9S
TShNQUMpCiAgICAgdHlwZWRlZiBOU0N1cnNvciogUGxhdGZvcm1DdXJzb3I7CiAjZWxpZiBQTEFU
Rk9STShHVEspCi0gICAgdHlwZWRlZiBHZGtDdXJzb3IqIFBsYXRmb3JtQ3Vyc29yOworICAgIHR5
cGVkZWYgR1JlZlB0cjxHZGtDdXJzb3I+IFBsYXRmb3JtQ3Vyc29yOwogI2VsaWYgUExBVEZPUk0o
UVQpICYmICFkZWZpbmVkKFFUX05PX0NVUlNPUikKICAgICB0eXBlZGVmIFFDdXJzb3IgUGxhdGZv
cm1DdXJzb3I7CiAjZWxpZiBQTEFURk9STShXWCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ljb25HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ljb25HdGsuY3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAkoY29waWEgbG9jYWxlKQpAQCAtNDEsMTQgKzQx
LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEljb246Okljb24oKQotICAgIDogbV9pY29u
KDApCiB7CiB9CiAKIEljb246On5JY29uKCkKIHsKLSAgICBpZiAobV9pY29uKQotICAgICAgICBn
X29iamVjdF91bnJlZihtX2ljb24pOwogfQogCiBzdGF0aWMgU3RyaW5nIGxvb2t1cEljb25OYW1l
KFN0cmluZyBNSU1FVHlwZSkKQEAgLTEwOCw3ICsxMDUsNyBAQAogICAgIC8vIFRPRE86IFNjYWxl
L2NsaXAgdGhlIGltYWdlIGlmIG5lY2Vzc2FyeS4KICAgICBjYWlyb190KiBjciA9IGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGdka19jYWlyb19z
ZXRfc291cmNlX3BpeGJ1ZihjciwgbV9pY29uLCByZWN0LngoKSwgcmVjdC55KCkpOworICAgIGdk
a19jYWlyb19zZXRfc291cmNlX3BpeGJ1ZihjciwgbV9pY29uLmdldCgpLCByZWN0LngoKSwgcmVj
dC55KCkpOwogICAgIGNhaXJvX3BhaW50KGNyKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAkocmV2aXNpb25lIDM2MzMzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cAkoY29waWEgbG9jYWxlKQpAQCAtNTQsMjAgKzU0LDE3IEBACiB7CiAgICAgaWYgKEdTVF9NRVNT
QUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRVJST1IpCiAgICAgewotICAgICAgICBH
RXJyb3IqIGVycjsKLSAgICAgICAgZ2NoYXIqIGRlYnVnOworICAgICAgICBHT3duUHRyPEdFcnJv
cj4gZXJyOworICAgICAgICBHT3duUHRyPGdjaGFyPiBkZWJ1ZzsKIAotICAgICAgICBnc3RfbWVz
c2FnZV9wYXJzZV9lcnJvcihtZXNzYWdlLCAmZXJyLCAmZGVidWcpOworICAgICAgICBnc3RfbWVz
c2FnZV9wYXJzZV9lcnJvcihtZXNzYWdlLCAmZXJyLnJhd1B0cigpLCAmZGVidWcucmF3UHRyKCkp
OwogICAgICAgICBpZiAoZXJyLT5jb2RlID09IDMpIHsKICAgICAgICAgICAgIExPR19WRVJCT1NF
KE1lZGlhLCAiRmlsZSBub3QgZm91bmQiKTsKICAgICAgICAgICAgIE1lZGlhUGxheWVyUHJpdmF0
ZSogbXAgPSByZWludGVycHJldF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZSo+KGRhdGEpOwogICAg
ICAgICAgICAgaWYgKG1wKQogICAgICAgICAgICAgICAgIG1wLT5sb2FkaW5nRmFpbGVkKCk7Ci0g
ICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgTE9HX1ZFUkJPU0Uo
TWVkaWEsICJFcnJvcjogJWQsICVzIiwgZXJyLT5jb2RlLCAgZXJyLT5tZXNzYWdlKTsKLSAgICAg
ICAgICAgIGdfZXJyb3JfZnJlZShlcnIpOwotICAgICAgICAgICAgZ19mcmVlKGRlYnVnKTsKLSAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250R3RrLmNwcAkoY29waWEgbG9jYWxlKQpAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNs
dWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KICNpbmNsdWRlIDxwYW5n
by9wYW5nb2NhaXJvLmg+CisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KICNpZiBkZWZpbmVkKFVT
RV9GUkVFVFlQRSkKICNpbmNsdWRlIDxwYW5nby9wYW5nb2ZjLWZvbnRtYXAuaD4KICNlbmRpZgpA
QCAtMTAzLDIyICsxMDUsMjAgQEAKIAogc3RhdGljIGdjaGFyKiBjb252ZXJ0VW5pQ2hhclRvVVRG
OChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgZ2ludCBsZW5ndGgsIGludCBmcm9tLCBpbnQgdG8p
CiB7Ci0gICAgZ2NoYXIqIHV0ZjggPSAwOworICAgIEdPd25QdHI8Z2NoYXI+IHV0Zjg7CiAgICAg
Z2ludCBuZXdfbGVuZ3RoID0gMDsKLSAgICB1dGYxNl90b191dGY4KGNoYXJhY3RlcnMsIGxlbmd0
aCwgdXRmOCwgbmV3X2xlbmd0aCk7CisgICAgdXRmMTZfdG9fdXRmOChjaGFyYWN0ZXJzLCBsZW5n
dGgsIHV0ZjgucmF3UHRyKCksIG5ld19sZW5ndGgpOwogICAgIGlmICghdXRmOCkKICAgICAgICAg
cmV0dXJuIE5VTEw7CiAKICAgICBpZiAoZnJvbSA+IDApIHsKICAgICAgICAgLy8gZGlzY2FyZCB0
aGUgZmlyc3QgJ2Zyb20nIGNoYXJhY3RlcnMKICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBk
byB0aGlzIGJlZm9yZSB0aGUgY29udmVyc2lvbiBwcm9iYWJseQotICAgICAgICBnY2hhciogc3Ry
X2xlZnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOCwgZnJvbSk7Ci0gICAgICAgIGdj
aGFyKiB0bXAgPSBnX3N0cmR1cChzdHJfbGVmdCk7Ci0gICAgICAgIGdfZnJlZSh1dGY4KTsKLSAg
ICAgICAgdXRmOCA9IHRtcDsKKyAgICAgICAgZ2NoYXIqIHN0cl9sZWZ0ID0gZ191dGY4X29mZnNl
dF90b19wb2ludGVyKHV0ZjguZ2V0KCksIGZyb20pOworICAgICAgICB1dGY4LnNldChnX3N0cmR1
cChzdHJfbGVmdCkpOwogICAgIH0KIAotICAgIGdjaGFyKiBwb3MgPSB1dGY4OworICAgIGdjaGFy
KiBwb3MgPSB1dGY4LmdldCgpOwogICAgIGdpbnQgbGVuID0gc3RybGVuKHBvcyk7CiAgICAgR1N0
cmluZyogcmV0ID0gZ19zdHJpbmdfbmV3X2xlbihOVUxMLCBsZW4pOwogCkBAIC0xMzYsNyArMTM2
LDcgQEAKICAgICByZXR1cm4gZ19zdHJpbmdfZnJlZShyZXQsIEZBTFNFKTsKIH0KIAotc3RhdGlj
IHZvaWQgc2V0UGFuZ29BdHRyaWJ1dGVzKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgUGFuZ29MYXlvdXQqIGxheW91dCkKK3N0YXRpYyB2b2lkIHNldFBhbmdvQXR0cmlidXRl
cyhjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEdSZWZQdHI8UGFuZ29MYXlv
dXQ+IGxheW91dCkKIHsKICNpZiBkZWZpbmVkKFVTRV9GUkVFVFlQRSkKICAgICBpZiAoZm9udC0+
cHJpbWFyeUZvbnQoKS0+bV9mb250Lm1fcGF0dGVybikgewpAQCAtMTQ3LDE0ICsxNDcsMTQgQEAK
ICNlbGlmIGRlZmluZWQoVVNFX1BBTkdPKQogICAgIGlmIChmb250LT5wcmltYXJ5Rm9udCgpLT5t
X2ZvbnQubV9mb250KSB7CiAgICAgICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjID0gcGFu
Z29fZm9udF9kZXNjcmliZShmb250LT5wcmltYXJ5Rm9udCgpLT5tX2ZvbnQubV9mb250KTsKLSAg
ICAgICAgcGFuZ29fbGF5b3V0X3NldF9mb250X2Rlc2NyaXB0aW9uKGxheW91dCwgZGVzYyk7Cisg
ICAgICAgIHBhbmdvX2xheW91dF9zZXRfZm9udF9kZXNjcmlwdGlvbihsYXlvdXQuZ2V0KCksIGRl
c2MpOwogICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUoZGVzYyk7CiAgICAgfQog
I2VuZGlmCiAKLSAgICBwYW5nb19sYXlvdXRfc2V0X2F1dG9fZGlyKGxheW91dCwgRkFMU0UpOwor
ICAgIHBhbmdvX2xheW91dF9zZXRfYXV0b19kaXIobGF5b3V0LmdldCgpLCBGQUxTRSk7CiAKLSAg
ICBQYW5nb0NvbnRleHQqIHBhbmdvQ29udGV4dCA9IHBhbmdvX2xheW91dF9nZXRfY29udGV4dChs
YXlvdXQpOworICAgIFBhbmdvQ29udGV4dCogcGFuZ29Db250ZXh0ID0gcGFuZ29fbGF5b3V0X2dl
dF9jb250ZXh0KGxheW91dC5nZXQoKSk7CiAgICAgUGFuZ29EaXJlY3Rpb24gZGlyZWN0aW9uID0g
cnVuLnJ0bCgpID8gUEFOR09fRElSRUNUSU9OX1JUTCA6IFBBTkdPX0RJUkVDVElPTl9MVFI7CiAg
ICAgcGFuZ29fY29udGV4dF9zZXRfYmFzZV9kaXIocGFuZ29Db250ZXh0LCBkaXJlY3Rpb24pOwog
ICAgIFBhbmdvQXR0ckxpc3QqIGxpc3QgPSBwYW5nb19hdHRyX2xpc3RfbmV3KCk7CkBAIC0xNzMs
NyArMTczLDcgQEAKICAgICAvLyBQYW5nbyBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBzeW50aGVzaXNp
bmcgc21hbGwgY2FwcwogICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTYxMAogCi0gICAgcGFuZ29fbGF5b3V0X3NldF9hdHRyaWJ1dGVzKGxheW91dCwg
bGlzdCk7CisgICAgcGFuZ29fbGF5b3V0X3NldF9hdHRyaWJ1dGVzKGxheW91dC5nZXQoKSwgbGlz
dCk7CiAgICAgcGFuZ29fYXR0cl9saXN0X3VucmVmKGxpc3QpOwogfQogCkBAIC0xODMsMjEgKzE4
MywyMSBAQAogICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgcG9p
bnQueCgpLCBwb2ludC55KCkpOwogCi0gICAgUGFuZ29MYXlvdXQqIGxheW91dCA9IHBhbmdvX2Nh
aXJvX2NyZWF0ZV9sYXlvdXQoY3IpOworICAgIEdSZWZQdHI8UGFuZ29MYXlvdXQ+IGxheW91dCA9
IHBhbmdvX2NhaXJvX2NyZWF0ZV9sYXlvdXQoY3IpOwogICAgIHNldFBhbmdvQXR0cmlidXRlcyh0
aGlzLCBydW4sIGxheW91dCk7CiAKLSAgICBnY2hhciogdXRmOCA9IGNvbnZlcnRVbmlDaGFyVG9V
VEY4KHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSwgMCwgcnVuLmxlbmd0aCgpKTsKLSAg
ICBwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5b3V0LCB1dGY4LCAtMSk7CisgICAgR093blB0cjxn
Y2hhcj4gdXRmOChjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVu
Z3RoKCksIDAsIHJ1bi5sZW5ndGgoKSkpOworICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dChsYXlv
dXQuZ2V0KCksIHV0ZjguZ2V0KCksIC0xKTsKIAogICAgIC8vIE91ciBsYXlvdXRzIGFyZSBzaW5n
bGUgbGluZQotICAgIFBhbmdvTGF5b3V0TGluZSogbGF5b3V0TGluZSA9IHBhbmdvX2xheW91dF9n
ZXRfbGluZV9yZWFkb25seShsYXlvdXQsIDApOworICAgIFBhbmdvTGF5b3V0TGluZSogbGF5b3V0
TGluZSA9IHBhbmdvX2xheW91dF9nZXRfbGluZV9yZWFkb25seShsYXlvdXQuZ2V0KCksIDApOwog
CiAgICAgR2RrUmVnaW9uKiBwYXJ0aWFsUmVnaW9uID0gTlVMTDsKICAgICBpZiAodG8gLSBmcm9t
ICE9IHJ1bi5sZW5ndGgoKSkgewogICAgICAgICAvLyBDbGlwIHRoZSByZWdpb24gb2YgdGhlIHJ1
biB0byBiZSByZW5kZXJlZAotICAgICAgICBjaGFyKiBzdGFydCA9IGdfdXRmOF9vZmZzZXRfdG9f
cG9pbnRlcih1dGY4LCBmcm9tKTsKKyAgICAgICAgY2hhciogc3RhcnQgPSBnX3V0Zjhfb2Zmc2V0
X3RvX3BvaW50ZXIodXRmOC5nZXQoKSwgZnJvbSk7CiAgICAgICAgIGNoYXIqIGVuZCA9IGdfdXRm
OF9vZmZzZXRfdG9fcG9pbnRlcihzdGFydCwgdG8gLSBmcm9tKTsKLSAgICAgICAgaW50IHJhbmdl
c1tdID0ge3N0YXJ0IC0gdXRmOCwgZW5kIC0gdXRmOH07CisgICAgICAgIGludCByYW5nZXNbXSA9
IHtzdGFydCAtIHV0ZjguZ2V0KCksIGVuZCAtIHV0ZjguZ2V0KCl9OwogICAgICAgICBwYXJ0aWFs
UmVnaW9uID0gZ2RrX3BhbmdvX2xheW91dF9saW5lX2dldF9jbGlwX3JlZ2lvbihsYXlvdXRMaW5l
LCAwLCAwLCByYW5nZXMsIDEpOwogICAgICAgICBnZGtfcmVnaW9uX3NocmluayhwYXJ0aWFsUmVn
aW9uLCAwLCAtcGl4ZWxTaXplKCkpOwogICAgIH0KQEAgLTI2Myw5ICsyNjMsNiBAQAogICAgIGlm
IChwYXJ0aWFsUmVnaW9uKQogICAgICAgICBnZGtfcmVnaW9uX2Rlc3Ryb3kocGFydGlhbFJlZ2lv
bik7CiAKLSAgICBnX2ZyZWUodXRmOCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGF5b3V0KTsKLQog
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCkBAIC0yODQsMzggKzI4MSwzMiBAQAogICAgIGlm
IChydW4ubGVuZ3RoKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIDAuMGY7CiAKLSAgICBQYW5nb0xh
eW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7CisgICAgR1JlZlB0cjxQ
YW5nb0xheW91dD4gbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7CiAgICAgc2V0
UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKIAotICAgIGdjaGFyKiB1dGY4ID0g
Y29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBy
dW4ubGVuZ3RoKCkpOwotICAgIHBhbmdvX2xheW91dF9zZXRfdGV4dChsYXlvdXQsIHV0ZjgsIC0x
KTsKKyAgICBHT3duUHRyPGdjaGFyPiB1dGY4KGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJ1bi5jaGFy
YWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSwgMCwgcnVuLmxlbmd0aCgpKSk7CisgICAgcGFuZ29fbGF5
b3V0X3NldF90ZXh0KGxheW91dC5nZXQoKSwgdXRmOC5nZXQoKSwgLTEpOwogCiAgICAgaW50IHdp
ZHRoOwotICAgIHBhbmdvX2xheW91dF9nZXRfcGl4ZWxfc2l6ZShsYXlvdXQsICZ3aWR0aCwgMCk7
CisgICAgcGFuZ29fbGF5b3V0X2dldF9waXhlbF9zaXplKGxheW91dC5nZXQoKSwgJndpZHRoLCAw
KTsKIAotICAgIGdfZnJlZSh1dGY4KTsKLSAgICBnX29iamVjdF91bnJlZihsYXlvdXQpOwotCiAg
ICAgcmV0dXJuIHdpZHRoOwogfQogCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzKSBjb25zdAogewotICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBnZXREZWZhdWx0UGFuZ29M
YXlvdXQocnVuKTsKKyAgICBHUmVmUHRyPFBhbmdvTGF5b3V0PiBsYXlvdXQgPSBnZXREZWZhdWx0
UGFuZ29MYXlvdXQocnVuKTsKICAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlv
dXQpOwogCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFj
dGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7Ci0gICAgcGFuZ29fbGF5b3V0
X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOworICAgIEdPd25QdHI8Z2NoYXI+IHV0ZjgoY29u
dmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4u
bGVuZ3RoKCkpKTsKKyAgICBwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5b3V0LmdldCgpLCB1dGY4
LmdldCgpLCAtMSk7CiAKICAgICBpbnQgaW5kZXgsIHRyYWlsaW5nOwotICAgIHBhbmdvX2xheW91
dF94eV90b19pbmRleChsYXlvdXQsIHggKiBQQU5HT19TQ0FMRSwgMSwgJmluZGV4LCAmdHJhaWxp
bmcpOwotICAgIGdsb25nIG9mZnNldCA9IGdfdXRmOF9wb2ludGVyX3RvX29mZnNldCh1dGY4LCB1
dGY4ICsgaW5kZXgpOworICAgIHBhbmdvX2xheW91dF94eV90b19pbmRleChsYXlvdXQuZ2V0KCks
IHggKiBQQU5HT19TQ0FMRSwgMSwgJmluZGV4LCAmdHJhaWxpbmcpOworICAgIGdsb25nIG9mZnNl
dCA9IGdfdXRmOF9wb2ludGVyX3RvX29mZnNldCh1dGY4LmdldCgpLCB1dGY4LmdldCgpICsgaW5k
ZXgpOwogICAgIGlmIChpbmNsdWRlUGFydGlhbEdseXBocykKICAgICAgICAgb2Zmc2V0ICs9IHRy
YWlsaW5nOwogCi0gICAgZ19mcmVlKHV0ZjgpOwotICAgIGdfb2JqZWN0X3VucmVmKGxheW91dCk7
Ci0KICAgICByZXR1cm4gb2Zmc2V0OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ljb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24u
aAkocmV2aXNpb25lIDM2MzMzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgJ
KGNvcGlhIGxvY2FsZSkKQEAgLTM3LDYgKzM3LDcgQEAKICNlbGlmIFBMQVRGT1JNKFFUKQogI2lu
Y2x1ZGUgPFFJY29uPgogI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkdSZWZQdHJHdGsu
aCIKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjZW5kaWYKIApAQCAtNjksNyArNzAsNyBAQAogICAg
IFFJY29uIG1faWNvbjsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBJY29uKCk7Ci0gICAgR2Rr
UGl4YnVmKiBtX2ljb247CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IG1faWNvbjsKICNlbmRpZgog
fTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwCShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCShjb3BpYSBsb2NhbGUpCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVy
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCiAjaW5jbHVk
ZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTUxLDEwICs1Miw2IEBACiAKIFJlc291cmNlSGFuZGxl
SW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKIHsKLSAgICBpZiAobV9tc2cpIHsK
LSAgICAgICAgZ19vYmplY3RfdW5yZWYobV9tc2cpOwotICAgICAgICBtX21zZyA9IDA7Ci0gICAg
fQogfQogCiBSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkKQEAgLTcxLDkgKzY4LDgg
QEAKICAgICAgICAgcmVzcG9uc2UtPnNldEhUVFBIZWFkZXJGaWVsZChuYW1lLCB2YWx1ZSk7CiAK
ICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQobXNnLT5y
ZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1UeXBlIik7Ci0gICAgY2hhciogdXJpID0gc291cF91
cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIEZBTFNFKTsKLSAgICByZXNw
b25zZS0+c2V0VXJsKEtVUkwodXJpKSk7Ci0gICAgZ19mcmVlKHVyaSk7CisgICAgR093blB0cjxj
aGFyPiB1cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIEZB
TFNFKSk7CisgICAgcmVzcG9uc2UtPnNldFVybChLVVJMKHVyaS5nZXQoKSkpOwogICAgIHJlc3Bv
bnNlLT5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGNvbnRlbnRUeXBl
KSk7CiAgICAgcmVzcG9uc2UtPnNldFRleHRFbmNvZGluZ05hbWUoZXh0cmFjdENoYXJzZXRGcm9t
TWVkaWFUeXBlKGNvbnRlbnRUeXBlKSk7CiAgICAgcmVzcG9uc2UtPnNldEV4cGVjdGVkQ29udGVu
dExlbmd0aChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGgobXNnLT5yZXNw
b25zZV9oZWFkZXJzKSk7CkBAIC05MiwxMCArODgsOCBAQAogICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hhciogdXJpID0gc291cF91cmlfdG9fc3RyaW5n
KHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIEZBTFNFKTsKLSAgICBTdHJpbmcgbG9jYXRpb24g
PSBTdHJpbmcodXJpKTsKLSAgICBnX2ZyZWUodXJpKTsKLSAgICBLVVJMIG5ld1VSTCA9IEtVUkwo
aGFuZGxlLT5yZXF1ZXN0KCkudXJsKCksIGxvY2F0aW9uKTsKKyAgICBHT3duUHRyPGNoYXI+IHVy
aShzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgRkFMU0UpKTsK
KyAgICBLVVJMIG5ld1VSTCA9IEtVUkwoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCksIHVyaS5nZXQo
KSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGhhbmRsZS0+cmVxdWVzdCgpOwog
ICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CkBAIC0xNTYsNyArMTUwLDcgQEAKIAogICAg
IFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CiAgICAg
Ly8gVGhlIG1lc3NhZ2UgaGFzIGJlZW4gaGFuZGxlZC4KLSAgICBkLT5tX21zZyA9IE5VTEw7Cisg
ICAgZC0+bV9tc2cgPSAwOwogCiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhh
bmRsZS0+Y2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCkBAIC0xNjYsOSArMTYwLDggQEAKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUiht
c2ctPnN0YXR1c19jb2RlKSkgewotICAgICAgICBjaGFyKiB1cmkgPSBzb3VwX3VyaV90b19zdHJp
bmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgRkFMU0UpOwotICAgICAgICBSZXNvdXJjZUVy
cm9yIGVycm9yKCJ3ZWJraXQtbmV0d29yay1lcnJvciIsIEVSUk9SX1RSQU5TUE9SVCwgdXJpLCBT
dHJpbmc6OmZyb21VVEY4KG1zZy0+cmVhc29uX3BocmFzZSkpOwotICAgICAgICBnX2ZyZWUodXJp
KTsKKyAgICAgICAgR093blB0cjxjaGFyPiB1cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVz
c2FnZV9nZXRfdXJpKG1zZyksIEZBTFNFKSk7CisgICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3Io
IndlYmtpdC1uZXR3b3JrLWVycm9yIiwgRVJST1JfVFJBTlNQT1JULCB1cmkuZ2V0KCksIFN0cmlu
Zzo6ZnJvbVVURjgobXNnLT5yZWFzb25fcGhyYXNlKSk7CiAgICAgICAgIGNsaWVudC0+ZGlkRmFp
bChoYW5kbGUsIGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSBpZiAoIVNPVVBf
U1RBVFVTX0lTX1NVQ0NFU1NGVUwobXNnLT5zdGF0dXNfY29kZSkpIHsKQEAgLTIxMSwxMSArMjA0
LDExIEBACiAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKIAogICAg
IHNpemVfdCBvdXRMZW5ndGggPSAwOwotICAgIGNoYXIqIG91dERhdGEgPSAwOworICAgIEdPd25Q
dHI8Y2hhcj4gb3V0RGF0YTsKICAgICBpZiAoYmFzZTY0ICYmICFkYXRhLmlzRW1wdHkoKSkgewog
ICAgICAgICAvLyBVc2UgdGhlIEdMaWIgQmFzZTY0IGlmIGF2YWlsYWJsZSwgc2luY2UgV2ViQ29y
ZSdzIGRlY29kZXIgaXNuJ3QKICAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3NlIGFuZCBmYWlscyBv
biBBY2lkMyB0ZXN0IDk3ICh3aGl0ZXNwYWNlKS4KLSAgICAgICAgb3V0RGF0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGdfYmFzZTY0X2RlY29kZShkYXRhLnV0ZjgoKS5kYXRhKCksICZvdXRM
ZW5ndGgpKTsKKyAgICAgICAgb3V0RGF0YS5zZXQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ19i
YXNlNjRfZGVjb2RlKGRhdGEudXRmOCgpLmRhdGEoKSwgJm91dExlbmd0aCkpKTsKICAgICB9CiAK
ICAgICBpZiAoaGVhZGVyLmlzRW1wdHkoKSkKQEAgLTIzNiwxMiArMjI5LDEwIEBACiAgICAgY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7CiAKICAgICBpZiAob3V0
RGF0YSkKLSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUsIG91dERhdGEsIG91
dExlbmd0aCwgMCk7CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCBvdXRE
YXRhLmdldCgpLCBvdXRMZW5ndGgsIDApOwogICAgIGVsc2UKICAgICAgICAgY2xpZW50LT5kaWRS
ZWNlaXZlRGF0YShoYW5kbGUsIGRhdGEubGF0aW4xKCkuZGF0YSgpLCBkYXRhLmxlbmd0aCgpLCAw
KTsKIAotICAgIGdfZnJlZShvdXREYXRhKTsKLQogICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGlu
ZyhoYW5kbGUpOwogCiAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMjY2LDkgKzI1Nyw4IEBACiAgICAg
ICAgIGlmIChzb3VwX2RlYnVnKSB7CiAgICAgICAgICAgICBpbnQgc291cF9kZWJ1Z19sZXZlbCA9
IGF0b2koc291cF9kZWJ1Zyk7CiAKLSAgICAgICAgICAgIFNvdXBMb2dnZXIqIGxvZ2dlciA9IHNv
dXBfbG9nZ2VyX25ldyhzdGF0aWNfY2FzdDxTb3VwTG9nZ2VyTG9nTGV2ZWw+KHNvdXBfZGVidWdf
bGV2ZWwpLCAtMSk7Ci0gICAgICAgICAgICBzb3VwX2xvZ2dlcl9hdHRhY2gobG9nZ2VyLCBzZXNz
aW9uKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGxvZ2dlcik7CisgICAgICAgICAgICBH
UmVmUHRyPFNvdXBMb2dnZXI+IGxvZ2dlciA9IHNvdXBfbG9nZ2VyX25ldyhzdGF0aWNfY2FzdDxT
b3VwTG9nZ2VyTG9nTGV2ZWw+KHNvdXBfZGVidWdfbGV2ZWwpLCAtMSk7CisgICAgICAgICAgICBz
b3VwX2xvZ2dlcl9hdHRhY2gobG9nZ2VyLmdldCgpLCBzZXNzaW9uKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMzAyLDcgKzI5Miw3IEBACiAgICAgfQogCiAgICAgZC0+bV9tc2cgPSBzdGF0aWNf
Y2FzdDxTb3VwTWVzc2FnZSo+KGdfb2JqZWN0X3JlZihtc2cpKTsKLSAgICBzb3VwX3Nlc3Npb25f
cXVldWVfbWVzc2FnZShzZXNzaW9uLCBkLT5tX21zZywgZmluaXNoZWRDYWxsYmFjaywgdGhpcyk7
CisgICAgc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Uoc2Vzc2lvbiwgbXNnLCBmaW5pc2hlZENh
bGxiYWNrLCB0aGlzKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzQxLDExICszMzEsMTEg
QEAKIHsKICAgICBkLT5tX2NhbmNlbGxlZCA9IHRydWU7CiAgICAgaWYgKGQtPm1fbXNnKSB7Ci0g
ICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZShzZXNzaW9uLCBkLT5tX21zZywgU09V
UF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKyAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdl
KHNlc3Npb24sIGQtPm1fbXNnLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwogICAgICAg
ICAvLyBGb3IgcmUtZW50cmFuY3kgdHJvdWJsZXMgd2UgY2FsbCBkaWRGaW5pc2hMb2FkaW5nIHdo
ZW4gdGhlIG1lc3NhZ2UgaGFzbid0IGJlZW4gaGFuZGxlZCB5ZXQuCiAgICAgICAgIGQtPmNsaWVu
dCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOwogICAgIH0gZWxzZSBpZiAoZC0+bV9jYW5jZWxs
YWJsZSkgewotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChkLT5tX2NhbmNlbGxhYmxlKTsK
KyAgICAgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSk7CiAg
ICAgICAgIGQtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOwogICAgIH0KIH0KQEAg
LTM4NywxMiArMzc3LDExIEBACiAKIC8vIEdJTy1iYXNlZCBsb2FkZXIKIAotc3RhdGljIGlubGlu
ZSBSZXNvdXJjZUVycm9yIG5ldHdvcmtFcnJvckZvckZpbGUoR0ZpbGUqIGZpbGUsIEdFcnJvciog
ZXJyb3IpCitzdGF0aWMgaW5saW5lIFJlc291cmNlRXJyb3IgbmV0d29ya0Vycm9yRm9yRmlsZShH
UmVmUHRyPEdGaWxlPiBmaWxlLCBjb25zdCBHRXJyb3IqIGVycm9yKQogewogICAgIC8vIEZJWE1F
OiBNYXAgZ2lvIGVycm9ycyB0byBhIG1vcmUgZGV0YWlsZWQgZXJyb3IgY29kZSB3aGVuIHdlIGhh
dmUgaXQgaW4gV2ViS2l0LgotICAgIGdjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShmaWxlKTsK
LSAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoIndlYmtpdC1uZXR3b3JrLWVycm9yIiwg
RVJST1JfVFJBTlNQT1JULCB1cmksIFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpKTsK
LSAgICBnX2ZyZWUodXJpKTsKKyAgICBHT3duUHRyPGdjaGFyPiB1cmkoZ19maWxlX2dldF91cmko
ZmlsZS5nZXQoKSkpOworICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcigid2Via2l0LW5l
dHdvcmstZXJyb3IiLCBFUlJPUl9UUkFOU1BPUlQsIHVyaS5nZXQoKSwgU3RyaW5nOjpmcm9tVVRG
OChlcnJvci0+bWVzc2FnZSkpOwogICAgIHJldHVybiByZXNvdXJjZUVycm9yOwogfQogCkBAIC00
MDAsMTggKzM4OSw5IEBACiB7CiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRs
ZS0+Z2V0SW50ZXJuYWwoKTsKIAotICAgIGlmIChkLT5tX2dmaWxlKSB7Ci0gICAgICAgIGdfb2Jq
ZWN0X3VucmVmKGQtPm1fZ2ZpbGUpOwotICAgICAgICBkLT5tX2dmaWxlID0gTlVMTDsKLSAgICB9
Ci0gICAgaWYgKGQtPm1fY2FuY2VsbGFibGUpIHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+
bV9jYW5jZWxsYWJsZSk7Ci0gICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSBOVUxMOwotICAgIH0K
LSAgICBpZiAoZC0+bV9pbnB1dF9zdHJlYW0pIHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+
bV9pbnB1dF9zdHJlYW0pOwotICAgICAgICBkLT5tX2lucHV0X3N0cmVhbSA9IE5VTEw7Ci0gICAg
fQorICAgIGQtPm1fZ2ZpbGUgPSAwOworICAgIGQtPm1fY2FuY2VsbGFibGUgPSAwOworICAgIGQt
Pm1faW5wdXRfc3RyZWFtID0gMDsKICAgICBpZiAoZC0+bV9idWZmZXIpIHsKICAgICAgICAgZ19m
cmVlKGQtPm1fYnVmZmVyKTsKICAgICAgICAgZC0+bV9idWZmZXIgPSBOVUxMOwpAQCAtNDI0LDcg
KzQwNCw3IEBACiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKTsKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGll
bnQoKTsKIAotICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChkLT5tX2lucHV0X3N0cmVh
bSwgcmVzLCBOVUxMKTsKKyAgICBnX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+bV9pbnB1
dF9zdHJlYW0uZ2V0KCksIHJlcywgTlVMTCk7CiAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5k
bGUpOwogICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUpOwogfQpAQCAtNDQxLDE1
ICs0MjEsMTUgQEAKICAgICB9CiAKICAgICBnc3NpemUgbnJlYWQ7Ci0gICAgR0Vycm9yICplcnJv
ciA9IDA7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogCi0gICAgbnJlYWQgPSBnX2lucHV0
X3N0cmVhbV9yZWFkX2ZpbmlzaChkLT5tX2lucHV0X3N0cmVhbSwgcmVzLCAmZXJyb3IpOworICAg
IG5yZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goZC0+bV9pbnB1dF9zdHJlYW0uZ2V0
KCksIHJlcywgJmVycm9yLnJhd1B0cigpKTsKICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2xp
ZW50LT5kaWRGYWlsKGhhbmRsZSwgbmV0d29ya0Vycm9yRm9yRmlsZShkLT5tX2dmaWxlLCBlcnJv
cikpOworICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLCBuZXR3b3JrRXJyb3JGb3JGaWxl
KGQtPm1fZ2ZpbGUsIGVycm9yLmdldCgpKSk7CiAgICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24o
aGFuZGxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSBpZiAoIW5yZWFkKSB7Ci0gICAg
ICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jKGQtPm1faW5wdXRfc3RyZWFtLCBHX1BSSU9S
SVRZX0RFRkFVTFQsCisgICAgICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jKGQtPm1faW5w
dXRfc3RyZWFtLmdldCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwsIGNsb3NlQ2FsbGJhY2ssIGhhbmRsZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC00NTcsOCArNDM3LDggQEAKICAgICBkLT5tX3RvdGFsICs9IG5yZWFk
OwogICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCBkLT5tX2J1ZmZlciwgbnJlYWQs
IGQtPm1fdG90YWwpOwogCi0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0
X3N0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1fYnVmc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKKyAgICBnX2lu
cHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRfc3RyZWFtLmdldCgpLCBkLT5tX2J1ZmZl
ciwgZC0+bV9idWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklU
WV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZENhbGxiYWNrLCBoYW5kbGUpOwogfQogCkBAIC00NzQsMTAgKzQ1NCwxMCBA
QAogICAgIH0KIAogICAgIEdGaWxlSW5wdXRTdHJlYW0qIGluOwotICAgIEdFcnJvciAqZXJyb3Ig
PSBOVUxMOwotICAgIGluID0gZ19maWxlX3JlYWRfZmluaXNoKEdfRklMRShzb3VyY2UpLCByZXMs
ICZlcnJvcik7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGluID0gZ19maWxlX3Jl
YWRfZmluaXNoKEdfRklMRShzb3VyY2UpLCByZXMsICZlcnJvci5yYXdQdHIoKSk7CiAgICAgaWYg
KGVycm9yKSB7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUsIG5ldHdvcmtFcnJvckZv
ckZpbGUoZC0+bV9nZmlsZSwgZXJyb3IpKTsKKyAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRs
ZSwgbmV0d29ya0Vycm9yRm9yRmlsZShkLT5tX2dmaWxlLCBlcnJvci5nZXQoKSkpOwogICAgICAg
ICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC00ODYsOCArNDY2LDggQEAKICAgICBkLT5tX2J1ZnNpemUgPSA4MTkyOwogICAgIGQtPm1fYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmc2l6ZSkpOwogICAgIGQt
Pm1fdG90YWwgPSAwOwotICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1dF9z
dHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5tX2J1ZnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCisgICAgZ19pbnB1
dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0X3N0cmVhbS5nZXQoKSwgZC0+bV9idWZmZXIs
IGQtPm1fYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlf
REVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYWRDYWxsYmFjaywgaGFuZGxlKTsKIH0KIApAQCAtNTA0LDEyICs0ODQsMTEgQEAK
IAogICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CiAKLSAgICBjaGFyKiB1cmkgPSBnX2Zp
bGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICByZXNwb25zZS5zZXRVcmwoS1VSTCh1cmkpKTsK
LSAgICBnX2ZyZWUodXJpKTsKKyAgICBHT3duUHRyPGNoYXI+IHVyaShnX2ZpbGVfZ2V0X3VyaShk
LT5tX2dmaWxlLmdldCgpKSk7CisgICAgcmVzcG9uc2Uuc2V0VXJsKEtVUkwodXJpLmdldCgpKSk7
CiAKLSAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICBHRmlsZUluZm8qIGluZm8gPSBnX2Zp
bGVfcXVlcnlfaW5mb19maW5pc2goZC0+bV9nZmlsZSwgcmVzLCAmZXJyb3IpOworICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHRmlsZUluZm8qIGluZm8gPSBnX2ZpbGVfcXVlcnlfaW5m
b19maW5pc2goZC0+bV9nZmlsZS5nZXQoKSwgcmVzLCAmZXJyb3IucmF3UHRyKCkpOwogCiAgICAg
aWYgKGVycm9yKSB7CiAgICAgICAgIC8vIEZJWE1FOiB0byBiZSBhYmxlIHRvIGhhbmRsZSBmdHAg
VVJJcyBwcm9wZXJseSwgd2UgbXVzdApAQCAtNTE5LDcgKzQ5OCw3IEBACiAgICAgICAgIC8vIGFu
ZCBzZXQgYSB0aW1lb3V0IHRvIHVubW91bnQgaXQgbGF0ZXIgYWZ0ZXIgaXQncyBiZWVuIGlkbGUK
ICAgICAgICAgLy8gZm9yIGEgd2hpbGUpLgogCi0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5k
bGUsIG5ldHdvcmtFcnJvckZvckZpbGUoZC0+bV9nZmlsZSwgZXJyb3IpKTsKKyAgICAgICAgY2xp
ZW50LT5kaWRGYWlsKGhhbmRsZSwgbmV0d29ya0Vycm9yRm9yRmlsZShkLT5tX2dmaWxlLCBlcnJv
ci5nZXQoKSkpOwogICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC01MjgsNyArNTA3LDcgQEAKICAgICAgICAgLy8gRklYTUU6IHdo
YXQgaWYgdGhlIFVSSSBwb2ludHMgdG8gYSBkaXJlY3Rvcnk/IFNob3VsZCB3ZQogICAgICAgICAv
LyBnZW5lcmF0ZSBhIGxpc3Rpbmc/IEhvdz8gV2hhdCBkbyBvdGhlciBiYWNrZW5kcyBkbyBoZXJl
PwogCi0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUsIG5ldHdvcmtFcnJvckZvckZpbGUo
ZC0+bV9nZmlsZSwgZXJyb3IpKTsKKyAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZSwgbmV0
d29ya0Vycm9yRm9yRmlsZShkLT5tX2dmaWxlLCBlcnJvci5nZXQoKSkpOwogICAgICAgICBjbGVh
bnVwR2lvT3BlcmF0aW9uKGhhbmRsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01NDMs
NyArNTIyLDcgQEAKIAogICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVz
cG9uc2UpOwogCi0gICAgZ19maWxlX3JlYWRfYXN5bmMoZC0+bV9nZmlsZSwgR19QUklPUklUWV9E
RUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAorICAgIGdfZmlsZV9yZWFkX2FzeW5jKGQtPm1fZ2Zp
bGUuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICBvcGVuQ2FsbGJhY2ssIGhhbmRsZSk7CiB9CiAKQEAgLTU2Miwx
MiArNTQxLDEyIEBACiAKICAgICBkLT5tX2dmaWxlID0gZ19maWxlX25ld19mb3JfdXJpKHVybFN0
cmluZy51dGY4KCkuZGF0YSgpKTsKICAgICBkLT5tX2NhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJs
ZV9uZXcoKTsKLSAgICBnX2ZpbGVfcXVlcnlfaW5mb19hc3luYyhkLT5tX2dmaWxlLAorICAgIGdf
ZmlsZV9xdWVyeV9pbmZvX2FzeW5jKGQtPm1fZ2ZpbGUuZ2V0KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9UWVBFICIsIgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBF
ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRB
UkRfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfUVVFUllfSU5GT19O
T05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+
bV9jYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RF
RkFVTFQsIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcXVlcnlJbmZvQ2FsbGJhY2ssIHRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
CShyZXZpc2lvbmUgMzYzMzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oCShjb3BpYSBsb2NhbGUpCkBAIC00Niw2ICs0Niw3IEBACiAjZW5kaWYK
IAogI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKICNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KICNlbmRpZgogCkBAIC0xNzUsMTIgKzE3NiwxMiBAQAogICAgICAgICBWZWN0
b3I8Y2hhcj4gbV9wb3N0Qnl0ZXM7CiAjZW5kaWYKICNpZiBVU0UoU09VUCkKLSAgICAgICAgU291
cE1lc3NhZ2UqIG1fbXNnOworICAgICAgICBHUmVmUHRyPFNvdXBNZXNzYWdlPiBtX21zZzsKICAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBib29sIG1fY2FuY2Vs
bGVkOwotICAgICAgICBHRmlsZSogbV9nZmlsZTsKLSAgICAgICAgR0lucHV0U3RyZWFtKiBtX2lu
cHV0X3N0cmVhbTsKLSAgICAgICAgR0NhbmNlbGxhYmxlKiBtX2NhbmNlbGxhYmxlOworICAgICAg
ICBHUmVmUHRyPEdGaWxlPiBtX2dmaWxlOworICAgICAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4g
bV9pbnB1dF9zdHJlYW07CisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxh
YmxlOwogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKICAgICAgICAgZ3NpemUgbV9idWZzaXplLCBt
X3RvdGFsOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgJKHJldmlzaW9uZSAzNjMzMykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgJKGNvcGlhIGxvY2FsZSkKQEAgLTQ3LDYg
KzQ3LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9HdGtNZW51IEd0a01lbnU7CiB0eXBlZGVmIHN0cnVj
dCBfR3RrTWVudUl0ZW0gR3RrTWVudUl0ZW07CiB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0
a1dpZGdldDsKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDxnbGliLmg+CiAjZWxpZiBQTEFURk9STShXWCkKQEAgLTE2Miw3ICsxNjMs
NyBAQAogICAgIGJvb2wgbV9zY3JvbGxiYXJDYXB0dXJpbmdNb3VzZTsKICNlbGlmIFBMQVRGT1JN
KEdUSykKICAgICBJbnRQb2ludCBtX21lbnVQb3NpdGlvbjsKLSAgICBHdGtNZW51KiBtX3BvcHVw
OworICAgIEdSZWZQdHI8R3RrTWVudT4gbV9wb3B1cDsKICAgICBIYXNoTWFwPEd0a1dpZGdldCos
IGludD4gbV9pbmRleE1hcDsKICAgICBzdGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2YXRlZChHdGtN
ZW51SXRlbSogaXRlbSwgUG9wdXBNZW51Kik7CiAgICAgc3RhdGljIHZvaWQgbWVudVVubWFwcGVk
KEd0a1dpZGdldCosIFBvcHVwTWVudSopOwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uZSAzNjMzMykKKysrIFdlYkNvcmUv
Q2hhbmdlTG9nCShjb3BpYSBsb2NhbGUpCkBAIC0xLDMgKzEsMTAzIEBACisyMDA4LTA5LTExICBN
YXJjbyBCYXJpc2lvbmUgIDxtYXJjby5iYXJpc2lvbmVAY29sbGFib3JhLmNvLnVrPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdCBHVEsgUG9y
dCBuZWVkcyBhIHNtYXJ0cG9pbnRlciB0byBoYW5kbGUgZ19mcmVlIChHRnJlZVB0cj8pCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDgzCisKKyAgICAg
ICAgVXNlIEdPd25QdHIgYW5kIEdSZWZQdHIuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBwbGF0Zm9ybS9DdXJzb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1l
bnUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dFVuaUNoYXJUb1VURjgpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGFuZ29BdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6SWNv
bik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
Y29uOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZWRpYVBsYXllclByaXZh
dGVFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmN1c3RvbUN1cnNvck5ldyk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJzb3I6OkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6On5DdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3Vyc29yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6cG9p
bnRlckN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpjcm9zc0N1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpoYW5kQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om1vdmVDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6aUJlYW1DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6d2FpdEN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpoZWxwQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmVh
c3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhSZXNpemVDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6bm9ydGhFYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vcnRoV2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aFJlc2l6
ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aEVhc3RSZXNpemVDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6c291dGhXZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
Ondlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhTb3V0aFJlc2l6ZUN1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjplYXN0V2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6bm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbHVtblJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpyb3dSZXNpemVDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6dmVydGljYWxUZXh0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnRleHRNZW51Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6YWxpYXNDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6em9vbUlu
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Onpvb21PdXRDdXJzb3IpOgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hv
b3Nlcjo6b3BlbkZpbGVDaG9vc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpi
YXNlbmFtZUZvcldpZHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvR1JlZlB0ckd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpyZWZQdHIpOgorICAg
ICAgICAoV1RGOjpkZXJlZlB0cik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1Bhc3RlYm9hcmRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZFNlbGVj
dGlvbkRhdGE6OlBhc3RlYm9hcmRTZWxlY3Rpb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmRTZWxlY3Rpb25EYXRhOjp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmRTZWxlY3Rpb25EYXRhOjptYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
d3JpdGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRG
cmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpwbGFpblRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UG9wdXBNZW51OjpQb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51Ojp+UG9w
dXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQb3B1cE1lbnU6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51Ojpt
ZW51UmVtb3ZlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEN1cnNvcik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpmaWxsUmVzcG9uc2VGcm9tTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXN0
YXJ0ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hlZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlRGF0YVVybCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c3RhcnRIdHRwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpj
YW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6bmV0d29ya0Vycm9yRm9yRmlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpjbGVhbnVwR2lvT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3Nl
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6cmVhZENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZW5DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpxdWVyeUluZm9DYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnRHaW8pOgorCiAyMDA4
LTA5LTExICBEaXJrIFNjaHVsemUgIDx2YnM4NUBnbXguZGU+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2ltb24uCg==
</data>
<flag name="review"
          id="10410"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24050</attachid>
            <date>2008-10-03 07:17:40 -0700</date>
            <delta_ts>2008-10-03 12:53:27 -0700</delta_ts>
            <desc>Add GOwnPtr</desc>
            <filename>gownptr.patch</filename>
            <type>text/plain</type>
            <size>11655</size>
            <attacher name="Marco Barisione">marco.barisione</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbmUgMzcyMzUpCisrKyBKYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5hbQkoY29waWEgbG9jYWxlKQpAQCAtMjMyLDYgKzIzMiw4IEBACiAJ
SmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0Zv
cndhcmQuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0dldFB0ci5oIFwKKwlKYXZhU2NyaXB0Q29y
ZS93dGYvR093blB0ci5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmggXAogCUph
dmFTY3JpcHRDb3JlL3d0Zi9IYXNoQ291bnRlZFNldC5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYv
SGFzaEZ1bmN0aW9ucy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvSGFzaEl0ZXJhdG9ycy5oIFwK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9HT3duUHRyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS93dGYvR093blB0ci5jcHAJKHJldmlzaW9uZSAwKQorKysgSmF2YVNjcmlwdENv
cmUvd3RmL0dPd25QdHIuY3BwCShyZXZpc2lvbmUgMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdPd25QdHIuaCIKKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkUHRyPEdFcnJvcj4o
R0Vycm9yKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19lcnJvcl9mcmVlKHB0cik7
Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkUHRyPEdMaXN0PihHTGlzdCogcHRyKQor
eworICAgIGdfbGlzdF9mcmVlKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVk
UHRyPEdDb25kPihHQ29uZCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfY29uZF9m
cmVlKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkUHRyPEdNdXRleD4oR011
dGV4KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19tdXRleF9mcmVlKHB0cik7Cit9
CisKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkUHRyPEdQYXR0ZXJuU3BlYz4oR1BhdHRlcm5T
cGVjKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19wYXR0ZXJuX3NwZWNfZnJlZShw
dHIpOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGZyZWVPd25lZFB0cjxHRGlyPihHRGlyKiBwdHIp
Cit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19kaXJfY2xvc2UocHRyKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oCShyZXZpc2lvbmUgMzcyMzUp
CisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgJKGNvcGlhIGxvY2FsZSkKQEAgLTYy
LDYgKzYyLDkgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpZiBQTEFURk9STShHVEsp
CisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOX09T
KQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTExNCw4ICsxMTcsOCBAQAogdHlwZWRlZiBwdGhy
ZWFkX211dGV4X3QgUGxhdGZvcm1NdXRleDsKIHR5cGVkZWYgcHRocmVhZF9jb25kX3QgUGxhdGZv
cm1Db25kaXRpb247CiAjZWxpZiBQTEFURk9STShHVEspCi10eXBlZGVmIEdNdXRleCogUGxhdGZv
cm1NdXRleDsKLXR5cGVkZWYgR0NvbmQqIFBsYXRmb3JtQ29uZGl0aW9uOwordHlwZWRlZiBHT3du
UHRyPEdNdXRleD4gUGxhdGZvcm1NdXRleDsKK3R5cGVkZWYgR093blB0cjxHQ29uZD4gUGxhdGZv
cm1Db25kaXRpb247CiAjZWxpZiBQTEFURk9STShRVCkKIHR5cGVkZWYgUU11dGV4KiBQbGF0Zm9y
bU11dGV4OwogdHlwZWRlZiBRV2FpdENvbmRpdGlvbiogUGxhdGZvcm1Db25kaXRpb247CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS93dGYvR093blB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3d0Zi9HT3duUHRyLmgJKHJldmlzaW9uZSAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0dP
d25QdHIuaAkocmV2aXNpb25lIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgR093
blB0cl9oCisjZGVmaW5lIEdPd25QdHJfaAorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1
ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW5saW5lIHZvaWQgZnJlZU93bmVkUHRyKFQqIHB0cikgeyBnX2ZyZWUocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocHRyKSk7IH0KKyAgICB0ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVkUHRyPEdF
cnJvcj4oR0Vycm9yKik7CisgICAgdGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZFB0cjxHTGlzdD4o
R0xpc3QqKTsKKyAgICB0ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVkUHRyPEdDb25kPihHQ29uZCop
OworICAgIHRlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRQdHI8R011dGV4PihHTXV0ZXgqKTsKKyAg
ICB0ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVkUHRyPEdQYXR0ZXJuU3BlYz4oR1BhdHRlcm5TcGVj
Kik7CisgICAgdGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZFB0cjxHRGlyPihHRGlyKik7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgR093blB0ciA6IE5vbmNvcHlhYmxlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IEdPd25QdHIoVCogcHRyID0gMCkgOiBtX3B0cihw
dHIpIHsgfQorICAgICAgICB+R093blB0cigpIHsgZnJlZU93bmVkUHRyKG1fcHRyKTsgfQorCisg
ICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisgICAgICAgIFQqIHJlbGVh
c2UoKSB7IFQqIHB0ciA9IG1fcHRyOyBtX3B0ciA9IDA7IHJldHVybiBwdHI7IH0KKyAgICAgICAg
VComIHJhd1B0cigpIHsgcmV0dXJuIG1fcHRyOyB9CisKKyAgICAgICAgdm9pZCBzZXQoVCogcHRy
KSB7IEFTU0VSVCghcHRyIHx8IG1fcHRyICE9IHB0cik7IGZyZWVPd25lZFB0cihtX3B0cik7IG1f
cHRyID0gcHRyOyB9CisgICAgICAgIHZvaWQgY2xlYXIoKSB7IGZyZWVPd25lZFB0cihtX3B0cik7
IG1fcHRyID0gMDsgfQorCisgICAgICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1f
cHRyKTsgcmV0dXJuICptX3B0cjsgfQorICAgICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyBB
U1NFUlQobV9wdHIpOyByZXR1cm4gbV9wdHI7IH0KKworICAgICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX3B0cjsgfQorCisgICAgICAgIC8vIFRoaXMgY29udmVyc2lvbiBv
cGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3Ro
ZXIgaW50ZWdlciB0eXBlcy4KKyAgICAgICAgdHlwZWRlZiBUKiBHT3duUHRyOjoqVW5zcGVjaWZp
ZWRCb29sVHlwZTsKKyAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHRyID8gJkdPd25QdHI6Om1fcHRyIDogMDsgfQorCisgICAgICAgIHZvaWQg
c3dhcChHT3duUHRyJiBvKSB7IHN0ZDo6c3dhcChtX3B0ciwgby5tX3B0cik7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIFQqIG1fcHRyOworICAgIH07CisgICAgCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIHN3YXAoR093blB0cjxUPiYgYSwgR093blB0cjxUPiYgYikg
eyBhLnN3YXAoYik7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdPd25QdHI8VD4mIGEsIFUqIGIpCisgICAgeyAK
KyAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYjsgCisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNv
bnN0IEdPd25QdHI8VT4mIGIpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYi5nZXQoKTsg
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgR093blB0cjxUPiYgYSwgVSogYikKKyAgICB7CisgICAgICAg
IHJldHVybiBhLmdldCgpICE9IGI7IAorICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IEdPd25QdHI8
VT4mIGIpCisgICAgeyAKKyAgICAgICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsgCisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgR093blB0cjxUPjo6
UHRyVHlwZSBnZXRQdHIoY29uc3QgR093blB0cjxUPiYgcCkKKyAgICB7CisgICAgICAgIHJldHVy
biBwLmdldCgpOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6R093
blB0cjsKKworI2VuZGlmIC8vIEdPd25QdHJfaApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1Ro
cmVhZGluZ0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGlu
Z0d0ay5jcHAJKHJldmlzaW9uZSAzNzIzNSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRp
bmdHdGsuY3BwCShjb3BpYSBsb2NhbGUpCkBAIC0xNTcsMjIgKzE1NywyMSBAQAogCiBNdXRleDo6
fk11dGV4KCkKIHsKLSAgICBnX211dGV4X2ZyZWUobV9tdXRleCk7CiB9CiAKIHZvaWQgTXV0ZXg6
OmxvY2soKQogewotICAgIGdfbXV0ZXhfbG9jayhtX211dGV4KTsKKyAgICBnX211dGV4X2xvY2so
bV9tdXRleC5nZXQoKSk7CiB9CiAKIGJvb2wgTXV0ZXg6OnRyeUxvY2soKQogewotICAgIHJldHVy
biBnX211dGV4X3RyeWxvY2sobV9tdXRleCk7CisgICAgcmV0dXJuIGdfbXV0ZXhfdHJ5bG9jayht
X211dGV4LmdldCgpKTsKIH0KIAogdm9pZCBNdXRleDo6dW5sb2NrKCkKIHsKLSAgICBnX211dGV4
X3VubG9jayhtX211dGV4KTsKKyAgICBnX211dGV4X3VubG9jayhtX211dGV4LmdldCgpKTsKIH0K
IAogVGhyZWFkQ29uZGl0aW9uOjpUaHJlYWRDb25kaXRpb24oKQpAQCAtMTgyLDEyICsxODEsMTEg
QEAKIAogVGhyZWFkQ29uZGl0aW9uOjp+VGhyZWFkQ29uZGl0aW9uKCkKIHsKLSAgICBnX2NvbmRf
ZnJlZShtX2NvbmRpdGlvbik7CiB9CiAKIHZvaWQgVGhyZWFkQ29uZGl0aW9uOjp3YWl0KE11dGV4
JiBtdXRleCkKIHsKLSAgICBnX2NvbmRfd2FpdChtX2NvbmRpdGlvbiwgbXV0ZXguaW1wbCgpKTsK
KyAgICBnX2NvbmRfd2FpdChtX2NvbmRpdGlvbi5nZXQoKSwgbXV0ZXguaW1wbCgpLmdldCgpKTsK
IH0KIAogYm9vbCBUaHJlYWRDb25kaXRpb246OnRpbWVkV2FpdChNdXRleCYgbXV0ZXgsIGRvdWJs
ZSBpbnRlcnZhbCkKQEAgLTIxMCwxNyArMjA4LDE3IEBACiAgICAgICAgIHRhcmdldFRpbWUudHZf
c2VjKys7CiAgICAgfQogCi0gICAgcmV0dXJuIGdfY29uZF90aW1lZF93YWl0KG1fY29uZGl0aW9u
LCBtdXRleC5pbXBsKCksICZ0YXJnZXRUaW1lKTsKKyAgICByZXR1cm4gZ19jb25kX3RpbWVkX3dh
aXQobV9jb25kaXRpb24uZ2V0KCksIG11dGV4LmltcGwoKS5nZXQoKSwgJnRhcmdldFRpbWUpOwog
fQogCiB2b2lkIFRocmVhZENvbmRpdGlvbjo6c2lnbmFsKCkKIHsKLSAgICBnX2NvbmRfc2lnbmFs
KG1fY29uZGl0aW9uKTsKKyAgICBnX2NvbmRfc2lnbmFsKG1fY29uZGl0aW9uLmdldCgpKTsKIH0K
IAogdm9pZCBUaHJlYWRDb25kaXRpb246OmJyb2FkY2FzdCgpCiB7Ci0gICAgZ19jb25kX2Jyb2Fk
Y2FzdChtX2NvbmRpdGlvbik7CisgICAgZ19jb25kX2Jyb2FkY2FzdChtX2NvbmRpdGlvbi5nZXQo
KSk7CiB9CiAKIApJbmRleDogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb25lIDM3MjM4KQorKysgSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCShjb3BpYSBsb2NhbGUpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMDgtMTAt
MDMgIE1hcmNvIEJhcmlzaW9uZSAgPG1hcmNvLmJhcmlzaW9uZUBjb2xsYWJvcmEuY28udWs+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0IEdU
SyBQb3J0IG5lZWRzIGEgc21hcnRwb2ludGVyIHRvIGhhbmRsZSBnX2ZyZWUgKEdGcmVlUHRyPykK
KyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0ODMKKwor
ICAgICAgICBBZGQgYSBHT3duUHRyIHNtYXJ0IHBvaW50ZXIgKHNpbWlsYXIgdG8gT3duUHRyKSB0
byBoYW5kbGUgbWVtb3J5CisgICAgICAgIGFsbG9jYXRlZCBieSBHTGliIGFuZCBzdGFydCB0aGUg
Y29udmVyc2lvbiB0byB1c2UgaXQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiB3dGYvR093blB0ci5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpHRXJyb3IpOgorICAg
ICAgICAoV1RGOjpHTGlzdCk6CisgICAgICAgIChXVEY6OkdDb25kKToKKyAgICAgICAgKFdURjo6
R011dGV4KToKKyAgICAgICAgKFdURjo6R1BhdHRlcm5TcGVjKToKKyAgICAgICAgKFdURjo6R0Rp
cik6CisgICAgICAgICogd3RmL0dPd25QdHIuaDogQWRkZWQuCisgICAgICAgIChXVEY6OmZyZWVP
d25lZFB0cik6CisgICAgICAgIChXVEY6OkdPd25QdHI6OkdPd25QdHIpOgorICAgICAgICAoV1RG
OjpHT3duUHRyOjp+R093blB0cik6CisgICAgICAgIChXVEY6OkdPd25QdHI6OmdldCk6CisgICAg
ICAgIChXVEY6OkdPd25QdHI6OnJlbGVhc2UpOgorICAgICAgICAoV1RGOjpHT3duUHRyOjpyYXdQ
dHIpOgorICAgICAgICAoV1RGOjpHT3duUHRyOjpzZXQpOgorICAgICAgICAoV1RGOjpHT3duUHRy
OjpjbGVhcik6CisgICAgICAgIChXVEY6OkdPd25QdHI6Om9wZXJhdG9yKik6CisgICAgICAgIChX
VEY6OkdPd25QdHI6Om9wZXJhdG9yLT4pOgorICAgICAgICAoV1RGOjpHT3duUHRyOjpvcGVyYXRv
ciEpOgorICAgICAgICAoV1RGOjpHT3duUHRyOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBl
KToKKyAgICAgICAgKFdURjo6R093blB0cjo6c3dhcCk6CisgICAgICAgIChXVEY6OnN3YXApOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChXVEY6OmdldFB0cik6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAg
ICAqIHd0Zi9UaHJlYWRpbmdHdGsuY3BwOgorICAgICAgICAoV1RGOjpNdXRleDo6fk11dGV4KToK
KyAgICAgICAgKFdURjo6TXV0ZXg6OmxvY2spOgorICAgICAgICAoV1RGOjpNdXRleDo6dHJ5TG9j
ayk6CisgICAgICAgIChXVEY6Ok11dGV4Ojp1bmxvY2spOgorICAgICAgICAoV1RGOjpUaHJlYWRD
b25kaXRpb246On5UaHJlYWRDb25kaXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWRDb25kaXRp
b246OndhaXQpOgorICAgICAgICAoV1RGOjpUaHJlYWRDb25kaXRpb246OnRpbWVkV2FpdCk6Cisg
ICAgICAgIChXVEY6OlRocmVhZENvbmRpdGlvbjo6c2lnbmFsKToKKyAgICAgICAgKFdURjo6VGhy
ZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QpOgorCiAyMDA4LTEwLTAyICBPbGl2ZXIgSHVudCAgPG9s
aXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsu
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAJKHJldmlzaW9uZSAzNzIzNSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAJKGNvcGlhIGxvY2FsZSkKQEAgLTU0LDIwICs1NCwxNyBAQAogewogICAgIGlmIChHU1RfTUVT
U0FHRV9UWVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VSUk9SKQogICAgIHsKLSAgICAgICAg
R0Vycm9yKiBlcnI7Ci0gICAgICAgIGdjaGFyKiBkZWJ1ZzsKKyAgICAgICAgR093blB0cjxHRXJy
b3I+IGVycjsKKyAgICAgICAgR093blB0cjxnY2hhcj4gZGVidWc7CiAKLSAgICAgICAgZ3N0X21l
c3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyciwgJmRlYnVnKTsKKyAgICAgICAgZ3N0X21l
c3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyci5yYXdQdHIoKSwgJmRlYnVnLnJhd1B0cigp
KTsKICAgICAgICAgaWYgKGVyci0+Y29kZSA9PSAzKSB7CiAgICAgICAgICAgICBMT0dfVkVSQk9T
RShNZWRpYSwgIkZpbGUgbm90IGZvdW5kIik7CiAgICAgICAgICAgICBNZWRpYVBsYXllclByaXZh
dGUqIG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVBsYXllclByaXZhdGUqPihkYXRhKTsKICAg
ICAgICAgICAgIGlmIChtcCkKICAgICAgICAgICAgICAgICBtcC0+bG9hZGluZ0ZhaWxlZCgpOwot
ICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIExPR19WRVJCT1NF
KE1lZGlhLCAiRXJyb3I6ICVkLCAlcyIsIGVyci0+Y29kZSwgIGVyci0+bWVzc2FnZSk7Ci0gICAg
ICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyKTsKLSAgICAgICAgICAgIGdfZnJlZShkZWJ1Zyk7Ci0g
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb25lIDM3MjM4KQor
KysgV2ViQ29yZS9DaGFuZ2VMb2cJKGNvcGlhIGxvY2FsZSkKQEAgLTEsMyArMSwxNSBAQAorMjAw
OC0xMC0wMyAgTWFyY28gQmFyaXNpb25lICA8bWFyY28uYmFyaXNpb25lQGNvbGxhYm9yYS5jby51
az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJL
aXQgR1RLIFBvcnQgbmVlZHMgYSBzbWFydHBvaW50ZXIgdG8gaGFuZGxlIGdfZnJlZSAoR0ZyZWVQ
dHI/KQorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ4
MworCisgICAgICAgIFN0YXJ0IHRoZSBjb252ZXJzaW9uIHRvIHVzZSBHT3duUHRyIGFuZCBmaXgg
YSBtZW1vcnkgbGVhay4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFQbGF5ZXJQ
cml2YXRlRXJyb3JDYWxsYmFjayk6CisKIDIwMDgtMTAtMDMgIEFscCBUb2tlciAgPGFscEBudWFu
dGkuY29tPgogCiAgICAgICAgIFJlbW92ZSBzb21lIGxlZnQtb3ZlciBHVEsrIGluY2x1ZGVzLiBO
byBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4K
</data>
<flag name="review"
          id="10889"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>