<?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>106666</bug_id>
          
          <creation_ts>2013-01-11 07:49:00 -0800</creation_ts>
          <short_desc>[EFL][Qt][WebGL] Share the common code between GraphicsSurfaceGLX and X11WindowResources.</short_desc>
          <delta_ts>2013-02-09 07:11:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kalyan">kalyan.kondapally</reporter>
          <assigned_to name="Kalyan">kalyan.kondapally</assigned_to>
          <cc>abecsi</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>noam</cc>
    
    <cc>ostap73</cc>
    
    <cc>rakuco</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>805272</commentid>
    <comment_count>0</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-11 07:49:00 -0800</bug_when>
    <thetext>X11WindowResources contains the X related code which is used by both of our GLX and EGL implementaion. GraphicsSurfaceGLX also has similar code which could be shared by both the classes. This would avoid any code duplication and need to fix bugs in both places. Same case with GLXConfigSelector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809314</commentid>
    <comment_count>1</comment_count>
      <attachid>183180</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-17 07:01:32 -0800</bug_when>
    <thetext>Created attachment 183180
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809366</commentid>
    <comment_count>2</comment_count>
      <attachid>183196</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-17 08:42:45 -0800</bug_when>
    <thetext>Created attachment 183196
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809367</commentid>
    <comment_count>3</comment_count>
      <attachid>183196</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-17 08:48:21 -0800</bug_when>
    <thetext>Comment on attachment 183196
patch

Attachment 183196 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15906947</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809369</commentid>
    <comment_count>4</comment_count>
      <attachid>183196</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-17 08:48:40 -0800</bug_when>
    <thetext>Comment on attachment 183196
patch

Attachment 183196 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15938158</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809373</commentid>
    <comment_count>5</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2013-01-17 08:58:51 -0800</bug_when>
    <thetext>I&apos;m looking at the issues reported by Qt EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810000</commentid>
    <comment_count>6</comment_count>
      <attachid>183329</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-17 17:40:20 -0800</bug_when>
    <thetext>Created attachment 183329
patchv3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810024</commentid>
    <comment_count>7</comment_count>
      <attachid>183329</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-17 17:59:30 -0800</bug_when>
    <thetext>Comment on attachment 183329
patchv3

Will upload a rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823872</commentid>
    <comment_count>8</comment_count>
      <attachid>186267</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-03 13:43:00 -0800</bug_when>
    <thetext>Created attachment 186267
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823873</commentid>
    <comment_count>9</comment_count>
      <attachid>186267</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-03 13:53:53 -0800</bug_when>
    <thetext>Comment on attachment 186267
patch

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

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11Wrapper.cpp:174
&gt; +}
&gt; +#endif
&gt; +
&gt; +#endif

I hate nested ifdefs. Can they be avoided?

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11Wrapper.h:54
&gt; +// Used for handling XError.
&gt; +static bool validOperation = true;
&gt; +static int handleXPixmapCreationError(Display*, XErrorEvent* event)
&gt; +{
&gt; +    if (event-&gt;error_code == BadMatch || event-&gt;error_code == BadWindow || event-&gt;error_code == BadAlloc) {
&gt; +        validOperation = false;
&gt; +
&gt; +        switch (event-&gt;error_code) {
&gt; +        case BadMatch:

why is this in the header?

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11Wrapper.h:96
&gt; +        // XSync must be called to ensure that current errors are handled by the original handler.
&gt; +        XSync(X11Wrapper::nativeDisplay(), false);
&gt; +        m_previousErrorHandler = XSetErrorHandler(handleXPixmapCreationError);
&gt; +    }
&gt; +

This is more than a simple implementation, so why is it in the header</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823875</commentid>
    <comment_count>10</comment_count>
      <attachid>186267</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-03 13:56:35 -0800</bug_when>
    <thetext>Comment on attachment 186267
patch

Attachment 186267 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16351753</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823877</commentid>
    <comment_count>11</comment_count>
      <attachid>186267</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-03 13:57:52 -0800</bug_when>
    <thetext>Comment on attachment 186267
patch

Attachment 186267 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16360705</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823890</commentid>
    <comment_count>12</comment_count>
      <attachid>186267</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-03 14:46:02 -0800</bug_when>
    <thetext>Comment on attachment 186267
patch

Attachment 186267 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16346882</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823935</commentid>
    <comment_count>13</comment_count>
      <attachid>186280</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-03 17:09:38 -0800</bug_when>
    <thetext>Created attachment 186280
WIP

Looking into the build issue with Qt. Will mark it for review once I get to resolve it but feel free to give any feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823936</commentid>
    <comment_count>14</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-03 17:11:01 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 186267 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186267&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/X11Wrapper.cpp:174
&gt; &gt; +}
&gt; &gt; +#endif
&gt; &gt; +
&gt; &gt; +#endif
&gt; 
&gt; I hate nested ifdefs. Can they be avoided?

Yes, done.
 
&gt; why is this in the header?
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/X11Wrapper.h:96
&gt; &gt; +
&gt; 
&gt; This is more than a simple implementation, so why is it in the header

Moved the implementation to cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824166</commentid>
    <comment_count>15</comment_count>
      <attachid>186280</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2013-02-04 02:30:31 -0800</bug_when>
    <thetext>Comment on attachment 186280
WIP

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

&gt; Source/WebCore/platform/graphics/surfaces/glx/GLXConfigSelector.h:159
&gt; +    {

This looks like duplicate code. Would it be possible to have something like:
GLXFBConfig findMatchingConfig(const int attributes[], int depth, VisualID id = 0)
?

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11Wrapper.h:47
&gt; +

nit: I don&apos;t really like the name X11Wrapper. It sounds highly generic and looks rather like a Helper or a convenience class to me than a Wrapper.
How about X11OffScreenHelper, or just X11Helper ?


All in all, i would say this is a very nice piece of work! :)
Thanks a lot!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824649</commentid>
    <comment_count>16</comment_count>
      <attachid>186437</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-04 12:30:28 -0800</bug_when>
    <thetext>Created attachment 186437
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824650</commentid>
    <comment_count>17</comment_count>
      <attachid>186437</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-04 12:31:21 -0800</bug_when>
    <thetext>Comment on attachment 186437
patch

will upload a rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824654</commentid>
    <comment_count>18</comment_count>
      <attachid>186439</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-04 12:32:29 -0800</bug_when>
    <thetext>Created attachment 186439
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824731</commentid>
    <comment_count>19</comment_count>
      <attachid>186453</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-04 13:58:03 -0800</bug_when>
    <thetext>Created attachment 186453
patchv2

review fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824732</commentid>
    <comment_count>20</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-04 13:58:50 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 186280 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186280&amp;action=review

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/X11Wrapper.h:47
&gt; &gt; +

done

&gt; nit: I don&apos;t really like the name X11Wrapper. It sounds highly generic and looks rather like a Helper or a convenience class to me than a Wrapper.
&gt; How about X11OffScreenHelper, or just X11Helper ?
&gt; 
 renamed it as X11Helper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824948</commentid>
    <comment_count>21</comment_count>
      <attachid>186453</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-04 17:31:49 -0800</bug_when>
    <thetext>Comment on attachment 186453
patchv2

Attachment 186453 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16375439</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826418</commentid>
    <comment_count>22</comment_count>
      <attachid>186453</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2013-02-06 06:59:05 -0800</bug_when>
    <thetext>Comment on attachment 186453
patchv2

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

&gt; Source/WebCore/platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:-330
&gt; -        XFree(configs);

don&apos;t you need to free the configs received from m_configSelector-&gt;surfaceclientConfig(..) somewhere again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826437</commentid>
    <comment_count>23</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-06 07:39:08 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 186453 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186453&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp:-330
&gt; &gt; -        XFree(configs);
&gt; 
&gt; don&apos;t you need to free the configs received from m_configSelector-&gt;surfaceclientConfig(..) somewhere again?

findMatchingConfig(uses OwnPtrX11) in GLXConfigSelector should take care of freeing XResources automatically once it goes out of scope. We make a temp copy(on stack) of the selected config.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826462</commentid>
    <comment_count>24</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2013-02-06 08:10:48 -0800</bug_when>
    <thetext>(In reply to comment #23)

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826648</commentid>
    <comment_count>25</comment_count>
      <attachid>186896</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-06 12:37:53 -0800</bug_when>
    <thetext>Created attachment 186896
patchv3

Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827424</commentid>
    <comment_count>26</comment_count>
      <attachid>186896</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-07 06:16:06 -0800</bug_when>
    <thetext>Comment on attachment 186896
patchv3

Rejecting attachment 186896 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=gce-cq-04&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 186896, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Last 500 characters of output:
rce/WebKit/chromium/webkit/media/crypto/ppapi/cdm --revision 173055 --non-interactive --force --accept theirs-conflict --ignore-externals&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
56&gt;At revision 173055.

________ running &apos;/usr/bin/python tools/clang/scripts/update.py --mac-only&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/16426166</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828299</commentid>
    <comment_count>27</comment_count>
      <attachid>187260</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-08 00:53:09 -0800</bug_when>
    <thetext>Created attachment 187260
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829018</commentid>
    <comment_count>28</comment_count>
      <attachid>187260</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-09 07:11:46 -0800</bug_when>
    <thetext>Comment on attachment 187260
patch

Clearing flags on attachment: 187260

Committed r142355: &lt;http://trac.webkit.org/changeset/142355&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829019</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-09 07:11:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183180</attachid>
            <date>2013-01-17 07:01:32 -0800</date>
            <delta_ts>2013-01-17 08:42:45 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>glxrefactor.patch</filename>
            <type>text/plain</type>
            <size>26584</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wv
RUdMU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuY3BwCmluZGV4IGI1MjRhYjUuLmUzYjcwMTYgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJm
YWNlLmNwcApAQCAtNTcsMTIgKzU3LDcgQEAgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdM
V2luZG93VHJhbnNwb3J0U3VyZmFjZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoIW1fbmF0aXZlUmVzb3VyY2UtPnNldFZpc3VhbElkKHZpc3VhbElkKSkgewotICAgICAgICBk
ZXN0cm95KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25hdGl2ZVJlc291cmNl
LT5jcmVhdGVPZmZzY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlKTsKKyAgICBtX25hdGl2ZVJl
c291cmNlLT5jcmVhdGVPZmZzY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCB2aXN1YWxJZCk7
CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CiAgICAgICAgIGRlc3Ryb3koKTsKZGlmZiAt
LWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29u
ZmlnU2VsZWN0b3IuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYQ29uZmlnU2VsZWN0b3IuaAppbmRleCBhMWIxNGJlLi4wNmFhYzBmIDEwMDY0NAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1Nl
bGVjdG9yLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HTFhDb25maWdTZWxlY3Rvci5oCkBAIC0zOSw3ICszOSw2IEBAIHB1YmxpYzoKICAgICBHTFhD
b25maWdTZWxlY3RvcihEaXNwbGF5KiB4RGlzcGxheSwgYm9vbCBzdXBwb3J0c1hSZW5kZXJFeHRl
bnNpb24pCiAgICAgICAgIDogbV9wYnVmZmVyRkJDb25maWcoMCkKICAgICAgICAgLCBtX3N1cmZh
Y2VDb250ZXh0RkJDb25maWcoMCkKLSAgICAgICAgLCBtX3Zpc3VhbEluZm8oMCkKICAgICAgICAg
LCBtX3NoYXJlZERpc3BsYXkoeERpc3BsYXkpCiAgICAgICAgICwgbV9zdXBwb3J0c1hSZW5kZXJF
eHRlbnNpb24oc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKQogICAgIHsKQEAgLTQ5LDcgKzQ4LDcg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbygp
IGNvbnN0CisgICAgY29uc3QgWFZpc3VhbEluZm8mIHZpc3VhbEluZm8oKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fdmlzdWFsSW5mbzsKICAgICB9CkBAIC0xMTEsOSArMTEwLDggQEAg
cHJpdmF0ZToKICAgICBHTFhGQkNvbmZpZyBjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0
ZXNbXSkKICAgICB7CiAgICAgICAgIGludCBudW1BdmFpbGFibGVDb25maWdzOwotICAgICAgICBt
X3Zpc3VhbEluZm8gPSAwOwogICAgICAgICBHTFhGQkNvbmZpZyogdGVtcCA9IGdsWENob29zZUZC
Q29uZmlnKG1fc2hhcmVkRGlzcGxheSwgRGVmYXVsdFNjcmVlbihtX3NoYXJlZERpc3BsYXkpLCBh
dHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29uZmlncyk7Ci0KKyAgICAgICAgWFZpc3VhbEluZm8q
IHZpc0luZm8gPSAwOwogICAgICAgICBpZiAoIW51bUF2YWlsYWJsZUNvbmZpZ3MpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKIApAQCAtMTIxLDIwICsxMTksMjMgQEAgcHJpdmF0ZToKICAgICAgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXZh
aWxhYmxlQ29uZmlnczsgKytpKSB7Ci0gICAgICAgICAgICBtX3Zpc3VhbEluZm8gPSBnbFhHZXRW
aXN1YWxGcm9tRkJDb25maWcobV9zaGFyZWREaXNwbGF5LCB0ZW1wW2ldKTsKLSAgICAgICAgICAg
IGlmICghbV92aXN1YWxJbmZvKQorICAgICAgICAgICAgaWYgKHZpc0luZm8pCisgICAgICAgICAg
ICAgICAgWEZyZWUodmlzSW5mbyk7CisKKyAgICAgICAgICAgIHZpc0luZm8gPSBnbFhHZXRWaXN1
YWxGcm9tRkJDb25maWcobV9zaGFyZWREaXNwbGF5LCB0ZW1wW2ldKTsKKyAgICAgICAgICAgIGlm
ICghdmlzSW5mbykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKICAgICAgICAgICAgIGlmIChtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikgewot
ICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZp
c3VhbEZvcm1hdChtX3NoYXJlZERpc3BsYXksIG1fdmlzdWFsSW5mby0+dmlzdWFsKTsKKyAgICAg
ICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxG
b3JtYXQobV9zaGFyZWREaXNwbGF5LCB2aXNJbmZvLT52aXN1YWwpOwogICAgICAgICAgICAgICAg
IGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkgewogICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07CiAgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3Zpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHZpc0luZm8tPmRlcHRoID09IDMyKSB7CiAjZWxzZQot
ICAgICAgICAgICAgaWYgKG1fdmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKKyAgICAgICAgICAg
IGlmICh2aXNJbmZvLT5kZXB0aCA9PSAzMikgewogI2VuZGlmCiAgICAgICAgICAgICAgICAgc2Vs
ZWN0ZWRDb25maWcgPSB0ZW1wW2ldOwogICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKQEAg
LTE0NCw5ICsxNDUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRGlkIG5vdCBmaW5kIGFueSB2
aXN1YWwgc3VwcG9ydGluZyBhbHBoYSwgc2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUgY29uZmln
LgogICAgICAgICBpZiAoIWZvdW5kKSB7CiAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRl
bXBbMF07Ci0gICAgICAgICAgICBtX3Zpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25m
aWcobV9zaGFyZWREaXNwbGF5LCB0ZW1wWzBdKTsKKyAgICAgICAgICAgIHZpc0luZm8gPSBnbFhH
ZXRWaXN1YWxGcm9tRkJDb25maWcobV9zaGFyZWREaXNwbGF5LCB0ZW1wWzBdKTsKICAgICAgICAg
fQogCisgICAgICAgIG1fdmlzdWFsSW5mbyA9ICp2aXNJbmZvOwogICAgICAgICBYRnJlZSh0ZW1w
KTsKIAogICAgICAgICByZXR1cm4gc2VsZWN0ZWRDb25maWc7CkBAIC0xNTQsNyArMTU2LDcgQEAg
cHJpdmF0ZToKIAogICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOwogICAgIEdMWEZC
Q29uZmlnIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKLSAgICBYVmlzdWFsSW5mbyogbV92aXN1
YWxJbmZvOworICAgIFhWaXN1YWxJbmZvIG1fdmlzdWFsSW5mbzsKICAgICBEaXNwbGF5KiBtX3No
YXJlZERpc3BsYXk7CiAgICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKIH07CmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dM
WFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HTFhTdXJmYWNlLmNwcAppbmRleCAyZDZjNGY0Li45ZDc0NmQwIDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFj
ZS5jcHAKQEAgLTUxLDggKzUxLDcgQEAgR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0
U3VyZmFjZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX25hdGl2ZVJlc291cmNl
LT5zZXRWaXN1YWxJbmZvKG1fY29uZmlnU2VsZWN0b3ItPnZpc3VhbEluZm8oKSk7Ci0gICAgbV9u
YXRpdmVSZXNvdXJjZS0+Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSk7Cisg
ICAgbV9uYXRpdmVSZXNvdXJjZS0+Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRs
ZSwgbV9jb25maWdTZWxlY3Rvci0+dmlzdWFsSW5mbygpKTsKIAogICAgIGlmICghbV9idWZmZXJI
YW5kbGUpIHsKICAgICAgICAgZGVzdHJveSgpOwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VH
TFguY3BwCmluZGV4IGM4OWY5YWYuLjc1NmQ1MzIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcAorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3Vy
ZmFjZUdMWC5jcHAKQEAgLTIyLDggKzIyLDEwIEBACiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKIAorI2luY2x1ZGUgIkdMWENvbmZpZ1NlbGVjdG9yLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJYMTFXaW5k
b3dSZXNvdXJjZXMuaCIKIAogI2lmIFBMQVRGT1JNKFFUKQogLy8gUXQgaGVhZGVycyBtdXN0IGJl
IGluY2x1ZGVkIGJlZm9yZSBnbHggaGVhZGVycy4KQEAgLTM2LDE0ICszOCw5IEBACiAKICNpbmNs
dWRlIDxHTC9nbGV4dC5oPgogI2luY2x1ZGUgPEdML2dseC5oPgotI2luY2x1ZGUgPFgxMS9YbGli
Lmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2luY2x1ZGUgPFgx
MS9leHRlbnNpb25zL1hyZW5kZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
bG9uZyBYMTFPdmVycmlkZVJlZGlyZWN0ID0gMUwgPDwgOTsKLQogc3RhdGljIFBGTkdMWEJJTkRU
RVhJTUFHRUVYVFBST0MgcEdsWEJpbmRUZXhJbWFnZUVYVCA9IDA7CiBzdGF0aWMgUEZOR0xYUkVM
RUFTRVRFWElNQUdFRVhUUFJPQyBwR2xYUmVsZWFzZVRleEltYWdlRVhUID0gMDsKIHN0YXRpYyBQ
Rk5HTEJJTkRGUkFNRUJVRkZFUlBST0MgcEdsQmluZEZyYW1lYnVmZmVyID0gMDsKQEAgLTUyLDEz
MCArNDksNiBAQCBzdGF0aWMgUEZOR0xHRU5GUkFNRUJVRkZFUlNQUk9DIHBHbEdlbkZyYW1lYnVm
ZmVycyA9IDA7CiBzdGF0aWMgUEZOR0xERUxFVEVGUkFNRUJVRkZFUlNQUk9DIHBHbERlbGV0ZUZy
YW1lYnVmZmVycyA9IDA7CiBzdGF0aWMgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRFBST0MgcEds
RnJhbWVidWZmZXJUZXh0dXJlMkQgPSAwOwogCi0vLyBVc2VkIGZvciBoYW5kbGluZyBYRXJyb3Iu
Ci1zdGF0aWMgYm9vbCB2YWxpZE9wZXJhdGlvbiA9IHRydWU7Ci1zdGF0aWMgaW50IGhhbmRsZVhQ
aXhtYXBDcmVhdGlvbkVycm9yKERpc3BsYXkqLCBYRXJyb3JFdmVudCogZXZlbnQpCi17Ci0gICAg
aWYgKGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZE1hdGNoIHx8IGV2ZW50LT5lcnJvcl9jb2RlID09
IEJhZFdpbmRvdyB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRBbGxvYykgewotICAgICAgICB2
YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAoZXZlbnQtPmVycm9yX2Nv
ZGUpIHsKLSAgICAgICAgY2FzZSBCYWRNYXRjaDoKLSAgICAgICAgICAgIExPR19FUlJPUigiQmFk
TWF0Y2guIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCYWRXaW5kb3c6Ci0g
ICAgICAgICAgICBMT0dfRVJST1IoIkJhZFdpbmRvdy4iKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEJhZEFsbG9jOgotICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRBbGxvYy4i
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBh
dHRyaWJ1dGVzW10gPSB7Ci0gICAgR0xYX0xFVkVMLCAwLAotICAgIEdMWF9EUkFXQUJMRV9UWVBF
LCBHTFhfV0lORE9XX0JJVCwKLSAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklULAot
ICAgIEdMWF9SRURfU0laRSwgICAgICAxLAotICAgIEdMWF9HUkVFTl9TSVpFLCAgICAxLAotICAg
IEdMWF9CTFVFX1NJWkUsICAgICAxLAotICAgIEdMWF9BTFBIQV9TSVpFLCAgICAxLAotICAgIEdM
WF9ERVBUSF9TSVpFLCAgICAxLAotICAgIEdMWF9YX1ZJU1VBTF9UWVBFLCBHTFhfVFJVRV9DT0xP
UiwKLSAgICBHTFhfRE9VQkxFQlVGRkVSLCAgVHJ1ZSwKLSAgICBOb25lCi19OwotCi1jbGFzcyBT
Y29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgewotCi1wdWJsaWM6Ci0gICAgU2NvcGVk
WFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKERpc3BsYXkqIGRpc3BsYXkpCi0gICAgICAgIDog
bV9kaXNwbGF5KGRpc3BsYXkpCi0gICAgewotICAgICAgICAvLyBYU3luYyBtdXN0IGJlIGNhbGxl
ZCB0byBlbnN1cmUgdGhhdCBjdXJyZW50IGVycm9ycyBhcmUgaGFuZGxlZCBieSB0aGUgb3JpZ2lu
YWwgaGFuZGxlci4KLSAgICAgICAgWFN5bmMobV9kaXNwbGF5LCBmYWxzZSk7Ci0gICAgICAgIG1f
cHJldmlvdXNFcnJvckhhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKGhhbmRsZVhQaXhtYXBDcmVh
dGlvbkVycm9yKTsKLSAgICB9Ci0KLSAgICB+U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5k
bGVyKCkKLSAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGhhbmRsZXIuCi0g
ICAgICAgIFhTZXRFcnJvckhhbmRsZXIobV9wcmV2aW91c0Vycm9ySGFuZGxlcik7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc1ZhbGlkT3BlcmF0aW9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHZhbGlk
T3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgLy8gWFN5bmMgaXMgbmVlZGVkIHRvIGNhdGNoIHBv
c3NpYmxlIGVycm9ycyBhcyB0aGV5IGFyZSBnZW5lcmF0ZWQgYXN5bmNocm9ub3VzbHkuCi0gICAg
ICAgIFhTeW5jKG1fZGlzcGxheSwgZmFsc2UpOwotICAgICAgICByZXR1cm4gdmFsaWRPcGVyYXRp
b247Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFhFcnJvckhhbmRsZXIgbV9wcmV2aW91c0Vycm9y
SGFuZGxlcjsKLSAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci19OwotCi0vLyBGSVhNRTogVGFrZSBY
MTFXaW5kb3dSZXNvdXJjZXMgYW5kIEdMWENvbmZpZ1NlbGVjdG9yIGludG8gdXNlLgotY2xhc3Mg
T2ZmU2NyZWVuUm9vdFdpbmRvdyB7Ci1wdWJsaWM6Ci0gICAgT2ZmU2NyZWVuUm9vdFdpbmRvdygp
Ci0gICAgewotICAgICAgICArK21fcmVmQ291bnQ7Ci0gICAgfQotCi0gICAgV2luZG93IGdldFhX
aW5kb3coKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3dpbmRvdykgewotICAgICAgICAgICAgRGlz
cGxheSogZHB5ID0gZGlzcGxheSgpOwotICAgICAgICAgICAgbV93aW5kb3cgPSBYQ3JlYXRlU2lt
cGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSksIC0xLCAtMSwgMSwgMSwgMCwg
QmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkpOwotICAgICAgICAgICAgWFNl
dFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAgICAgICAgIGF0dHJpYnV0ZXMub3Zl
cnJpZGVfcmVkaXJlY3QgPSB0cnVlOwotICAgICAgICAgICAgWENoYW5nZVdpbmRvd0F0dHJpYnV0
ZXMoZHB5LCBtX3dpbmRvdywgWDExT3ZlcnJpZGVSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOwotICAg
ICAgICAgICAgLy8gTWFwIHdpbmRvdyB0byB0aGUgc2NyZWVuCi0gICAgICAgICAgICBYTWFwV2lu
ZG93KGRweSwgbV93aW5kb3cpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1fd2luZG93
OwotICAgIH0KLQotICAgIERpc3BsYXkqIGRpc3BsYXkoKQotICAgIHsKLSAgICAgICAgaWYgKCFt
X2Rpc3BsYXkpCi0gICAgICAgICAgICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7Ci0gICAg
ICAgIHJldHVybiBtX2Rpc3BsYXk7Ci0gICAgfQotCi0gICAgfk9mZlNjcmVlblJvb3RXaW5kb3co
KQotICAgIHsKLSAgICAgICAgaWYgKC0tbV9yZWZDb3VudCB8fCAhbV9kaXNwbGF5KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX3dpbmRvdykgewotICAgICAgICAgICAgWFVu
bWFwV2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOwotICAgICAgICAgICAgWERlc3Ryb3lXaW5k
b3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgICAgICAgICBtX3dpbmRvdyA9IDA7Ci0gICAg
ICAgIH0KLQotICAgICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7Ci0gICAgICAgIG1fZGlz
cGxheSA9IDA7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBpbnQgbV9yZWZDb3VudDsK
LSAgICBzdGF0aWMgV2luZG93IG1fd2luZG93OwotICAgIHN0YXRpYyBEaXNwbGF5KiBtX2Rpc3Bs
YXk7Ci19OwotCi1pbnQgT2ZmU2NyZWVuUm9vdFdpbmRvdzo6bV9yZWZDb3VudCA9IDA7Ci1XaW5k
b3cgT2ZmU2NyZWVuUm9vdFdpbmRvdzo6bV93aW5kb3cgPSAwOwotRGlzcGxheSogT2ZmU2NyZWVu
Um9vdFdpbmRvdzo6bV9kaXNwbGF5ID0gMDsKLQogc3RhdGljIGNvbnN0IGludCBnbHhTcGVjW10g
PSB7CiAgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaXMgYSBzZXQga2V5IHZhbHVlIHBhaXJzIHN0
b3JlZCBpbiBhIHNpbXBsZSBhcnJheS4KICAgICBHTFhfTEVWRUwsICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLApAQCAtMTk1LDE1ICs2OCwxMyBAQCBzdGF0aWMgY29uc3QgaW50IGdseEF0dHJp
YnV0ZXNbXSA9IHsKIAogc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgewogICAgIEdyYXBo
aWNzU3VyZmFjZVByaXZhdGUoY29uc3QgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBzaGFyZUNv
bnRleHQgPSAwKQotICAgICAgICA6IG1fZGlzcGxheShtX29mZlNjcmVlbldpbmRvdy5kaXNwbGF5
KCkpCi0gICAgICAgICwgbV94UGl4bWFwKDApCisgICAgICAgIDogbV94UGl4bWFwKDApCiAgICAg
ICAgICwgbV9nbHhQaXhtYXAoMCkKICAgICAgICAgLCBtX3N1cmZhY2UoMCkKICAgICAgICAgLCBt
X2dseFN1cmZhY2UoMCkKICAgICAgICAgLCBtX2dsQ29udGV4dCgwKQogICAgICAgICAsIG1fZGV0
YWNoZWRDb250ZXh0KDApCiAgICAgICAgICwgbV9kZXRhY2hlZFN1cmZhY2UoMCkKLSAgICAgICAg
LCBtX2ZiQ29uZmlnKDApCiAgICAgICAgICwgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQoZmFsc2UpCiAg
ICAgICAgICwgbV9oYXNBbHBoYShmYWxzZSkKICAgICAgICAgLCBtX2lzUmVjZWl2ZXIoZmFsc2Up
CkBAIC0yMjAsNzAgKzkxLDcyIEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICNl
bHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShzaGFyZUNvbnRleHQpOwogI2VuZGlmCi0KLSAgICAg
ICAgaW50IG51bVJldHVybmVkOwotICAgICAgICBHTFhGQkNvbmZpZyogZmJDb25maWdzID0gZ2xY
Q2hvb3NlRkJDb25maWcobV9kaXNwbGF5LCBEZWZhdWx0U2NyZWVuKG1fZGlzcGxheSksIGF0dHJp
YnV0ZXMsICZudW1SZXR1cm5lZCk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgY2hv
b3NlIGEgY29uZmlndXJhdGlvbiB0aGF0IHN1cHBvcnRzIGFuIGFscGhhIG1hc2suCi0gICAgICAg
IG1fZmJDb25maWcgPSBmaW5kRkJDb25maWdXaXRoQWxwaGEoZmJDb25maWdzLCBudW1SZXR1cm5l
ZCk7Ci0KLSAgICAgICAgWEZyZWUoZmJDb25maWdzKTsKKyAgICAgICAgaWYgKCFpbml0aWFsaXpl
KCkpCisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgR0xYIGNvbnRl
eHQgZm9yIE9wZW5HTCByZW5kZXJpbmcKLSAgICAgICAgbV9nbENvbnRleHQgPSBnbFhDcmVhdGVO
ZXdDb250ZXh0KG1fZGlzcGxheSwgbV9mYkNvbmZpZywgR0xYX1JHQkFfVFlQRSwgc2hhcmVDb250
ZXh0T2JqZWN0LCB0cnVlKTsKKyAgICAgICAgbV9nbENvbnRleHQgPSBnbFhDcmVhdGVOZXdDb250
ZXh0KG1fbmF0aXZlUmVzb3VyY2UtPm5hdGl2ZVNoYXJlZERpc3BsYXkoKSwgbV9jb25maWdTZWxl
Y3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgR0xYX1JHQkFfVFlQRSwgc2hhcmVDb250ZXh0
T2JqZWN0LCB0cnVlKTsKICAgICB9CiAKICAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKHVpbnQz
Ml90IHdpbklkKQotICAgICAgICA6IG1fZGlzcGxheShtX29mZlNjcmVlbldpbmRvdy5kaXNwbGF5
KCkpCi0gICAgICAgICwgbV94UGl4bWFwKDApCisgICAgICAgIDogbV94UGl4bWFwKDApCiAgICAg
ICAgICwgbV9nbHhQaXhtYXAoMCkKICAgICAgICAgLCBtX3N1cmZhY2Uod2luSWQpCiAgICAgICAg
ICwgbV9nbHhTdXJmYWNlKDApCiAgICAgICAgICwgbV9nbENvbnRleHQoMCkKICAgICAgICAgLCBt
X2RldGFjaGVkQ29udGV4dCgwKQogICAgICAgICAsIG1fZGV0YWNoZWRTdXJmYWNlKDApCi0gICAg
ICAgICwgbV9mYkNvbmZpZygwKQogICAgICAgICAsIG1fdGV4dHVyZUlzWUludmVydGVkKGZhbHNl
KQogICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCiAgICAgICAgICwgbV9pc1JlY2VpdmVyKHRy
dWUpCi0gICAgeyB9CisgICAgeworICAgICAgICBpbml0aWFsaXplKCk7CisgICAgfQogCiAgICAg
fkdyYXBoaWNzU3VyZmFjZVByaXZhdGUoKQogICAgIHsKICAgICAgICAgY2xlYXIoKTsKICAgICB9
CiAKKyAgICBib29sIGluaXRpYWxpemUoKQorICAgIHsKKyAgICAgICAgbV9uYXRpdmVSZXNvdXJj
ZSA9IGFkb3B0UHRyKG5ldyBYMTFPZmZTY3JlZW5XaW5kb3coKSk7CisgICAgICAgIG1fZGlzcGxh
eSA9IG1fbmF0aXZlUmVzb3VyY2UtPm5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKKworICAgICAgICBp
ZiAoIW1fZGlzcGxheSkgeworICAgICAgICAgICAgbV9uYXRpdmVSZXNvdXJjZSA9IG51bGxwdHI7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtX2NvbmZp
Z1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZpZ1NlbGVjdG9yKG1fZGlzcGxheSwgbV9u
YXRpdmVSZXNvdXJjZS0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpKTsKKworICAgICAg
ICBpZiAoIW1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCkpIHsKKyAgICAg
ICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICB1aW50MzJfdCBjcmVhdGVTdXJmYWNl
KGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgewotICAgICAgICBYVmlzdWFsSW5mbyogdmlzdWFs
SW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX2Rpc3BsYXksIG1fZmJDb25maWcpOwot
ICAgICAgICBpZiAoIXZpc3VhbEluZm8pCisgICAgICAgIGlmICghbV9uYXRpdmVSZXNvdXJjZSB8
fCAhbV9jb25maWdTZWxlY3RvcikKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIENv
bG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAobV9kaXNwbGF5LCBtX29mZlNjcmVlbldpbmRv
dy5nZXRYV2luZG93KCksIHZpc3VhbEluZm8tPnZpc3VhbCwgQWxsb2NOb25lKTsKLQotICAgICAg
ICBYU2V0V2luZG93QXR0cmlidXRlcyBhOwotICAgICAgICBhLmJhY2tncm91bmRfcGl4ZWwgPSBX
aGl0ZVBpeGVsKG1fZGlzcGxheSwgMCk7Ci0gICAgICAgIGEuYm9yZGVyX3BpeGVsID0gQmxhY2tQ
aXhlbChtX2Rpc3BsYXksIDApOwotICAgICAgICBhLmNvbG9ybWFwID0gY21hcDsKLSAgICAgICAg
bV9zdXJmYWNlID0gWENyZWF0ZVdpbmRvdyhtX2Rpc3BsYXksIG1fb2ZmU2NyZWVuV2luZG93Lmdl
dFhXaW5kb3coKSwgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAg
ICAgMCwgdmlzdWFsSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCB2aXN1YWxJbmZvLT52aXN1YWws
Ci0gICAgICAgICAgICBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAm
YSk7Ci0gICAgICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKG1fZGlzcGxheSwgbV9zdXJm
YWNlLCAwKTsKLSAgICAgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KG1fZGlzcGxheSwgbV9z
dXJmYWNlLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0gICAgICAgIG1fZ2x4U3VyZmFjZSA9
IGdsWENyZWF0ZVdpbmRvdyhtX2Rpc3BsYXksIG1fZmJDb25maWcsIG1fc3VyZmFjZSwgMCk7Ci0g
ICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgWFJl
bmRlciBFeHRlbnNpb24gaXMgYXZhaWxhYmxlLgotICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJy
b3JCYXNlcDsKLSAgICAgICAgaWYgKCFYUmVuZGVyUXVlcnlFeHRlbnNpb24obV9kaXNwbGF5LCAm
ZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApKQorICAgICAgICBtX25hdGl2ZVJlc291cmNlLT5jcmVh
dGVPZmZzY3JlZW5XaW5kb3coJm1fc3VyZmFjZSwgbV9jb25maWdTZWxlY3Rvci0+dmlzdWFsSW5m
bygpKTsKKworICAgICAgICBpZiAoIW1fc3VyZmFjZSkKICAgICAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgICAgIFhNYXBXaW5kb3cobV9kaXNwbGF5LCBtX3N1cmZhY2UpOworICAgICAgICBtX2ds
eFN1cmZhY2UgPSBnbFhDcmVhdGVXaW5kb3cobV9kaXNwbGF5LCBtX2NvbmZpZ1NlbGVjdG9yLT5z
dXJmYWNlQ29udGV4dENvbmZpZygpLCBtX3N1cmZhY2UsIDApOwogICAgICAgICByZXR1cm4gbV9z
dXJmYWNlOwogICAgIH0KIAogICAgIHZvaWQgY3JlYXRlUGl4bWFwKHVpbnQzMl90IHdpbklkKQog
ICAgIHsKKyAgICAgICAgaWYgKCFtX2NvbmZpZ1NlbGVjdG9yKQorICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIFhXaW5kb3dBdHRyaWJ1dGVzIGF0dHI7CiAgICAgICAgIGlmICghWEdldFdp
bmRvd0F0dHJpYnV0ZXMobV9kaXNwbGF5LCB3aW5JZCwgJmF0dHIpKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMjk4LDEyICsxNzEsNyBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7
CiAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZv
cm1hdChtX2Rpc3BsYXksIGF0dHIudmlzdWFsKTsKICAgICAgICAgbV9oYXNBbHBoYSA9IChmb3Jt
YXQtPnR5cGUgPT0gUGljdFR5cGVEaXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKTsK
IAotICAgICAgICBpbnQgbnVtYmVyT2ZDb25maWdzOwotICAgICAgICBHTFhGQkNvbmZpZyogY29u
ZmlncyA9IGdsWENob29zZUZCQ29uZmlnKG1fZGlzcGxheSwgWERlZmF1bHRTY3JlZW4obV9kaXNw
bGF5KSwgZ2x4U3BlYywgJm51bWJlck9mQ29uZmlncyk7Ci0KLSAgICAgICAgLy8gSWYgb3JpZ2lu
IHdpbmRvdyBoYXMgYWxwaGEgdGhlbiBmaW5kIGNvbmZpZyB3aXRoIGFscGhhLgotICAgICAgICBH
TFhGQkNvbmZpZyYgY29uZmlnID0gbV9oYXNBbHBoYSA/IGZpbmRGQkNvbmZpZ1dpdGhBbHBoYShj
b25maWdzLCBudW1iZXJPZkNvbmZpZ3MpIDogY29uZmlnc1swXTsKLQorICAgICAgICBHTFhGQkNv
bmZpZyBjb25maWcgPSBtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwog
ICAgICAgICBtX3hQaXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRvd1BpeG1hcChtX2Rpc3BsYXks
IHdpbklkKTsKICAgICAgICAgbV9nbHhQaXhtYXAgPSBnbFhDcmVhdGVQaXhtYXAobV9kaXNwbGF5
LCBjb25maWcsIG1feFBpeG1hcCwgZ2x4QXR0cmlidXRlcyk7CiAKQEAgLTMxMyw5ICsxODEsOSBA
QCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgICAgICB1aW50IGludmVy
dGVkID0gMDsKICAgICAgICAgICAgIGdsWFF1ZXJ5RHJhd2FibGUobV9kaXNwbGF5LCBtX2dseFBp
eG1hcCwgR0xYX1lfSU5WRVJURURfRVhULCAmaW52ZXJ0ZWQpOwogICAgICAgICAgICAgbV90ZXh0
dXJlSXNZSW52ZXJ0ZWQgPSAhIWludmVydGVkOworICAgICAgICAgICAgbV9mbGFncyA9IG1fdGV4
dHVyZUlzWUludmVydGVkID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZSA6IDA7
CisgICAgICAgICAgICBtX2ZsYWdzIHw9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQ7CiAg
ICAgICAgIH0KLQotICAgICAgICBYRnJlZShjb25maWdzKTsKICAgICB9CiAKICAgICBib29sIHRl
eHR1cmVJc1lJbnZlcnRlZCgpCkBAIC00MDgsMjUgKzI3NiwxMCBAQCBzdHJ1Y3QgR3JhcGhpY3NT
dXJmYWNlUHJpdmF0ZSB7CiAgICAgfQogCiAgICAgYm9vbCBpc1JlY2VpdmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1JlY2VpdmVyOyB9Ci1wcml2YXRlOgotICAgIEdMWEZCQ29uZmlnJiBmaW5kRkJD
b25maWdXaXRoQWxwaGEoR0xYRkJDb25maWcqIGZiQ29uZmlncywgaW50IG51bWJlck9mQ29uZmln
cykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZDb25maWdzOyAr
K2kpIHsKLSAgICAgICAgICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFs
RnJvbUZCQ29uZmlnKG1fZGlzcGxheSwgZmJDb25maWdzW2ldKTsKLSAgICAgICAgICAgIGlmICgh
dmlzdWFsSW5mbykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgWFJl
bmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG1fZGlzcGxh
eSwgdmlzdWFsSW5mby0+dmlzdWFsKTsKLSAgICAgICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwot
Ci0gICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDAp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZiQ29uZmlnc1tpXTsKLSAgICAgICAgfQogCi0gICAg
ICAgIC8vIFJldHVybiAxc3QgY29uZmlnIGFzIGEgZmFsbGJhY2sgd2l0aCBubyBhbHBoYSBzdXBw
b3J0LgotICAgICAgICByZXR1cm4gZmJDb25maWdzWzBdOwotICAgIH0KKyAgICBUZXh0dXJlTWFw
cGVyR0w6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogCitwcml2YXRl
OgogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ2x4UGl4bWFwKSB7CkBA
IC00MzksMzEgKzI5MiwzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV94UGl4bWFwID0gMDsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX3N1cmZhY2UpIHsKLSAgICAgICAgICAgIFhEZXN0
cm95V2luZG93KG1fZGlzcGxheSwgbV9zdXJmYWNlKTsKLSAgICAgICAgICAgIG1fc3VyZmFjZSA9
IDA7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAobV9nbENvbnRleHQpIHsKICAgICAgICAgICAg
IGdsWERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9nbENvbnRleHQpOwogICAgICAgICAgICAg
bV9nbENvbnRleHQgPSAwOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fY29uZmlnU2VsZWN0
b3IpCisgICAgICAgICAgICBtX2NvbmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKKworICAgICAgICBp
ZiAobV9uYXRpdmVSZXNvdXJjZSkKKyAgICAgICAgICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxs
cHRyOwogICAgIH0KIAotICAgIE9mZlNjcmVlblJvb3RXaW5kb3cgbV9vZmZTY3JlZW5XaW5kb3c7
CiAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgRGlzcGxheSogbV9kaXNwbGF5OwogICAgIFBpeG1h
cCBtX3hQaXhtYXA7CiAgICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOwotICAgIFdpbmRvdyBtX3N1
cmZhY2U7CisgICAgdWludDMyX3QgbV9zdXJmYWNlOwogICAgIFdpbmRvdyBtX2dseFN1cmZhY2U7
CiAgICAgR0xYQ29udGV4dCBtX2dsQ29udGV4dDsKICAgICBHTFhDb250ZXh0IG1fZGV0YWNoZWRD
b250ZXh0OwogICAgIEdMWERyYXdhYmxlIG1fZGV0YWNoZWRTdXJmYWNlOwotICAgIEdMWEZCQ29u
ZmlnIG1fZmJDb25maWc7CisgICAgT3duUHRyPFgxMU9mZlNjcmVlbldpbmRvdz4gbV9uYXRpdmVS
ZXNvdXJjZTsKKyAgICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7
CiAgICAgYm9vbCBtX3RleHR1cmVJc1lJbnZlcnRlZDsKICAgICBib29sIG1faGFzQWxwaGE7CiAg
ICAgYm9vbCBtX2lzUmVjZWl2ZXI7CisgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX2ZsYWdz
OwogfTsKIAogc3RhdGljIGJvb2wgcmVzb2x2ZUdMTWV0aG9kcygpCkBAIC01MjMsMTkgKzM3OCwx
OCBAQCB2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1QYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLAogICAgIEludFNpemUgc2l6ZSA9IG1fcHJpdmF0
ZS0+c2l6ZSgpOwogICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOworCiAg
ICAgdWludDMyX3QgdGV4dHVyZSA9IHBsYXRmb3JtR2V0VGV4dHVyZUlEKCk7CiAgICAgaWYgKCF0
ZXh0dXJlKQogICAgICAgICByZXR1cm47CiAKLSAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZs
YWdzID0gbV9wcml2YXRlLT50ZXh0dXJlSXNZSW52ZXJ0ZWQoKSA/IFRleHR1cmVNYXBwZXJHTDo6
U2hvdWxkRmxpcFRleHR1cmUgOiAwOwotICAgIGZsYWdzIHw9IFRleHR1cmVNYXBwZXJHTDo6U2hv
dWxkQmxlbmQ7Ci0KICAgICBGbG9hdFJlY3QgcmVjdE9uQ29udGVudHMoRmxvYXRQb2ludDo6emVy
bygpLCBzaXplKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9
IHRyYW5zZm9ybTsKICAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6cmVjdFRvUmVjdChyZWN0T25Db250ZW50cywgdGFyZ2V0UmVjdCkpOwotICAgIHN0
YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpLT5kcmF3VGV4dHVyZSh0
ZXh0dXJlLCBmbGFncywgc2l6ZSwgcmVjdE9uQ29udGVudHMsIGFkanVzdGVkVHJhbnNmb3JtLCBv
cGFjaXR5LCBtYXNrKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJl
TWFwcGVyKS0+ZHJhd1RleHR1cmUodGV4dHVyZSwgbV9wcml2YXRlLT5mbGFncygpLCBzaXplLCBy
ZWN0T25Db250ZW50cywgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOwogfQogCisK
IHVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKaW5kZXgg
Nzg4YzQ2Ny4uOGZiNzZmOSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcApA
QCAtMzQsMTcgKzM0LDEyIEBAIFNoYXJlZFgxMVJlc291cmNlcyogU2hhcmVkWDExUmVzb3VyY2Vz
OjptX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKIAogWDExT2ZmU2NyZWVuV2luZG93OjpYMTFP
ZmZTY3JlZW5XaW5kb3coKQogICAgIDogbV9zaGFyZWRSZXNvdXJjZXMoMCkKLSAgICAsIG1fY29u
ZmlnVmlzdWFsSW5mbygwKQogewogICAgIG1fc2hhcmVkUmVzb3VyY2VzID0gU2hhcmVkWDExUmVz
b3VyY2VzOjpjcmVhdGUoKTsKIH0KIAogWDExT2ZmU2NyZWVuV2luZG93Ojp+WDExT2ZmU2NyZWVu
V2luZG93KCkKIHsKLSAgICBpZiAobV9jb25maWdWaXN1YWxJbmZvKSB7Ci0gICAgICAgIFhGcmVl
KG1fY29uZmlnVmlzdWFsSW5mbyk7Ci0gICAgICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9IDA7Ci0g
ICAgfQogfQogCiB2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6cmVTaXplV2luZG93KGNvbnN0IElu
dFJlY3QmIG5ld1JlY3QsIGNvbnN0IHVpbnQzMl90IHdpbmRvd0lkKQpAQCAtNTMsNyArNDgsOCBA
QCB2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6cmVTaXplV2luZG93KGNvbnN0IEludFJlY3QmIG5l
d1JlY3QsIGNvbnN0IHVpbnQzMl90IHdpbgogICAgIFhGbHVzaChtX3NoYXJlZFJlc291cmNlcy0+
eDExRGlzcGxheSgpKTsKIH0KIAotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0ZU9mZnNj
cmVlbldpbmRvdyh1aW50MzJfdCogaGFuZGxlSWQpCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Cit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90
KiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbEluZm8mIHZpc0luZm8pCiB7CiAgICAgaWYgKCFtX3No
YXJlZFJlc291cmNlcykKICAgICAgICAgcmV0dXJuOwpAQCAtNjIsNyArNTgsNyBAQCB2b2lkIFgx
MU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJ
ZCkKICAgICBpZiAoIWRpc3BsYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9jb25m
aWdWaXN1YWxJbmZvKSB7CisgICAgaWYgKCF2aXNJbmZvLnZpc3VhbCkgewogICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1YWwuIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC03MSwxMyArNjcsMTMgQEAgdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0
ZU9mZnNjcmVlbldpbmRvdyh1aW50MzJfdCogaGFuZGxlSWQpCiAgICAgaWYgKCF4V2luZG93KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBDb2xvcm1hcCBjbWFwID0gWENyZWF0ZUNvbG9ybWFwKGRp
c3BsYXksIHhXaW5kb3csIG1fY29uZmlnVmlzdWFsSW5mby0+dmlzdWFsLCBBbGxvY05vbmUpOwor
ICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdywgdmlz
SW5mby52aXN1YWwsIEFsbG9jTm9uZSk7CiAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmli
dXRlOwogICAgIGF0dHJpYnV0ZS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5
LCAwKTsKICAgICBhdHRyaWJ1dGUuYm9yZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAw
KTsKICAgICBhdHRyaWJ1dGUuY29sb3JtYXAgPSBjbWFwOwogICAgIHVpbnQzMl90IHRlbXBIYW5k
bGVJZDsKLSAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5kb3cs
IDAsIDAsIDEsIDEsIDAsIG1fY29uZmlnVmlzdWFsSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCBt
X2NvbmZpZ1Zpc3VhbEluZm8tPnZpc3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwg
Q1dDb2xvcm1hcCwgJmF0dHJpYnV0ZSk7CisgICAgdGVtcEhhbmRsZUlkID0gWENyZWF0ZVdpbmRv
dyhkaXNwbGF5LCB4V2luZG93LCAwLCAwLCAxLCAxLCAwLCB2aXNJbmZvLmRlcHRoLCBJbnB1dE91
dHB1dCwgdmlzSW5mby52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29s
b3JtYXAsICZhdHRyaWJ1dGUpOwogCiAgICAgaWYgKCF0ZW1wSGFuZGxlSWQpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiB3aW5kb3cuIik7CkBAIC04NSwz
MyArODEsMTQgQEAgdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0ZU9mZnNjcmVlbldpbmRv
dyh1aW50MzJfdCogaGFuZGxlSWQpCiAgICAgfQogCiAgICAgWFNldFdpbmRvd0JhY2tncm91bmRQ
aXhtYXAoZGlzcGxheSwgdGVtcEhhbmRsZUlkLCAwKTsKKwogICAgIFhDb21wb3NpdGVSZWRpcmVj
dFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsK
KyAgICBYTWFwV2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJZCk7CiAgICAgKmhhbmRsZUlkID0g
dGVtcEhhbmRsZUlkOwotCi0gICAgaWYgKG1fc2hhcmVkUmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRl
bnNpb25TdXBwb3J0ZWQoKSkKLSAgICAgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxl
SWQpOwotCi19Ci0KLXZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95V2luZG93KGNvbnN0
IHVpbnQzMl90IHdpbmRvd0lkKQotewotICAgIGlmICghd2luZG93SWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxh
eSgpOwotICAgIGlmICghZGlzcGxheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWERlc3Ryb3lX
aW5kb3coZGlzcGxheSwgd2luZG93SWQpOwotfQotCi1EaXNwbGF5KiBYMTFPZmZTY3JlZW5XaW5k
b3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkoKSBjb25zdAotewotICAgIHJldHVybiBtX3NoYXJlZFJl
c291cmNlcy0+eDExRGlzcGxheSgpOwogfQogCiAjaWYgVVNFKEVHTCkKLWJvb2wgWDExT2ZmU2Ny
ZWVuV2luZG93OjpzZXRWaXN1YWxJZChjb25zdCBFR0xpbnQgaWQpCit2b2lkIFgxMU9mZlNjcmVl
bldpbmRvdzo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3Qg
RUdMaW50IGlkKQogewogICAgIFZpc3VhbElEIHZpc3VhbElkID0gc3RhdGljX2Nhc3Q8VmlzdWFs
SUQ+KGlkKTsKIApAQCAtMTI1LDUwICsxMDIsNjYgQEAgYm9vbCBYMTFPZmZTY3JlZW5XaW5kb3c6
OnNldFZpc3VhbElkKGNvbnN0IEVHTGludCBpZCkKIAogICAgIGludCBtYXRjaGluZ0NvdW50ID0g
MDsKICAgICBYVmlzdWFsSW5mbyogY2hvc2VuVmlzdWFsSW5mbyA9IFhHZXRWaXN1YWxJbmZvKG1f
c2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIFZpc3VhbElETWFzaywgJnZpc3VhbEluZm9U
ZW1wbGF0ZSwgJm1hdGNoaW5nQ291bnQpOworICAgIFhWaXN1YWxJbmZvKiBmb3VuZFZpc3VhbCA9
IDA7CisgICAgWFZpc3VhbEluZm8gdmlzSW5mbzsKICAgICBpbnQgdmlzdWFsRGVwdGggPSBjaG9z
ZW5WaXN1YWxJbmZvLT5kZXB0aDsKIAogICAgIGlmIChjaG9zZW5WaXN1YWxJbmZvKSB7Ci0jaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgICAgIGlmIChtX3NoYXJlZFJlc291cmNlcy0+aXNY
UmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9y
bWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX3NoYXJlZFJlc291cmNlcy0+
eDExRGlzcGxheSgpLCBjaG9zZW5WaXN1YWxJbmZvLT52aXN1YWwpOwogICAgICAgICAgICAgaWYg
KGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKQotICAgICAgICAgICAgICAg
IG1fY29uZmlnVmlzdWFsSW5mbyA9IGNob3NlblZpc3VhbEluZm87CisgICAgICAgICAgICAgICAg
Zm91bmRWaXN1YWwgPSBjaG9zZW5WaXN1YWxJbmZvOwogICAgICAgICB9Ci0jZW5kaWYKKwogICAg
ICAgICBpZiAoIW1fY29uZmlnVmlzdWFsSW5mbyAmJiB2aXN1YWxEZXB0aCA9PSAzMikKLSAgICAg
ICAgICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9IGNob3NlblZpc3VhbEluZm87CisgICAgICAgICAg
ICBmb3VuZFZpc3VhbCA9IGNob3NlblZpc3VhbEluZm87CiAgICAgfQogCi0gICAgaWYgKG1fY29u
ZmlnVmlzdWFsSW5mbykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBYRnJlZShjaG9zZW5W
aXN1YWxJbmZvKTsKLSAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwgc2l6ZW9mKFhW
aXN1YWxJbmZvKSk7Ci0gICAgdmlzdWFsSW5mb1RlbXBsYXRlLmRlcHRoID0gdmlzdWFsRGVwdGg7
Ci0gICAgWFZpc3VhbEluZm8qIG1hdGNoaW5nVmlzdWFscyA9IFhHZXRWaXN1YWxJbmZvKG1fc2hh
cmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIFZpc3VhbERlcHRoTWFzaywgJnZpc3VhbEluZm9U
ZW1wbGF0ZSwgJm1hdGNoaW5nQ291bnQpOwotCi0gICAgaWYgKG1hdGNoaW5nVmlzdWFscykgewot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaTwgbWF0Y2hpbmdDb3VudDsgaSsrKSB7Ci0gICAgICAg
ICAgICBjaG9zZW5WaXN1YWxJbmZvID0gJm1hdGNoaW5nVmlzdWFsc1swXTsKLSAgICAgICAgICAg
IGlmIChjaG9zZW5WaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgewotICAgICAgICAgICAgICAgIG1f
Y29uZmlnVmlzdWFsSW5mbyA9IGNob3NlblZpc3VhbEluZm87Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgaWYgKCFmb3VuZFZpc3VhbCkgeworICAgICAgICBtZW1zZXQoJnZpc3VhbEluZm9U
ZW1wbGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZvKSk7CisgICAgICAgIHZpc3VhbEluZm9UZW1w
bGF0ZS5kZXB0aCA9IHZpc3VhbERlcHRoOworICAgICAgICBYVmlzdWFsSW5mbyogbWF0Y2hpbmdW
aXN1YWxzID0gWEdldFZpc3VhbEluZm8obV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwg
VmlzdWFsRGVwdGhNYXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7CisK
KyAgICAgICAgaWYgKG1hdGNoaW5nVmlzdWFscykgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGk8IG1hdGNoaW5nQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGNob3NlblZpc3Vh
bEluZm8gPSAmbWF0Y2hpbmdWaXN1YWxzWzBdOworICAgICAgICAgICAgICAgIGlmIChjaG9zZW5W
aXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgeworICAgICAgICAgICAgICAgICAgICBmb3VuZFZpc3Vh
bCA9IGNob3NlblZpc3VhbEluZm87CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGZvdW5kVmlzdWFs
KQorICAgICAgICAgICAgICAgIHZpc0luZm8gPSAqZm91bmRWaXN1YWw7CisKICAgICAgICAgICAg
IFhGcmVlKG1hdGNoaW5nVmlzdWFscyk7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICB2aXNJbmZvID0gKmZvdW5kVmlzdWFsOworICAgICAgICBYRnJlZShjaG9zZW5WaXN1YWxJbmZv
KTsKICAgICB9CiAKLSAgICBpZiAoIW1fY29uZmlnVmlzdWFsSW5mbykKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgWFZpc3VhbCBJbmZvLiIpOwotCi0gICAgcmV0dXJuIG1f
Y29uZmlnVmlzdWFsSW5mbyA/IHRydWUgOiBmYWxzZTsKKyAgICBjcmVhdGVPZmZTY3JlZW5XaW5k
b3coaGFuZGxlSWQsIHZpc0luZm8pOwogfQogI2VuZGlmCiAKLXZvaWQgWDExT2ZmU2NyZWVuV2lu
ZG93OjpzZXRWaXN1YWxJbmZvKFhWaXN1YWxJbmZvKiB2aXNJbmZvKQorI2VuZGlmCisKK3ZvaWQg
WDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95V2luZG93KGNvbnN0IHVpbnQzMl90IHdpbmRvd0lk
KQoreworICAgIGlmICghd2luZG93SWQpCisgICAgICAgIHJldHVybjsKKworICAgIERpc3BsYXkq
IGRpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpOworICAgIGlmICghZGlz
cGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgd2lu
ZG93SWQpOworfQorCitEaXNwbGF5KiBYMTFPZmZTY3JlZW5XaW5kb3c6Om5hdGl2ZVNoYXJlZERp
c3BsYXkoKSBjb25zdAogewotICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9IHZpc0luZm87CisgICAg
cmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7CiB9CiAKIGJvb2wgWDExT2Zm
U2NyZWVuV2luZG93Ojppc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdApkaWZmIC0t
Z2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5k
b3dSZXNvdXJjZXMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvWDExV2luZG93UmVzb3VyY2VzLmgKaW5kZXggYTM5ODY1ZC4uODZmNzcwZiAxMDA2NDQKLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dS
ZXNvdXJjZXMuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCkBAIC00MCw4ICs0MCw2NSBAQAogI2luY2x1ZGUgPFgx
MS9leHRlbnNpb25zL1hyZW5kZXIuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8WDExL1hsaWIuaD4K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBVc2VkIGZvciBoYW5kbGluZyBYRXJyb3IuCitz
dGF0aWMgYm9vbCB2YWxpZE9wZXJhdGlvbiA9IHRydWU7CitzdGF0aWMgaW50IGhhbmRsZVhQaXht
YXBDcmVhdGlvbkVycm9yKERpc3BsYXkqLCBYRXJyb3JFdmVudCogZXZlbnQpCit7CisgICAgaWYg
KGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZE1hdGNoIHx8IGV2ZW50LT5lcnJvcl9jb2RlID09IEJh
ZFdpbmRvdyB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRBbGxvYykgeworICAgICAgICB2YWxp
ZE9wZXJhdGlvbiA9IGZhbHNlOworCisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmVycm9yX2NvZGUp
IHsKKyAgICAgICAgY2FzZSBCYWRNYXRjaDoKKyAgICAgICAgICAgIExPR19FUlJPUigiQmFkTWF0
Y2guIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCYWRXaW5kb3c6CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkJhZFdpbmRvdy4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEJhZEFsbG9jOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRBbGxvYy4iKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworY2xhc3MgU2NvcGVkWFBp
eG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyIHsKKworcHVibGljOgorICAgIFNjb3BlZFhQaXhtYXBD
cmVhdGlvbkVycm9ySGFuZGxlcihEaXNwbGF5KiBkaXNwbGF5KQorICAgICAgICA6IG1fZGlzcGxh
eShkaXNwbGF5KQorICAgIHsKKyAgICAgICAgLy8gWFN5bmMgbXVzdCBiZSBjYWxsZWQgdG8gZW5z
dXJlIHRoYXQgY3VycmVudCBlcnJvcnMgYXJlIGhhbmRsZWQgYnkgdGhlIG9yaWdpbmFsIGhhbmRs
ZXIuCisgICAgICAgIFhTeW5jKG1fZGlzcGxheSwgZmFsc2UpOworICAgICAgICBtX3ByZXZpb3Vz
RXJyb3JIYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcihoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJv
cik7CisgICAgfQorCisgICAgflNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpCisg
ICAgeworICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBoYW5kbGVyLgorICAgICAgICBY
U2V0RXJyb3JIYW5kbGVyKG1fcHJldmlvdXNFcnJvckhhbmRsZXIpOworICAgIH0KKworICAgIGJv
b2wgaXNWYWxpZE9wZXJhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICB2YWxpZE9wZXJhdGlv
biA9IHRydWU7CisgICAgICAgIC8vIFhTeW5jIGlzIG5lZWRlZCB0byBjYXRjaCBwb3NzaWJsZSBl
cnJvcnMgYXMgdGhleSBhcmUgZ2VuZXJhdGVkIGFzeW5jaHJvbm91c2x5LgorICAgICAgICBYU3lu
YyhtX2Rpc3BsYXksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHZhbGlkT3BlcmF0aW9uOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBYRXJyb3JIYW5kbGVyIG1fcHJldmlvdXNFcnJvckhhbmRsZXI7
CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworfTsKKwogY2xhc3MgU2hhcmVkWDExUmVzb3VyY2Vz
IDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNoYXJlZFgxMVJlc291cmNlcyk7CiAKQEAgLTE0MywxOSArMjAwLDE5IEBAIGNsYXNzIFgxMU9m
ZlNjcmVlbldpbmRvdyB7CiBwdWJsaWM6CiAgICAgWDExT2ZmU2NyZWVuV2luZG93KCk7CiAgICAg
dmlydHVhbCB+WDExT2ZmU2NyZWVuV2luZG93KCk7Ci0gICAgdm9pZCBjcmVhdGVPZmZzY3JlZW5X
aW5kb3codWludDMyX3QqKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2b2lkIGNy
ZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCosIGNvbnN0IFhWaXN1YWxJbmZvJik7CisjaWYg
VVNFKEVHTCkKKyAgICB2b2lkIGNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCosIGNvbnN0
IEVHTGludCk7CisjZW5kaWYKKyNlbmRpZgogICAgIHZvaWQgZGVzdHJveVdpbmRvdyhjb25zdCB1
aW50MzJfdCk7CiAgICAgdm9pZCByZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYsIGNvbnN0IHVp
bnQzMl90KTsKICAgICBEaXNwbGF5KiBuYXRpdmVTaGFyZWREaXNwbGF5KCkgY29uc3Q7Ci0jaWYg
VVNFKEVHTCkKLSAgICBib29sIHNldFZpc3VhbElkKGNvbnN0IEVHTGludCk7Ci0jZW5kaWYKLSAg
ICB2b2lkIHNldFZpc3VhbEluZm8oWFZpc3VhbEluZm8qKTsKICAgICBib29sIGlzWFJlbmRlckV4
dGVuc2lvblN1cHBvcnRlZCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWRY
MTFSZXNvdXJjZXM+IG1fc2hhcmVkUmVzb3VyY2VzOwotICAgIFhWaXN1YWxJbmZvKiBtX2NvbmZp
Z1Zpc3VhbEluZm87CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183196</attachid>
            <date>2013-01-17 08:42:45 -0800</date>
            <delta_ts>2013-01-17 17:40:20 -0800</delta_ts>
            <desc>patch</desc>
            <filename>glxchangesforreview.patch</filename>
            <type>text/plain</type>
            <size>29815</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDJjZDJjYjMuLmM1ZDhhZmQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEz
LTAxLTE3ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtRdF1bV2ViR0xdIFNoYXJlIHRoZSBjb21tb24gY29kZSBiZXR3ZWVu
IEdyYXBoaWNzU3VyZmFjZUdMWCBhbmQgWDExV2luZG93UmVzb3VyY2VzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBX
ZWJHTCB0ZXN0cy4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6R0xYQ29uZmlnU2VsZWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnZpc3VhbEluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OmNyZWF0ZUNvbmZpZyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVByaXZhdGU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChHcmFwaGljc1N1cmZh
Y2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmNy
ZWF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6
Y3JlYXRlUGl4bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6
OmZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1QYWludFRvVGV4
dHVyZU1hcHBlcik6CisgICAgICAgIFJlbW92ZWQgYWxsIHRoZSBjb21tb24gY29kZSBhbmQgbWFk
ZSBjaGFuZ2VzIHRvIHVzZSBYMTFPZmZTY3JlZW5XaW5kb3cuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlgxMU9mZlNjcmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldpbmRvdzo6flgxMU9mZlNjcmVlbldpbmRvdyk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldpbmRvdzo6
Y3JlYXRlT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldp
bmRvdzo6ZGVzdHJveVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpYMTFPZmZTY3JlZW5XaW5k
b3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkpOgorICAgICAgICBNb2RpZmllZCBjcmVhdGVvZmZTY3Jl
ZW5XaW5kb3cgdG8gdGFrZSB0aGUgdmlzdWFsaW5mbyBhcyBhIGZ1bmN0aW9uIHBhcmFtZXRlci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlWFBp
eG1hcENyZWF0aW9uRXJyb3IpOgorICAgICAgICAoU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFu
ZGxlcjo6U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6flNjb3BlZFhQaXhtYXBDcmVh
dGlvbkVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRYUGl4bWFwQ3JlYXRp
b25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24pOgorICAgICAgICBNb3ZlZCBTY29wZWRY
UGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgZnJvbSBHcmFwaGljc1N1cmZhY2VHTFggdG8gWDEx
V2luZG93UmVzb3VyY2VzLgorCiAyMDEzLTAxLTE2ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtA
Y2hyb21pdW0ub3JnPgoKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZjZkNjA4Mi4uODEyMjVmYSAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAg
LTQxNjksNyArNDE2OSwxMiBAQCB1c2U/KEdSQVBISUNTX1NVUkZBQ0UpIHsKICAgICAgICAgU09V
UkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy93aW4vR3JhcGhpY3NTdXJmYWNlV2lu
LmNwcAogICAgIH0KICAgICBoYXZlPyhYQ09NUE9TSVRFKSB7Ci0gICAgICAgIFNPVVJDRVMgKz0g
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKKyAg
ICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmggXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgKKyAgICAgICAgU09VUkNFUyArPSBc
CisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVz
b3VyY2VzLmNwcCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R3JhcGhpY3NTdXJmYWNlR0xYLmNwcAogICAgIH0KIH0KIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKaW5k
ZXggOTkyYjNhNi4uZWM0YTM0ZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCkBAIC01NywxMiArNTcs
NyBAQCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9uYXRpdmVSZXNvdXJjZS0+
c2V0VmlzdWFsSWQodmlzdWFsSWQpKSB7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fbmF0aXZlUmVzb3VyY2UtPmNyZWF0ZU9mZnNjcmVlbldpbmRv
dygmbV9idWZmZXJIYW5kbGUpOworICAgIG1fbmF0aXZlUmVzb3VyY2UtPmNyZWF0ZU9mZnNjcmVl
bldpbmRvdygmbV9idWZmZXJIYW5kbGUsIHZpc3VhbElkKTsKIAogICAgIGlmICghbV9idWZmZXJI
YW5kbGUpIHsKICAgICAgICAgZGVzdHJveSgpOwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5o
CmluZGV4IGExYjE0YmUuLjA2YWFjMGYgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgK
QEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogICAgIEdMWENvbmZpZ1NlbGVjdG9yKERpc3BsYXkq
IHhEaXNwbGF5LCBib29sIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikKICAgICAgICAgOiBtX3Bi
dWZmZXJGQkNvbmZpZygwKQogICAgICAgICAsIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZygwKQot
ICAgICAgICAsIG1fdmlzdWFsSW5mbygwKQogICAgICAgICAsIG1fc2hhcmVkRGlzcGxheSh4RGlz
cGxheSkKICAgICAgICAgLCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbihzdXBwb3J0c1hSZW5k
ZXJFeHRlbnNpb24pCiAgICAgewpAQCAtNDksNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KIAotICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkgY29uc3QKKyAgICBjb25zdCBYVmlz
dWFsSW5mbyYgdmlzdWFsSW5mbygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV92aXN1
YWxJbmZvOwogICAgIH0KQEAgLTExMSw5ICsxMTAsOCBAQCBwcml2YXRlOgogICAgIEdMWEZCQ29u
ZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQogICAgIHsKICAgICAgICAg
aW50IG51bUF2YWlsYWJsZUNvbmZpZ3M7Ci0gICAgICAgIG1fdmlzdWFsSW5mbyA9IDA7CiAgICAg
ICAgIEdMWEZCQ29uZmlnKiB0ZW1wID0gZ2xYQ2hvb3NlRkJDb25maWcobV9zaGFyZWREaXNwbGF5
LCBEZWZhdWx0U2NyZWVuKG1fc2hhcmVkRGlzcGxheSksIGF0dHJpYnV0ZXMsICZudW1BdmFpbGFi
bGVDb25maWdzKTsKLQorICAgICAgICBYVmlzdWFsSW5mbyogdmlzSW5mbyA9IDA7CiAgICAgICAg
IGlmICghbnVtQXZhaWxhYmxlQ29uZmlncykKICAgICAgICAgICAgIHJldHVybiAwOwogCkBAIC0x
MjEsMjAgKzExOSwyMyBAQCBwcml2YXRlOgogICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdmFpbGFibGVDb25maWdzOyArK2kpIHsK
LSAgICAgICAgICAgIG1fdmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX3No
YXJlZERpc3BsYXksIHRlbXBbaV0pOwotICAgICAgICAgICAgaWYgKCFtX3Zpc3VhbEluZm8pCisg
ICAgICAgICAgICBpZiAodmlzSW5mbykKKyAgICAgICAgICAgICAgICBYRnJlZSh2aXNJbmZvKTsK
KworICAgICAgICAgICAgdmlzSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX3NoYXJl
ZERpc3BsYXksIHRlbXBbaV0pOworICAgICAgICAgICAgaWYgKCF2aXNJbmZvKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgICAgICAgICAg
aWYgKG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKSB7Ci0gICAgICAgICAgICAgICAgWFJlbmRl
clBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG1fc2hhcmVkRGlz
cGxheSwgbV92aXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0
Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX3NoYXJlZERpc3BsYXks
IHZpc0luZm8tPnZpc3VhbCk7CiAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQt
PmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29u
ZmlnID0gdGVtcFtpXTsKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG1fdmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAodmlzSW5mby0+ZGVwdGggPT0gMzIpIHsKICNlbHNlCi0gICAgICAgICAgICBpZiAobV92aXN1
YWxJbmZvLT5kZXB0aCA9PSAzMikgeworICAgICAgICAgICAgaWYgKHZpc0luZm8tPmRlcHRoID09
IDMyKSB7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07
CiAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwpAQCAtMTQ0LDkgKzE0NSwxMCBAQCBwcml2
YXRlOgogICAgICAgICAvLyBEaWQgbm90IGZpbmQgYW55IHZpc3VhbCBzdXBwb3J0aW5nIGFscGhh
LCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBjb25maWcuCiAgICAgICAgIGlmICghZm91bmQp
IHsKICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFswXTsKLSAgICAgICAgICAgIG1f
dmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRl
bXBbMF0pOworICAgICAgICAgICAgdmlzSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyht
X3NoYXJlZERpc3BsYXksIHRlbXBbMF0pOwogICAgICAgICB9CiAKKyAgICAgICAgbV92aXN1YWxJ
bmZvID0gKnZpc0luZm87CiAgICAgICAgIFhGcmVlKHRlbXApOwogCiAgICAgICAgIHJldHVybiBz
ZWxlY3RlZENvbmZpZzsKQEAgLTE1NCw3ICsxNTYsNyBAQCBwcml2YXRlOgogCiAgICAgR0xYRkJD
b25maWcgbV9wYnVmZmVyRkJDb25maWc7CiAgICAgR0xYRkJDb25maWcgbV9zdXJmYWNlQ29udGV4
dEZCQ29uZmlnOwotICAgIFhWaXN1YWxJbmZvKiBtX3Zpc3VhbEluZm87CisgICAgWFZpc3VhbElu
Zm8gbV92aXN1YWxJbmZvOwogICAgIERpc3BsYXkqIG1fc2hhcmVkRGlzcGxheTsKICAgICBib29s
IG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwogfTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4
IGY1MDIzNTcuLjgxZWZmMjkgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcApAQCAtNTEsOCArNTEsNyBA
QCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fbmF0aXZlUmVzb3VyY2UtPnNldFZpc3VhbEluZm8obV9jb25m
aWdTZWxlY3Rvci0+dmlzdWFsSW5mbygpKTsKLSAgICBtX25hdGl2ZVJlc291cmNlLT5jcmVhdGVP
ZmZzY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlKTsKKyAgICBtX25hdGl2ZVJlc291cmNlLT5j
cmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCBtX2NvbmZpZ1NlbGVjdG9yLT52
aXN1YWxJbmZvKCkpOwogCiAgICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgewogICAgICAgICBkZXN0
cm95KCk7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKaW5kZXggYzg5ZjlhZi4u
M2E1NWIzZiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcApAQCAtMjIsOCAr
MjIsMTAgQEAKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogCisjaW5jbHVkZSAiR0xYQ29u
ZmlnU2VsZWN0b3IuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5oIgogCiAjaWYg
UExBVEZPUk0oUVQpCiAvLyBRdCBoZWFkZXJzIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIGdseCBo
ZWFkZXJzLgpAQCAtMzYsMTQgKzM4LDkgQEAKIAogI2luY2x1ZGUgPEdML2dsZXh0Lmg+CiAjaW5j
bHVkZSA8R0wvZ2x4Lmg+Ci0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNpbmNsdWRlIDxYMTEvZXh0
ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBsb25nIFgxMU92ZXJyaWRlUmVkaXJl
Y3QgPSAxTCA8PCA5OwotCiBzdGF0aWMgUEZOR0xYQklORFRFWElNQUdFRVhUUFJPQyBwR2xYQmlu
ZFRleEltYWdlRVhUID0gMDsKIHN0YXRpYyBQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DIHBH
bFhSZWxlYXNlVGV4SW1hZ2VFWFQgPSAwOwogc3RhdGljIFBGTkdMQklOREZSQU1FQlVGRkVSUFJP
QyBwR2xCaW5kRnJhbWVidWZmZXIgPSAwOwpAQCAtNTIsMTMwICs0OSw2IEBAIHN0YXRpYyBQRk5H
TEdFTkZSQU1FQlVGRkVSU1BST0MgcEdsR2VuRnJhbWVidWZmZXJzID0gMDsKIHN0YXRpYyBQRk5H
TERFTEVURUZSQU1FQlVGRkVSU1BST0MgcEdsRGVsZXRlRnJhbWVidWZmZXJzID0gMDsKIHN0YXRp
YyBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJEUFJPQyBwR2xGcmFtZWJ1ZmZlclRleHR1cmUyRCA9
IDA7CiAKLS8vIFVzZWQgZm9yIGhhbmRsaW5nIFhFcnJvci4KLXN0YXRpYyBib29sIHZhbGlkT3Bl
cmF0aW9uID0gdHJ1ZTsKLXN0YXRpYyBpbnQgaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IoRGlz
cGxheSosIFhFcnJvckV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPmVycm9yX2NvZGUg
PT0gQmFkTWF0Y2ggfHwgZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkV2luZG93IHx8IGV2ZW50LT5l
cnJvcl9jb2RlID09IEJhZEFsbG9jKSB7Ci0gICAgICAgIHZhbGlkT3BlcmF0aW9uID0gZmFsc2U7
Ci0KLSAgICAgICAgc3dpdGNoIChldmVudC0+ZXJyb3JfY29kZSkgewotICAgICAgICBjYXNlIEJh
ZE1hdGNoOgotICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRNYXRjaC4iKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEJhZFdpbmRvdzoKLSAgICAgICAgICAgIExPR19FUlJPUigi
QmFkV2luZG93LiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmFkQWxsb2M6
Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkJhZEFsbG9jLiIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICBH
TFhfTEVWRUwsIDAsCi0gICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAotICAg
IEdMWF9SRU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCi0gICAgR0xYX1JFRF9TSVpFLCAgICAg
IDEsCi0gICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCi0gICAgR0xYX0JMVUVfU0laRSwgICAgIDEs
Ci0gICAgR0xYX0FMUEhBX1NJWkUsICAgIDEsCi0gICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCi0g
ICAgR0xYX1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAotICAgIEdMWF9ET1VCTEVCVUZG
RVIsICBUcnVlLAotICAgIE5vbmUKLX07Ci0KLWNsYXNzIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVy
cm9ySGFuZGxlciB7Ci0KLXB1YmxpYzoKLSAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhh
bmRsZXIoRGlzcGxheSogZGlzcGxheSkKLSAgICAgICAgOiBtX2Rpc3BsYXkoZGlzcGxheSkKLSAg
ICB7Ci0gICAgICAgIC8vIFhTeW5jIG11c3QgYmUgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGN1cnJl
bnQgZXJyb3JzIGFyZSBoYW5kbGVkIGJ5IHRoZSBvcmlnaW5hbCBoYW5kbGVyLgotICAgICAgICBY
U3luYyhtX2Rpc3BsYXksIGZhbHNlKTsKLSAgICAgICAgbV9wcmV2aW91c0Vycm9ySGFuZGxlciA9
IFhTZXRFcnJvckhhbmRsZXIoaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IpOwotICAgIH0KLQot
ICAgIH5TY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKQotICAgIHsKLSAgICAgICAg
Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KLSAgICAgICAgWFNldEVycm9ySGFuZGxl
cihtX3ByZXZpb3VzRXJyb3JIYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBib29sIGlzVmFsaWRPcGVy
YXRpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgdmFsaWRPcGVyYXRpb24gPSB0cnVlOwotICAg
ICAgICAvLyBYU3luYyBpcyBuZWVkZWQgdG8gY2F0Y2ggcG9zc2libGUgZXJyb3JzIGFzIHRoZXkg
YXJlIGdlbmVyYXRlZCBhc3luY2hyb25vdXNseS4KLSAgICAgICAgWFN5bmMobV9kaXNwbGF5LCBm
YWxzZSk7Ci0gICAgICAgIHJldHVybiB2YWxpZE9wZXJhdGlvbjsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgWEVycm9ySGFuZGxlciBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyOwotICAgIERpc3BsYXkq
IG1fZGlzcGxheTsKLX07Ci0KLS8vIEZJWE1FOiBUYWtlIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQg
R0xYQ29uZmlnU2VsZWN0b3IgaW50byB1c2UuCi1jbGFzcyBPZmZTY3JlZW5Sb290V2luZG93IHsK
LXB1YmxpYzoKLSAgICBPZmZTY3JlZW5Sb290V2luZG93KCkKLSAgICB7Ci0gICAgICAgICsrbV9y
ZWZDb3VudDsKLSAgICB9Ci0KLSAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCi0gICAgewotICAgICAg
ICBpZiAoIW1fd2luZG93KSB7Ci0gICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSBkaXNwbGF5KCk7
Ci0gICAgICAgICAgICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVmYXVs
dFJvb3RXaW5kb3coZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCksIFdo
aXRlUGl4ZWwoZHB5LCAwKSk7Ci0gICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRy
aWJ1dGVzOwotICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRydWU7
Ci0gICAgICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBYMTFP
dmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAvLyBNYXAgd2luZG93
IHRvIHRoZSBzY3JlZW4KLSAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dpbmRvdyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV93aW5kb3c7Ci0gICAgfQotCi0gICAgRGlzcGxh
eSogZGlzcGxheSgpCi0gICAgewotICAgICAgICBpZiAoIW1fZGlzcGxheSkKLSAgICAgICAgICAg
IG1fZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICAgICAgcmV0dXJuIG1fZGlzcGxheTsK
LSAgICB9Ci0KLSAgICB+T2ZmU2NyZWVuUm9vdFdpbmRvdygpCi0gICAgewotICAgICAgICBpZiAo
LS1tX3JlZkNvdW50IHx8ICFtX2Rpc3BsYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgICAgICBYVW5tYXBXaW5kb3cobV9kaXNwbGF5LCBt
X3dpbmRvdyk7Ci0gICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93
KTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFhDbG9z
ZURpc3BsYXkobV9kaXNwbGF5KTsKLSAgICAgICAgbV9kaXNwbGF5ID0gMDsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgc3RhdGljIGludCBtX3JlZkNvdW50OwotICAgIHN0YXRpYyBXaW5kb3cgbV93
aW5kb3c7Ci0gICAgc3RhdGljIERpc3BsYXkqIG1fZGlzcGxheTsKLX07Ci0KLWludCBPZmZTY3Jl
ZW5Sb290V2luZG93OjptX3JlZkNvdW50ID0gMDsKLVdpbmRvdyBPZmZTY3JlZW5Sb290V2luZG93
OjptX3dpbmRvdyA9IDA7Ci1EaXNwbGF5KiBPZmZTY3JlZW5Sb290V2luZG93OjptX2Rpc3BsYXkg
PSAwOwotCiBzdGF0aWMgY29uc3QgaW50IGdseFNwZWNbXSA9IHsKICAgICAvLyBUaGUgc3BlY2lm
aWNhdGlvbiBpcyBhIHNldCBrZXkgdmFsdWUgcGFpcnMgc3RvcmVkIGluIGEgc2ltcGxlIGFycmF5
LgogICAgIEdMWF9MRVZFTCwgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCkBAIC0xOTUsMTUg
KzY4LDEzIEBAIHN0YXRpYyBjb25zdCBpbnQgZ2x4QXR0cmlidXRlc1tdID0gewogCiBzdHJ1Y3Qg
R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZShjb25z
dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHNoYXJlQ29udGV4dCA9IDApCi0gICAgICAgIDog
bV9kaXNwbGF5KG1fb2ZmU2NyZWVuV2luZG93LmRpc3BsYXkoKSkKLSAgICAgICAgLCBtX3hQaXht
YXAoMCkKKyAgICAgICAgOiBtX3hQaXhtYXAoMCkKICAgICAgICAgLCBtX2dseFBpeG1hcCgwKQog
ICAgICAgICAsIG1fc3VyZmFjZSgwKQogICAgICAgICAsIG1fZ2x4U3VyZmFjZSgwKQogICAgICAg
ICAsIG1fZ2xDb250ZXh0KDApCiAgICAgICAgICwgbV9kZXRhY2hlZENvbnRleHQoMCkKICAgICAg
ICAgLCBtX2RldGFjaGVkU3VyZmFjZSgwKQotICAgICAgICAsIG1fZmJDb25maWcoMCkKICAgICAg
ICAgLCBtX3RleHR1cmVJc1lJbnZlcnRlZChmYWxzZSkKICAgICAgICAgLCBtX2hhc0FscGhhKGZh
bHNlKQogICAgICAgICAsIG1faXNSZWNlaXZlcihmYWxzZSkKQEAgLTIyMCw3MCArOTEsNzIgQEAg
c3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgewogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BB
UkFNKHNoYXJlQ29udGV4dCk7CiAjZW5kaWYKLQotICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7Ci0g
ICAgICAgIEdMWEZCQ29uZmlnKiBmYkNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhtX2Rpc3Bs
YXksIERlZmF1bHRTY3JlZW4obV9kaXNwbGF5KSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsK
LQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBjaG9vc2UgYSBjb25maWd1cmF0aW9uIHRo
YXQgc3VwcG9ydHMgYW4gYWxwaGEgbWFzay4KLSAgICAgICAgbV9mYkNvbmZpZyA9IGZpbmRGQkNv
bmZpZ1dpdGhBbHBoYShmYkNvbmZpZ3MsIG51bVJldHVybmVkKTsKLQotICAgICAgICBYRnJlZShm
YkNvbmZpZ3MpOworICAgICAgICBpZiAoIWluaXRpYWxpemUoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICAvLyBDcmVhdGUgYSBHTFggY29udGV4dCBmb3IgT3BlbkdMIHJlbmRlcmlu
ZwotICAgICAgICBtX2dsQ29udGV4dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQobV9kaXNwbGF5LCBt
X2ZiQ29uZmlnLCBHTFhfUkdCQV9UWVBFLCBzaGFyZUNvbnRleHRPYmplY3QsIHRydWUpOworICAg
ICAgICBtX2dsQ29udGV4dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQobV9uYXRpdmVSZXNvdXJjZS0+
bmF0aXZlU2hhcmVkRGlzcGxheSgpLCBtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENv
bmZpZygpLCBHTFhfUkdCQV9UWVBFLCBzaGFyZUNvbnRleHRPYmplY3QsIHRydWUpOwogICAgIH0K
IAogICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUodWludDMyX3Qgd2luSWQpCi0gICAgICAgIDog
bV9kaXNwbGF5KG1fb2ZmU2NyZWVuV2luZG93LmRpc3BsYXkoKSkKLSAgICAgICAgLCBtX3hQaXht
YXAoMCkKKyAgICAgICAgOiBtX3hQaXhtYXAoMCkKICAgICAgICAgLCBtX2dseFBpeG1hcCgwKQog
ICAgICAgICAsIG1fc3VyZmFjZSh3aW5JZCkKICAgICAgICAgLCBtX2dseFN1cmZhY2UoMCkKICAg
ICAgICAgLCBtX2dsQ29udGV4dCgwKQogICAgICAgICAsIG1fZGV0YWNoZWRDb250ZXh0KDApCiAg
ICAgICAgICwgbV9kZXRhY2hlZFN1cmZhY2UoMCkKLSAgICAgICAgLCBtX2ZiQ29uZmlnKDApCiAg
ICAgICAgICwgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQoZmFsc2UpCiAgICAgICAgICwgbV9oYXNBbHBo
YShmYWxzZSkKICAgICAgICAgLCBtX2lzUmVjZWl2ZXIodHJ1ZSkKLSAgICB7IH0KKyAgICB7Cisg
ICAgICAgIGluaXRpYWxpemUoKTsKKyAgICB9CiAKICAgICB+R3JhcGhpY3NTdXJmYWNlUHJpdmF0
ZSgpCiAgICAgewogICAgICAgICBjbGVhcigpOwogICAgIH0KIAorICAgIGJvb2wgaW5pdGlhbGl6
ZSgpCisgICAgeworICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gYWRvcHRQdHIobmV3IFgxMU9m
ZlNjcmVlbldpbmRvdygpKTsKKyAgICAgICAgbV9kaXNwbGF5ID0gbV9uYXRpdmVSZXNvdXJjZS0+
bmF0aXZlU2hhcmVkRGlzcGxheSgpOworCisgICAgICAgIGlmICghbV9kaXNwbGF5KSB7CisgICAg
ICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihu
ZXcgR0xYQ29uZmlnU2VsZWN0b3IobV9kaXNwbGF5LCBtX25hdGl2ZVJlc291cmNlLT5pc1hSZW5k
ZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOworCisgICAgICAgIGlmICghbV9jb25maWdTZWxlY3Rv
ci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSkgeworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKwogICAgIHVpbnQzMl90IGNyZWF0ZVN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
ICAgICB7Ci0gICAgICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJv
bUZCQ29uZmlnKG1fZGlzcGxheSwgbV9mYkNvbmZpZyk7Ci0gICAgICAgIGlmICghdmlzdWFsSW5m
bykKKyAgICAgICAgaWYgKCFtX25hdGl2ZVJlc291cmNlIHx8ICFtX2NvbmZpZ1NlbGVjdG9yKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVD
b2xvcm1hcChtX2Rpc3BsYXksIG1fb2ZmU2NyZWVuV2luZG93LmdldFhXaW5kb3coKSwgdmlzdWFs
SW5mby0+dmlzdWFsLCBBbGxvY05vbmUpOwotCi0gICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVz
IGE7Ci0gICAgICAgIGEuYmFja2dyb3VuZF9waXhlbCA9IFdoaXRlUGl4ZWwobV9kaXNwbGF5LCAw
KTsKLSAgICAgICAgYS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKG1fZGlzcGxheSwgMCk7Ci0g
ICAgICAgIGEuY29sb3JtYXAgPSBjbWFwOwotICAgICAgICBtX3N1cmZhY2UgPSBYQ3JlYXRlV2lu
ZG93KG1fZGlzcGxheSwgbV9vZmZTY3JlZW5XaW5kb3cuZ2V0WFdpbmRvdygpLCAwLCAwLCBzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCksCi0gICAgICAgICAgICAwLCB2aXN1YWxJbmZvLT5kZXB0
aCwgSW5wdXRPdXRwdXQsIHZpc3VhbEluZm8tPnZpc3VhbCwKLSAgICAgICAgICAgIENXQmFja1Bp
eGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhKTsKLSAgICAgICAgWFNldFdpbmRv
d0JhY2tncm91bmRQaXhtYXAobV9kaXNwbGF5LCBtX3N1cmZhY2UsIDApOwotICAgICAgICBYQ29t
cG9zaXRlUmVkaXJlY3RXaW5kb3cobV9kaXNwbGF5LCBtX3N1cmZhY2UsIENvbXBvc2l0ZVJlZGly
ZWN0TWFudWFsKTsKLSAgICAgICAgbV9nbHhTdXJmYWNlID0gZ2xYQ3JlYXRlV2luZG93KG1fZGlz
cGxheSwgbV9mYkNvbmZpZywgbV9zdXJmYWNlLCAwKTsKLSAgICAgICAgWEZyZWUodmlzdWFsSW5m
byk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBYUmVuZGVyIEV4dGVuc2lvbiBpcyBhdmFp
bGFibGUuCi0gICAgICAgIGludCBldmVudEJhc2VwLCBlcnJvckJhc2VwOwotICAgICAgICBpZiAo
IVhSZW5kZXJRdWVyeUV4dGVuc2lvbihtX2Rpc3BsYXksICZldmVudEJhc2VwLCAmZXJyb3JCYXNl
cCkpCisgICAgICAgIG1fbmF0aXZlUmVzb3VyY2UtPmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9z
dXJmYWNlLCBtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKCkpOworCisgICAgICAgIGlmICgh
bV9zdXJmYWNlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgWE1hcFdpbmRvdyht
X2Rpc3BsYXksIG1fc3VyZmFjZSk7CisgICAgICAgIG1fZ2x4U3VyZmFjZSA9IGdsWENyZWF0ZVdp
bmRvdyhtX2Rpc3BsYXksIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCks
IG1fc3VyZmFjZSwgMCk7CiAgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CiAgICAgfQogCiAgICAg
dm9pZCBjcmVhdGVQaXhtYXAodWludDMyX3Qgd2luSWQpCiAgICAgeworICAgICAgICBpZiAoIW1f
Y29uZmlnU2VsZWN0b3IpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgWFdpbmRvd0F0
dHJpYnV0ZXMgYXR0cjsKICAgICAgICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhtX2Rpc3Bs
YXksIHdpbklkLCAmYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTgsMTIgKzE3MSw3
IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICAgICAgWFJlbmRlclBpY3RG
b3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG1fZGlzcGxheSwgYXR0ci52
aXN1YWwpOwogICAgICAgICBtX2hhc0FscGhhID0gKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlwZURp
cmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spOwogCi0gICAgICAgIGludCBudW1iZXJP
ZkNvbmZpZ3M7Ci0gICAgICAgIEdMWEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25m
aWcobV9kaXNwbGF5LCBYRGVmYXVsdFNjcmVlbihtX2Rpc3BsYXkpLCBnbHhTcGVjLCAmbnVtYmVy
T2ZDb25maWdzKTsKLQotICAgICAgICAvLyBJZiBvcmlnaW4gd2luZG93IGhhcyBhbHBoYSB0aGVu
IGZpbmQgY29uZmlnIHdpdGggYWxwaGEuCi0gICAgICAgIEdMWEZCQ29uZmlnJiBjb25maWcgPSBt
X2hhc0FscGhhID8gZmluZEZCQ29uZmlnV2l0aEFscGhhKGNvbmZpZ3MsIG51bWJlck9mQ29uZmln
cykgOiBjb25maWdzWzBdOwotCisgICAgICAgIEdMWEZCQ29uZmlnIGNvbmZpZyA9IG1fY29uZmln
U2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7CiAgICAgICAgIG1feFBpeG1hcCA9IFhD
b21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG1fZGlzcGxheSwgd2luSWQpOwogICAgICAgICBtX2ds
eFBpeG1hcCA9IGdsWENyZWF0ZVBpeG1hcChtX2Rpc3BsYXksIGNvbmZpZywgbV94UGl4bWFwLCBn
bHhBdHRyaWJ1dGVzKTsKIApAQCAtMzEzLDkgKzE4MSw5IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZh
Y2VQcml2YXRlIHsKICAgICAgICAgICAgIHVpbnQgaW52ZXJ0ZWQgPSAwOwogICAgICAgICAgICAg
Z2xYUXVlcnlEcmF3YWJsZShtX2Rpc3BsYXksIG1fZ2x4UGl4bWFwLCBHTFhfWV9JTlZFUlRFRF9F
WFQsICZpbnZlcnRlZCk7CiAgICAgICAgICAgICBtX3RleHR1cmVJc1lJbnZlcnRlZCA9ICEhaW52
ZXJ0ZWQ7CisgICAgICAgICAgICBtX2ZsYWdzID0gbV90ZXh0dXJlSXNZSW52ZXJ0ZWQgPyBUZXh0
dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0dXJlIDogMDsKKyAgICAgICAgICAgIG1fZmxhZ3Mg
fD0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZDsKICAgICAgICAgfQotCi0gICAgICAgIFhG
cmVlKGNvbmZpZ3MpOwogICAgIH0KIAogICAgIGJvb2wgdGV4dHVyZUlzWUludmVydGVkKCkKQEAg
LTQwOCwyNSArMjc2LDEwIEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICB9
CiAKICAgICBib29sIGlzUmVjZWl2ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzUmVjZWl2ZXI7IH0K
LXByaXZhdGU6Ci0gICAgR0xYRkJDb25maWcmIGZpbmRGQkNvbmZpZ1dpdGhBbHBoYShHTFhGQkNv
bmZpZyogZmJDb25maWdzLCBpbnQgbnVtYmVyT2ZDb25maWdzKQotICAgIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbmZpZ3M7ICsraSkgewotICAgICAgICAgICAgWFZp
c3VhbEluZm8qIHZpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcobV9kaXNwbGF5
LCBmYkNvbmZpZ3NbaV0pOwotICAgICAgICAgICAgaWYgKCF2aXN1YWxJbmZvKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0
ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQobV9kaXNwbGF5LCB2aXN1YWxJbmZvLT52aXN1YWwp
OwotICAgICAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7CiAKLSAgICAgICAgICAgIGlmIChmb3Jt
YXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmJDb25maWdzW2ldOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJuIDFzdCBjb25m
aWcgYXMgYSBmYWxsYmFjayB3aXRoIG5vIGFscGhhIHN1cHBvcnQuCi0gICAgICAgIHJldHVybiBm
YkNvbmZpZ3NbMF07Ci0gICAgfQorICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MoKSBj
b25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCBjbGVhcigpCiAg
ICAgewogICAgICAgICBpZiAobV9nbHhQaXhtYXApIHsKQEAgLTQ0OCwyMiArMzAxLDI5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBnbFhEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1fZ2xDb250
ZXh0KTsKICAgICAgICAgICAgIG1fZ2xDb250ZXh0ID0gMDsKICAgICAgICAgfQorCisgICAgICAg
IGlmIChtX2NvbmZpZ1NlbGVjdG9yKQorICAgICAgICAgICAgbV9jb25maWdTZWxlY3RvciA9IG51
bGxwdHI7CisKKyAgICAgICAgaWYgKG1fbmF0aXZlUmVzb3VyY2UpCisgICAgICAgICAgICBtX25h
dGl2ZVJlc291cmNlID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBPZmZTY3JlZW5Sb290V2luZG93
IG1fb2ZmU2NyZWVuV2luZG93OwogICAgIEludFNpemUgbV9zaXplOwogICAgIERpc3BsYXkqIG1f
ZGlzcGxheTsKICAgICBQaXhtYXAgbV94UGl4bWFwOwogICAgIEdMWFBpeG1hcCBtX2dseFBpeG1h
cDsKLSAgICBXaW5kb3cgbV9zdXJmYWNlOworICAgIHVpbnQzMl90IG1fc3VyZmFjZTsKICAgICBX
aW5kb3cgbV9nbHhTdXJmYWNlOwogICAgIEdMWENvbnRleHQgbV9nbENvbnRleHQ7CiAgICAgR0xY
Q29udGV4dCBtX2RldGFjaGVkQ29udGV4dDsKICAgICBHTFhEcmF3YWJsZSBtX2RldGFjaGVkU3Vy
ZmFjZTsKLSAgICBHTFhGQkNvbmZpZyBtX2ZiQ29uZmlnOworICAgIE93blB0cjxYMTFPZmZTY3Jl
ZW5XaW5kb3c+IG1fbmF0aXZlUmVzb3VyY2U7CisgICAgT3duUHRyPEdMWENvbmZpZ1NlbGVjdG9y
PiBtX2NvbmZpZ1NlbGVjdG9yOwogICAgIGJvb2wgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQ7CiAgICAg
Ym9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9pc1JlY2VpdmVyOworICAgIFRleHR1cmVNYXBw
ZXJHTDo6RmxhZ3MgbV9mbGFnczsKIH07CiAKIHN0YXRpYyBib29sIHJlc29sdmVHTE1ldGhvZHMo
KQpAQCAtNTIzLDE3ICszODMsMTUgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtUGFp
bnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwKICAgICBJbnRT
aXplIHNpemUgPSBtX3ByaXZhdGUtPnNpemUoKTsKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKKwogICAgIHVpbnQzMl90IHRleHR1cmUgPSBwbGF0Zm9ybUdldFRleHR1
cmVJRCgpOwogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGV4dHVy
ZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IG1fcHJpdmF0ZS0+dGV4dHVyZUlzWUludmVydGVkKCkg
PyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0dXJlIDogMDsKLSAgICBmbGFncyB8PSBU
ZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kOwotCiAgICAgRmxvYXRSZWN0IHJlY3RPbkNvbnRl
bnRzKEZsb2F0UG9pbnQ6Onplcm8oKSwgc2l6ZSk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
YWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07CiAgICAgYWRqdXN0ZWRUcmFuc2Zvcm0ubXVs
dGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QocmVjdE9uQ29udGVudHMsIHRh
cmdldFJlY3QpKTsKLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFw
cGVyKS0+ZHJhd1RleHR1cmUodGV4dHVyZSwgZmxhZ3MsIHNpemUsIHJlY3RPbkNvbnRlbnRzLCBh
ZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7CisgICAgc3RhdGljX2Nhc3Q8VGV4dHVy
ZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlciktPmRyYXdUZXh0dXJlKHRleHR1cmUsIG1fcHJpdmF0
ZS0+ZmxhZ3MoKSwgc2l6ZSwgcmVjdE9uQ29udGVudHMsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFj
aXR5LCBtYXNrKTsKIH0KIAogdWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUZyb250
QnVmZmVyKCkgY29uc3QKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcAppbmRleCA1
YTU3YTgxLi44ZmI3NmY5IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCkBA
IC0zNCwxNyArMzQsMTIgQEAgU2hhcmVkWDExUmVzb3VyY2VzKiBTaGFyZWRYMTFSZXNvdXJjZXM6
Om1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSAwOwogCiBYMTFPZmZTY3JlZW5XaW5kb3c6OlgxMU9m
ZlNjcmVlbldpbmRvdygpCiAgICAgOiBtX3NoYXJlZFJlc291cmNlcygwKQotICAgICwgbV9jb25m
aWdWaXN1YWxJbmZvKDApCiB7CiAgICAgbV9zaGFyZWRSZXNvdXJjZXMgPSBTaGFyZWRYMTFSZXNv
dXJjZXM6OmNyZWF0ZSgpOwogfQogCiBYMTFPZmZTY3JlZW5XaW5kb3c6On5YMTFPZmZTY3JlZW5X
aW5kb3coKQogewotICAgIGlmIChtX2NvbmZpZ1Zpc3VhbEluZm8pIHsKLSAgICAgICAgWEZyZWUo
bV9jb25maWdWaXN1YWxJbmZvKTsKLSAgICAgICAgbV9jb25maWdWaXN1YWxJbmZvID0gMDsKLSAg
ICB9CiB9CiAKIHZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpyZVNpemVXaW5kb3coY29uc3QgSW50
UmVjdCYgbmV3UmVjdCwgY29uc3QgdWludDMyX3Qgd2luZG93SWQpCkBAIC01Myw3ICs0OCw4IEBA
IHZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpyZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYgbmV3
UmVjdCwgY29uc3QgdWludDMyX3Qgd2luCiAgICAgWEZsdXNoKG1fc2hhcmVkUmVzb3VyY2VzLT54
MTFEaXNwbGF5KCkpOwogfQogCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2Ny
ZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCkKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
K3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3Qq
IGhhbmRsZUlkLCBjb25zdCBYVmlzdWFsSW5mbyYgdmlzSW5mbykKIHsKICAgICBpZiAoIW1fc2hh
cmVkUmVzb3VyY2VzKQogICAgICAgICByZXR1cm47CkBAIC02Miw3ICs1OCw3IEBAIHZvaWQgWDEx
T2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlk
KQogICAgIGlmICghZGlzcGxheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2NvbmZp
Z1Zpc3VhbEluZm8pIHsKKyAgICBpZiAoIXZpc0luZm8udmlzdWFsKSB7CiAgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbC4iKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTcxLDEzICs2NywxMyBAQCB2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRl
T2Zmc2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCkKICAgICBpZiAoIXhXaW5kb3cpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlz
cGxheSwgeFdpbmRvdywgbV9jb25maWdWaXN1YWxJbmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7Cisg
ICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2luZG93LCB2aXNJ
bmZvLnZpc3VhbCwgQWxsb2NOb25lKTsKICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1
dGU7CiAgICAgYXR0cmlidXRlLmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXks
IDApOwogICAgIGF0dHJpYnV0ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDAp
OwogICAgIGF0dHJpYnV0ZS5jb2xvcm1hcCA9IGNtYXA7CiAgICAgdWludDMyX3QgdGVtcEhhbmRs
ZUlkOwotICAgIHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywg
MCwgMCwgMSwgMSwgMCwgbV9jb25maWdWaXN1YWxJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIG1f
Y29uZmlnVmlzdWFsSW5mby0+dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBD
V0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKKyAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93
KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIDEsIDEsIDAsIHZpc0luZm8uZGVwdGgsIElucHV0T3V0
cHV0LCB2aXNJbmZvLnZpc3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xv
cm1hcCwgJmF0dHJpYnV0ZSk7CiAKICAgICBpZiAoIXRlbXBIYW5kbGVJZCkgewogICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHdpbmRvdy4iKTsKQEAgLTg1LDMz
ICs4MSwxNCBAQCB2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93
KHVpbnQzMl90KiBoYW5kbGVJZCkKICAgICB9CiAKICAgICBYU2V0V2luZG93QmFja2dyb3VuZFBp
eG1hcChkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIDApOworCiAgICAgWENvbXBvc2l0ZVJlZGlyZWN0
V2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJZCwgQ29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOwor
ICAgIFhNYXBXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkKTsKICAgICAqaGFuZGxlSWQgPSB0
ZW1wSGFuZGxlSWQ7Ci0KLSAgICBpZiAobV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVu
c2lvblN1cHBvcnRlZCgpKQotICAgICAgICBYTWFwV2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJ
ZCk7Ci0KLX0KLQotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coY29uc3Qg
dWludDMyX3Qgd2luZG93SWQpCi17Ci0gICAgaWYgKCF3aW5kb3dJZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5
KCk7Ci0gICAgaWYgKCFkaXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBYRGVzdHJveVdp
bmRvdyhkaXNwbGF5LCB3aW5kb3dJZCk7Ci19Ci0KLURpc3BsYXkqIFgxMU9mZlNjcmVlbldpbmRv
dzo6bmF0aXZlU2hhcmVkRGlzcGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVz
b3VyY2VzLT54MTFEaXNwbGF5KCk7CiB9CiAKICNpZiBVU0UoRUdMKQotYm9vbCBYMTFPZmZTY3Jl
ZW5XaW5kb3c6OnNldFZpc3VhbElkKGNvbnN0IEVHTGludCBpZCkKK3ZvaWQgWDExT2ZmU2NyZWVu
V2luZG93OjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBF
R0xpbnQgaWQpCiB7CiAgICAgVmlzdWFsSUQgdmlzdWFsSWQgPSBzdGF0aWNfY2FzdDxWaXN1YWxJ
RD4oaWQpOwogCkBAIC0xMjMsNTAgKzEwMCw2OCBAQCBib29sIFgxMU9mZlNjcmVlbldpbmRvdzo6
c2V0VmlzdWFsSWQoY29uc3QgRUdMaW50IGlkKQogICAgIG1lbXNldCgmdmlzdWFsSW5mb1RlbXBs
YXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsKICAgICB2aXN1YWxJbmZvVGVtcGxhdGUudmlz
dWFsaWQgPSB2aXN1YWxJZDsKIAotICAgIFhWaXN1YWxJbmZvKiBjaG9zZW5WaXN1YWxJbmZvOwog
ICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKLSAgICBjaG9zZW5WaXN1YWxJbmZvID0gWEdldFZp
c3VhbEluZm8obV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgVmlzdWFsSURNYXNrLCAm
dmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7CisgICAgWFZpc3VhbEluZm8qIGNo
b3NlblZpc3VhbEluZm8gPSBYR2V0VmlzdWFsSW5mbyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlz
cGxheSgpLCBWaXN1YWxJRE1hc2ssICZ2aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRjaGluZ0NvdW50
KTsKKyAgICBYVmlzdWFsSW5mbyogZm91bmRWaXN1YWwgPSAwOworICAgIFhWaXN1YWxJbmZvIHZp
c0luZm87CisgICAgaW50IHZpc3VhbERlcHRoID0gY2hvc2VuVmlzdWFsSW5mby0+ZGVwdGg7CisK
ICAgICBpZiAoY2hvc2VuVmlzdWFsSW5mbykgewotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQog
ICAgICAgICBpZiAobV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCgpKSB7CiAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZp
bmRWaXN1YWxGb3JtYXQobV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgY2hvc2VuVmlz
dWFsSW5mby0+dmlzdWFsKTsKLSAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJl
Y3QuYWxwaGFNYXNrID4gMCkgewotICAgICAgICAgICAgICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9
IGNob3NlblZpc3VhbEluZm87Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAoY2hvc2VuVmlzdWFsSW5mby0+
ZGVwdGggPT0gMzIpIHsKLSAgICAgICAgICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9IGNob3NlblZp
c3VhbEluZm87Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChmb3Jt
YXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkKKyAgICAgICAgICAgICAgICBmb3Vu
ZFZpc3VhbCA9IGNob3NlblZpc3VhbEluZm87CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIW1f
Y29uZmlnVmlzdWFsSW5mbyAmJiB2aXN1YWxEZXB0aCA9PSAzMikKKyAgICAgICAgICAgIGZvdW5k
VmlzdWFsID0gY2hvc2VuVmlzdWFsSW5mbzsKICAgICB9CiAKLSAgICBpZiAoIW1fY29uZmlnVmlz
dWFsSW5mbykgeworICAgIGlmICghZm91bmRWaXN1YWwpIHsKICAgICAgICAgbWVtc2V0KCZ2aXN1
YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFsSW5mbykpOwotICAgICAgICBYVmlzdWFs
SW5mbyogbWF0Y2hpbmdWaXN1YWxzOwotICAgICAgICBpbnQgbWF0Y2hpbmdDb3VudCA9IDA7Ci0K
LSAgICAgICAgdmlzdWFsSW5mb1RlbXBsYXRlLmRlcHRoID0gY2hvc2VuVmlzdWFsSW5mby0+ZGVw
dGg7Ci0gICAgICAgIG1hdGNoaW5nVmlzdWFscyA9IFhHZXRWaXN1YWxJbmZvKG1fc2hhcmVkUmVz
b3VyY2VzLT54MTFEaXNwbGF5KCksIFZpc3VhbERlcHRoTWFzaywgJnZpc3VhbEluZm9UZW1wbGF0
ZSwgJm1hdGNoaW5nQ291bnQpOworICAgICAgICB2aXN1YWxJbmZvVGVtcGxhdGUuZGVwdGggPSB2
aXN1YWxEZXB0aDsKKyAgICAgICAgWFZpc3VhbEluZm8qIG1hdGNoaW5nVmlzdWFscyA9IFhHZXRW
aXN1YWxJbmZvKG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIFZpc3VhbERlcHRoTWFz
aywgJnZpc3VhbEluZm9UZW1wbGF0ZSwgJm1hdGNoaW5nQ291bnQpOwogCiAgICAgICAgIGlmICht
YXRjaGluZ1Zpc3VhbHMpIHsKLSAgICAgICAgICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9ICZtYXRj
aGluZ1Zpc3VhbHNbMF07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaTwgbWF0Y2hpbmdD
b3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY2hvc2VuVmlzdWFsSW5mbyA9ICZtYXRjaGlu
Z1Zpc3VhbHNbMF07CisgICAgICAgICAgICAgICAgaWYgKGNob3NlblZpc3VhbEluZm8tPmRlcHRo
ID09IDMyKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kVmlzdWFsID0gY2hvc2VuVmlzdWFs
SW5mbzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZm91bmRWaXN1YWwpCisgICAgICAgICAgICAg
ICAgdmlzSW5mbyA9ICpmb3VuZFZpc3VhbDsKKwogICAgICAgICAgICAgWEZyZWUobWF0Y2hpbmdW
aXN1YWxzKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgdmlzSW5mbyA9ICpmb3VuZFZpc3VhbDsKKyAgICAgICAgWEZyZWUoY2hvc2Vu
VmlzdWFsSW5mbyk7CiAgICAgfQogCi0gICAgaWYgKCFtX2NvbmZpZ1Zpc3VhbEluZm8pCi0gICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFhWaXN1YWwgSW5mby4iKTsKLQotICAg
IHJldHVybiBmYWxzZTsKKyAgICBjcmVhdGVPZmZTY3JlZW5XaW5kb3coaGFuZGxlSWQsIHZpc0lu
Zm8pOwogfQogI2VuZGlmCiAKLXZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpzZXRWaXN1YWxJbmZv
KFhWaXN1YWxJbmZvKiB2aXNJbmZvKQorI2VuZGlmCisKK3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93
OjpkZXN0cm95V2luZG93KGNvbnN0IHVpbnQzMl90IHdpbmRvd0lkKQoreworICAgIGlmICghd2lu
ZG93SWQpCisgICAgICAgIHJldHVybjsKKworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBtX3NoYXJl
ZFJlc291cmNlcy0+eDExRGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgd2luZG93SWQpOworfQorCitEaXNw
bGF5KiBYMTFPZmZTY3JlZW5XaW5kb3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkoKSBjb25zdAogewot
ICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9IHZpc0luZm87CisgICAgcmV0dXJuIG1fc2hhcmVkUmVz
b3VyY2VzLT54MTFEaXNwbGF5KCk7CiB9CiAKIGJvb2wgWDExT2ZmU2NyZWVuV2luZG93Ojppc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3Vy
Y2VzLmgKaW5kZXggYTM5ODY1ZC4uODZmNzcwZiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291
cmNlcy5oCkBAIC00MCw4ICs0MCw2NSBAQAogI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5k
ZXIuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisvLyBVc2VkIGZvciBoYW5kbGluZyBYRXJyb3IuCitzdGF0aWMgYm9vbCB2YWxpZE9w
ZXJhdGlvbiA9IHRydWU7CitzdGF0aWMgaW50IGhhbmRsZVhQaXhtYXBDcmVhdGlvbkVycm9yKERp
c3BsYXkqLCBYRXJyb3JFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT5lcnJvcl9jb2Rl
ID09IEJhZE1hdGNoIHx8IGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZFdpbmRvdyB8fCBldmVudC0+
ZXJyb3JfY29kZSA9PSBCYWRBbGxvYykgeworICAgICAgICB2YWxpZE9wZXJhdGlvbiA9IGZhbHNl
OworCisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmVycm9yX2NvZGUpIHsKKyAgICAgICAgY2FzZSBC
YWRNYXRjaDoKKyAgICAgICAgICAgIExPR19FUlJPUigiQmFkTWF0Y2guIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBCYWRXaW5kb3c6CisgICAgICAgICAgICBMT0dfRVJST1Io
IkJhZFdpbmRvdy4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJhZEFsbG9j
OgorICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRBbGxvYy4iKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworY2xhc3MgU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JI
YW5kbGVyIHsKKworcHVibGljOgorICAgIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxl
cihEaXNwbGF5KiBkaXNwbGF5KQorICAgICAgICA6IG1fZGlzcGxheShkaXNwbGF5KQorICAgIHsK
KyAgICAgICAgLy8gWFN5bmMgbXVzdCBiZSBjYWxsZWQgdG8gZW5zdXJlIHRoYXQgY3VycmVudCBl
cnJvcnMgYXJlIGhhbmRsZWQgYnkgdGhlIG9yaWdpbmFsIGhhbmRsZXIuCisgICAgICAgIFhTeW5j
KG1fZGlzcGxheSwgZmFsc2UpOworICAgICAgICBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyID0gWFNl
dEVycm9ySGFuZGxlcihoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJvcik7CisgICAgfQorCisgICAg
flNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpCisgICAgeworICAgICAgICAvLyBS
ZXN0b3JlIHRoZSBvcmlnaW5hbCBoYW5kbGVyLgorICAgICAgICBYU2V0RXJyb3JIYW5kbGVyKG1f
cHJldmlvdXNFcnJvckhhbmRsZXIpOworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZE9wZXJhdGlv
bigpIGNvbnN0CisgICAgeworICAgICAgICB2YWxpZE9wZXJhdGlvbiA9IHRydWU7CisgICAgICAg
IC8vIFhTeW5jIGlzIG5lZWRlZCB0byBjYXRjaCBwb3NzaWJsZSBlcnJvcnMgYXMgdGhleSBhcmUg
Z2VuZXJhdGVkIGFzeW5jaHJvbm91c2x5LgorICAgICAgICBYU3luYyhtX2Rpc3BsYXksIGZhbHNl
KTsKKyAgICAgICAgcmV0dXJuIHZhbGlkT3BlcmF0aW9uOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBYRXJyb3JIYW5kbGVyIG1fcHJldmlvdXNFcnJvckhhbmRsZXI7CisgICAgRGlzcGxheSogbV9k
aXNwbGF5OworfTsKKwogY2xhc3MgU2hhcmVkWDExUmVzb3VyY2VzIDogcHVibGljIFdURjo6UmVm
Q291bnRlZEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYXJlZFgxMVJlc291cmNl
cyk7CiAKQEAgLTE0MywxOSArMjAwLDE5IEBAIGNsYXNzIFgxMU9mZlNjcmVlbldpbmRvdyB7CiBw
dWJsaWM6CiAgICAgWDExT2ZmU2NyZWVuV2luZG93KCk7CiAgICAgdmlydHVhbCB+WDExT2ZmU2Ny
ZWVuV2luZG93KCk7Ci0gICAgdm9pZCBjcmVhdGVPZmZzY3JlZW5XaW5kb3codWludDMyX3QqKTsK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2b2lkIGNyZWF0ZU9mZlNjcmVlbldpbmRv
dyh1aW50MzJfdCosIGNvbnN0IFhWaXN1YWxJbmZvJik7CisjaWYgVVNFKEVHTCkKKyAgICB2b2lk
IGNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCosIGNvbnN0IEVHTGludCk7CisjZW5kaWYK
KyNlbmRpZgogICAgIHZvaWQgZGVzdHJveVdpbmRvdyhjb25zdCB1aW50MzJfdCk7CiAgICAgdm9p
ZCByZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYsIGNvbnN0IHVpbnQzMl90KTsKICAgICBEaXNw
bGF5KiBuYXRpdmVTaGFyZWREaXNwbGF5KCkgY29uc3Q7Ci0jaWYgVVNFKEVHTCkKLSAgICBib29s
IHNldFZpc3VhbElkKGNvbnN0IEVHTGludCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldFZpc3VhbElu
Zm8oWFZpc3VhbEluZm8qKTsKICAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+IG1fc2hh
cmVkUmVzb3VyY2VzOwotICAgIFhWaXN1YWxJbmZvKiBtX2NvbmZpZ1Zpc3VhbEluZm87CiB9Owog
CiB9Cg==
</data>
<flag name="commit-queue"
          id="201496"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183329</attachid>
            <date>2013-01-17 17:40:20 -0800</date>
            <delta_ts>2013-01-17 17:59:30 -0800</delta_ts>
            <desc>patchv3</desc>
            <filename>glxhangesreview.patch</filename>
            <type>text/plain</type>
            <size>31456</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDJjZDJjYjMuLmM1ZDhhZmQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEz
LTAxLTE3ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtRdF1bV2ViR0xdIFNoYXJlIHRoZSBjb21tb24gY29kZSBiZXR3ZWVu
IEdyYXBoaWNzU3VyZmFjZUdMWCBhbmQgWDExV2luZG93UmVzb3VyY2VzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBX
ZWJHTCB0ZXN0cy4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6R0xYQ29uZmlnU2VsZWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OnZpc3VhbEluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OmNyZWF0ZUNvbmZpZyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVByaXZhdGU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChHcmFwaGljc1N1cmZh
Y2VQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmNy
ZWF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6
Y3JlYXRlUGl4bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6
OmZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1QYWludFRvVGV4
dHVyZU1hcHBlcik6CisgICAgICAgIFJlbW92ZWQgYWxsIHRoZSBjb21tb24gY29kZSBhbmQgbWFk
ZSBjaGFuZ2VzIHRvIHVzZSBYMTFPZmZTY3JlZW5XaW5kb3cuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlgxMU9mZlNjcmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldpbmRvdzo6flgxMU9mZlNjcmVlbldpbmRvdyk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldpbmRvdzo6
Y3JlYXRlT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMU9mZlNjcmVlbldp
bmRvdzo6ZGVzdHJveVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpYMTFPZmZTY3JlZW5XaW5k
b3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkpOgorICAgICAgICBNb2RpZmllZCBjcmVhdGVvZmZTY3Jl
ZW5XaW5kb3cgdG8gdGFrZSB0aGUgdmlzdWFsaW5mbyBhcyBhIGZ1bmN0aW9uIHBhcmFtZXRlci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlWFBp
eG1hcENyZWF0aW9uRXJyb3IpOgorICAgICAgICAoU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JI
YW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFu
ZGxlcjo6U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6flNjb3BlZFhQaXhtYXBDcmVh
dGlvbkVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRYUGl4bWFwQ3JlYXRp
b25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24pOgorICAgICAgICBNb3ZlZCBTY29wZWRY
UGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgZnJvbSBHcmFwaGljc1N1cmZhY2VHTFggdG8gWDEx
V2luZG93UmVzb3VyY2VzLgorCiAyMDEzLTAxLTE2ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtA
Y2hyb21pdW0ub3JnPgoKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZjZkNjA4Mi4uODEyMjVmYSAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAg
LTQxNjksNyArNDE2OSwxMiBAQCB1c2U/KEdSQVBISUNTX1NVUkZBQ0UpIHsKICAgICAgICAgU09V
UkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy93aW4vR3JhcGhpY3NTdXJmYWNlV2lu
LmNwcAogICAgIH0KICAgICBoYXZlPyhYQ09NUE9TSVRFKSB7Ci0gICAgICAgIFNPVVJDRVMgKz0g
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKKyAg
ICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmggXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgKKyAgICAgICAgU09VUkNFUyArPSBc
CisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVz
b3VyY2VzLmNwcCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R3JhcGhpY3NTdXJmYWNlR0xYLmNwcAogICAgIH0KIH0KIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKaW5k
ZXggOTkyYjNhNi4uZWM0YTM0ZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCkBAIC01NywxMiArNTcs
NyBAQCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9uYXRpdmVSZXNvdXJjZS0+
c2V0VmlzdWFsSWQodmlzdWFsSWQpKSB7Ci0gICAgICAgIGRlc3Ryb3koKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fbmF0aXZlUmVzb3VyY2UtPmNyZWF0ZU9mZnNjcmVlbldpbmRv
dygmbV9idWZmZXJIYW5kbGUpOworICAgIG1fbmF0aXZlUmVzb3VyY2UtPmNyZWF0ZU9mZnNjcmVl
bldpbmRvdygmbV9idWZmZXJIYW5kbGUsIHZpc3VhbElkKTsKIAogICAgIGlmICghbV9idWZmZXJI
YW5kbGUpIHsKICAgICAgICAgZGVzdHJveSgpOwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5o
CmluZGV4IGExYjE0YmUuLjQzNTE1NWIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgK
QEAgLTMwLDYgKzMwLDggQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
VVNFKEdMWCkKIAorI2luY2x1ZGUgPEdML2dseC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEdMWENvbmZpZ1NlbGVjdG9yIHsKQEAgLTM5LDcgKzQxLDYgQEAgcHVibGljOgogICAg
IEdMWENvbmZpZ1NlbGVjdG9yKERpc3BsYXkqIHhEaXNwbGF5LCBib29sIHN1cHBvcnRzWFJlbmRl
ckV4dGVuc2lvbikKICAgICAgICAgOiBtX3BidWZmZXJGQkNvbmZpZygwKQogICAgICAgICAsIG1f
c3VyZmFjZUNvbnRleHRGQkNvbmZpZygwKQotICAgICAgICAsIG1fdmlzdWFsSW5mbygwKQogICAg
ICAgICAsIG1fc2hhcmVkRGlzcGxheSh4RGlzcGxheSkKICAgICAgICAgLCBtX3N1cHBvcnRzWFJl
bmRlckV4dGVuc2lvbihzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24pCiAgICAgewpAQCAtNDksNyAr
NTAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJ
bmZvKCkgY29uc3QKKyAgICBjb25zdCBYVmlzdWFsSW5mbyYgdmlzdWFsSW5mbygpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gbV92aXN1YWxJbmZvOwogICAgIH0KQEAgLTExMSw5ICsxMTIs
OCBAQCBwcml2YXRlOgogICAgIEdMWEZCQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0
cmlidXRlc1tdKQogICAgIHsKICAgICAgICAgaW50IG51bUF2YWlsYWJsZUNvbmZpZ3M7Ci0gICAg
ICAgIG1fdmlzdWFsSW5mbyA9IDA7CiAgICAgICAgIEdMWEZCQ29uZmlnKiB0ZW1wID0gZ2xYQ2hv
b3NlRkJDb25maWcobV9zaGFyZWREaXNwbGF5LCBEZWZhdWx0U2NyZWVuKG1fc2hhcmVkRGlzcGxh
eSksIGF0dHJpYnV0ZXMsICZudW1BdmFpbGFibGVDb25maWdzKTsKLQorICAgICAgICBYVmlzdWFs
SW5mbyogdmlzSW5mbyA9IDA7CiAgICAgICAgIGlmICghbnVtQXZhaWxhYmxlQ29uZmlncykKICAg
ICAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMjEsMjAgKzEyMSwyMyBAQCBwcml2YXRlOgogICAg
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1BdmFpbGFibGVDb25maWdzOyArK2kpIHsKLSAgICAgICAgICAgIG1fdmlzdWFsSW5mbyA9IGds
WEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbaV0pOwotICAgICAg
ICAgICAgaWYgKCFtX3Zpc3VhbEluZm8pCisgICAgICAgICAgICBpZiAodmlzSW5mbykKKyAgICAg
ICAgICAgICAgICBYRnJlZSh2aXNJbmZvKTsKKworICAgICAgICAgICAgdmlzSW5mbyA9IGdsWEdl
dFZpc3VhbEZyb21GQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbaV0pOworICAgICAgICAg
ICAgaWYgKCF2aXNJbmZvKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQogICAgICAgICAgICAgaWYgKG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9u
KSB7Ci0gICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJG
aW5kVmlzdWFsRm9ybWF0KG1fc2hhcmVkRGlzcGxheSwgbV92aXN1YWxJbmZvLT52aXN1YWwpOwor
ICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZp
c3VhbEZvcm1hdChtX3NoYXJlZERpc3BsYXksIHZpc0luZm8tPnZpc3VhbCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmlnID0gdGVtcFtpXTsKICAgICAgICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmlzdWFsSW5mby0+ZGVwdGggPT0g
MzIpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmlzSW5mby0+ZGVwdGggPT0gMzIpIHsKICNl
bHNlCi0gICAgICAgICAgICBpZiAobV92aXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgeworICAgICAg
ICAgICAgaWYgKHZpc0luZm8tPmRlcHRoID09IDMyKSB7CiAjZW5kaWYKICAgICAgICAgICAgICAg
ICBzZWxlY3RlZENvbmZpZyA9IHRlbXBbaV07CiAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwpAQCAtMTQ0LDkgKzE0NywxMCBAQCBwcml2YXRlOgogICAgICAgICAvLyBEaWQgbm90IGZpbmQg
YW55IHZpc3VhbCBzdXBwb3J0aW5nIGFscGhhLCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBj
b25maWcuCiAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgIHNlbGVjdGVkQ29uZmln
ID0gdGVtcFswXTsKLSAgICAgICAgICAgIG1fdmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21G
QkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbMF0pOworICAgICAgICAgICAgdmlzSW5mbyA9
IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbMF0pOwogICAg
ICAgICB9CiAKKyAgICAgICAgbV92aXN1YWxJbmZvID0gKnZpc0luZm87CiAgICAgICAgIFhGcmVl
KHRlbXApOwogCiAgICAgICAgIHJldHVybiBzZWxlY3RlZENvbmZpZzsKQEAgLTE1NCw3ICsxNTgs
NyBAQCBwcml2YXRlOgogCiAgICAgR0xYRkJDb25maWcgbV9wYnVmZmVyRkJDb25maWc7CiAgICAg
R0xYRkJDb25maWcgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOwotICAgIFhWaXN1YWxJbmZvKiBt
X3Zpc3VhbEluZm87CisgICAgWFZpc3VhbEluZm8gbV92aXN1YWxJbmZvOwogICAgIERpc3BsYXkq
IG1fc2hhcmVkRGlzcGxheTsKICAgICBib29sIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwog
fTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IGY1MDIzNTcuLjgxZWZmMjkgMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5j
cHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmNwcApAQCAtNTEsOCArNTEsNyBAQCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFu
c3BvcnRTdXJmYWNlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbmF0aXZlUmVz
b3VyY2UtPnNldFZpc3VhbEluZm8obV9jb25maWdTZWxlY3Rvci0+dmlzdWFsSW5mbygpKTsKLSAg
ICBtX25hdGl2ZVJlc291cmNlLT5jcmVhdGVPZmZzY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxl
KTsKKyAgICBtX25hdGl2ZVJlc291cmNlLT5jcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVy
SGFuZGxlLCBtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKCkpOwogCiAgICAgaWYgKCFtX2J1
ZmZlckhhbmRsZSkgewogICAgICAgICBkZXN0cm95KCk7CmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3Vy
ZmFjZUdMWC5jcHAKaW5kZXggYzg5ZjlhZi4uMTdjM2UwMyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3Bw
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhp
Y3NTdXJmYWNlR0xYLmNwcApAQCAtMzQsMTYgKzM0LDE0IEBACiAjaW5jbHVkZSA8R0wvZ2wuaD4K
ICNlbmRpZgogCisjaW5jbHVkZSAiR0xYQ29uZmlnU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJYMTFX
aW5kb3dSZXNvdXJjZXMuaCIKKwogI2luY2x1ZGUgPEdML2dsZXh0Lmg+CiAjaW5jbHVkZSA8R0wv
Z2x4Lmg+Ci0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9Y
Y29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBsb25nIFgxMU92ZXJyaWRlUmVkaXJlY3QgPSAxTCA8
PCA5OwotCiBzdGF0aWMgUEZOR0xYQklORFRFWElNQUdFRVhUUFJPQyBwR2xYQmluZFRleEltYWdl
RVhUID0gMDsKIHN0YXRpYyBQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DIHBHbFhSZWxlYXNl
VGV4SW1hZ2VFWFQgPSAwOwogc3RhdGljIFBGTkdMQklOREZSQU1FQlVGRkVSUFJPQyBwR2xCaW5k
RnJhbWVidWZmZXIgPSAwOwpAQCAtNTIsMTMwICs1MCw2IEBAIHN0YXRpYyBQRk5HTEdFTkZSQU1F
QlVGRkVSU1BST0MgcEdsR2VuRnJhbWVidWZmZXJzID0gMDsKIHN0YXRpYyBQRk5HTERFTEVURUZS
QU1FQlVGRkVSU1BST0MgcEdsRGVsZXRlRnJhbWVidWZmZXJzID0gMDsKIHN0YXRpYyBQRk5HTEZS
QU1FQlVGRkVSVEVYVFVSRTJEUFJPQyBwR2xGcmFtZWJ1ZmZlclRleHR1cmUyRCA9IDA7CiAKLS8v
IFVzZWQgZm9yIGhhbmRsaW5nIFhFcnJvci4KLXN0YXRpYyBib29sIHZhbGlkT3BlcmF0aW9uID0g
dHJ1ZTsKLXN0YXRpYyBpbnQgaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IoRGlzcGxheSosIFhF
cnJvckV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkTWF0
Y2ggfHwgZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkV2luZG93IHx8IGV2ZW50LT5lcnJvcl9jb2Rl
ID09IEJhZEFsbG9jKSB7Ci0gICAgICAgIHZhbGlkT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAgICAg
ICAgc3dpdGNoIChldmVudC0+ZXJyb3JfY29kZSkgewotICAgICAgICBjYXNlIEJhZE1hdGNoOgot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRNYXRjaC4iKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEJhZFdpbmRvdzoKLSAgICAgICAgICAgIExPR19FUlJPUigiQmFkV2luZG93
LiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmFkQWxsb2M6Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIkJhZEFsbG9jLiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICBHTFhfTEVWRUws
IDAsCi0gICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAotICAgIEdMWF9SRU5E
RVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCi0gICAgR0xYX1JFRF9TSVpFLCAgICAgIDEsCi0gICAg
R0xYX0dSRUVOX1NJWkUsICAgIDEsCi0gICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCi0gICAgR0xY
X0FMUEhBX1NJWkUsICAgIDEsCi0gICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCi0gICAgR0xYX1hf
VklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAotICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVl
LAotICAgIE5vbmUKLX07Ci0KLWNsYXNzIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxl
ciB7Ci0KLXB1YmxpYzoKLSAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoRGlz
cGxheSogZGlzcGxheSkKLSAgICAgICAgOiBtX2Rpc3BsYXkoZGlzcGxheSkKLSAgICB7Ci0gICAg
ICAgIC8vIFhTeW5jIG11c3QgYmUgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGN1cnJlbnQgZXJyb3Jz
IGFyZSBoYW5kbGVkIGJ5IHRoZSBvcmlnaW5hbCBoYW5kbGVyLgotICAgICAgICBYU3luYyhtX2Rp
c3BsYXksIGZhbHNlKTsKLSAgICAgICAgbV9wcmV2aW91c0Vycm9ySGFuZGxlciA9IFhTZXRFcnJv
ckhhbmRsZXIoaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IpOwotICAgIH0KLQotICAgIH5TY29w
ZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgLy8gUmVzdG9y
ZSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KLSAgICAgICAgWFNldEVycm9ySGFuZGxlcihtX3ByZXZp
b3VzRXJyb3JIYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBib29sIGlzVmFsaWRPcGVyYXRpb24oKSBj
b25zdAotICAgIHsKLSAgICAgICAgdmFsaWRPcGVyYXRpb24gPSB0cnVlOwotICAgICAgICAvLyBY
U3luYyBpcyBuZWVkZWQgdG8gY2F0Y2ggcG9zc2libGUgZXJyb3JzIGFzIHRoZXkgYXJlIGdlbmVy
YXRlZCBhc3luY2hyb25vdXNseS4KLSAgICAgICAgWFN5bmMobV9kaXNwbGF5LCBmYWxzZSk7Ci0g
ICAgICAgIHJldHVybiB2YWxpZE9wZXJhdGlvbjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgWEVy
cm9ySGFuZGxlciBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyOwotICAgIERpc3BsYXkqIG1fZGlzcGxh
eTsKLX07Ci0KLS8vIEZJWE1FOiBUYWtlIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQgR0xYQ29uZmln
U2VsZWN0b3IgaW50byB1c2UuCi1jbGFzcyBPZmZTY3JlZW5Sb290V2luZG93IHsKLXB1YmxpYzoK
LSAgICBPZmZTY3JlZW5Sb290V2luZG93KCkKLSAgICB7Ci0gICAgICAgICsrbV9yZWZDb3VudDsK
LSAgICB9Ci0KLSAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCi0gICAgewotICAgICAgICBpZiAoIW1f
d2luZG93KSB7Ci0gICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSBkaXNwbGF5KCk7Ci0gICAgICAg
ICAgICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVmYXVsdFJvb3RXaW5k
b3coZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCksIFdoaXRlUGl4ZWwo
ZHB5LCAwKSk7Ci0gICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwot
ICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRydWU7Ci0gICAgICAg
ICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBYMTFPdmVycmlkZVJl
ZGlyZWN0LCAmYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAvLyBNYXAgd2luZG93IHRvIHRoZSBz
Y3JlZW4KLSAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dpbmRvdyk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gbV93aW5kb3c7Ci0gICAgfQotCi0gICAgRGlzcGxheSogZGlzcGxh
eSgpCi0gICAgewotICAgICAgICBpZiAoIW1fZGlzcGxheSkKLSAgICAgICAgICAgIG1fZGlzcGxh
eSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICAgICAgcmV0dXJuIG1fZGlzcGxheTsKLSAgICB9Ci0K
LSAgICB+T2ZmU2NyZWVuUm9vdFdpbmRvdygpCi0gICAgewotICAgICAgICBpZiAoLS1tX3JlZkNv
dW50IHx8ICFtX2Rpc3BsYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1f
d2luZG93KSB7Ci0gICAgICAgICAgICBYVW5tYXBXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7
Ci0gICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKLSAgICAg
ICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFhDbG9zZURpc3BsYXko
bV9kaXNwbGF5KTsKLSAgICAgICAgbV9kaXNwbGF5ID0gMDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIGludCBtX3JlZkNvdW50OwotICAgIHN0YXRpYyBXaW5kb3cgbV93aW5kb3c7Ci0g
ICAgc3RhdGljIERpc3BsYXkqIG1fZGlzcGxheTsKLX07Ci0KLWludCBPZmZTY3JlZW5Sb290V2lu
ZG93OjptX3JlZkNvdW50ID0gMDsKLVdpbmRvdyBPZmZTY3JlZW5Sb290V2luZG93OjptX3dpbmRv
dyA9IDA7Ci1EaXNwbGF5KiBPZmZTY3JlZW5Sb290V2luZG93OjptX2Rpc3BsYXkgPSAwOwotCiBz
dGF0aWMgY29uc3QgaW50IGdseFNwZWNbXSA9IHsKICAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBp
cyBhIHNldCBrZXkgdmFsdWUgcGFpcnMgc3RvcmVkIGluIGEgc2ltcGxlIGFycmF5LgogICAgIEdM
WF9MRVZFTCwgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCkBAIC0xOTUsMTUgKzY5LDEzIEBA
IHN0YXRpYyBjb25zdCBpbnQgZ2x4QXR0cmlidXRlc1tdID0gewogCiBzdHJ1Y3QgR3JhcGhpY3NT
dXJmYWNlUHJpdmF0ZSB7CiAgICAgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZShjb25zdCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIHNoYXJlQ29udGV4dCA9IDApCi0gICAgICAgIDogbV9kaXNwbGF5
KG1fb2ZmU2NyZWVuV2luZG93LmRpc3BsYXkoKSkKLSAgICAgICAgLCBtX3hQaXhtYXAoMCkKKyAg
ICAgICAgOiBtX3hQaXhtYXAoMCkKICAgICAgICAgLCBtX2dseFBpeG1hcCgwKQogICAgICAgICAs
IG1fc3VyZmFjZSgwKQogICAgICAgICAsIG1fZ2x4U3VyZmFjZSgwKQogICAgICAgICAsIG1fZ2xD
b250ZXh0KDApCiAgICAgICAgICwgbV9kZXRhY2hlZENvbnRleHQoMCkKICAgICAgICAgLCBtX2Rl
dGFjaGVkU3VyZmFjZSgwKQotICAgICAgICAsIG1fZmJDb25maWcoMCkKICAgICAgICAgLCBtX3Rl
eHR1cmVJc1lJbnZlcnRlZChmYWxzZSkKICAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQogICAg
ICAgICAsIG1faXNSZWNlaXZlcihmYWxzZSkKQEAgLTIyMCw3MCArOTIsNzIgQEAgc3RydWN0IEdy
YXBoaWNzU3VyZmFjZVByaXZhdGUgewogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHNoYXJl
Q29udGV4dCk7CiAjZW5kaWYKLQotICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7Ci0gICAgICAgIEdM
WEZCQ29uZmlnKiBmYkNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhtX2Rpc3BsYXksIERlZmF1
bHRTY3JlZW4obV9kaXNwbGF5KSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKLQotICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBjaG9vc2UgYSBjb25maWd1cmF0aW9uIHRoYXQgc3VwcG9y
dHMgYW4gYWxwaGEgbWFzay4KLSAgICAgICAgbV9mYkNvbmZpZyA9IGZpbmRGQkNvbmZpZ1dpdGhB
bHBoYShmYkNvbmZpZ3MsIG51bVJldHVybmVkKTsKLQotICAgICAgICBYRnJlZShmYkNvbmZpZ3Mp
OworICAgICAgICBpZiAoIWluaXRpYWxpemUoKSkKKyAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAvLyBDcmVhdGUgYSBHTFggY29udGV4dCBmb3IgT3BlbkdMIHJlbmRlcmluZwotICAgICAg
ICBtX2dsQ29udGV4dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQobV9kaXNwbGF5LCBtX2ZiQ29uZmln
LCBHTFhfUkdCQV9UWVBFLCBzaGFyZUNvbnRleHRPYmplY3QsIHRydWUpOworICAgICAgICBtX2ds
Q29udGV4dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQobV9kaXNwbGF5LCBtX2NvbmZpZ1NlbGVjdG9y
LT5zdXJmYWNlQ29udGV4dENvbmZpZygpLCBHTFhfUkdCQV9UWVBFLCBzaGFyZUNvbnRleHRPYmpl
Y3QsIHRydWUpOwogICAgIH0KIAogICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUodWludDMyX3Qg
d2luSWQpCi0gICAgICAgIDogbV9kaXNwbGF5KG1fb2ZmU2NyZWVuV2luZG93LmRpc3BsYXkoKSkK
LSAgICAgICAgLCBtX3hQaXhtYXAoMCkKKyAgICAgICAgOiBtX3hQaXhtYXAoMCkKICAgICAgICAg
LCBtX2dseFBpeG1hcCgwKQogICAgICAgICAsIG1fc3VyZmFjZSh3aW5JZCkKICAgICAgICAgLCBt
X2dseFN1cmZhY2UoMCkKICAgICAgICAgLCBtX2dsQ29udGV4dCgwKQogICAgICAgICAsIG1fZGV0
YWNoZWRDb250ZXh0KDApCiAgICAgICAgICwgbV9kZXRhY2hlZFN1cmZhY2UoMCkKLSAgICAgICAg
LCBtX2ZiQ29uZmlnKDApCiAgICAgICAgICwgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQoZmFsc2UpCiAg
ICAgICAgICwgbV9oYXNBbHBoYShmYWxzZSkKICAgICAgICAgLCBtX2lzUmVjZWl2ZXIodHJ1ZSkK
LSAgICB7IH0KKyAgICB7CisgICAgICAgIGluaXRpYWxpemUoKTsKKyAgICB9CiAKICAgICB+R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZSgpCiAgICAgewogICAgICAgICBjbGVhcigpOwogICAgIH0KIAor
ICAgIGJvb2wgaW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgICBtX25hdGl2ZVJlc291cmNlID0g
YWRvcHRQdHIobmV3IFgxMU9mZlNjcmVlbldpbmRvdygpKTsKKyAgICAgICAgbV9kaXNwbGF5ID0g
bV9uYXRpdmVSZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgpOworCisgICAgICAgIGlmICgh
bV9kaXNwbGF5KSB7CisgICAgICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29uZmlnU2Vs
ZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IobV9kaXNwbGF5LCBtX25hdGl2
ZVJlc291cmNlLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOworCisgICAgICAgIGlm
ICghbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSkgeworICAgICAgICAg
ICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHVpbnQzMl90IGNyZWF0ZVN1cmZhY2UoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKICAgICB7Ci0gICAgICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZv
ID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKG1fZGlzcGxheSwgbV9mYkNvbmZpZyk7Ci0gICAg
ICAgIGlmICghdmlzdWFsSW5mbykKKyAgICAgICAgaWYgKCFtX25hdGl2ZVJlc291cmNlIHx8ICFt
X2NvbmZpZ1NlbGVjdG9yKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgQ29sb3Jt
YXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChtX2Rpc3BsYXksIG1fb2ZmU2NyZWVuV2luZG93Lmdl
dFhXaW5kb3coKSwgdmlzdWFsSW5mby0+dmlzdWFsLCBBbGxvY05vbmUpOwotCi0gICAgICAgIFhT
ZXRXaW5kb3dBdHRyaWJ1dGVzIGE7Ci0gICAgICAgIGEuYmFja2dyb3VuZF9waXhlbCA9IFdoaXRl
UGl4ZWwobV9kaXNwbGF5LCAwKTsKLSAgICAgICAgYS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVs
KG1fZGlzcGxheSwgMCk7Ci0gICAgICAgIGEuY29sb3JtYXAgPSBjbWFwOwotICAgICAgICBtX3N1
cmZhY2UgPSBYQ3JlYXRlV2luZG93KG1fZGlzcGxheSwgbV9vZmZTY3JlZW5XaW5kb3cuZ2V0WFdp
bmRvdygpLCAwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksCi0gICAgICAgICAgICAw
LCB2aXN1YWxJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc3VhbEluZm8tPnZpc3VhbCwKLSAg
ICAgICAgICAgIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhKTsK
LSAgICAgICAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAobV9kaXNwbGF5LCBtX3N1cmZhY2Us
IDApOwotICAgICAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3cobV9kaXNwbGF5LCBtX3N1cmZh
Y2UsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKLSAgICAgICAgbV9nbHhTdXJmYWNlID0gZ2xY
Q3JlYXRlV2luZG93KG1fZGlzcGxheSwgbV9mYkNvbmZpZywgbV9zdXJmYWNlLCAwKTsKLSAgICAg
ICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBYUmVuZGVy
IEV4dGVuc2lvbiBpcyBhdmFpbGFibGUuCi0gICAgICAgIGludCBldmVudEJhc2VwLCBlcnJvckJh
c2VwOwotICAgICAgICBpZiAoIVhSZW5kZXJRdWVyeUV4dGVuc2lvbihtX2Rpc3BsYXksICZldmVu
dEJhc2VwLCAmZXJyb3JCYXNlcCkpCisgICAgICAgIG1fbmF0aXZlUmVzb3VyY2UtPmNyZWF0ZU9m
ZlNjcmVlbldpbmRvdygmbV9zdXJmYWNlLCBtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKCks
IHNpemUpOworCisgICAgICAgIGlmICghbV9zdXJmYWNlKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAgICAgWE1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fc3VyZmFjZSk7CisgICAgICAgIG1f
Z2x4U3VyZmFjZSA9IGdsWENyZWF0ZVdpbmRvdyhtX2Rpc3BsYXksIG1fY29uZmlnU2VsZWN0b3It
PnN1cmZhY2VDb250ZXh0Q29uZmlnKCksIG1fc3VyZmFjZSwgMCk7CiAgICAgICAgIHJldHVybiBt
X3N1cmZhY2U7CiAgICAgfQogCiAgICAgdm9pZCBjcmVhdGVQaXhtYXAodWludDMyX3Qgd2luSWQp
CiAgICAgeworICAgICAgICBpZiAoIW1fY29uZmlnU2VsZWN0b3IpCisgICAgICAgICAgICByZXR1
cm47CisKICAgICAgICAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKICAgICAgICAgaWYgKCFYR2V0
V2luZG93QXR0cmlidXRlcyhtX2Rpc3BsYXksIHdpbklkLCAmYXR0cikpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yOTgsMTIgKzE3Miw3IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRl
IHsKICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFs
Rm9ybWF0KG1fZGlzcGxheSwgYXR0ci52aXN1YWwpOwogICAgICAgICBtX2hhc0FscGhhID0gKGZv
cm1hdC0+dHlwZSA9PSBQaWN0VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sp
OwogCi0gICAgICAgIGludCBudW1iZXJPZkNvbmZpZ3M7Ci0gICAgICAgIEdMWEZCQ29uZmlnKiBj
b25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcobV9kaXNwbGF5LCBYRGVmYXVsdFNjcmVlbihtX2Rp
c3BsYXkpLCBnbHhTcGVjLCAmbnVtYmVyT2ZDb25maWdzKTsKLQotICAgICAgICAvLyBJZiBvcmln
aW4gd2luZG93IGhhcyBhbHBoYSB0aGVuIGZpbmQgY29uZmlnIHdpdGggYWxwaGEuCi0gICAgICAg
IEdMWEZCQ29uZmlnJiBjb25maWcgPSBtX2hhc0FscGhhID8gZmluZEZCQ29uZmlnV2l0aEFscGhh
KGNvbmZpZ3MsIG51bWJlck9mQ29uZmlncykgOiBjb25maWdzWzBdOwotCisgICAgICAgIEdMWEZC
Q29uZmlnIGNvbmZpZyA9IG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7
CiAgICAgICAgIG1feFBpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKG1fZGlzcGxh
eSwgd2luSWQpOwogICAgICAgICBtX2dseFBpeG1hcCA9IGdsWENyZWF0ZVBpeG1hcChtX2Rpc3Bs
YXksIGNvbmZpZywgbV94UGl4bWFwLCBnbHhBdHRyaWJ1dGVzKTsKIApAQCAtMzEzLDkgKzE4Miw5
IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICAgICAgICAgIHVpbnQgaW52
ZXJ0ZWQgPSAwOwogICAgICAgICAgICAgZ2xYUXVlcnlEcmF3YWJsZShtX2Rpc3BsYXksIG1fZ2x4
UGl4bWFwLCBHTFhfWV9JTlZFUlRFRF9FWFQsICZpbnZlcnRlZCk7CiAgICAgICAgICAgICBtX3Rl
eHR1cmVJc1lJbnZlcnRlZCA9ICEhaW52ZXJ0ZWQ7CisgICAgICAgICAgICBtX2ZsYWdzID0gbV90
ZXh0dXJlSXNZSW52ZXJ0ZWQgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0dXJlIDog
MDsKKyAgICAgICAgICAgIG1fZmxhZ3MgfD0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZDsK
ICAgICAgICAgfQotCi0gICAgICAgIFhGcmVlKGNvbmZpZ3MpOwogICAgIH0KIAogICAgIGJvb2wg
dGV4dHVyZUlzWUludmVydGVkKCkKQEAgLTQwOCwyNSArMjc3LDEwIEBAIHN0cnVjdCBHcmFwaGlj
c1N1cmZhY2VQcml2YXRlIHsKICAgICB9CiAKICAgICBib29sIGlzUmVjZWl2ZXIoKSBjb25zdCB7
IHJldHVybiBtX2lzUmVjZWl2ZXI7IH0KLXByaXZhdGU6Ci0gICAgR0xYRkJDb25maWcmIGZpbmRG
QkNvbmZpZ1dpdGhBbHBoYShHTFhGQkNvbmZpZyogZmJDb25maWdzLCBpbnQgbnVtYmVyT2ZDb25m
aWdzKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbmZpZ3M7
ICsraSkgewotICAgICAgICAgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBnbFhHZXRWaXN1
YWxGcm9tRkJDb25maWcobV9kaXNwbGF5LCBmYkNvbmZpZ3NbaV0pOwotICAgICAgICAgICAgaWYg
KCF2aXN1YWxJbmZvKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBY
UmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQobV9kaXNw
bGF5LCB2aXN1YWxJbmZvLT52aXN1YWwpOwotICAgICAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7
Ci0KLSAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4g
MCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmJDb25maWdzW2ldOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gUmV0dXJuIDFzdCBjb25maWcgYXMgYSBmYWxsYmFjayB3aXRoIG5vIGFscGhhIHN1
cHBvcnQuCi0gICAgICAgIHJldHVybiBmYkNvbmZpZ3NbMF07Ci0gICAgfQorICAgIFRleHR1cmVN
YXBwZXJHTDo6RmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAKK3ByaXZh
dGU6CiAgICAgdm9pZCBjbGVhcigpCiAgICAgewogICAgICAgICBpZiAobV9nbHhQaXhtYXApIHsK
QEAgLTQ0OCwyMiArMzAyLDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBnbFhEZXN0cm95Q29u
dGV4dChtX2Rpc3BsYXksIG1fZ2xDb250ZXh0KTsKICAgICAgICAgICAgIG1fZ2xDb250ZXh0ID0g
MDsKICAgICAgICAgfQorCisgICAgICAgIGlmIChtX2NvbmZpZ1NlbGVjdG9yKQorICAgICAgICAg
ICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKG1fbmF0aXZlUmVz
b3VyY2UpCisgICAgICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKICAgICB9CiAK
LSAgICBPZmZTY3JlZW5Sb290V2luZG93IG1fb2ZmU2NyZWVuV2luZG93OwogICAgIEludFNpemUg
bV9zaXplOwogICAgIERpc3BsYXkqIG1fZGlzcGxheTsKICAgICBQaXhtYXAgbV94UGl4bWFwOwog
ICAgIEdMWFBpeG1hcCBtX2dseFBpeG1hcDsKLSAgICBXaW5kb3cgbV9zdXJmYWNlOworICAgIHVp
bnQzMl90IG1fc3VyZmFjZTsKICAgICBXaW5kb3cgbV9nbHhTdXJmYWNlOwogICAgIEdMWENvbnRl
eHQgbV9nbENvbnRleHQ7CiAgICAgR0xYQ29udGV4dCBtX2RldGFjaGVkQ29udGV4dDsKICAgICBH
TFhEcmF3YWJsZSBtX2RldGFjaGVkU3VyZmFjZTsKLSAgICBHTFhGQkNvbmZpZyBtX2ZiQ29uZmln
OworICAgIE93blB0cjxYMTFPZmZTY3JlZW5XaW5kb3c+IG1fbmF0aXZlUmVzb3VyY2U7CisgICAg
T3duUHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9yOwogICAgIGJvb2wgbV90
ZXh0dXJlSXNZSW52ZXJ0ZWQ7CiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9pc1Jl
Y2VpdmVyOworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgbV9mbGFnczsKIH07CiAKIHN0YXRp
YyBib29sIHJlc29sdmVHTE1ldGhvZHMoKQpAQCAtNTIzLDE3ICszODQsMTUgQEAgdm9pZCBHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwKICAgICBJbnRTaXplIHNpemUgPSBtX3ByaXZhdGUtPnNpemUoKTsKICAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKKwogICAgIHVpbnQzMl90IHRl
eHR1cmUgPSBwbGF0Zm9ybUdldFRleHR1cmVJRCgpOwogICAgIGlmICghdGV4dHVyZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IG1fcHJpdmF0
ZS0+dGV4dHVyZUlzWUludmVydGVkKCkgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0
dXJlIDogMDsKLSAgICBmbGFncyB8PSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kOwotCiAg
ICAgRmxvYXRSZWN0IHJlY3RPbkNvbnRlbnRzKEZsb2F0UG9pbnQ6Onplcm8oKSwgc2l6ZSk7CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07CiAg
ICAgYWRqdXN0ZWRUcmFuc2Zvcm0ubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RU
b1JlY3QocmVjdE9uQ29udGVudHMsIHRhcmdldFJlY3QpKTsKLSAgICBzdGF0aWNfY2FzdDxUZXh0
dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmUodGV4dHVyZSwgZmxhZ3Ms
IHNpemUsIHJlY3RPbkNvbnRlbnRzLCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7
CisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlciktPmRyYXdU
ZXh0dXJlKHRleHR1cmUsIG1fcHJpdmF0ZS0+ZmxhZ3MoKSwgc2l6ZSwgcmVjdE9uQ29udGVudHMs
IGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKIH0KIAogdWludDMyX3QgR3JhcGhp
Y3NTdXJmYWNlOjpwbGF0Zm9ybUZyb250QnVmZmVyKCkgY29uc3QKQEAgLTU0MywxMiArNDAyLDEx
IEBAIHVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcigpIGNvbnN0
CiAKIHVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Td2FwQnVmZmVycygpCiB7Ci0g
ICAgaWYgKG1fcHJpdmF0ZS0+aXNSZWNlaXZlcigpICYmIHBsYXRmb3JtR2V0VGV4dHVyZUlEKCkp
IHsKKyAgICBpZiAobV9wcml2YXRlLT5pc1JlY2VpdmVyKCkpIHsKICAgICAgICAgZ2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBwbGF0Zm9ybUdldFRleHR1cmVJRCgpKTsKICAgICAgICAgLy8g
UmVsZWFzZSBwcmV2aW91cyBsb2NrIGFuZCByZWJpbmQgdGV4dHVyZSB0byBzdXJmYWNlIHRvIGdl
dCBmcmFtZSB1cGRhdGUuCiAgICAgICAgIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQobV9wcml2YXRl
LT5kaXNwbGF5KCksIG1fcHJpdmF0ZS0+Z2x4UGl4bWFwKCksIEdMWF9GUk9OVF9FWFQpOwogICAg
ICAgICBwR2xYQmluZFRleEltYWdlRVhUKG1fcHJpdmF0ZS0+ZGlzcGxheSgpLCBtX3ByaXZhdGUt
PmdseFBpeG1hcCgpLCBHTFhfRlJPTlRfRVhULCAwKTsKLQogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcAppbmRleCA1YTU3YTgxLi5l
N2IyOWIyIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCkBAIC0zNCwxNyAr
MzQsMTIgQEAgU2hhcmVkWDExUmVzb3VyY2VzKiBTaGFyZWRYMTFSZXNvdXJjZXM6Om1fc3RhdGlj
U2hhcmVkUmVzb3VyY2UgPSAwOwogCiBYMTFPZmZTY3JlZW5XaW5kb3c6OlgxMU9mZlNjcmVlbldp
bmRvdygpCiAgICAgOiBtX3NoYXJlZFJlc291cmNlcygwKQotICAgICwgbV9jb25maWdWaXN1YWxJ
bmZvKDApCiB7CiAgICAgbV9zaGFyZWRSZXNvdXJjZXMgPSBTaGFyZWRYMTFSZXNvdXJjZXM6OmNy
ZWF0ZSgpOwogfQogCiBYMTFPZmZTY3JlZW5XaW5kb3c6On5YMTFPZmZTY3JlZW5XaW5kb3coKQog
ewotICAgIGlmIChtX2NvbmZpZ1Zpc3VhbEluZm8pIHsKLSAgICAgICAgWEZyZWUobV9jb25maWdW
aXN1YWxJbmZvKTsKLSAgICAgICAgbV9jb25maWdWaXN1YWxJbmZvID0gMDsKLSAgICB9CiB9CiAK
IHZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpyZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYgbmV3
UmVjdCwgY29uc3QgdWludDMyX3Qgd2luZG93SWQpCkBAIC01Myw3ICs0OCw4IEBAIHZvaWQgWDEx
T2ZmU2NyZWVuV2luZG93OjpyZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYgbmV3UmVjdCwgY29u
c3QgdWludDMyX3Qgd2luCiAgICAgWEZsdXNoKG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5
KCkpOwogfQogCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93
KHVpbnQzMl90KiBoYW5kbGVJZCkKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgWDEx
T2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlk
LCBjb25zdCBYVmlzdWFsSW5mbyYgdmlzSW5mbywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAg
ICBpZiAoIW1fc2hhcmVkUmVzb3VyY2VzKQogICAgICAgICByZXR1cm47CkBAIC02Miw3ICs1OCw3
IEBAIHZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5XaW5kb3codWludDMy
X3QqIGhhbmRsZUlkKQogICAgIGlmICghZGlzcGxheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFtX2NvbmZpZ1Zpc3VhbEluZm8pIHsKKyAgICBpZiAoIXZpc0luZm8udmlzdWFsKSB7CiAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbC4iKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTcxLDEzICs2NywxMyBAQCB2b2lkIFgxMU9mZlNjcmVlbldp
bmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCkKICAgICBpZiAo
IXhXaW5kb3cpCiAgICAgICAgIHJldHVybjsKIAotICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRl
Q29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdywgbV9jb25maWdWaXN1YWxJbmZvLT52aXN1YWwsIEFs
bG9jTm9uZSk7CisgICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4
V2luZG93LCB2aXNJbmZvLnZpc3VhbCwgQWxsb2NOb25lKTsKICAgICBYU2V0V2luZG93QXR0cmli
dXRlcyBhdHRyaWJ1dGU7CiAgICAgYXR0cmlidXRlLmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBp
eGVsKGRpc3BsYXksIDApOwogICAgIGF0dHJpYnV0ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVs
KGRpc3BsYXksIDApOwogICAgIGF0dHJpYnV0ZS5jb2xvcm1hcCA9IGNtYXA7CiAgICAgdWludDMy
X3QgdGVtcEhhbmRsZUlkOwotICAgIHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVXaW5kb3coZGlzcGxh
eSwgeFdpbmRvdywgMCwgMCwgMSwgMSwgMCwgbV9jb25maWdWaXN1YWxJbmZvLT5kZXB0aCwgSW5w
dXRPdXRwdXQsIG1fY29uZmlnVmlzdWFsSW5mby0+dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9y
ZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKKyAgICB0ZW1wSGFuZGxlSWQgPSBY
Q3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwgMCwgdmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8udmlzdWFsLCBD
V0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKIAog
ICAgIGlmICghdGVtcEhhbmRsZUlkKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNy
ZWF0ZSBvZmZzY3JlZW4gd2luZG93LiIpOwpAQCAtODUsMzMgKzgxLDE0IEBAIHZvaWQgWDExT2Zm
U2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkKQog
ICAgIH0KIAogICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXksIHRlbXBIYW5k
bGVJZCwgMCk7CisKICAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgdGVtcEhh
bmRsZUlkLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisgICAgWE1hcFdpbmRvdyhkaXNwbGF5
LCB0ZW1wSGFuZGxlSWQpOwogICAgICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsKLQotICAgIGlm
IChtX3NoYXJlZFJlc291cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpCi0gICAg
ICAgIFhNYXBXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkKTsKLQotfQotCi12b2lkIFgxMU9m
ZlNjcmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdyhjb25zdCB1aW50MzJfdCB3aW5kb3dJZCkKLXsK
LSAgICBpZiAoIXdpbmRvd0lkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXNwbGF5KiBkaXNw
bGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKLSAgICBpZiAoIWRpc3BsYXkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIHdpbmRvd0lk
KTsKLX0KLQotRGlzcGxheSogWDExT2ZmU2NyZWVuV2luZG93OjpuYXRpdmVTaGFyZWREaXNwbGF5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsK
IH0KIAogI2lmIFVTRShFR0wpCi1ib29sIFgxMU9mZlNjcmVlbldpbmRvdzo6c2V0VmlzdWFsSWQo
Y29uc3QgRUdMaW50IGlkKQordm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0ZU9mZlNjcmVl
bldpbmRvdyh1aW50MzJfdCogaGFuZGxlSWQsIGNvbnN0IEVHTGludCBpZCkKIHsKICAgICBWaXN1
YWxJRCB2aXN1YWxJZCA9IHN0YXRpY19jYXN0PFZpc3VhbElEPihpZCk7CiAKQEAgLTEyMyw1MCAr
MTAwLDY4IEBAIGJvb2wgWDExT2ZmU2NyZWVuV2luZG93OjpzZXRWaXN1YWxJZChjb25zdCBFR0xp
bnQgaWQpCiAgICAgbWVtc2V0KCZ2aXN1YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFs
SW5mbykpOwogICAgIHZpc3VhbEluZm9UZW1wbGF0ZS52aXN1YWxpZCA9IHZpc3VhbElkOwogCi0g
ICAgWFZpc3VhbEluZm8qIGNob3NlblZpc3VhbEluZm87CiAgICAgaW50IG1hdGNoaW5nQ291bnQg
PSAwOwotICAgIGNob3NlblZpc3VhbEluZm8gPSBYR2V0VmlzdWFsSW5mbyhtX3NoYXJlZFJlc291
cmNlcy0+eDExRGlzcGxheSgpLCBWaXN1YWxJRE1hc2ssICZ2aXN1YWxJbmZvVGVtcGxhdGUsICZt
YXRjaGluZ0NvdW50KTsKKyAgICBYVmlzdWFsSW5mbyogY2hvc2VuVmlzdWFsSW5mbyA9IFhHZXRW
aXN1YWxJbmZvKG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIFZpc3VhbElETWFzaywg
JnZpc3VhbEluZm9UZW1wbGF0ZSwgJm1hdGNoaW5nQ291bnQpOworICAgIFhWaXN1YWxJbmZvKiBm
b3VuZFZpc3VhbCA9IDA7CisgICAgWFZpc3VhbEluZm8gdmlzSW5mbzsKKyAgICBpbnQgdmlzdWFs
RGVwdGggPSBjaG9zZW5WaXN1YWxJbmZvLT5kZXB0aDsKKwogICAgIGlmIChjaG9zZW5WaXN1YWxJ
bmZvKSB7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgICAgIGlmIChtX3NoYXJlZFJl
c291cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgIFhS
ZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX3NoYXJl
ZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCBjaG9zZW5WaXN1YWxJbmZvLT52aXN1YWwpOwotICAg
ICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgbV9jb25maWdWaXN1YWxJbmZvID0gY2hvc2VuVmlzdWFsSW5mbzsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2Vu
ZGlmCi0gICAgICAgIGlmIChjaG9zZW5WaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgewotICAgICAg
ICAgICAgbV9jb25maWdWaXN1YWxJbmZvID0gY2hvc2VuVmlzdWFsSW5mbzsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5h
bHBoYU1hc2sgPiAwKQorICAgICAgICAgICAgICAgIGZvdW5kVmlzdWFsID0gY2hvc2VuVmlzdWFs
SW5mbzsKICAgICAgICAgfQorCisgICAgICAgIGlmICghbV9jb25maWdWaXN1YWxJbmZvICYmIHZp
c3VhbERlcHRoID09IDMyKQorICAgICAgICAgICAgZm91bmRWaXN1YWwgPSBjaG9zZW5WaXN1YWxJ
bmZvOwogICAgIH0KIAotICAgIGlmICghbV9jb25maWdWaXN1YWxJbmZvKSB7CisgICAgaWYgKCFm
b3VuZFZpc3VhbCkgewogICAgICAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwgc2l6
ZW9mKFhWaXN1YWxJbmZvKSk7Ci0gICAgICAgIFhWaXN1YWxJbmZvKiBtYXRjaGluZ1Zpc3VhbHM7
Ci0gICAgICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKLQotICAgICAgICB2aXN1YWxJbmZvVGVt
cGxhdGUuZGVwdGggPSBjaG9zZW5WaXN1YWxJbmZvLT5kZXB0aDsKLSAgICAgICAgbWF0Y2hpbmdW
aXN1YWxzID0gWEdldFZpc3VhbEluZm8obV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwg
VmlzdWFsRGVwdGhNYXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7Cisg
ICAgICAgIHZpc3VhbEluZm9UZW1wbGF0ZS5kZXB0aCA9IHZpc3VhbERlcHRoOworICAgICAgICBY
VmlzdWFsSW5mbyogbWF0Y2hpbmdWaXN1YWxzID0gWEdldFZpc3VhbEluZm8obV9zaGFyZWRSZXNv
dXJjZXMtPngxMURpc3BsYXkoKSwgVmlzdWFsRGVwdGhNYXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRl
LCAmbWF0Y2hpbmdDb3VudCk7CiAKICAgICAgICAgaWYgKG1hdGNoaW5nVmlzdWFscykgewotICAg
ICAgICAgICAgbV9jb25maWdWaXN1YWxJbmZvID0gJm1hdGNoaW5nVmlzdWFsc1swXTsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpPCBtYXRjaGluZ0NvdW50OyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBjaG9zZW5WaXN1YWxJbmZvID0gJm1hdGNoaW5nVmlzdWFsc1swXTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2hvc2VuVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm91bmRWaXN1YWwgPSBjaG9zZW5WaXN1YWxJbmZvOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChmb3VuZFZpc3VhbCkKKyAgICAgICAgICAgICAgICB2aXNJbmZvID0gKmZvdW5kVmlz
dWFsOworCiAgICAgICAgICAgICBYRnJlZShtYXRjaGluZ1Zpc3VhbHMpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB2aXNJbmZvID0g
KmZvdW5kVmlzdWFsOworICAgICAgICBYRnJlZShjaG9zZW5WaXN1YWxJbmZvKTsKICAgICB9CiAK
LSAgICBpZiAoIW1fY29uZmlnVmlzdWFsSW5mbykKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gcmV0cmlldmUgWFZpc3VhbCBJbmZvLiIpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGNy
ZWF0ZU9mZlNjcmVlbldpbmRvdyhoYW5kbGVJZCwgdmlzSW5mbyk7CiB9CiAjZW5kaWYKIAotdm9p
ZCBYMTFPZmZTY3JlZW5XaW5kb3c6OnNldFZpc3VhbEluZm8oWFZpc3VhbEluZm8qIHZpc0luZm8p
CisjZW5kaWYKKwordm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coY29uc3Qg
dWludDMyX3Qgd2luZG93SWQpCit7CisgICAgaWYgKCF3aW5kb3dJZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRGlzcGxheSogZGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5
KCk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBYRGVzdHJveVdp
bmRvdyhkaXNwbGF5LCB3aW5kb3dJZCk7Cit9CisKK0Rpc3BsYXkqIFgxMU9mZlNjcmVlbldpbmRv
dzo6bmF0aXZlU2hhcmVkRGlzcGxheSgpIGNvbnN0CiB7Ci0gICAgbV9jb25maWdWaXN1YWxJbmZv
ID0gdmlzSW5mbzsKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsK
IH0KIAogYm9vbCBYMTFPZmZTY3JlZW5XaW5kb3c6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCgpIGNvbnN0CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaAppbmRleCBhMzk4NjVkLi45
MTJiMjMxIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKQEAgLTMwLDcgKzMwLDYg
QEAKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKIAotI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00MCw4ICszOSw2NSBAQAogI2luY2x1
ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8WDExL1hs
aWIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBVc2VkIGZvciBoYW5kbGluZyBYRXJy
b3IuCitzdGF0aWMgYm9vbCB2YWxpZE9wZXJhdGlvbiA9IHRydWU7CitzdGF0aWMgaW50IGhhbmRs
ZVhQaXhtYXBDcmVhdGlvbkVycm9yKERpc3BsYXkqLCBYRXJyb3JFdmVudCogZXZlbnQpCit7Cisg
ICAgaWYgKGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZE1hdGNoIHx8IGV2ZW50LT5lcnJvcl9jb2Rl
ID09IEJhZFdpbmRvdyB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRBbGxvYykgeworICAgICAg
ICB2YWxpZE9wZXJhdGlvbiA9IGZhbHNlOworCisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmVycm9y
X2NvZGUpIHsKKyAgICAgICAgY2FzZSBCYWRNYXRjaDoKKyAgICAgICAgICAgIExPR19FUlJPUigi
QmFkTWF0Y2guIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCYWRXaW5kb3c6
CisgICAgICAgICAgICBMT0dfRVJST1IoIkJhZFdpbmRvdy4iKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEJhZEFsbG9jOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRBbGxv
Yy4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworY2xhc3MgU2Nv
cGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyIHsKKworcHVibGljOgorICAgIFNjb3BlZFhQ
aXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcihEaXNwbGF5KiBkaXNwbGF5KQorICAgICAgICA6IG1f
ZGlzcGxheShkaXNwbGF5KQorICAgIHsKKyAgICAgICAgLy8gWFN5bmMgbXVzdCBiZSBjYWxsZWQg
dG8gZW5zdXJlIHRoYXQgY3VycmVudCBlcnJvcnMgYXJlIGhhbmRsZWQgYnkgdGhlIG9yaWdpbmFs
IGhhbmRsZXIuCisgICAgICAgIFhTeW5jKG1fZGlzcGxheSwgZmFsc2UpOworICAgICAgICBtX3By
ZXZpb3VzRXJyb3JIYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcihoYW5kbGVYUGl4bWFwQ3JlYXRp
b25FcnJvcik7CisgICAgfQorCisgICAgflNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxl
cigpCisgICAgeworICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBoYW5kbGVyLgorICAg
ICAgICBYU2V0RXJyb3JIYW5kbGVyKG1fcHJldmlvdXNFcnJvckhhbmRsZXIpOworICAgIH0KKwor
ICAgIGJvb2wgaXNWYWxpZE9wZXJhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICB2YWxpZE9w
ZXJhdGlvbiA9IHRydWU7CisgICAgICAgIC8vIFhTeW5jIGlzIG5lZWRlZCB0byBjYXRjaCBwb3Nz
aWJsZSBlcnJvcnMgYXMgdGhleSBhcmUgZ2VuZXJhdGVkIGFzeW5jaHJvbm91c2x5LgorICAgICAg
ICBYU3luYyhtX2Rpc3BsYXksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHZhbGlkT3BlcmF0aW9u
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBYRXJyb3JIYW5kbGVyIG1fcHJldmlvdXNFcnJvckhh
bmRsZXI7CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworfTsKKwogY2xhc3MgU2hhcmVkWDExUmVz
b3VyY2VzIDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNoYXJlZFgxMVJlc291cmNlcyk7CiAKQEAgLTE0MywxOSArMTk5LDE5IEBAIGNsYXNz
IFgxMU9mZlNjcmVlbldpbmRvdyB7CiBwdWJsaWM6CiAgICAgWDExT2ZmU2NyZWVuV2luZG93KCk7
CiAgICAgdmlydHVhbCB+WDExT2ZmU2NyZWVuV2luZG93KCk7Ci0gICAgdm9pZCBjcmVhdGVPZmZz
Y3JlZW5XaW5kb3codWludDMyX3QqKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2
b2lkIGNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCosIGNvbnN0IFhWaXN1YWxJbmZvJiwg
Y29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKDEsMSkpOworI2lmIFVTRShFR0wpCisgICAgdm9pZCBj
cmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBFR0xpbnQpOworI2VuZGlmCisj
ZW5kaWYKICAgICB2b2lkIGRlc3Ryb3lXaW5kb3coY29uc3QgdWludDMyX3QpOwogICAgIHZvaWQg
cmVTaXplV2luZG93KGNvbnN0IEludFJlY3QmLCBjb25zdCB1aW50MzJfdCk7CiAgICAgRGlzcGxh
eSogbmF0aXZlU2hhcmVkRGlzcGxheSgpIGNvbnN0OwotI2lmIFVTRShFR0wpCi0gICAgYm9vbCBz
ZXRWaXN1YWxJZChjb25zdCBFR0xpbnQpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRWaXN1YWxJbmZv
KFhWaXN1YWxJbmZvKik7CiAgICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBj
b25zdDsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBtX3NoYXJl
ZFJlc291cmNlczsKLSAgICBYVmlzdWFsSW5mbyogbV9jb25maWdWaXN1YWxJbmZvOwogfTsKIAog
fQpkaWZmIC0tZ2l0IFRvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIFRv
b2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCmluZGV4IGNjOTA3MmQuLmUz
OWMwYzIgMTAwNjQ0Ci0tLSBUb29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnBy
ZgorKysgVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKQEAgLTEzOCw3
ICsxMzgsNyBAQCBkZWZpbmVUZXN0KGRldGVjdEZlYXR1cmVzKSB7CiAgICAgdXNlPygzZF9ncmFw
aGljcykgewogICAgICAgICBtYWM6IFdFQktJVF9DT05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZh
Y2UKICAgICAgICAgd2luMzI6Y29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2xlczIpOiBXRUJLSVRf
Q09ORklHICs9IHVzZV9ncmFwaGljc19zdXJmYWNlCi0gICAgICAgIGxpbnV4LSo6Y29udGFpbnMo
V0VCS0lUX0NPTkZJRywgaGF2ZV9nbHgpOmNvbnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfeGNv
bXBvc2l0ZSk6Y29udGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV94cmVuZGVyKTogV0VCS0lUX0NP
TkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFjZQorICAgICAgICBsaW51eC0qOmNvbnRhaW5zKFdF
QktJVF9DT05GSUcsIGhhdmVfZ2x4KTpjb250YWlucyhXRUJLSVRfQ09ORklHLCBoYXZlX3hjb21w
b3NpdGUpOmNvbnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfeHJlbmRlcik6IFdFQktJVF9DT05G
SUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZhY2UgdXNlX2dseAogICAgIH0KIAogICAgICMgU2xpZGVy
IFRvdWNoIGlzIHNlbnNpYmxlIHRvIHVzZSB3aGVuIGNvbXBpbGluZyBXZWJLaXQyCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186267</attachid>
            <date>2013-02-03 13:43:00 -0800</date>
            <delta_ts>2013-02-03 17:09:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>review.patch</filename>
            <type>text/plain</type>
            <size>60725</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDE3OWZhN2UuLjdmNWZhNDkgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEz
LTAyLTAzICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtRdF1bV2ViR0xdIFNoYXJlIHRoZSBjb21tb24gY29kZSBiZXR3ZWVu
IEdyYXBoaWNzU3VyZmFjZUdMWCBhbmQgWDExV2luZG93UmVzb3VyY2VzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBX
ZWJHTCB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IGR1cGxpY2F0ZSBj
b2RlIGluIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlR0xY
LiBObyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVHTENvbmZpZ1NlbGVjdG9yOjpwaXhtYXBDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaDoKKyAgICAgICAg
KEVHTENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oOgorICAgICAgICAo
V2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OkdMWENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OkdMWENvbmZpZ1NlbGVjdG9yOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6Y3JlYXRlU3VyZmFjZUNvbmZpZyk6CisgICAgICAg
IChHTFhDb25maWdTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUFSQkV4
dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6R0xYT2Zm
U2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRm
b3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4
dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWENvbnRleHQuaDoKKyAgICAgICAgKEdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhQQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oOgorICAgICAgICAoR0xYVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChHTFhQQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6R3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpp
bml0aWFsaXplKToKKyAgICAgICAgKEdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjcmVhdGVQaXhtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpmbGFncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICBObyBu
ZXcgZnVuY3Rpb25hbGl0eSBhZGRlZC4gTWFkZSBjaGFuZ2VzIHRvIHRha2UgdGhlIGNvbW1vbiBj
b2RlIGludG8gdXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMVdpbmRvd1Jlc291cmNlcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFXcmFwcGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3Bw
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q29ubmVjdGlv
bjo6RGlzcGxheUNvbm5lY3Rpb24pOgorICAgICAgICAoRGlzcGxheUNvbm5lY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUNvbm5lY3Rpb246On5EaXNwbGF5Q29ubmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q29ubmVjdGlvbjo6ZGlzcGxheSk6CisgICAgICAgIChP
ZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZlNjcmVlblJvb3RXaW5k
b3c6Ok9mZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmU2NyZWVuUm9v
dFdpbmRvdzo6fk9mZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmU2Ny
ZWVuUm9vdFdpbmRvdzo6cm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpYMTFXcmFwcGVy
OjpyZXNpemVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6WDExV3JhcHBlcjo6Y3JlYXRlT2Zm
U2NyZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMVdyYXBwZXI6OmRlc3Ryb3lXaW5k
b3cpOgorICAgICAgICAoV2ViQ29yZTo6WDExV3JhcHBlcjo6aXNYUmVuZGVyRXh0ZW5zaW9uU3Vw
cG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6WDExV3JhcHBlcjo6b2Zmc2NyZWVuUm9vdFdpbmRvdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdyYXBwZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVhQaXhtYXBDcmVh
dGlvbkVycm9yKToKKyAgICAgICAgKFgxMVdyYXBwZXIpOgorICAgICAgICAoU2NvcGVkWFBpeG1h
cENyZWF0aW9uRXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBD
cmVhdGlvbkVycm9ySGFuZGxlcjo6U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6flNj
b3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY29w
ZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24pOgorICAgICAg
ICBSZW5hbWVkIFgxMVdpbmRvd1Jlc291cmNlcyBhcyBYMTFXcmFwcGVyLiBNb3ZlZCBjb21tb24g
Y29kZSBmcm9tIEdyYXBoaWNzU3VyZmFjZUdMWCB0byBYMTFXcmFwcGVyLgorCiAyMDEzLTAyLTAz
ICBNaWtlIFdlc3QgIDxta3dzdEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2xlYW51cDogJ0V4
Y2VwdGlvbkNvZGUmIGVjJywgbm90ICdFeGNlcHRpb25Db2RlICZlYycuCmRpZmYgLS1naXQgU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwu
Y21ha2UKaW5kZXggMzQzMjE1ZS4uYWZkNGJmZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
MTMxLDkgKzEzMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9HTFhTdXJmYWNlLmNwcAotCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3Jt
YXQuY3BwCiAKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJD
YWlyby5jcHAKQEAgLTMxNCw4ICszMTEsNyBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFj
ZS5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3Vy
ZmFjZUdMWC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdp
bmRvd1Jlc291cmNlcy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMVdyYXBwZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbS5jcHAKICAgICApCkBAIC0zMjYsNiArMzIyLDEyIEBAIGlmIChXVEZf
VVNFXzNEX0dSQVBISUNTKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbnRleHQuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5jcHAKICAgICAgICAgKQorICAgIGVsc2UgKCkKKyAgICAgICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKKyAgICAgICAgKQogICAgIGVu
ZGlmICgpCiAKICAgICBpZiAoV1RGX1VTRV9PUEVOR0xfRVNfMikKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggOTBlZmM0
MC4uNDRlYjZhYSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQxOTEsNyArNDE5MSwxMiBAQCB1c2U/KEdSQVBISUNT
X1NVUkZBQ0UpIHsKICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy93aW4vR3JhcGhpY3NTdXJmYWNlV2luLmNwcAogICAgIH0KICAgICBoYXZlPyhYQ09NUE9TSVRF
KSB7Ci0gICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dy
YXBoaWNzU3VyZmFjZUdMWC5jcHAKKyAgICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV3JhcHBlci5oIFwKKyAgICAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oCisgICAg
ICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L1gxMVdyYXBwZXIuY3BwIFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAgfQogfQogCmRpZmYgLS1naXQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVj
dG9yLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
Q29uZmlnU2VsZWN0b3IuY3BwCmluZGV4IGNiY2QyMTIuLjBmNzFhOTUgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0
b3IuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wv
RUdMQ29uZmlnU2VsZWN0b3IuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgUGxhdGZvcm1EaXNwbGF5
IEVHTENvbmZpZ1NlbGVjdG9yOjpkaXNwbGF5KCkgY29uc3QKICAgICByZXR1cm4gbV9zaGFyZWRE
aXNwbGF5LT5zaGFyZWRFR0xEaXNwbGF5KCk7CiB9CiAKLUVHTENvbmZpZyBFR0xDb25maWdTZWxl
Y3Rvcjo6cEJ1ZmZlckNvbnRleHRDb25maWcoKQorRUdMQ29uZmlnIEVHTENvbmZpZ1NlbGVjdG9y
OjpwaXhtYXBDb250ZXh0Q29uZmlnKCkKIHsKICAgICBpZiAoIW1fcGJ1ZmZlckZCQ29uZmlnKSB7
CiAgICAgICAgIGNvbmZpZ0F0dHJpYnV0ZUxpc3RbMTNdID0gRUdMX1BJWE1BUF9CSVQ7CmRpZmYg
LS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENv
bmZpZ1NlbGVjdG9yLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmgKaW5kZXggNjYzMWFkYy4uNTViNWY5MSAxMDA2NDQKLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdT
ZWxlY3Rvci5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9l
Z2wvRUdMQ29uZmlnU2VsZWN0b3IuaApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgRUdM
Q29uZmlnU2VsZWN0b3IoTmF0aXZlU2hhcmVkRGlzcGxheSogPSAwKTsKICAgICB2aXJ0dWFsIH5F
R0xDb25maWdTZWxlY3RvcigpOwogICAgIFBsYXRmb3JtRGlzcGxheSBkaXNwbGF5KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBFR0xDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKTsKKyAgICB2aXJ0
dWFsIEVHTENvbmZpZyBwaXhtYXBDb250ZXh0Q29uZmlnKCk7CiAgICAgdmlydHVhbCBFR0xDb25m
aWcgc3VyZmFjZUNvbnRleHRDb25maWcoKTsKICAgICBFR0xpbnQgbmF0aXZlVmlzdWFsSWQoY29u
c3QgRUdMQ29uZmlnJikgY29uc3Q7CiAgICAgdm9pZCByZXNldCgpOwpkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5j
cHAKaW5kZXggMjZkNTZhNS4uOTEzZmMyZSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCkBAIC0zMywx
MyArMzMsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSgpCiAgICAgOiBHTFBsYXRmb3JtU3VyZmFjZSgp
CiB7Ci0gICAgbV9uYXRpdmVSZXNvdXJjZSA9IGFkb3B0UHRyKG5ldyBOYXRpdmVPZmZTY3JlZW5X
aW5kb3coKSk7Ci0gICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdT
ZWxlY3RvcihtX25hdGl2ZVJlc291cmNlLT5uYXRpdmVTaGFyZWREaXNwbGF5KCkpKTsKKyAgICBt
X2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKE5hdGl2ZVdy
YXBwZXI6Om5hdGl2ZURpc3BsYXkoKSkpOwogICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fY29uZmln
U2VsZWN0b3ItPmRpc3BsYXkoKTsKIAotICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05P
X0RJU1BMQVkpIHsKKyAgICBpZiAobV9jb25maWdTZWxlY3Rvci0+ZGlzcGxheSgpID09IEVHTF9O
T19ESVNQTEFZKSB7CiAgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwotICAgICAg
ICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNTcsNyArNTUsNyBAQCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFu
c3BvcnRTdXJmYWNlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbmF0aXZlUmVz
b3VyY2UtPmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsIHZpc3VhbElkKTsK
KyAgICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxl
LCB2aXN1YWxJZCk7CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CiAgICAgICAgIGRlc3Ry
b3koKTsKQEAgLTEwNCw3ICsxMDIsNyBAQCB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6
OnN3YXBCdWZmZXJzKCkKIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgp
CiB7CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKLSAgICBtX25hdGl2ZVJlc291
cmNlLT5kZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBOYXRpdmVXcmFwcGVyOjpk
ZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKICAgICBmcmVlRUdMUmVzb3VyY2VzKCk7CiAg
ICAgbV9idWZmZXJIYW5kbGUgPSAwOwogfQpAQCAtMTI4LDcgKzEyNiw3IEBAIHZvaWQgRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNlcygpCiB2b2lkIEVHTFdpbmRvd1Ry
YW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB7CiAg
ICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwotICAgIG1fbmF0aXZl
UmVzb3VyY2UtPnJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2J1ZmZlckhhbmRsZSk7CisgICAgTmF0
aXZlV3JhcHBlcjo6cmVzaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuaAppbmRleCA1YzI4OGE5Li4zM2Y2NTZjIDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaAorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
aApAQCAtMzEsMTMgKzMxLDEzIEBACiAjaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgogCi0jaW5jbHVkZSA8Z2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5oPgorI2luY2x1ZGUgPGdseC9YMTFXcmFwcGVyLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi10eXBlZGVmIFgxMU9mZlNjcmVlbldpbmRvdyBOYXRpdmVPZmZTY3JlZW5XaW5k
b3c7Cit0eXBlZGVmIFgxMVdyYXBwZXIgTmF0aXZlV3JhcHBlcjsKIAogLy8gQ29udGVudHMgb2Yg
dGhlIHN1cmZhY2UgYXJlIGJhY2tlZCBieSBuYXRpdmUgd2luZG93LgogY2xhc3MgRUdMV2luZG93
VHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CkBAIC01Miw3ICs1
Miw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGZyZWVFR0xSZXNvdXJjZXMoKTsK
LSAgICBPd25QdHI8TmF0aXZlT2ZmU2NyZWVuV2luZG93PiBtX25hdGl2ZVJlc291cmNlOwogICAg
IE93blB0cjxFR0xDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKIH07CiAKZGlmZiAt
LWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29u
ZmlnU2VsZWN0b3IuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYQ29uZmlnU2VsZWN0b3IuaAppbmRleCBkZDFiNjJiLi5iMmM0N2Q2IDEwMDY0NAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1Nl
bGVjdG9yLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HTFhDb25maWdTZWxlY3Rvci5oCkBAIC0yNiwyMSArMjYsMjkgQEAKICNpZm5kZWYgR0xYQ29u
ZmlnU2VsZWN0b3JfaAogI2RlZmluZSBHTFhDb25maWdTZWxlY3Rvcl9oCiAKLSNpbmNsdWRlICJY
MTFXaW5kb3dSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJYMTFXcmFwcGVyLmgiCiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShHTFgpCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RhdGljIGludCBjbGllbnRBdHRyaWJ1dGVzW10gPSB7CisgICAgLy8gVGhlIHNwZWNp
ZmljYXRpb24gaXMgYSBzZXQga2V5IHZhbHVlIHBhaXJzIHN0b3JlZCBpbiBhIHNpbXBsZSBhcnJh
eS4KKyAgICBHTFhfTEVWRUwsICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgIHN0YXRp
Y19jYXN0PGludD4oR0xYX1ZJU1VBTF9JRCksICAgIDAsCisgICAgR0xYX0RSQVdBQkxFX1RZUEUs
ICAgICAgICAgICAgICAgICAgR0xYX1BJWE1BUF9CSVQsCisgICAgR0xYX0JJTkRfVE9fVEVYVFVS
RV9UQVJHRVRTX0VYVCwgICAgR0xYX1RFWFRVUkVfMkRfQklUX0VYVCwKKyAgICBHTFhfQklORF9U
T19URVhUVVJFX1JHQkFfRVhULCAgICAgICBUUlVFLAorICAgIDAKK307CisKIGNsYXNzIEdMWENv
bmZpZ1NlbGVjdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFhDb25maWdTZWxlY3Rv
cik7CiAKIHB1YmxpYzoKLSAgICBHTFhDb25maWdTZWxlY3RvcihEaXNwbGF5KiB4RGlzcGxheSwg
Ym9vbCBzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24pCisgICAgR0xYQ29uZmlnU2VsZWN0b3IoKQog
ICAgICAgICA6IG1fcGJ1ZmZlckZCQ29uZmlnKDApCiAgICAgICAgICwgbV9zdXJmYWNlQ29udGV4
dEZCQ29uZmlnKDApCi0gICAgICAgICwgbV9zaGFyZWREaXNwbGF5KHhEaXNwbGF5KQotICAgICAg
ICAsIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikK
ICAgICB7CiAgICAgfQogCkBAIC01Myw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFz
dXJmYWNlQ29udGV4dENvbmZpZygpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAg
cmV0dXJuIGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIG1fc3VyZmFj
ZUNvbnRleHRGQkNvbmZpZyk7CisgICAgICAgIHJldHVybiBnbFhHZXRWaXN1YWxGcm9tRkJDb25m
aWcoWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpLCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcp
OwogICAgIH0KIAogICAgIEdMWEZCQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29uZmlnKCkKQEAgLTcw
LDEwICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBOb25lCiAgICAgICAgICAgICB9
OwogCi0gICAgICAgICAgICBpbnQgbnVtQXZhaWxhYmxlQ29uZmlnczsKLSAgICAgICAgICAgIE93
blB0clgxMTxHTFhGQkNvbmZpZz4gdGVtcChnbFhDaG9vc2VGQkNvbmZpZyhtX3NoYXJlZERpc3Bs
YXksIERlZmF1bHRTY3JlZW4obV9zaGFyZWREaXNwbGF5KSwgYXR0cmlidXRlcywgJm51bUF2YWls
YWJsZUNvbmZpZ3MpKTsKLSAgICAgICAgICAgIGlmIChudW1BdmFpbGFibGVDb25maWdzKQotICAg
ICAgICAgICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gdGVtcFswXTsKKyAgICAgICAgICAgIG1f
cGJ1ZmZlckZCQ29uZmlnID0gZmluZE1hdGNoaW5nQ29uZmlnKGF0dHJpYnV0ZXMsIDMyKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHJldHVybiBtX3BidWZmZXJGQkNvbmZpZzsKQEAgLTg3LDYgKzky
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsK
ICAgICB9CiAKKyAgICBHTFhGQkNvbmZpZyBzdXJmYWNlQ2xpZW50Q29uZmlnKGludCBkZXB0aCwg
VmlzdWFsSUQgaWQpCisgICAgeworICAgICAgICBjbGllbnRBdHRyaWJ1dGVzWzNdID0gc3RhdGlj
X2Nhc3Q8aW50PihpZCk7CisgICAgICAgIGNsaWVudEF0dHJpYnV0ZXNbOF0gPSBiaW5kRm9ybWF0
KGRlcHRoKTsKKworICAgICAgICByZXR1cm4gZmluZE1hdGNoaW5nQ29uZmlnKGNsaWVudEF0dHJp
YnV0ZXMsIGRlcHRoLCBpZCk7CisgICAgfQorCiAgICAgdm9pZCByZXNldCgpCiAgICAgewogICAg
ICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IDA7CkBAIC0xMTAsNDMgKzEyMyw2NiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgTm9uZQogICAgICAgICB9OwogCisgICAgICAgIG1fc3VyZmFjZUNvbnRl
eHRGQkNvbmZpZyA9IGZpbmRNYXRjaGluZ0NvbmZpZyhhdHRyaWJ1dGVzLCAzMik7CisgICAgfQor
CisgICAgR0xYRkJDb25maWcgZmluZE1hdGNoaW5nQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1dGVz
W10sIGludCBkZXB0aCkKKyAgICB7CiAgICAgICAgIGludCBudW1BdmFpbGFibGVDb25maWdzOwot
ICAgICAgICBPd25QdHJYMTE8R0xYRkJDb25maWc+IHRlbXAoZ2xYQ2hvb3NlRkJDb25maWcobV9z
aGFyZWREaXNwbGF5LCBEZWZhdWx0U2NyZWVuKG1fc2hhcmVkRGlzcGxheSksIGF0dHJpYnV0ZXMs
ICZudW1BdmFpbGFibGVDb25maWdzKSk7CisgICAgICAgIE93blB0clgxMTxHTFhGQkNvbmZpZz4g
dGVtcChnbFhDaG9vc2VGQkNvbmZpZyhYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCksIERlZmF1
bHRTY3JlZW4oWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bUF2
YWlsYWJsZUNvbmZpZ3MpKTsKIAotICAgICAgICBpZiAoIW51bUF2YWlsYWJsZUNvbmZpZ3MpIHsK
LSAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFudW1BdmFpbGFibGVDb25maWdzIHx8ICF0
ZW1wLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgT3duUHRyWDExPFhW
aXN1YWxJbmZvPiBzY29wZWRWaXN1YWxJbmZvOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bUF2YWlsYWJsZUNvbmZpZ3M7ICsraSkgewotICAgICAgICAgICAgc2NvcGVkVmlzdWFsSW5m
byA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbaV0pOwor
ICAgICAgICAgICAgc2NvcGVkVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhY
MTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCksIHRlbXBbaV0pOwogICAgICAgICAgICAgaWYgKCFz
Y29wZWRWaXN1YWxJbmZvLmdldCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQotICAgICAgICAgICAgaWYgKG1fc3VwcG9ydHNYUmVuZGVyRXh0
ZW5zaW9uKSB7Ci0gICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhS
ZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG1fc2hhcmVkRGlzcGxheSwgc2NvcGVkVmlzdWFsSW5mby0+
dmlzdWFsKTsKLSAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFs
cGhhTWFzayA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29u
ZmlnID0gdGVtcFtpXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKFgxMVdyYXBwZXI6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBv
cnRlZCgpKSB7CisgICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhS
ZW5kZXJGaW5kVmlzdWFsRm9ybWF0KFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSwgc2NvcGVk
VmlzdWFsSW5mby0+dmlzdWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGRlcHRo
ID09IDMyICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0ZW1wW2ldOwogICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICBp
ZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyAmJiBzY29wZWRWaXN1YWxJbmZvLT5kZXB0aCA9
PSAzMikgewotICAgICAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IHRlbXBb
aV07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoc2NvcGVkVmlzdWFsSW5mby0+ZGVwdGggPT0gZGVwdGgpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRlbXBbaV07CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEaWQgbm90IGZpbmQgYW55IHZp
c3VhbCBzdXBwb3J0aW5nIGFscGhhLCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBjb25maWcu
Ci0gICAgICAgIGlmICghbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKQotICAgICAgICAgICAgbV9z
dXJmYWNlQ29udGV4dEZCQ29uZmlnID0gdGVtcFswXTsKKyAgICAgICAgcmV0dXJuIHRlbXBbMF07
CisgICAgfQorCisgICAgR0xYRkJDb25maWcgZmluZE1hdGNoaW5nQ29uZmlnKGNvbnN0IGludCBh
dHRyaWJ1dGVzW10sIGludCBkZXB0aCwgVmlzdWFsSUQgaWQpCisgICAgeworICAgICAgICBpbnQg
bnVtQXZhaWxhYmxlQ29uZmlnczsKKyAgICAgICAgT3duUHRyWDExPEdMWEZCQ29uZmlnPiB0ZW1w
KGdsWENob29zZUZCQ29uZmlnKFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSwgRGVmYXVsdFNj
cmVlbihYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxh
YmxlQ29uZmlncykpOworCisgICAgICAgIGlmICghbnVtQXZhaWxhYmxlQ29uZmlncyB8fCAhdGVt
cC5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIE93blB0clgxMTxYVmlz
dWFsSW5mbz4gc2NvcGVkVmlzdWFsSW5mbzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1BdmFpbGFibGVDb25maWdzOyArK2kpIHsKKyAgICAgICAgICAgIHNjb3BlZFZpc3VhbEluZm8g
PSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpLCB0
ZW1wW2ldKTsKKyAgICAgICAgICAgIGlmICghc2NvcGVkVmlzdWFsSW5mby5nZXQoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHNjb3BlZFZpc3VhbEluZm8t
PmRlcHRoID09IGRlcHRoICYmIHNjb3BlZFZpc3VhbEluZm8tPnZpc3VhbGlkID09IGlkKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0ZW1wW2ldOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGlk
IG5vdCBmaW5kIGFueSByaWdodCB2aXN1YWwsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNv
bmZpZy4KKyAgICAgICAgcmV0dXJuIHRlbXBbMF07CisgICAgfQorCisgICAgaW50IGJpbmRGb3Jt
YXQodW5zaWduZWQgZGVwdGgpCisgICAgeworICAgICAgICByZXR1cm4gZGVwdGggPT0gMzIgPyBH
TFhfQklORF9UT19URVhUVVJFX1JHQkFfRVhUIDogR0xYX0JJTkRfVE9fVEVYVFVSRV9SR0JfRVhU
OwogICAgIH0KIAogICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOwogICAgIEdMWEZC
Q29uZmlnIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKLSAgICBEaXNwbGF5KiBtX3NoYXJlZERp
c3BsYXk7Ci0gICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
Q29udGV4dC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWENvbnRleHQuY3BwCmluZGV4IGE5ZjMyMmQuLmIzYTZlNzkgMTAwNjQ0Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0
LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoR0xYKQogCisjaW5jbHVkZSAiWDExV3JhcHBlci5oIgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHR5cGVkZWYgR0xYQ29udGV4dCAoKkdMWENSRUFURUNPTlRFWFRBVFRSSUJTQVJC
UFJPQykoRGlzcGxheSosIEdMWEZCQ29uZmlnLCBHTFhDb250ZXh0LCBCb29sLCBjb25zdCBpbnQq
KTsKQEAgLTM4LDIwICs0MCwxOSBAQCBzdGF0aWMgaW50IEF0dHJpYnNbXSA9IHsKICAgICBHTFhf
TE9TRV9DT05URVhUX09OX1JFU0VUX0FSQiwKICAgICAwIH07CiAKLXN0YXRpYyB2b2lkIGluaXRp
YWxpemVBUkJFeHRlbnNpb25zKERpc3BsYXkqIGRpc3BsYXkpCitzdGF0aWMgdm9pZCBpbml0aWFs
aXplQVJCRXh0ZW5zaW9ucygpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKICAgICBpZiAoaW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGluaXRpYWxp
emVkID0gdHJ1ZTsKLSAgICBpZiAoR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xYRXh0ZW5z
aW9uKGRpc3BsYXksICJHTFhfQVJCX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MiKSkKKyAgICBp
ZiAoR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xYRXh0ZW5zaW9uKFgxMVdyYXBwZXI6Om5h
dGl2ZURpc3BsYXkoKSwgIkdMWF9BUkJfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyIpKQogICAg
ICAgICBnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xYQ1JF
QVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9j
YXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIiKSkpOwogfQog
CiBHTFhPZmZTY3JlZW5Db250ZXh0OjpHTFhPZmZTY3JlZW5Db250ZXh0KCkKICAgICA6IEdMUGxh
dGZvcm1Db250ZXh0KCkKLSAgICAsIG1fZGlzcGxheSgwKQogewogfQogCkBAIC02MCwxNyArNjEs
MTcgQEAgYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJm
YWNlKiBzdXJmYWNlKQogICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgbV9kaXNwbGF5ID0gc3VyZmFjZS0+c2hhcmVkRGlzcGxheSgpOwotICAgIGlmICghbV9k
aXNwbGF5KQorICAgIERpc3BsYXkqIHgxMURpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNwbGF5
KCk7CisgICAgaWYgKCF4MTFEaXNwbGF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBH
TFhGQkNvbmZpZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CiAKICAgICBpZiAo
Y29uZmlnKSB7Ci0gICAgICAgIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKG1fZGlzcGxheSk7Cisg
ICAgICAgIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKCk7CiAKICAgICAgICAgaWYgKGdsWENyZWF0
ZUNvbnRleHRBdHRyaWJzQVJCKQotICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3Jl
YXRlQ29udGV4dEF0dHJpYnNBUkIobV9kaXNwbGF5LCBjb25maWcsIDAsIHRydWUsIEF0dHJpYnMp
OworICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNB
UkIoeDExRGlzcGxheSwgY29uZmlnLCAwLCB0cnVlLCBBdHRyaWJzKTsKIAogICAgICAgICBpZiAo
bV9jb250ZXh0SGFuZGxlKSB7CiAgICAgICAgICAgICAvLyBUaGUgR0xYX0FSQl9jcmVhdGVfY29u
dGV4dF9yb2J1c3RuZXNzIHNwZWMgcmVxdWlyZXMgdGhhdCBhIGNvbnRleHQgY3JlYXRlZCB3aXRo
CkBAIC04MCwxMSArODEsMTEgQEAgYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXpl
KEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQogICAgICAgICAgICAgaWYgKHBsYXRmb3JtTWFr
ZUN1cnJlbnQoc3VyZmFjZSkgJiYgR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xFeHRlbnNp
b24oIkdMX0FSQl9yb2J1c3RuZXNzIikpCiAgICAgICAgICAgICAgICAgbV9yZXNldExvc3RDb250
ZXh0ID0gdHJ1ZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnbFhEZXN0cm95
Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7CisgICAgICAgICAgICAgICAgZ2xY
RGVzdHJveUNvbnRleHQoeDExRGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghbV9jb250ZXh0SGFuZGxlKQotICAgICAgICAgICAgbV9jb250ZXh0SGFu
ZGxlID0gZ2xYQ3JlYXRlTmV3Q29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQ
RSwgMCwgdHJ1ZSk7CisgICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVOZXdD
b250ZXh0KHgxMURpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQRSwgMCwgdHJ1ZSk7CiAKICAg
ICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MTA5LDE0ICsxMTAsMjEgQEAgYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VD
dXJyZW50KEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQogCiB2b2lkIEdMWE9mZlNjcmVlbkNv
bnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKQogewotICAgIGdsWE1ha2VDdXJyZW50KG1f
ZGlzcGxheSwgMCwgMCk7Ci0gICAgbV9kaXNwbGF5ID0gMDsKKyAgICBEaXNwbGF5KiB4MTFEaXNw
bGF5ID0gWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpOworICAgIGlmICgheDExRGlzcGxheSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZ2xYTWFrZUN1cnJlbnQoeDExRGlzcGxheSwgMCwgMCk7
CiB9CiAKIHZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcygpCiB7CisgICAg
RGlzcGxheSogeDExRGlzcGxheSA9IFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKTsKKyAgICBp
ZiAoIXgxMURpc3BsYXkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2NvbnRleHRIYW5k
bGUpCi0gICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxl
KTsKKyAgICAgICAgZ2xYRGVzdHJveUNvbnRleHQoeDExRGlzcGxheSwgbV9jb250ZXh0SGFuZGxl
KTsKIAogICAgIG1fY29udGV4dEhhbmRsZSA9IDA7CiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCmluZGV4IGNi
ZGUwZWYuLjQ0NGU3ZjIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCkBAIC00NSw3ICs0NSw2IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKLSAgICBEaXNwbGF5KiBt
X2Rpc3BsYXk7CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAppbmRleCA4MGZjMjYyLi40YmJh
NDM3IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKQEAgLTM2LDE1ICszNiw4IEBAIHN0YXRpYyBjb25z
dCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsgR0xYX1BCVUZGRVJfV0lEVEgsIDEsIEdMWF9Q
QlVGRkVSX0hFSUdICiBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKCkK
ICAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKIHsKLSAgICBtX25hdGl2ZVJlc291cmNlID0gYWRv
cHRQdHIobmV3IFgxMU9mZlNjcmVlbldpbmRvdygpKTsKLSAgICBtX3NoYXJlZERpc3BsYXkgPSBt
X25hdGl2ZVJlc291cmNlLT5uYXRpdmVTaGFyZWREaXNwbGF5KCk7Ci0KLSAgICBpZiAoIW1fc2hh
cmVkRGlzcGxheSkgewotICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcg
R0xYQ29uZmlnU2VsZWN0b3IobV9zaGFyZWREaXNwbGF5LCBtX25hdGl2ZVJlc291cmNlLT5pc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOworICAgIG1fc2hhcmVkRGlzcGxheSA9IFgxMVdy
YXBwZXI6Om5hdGl2ZURpc3BsYXkoKTsKKyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIo
bmV3IEdMWENvbmZpZ1NlbGVjdG9yKCkpOwogICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gdmlz
SW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKCkpOwogCiAgICAgaWYgKCF2aXNJbmZv
LmdldCgpKSB7CkBAIC01Miw3ICs0NSw3IEBAIEdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5z
cG9ydFN1cmZhY2UoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9uYXRpdmVSZXNv
dXJjZS0+Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSwgKnZpc0luZm8uZ2V0
KCkpOworICAgIFgxMVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5k
bGUsICp2aXNJbmZvLmdldCgpKTsKIAogICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKICAgICAg
ICAgZGVzdHJveSgpOwpAQCAtNzQsNyArNjcsNyBAQCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xY
VHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZh
Y2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB7CiAgICAgR0xQbGF0Zm9y
bVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwotICAgIG1fbmF0aXZlUmVzb3VyY2UtPnJl
U2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2RyYXdhYmxlKTsKKyAgICBYMTFXcmFwcGVyOjpyZXNpemVX
aW5kb3cobmV3UmVjdCwgbV9kcmF3YWJsZSk7CiAgICAgLy8gRm9yY2UgcmVzaXplIG9mIEdMIHN1
cmZhY2UgYWZ0ZXIgd2luZG93IHJlc2l6ZS4KICAgICBnbFhTd2FwQnVmZmVycyhzaGFyZWREaXNw
bGF5KCksIG1fZHJhd2FibGUpOwogfQpAQCAtOTksNyArOTIsNyBAQCB2b2lkIEdMWFRyYW5zcG9y
dFN1cmZhY2U6OmRlc3Ryb3koKQogICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7CiAK
ICAgICBpZiAobV9idWZmZXJIYW5kbGUpIHsKLSAgICAgICAgbV9uYXRpdmVSZXNvdXJjZS0+ZGVz
dHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7CisgICAgICAgIFgxMVdyYXBwZXI6OmRlc3Ryb3lX
aW5kb3cobV9idWZmZXJIYW5kbGUpOwogICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CiAgICAg
ICAgIG1fZHJhd2FibGUgPSAwOwogICAgIH0KQEAgLTEyMSwxNSArMTE0LDkgQEAgR0xYUEJ1ZmZl
cjo6fkdMWFBCdWZmZXIoKQogCiB2b2lkIEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQogewotICAg
IG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgWDExT2ZmU2NyZWVuV2luZG93KCkpOwot
ICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fbmF0aXZlUmVzb3VyY2UtPm5hdGl2ZVNoYXJlZERpc3Bs
YXkoKTsKLQotICAgIGlmICghbV9zaGFyZWREaXNwbGF5KSB7Ci0gICAgICAgIG1fbmF0aXZlUmVz
b3VyY2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fc2hhcmVkRGlz
cGxheSA9IFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKTsKIAotICAgIG1fY29uZmlnU2VsZWN0
b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IobV9zaGFyZWREaXNwbGF5LCBtX25h
dGl2ZVJlc291cmNlLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOworICAgIG1fY29u
ZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7CiAgICAgR0xY
RkJDb25maWcgY29uZmlnID0gbV9jb25maWdTZWxlY3Rvci0+cEJ1ZmZlckNvbnRleHRDb25maWco
KTsKIAogICAgIGlmICghY29uZmlnKSB7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCmluZGV4IDg0NzE1YzEuLjJm
MjU4ZWYgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJH
TFBsYXRmb3JtU3VyZmFjZS5oIgogI2luY2x1ZGUgIkdMWENvbmZpZ1NlbGVjdG9yLmgiCi0jaW5j
bHVkZSAiWDExV2luZG93UmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiWDExV3JhcHBlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDcgKzQ3LDYgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIE93blB0cjxYMTFPZmZTY3JlZW5XaW5kb3c+
IG1fbmF0aXZlUmVzb3VyY2U7CiAgICAgT3duUHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZp
Z1NlbGVjdG9yOwogfTsKICNlbmRpZgpAQCAtNjQsNyArNjMsNiBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgZnJlZVJlc291cmNlcygpOwotICAg
IE93blB0cjxYMTFPZmZTY3JlZW5XaW5kb3c+IG1fbmF0aXZlUmVzb3VyY2U7CiAgICAgT3duUHRy
PEdMWENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9yOwogfTsKIApkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZh
Y2VHTFguY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
cmFwaGljc1N1cmZhY2VHTFguY3BwCmluZGV4IGE1N2I2MzguLjE4MGU1NzYgMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJm
YWNlR0xYLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uCiAKICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTMwLDIwICszMSwxOCBAQAogI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxR
T3BlbkdMQ29udGV4dD4KICNpbmNsdWRlIDxxcGEvcXBsYXRmb3JtbmF0aXZlaW50ZXJmYWNlLmg+
Ci0jZWxpZiBQTEFURk9STShFRkwpCi0jaW5jbHVkZSA8R0wvZ2wuaD4KKyNlbHNlCisjaW5jbHVk
ZSA8b3BlbmdsL0dMRGVmcy5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJHTFhDb25maWdTZWxlY3Rv
ci5oIgorI2luY2x1ZGUgIlgxMVdyYXBwZXIuaCIKKwogI2luY2x1ZGUgPEdML2dsZXh0Lmg+CiAj
aW5jbHVkZSA8R0wvZ2x4Lmg+Ci0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNpbmNsdWRlIDxYMTEv
ZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBsb25nIFgxMU92ZXJyaWRlUmVk
aXJlY3QgPSAxTCA8PCA5OwotCiBzdGF0aWMgUEZOR0xYQklORFRFWElNQUdFRVhUUFJPQyBwR2xY
QmluZFRleEltYWdlRVhUID0gMDsKIHN0YXRpYyBQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9D
IHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQgPSAwOwogc3RhdGljIFBGTkdMQklOREZSQU1FQlVGRkVS
UFJPQyBwR2xCaW5kRnJhbWVidWZmZXIgPSAwOwpAQCAtNTIsMTUzICs1MSw3IEBAIHN0YXRpYyBQ
Rk5HTEdFTkZSQU1FQlVGRkVSU1BST0MgcEdsR2VuRnJhbWVidWZmZXJzID0gMDsKIHN0YXRpYyBQ
Rk5HTERFTEVURUZSQU1FQlVGRkVSU1BST0MgcEdsRGVsZXRlRnJhbWVidWZmZXJzID0gMDsKIHN0
YXRpYyBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJEUFJPQyBwR2xGcmFtZWJ1ZmZlclRleHR1cmUy
RCA9IDA7CiAKLS8vIFVzZWQgZm9yIGhhbmRsaW5nIFhFcnJvci4KLXN0YXRpYyBib29sIHZhbGlk
T3BlcmF0aW9uID0gdHJ1ZTsKLXN0YXRpYyBpbnQgaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3Io
RGlzcGxheSosIFhFcnJvckV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPmVycm9yX2Nv
ZGUgPT0gQmFkTWF0Y2ggfHwgZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkV2luZG93IHx8IGV2ZW50
LT5lcnJvcl9jb2RlID09IEJhZEFsbG9jKSB7Ci0gICAgICAgIHZhbGlkT3BlcmF0aW9uID0gZmFs
c2U7Ci0KLSAgICAgICAgc3dpdGNoIChldmVudC0+ZXJyb3JfY29kZSkgewotICAgICAgICBjYXNl
IEJhZE1hdGNoOgotICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRNYXRjaC4iKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJhZFdpbmRvdzoKLSAgICAgICAgICAgIExPR19FUlJP
UigiQmFkV2luZG93LiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmFkQWxs
b2M6Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkJhZEFsbG9jLiIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAg
ICBHTFhfTEVWRUwsIDAsCi0gICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAot
ICAgIEdMWF9SRU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCi0gICAgR0xYX1JFRF9TSVpFLCAg
ICAgIDEsCi0gICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCi0gICAgR0xYX0JMVUVfU0laRSwgICAg
IDEsCi0gICAgR0xYX0FMUEhBX1NJWkUsICAgIDEsCi0gICAgR0xYX0RFUFRIX1NJWkUsICAgIDEs
Ci0gICAgR0xYX1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAotICAgIEdMWF9ET1VCTEVC
VUZGRVIsICBUcnVlLAotICAgIE5vbmUKLX07Ci0KLWNsYXNzIFNjb3BlZFhQaXhtYXBDcmVhdGlv
bkVycm9ySGFuZGxlciB7Ci0KLXB1YmxpYzoKLSAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJv
ckhhbmRsZXIoRGlzcGxheSogZGlzcGxheSkKLSAgICAgICAgOiBtX2Rpc3BsYXkoZGlzcGxheSkK
LSAgICB7Ci0gICAgICAgIC8vIFhTeW5jIG11c3QgYmUgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGN1
cnJlbnQgZXJyb3JzIGFyZSBoYW5kbGVkIGJ5IHRoZSBvcmlnaW5hbCBoYW5kbGVyLgotICAgICAg
ICBYU3luYyhtX2Rpc3BsYXksIGZhbHNlKTsKLSAgICAgICAgbV9wcmV2aW91c0Vycm9ySGFuZGxl
ciA9IFhTZXRFcnJvckhhbmRsZXIoaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IpOwotICAgIH0K
LQotICAgIH5TY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKQotICAgIHsKLSAgICAg
ICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KLSAgICAgICAgWFNldEVycm9ySGFu
ZGxlcihtX3ByZXZpb3VzRXJyb3JIYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBib29sIGlzVmFsaWRP
cGVyYXRpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgdmFsaWRPcGVyYXRpb24gPSB0cnVlOwot
ICAgICAgICAvLyBYU3luYyBpcyBuZWVkZWQgdG8gY2F0Y2ggcG9zc2libGUgZXJyb3JzIGFzIHRo
ZXkgYXJlIGdlbmVyYXRlZCBhc3luY2hyb25vdXNseS4KLSAgICAgICAgWFN5bmMobV9kaXNwbGF5
LCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiB2YWxpZE9wZXJhdGlvbjsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgWEVycm9ySGFuZGxlciBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyOwotICAgIERpc3Bs
YXkqIG1fZGlzcGxheTsKLX07Ci0KLS8vIEZJWE1FOiBUYWtlIFgxMVdpbmRvd1Jlc291cmNlcyBh
bmQgR0xYQ29uZmlnU2VsZWN0b3IgaW50byB1c2UuCi1jbGFzcyBPZmZTY3JlZW5Sb290V2luZG93
IHsKLXB1YmxpYzoKLSAgICBPZmZTY3JlZW5Sb290V2luZG93KCkKLSAgICB7Ci0gICAgICAgICsr
bV9yZWZDb3VudDsKLSAgICB9Ci0KLSAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCi0gICAgewotICAg
ICAgICBpZiAoIW1fd2luZG93KSB7Ci0gICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSBkaXNwbGF5
KCk7Ci0gICAgICAgICAgICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVm
YXVsdFJvb3RXaW5kb3coZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCks
IFdoaXRlUGl4ZWwoZHB5LCAwKSk7Ci0gICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBh
dHRyaWJ1dGVzOwotICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRy
dWU7Ci0gICAgICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBY
MTFPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAvLyBNYXAgd2lu
ZG93IHRvIHRoZSBzY3JlZW4KLSAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dpbmRvdyk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV93aW5kb3c7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIHN0cnVjdCBEaXNwbGF5Q29ubmVjdGlvbiB7Ci0gICAgICAgIERpc3BsYXlDb25uZWN0
aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgfkRpc3BsYXlDb25uZWN0aW9uKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgRGlzcGxheSogZGlzcGxheSgpIHsgcmV0dXJuIG1fZGlzcGxheTsgfQotICAgIHByaXZhdGU6
Ci0gICAgICAgIERpc3BsYXkqIG1fZGlzcGxheTsKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgc3Rh
dGljIERpc3BsYXkqIGRpc3BsYXkoKQotICAgIHsKLSAgICAgICAgLy8gRGlzcGxheSBjb25uZWN0
aW9uIHdpbGwgb25seSBiZSBicm9rZW4gYXQgcHJvZ3JhbSBzaHV0ZG93bi4KLSAgICAgICAgc3Rh
dGljIERpc3BsYXlDb25uZWN0aW9uIGRpc3BsYXlDb25uZWN0aW9uOwotICAgICAgICByZXR1cm4g
ZGlzcGxheUNvbm5lY3Rpb24uZGlzcGxheSgpOwotICAgIH0KLQotICAgIH5PZmZTY3JlZW5Sb290
V2luZG93KCkKLSAgICB7Ci0gICAgICAgIGlmICgtLW1fcmVmQ291bnQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgICAgICBYVW5tYXBXaW5k
b3coZGlzcGxheSgpLCBtX3dpbmRvdyk7Ci0gICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhkaXNw
bGF5KCksIG1fd2luZG93KTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAgfQot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgaW50IG1fcmVmQ291bnQ7Ci0gICAgc3RhdGlj
IFdpbmRvdyBtX3dpbmRvdzsKLX07Ci0KLWludCBPZmZTY3JlZW5Sb290V2luZG93OjptX3JlZkNv
dW50ID0gMDsKLVdpbmRvdyBPZmZTY3JlZW5Sb290V2luZG93OjptX3dpbmRvdyA9IDA7Ci0KLXN0
YXRpYyBjb25zdCBpbnQgZ2x4U3BlY1tdID0gewotICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIGlz
IGEgc2V0IGtleSB2YWx1ZSBwYWlycyBzdG9yZWQgaW4gYSBzaW1wbGUgYXJyYXkuCi0gICAgR0xY
X0xFVkVMLCAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICBHTFhfRFJBV0FCTEVfVFlQ
RSwgICAgICAgICAgICAgICAgICBHTFhfUElYTUFQX0JJVCB8IEdMWF9XSU5ET1dfQklULAotICAg
IEdMWF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUU19FWFQsICAgIEdMWF9URVhUVVJFXzJEX0JJVF9F
WFQsCi0gICAgR0xYX0JJTkRfVE9fVEVYVFVSRV9SR0JBX0VYVCwgICAgICAgVFJVRSwKLSAgICAw
Ci19OwotCi1zdGF0aWMgY29uc3QgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsKK3N0YXRpYyBpbnQg
Z2x4QXR0cmlidXRlc1tdID0gewogICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9FWFQsCiAgICAgR0xY
X1RFWFRVUkVfRk9STUFUX1JHQkFfRVhULAogICAgIEdMWF9URVhUVVJFX1RBUkdFVF9FWFQsCkBA
IC0yMDgsMTYgKzYxLDEzIEBAIHN0YXRpYyBjb25zdCBpbnQgZ2x4QXR0cmlidXRlc1tdID0gewog
CiBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgR3JhcGhpY3NTdXJmYWNlUHJp
dmF0ZShjb25zdCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHNoYXJlQ29udGV4dCA9IDApCi0g
ICAgICAgIDogbV9vZmZTY3JlZW5XaW5kb3coYWRvcHRQdHIobmV3IE9mZlNjcmVlblJvb3RXaW5k
b3coKSkpCi0gICAgICAgICwgbV94UGl4bWFwKDApCisgICAgICAgIDogbV94UGl4bWFwKDApCiAg
ICAgICAgICwgbV9nbHhQaXhtYXAoMCkKICAgICAgICAgLCBtX3N1cmZhY2UoMCkKICAgICAgICAg
LCBtX2dseFN1cmZhY2UoMCkKICAgICAgICAgLCBtX2dsQ29udGV4dCgwKQogICAgICAgICAsIG1f
ZGV0YWNoZWRDb250ZXh0KDApCiAgICAgICAgICwgbV9kZXRhY2hlZFN1cmZhY2UoMCkKLSAgICAg
ICAgLCBtX2ZiQ29uZmlnKDApCi0gICAgICAgICwgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQoZmFsc2Up
CiAgICAgICAgICwgbV9oYXNBbHBoYShmYWxzZSkKICAgICAgICAgLCBtX2lzUmVjZWl2ZXIoZmFs
c2UpCiAgICAgewpAQCAtMjM0LDE2ICs4NCwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJp
dmF0ZSB7CiAgICAgICAgIFVOVVNFRF9QQVJBTShzaGFyZUNvbnRleHQpOwogI2VuZGlmCiAKLSAg
ICAgICAgaW50IG51bVJldHVybmVkOwotICAgICAgICBHTFhGQkNvbmZpZyogZmJDb25maWdzID0g
Z2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSksIGF0
dHJpYnV0ZXMsICZudW1SZXR1cm5lZCk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Ug
Y2hvb3NlIGEgY29uZmlndXJhdGlvbiB0aGF0IHN1cHBvcnRzIGFuIGFscGhhIG1hc2suCi0gICAg
ICAgIG1fZmJDb25maWcgPSBmaW5kRkJDb25maWdXaXRoQWxwaGEoZmJDb25maWdzLCBudW1SZXR1
cm5lZCk7CisgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmln
U2VsZWN0b3IoKSk7CiAKLSAgICAgICAgWEZyZWUoZmJDb25maWdzKTsKKyAgICAgICAgaWYgKCFt
X2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpKSB7CisgICAgICAgICAgICBj
bGVhcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgLy8gQ3Jl
YXRlIGEgR0xYIGNvbnRleHQgZm9yIE9wZW5HTCByZW5kZXJpbmcKLSAgICAgICAgbV9nbENvbnRl
eHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KGRpc3BsYXkoKSwgbV9mYkNvbmZpZywgR0xYX1JHQkFf
VFlQRSwgc2hhcmVDb250ZXh0T2JqZWN0LCB0cnVlKTsKKyAgICAgICAgbV9nbENvbnRleHQgPSBn
bFhDcmVhdGVOZXdDb250ZXh0KGRpc3BsYXkoKSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNv
bnRleHRDb25maWcoKSwgR0xYX1JHQkFfVFlQRSwgc2hhcmVDb250ZXh0T2JqZWN0LCB0cnVlKTsK
ICAgICB9CiAKICAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKHVpbnQzMl90IHdpbklkKQpAQCAt
MjU0LDExICsxMDMsMTEgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgewogICAgICAg
ICAsIG1fZ2xDb250ZXh0KDApCiAgICAgICAgICwgbV9kZXRhY2hlZENvbnRleHQoMCkKICAgICAg
ICAgLCBtX2RldGFjaGVkU3VyZmFjZSgwKQotICAgICAgICAsIG1fZmJDb25maWcoMCkKLSAgICAg
ICAgLCBtX3RleHR1cmVJc1lJbnZlcnRlZChmYWxzZSkKICAgICAgICAgLCBtX2hhc0FscGhhKGZh
bHNlKQogICAgICAgICAsIG1faXNSZWNlaXZlcih0cnVlKQotICAgIHsgfQorICAgIHsKKyAgICAg
ICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhDb25maWdTZWxlY3RvcigpKTsK
KyAgICB9CiAKICAgICB+R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpCiAgICAgewpAQCAtMjY3LDM1
ICsxMTYsMzIgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgewogCiAgICAgdWludDMy
X3QgY3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIHsKLSAgICAgICAgWFZp
c3VhbEluZm8qIHZpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoZGlzcGxheSgp
LCBtX2ZiQ29uZmlnKTsKLSAgICAgICAgaWYgKCF2aXN1YWxJbmZvKQorICAgICAgICBpZiAoIWRp
c3BsYXkoKSB8fCAhbV9jb25maWdTZWxlY3RvcikKICAgICAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSgpLCBtX29mZlNj
cmVlbldpbmRvdy0+Z2V0WFdpbmRvdygpLCB2aXN1YWxJbmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7
Ci0KLSAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYTsKLSAgICAgICAgYS5iYWNrZ3JvdW5k
X3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5KCksIDApOwotICAgICAgICBhLmJvcmRlcl9waXhl
bCA9IEJsYWNrUGl4ZWwoZGlzcGxheSgpLCAwKTsKLSAgICAgICAgYS5jb2xvcm1hcCA9IGNtYXA7
Ci0gICAgICAgIG1fc3VyZmFjZSA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSgpLCBtX29mZlNjcmVl
bldpbmRvdy0+Z2V0WFdpbmRvdygpLCAwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCks
Ci0gICAgICAgICAgICAwLCB2aXN1YWxJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc3VhbElu
Zm8tPnZpc3VhbCwKLSAgICAgICAgICAgIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENX
Q29sb3JtYXAsICZhKTsKLSAgICAgICAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxh
eSgpLCBtX3N1cmZhY2UsIDApOwotICAgICAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlz
cGxheSgpLCBtX3N1cmZhY2UsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKLSAgICAgICAgbV9n
bHhTdXJmYWNlID0gZ2xYQ3JlYXRlV2luZG93KGRpc3BsYXkoKSwgbV9mYkNvbmZpZywgbV9zdXJm
YWNlLCAwKTsKLSAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0KLSAgICAgICAgLy8gTWFrZSBz
dXJlIHRoZSBYUmVuZGVyIEV4dGVuc2lvbiBpcyBhdmFpbGFibGUuCi0gICAgICAgIGludCBldmVu
dEJhc2VwLCBlcnJvckJhc2VwOwotICAgICAgICBpZiAoIVhSZW5kZXJRdWVyeUV4dGVuc2lvbihk
aXNwbGF5KCksICZldmVudEJhc2VwLCAmZXJyb3JCYXNlcCkpCisgICAgICAgIE93blB0clgxMTxY
VmlzdWFsSW5mbz4gdmlzSW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKCkpOworCisg
ICAgICAgIGlmICghdmlzSW5mby5nZXQoKSkgeworICAgICAgICAgICAgY2xlYXIoKTsKICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKLSAgICAgICAgWE1hcFdpbmRvdyhkaXNwbGF5
KCksIG1fc3VyZmFjZSk7CisgICAgICAgIFgxMVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRv
dygmbV9zdXJmYWNlLCAqdmlzSW5mby5nZXQoKSwgc2l6ZSk7CisKKyAgICAgICAgaWYgKCFtX3N1
cmZhY2UpIHsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fZ2x4U3VyZmFjZSA9IGdsWENyZWF0ZVdpbmRvdyhkaXNwbGF5
KCksIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCksIG1fc3VyZmFjZSwg
MCk7CiAgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CiAgICAgfQogCiAgICAgdm9pZCBjcmVhdGVQ
aXhtYXAodWludDMyX3Qgd2luSWQpCiAgICAgeworICAgICAgICBpZiAoIW1fY29uZmlnU2VsZWN0
b3IpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0
cjsKICAgICAgICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhkaXNwbGF5KCksIHdpbklkLCAm
YXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMDQsMzUgKzE1MCwyNSBAQCBzdHJ1Y3Qg
R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgIGlmIChhdHRyLm1hcF9zdGF0ZSA9PSBJ
c1VubWFwcGVkIHx8IGF0dHIubWFwX3N0YXRlID09IElzVW52aWV3YWJsZSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgaGFu
ZGxlcihkaXNwbGF5KCkpOworICAgICAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRs
ZXIgaGFuZGxlcjsKICAgICAgICAgbV9zaXplID0gSW50U2l6ZShhdHRyLndpZHRoLCBhdHRyLmhl
aWdodCk7CiAKICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5k
VmlzdWFsRm9ybWF0KGRpc3BsYXkoKSwgYXR0ci52aXN1YWwpOwogICAgICAgICBtX2hhc0FscGhh
ID0gKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBo
YU1hc2spOwogCi0gICAgICAgIGludCBudW1iZXJPZkNvbmZpZ3M7Ci0gICAgICAgIEdMWEZCQ29u
ZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSgpLCBYRGVmYXVsdFNjcmVl
bihkaXNwbGF5KCkpLCBnbHhTcGVjLCAmbnVtYmVyT2ZDb25maWdzKTsKLQotICAgICAgICAvLyBJ
ZiBvcmlnaW4gd2luZG93IGhhcyBhbHBoYSB0aGVuIGZpbmQgY29uZmlnIHdpdGggYWxwaGEuCi0g
ICAgICAgIEdMWEZCQ29uZmlnJiBjb25maWcgPSBtX2hhc0FscGhhID8gZmluZEZCQ29uZmlnV2l0
aEFscGhhKGNvbmZpZ3MsIG51bWJlck9mQ29uZmlncykgOiBjb25maWdzWzBdOwogCiAgICAgICAg
IG1feFBpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKGRpc3BsYXkoKSwgd2luSWQp
OwotICAgICAgICBtX2dseFBpeG1hcCA9IGdsWENyZWF0ZVBpeG1hcChkaXNwbGF5KCksIGNvbmZp
ZywgbV94UGl4bWFwLCBnbHhBdHRyaWJ1dGVzKTsKKyAgICAgICAgZ2x4QXR0cmlidXRlc1sxXSA9
IChmb3JtYXQtPmRlcHRoID09IDMyIHx8IG1faGFzQWxwaGEpID8gR0xYX1RFWFRVUkVfRk9STUFU
X1JHQkFfRVhUIDogR0xYX1RFWFRVUkVfRk9STUFUX1JHQl9FWFQ7CisgICAgICAgIG1fZ2x4UGl4
bWFwID0gZ2xYQ3JlYXRlUGl4bWFwKGRpc3BsYXkoKSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFj
ZUNsaWVudENvbmZpZyhmb3JtYXQtPmRlcHRoLCBYVmlzdWFsSURGcm9tVmlzdWFsKGF0dHIudmlz
dWFsKSksIG1feFBpeG1hcCwgZ2x4QXR0cmlidXRlcyk7CiAKICAgICAgICAgaWYgKCFoYW5kbGVy
LmlzVmFsaWRPcGVyYXRpb24oKSkKICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgdWludCBpbnZlcnRlZCA9IDA7CiAgICAgICAgICAgICBnbFhRdWVyeURy
YXdhYmxlKGRpc3BsYXkoKSwgbV9nbHhQaXhtYXAsIEdMWF9ZX0lOVkVSVEVEX0VYVCwgJmludmVy
dGVkKTsKLSAgICAgICAgICAgIG1fdGV4dHVyZUlzWUludmVydGVkID0gISFpbnZlcnRlZDsKKyAg
ICAgICAgICAgIG1fZmxhZ3MgPSAhIWludmVydGVkID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRG
bGlwVGV4dHVyZSA6IDA7CisgICAgICAgICAgICBtX2ZsYWdzIHw9IFRleHR1cmVNYXBwZXJHTDo6
U2hvdWxkQmxlbmQ7CiAgICAgICAgIH0KLQotICAgICAgICBYRnJlZShjb25maWdzKTsKLSAgICB9
Ci0KLSAgICBib29sIHRleHR1cmVJc1lJbnZlcnRlZCgpCi0gICAgewotICAgICAgICByZXR1cm4g
bV90ZXh0dXJlSXNZSW52ZXJ0ZWQ7CiAgICAgfQogCiAgICAgdm9pZCBtYWtlQ3VycmVudCgpCkBA
IC00MDAsNyArMjM2LDcgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgewogICAgICAg
ICBkb25lQ3VycmVudCgpOwogICAgIH0KIAotICAgIERpc3BsYXkqIGRpc3BsYXkoKSBjb25zdCB7
IHJldHVybiBPZmZTY3JlZW5Sb290V2luZG93OjpkaXNwbGF5KCk7IH0KKyAgICBEaXNwbGF5KiBk
aXNwbGF5KCkgY29uc3QgeyByZXR1cm4gWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpOyB9CiAK
ICAgICBHTFhQaXhtYXAgZ2x4UGl4bWFwKCkgY29uc3QKICAgICB7CkBAIC00MjAsMjUgKzI1Niwx
MCBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgfQogCiAgICAgYm9vbCBp
c1JlY2VpdmVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlY2VpdmVyOyB9Ci1wcml2YXRlOgotICAg
IEdMWEZCQ29uZmlnJiBmaW5kRkJDb25maWdXaXRoQWxwaGEoR0xYRkJDb25maWcqIGZiQ29uZmln
cywgaW50IG51bWJlck9mQ29uZmlncykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtYmVyT2ZDb25maWdzOyArK2kpIHsKLSAgICAgICAgICAgIFhWaXN1YWxJbmZvKiB2aXN1
YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKGRpc3BsYXkoKSwgZmJDb25maWdzW2ld
KTsKLSAgICAgICAgICAgIGlmICghdmlzdWFsSW5mbykKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5k
VmlzdWFsRm9ybWF0KGRpc3BsYXkoKSwgdmlzdWFsSW5mby0+dmlzdWFsKTsKLSAgICAgICAgICAg
IFhGcmVlKHZpc3VhbEluZm8pOwotCi0gICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+
ZGlyZWN0LmFscGhhTWFzayA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZiQ29uZmlnc1tp
XTsKLSAgICAgICAgfQogCi0gICAgICAgIC8vIFJldHVybiAxc3QgY29uZmlnIGFzIGEgZmFsbGJh
Y2sgd2l0aCBubyBhbHBoYSBzdXBwb3J0LgotICAgICAgICByZXR1cm4gZmJDb25maWdzWzBdOwot
ICAgIH0KKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4g
bV9mbGFnczsgfQogCitwcml2YXRlOgogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAg
aWYgKG1fZ2x4UGl4bWFwKSB7CkBAIC00NjEsMjEgKzI4MiwyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgZ2xYRGVzdHJveUNvbnRleHQoZGlzcGxheSgpLCBtX2dsQ29udGV4dCk7CiAgICAgICAg
ICAgICBtX2dsQ29udGV4dCA9IDA7CiAgICAgICAgIH0KKworICAgICAgICBpZiAobV9jb25maWdT
ZWxlY3RvcikKKyAgICAgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwogICAgIH0K
IAotICAgIE93blB0cjxPZmZTY3JlZW5Sb290V2luZG93PiBtX29mZlNjcmVlbldpbmRvdzsKICAg
ICBJbnRTaXplIG1fc2l6ZTsKICAgICBQaXhtYXAgbV94UGl4bWFwOwogICAgIEdMWFBpeG1hcCBt
X2dseFBpeG1hcDsKLSAgICBXaW5kb3cgbV9zdXJmYWNlOworICAgIHVpbnQzMl90IG1fc3VyZmFj
ZTsKICAgICBXaW5kb3cgbV9nbHhTdXJmYWNlOwogICAgIEdMWENvbnRleHQgbV9nbENvbnRleHQ7
CiAgICAgR0xYQ29udGV4dCBtX2RldGFjaGVkQ29udGV4dDsKICAgICBHTFhEcmF3YWJsZSBtX2Rl
dGFjaGVkU3VyZmFjZTsKLSAgICBHTFhGQkNvbmZpZyBtX2ZiQ29uZmlnOwotICAgIGJvb2wgbV90
ZXh0dXJlSXNZSW52ZXJ0ZWQ7CisgICAgT3duUHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZp
Z1NlbGVjdG9yOwogICAgIGJvb2wgbV9oYXNBbHBoYTsKICAgICBib29sIG1faXNSZWNlaXZlcjsK
KyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3M7CiB9OwogCiBzdGF0aWMgYm9vbCBy
ZXNvbHZlR0xNZXRob2RzKCkKQEAgLTUzOSwxMyArMzYyLDEwIEBAIHZvaWQgR3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybVBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVN
YXBwZXIsCiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm47CiAKLSAgICBUZXh0dXJl
TWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gbV9wcml2YXRlLT50ZXh0dXJlSXNZSW52ZXJ0ZWQoKSA/
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgOiAwOwotICAgIGZsYWdzIHw9IFRl
eHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQ7Ci0KICAgICBGbG9hdFJlY3QgcmVjdE9uQ29udGVu
dHMoRmxvYXRQb2ludDo6emVybygpLCBzaXplKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBh
ZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKICAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0
aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChyZWN0T25Db250ZW50cywgdGFy
Z2V0UmVjdCkpOwotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBw
ZXIpLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBmbGFncywgc2l6ZSwgcmVjdE9uQ29udGVudHMsIGFk
anVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJl
TWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmUodGV4dHVyZSwgbV9wcml2YXRl
LT5mbGFncygpLCBzaXplLCByZWN0T25Db250ZW50cywgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNp
dHksIG1hc2spOwogfQogCiB1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRnJvbnRC
dWZmZXIoKSBjb25zdApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTI2M2VhLi4wMDAwMDAwCi0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWDExV2luZG93UmVzb3VyY2VzLmgiCi0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2hh
cmVkWDExUmVzb3VyY2VzKiBTaGFyZWRYMTFSZXNvdXJjZXM6Om1fc3RhdGljU2hhcmVkUmVzb3Vy
Y2UgPSAwOwotCi1YMTFPZmZTY3JlZW5XaW5kb3c6OlgxMU9mZlNjcmVlbldpbmRvdygpCi0gICAg
OiBtX3NoYXJlZFJlc291cmNlcygwKQotewotICAgIG1fc2hhcmVkUmVzb3VyY2VzID0gU2hhcmVk
WDExUmVzb3VyY2VzOjpjcmVhdGUoKTsKLX0KLQotWDExT2ZmU2NyZWVuV2luZG93Ojp+WDExT2Zm
U2NyZWVuV2luZG93KCkKLXsKLX0KLQotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OnJlU2l6ZVdp
bmRvdyhjb25zdCBJbnRSZWN0JiBuZXdSZWN0LCBjb25zdCB1aW50MzJfdCB3aW5kb3dJZCkKLXsK
LSAgICBYUmVzaXplV2luZG93KG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIHdpbmRv
d0lkLCBuZXdSZWN0LndpZHRoKCksIG5ld1JlY3QuaGVpZ2h0KCkpOwotICAgIFhGbHVzaChtX3No
YXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpKTsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50
MzJfdCogaGFuZGxlSWQsIGNvbnN0IFhWaXN1YWxJbmZvJiB2aXNJbmZvLCBjb25zdCBJbnRTaXpl
JiBzaXplKQotewotICAgIGlmICghbV9zaGFyZWRSZXNvdXJjZXMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIERpc3BsYXkqIGRpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgp
OwotICAgIGlmICghZGlzcGxheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2aXNJbmZv
LnZpc3VhbCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1
YWwuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXaW5kb3cgeFdpbmRvdyA9IG1f
c2hhcmVkUmVzb3VyY2VzLT5nZXRYV2luZG93KCk7Ci0gICAgaWYgKCF4V2luZG93KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDb2xvcm1hcCBjbWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXks
IHhXaW5kb3csIHZpc0luZm8udmlzdWFsLCBBbGxvY05vbmUpOwotICAgIFhTZXRXaW5kb3dBdHRy
aWJ1dGVzIGF0dHJpYnV0ZTsKLSAgICBhdHRyaWJ1dGUuYmFja2dyb3VuZF9waXhlbCA9IFdoaXRl
UGl4ZWwoZGlzcGxheSwgMCk7Ci0gICAgYXR0cmlidXRlLmJvcmRlcl9waXhlbCA9IEJsYWNrUGl4
ZWwoZGlzcGxheSwgMCk7Ci0gICAgYXR0cmlidXRlLmNvbG9ybWFwID0gY21hcDsKLSAgICBhdHRy
aWJ1dGUuZXZlbnRfbWFzayA9IFJlc2l6ZVJlZGlyZWN0TWFzazsKLSAgICB1aW50MzJfdCB0ZW1w
SGFuZGxlSWQ7Ci0gICAgdGVtcEhhbmRsZUlkID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LCB4V2lu
ZG93LCAwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIHZpc0luZm8uZGVwdGgs
IElucHV0T3V0cHV0LCB2aXNJbmZvLnZpc3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVs
IHwgQ1dDb2xvcm1hcCwgJmF0dHJpYnV0ZSk7Ci0KLSAgICBpZiAoIXRlbXBIYW5kbGVJZCkgewot
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHdpbmRvdy4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFw
KGRpc3BsYXksIHRlbXBIYW5kbGVJZCwgMCk7Ci0gICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93
KGRpc3BsYXksIHRlbXBIYW5kbGVJZCwgQ29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOwotICAgIFhN
YXBXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkKTsKLSAgICAqaGFuZGxlSWQgPSB0ZW1wSGFu
ZGxlSWQ7Ci19Ci0KLSNpZiBVU0UoRUdMKQotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0
ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCogaGFuZGxlSWQsIGNvbnN0IEVHTGludCBpZCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBWaXN1YWxJRCB2aXN1YWxJZCA9IHN0YXRpY19jYXN0
PFZpc3VhbElEPihpZCk7Ci0KLSAgICBpZiAoIXZpc3VhbElkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBFR0wgaGFzIHN1Z2dlc3RlZCBhIHZpc3VhbCBpZCwgc28gZ2V0IHRoZSByZXN0IG9m
IHRoZSB2aXN1YWwgaW5mbyBmb3IgdGhhdCBpZC4KLSAgICBYVmlzdWFsSW5mbyB2aXN1YWxJbmZv
VGVtcGxhdGU7Ci0gICAgbWVtc2V0KCZ2aXN1YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlz
dWFsSW5mbykpOwotICAgIHZpc3VhbEluZm9UZW1wbGF0ZS52aXN1YWxpZCA9IHZpc3VhbElkOwot
ICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKLSAgICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IG1h
dGNoaW5nVmlzdWFscyA9IGFkb3B0UHRyKFhHZXRWaXN1YWxJbmZvKG1fc2hhcmVkUmVzb3VyY2Vz
LT54MTFEaXNwbGF5KCksIFZpc3VhbElETWFzaywgJnZpc3VhbEluZm9UZW1wbGF0ZSwgJm1hdGNo
aW5nQ291bnQpKTsKLSAgICBYVmlzdWFsSW5mbyogZm91bmRWaXN1YWwgPSAwOwotCi0gICAgaWYg
KG1hdGNoaW5nVmlzdWFscykgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaTwgbWF0Y2hpbmdD
b3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBYVmlzdWFsSW5mbyogdGVtcCA9ICZtYXRjaGluZ1Zp
c3VhbHNbaV07Ci0KLSAgICAgICAgICAgIGlmIChtX3NoYXJlZFJlc291cmNlcy0+aXNYUmVuZGVy
RXh0ZW5zaW9uU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1h
dCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQobV9zaGFyZWRSZXNvdXJjZXMtPngx
MURpc3BsYXkoKSwgdGVtcC0+dmlzdWFsKTsKLSAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYm
IGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZm91
bmRWaXN1YWwgPSB0ZW1wOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZW1wLT5kZXB0aCA9PSAz
MikgewotICAgICAgICAgICAgICAgIGZvdW5kVmlzdWFsID0gdGVtcDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb3VuZFZp
c3VhbCkKLSAgICAgICAgICAgIGNyZWF0ZU9mZlNjcmVlbldpbmRvdyhoYW5kbGVJZCwgKmZvdW5k
VmlzdWFsLCBzaXplKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotI2VuZGlmCi0KLXZvaWQgWDExT2Zm
U2NyZWVuV2luZG93OjpkZXN0cm95V2luZG93KGNvbnN0IHVpbnQzMl90IHdpbmRvd0lkKQotewot
ICAgIGlmICghd2luZG93SWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpc3BsYXkqIGRpc3Bs
YXkgPSBtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpOwotICAgIGlmICghZGlzcGxheSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgd2luZG93SWQp
OwotfQotCi1EaXNwbGF5KiBYMTFPZmZTY3JlZW5XaW5kb3c6Om5hdGl2ZVNoYXJlZERpc3BsYXko
KSBjb25zdAotewotICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpOwot
fQotCi1ib29sIFgxMU9mZlNjcmVlbldpbmRvdzo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVu
c2lvblN1cHBvcnRlZCgpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVz
b3VyY2VzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMmQzM2YuLjAwMDAwMDAK
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5k
b3dSZXNvdXJjZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFgxMVdpbmRvd1Jlc291cmNlc19oCi0jZGVmaW5lIFgxMVdpbmRv
d1Jlc291cmNlc19oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiT3duUHRyWDExLmgiCi0KLSNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLQotI2lmIFVTRShF
R0wpCi0jaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxYMTEv
ZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRl
ci5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2hhcmVkWDExUmVz
b3VyY2VzIDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNoYXJlZFgxMVJlc291cmNlcyk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBpZiAoIW1f
c3RhdGljU2hhcmVkUmVzb3VyY2UpCi0gICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNl
ID0gbmV3IFNoYXJlZFgxMVJlc291cmNlcygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X3N0YXRpY1NoYXJlZFJlc291cmNlLT5yZWYoKTsKLQotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSk7Ci0gICAgfQotCi0gICAgdm9pZCBkZXJlZigpCi0gICAg
ewotICAgICAgICBpZiAoZGVyZWZCYXNlKCkpIHsKLSAgICAgICAgICAgIG1fc3RhdGljU2hhcmVk
UmVzb3VyY2UgPSAwOwotICAgICAgICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBEaXNwbGF5KiB4MTFEaXNwbGF5KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9kaXNw
bGF5KSB7Ci0gICAgICAgICAgICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7Ci0gICAgICAg
ICAgICBpZiAoIW1fZGlzcGxheSkgewotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIG1ha2UgY29ubmVjdGlvbiB3aXRoIFgiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgICAgIH0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAgICAgICAgIGlm
IChtX2Rpc3BsYXkpIHsKLSAgICAgICAgICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJyb3JCYXNl
cDsKLSAgICAgICAgICAgICAgICBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbiA9IFhSZW5kZXJR
dWVyeUV4dGVuc2lvbihtX2Rpc3BsYXksICZldmVudEJhc2VwLCAmZXJyb3JCYXNlcCk7Ci0gICAg
ICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX2Rpc3BsYXk7
Ci0gICAgfQotCi0gICAgV2luZG93IGdldFhXaW5kb3coKQotICAgIHsKLSAgICAgICAgaWYgKCFt
X3dpbmRvdykgewotICAgICAgICAgICAgRGlzcGxheSogZHB5ID0geDExRGlzcGxheSgpOwotICAg
ICAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAgICAgICAgIGF0
dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOwotICAgICAgICAgICAgbV93aW5kb3cg
PSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSksIC0xLCAt
MSwgMSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkpOwotICAg
ICAgICAgICAgLy8gRnJvbSBodHRwOi8vdHJvbmNoZS5jb20vZ3VpL3gveGxpYi93aW5kb3cvYXR0
cmlidXRlcy8KLSAgICAgICAgICAgIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgbV93aW5k
b3csIENXT3ZlcnJpZGVSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOwotICAgICAgICAgICAgWE1hcFdp
bmRvdyhkcHksIG1fd2luZG93KTsKLQotICAgICAgICAgICAgaWYgKCFtX3dpbmRvdykgewotICAg
ICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gcm9vdCB3
aW5kb3cuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gbV93aW5kb3c7Ci0gICAgfQotCi0gICAgYm9vbCBpc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
c3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIFNoYXJl
ZFgxMVJlc291cmNlcygpCi0gICAgICAgIDogbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24oZmFs
c2UpCi0gICAgICAgICwgbV93aW5kb3coMCkKLSAgICAgICAgLCBtX2Rpc3BsYXkoMCkKLSAgICB7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB+U2hhcmVkWDExUmVzb3VyY2VzKCkKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9kaXNwbGF5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICht
X3dpbmRvdykgewotICAgICAgICAgICAgWFVubWFwV2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cp
OwotICAgICAgICAgICAgWERlc3Ryb3lXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAg
ICAgICAgICBtX3dpbmRvdyA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBYQ2xvc2VEaXNwbGF5
KG1fZGlzcGxheSk7Ci0gICAgICAgIG1fZGlzcGxheSA9IDA7Ci0gICAgfQotCi0gICAgc3RhdGlj
IFNoYXJlZFgxMVJlc291cmNlcyogbV9zdGF0aWNTaGFyZWRSZXNvdXJjZTsKLSAgICBib29sIG1f
c3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwotICAgIFdpbmRvdyBtX3dpbmRvdzsKLSAgICBEaXNw
bGF5KiBtX2Rpc3BsYXk7Ci19OwotCi1jbGFzcyBYMTFPZmZTY3JlZW5XaW5kb3cgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFgxMU9mZlNjcmVlbldpbmRvdyk7Ci0KLXB1YmxpYzoKLSAgICBY
MTFPZmZTY3JlZW5XaW5kb3coKTsKLSAgICB2aXJ0dWFsIH5YMTFPZmZTY3JlZW5XaW5kb3coKTsK
LSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZU9mZlNjcmVlbldpbmRv
dyh1aW50MzJfdCosIGNvbnN0IFhWaXN1YWxJbmZvJiwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXpl
KDEsIDEpKTsKLSNpZiBVU0UoRUdMKQotICAgIHZvaWQgY3JlYXRlT2ZmU2NyZWVuV2luZG93KHVp
bnQzMl90KiwgY29uc3QgRUdMaW50LCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoMSwgMSkpOwot
I2VuZGlmCi0jZW5kaWYKLSAgICB2b2lkIGRlc3Ryb3lXaW5kb3coY29uc3QgdWludDMyX3QpOwot
ICAgIHZvaWQgcmVTaXplV2luZG93KGNvbnN0IEludFJlY3QmLCBjb25zdCB1aW50MzJfdCk7Ci0g
ICAgRGlzcGxheSogbmF0aXZlU2hhcmVkRGlzcGxheSgpIGNvbnN0OwotICAgIGJvb2wgaXNYUmVu
ZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFNo
YXJlZFgxMVJlc291cmNlcz4gbV9zaGFyZWRSZXNvdXJjZXM7Ci19OwotCi19Ci0KLSNlbmRpZgot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvWDExV3JhcHBlci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L1gxMVdyYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQwNWI5YTkKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdyYXBwZXIuY3BwCkBAIC0wLDAgKzEsMjIxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWDExV3Jh
cHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBEaXNwbGF5Q29ubmVjdGlv
biB7CisgICAgRGlzcGxheUNvbm5lY3Rpb24oKQorICAgIHsKKyAgICAgICAgbV9kaXNwbGF5ID0g
WE9wZW5EaXNwbGF5KDApOworCisgICAgICAgIGlmICghbV9kaXNwbGF5KQorICAgICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb25uZWN0aW9uIHdpdGggWCIpOworICAgIH0KKwor
ICAgIH5EaXNwbGF5Q29ubmVjdGlvbigpCisgICAgeworICAgICAgICBYQ2xvc2VEaXNwbGF5KG1f
ZGlzcGxheSk7CisgICAgfQorCisgICAgRGlzcGxheSogZGlzcGxheSgpIHsgcmV0dXJuIG1fZGlz
cGxheTsgfQorcHJpdmF0ZToKKyAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Cit9OworCitzdHJ1Y3Qg
T2ZmU2NyZWVuUm9vdFdpbmRvdyB7CisKKyAgICBPZmZTY3JlZW5Sb290V2luZG93KCkKKyAgICB7
CisgICAgICAgIG1fd2luZG93ID0gMDsKKyAgICAgICAgRGlzcGxheSogZHB5ID0gWDExV3JhcHBl
cjo6bmF0aXZlRGlzcGxheSgpOworICAgICAgICBpZiAoIWRweSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAgICBh
dHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgbV93aW5kb3cgPSBY
Q3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSksIC0xLCAtMSwg
MSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkpOworICAgICAg
ICAvLyBGcm9tIGh0dHA6Ly90cm9uY2hlLmNvbS9ndWkveC94bGliL3dpbmRvdy9hdHRyaWJ1dGVz
LworICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBDV092ZXJy
aWRlUmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKKyAgICAgICAgWE1hcFdpbmRvdyhkcHksIG1fd2lu
ZG93KTsKKworICAgICAgICBpZiAoIW1fd2luZG93KQorICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiByb290IHdpbmRvdy4iKTsKKyAgICB9CisKKyAgICB+
T2ZmU2NyZWVuUm9vdFdpbmRvdygpCisgICAgeworICAgICAgICBpZiAoIVgxMVdyYXBwZXI6Om5h
dGl2ZURpc3BsYXkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV93aW5k
b3cpIHsKKyAgICAgICAgICAgIFhVbm1hcFdpbmRvdyhYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5
KCksIG1fd2luZG93KTsKKyAgICAgICAgICAgIFhEZXN0cm95V2luZG93KFgxMVdyYXBwZXI6Om5h
dGl2ZURpc3BsYXkoKSwgbV93aW5kb3cpOworICAgICAgICAgICAgbV93aW5kb3cgPSAwOworICAg
ICAgICB9CisgICAgfQorCisgICAgV2luZG93IHJvb3RXaW5kb3coKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fd2luZG93OworICAgIH0KKworcHJpdmF0ZToKKyAgICBXaW5kb3cgbV93aW5kb3c7
Cit9OworCit2b2lkIFgxMVdyYXBwZXI6OnJlc2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiBuZXdS
ZWN0LCBjb25zdCB1aW50MzJfdCB3aW5kb3dJZCkKK3sKKyAgICBYUmVzaXplV2luZG93KG5hdGl2
ZURpc3BsYXkoKSwgd2luZG93SWQsIG5ld1JlY3Qud2lkdGgoKSwgbmV3UmVjdC5oZWlnaHQoKSk7
CisgICAgWEZsdXNoKG5hdGl2ZURpc3BsYXkoKSk7Cit9CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKKwordm9pZCBYMTFXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3Qq
IGhhbmRsZUlkLCBjb25zdCBYVmlzdWFsSW5mbyYgdmlzSW5mbywgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0aXZlRGlzcGxheSgpOworICAgIGlmICgh
ZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2aXNJbmZvLnZpc3VhbCkgewor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1YWwuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXaW5kb3cgeFdpbmRvdyA9IG9mZnNjcmVlblJvb3RX
aW5kb3coKTsKKyAgICBpZiAoIXhXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIENvbG9y
bWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdywgdmlzSW5mby52aXN1
YWwsIEFsbG9jTm9uZSk7CisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlOworICAg
IGF0dHJpYnV0ZS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKKyAg
ICBhdHRyaWJ1dGUuYm9yZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKKyAgICBh
dHRyaWJ1dGUuY29sb3JtYXAgPSBjbWFwOworICAgIGF0dHJpYnV0ZS5ldmVudF9tYXNrID0gUmVz
aXplUmVkaXJlY3RNYXNrOworICAgIHVpbnQzMl90IHRlbXBIYW5kbGVJZDsKKyAgICB0ZW1wSGFu
ZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgMCwgdmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8u
dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmli
dXRlKTsKKworICAgIGlmICghdGVtcEhhbmRsZUlkKSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93LiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgdGVtcEhhbmRsZUlk
LCAwKTsKKyAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlk
LCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCB0ZW1w
SGFuZGxlSWQpOworICAgICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsKK30KKworI2lmIFVTRShF
R0wpCit2b2lkIFgxMVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCogaGFu
ZGxlSWQsIGNvbnN0IEVHTGludCBpZCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBWaXN1
YWxJRCB2aXN1YWxJZCA9IHN0YXRpY19jYXN0PFZpc3VhbElEPihpZCk7CisKKyAgICBpZiAoIXZp
c3VhbElkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBFR0wgaGFzIHN1Z2dlc3RlZCBhIHZp
c3VhbCBpZCwgc28gZ2V0IHRoZSByZXN0IG9mIHRoZSB2aXN1YWwgaW5mbyBmb3IgdGhhdCBpZC4K
KyAgICBYVmlzdWFsSW5mbyB2aXN1YWxJbmZvVGVtcGxhdGU7CisgICAgbWVtc2V0KCZ2aXN1YWxJ
bmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFsSW5mbykpOworICAgIHZpc3VhbEluZm9UZW1w
bGF0ZS52aXN1YWxpZCA9IHZpc3VhbElkOworICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKKyAg
ICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IG1hdGNoaW5nVmlzdWFscyhYR2V0VmlzdWFsSW5mbyhu
YXRpdmVEaXNwbGF5KCksIFZpc3VhbElETWFzaywgJnZpc3VhbEluZm9UZW1wbGF0ZSwgJm1hdGNo
aW5nQ291bnQpKTsKKyAgICBYVmlzdWFsSW5mbyogZm91bmRWaXN1YWwgPSAwOworCisgICAgaWYg
KG1hdGNoaW5nVmlzdWFscykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaTwgbWF0Y2hpbmdD
b3VudDsgaSsrKSB7CisgICAgICAgICAgICBYVmlzdWFsSW5mbyogdGVtcCA9ICZtYXRjaGluZ1Zp
c3VhbHNbaV07CisKKyAgICAgICAgICAgIGlmIChpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQo
KSkgeworICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVy
RmluZFZpc3VhbEZvcm1hdChuYXRpdmVEaXNwbGF5KCksIHRlbXAtPnZpc3VhbCk7CisgICAgICAg
ICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvdW5kVmlzdWFsID0gdGVtcDsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAodGVtcC0+ZGVwdGggPT0gMzIpIHsKKyAgICAgICAgICAgICAgICBmb3VuZFZpc3VhbCA9
IHRlbXA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZm91bmRWaXN1YWwpCisgICAgICAgICAgICBjcmVhdGVPZmZTY3JlZW5X
aW5kb3coaGFuZGxlSWQsICpmb3VuZFZpc3VhbCwgc2l6ZSk7CisgICAgfQorfQorI2VuZGlmCisK
KyNlbmRpZgorCit2b2lkIFgxMVdyYXBwZXI6OmRlc3Ryb3lXaW5kb3coY29uc3QgdWludDMyX3Qg
d2luZG93SWQpCit7CisgICAgaWYgKCF3aW5kb3dJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3BsYXkoKTsKKyAgICBpZiAoIWRpc3BsYXkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIHdpbmRvd0lkKTsK
K30KKworYm9vbCBYMTFXcmFwcGVyOjppc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKQorewor
ICAgIHN0YXRpYyBib29sIHF1ZXJ5RG9uZSA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzWFJlbmRlckV4dGVuc2lvbiA9IGZhbHNlOworCisgICAgaWYgKCFxdWVyeURvbmUpIHsKKyAg
ICAgICAgcXVlcnlEb25lID0gdHJ1ZTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAg
ICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3BsYXkoKTsKKworICAgICAgICBpZiAoZGlz
cGxheSkgeworICAgICAgICAgICAgaW50IGV2ZW50QmFzZXAsIGVycm9yQmFzZXA7CisgICAgICAg
ICAgICBzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVlcnlFeHRlbnNpb24oZGlz
cGxheSwgJmV2ZW50QmFzZXAsICZlcnJvckJhc2VwKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAg
fQorCisgICAgcmV0dXJuIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKK30KKworRGlzcGxheSog
WDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpCit7CisgICAgLy8gRGlzcGxheSBjb25uZWN0aW9u
IHdpbGwgb25seSBiZSBicm9rZW4gYXQgcHJvZ3JhbSBzaHV0ZG93bi4KKyAgICBzdGF0aWMgRGlz
cGxheUNvbm5lY3Rpb24gZGlzcGxheUNvbm5lY3Rpb247CisgICAgcmV0dXJuIGRpc3BsYXlDb25u
ZWN0aW9uLmRpc3BsYXkoKTsKK30KKworV2luZG93IFgxMVdyYXBwZXI6Om9mZnNjcmVlblJvb3RX
aW5kb3coKQoreworICAgIHN0YXRpYyBPZmZTY3JlZW5Sb290V2luZG93IG9mZnNjcmVlbldpbmRv
dzsKKyAgICByZXR1cm4gb2Zmc2NyZWVuV2luZG93LnJvb3RXaW5kb3coKTsKK30KKworfQpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFX
cmFwcGVyLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gx
MVdyYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNThiYmFhCi0t
LSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFXcmFwcGVyLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgWDExV3JhcHBlcl9oCisjZGVmaW5lIFgxMVdyYXBwZXJfaAorCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIk93blB0clgxMS5oIgorCisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisKKyNpZiBVU0UoRUdMKQorI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KKyNlbmRp
ZgorCisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPFgx
MS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8WDExL1hsaWIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBoYW5kbGluZyBYRXJyb3IuCitz
dGF0aWMgYm9vbCB2YWxpZE9wZXJhdGlvbiA9IHRydWU7CitzdGF0aWMgaW50IGhhbmRsZVhQaXht
YXBDcmVhdGlvbkVycm9yKERpc3BsYXkqLCBYRXJyb3JFdmVudCogZXZlbnQpCit7CisgICAgaWYg
KGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZE1hdGNoIHx8IGV2ZW50LT5lcnJvcl9jb2RlID09IEJh
ZFdpbmRvdyB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRBbGxvYykgeworICAgICAgICB2YWxp
ZE9wZXJhdGlvbiA9IGZhbHNlOworCisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmVycm9yX2NvZGUp
IHsKKyAgICAgICAgY2FzZSBCYWRNYXRjaDoKKyAgICAgICAgICAgIExPR19FUlJPUigiQmFkTWF0
Y2guIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCYWRXaW5kb3c6CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkJhZFdpbmRvdy4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEJhZEFsbG9jOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRBbGxvYy4iKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworY2xhc3MgWDExV3JhcHBl
ciB7CisKK3B1YmxpYzoKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBzdGF0aWMgdm9p
ZCBjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBYVmlzdWFsSW5mbyYsIGNv
bnN0IEludFNpemUmID0gSW50U2l6ZSgxLCAxKSk7CisjaWYgVVNFKEVHTCkKKyAgICBzdGF0aWMg
dm9pZCBjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBFR0xpbnQsIGNvbnN0
IEludFNpemUmID0gSW50U2l6ZSgxLCAxKSk7CisjZW5kaWYKKyNlbmRpZgorICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3lXaW5kb3coY29uc3QgdWludDMyX3QpOworICAgIHN0YXRpYyB2b2lkIHJlc2l6
ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgY29uc3QgdWludDMyX3QpOworICAgIHN0YXRpYyBib29s
IGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOworICAgIHN0YXRpYyBEaXNwbGF5KiBuYXRp
dmVEaXNwbGF5KCk7CisgICAgc3RhdGljIFdpbmRvdyBvZmZzY3JlZW5Sb290V2luZG93KCk7Cit9
OworCitjbGFzcyBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgeworCitwdWJsaWM6
CisgICAgU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKCkKKyAgICB7CisgICAgICAg
IC8vIFhTeW5jIG11c3QgYmUgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGN1cnJlbnQgZXJyb3JzIGFy
ZSBoYW5kbGVkIGJ5IHRoZSBvcmlnaW5hbCBoYW5kbGVyLgorICAgICAgICBYU3luYyhYMTFXcmFw
cGVyOjpuYXRpdmVEaXNwbGF5KCksIGZhbHNlKTsKKyAgICAgICAgbV9wcmV2aW91c0Vycm9ySGFu
ZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IpOworICAg
IH0KKworICAgIH5TY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKQorICAgIHsKKyAg
ICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KKyAgICAgICAgWFNldEVycm9y
SGFuZGxlcihtX3ByZXZpb3VzRXJyb3JIYW5kbGVyKTsKKyAgICB9CisKKyAgICBib29sIGlzVmFs
aWRPcGVyYXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgdmFsaWRPcGVyYXRpb24gPSB0cnVl
OworICAgICAgICAvLyBYU3luYyBpcyBuZWVkZWQgdG8gY2F0Y2ggcG9zc2libGUgZXJyb3JzIGFz
IHRoZXkgYXJlIGdlbmVyYXRlZCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgWFN5bmMoWDExV3Jh
cHBlcjo6bmF0aXZlRGlzcGxheSgpLCBmYWxzZSk7CisgICAgICAgIHJldHVybiB2YWxpZE9wZXJh
dGlvbjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgWEVycm9ySGFuZGxlciBtX3ByZXZpb3VzRXJy
b3JIYW5kbGVyOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBUb29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZiBUb29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Zl
YXR1cmVzLnByZgppbmRleCBjYzkwNzJkLi5lMzljMGMyIDEwMDY0NAotLS0gVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKKysrIFRvb2xzL3FtYWtlL21rc3BlY3MvZmVh
dHVyZXMvZmVhdHVyZXMucHJmCkBAIC0xMzgsNyArMTM4LDcgQEAgZGVmaW5lVGVzdChkZXRlY3RG
ZWF0dXJlcykgewogICAgIHVzZT8oM2RfZ3JhcGhpY3MpIHsKICAgICAgICAgbWFjOiBXRUJLSVRf
Q09ORklHICs9IHVzZV9ncmFwaGljc19zdXJmYWNlCiAgICAgICAgIHdpbjMyOmNvbnRhaW5zKFFU
X0NPTkZJRywgb3BlbmdsZXMyKTogV0VCS0lUX0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFj
ZQotICAgICAgICBsaW51eC0qOmNvbnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfZ2x4KTpjb250
YWlucyhXRUJLSVRfQ09ORklHLCBoYXZlX3hjb21wb3NpdGUpOmNvbnRhaW5zKFdFQktJVF9DT05G
SUcsIGhhdmVfeHJlbmRlcik6IFdFQktJVF9DT05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZhY2UK
KyAgICAgICAgbGludXgtKjpjb250YWlucyhXRUJLSVRfQ09ORklHLCBoYXZlX2dseCk6Y29udGFp
bnMoV0VCS0lUX0NPTkZJRywgaGF2ZV94Y29tcG9zaXRlKTpjb250YWlucyhXRUJLSVRfQ09ORklH
LCBoYXZlX3hyZW5kZXIpOiBXRUJLSVRfQ09ORklHICs9IHVzZV9ncmFwaGljc19zdXJmYWNlIHVz
ZV9nbHgKICAgICB9CiAKICAgICAjIFNsaWRlciBUb3VjaCBpcyBzZW5zaWJsZSB0byB1c2Ugd2hl
biBjb21waWxpbmcgV2ViS2l0Mgo=
</data>
<flag name="commit-queue"
          id="205646"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186280</attachid>
            <date>2013-02-03 17:09:38 -0800</date>
            <delta_ts>2013-02-04 12:30:28 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>glxchanges.patch</filename>
            <type>text/plain</type>
            <size>59168</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDE3OWZhN2UuLmI5ZDA3NjAgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDEz
LTAyLTAzICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtRdF1bV2ViR0xdIFNoYXJlIHRoZSBjb21tb24gY29kZSBiZXR3ZWVu
IEdyYXBoaWNzU3VyZmFjZUdMWCBhbmQgWDExV2luZG93UmVzb3VyY2VzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBX
ZWJHTCB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IGR1cGxpY2F0ZSBj
b2RlIGluIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlR0xY
LiBObyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAg
KFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjpHTFhDb25maWdTZWxlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6dmlzdWFsSW5mbyk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6cEJ1ZmZlckNvbnRleHRDb25maWcpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OmNyZWF0ZVN1cmZhY2VDb25maWcp
OgorICAgICAgICAoR0xYQ29uZmlnU2VsZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRp
YWxpemVBUkJFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRl
eHQ6OkdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVu
Q29udGV4dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250
ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNj
cmVlbkNvbnRleHQ6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhDb250ZXh0Lmg6CisgICAgICAgIChHTFhPZmZTY3JlZW5Db250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21l
dHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYUEJ1ZmZlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaDoKKyAgICAgICAgKEdMWFRy
YW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoR0xYUEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6Okdy
YXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNl
UHJpdmF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChHcmFwaGljc1N1cmZhY2VQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmNyZWF0ZVN1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlUGl4bWFw
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmRpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZmxhZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAg
ICAgICAgTm8gbmV3IGZ1bmN0aW9uYWxpdHkgYWRkZWQuIE1hZGUgY2hhbmdlcyB0byB0YWtlIHRo
ZSBjb21tb24gY29kZSBpbnRvIHVzZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV3JhcHBlci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVz
b3VyY2VzLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUNvbm5lY3Rpb246OkRpc3BsYXlDb25uZWN0aW9uKToKKyAgICAgICAgKERpc3BsYXlDb25uZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9uOjp+RGlzcGxheUNvbm5l
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNvbm5lY3Rpb246OmRpc3BsYXkpOgor
ICAgICAgICAoT2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3Jl
ZW5Sb290V2luZG93OjpPZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok9m
ZlNjcmVlblJvb3RXaW5kb3c6On5PZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKFdlYkNv
cmU6Ok9mZlNjcmVlblJvb3RXaW5kb3c6OnJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6
WDExV3JhcHBlcjo6cmVzaXplV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMVdyYXBwZXI6
OmNyZWF0ZU9mZlNjcmVlbldpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpYMTFXcmFwcGVyOjpk
ZXN0cm95V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMVdyYXBwZXI6OmlzWFJlbmRlckV4
dGVuc2lvblN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpYMTFXcmFwcGVyOjpuYXRpdmVE
aXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMVdyYXBwZXI6Om9mZnNjcmVlblJvb3RXaW5k
b3cpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXcmFwcGVy
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVY
UGl4bWFwQ3JlYXRpb25FcnJvcik6CisgICAgICAgIChYMTFXcmFwcGVyKToKKyAgICAgICAgKFNj
b3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY29w
ZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9y
SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhh
bmRsZXI6On5TY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyOjppc1ZhbGlkT3BlcmF0aW9u
KToKKyAgICAgICAgUmVuYW1lZCBYMTFXaW5kb3dSZXNvdXJjZXMgYXMgWDExV3JhcHBlci4gTW92
ZWQgY29tbW9uIGNvZGUgZnJvbSBHcmFwaGljc1N1cmZhY2VHTFggdG8gWDExV3JhcHBlci4KKwog
MjAxMy0wMi0wMyAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3JnPgoKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCAzNDMyMTVlLi5hZmQ0YmZkIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC0xMzEsOSArMTMxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCi0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZv
cm1hdC5jcHAKIAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2Rl
ckNhaXJvLmNwcApAQCAtMzE0LDggKzMxMSw3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJm
YWNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NT
dXJmYWNlR0xYLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
V2luZG93UmVzb3VyY2VzLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvWDExV3JhcHBlci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtLmNwcAogICAgICkKQEAgLTMyNiw2ICszMjIsMTIgQEAgaWYgKFdU
Rl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMQ29udGV4dC5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xTdXJmYWNlLmNwcAogICAgICAgICApCisgICAgZWxzZSAoKQorICAgICAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcAorICAgICAgICApCiAgICAg
ZW5kaWYgKCkKIAogICAgIGlmIChXVEZfVVNFX09QRU5HTF9FU18yKQpkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA5MGVm
YzQwLi40NGViNmFhIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNDE5MSw3ICs0MTkxLDEyIEBAIHVzZT8oR1JBUEhJ
Q1NfU1VSRkFDRSkgewogICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL3dpbi9HcmFwaGljc1N1cmZhY2VXaW4uY3BwCiAgICAgfQogICAgIGhhdmU/KFhDT01QT1NJ
VEUpIHsKLSAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R3JhcGhpY3NTdXJmYWNlR0xYLmNwcAorICAgICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXcmFwcGVyLmggXAorICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgKKyAg
ICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExV3JhcHBlci5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5j
cHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZh
Y2UuY3BwCmluZGV4IDI2ZDU2YTUuLmU2NzExZjggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApAQCAt
MzMsMTMgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEVHTFdpbmRvd1RyYW5zcG9ydFN1
cmZhY2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQogICAgIDogR0xQbGF0Zm9ybVN1cmZh
Y2UoKQogewotICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgTmF0aXZlT2ZmU2Ny
ZWVuV2luZG93KCkpOwotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgRUdMQ29u
ZmlnU2VsZWN0b3IobV9uYXRpdmVSZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgpKSk7Cisg
ICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdTZWxlY3RvcihOYXRp
dmVXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCkpKTsKICAgICBtX3NoYXJlZERpc3BsYXkgPSBtX2Nv
bmZpZ1NlbGVjdG9yLT5kaXNwbGF5KCk7CiAKICAgICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVH
TF9OT19ESVNQTEFZKSB7CiAgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwotICAg
ICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNTcsNyArNTUsNyBAQCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dU
cmFuc3BvcnRTdXJmYWNlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbmF0aXZl
UmVzb3VyY2UtPmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsIHZpc3VhbElk
KTsKKyAgICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFu
ZGxlLCB2aXN1YWxJZCk7CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CiAgICAgICAgIGRl
c3Ryb3koKTsKQEAgLTEwNCw3ICsxMDIsNyBAQCB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OnN3YXBCdWZmZXJzKCkKIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJv
eSgpCiB7CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKLSAgICBtX25hdGl2ZVJl
c291cmNlLT5kZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBOYXRpdmVXcmFwcGVy
OjpkZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKICAgICBmcmVlRUdMUmVzb3VyY2VzKCk7
CiAgICAgbV9idWZmZXJIYW5kbGUgPSAwOwogfQpAQCAtMTI4LDcgKzEyNiw3IEBAIHZvaWQgRUdM
V2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNlcygpCiB2b2lkIEVHTFdpbmRv
d1RyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB7
CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwotICAgIG1fbmF0
aXZlUmVzb3VyY2UtPnJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2J1ZmZlckhhbmRsZSk7CisgICAg
TmF0aXZlV3JhcHBlcjo6cmVzaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKIH0K
IAogfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTFN1cmZhY2UuaAppbmRleCA1YzI4OGE5Li4zM2Y2NTZjIDEwMDY0NAotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaAor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZh
Y2UuaApAQCAtMzEsMTMgKzMxLDEzIEBACiAjaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgogCi0jaW5jbHVkZSA8Z2x4L1gxMVdpbmRv
d1Jlc291cmNlcy5oPgorI2luY2x1ZGUgPGdseC9YMTFXcmFwcGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi10eXBlZGVmIFgxMU9mZlNjcmVlbldpbmRvdyBOYXRpdmVPZmZTY3JlZW5X
aW5kb3c7Cit0eXBlZGVmIFgxMVdyYXBwZXIgTmF0aXZlV3JhcHBlcjsKIAogLy8gQ29udGVudHMg
b2YgdGhlIHN1cmZhY2UgYXJlIGJhY2tlZCBieSBuYXRpdmUgd2luZG93LgogY2xhc3MgRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CkBAIC01Miw3
ICs1Miw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGZyZWVFR0xSZXNvdXJjZXMo
KTsKLSAgICBPd25QdHI8TmF0aXZlT2ZmU2NyZWVuV2luZG93PiBtX25hdGl2ZVJlc291cmNlOwog
ICAgIE93blB0cjxFR0xDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKIH07CiAKZGlm
ZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
Q29uZmlnU2VsZWN0b3IuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaAppbmRleCBkZDFiNjJiLi4yYTdlMWE5IDEwMDY0NAot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZp
Z1NlbGVjdG9yLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9HTFhDb25maWdTZWxlY3Rvci5oCkBAIC0yNiwyMSArMjYsMzAgQEAKICNpZm5kZWYgR0xY
Q29uZmlnU2VsZWN0b3JfaAogI2RlZmluZSBHTFhDb25maWdTZWxlY3Rvcl9oCiAKLSNpbmNsdWRl
ICJYMTFXaW5kb3dSZXNvdXJjZXMuaCIKLQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgVVNFKEdMWCkKIAorI2luY2x1ZGUgIlgxMVdyYXBwZXIuaCIKKyNpbmNsdWRlIDxvcGVu
Z2wvR0xEZWZzLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGludCBjbGllbnRB
dHRyaWJ1dGVzW10gPSB7CisgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaXMgYSBzZXQga2V5IHZh
bHVlIHBhaXJzIHN0b3JlZCBpbiBhIHNpbXBsZSBhcnJheS4KKyAgICBHTFhfTEVWRUwsICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLAorICAgIHN0YXRpY19jYXN0PGludD4oR0xYX1ZJU1VBTF9J
RCksICAgIDAsCisgICAgR0xYX0RSQVdBQkxFX1RZUEUsICAgICAgICAgICAgICAgICAgR0xYX1BJ
WE1BUF9CSVQsCisgICAgR0xYX0JJTkRfVE9fVEVYVFVSRV9UQVJHRVRTX0VYVCwgICAgR0xYX1RF
WFRVUkVfMkRfQklUX0VYVCwKKyAgICBHTFhfQklORF9UT19URVhUVVJFX1JHQkFfRVhULCAgICAg
ICBUUlVFLAorICAgIDAKK307CisKIGNsYXNzIEdMWENvbmZpZ1NlbGVjdG9yIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHTFhDb25maWdTZWxlY3Rvcik7CiAKIHB1YmxpYzoKLSAgICBHTFhD
b25maWdTZWxlY3RvcihEaXNwbGF5KiB4RGlzcGxheSwgYm9vbCBzdXBwb3J0c1hSZW5kZXJFeHRl
bnNpb24pCisgICAgR0xYQ29uZmlnU2VsZWN0b3IoKQogICAgICAgICA6IG1fcGJ1ZmZlckZCQ29u
ZmlnKDApCiAgICAgICAgICwgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKDApCi0gICAgICAgICwg
bV9zaGFyZWREaXNwbGF5KHhEaXNwbGF5KQotICAgICAgICAsIG1fc3VwcG9ydHNYUmVuZGVyRXh0
ZW5zaW9uKHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikKICAgICB7CiAgICAgfQogCkBAIC01Myw3
ICs2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFzdXJmYWNlQ29udGV4dENvbmZpZygpKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIGdsWEdldFZpc3VhbEZyb21G
QkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyk7CisgICAg
ICAgIHJldHVybiBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoWDExV3JhcHBlcjo6bmF0aXZlRGlz
cGxheSgpLCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcpOwogICAgIH0KIAogICAgIEdMWEZCQ29u
ZmlnIHBCdWZmZXJDb250ZXh0Q29uZmlnKCkKQEAgLTcwLDEwICs3OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBOb25lCiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBpbnQgbnVt
QXZhaWxhYmxlQ29uZmlnczsKLSAgICAgICAgICAgIE93blB0clgxMTxHTFhGQkNvbmZpZz4gdGVt
cChnbFhDaG9vc2VGQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIERlZmF1bHRTY3JlZW4obV9zaGFy
ZWREaXNwbGF5KSwgYXR0cmlidXRlcywgJm51bUF2YWlsYWJsZUNvbmZpZ3MpKTsKLSAgICAgICAg
ICAgIGlmIChudW1BdmFpbGFibGVDb25maWdzKQotICAgICAgICAgICAgICAgIG1fcGJ1ZmZlckZC
Q29uZmlnID0gdGVtcFswXTsKKyAgICAgICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gZmluZE1h
dGNoaW5nQ29uZmlnKGF0dHJpYnV0ZXMsIDMyKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVy
biBtX3BidWZmZXJGQkNvbmZpZzsKQEAgLTg3LDYgKzkzLDE0IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKICAgICB9CiAKKyAgICBHTFhGQkNvbmZp
ZyBzdXJmYWNlQ2xpZW50Q29uZmlnKGludCBkZXB0aCwgVmlzdWFsSUQgaWQpCisgICAgeworICAg
ICAgICBjbGllbnRBdHRyaWJ1dGVzWzNdID0gc3RhdGljX2Nhc3Q8aW50PihpZCk7CisgICAgICAg
IGNsaWVudEF0dHJpYnV0ZXNbOF0gPSBkZXB0aCA9PSAzMiA/IEdMWF9CSU5EX1RPX1RFWFRVUkVf
UkdCQV9FWFQgOiBHTFhfQklORF9UT19URVhUVVJFX1JHQl9FWFQ7CisKKyAgICAgICAgcmV0dXJu
IGZpbmRNYXRjaGluZ0NvbmZpZyhjbGllbnRBdHRyaWJ1dGVzLCBkZXB0aCwgaWQpOworICAgIH0K
KwogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKICAgICAgICAgbV9wYnVmZmVyRkJDb25maWcgPSAw
OwpAQCAtMTEwLDQzICsxMjQsNjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vbmUKICAgICAg
ICAgfTsKIAorICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBmaW5kTWF0Y2hpbmdD
b25maWcoYXR0cmlidXRlcywgMzIpOworICAgIH0KKworICAgIEdMWEZCQ29uZmlnIGZpbmRNYXRj
aGluZ0NvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdLCBpbnQgZGVwdGgpCisgICAgewogICAg
ICAgICBpbnQgbnVtQXZhaWxhYmxlQ29uZmlnczsKLSAgICAgICAgT3duUHRyWDExPEdMWEZCQ29u
ZmlnPiB0ZW1wKGdsWENob29zZUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgRGVmYXVsdFNjcmVl
bihtX3NoYXJlZERpc3BsYXkpLCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29uZmlncykpOwor
ICAgICAgICBPd25QdHJYMTE8R0xYRkJDb25maWc+IHRlbXAoZ2xYQ2hvb3NlRkJDb25maWcoWDEx
V3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKFgxMVdyYXBwZXI6Om5hdGl2
ZURpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZudW1BdmFpbGFibGVDb25maWdzKSk7CiAKLSAgICAg
ICAgaWYgKCFudW1BdmFpbGFibGVDb25maWdzKSB7Ci0gICAgICAgICAgICBtX3N1cmZhY2VDb250
ZXh0RkJDb25maWcgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAg
IGlmICghbnVtQXZhaWxhYmxlQ29uZmlncyB8fCAhdGVtcC5nZXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gc2NvcGVkVmlzdWFsSW5m
bzsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdmFpbGFibGVDb25maWdzOyArK2kp
IHsKLSAgICAgICAgICAgIHNjb3BlZFZpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25m
aWcobV9zaGFyZWREaXNwbGF5LCB0ZW1wW2ldKTsKKyAgICAgICAgICAgIHNjb3BlZFZpc3VhbElu
Zm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgp
LCB0ZW1wW2ldKTsKICAgICAgICAgICAgIGlmICghc2NvcGVkVmlzdWFsSW5mby5nZXQoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAg
ICAgICAgIGlmIChtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikgewotICAgICAgICAgICAgICAg
IFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX3No
YXJlZERpc3BsYXksIHNjb3BlZFZpc3VhbEluZm8tPnZpc3VhbCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IHRlbXBbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChYMTFX
cmFwcGVyOjppc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkgeworICAgICAgICAgICAgICAg
IFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChYMTFX
cmFwcGVyOjpuYXRpdmVEaXNwbGF5KCksIHNjb3BlZFZpc3VhbEluZm8tPnZpc3VhbCk7CisgICAg
ICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBkZXB0aCA9PSAzMiAmJiBmb3JtYXQtPmRpcmVjdC5h
bHBoYU1hc2sgPiAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcFtpXTsKICAgICAg
ICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgaWYgKCFtX3N1cmZhY2VDb250ZXh0RkJDb25m
aWcgJiYgc2NvcGVkVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKLSAgICAgICAgICAgICAgICBt
X3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSB0ZW1wW2ldOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjb3BlZFZpc3VhbEluZm8tPmRlcHRo
ID09IGRlcHRoKQorICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wW2ldOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gRGlkIG5vdCBmaW5kIGFueSB2aXN1YWwgc3VwcG9ydGluZyBhbHBoYSwgc2Vs
ZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUgY29uZmlnLgotICAgICAgICBpZiAoIW1fc3VyZmFjZUNv
bnRleHRGQkNvbmZpZykKLSAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IHRl
bXBbMF07CisgICAgICAgIHJldHVybiB0ZW1wWzBdOworICAgIH0KKworICAgIEdMWEZCQ29uZmln
IGZpbmRNYXRjaGluZ0NvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1tdLCBpbnQgZGVwdGgsIFZp
c3VhbElEIGlkKQorICAgIHsKKyAgICAgICAgaW50IG51bUF2YWlsYWJsZUNvbmZpZ3M7CisgICAg
ICAgIE93blB0clgxMTxHTFhGQkNvbmZpZz4gdGVtcChnbFhDaG9vc2VGQkNvbmZpZyhYMTFXcmFw
cGVyOjpuYXRpdmVEaXNwbGF5KCksIERlZmF1bHRTY3JlZW4oWDExV3JhcHBlcjo6bmF0aXZlRGlz
cGxheSgpKSwgYXR0cmlidXRlcywgJm51bUF2YWlsYWJsZUNvbmZpZ3MpKTsKKworICAgICAgICBp
ZiAoIW51bUF2YWlsYWJsZUNvbmZpZ3MgfHwgIXRlbXAuZ2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gMDsKKworICAgICAgICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IHNjb3BlZFZpc3VhbEluZm87
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXZhaWxhYmxlQ29uZmlnczsgKytpKSB7
CisgICAgICAgICAgICBzY29wZWRWaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmln
KFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSwgdGVtcFtpXSk7CisgICAgICAgICAgICBpZiAo
IXNjb3BlZFZpc3VhbEluZm8uZ2V0KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGlmIChzY29wZWRWaXN1YWxJbmZvLT5kZXB0aCA9PSBkZXB0aCAmJiBzY29wZWRW
aXN1YWxJbmZvLT52aXN1YWxpZCA9PSBpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVtcFtp
XTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERpZCBub3QgZmluZCBhbnkgcmlnaHQgdmlzdWFs
LCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBjb25maWcuCisgICAgICAgIHJldHVybiB0ZW1w
WzBdOwogICAgIH0KIAogICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOwogICAgIEdM
WEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKLSAgICBEaXNwbGF5KiBtX3NoYXJl
ZERpc3BsYXk7Ci0gICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R0xYQ29udGV4dC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWENvbnRleHQuY3BwCmluZGV4IGE5ZjMyMmQuLmIzYTZlNzkgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250
ZXh0LmNwcApAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoR0xYKQogCisjaW5jbHVkZSAiWDExV3JhcHBlci5oIgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHR5cGVkZWYgR0xYQ29udGV4dCAoKkdMWENSRUFURUNPTlRFWFRBVFRSSUJT
QVJCUFJPQykoRGlzcGxheSosIEdMWEZCQ29uZmlnLCBHTFhDb250ZXh0LCBCb29sLCBjb25zdCBp
bnQqKTsKQEAgLTM4LDIwICs0MCwxOSBAQCBzdGF0aWMgaW50IEF0dHJpYnNbXSA9IHsKICAgICBH
TFhfTE9TRV9DT05URVhUX09OX1JFU0VUX0FSQiwKICAgICAwIH07CiAKLXN0YXRpYyB2b2lkIGlu
aXRpYWxpemVBUkJFeHRlbnNpb25zKERpc3BsYXkqIGRpc3BsYXkpCitzdGF0aWMgdm9pZCBpbml0
aWFsaXplQVJCRXh0ZW5zaW9ucygpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBm
YWxzZTsKICAgICBpZiAoaW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGluaXRp
YWxpemVkID0gdHJ1ZTsKLSAgICBpZiAoR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xYRXh0
ZW5zaW9uKGRpc3BsYXksICJHTFhfQVJCX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MiKSkKKyAg
ICBpZiAoR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xYRXh0ZW5zaW9uKFgxMVdyYXBwZXI6
Om5hdGl2ZURpc3BsYXkoKSwgIkdMWF9BUkJfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyIpKQog
ICAgICAgICBnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xY
Q1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIiKSkpOwog
fQogCiBHTFhPZmZTY3JlZW5Db250ZXh0OjpHTFhPZmZTY3JlZW5Db250ZXh0KCkKICAgICA6IEdM
UGxhdGZvcm1Db250ZXh0KCkKLSAgICAsIG1fZGlzcGxheSgwKQogewogfQogCkBAIC02MCwxNyAr
NjEsMTcgQEAgYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1T
dXJmYWNlKiBzdXJmYWNlKQogICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgbV9kaXNwbGF5ID0gc3VyZmFjZS0+c2hhcmVkRGlzcGxheSgpOwotICAgIGlmICgh
bV9kaXNwbGF5KQorICAgIERpc3BsYXkqIHgxMURpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNw
bGF5KCk7CisgICAgaWYgKCF4MTFEaXNwbGF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBHTFhGQkNvbmZpZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CiAKICAgICBp
ZiAoY29uZmlnKSB7Ci0gICAgICAgIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKG1fZGlzcGxheSk7
CisgICAgICAgIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKCk7CiAKICAgICAgICAgaWYgKGdsWENy
ZWF0ZUNvbnRleHRBdHRyaWJzQVJCKQotICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xY
Q3JlYXRlQ29udGV4dEF0dHJpYnNBUkIobV9kaXNwbGF5LCBjb25maWcsIDAsIHRydWUsIEF0dHJp
YnMpOworICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJp
YnNBUkIoeDExRGlzcGxheSwgY29uZmlnLCAwLCB0cnVlLCBBdHRyaWJzKTsKIAogICAgICAgICBp
ZiAobV9jb250ZXh0SGFuZGxlKSB7CiAgICAgICAgICAgICAvLyBUaGUgR0xYX0FSQl9jcmVhdGVf
Y29udGV4dF9yb2J1c3RuZXNzIHNwZWMgcmVxdWlyZXMgdGhhdCBhIGNvbnRleHQgY3JlYXRlZCB3
aXRoCkBAIC04MCwxMSArODEsMTEgQEAgYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFs
aXplKEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQogICAgICAgICAgICAgaWYgKHBsYXRmb3Jt
TWFrZUN1cnJlbnQoc3VyZmFjZSkgJiYgR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xFeHRl
bnNpb24oIkdMX0FSQl9yb2J1c3RuZXNzIikpCiAgICAgICAgICAgICAgICAgbV9yZXNldExvc3RD
b250ZXh0ID0gdHJ1ZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnbFhEZXN0
cm95Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7CisgICAgICAgICAgICAgICAg
Z2xYRGVzdHJveUNvbnRleHQoeDExRGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmICghbV9jb250ZXh0SGFuZGxlKQotICAgICAgICAgICAgbV9jb250ZXh0
SGFuZGxlID0gZ2xYQ3JlYXRlTmV3Q29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFf
VFlQRSwgMCwgdHJ1ZSk7CisgICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVO
ZXdDb250ZXh0KHgxMURpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQRSwgMCwgdHJ1ZSk7CiAK
ICAgICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMTA5LDE0ICsxMTAsMjEgQEAgYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1h
a2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQogCiB2b2lkIEdMWE9mZlNjcmVl
bkNvbnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQoKQogewotICAgIGdsWE1ha2VDdXJyZW50
KG1fZGlzcGxheSwgMCwgMCk7Ci0gICAgbV9kaXNwbGF5ID0gMDsKKyAgICBEaXNwbGF5KiB4MTFE
aXNwbGF5ID0gWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpOworICAgIGlmICgheDExRGlzcGxh
eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xYTWFrZUN1cnJlbnQoeDExRGlzcGxheSwgMCwg
MCk7CiB9CiAKIHZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcygpCiB7Cisg
ICAgRGlzcGxheSogeDExRGlzcGxheSA9IFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKTsKKyAg
ICBpZiAoIXgxMURpc3BsYXkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2NvbnRleHRI
YW5kbGUpCi0gICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFu
ZGxlKTsKKyAgICAgICAgZ2xYRGVzdHJveUNvbnRleHQoeDExRGlzcGxheSwgbV9jb250ZXh0SGFu
ZGxlKTsKIAogICAgIG1fY29udGV4dEhhbmRsZSA9IDA7CiB9CmRpZmYgLS1naXQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCmluZGV4
IGNiZGUwZWYuLjQ0NGU3ZjIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCkBAIC00NSw3ICs0NSw2IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKLSAgICBEaXNwbGF5
KiBtX2Rpc3BsYXk7CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAppbmRleCA4MGZjMjYyLi40
YmJhNDM3IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKQEAgLTM2LDE1ICszNiw4IEBAIHN0YXRpYyBj
b25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsgR0xYX1BCVUZGRVJfV0lEVEgsIDEsIEdM
WF9QQlVGRkVSX0hFSUdICiBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNl
KCkKICAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKIHsKLSAgICBtX25hdGl2ZVJlc291cmNlID0g
YWRvcHRQdHIobmV3IFgxMU9mZlNjcmVlbldpbmRvdygpKTsKLSAgICBtX3NoYXJlZERpc3BsYXkg
PSBtX25hdGl2ZVJlc291cmNlLT5uYXRpdmVTaGFyZWREaXNwbGF5KCk7Ci0KLSAgICBpZiAoIW1f
c2hhcmVkRGlzcGxheSkgewotICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihu
ZXcgR0xYQ29uZmlnU2VsZWN0b3IobV9zaGFyZWREaXNwbGF5LCBtX25hdGl2ZVJlc291cmNlLT5p
c1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOworICAgIG1fc2hhcmVkRGlzcGxheSA9IFgx
MVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKTsKKyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQ
dHIobmV3IEdMWENvbmZpZ1NlbGVjdG9yKCkpOwogICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4g
dmlzSW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKCkpOwogCiAgICAgaWYgKCF2aXNJ
bmZvLmdldCgpKSB7CkBAIC01Miw3ICs0NSw3IEBAIEdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRy
YW5zcG9ydFN1cmZhY2UoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9uYXRpdmVS
ZXNvdXJjZS0+Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSwgKnZpc0luZm8u
Z2V0KCkpOworICAgIFgxMVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJI
YW5kbGUsICp2aXNJbmZvLmdldCgpKTsKIAogICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKICAg
ICAgICAgZGVzdHJveSgpOwpAQCAtNzQsNyArNjcsNyBAQCBQbGF0Zm9ybVN1cmZhY2VDb25maWcg
R0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCiB2b2lkIEdMWFRyYW5zcG9ydFN1
cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB7CiAgICAgR0xQbGF0
Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwotICAgIG1fbmF0aXZlUmVzb3VyY2Ut
PnJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2RyYXdhYmxlKTsKKyAgICBYMTFXcmFwcGVyOjpyZXNp
emVXaW5kb3cobmV3UmVjdCwgbV9kcmF3YWJsZSk7CiAgICAgLy8gRm9yY2UgcmVzaXplIG9mIEdM
IHN1cmZhY2UgYWZ0ZXIgd2luZG93IHJlc2l6ZS4KICAgICBnbFhTd2FwQnVmZmVycyhzaGFyZWRE
aXNwbGF5KCksIG1fZHJhd2FibGUpOwogfQpAQCAtOTksNyArOTIsNyBAQCB2b2lkIEdMWFRyYW5z
cG9ydFN1cmZhY2U6OmRlc3Ryb3koKQogICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7
CiAKICAgICBpZiAobV9idWZmZXJIYW5kbGUpIHsKLSAgICAgICAgbV9uYXRpdmVSZXNvdXJjZS0+
ZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7CisgICAgICAgIFgxMVdyYXBwZXI6OmRlc3Ry
b3lXaW5kb3cobV9idWZmZXJIYW5kbGUpOwogICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CiAg
ICAgICAgIG1fZHJhd2FibGUgPSAwOwogICAgIH0KQEAgLTEyMSwxNSArMTE0LDkgQEAgR0xYUEJ1
ZmZlcjo6fkdMWFBCdWZmZXIoKQogCiB2b2lkIEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQogewot
ICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgWDExT2ZmU2NyZWVuV2luZG93KCkp
OwotICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fbmF0aXZlUmVzb3VyY2UtPm5hdGl2ZVNoYXJlZERp
c3BsYXkoKTsKLQotICAgIGlmICghbV9zaGFyZWREaXNwbGF5KSB7Ci0gICAgICAgIG1fbmF0aXZl
UmVzb3VyY2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fc2hhcmVk
RGlzcGxheSA9IFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKTsKIAotICAgIG1fY29uZmlnU2Vs
ZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IobV9zaGFyZWREaXNwbGF5LCBt
X25hdGl2ZVJlc291cmNlLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOworICAgIG1f
Y29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7CiAgICAg
R0xYRkJDb25maWcgY29uZmlnID0gbV9jb25maWdTZWxlY3Rvci0+cEJ1ZmZlckNvbnRleHRDb25m
aWcoKTsKIAogICAgIGlmICghY29uZmlnKSB7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCmluZGV4IDg0NzE1YzEu
LjJmMjU4ZWYgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRl
ICJHTFBsYXRmb3JtU3VyZmFjZS5oIgogI2luY2x1ZGUgIkdMWENvbmZpZ1NlbGVjdG9yLmgiCi0j
aW5jbHVkZSAiWDExV2luZG93UmVzb3VyY2VzLmgiCisjaW5jbHVkZSAiWDExV3JhcHBlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDcgKzQ3LDYgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIE93blB0cjxYMTFPZmZTY3JlZW5XaW5k
b3c+IG1fbmF0aXZlUmVzb3VyY2U7CiAgICAgT3duUHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBtX2Nv
bmZpZ1NlbGVjdG9yOwogfTsKICNlbmRpZgpAQCAtNjQsNyArNjMsNiBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgZnJlZVJlc291cmNlcygpOwot
ICAgIE93blB0cjxYMTFPZmZTY3JlZW5XaW5kb3c+IG1fbmF0aXZlUmVzb3VyY2U7CiAgICAgT3du
UHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9yOwogfTsKIApkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1
cmZhY2VHTFguY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCmluZGV4IGE1N2I2MzguLmFhMzE3MTMgMTAwNjQ0Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NT
dXJmYWNlR0xYLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uCiAKICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTMwLDE5ICszMSwxNSBAQAogI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4KICNpbmNsdWRl
IDxRT3BlbkdMQ29udGV4dD4KICNpbmNsdWRlIDxxcGEvcXBsYXRmb3JtbmF0aXZlaW50ZXJmYWNl
Lmg+Ci0jZWxpZiBQTEFURk9STShFRkwpCi0jaW5jbHVkZSA8R0wvZ2wuaD4KLSNlbmRpZgotCiAj
aW5jbHVkZSA8R0wvZ2xleHQuaD4KICNpbmNsdWRlIDxHTC9nbHguaD4KLSNpbmNsdWRlIDxYMTEv
WGxpYi5oPgotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KLSNpbmNsdWRl
IDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CisjZWxzZQorI2luY2x1ZGUgPG9wZW5nbC9HTERl
ZnMuaD4KKyNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaW5jbHVkZSAiR0xYQ29uZmln
U2VsZWN0b3IuaCIKIAotc3RhdGljIGxvbmcgWDExT3ZlcnJpZGVSZWRpcmVjdCA9IDFMIDw8IDk7
CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBQRk5HTFhCSU5EVEVYSU1BR0VFWFRQUk9D
IHBHbFhCaW5kVGV4SW1hZ2VFWFQgPSAwOwogc3RhdGljIFBGTkdMWFJFTEVBU0VURVhJTUFHRUVY
VFBST0MgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVCA9IDA7CkBAIC01MiwxNTMgKzQ5LDcgQEAgc3Rh
dGljIFBGTkdMR0VORlJBTUVCVUZGRVJTUFJPQyBwR2xHZW5GcmFtZWJ1ZmZlcnMgPSAwOwogc3Rh
dGljIFBGTkdMREVMRVRFRlJBTUVCVUZGRVJTUFJPQyBwR2xEZWxldGVGcmFtZWJ1ZmZlcnMgPSAw
Owogc3RhdGljIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRQUk9DIHBHbEZyYW1lYnVmZmVyVGV4
dHVyZTJEID0gMDsKIAotLy8gVXNlZCBmb3IgaGFuZGxpbmcgWEVycm9yLgotc3RhdGljIGJvb2wg
dmFsaWRPcGVyYXRpb24gPSB0cnVlOwotc3RhdGljIGludCBoYW5kbGVYUGl4bWFwQ3JlYXRpb25F
cnJvcihEaXNwbGF5KiwgWEVycm9yRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+ZXJy
b3JfY29kZSA9PSBCYWRNYXRjaCB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRXaW5kb3cgfHwg
ZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkQWxsb2MpIHsKLSAgICAgICAgdmFsaWRPcGVyYXRpb24g
PSBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKGV2ZW50LT5lcnJvcl9jb2RlKSB7Ci0gICAgICAg
IGNhc2UgQmFkTWF0Y2g6Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkJhZE1hdGNoLiIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmFkV2luZG93OgotICAgICAgICAgICAgTE9H
X0VSUk9SKCJCYWRXaW5kb3cuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBC
YWRBbGxvYzoKLSAgICAgICAgICAgIExPR19FUlJPUigiQmFkQWxsb2MuIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXR0cmlidXRlc1tdID0g
ewotICAgIEdMWF9MRVZFTCwgMCwKLSAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1dJTkRPV19C
SVQsCi0gICAgR0xYX1JFTkRFUl9UWVBFLCAgIEdMWF9SR0JBX0JJVCwKLSAgICBHTFhfUkVEX1NJ
WkUsICAgICAgMSwKLSAgICBHTFhfR1JFRU5fU0laRSwgICAgMSwKLSAgICBHTFhfQkxVRV9TSVpF
LCAgICAgMSwKLSAgICBHTFhfQUxQSEFfU0laRSwgICAgMSwKLSAgICBHTFhfREVQVEhfU0laRSwg
ICAgMSwKLSAgICBHTFhfWF9WSVNVQUxfVFlQRSwgR0xYX1RSVUVfQ09MT1IsCi0gICAgR0xYX0RP
VUJMRUJVRkZFUiwgIFRydWUsCi0gICAgTm9uZQotfTsKLQotY2xhc3MgU2NvcGVkWFBpeG1hcENy
ZWF0aW9uRXJyb3JIYW5kbGVyIHsKLQotcHVibGljOgotICAgIFNjb3BlZFhQaXhtYXBDcmVhdGlv
bkVycm9ySGFuZGxlcihEaXNwbGF5KiBkaXNwbGF5KQotICAgICAgICA6IG1fZGlzcGxheShkaXNw
bGF5KQotICAgIHsKLSAgICAgICAgLy8gWFN5bmMgbXVzdCBiZSBjYWxsZWQgdG8gZW5zdXJlIHRo
YXQgY3VycmVudCBlcnJvcnMgYXJlIGhhbmRsZWQgYnkgdGhlIG9yaWdpbmFsIGhhbmRsZXIuCi0g
ICAgICAgIFhTeW5jKG1fZGlzcGxheSwgZmFsc2UpOwotICAgICAgICBtX3ByZXZpb3VzRXJyb3JI
YW5kbGVyID0gWFNldEVycm9ySGFuZGxlcihoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJvcik7Ci0g
ICAgfQotCi0gICAgflNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpCi0gICAgewot
ICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBoYW5kbGVyLgotICAgICAgICBYU2V0RXJy
b3JIYW5kbGVyKG1fcHJldmlvdXNFcnJvckhhbmRsZXIpOwotICAgIH0KLQotICAgIGJvb2wgaXNW
YWxpZE9wZXJhdGlvbigpIGNvbnN0Ci0gICAgewotICAgICAgICB2YWxpZE9wZXJhdGlvbiA9IHRy
dWU7Ci0gICAgICAgIC8vIFhTeW5jIGlzIG5lZWRlZCB0byBjYXRjaCBwb3NzaWJsZSBlcnJvcnMg
YXMgdGhleSBhcmUgZ2VuZXJhdGVkIGFzeW5jaHJvbm91c2x5LgotICAgICAgICBYU3luYyhtX2Rp
c3BsYXksIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIHZhbGlkT3BlcmF0aW9uOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBYRXJyb3JIYW5kbGVyIG1fcHJldmlvdXNFcnJvckhhbmRsZXI7Ci0gICAg
RGlzcGxheSogbV9kaXNwbGF5OwotfTsKLQotLy8gRklYTUU6IFRha2UgWDExV2luZG93UmVzb3Vy
Y2VzIGFuZCBHTFhDb25maWdTZWxlY3RvciBpbnRvIHVzZS4KLWNsYXNzIE9mZlNjcmVlblJvb3RX
aW5kb3cgewotcHVibGljOgotICAgIE9mZlNjcmVlblJvb3RXaW5kb3coKQotICAgIHsKLSAgICAg
ICAgKyttX3JlZkNvdW50OwotICAgIH0KLQotICAgIFdpbmRvdyBnZXRYV2luZG93KCkKLSAgICB7
Ci0gICAgICAgIGlmICghbV93aW5kb3cpIHsKLSAgICAgICAgICAgIERpc3BsYXkqIGRweSA9IGRp
c3BsYXkoKTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gWENyZWF0ZVNpbXBsZVdpbmRvdyhkcHks
IFhEZWZhdWx0Um9vdFdpbmRvdyhkcHkpLCAtMSwgLTEsIDEsIDEsIDAsIEJsYWNrUGl4ZWwoZHB5
LCAwKSwgV2hpdGVQaXhlbChkcHksIDApKTsKLSAgICAgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0
ID0gdHJ1ZTsKLSAgICAgICAgICAgIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgbV93aW5k
b3csIFgxMU92ZXJyaWRlUmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKLSAgICAgICAgICAgIC8vIE1h
cCB3aW5kb3cgdG8gdGhlIHNjcmVlbgotICAgICAgICAgICAgWE1hcFdpbmRvdyhkcHksIG1fd2lu
ZG93KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3dpbmRvdzsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgc3RydWN0IERpc3BsYXlDb25uZWN0aW9uIHsKLSAgICAgICAgRGlzcGxheUNv
bm5lY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3Bs
YXkoMCk7Ci0gICAgICAgIH0KLQotICAgICAgICB+RGlzcGxheUNvbm5lY3Rpb24oKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBEaXNwbGF5KiBkaXNwbGF5KCkgeyByZXR1cm4gbV9kaXNwbGF5OyB9Ci0gICAgcHJp
dmF0ZToKLSAgICAgICAgRGlzcGxheSogbV9kaXNwbGF5OwotICAgIH07Ci0KLXB1YmxpYzoKLSAg
ICBzdGF0aWMgRGlzcGxheSogZGlzcGxheSgpCi0gICAgewotICAgICAgICAvLyBEaXNwbGF5IGNv
bm5lY3Rpb24gd2lsbCBvbmx5IGJlIGJyb2tlbiBhdCBwcm9ncmFtIHNodXRkb3duLgotICAgICAg
ICBzdGF0aWMgRGlzcGxheUNvbm5lY3Rpb24gZGlzcGxheUNvbm5lY3Rpb247Ci0gICAgICAgIHJl
dHVybiBkaXNwbGF5Q29ubmVjdGlvbi5kaXNwbGF5KCk7Ci0gICAgfQotCi0gICAgfk9mZlNjcmVl
blJvb3RXaW5kb3coKQotICAgIHsKLSAgICAgICAgaWYgKC0tbV9yZWZDb3VudCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV93aW5kb3cpIHsKLSAgICAgICAgICAgIFhVbm1h
cFdpbmRvdyhkaXNwbGF5KCksIG1fd2luZG93KTsKLSAgICAgICAgICAgIFhEZXN0cm95V2luZG93
KGRpc3BsYXkoKSwgbV93aW5kb3cpOwotICAgICAgICAgICAgbV93aW5kb3cgPSAwOwotICAgICAg
ICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBpbnQgbV9yZWZDb3VudDsKLSAgICBz
dGF0aWMgV2luZG93IG1fd2luZG93OwotfTsKLQotaW50IE9mZlNjcmVlblJvb3RXaW5kb3c6Om1f
cmVmQ291bnQgPSAwOwotV2luZG93IE9mZlNjcmVlblJvb3RXaW5kb3c6Om1fd2luZG93ID0gMDsK
LQotc3RhdGljIGNvbnN0IGludCBnbHhTcGVjW10gPSB7Ci0gICAgLy8gVGhlIHNwZWNpZmljYXRp
b24gaXMgYSBzZXQga2V5IHZhbHVlIHBhaXJzIHN0b3JlZCBpbiBhIHNpbXBsZSBhcnJheS4KLSAg
ICBHTFhfTEVWRUwsICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgIEdMWF9EUkFXQUJM
RV9UWVBFLCAgICAgICAgICAgICAgICAgIEdMWF9QSVhNQVBfQklUIHwgR0xYX1dJTkRPV19CSVQs
Ci0gICAgR0xYX0JJTkRfVE9fVEVYVFVSRV9UQVJHRVRTX0VYVCwgICAgR0xYX1RFWFRVUkVfMkRf
QklUX0VYVCwKLSAgICBHTFhfQklORF9UT19URVhUVVJFX1JHQkFfRVhULCAgICAgICBUUlVFLAot
ICAgIDAKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgZ2x4QXR0cmlidXRlc1tdID0geworc3RhdGlj
IGludCBnbHhBdHRyaWJ1dGVzW10gPSB7CiAgICAgR0xYX1RFWFRVUkVfRk9STUFUX0VYVCwKICAg
ICBHTFhfVEVYVFVSRV9GT1JNQVRfUkdCQV9FWFQsCiAgICAgR0xYX1RFWFRVUkVfVEFSR0VUX0VY
VCwKQEAgLTIwOCwxNiArNTksMTMgQEAgc3RhdGljIGNvbnN0IGludCBnbHhBdHRyaWJ1dGVzW10g
PSB7CiAKIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICBHcmFwaGljc1N1cmZh
Y2VQcml2YXRlKGNvbnN0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qgc2hhcmVDb250ZXh0ID0g
MCkKLSAgICAgICAgOiBtX29mZlNjcmVlbldpbmRvdyhhZG9wdFB0cihuZXcgT2ZmU2NyZWVuUm9v
dFdpbmRvdygpKSkKLSAgICAgICAgLCBtX3hQaXhtYXAoMCkKKyAgICAgICAgOiBtX3hQaXhtYXAo
MCkKICAgICAgICAgLCBtX2dseFBpeG1hcCgwKQogICAgICAgICAsIG1fc3VyZmFjZSgwKQogICAg
ICAgICAsIG1fZ2x4U3VyZmFjZSgwKQogICAgICAgICAsIG1fZ2xDb250ZXh0KDApCiAgICAgICAg
ICwgbV9kZXRhY2hlZENvbnRleHQoMCkKICAgICAgICAgLCBtX2RldGFjaGVkU3VyZmFjZSgwKQot
ICAgICAgICAsIG1fZmJDb25maWcoMCkKLSAgICAgICAgLCBtX3RleHR1cmVJc1lJbnZlcnRlZChm
YWxzZSkKICAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQogICAgICAgICAsIG1faXNSZWNlaXZl
cihmYWxzZSkKICAgICB7CkBAIC0yMzQsMTYgKzgyLDE1IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZh
Y2VQcml2YXRlIHsKICAgICAgICAgVU5VU0VEX1BBUkFNKHNoYXJlQ29udGV4dCk7CiAjZW5kaWYK
IAotICAgICAgICBpbnQgbnVtUmV0dXJuZWQ7Ci0gICAgICAgIEdMWEZCQ29uZmlnKiBmYkNvbmZp
Z3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5KCksIERlZmF1bHRTY3JlZW4oZGlzcGxheSgp
KSwgYXR0cmlidXRlcywgJm51bVJldHVybmVkKTsKKyAgICAgICAgbV9jb25maWdTZWxlY3RvciA9
IGFkb3B0UHRyKG5ldyBHTFhDb25maWdTZWxlY3RvcigpKTsKIAotICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB3ZSBjaG9vc2UgYSBjb25maWd1cmF0aW9uIHRoYXQgc3VwcG9ydHMgYW4gYWxwaGEg
bWFzay4KLSAgICAgICAgbV9mYkNvbmZpZyA9IGZpbmRGQkNvbmZpZ1dpdGhBbHBoYShmYkNvbmZp
Z3MsIG51bVJldHVybmVkKTsKLQotICAgICAgICBYRnJlZShmYkNvbmZpZ3MpOworICAgICAgICBp
ZiAoIW1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCkpIHsKKyAgICAgICAg
ICAgIGNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICAv
LyBDcmVhdGUgYSBHTFggY29udGV4dCBmb3IgT3BlbkdMIHJlbmRlcmluZwotICAgICAgICBtX2ds
Q29udGV4dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQoZGlzcGxheSgpLCBtX2ZiQ29uZmlnLCBHTFhf
UkdCQV9UWVBFLCBzaGFyZUNvbnRleHRPYmplY3QsIHRydWUpOworICAgICAgICBtX2dsQ29udGV4
dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQoZGlzcGxheSgpLCBtX2NvbmZpZ1NlbGVjdG9yLT5zdXJm
YWNlQ29udGV4dENvbmZpZygpLCBHTFhfUkdCQV9UWVBFLCBzaGFyZUNvbnRleHRPYmplY3QsIHRy
dWUpOwogICAgIH0KIAogICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUodWludDMyX3Qgd2luSWQp
CkBAIC0yNTQsMTEgKzEwMSwxMSBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAg
ICAgICAgICwgbV9nbENvbnRleHQoMCkKICAgICAgICAgLCBtX2RldGFjaGVkQ29udGV4dCgwKQog
ICAgICAgICAsIG1fZGV0YWNoZWRTdXJmYWNlKDApCi0gICAgICAgICwgbV9mYkNvbmZpZygwKQot
ICAgICAgICAsIG1fdGV4dHVyZUlzWUludmVydGVkKGZhbHNlKQogICAgICAgICAsIG1faGFzQWxw
aGEoZmFsc2UpCiAgICAgICAgICwgbV9pc1JlY2VpdmVyKHRydWUpCi0gICAgeyB9CisgICAgewor
ICAgICAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZpZ1NlbGVjdG9y
KCkpOworICAgIH0KIAogICAgIH5HcmFwaGljc1N1cmZhY2VQcml2YXRlKCkKICAgICB7CkBAIC0y
NjcsMzUgKzExNCwzMiBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAKICAgICB1
aW50MzJfdCBjcmVhdGVTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgewotICAgICAg
ICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhkaXNw
bGF5KCksIG1fZmJDb25maWcpOwotICAgICAgICBpZiAoIXZpc3VhbEluZm8pCisgICAgICAgIGlm
ICghZGlzcGxheSgpIHx8ICFtX2NvbmZpZ1NlbGVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAgICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiB2aXNJbmZvKG1fY29uZmlnU2VsZWN0
b3ItPnZpc3VhbEluZm8oKSk7CisKKyAgICAgICAgaWYgKCF2aXNJbmZvLmdldCgpKSB7CisgICAg
ICAgICAgICBjbGVhcigpOwogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KIAotICAg
ICAgICBDb2xvcm1hcCBjbWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXkoKSwgbV9vZmZTY3Jl
ZW5XaW5kb3ctPmdldFhXaW5kb3coKSwgdmlzdWFsSW5mby0+dmlzdWFsLCBBbGxvY05vbmUpOwot
Ci0gICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGE7Ci0gICAgICAgIGEuYmFja2dyb3VuZF9w
aXhlbCA9IFdoaXRlUGl4ZWwoZGlzcGxheSgpLCAwKTsKLSAgICAgICAgYS5ib3JkZXJfcGl4ZWwg
PSBCbGFja1BpeGVsKGRpc3BsYXkoKSwgMCk7Ci0gICAgICAgIGEuY29sb3JtYXAgPSBjbWFwOwot
ICAgICAgICBtX3N1cmZhY2UgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXkoKSwgbV9vZmZTY3JlZW5X
aW5kb3ctPmdldFhXaW5kb3coKSwgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAot
ICAgICAgICAgICAgMCwgdmlzdWFsSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCB2aXN1YWxJbmZv
LT52aXN1YWwsCi0gICAgICAgICAgICBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0Nv
bG9ybWFwLCAmYSk7Ci0gICAgICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXko
KSwgbV9zdXJmYWNlLCAwKTsKLSAgICAgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3Bs
YXkoKSwgbV9zdXJmYWNlLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0gICAgICAgIG1fZ2x4
U3VyZmFjZSA9IGdsWENyZWF0ZVdpbmRvdyhkaXNwbGF5KCksIG1fZmJDb25maWcsIG1fc3VyZmFj
ZSwgMCk7Ci0gICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwotCi0gICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgWFJlbmRlciBFeHRlbnNpb24gaXMgYXZhaWxhYmxlLgotICAgICAgICBpbnQgZXZlbnRC
YXNlcCwgZXJyb3JCYXNlcDsKLSAgICAgICAgaWYgKCFYUmVuZGVyUXVlcnlFeHRlbnNpb24oZGlz
cGxheSgpLCAmZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApKQorICAgICAgICBYMTFXcmFwcGVyOjpj
cmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fc3VyZmFjZSwgKnZpc0luZm8uZ2V0KCksIHNpemUpOwor
CisgICAgICAgIGlmICghbV9zdXJmYWNlKSB7CisgICAgICAgICAgICBjbGVhcigpOwogICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KIAotICAgICAgICBYTWFwV2luZG93KGRpc3BsYXko
KSwgbV9zdXJmYWNlKTsKKyAgICAgICAgbV9nbHhTdXJmYWNlID0gZ2xYQ3JlYXRlV2luZG93KGRp
c3BsYXkoKSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgbV9zdXJm
YWNlLCAwKTsKICAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKICAgICB9CiAKICAgICB2b2lkIGNy
ZWF0ZVBpeG1hcCh1aW50MzJfdCB3aW5JZCkKICAgICB7CisgICAgICAgIGlmICghbV9jb25maWdT
ZWxlY3RvcikKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBYV2luZG93QXR0cmlidXRl
cyBhdHRyOwogICAgICAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1dGVzKGRpc3BsYXkoKSwgd2lu
SWQsICZhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMwNCwzNSArMTQ4LDI1IEBAIHN0
cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICAgICAgaWYgKGF0dHIubWFwX3N0YXRl
ID09IElzVW5tYXBwZWQgfHwgYXR0ci5tYXBfc3RhdGUgPT0gSXNVbnZpZXdhYmxlKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxl
ciBoYW5kbGVyKGRpc3BsYXkoKSk7CisgICAgICAgIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9y
SGFuZGxlciBoYW5kbGVyOwogICAgICAgICBtX3NpemUgPSBJbnRTaXplKGF0dHIud2lkdGgsIGF0
dHIuaGVpZ2h0KTsKIAogICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRl
ckZpbmRWaXN1YWxGb3JtYXQoZGlzcGxheSgpLCBhdHRyLnZpc3VhbCk7CiAgICAgICAgIG1faGFz
QWxwaGEgPSAoZm9ybWF0LT50eXBlID09IFBpY3RUeXBlRGlyZWN0ICYmIGZvcm1hdC0+ZGlyZWN0
LmFscGhhTWFzayk7CiAKLSAgICAgICAgaW50IG51bWJlck9mQ29uZmlnczsKLSAgICAgICAgR0xY
RkJDb25maWcqIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5KCksIFhEZWZhdWx0
U2NyZWVuKGRpc3BsYXkoKSksIGdseFNwZWMsICZudW1iZXJPZkNvbmZpZ3MpOwotCi0gICAgICAg
IC8vIElmIG9yaWdpbiB3aW5kb3cgaGFzIGFscGhhIHRoZW4gZmluZCBjb25maWcgd2l0aCBhbHBo
YS4KLSAgICAgICAgR0xYRkJDb25maWcmIGNvbmZpZyA9IG1faGFzQWxwaGEgPyBmaW5kRkJDb25m
aWdXaXRoQWxwaGEoY29uZmlncywgbnVtYmVyT2ZDb25maWdzKSA6IGNvbmZpZ3NbMF07CiAKICAg
ICAgICAgbV94UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAoZGlzcGxheSgpLCB3
aW5JZCk7Ci0gICAgICAgIG1fZ2x4UGl4bWFwID0gZ2xYQ3JlYXRlUGl4bWFwKGRpc3BsYXkoKSwg
Y29uZmlnLCBtX3hQaXhtYXAsIGdseEF0dHJpYnV0ZXMpOworICAgICAgICBnbHhBdHRyaWJ1dGVz
WzFdID0gKGZvcm1hdC0+ZGVwdGggPT0gMzIgfHwgbV9oYXNBbHBoYSkgPyBHTFhfVEVYVFVSRV9G
T1JNQVRfUkdCQV9FWFQgOiBHTFhfVEVYVFVSRV9GT1JNQVRfUkdCX0VYVDsKKyAgICAgICAgbV9n
bHhQaXhtYXAgPSBnbFhDcmVhdGVQaXhtYXAoZGlzcGxheSgpLCBtX2NvbmZpZ1NlbGVjdG9yLT5z
dXJmYWNlQ2xpZW50Q29uZmlnKGZvcm1hdC0+ZGVwdGgsIFhWaXN1YWxJREZyb21WaXN1YWwoYXR0
ci52aXN1YWwpKSwgbV94UGl4bWFwLCBnbHhBdHRyaWJ1dGVzKTsKIAogICAgICAgICBpZiAoIWhh
bmRsZXIuaXNWYWxpZE9wZXJhdGlvbigpKQogICAgICAgICAgICAgY2xlYXIoKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICB1aW50IGludmVydGVkID0gMDsKICAgICAgICAgICAgIGdsWFF1
ZXJ5RHJhd2FibGUoZGlzcGxheSgpLCBtX2dseFBpeG1hcCwgR0xYX1lfSU5WRVJURURfRVhULCAm
aW52ZXJ0ZWQpOwotICAgICAgICAgICAgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQgPSAhIWludmVydGVk
OworICAgICAgICAgICAgbV9mbGFncyA9ICEhaW52ZXJ0ZWQgPyBUZXh0dXJlTWFwcGVyR0w6OlNo
b3VsZEZsaXBUZXh0dXJlIDogMDsKKyAgICAgICAgICAgIG1fZmxhZ3MgfD0gVGV4dHVyZU1hcHBl
ckdMOjpTaG91bGRCbGVuZDsKICAgICAgICAgfQotCi0gICAgICAgIFhGcmVlKGNvbmZpZ3MpOwot
ICAgIH0KLQotICAgIGJvb2wgdGV4dHVyZUlzWUludmVydGVkKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3RleHR1cmVJc1lJbnZlcnRlZDsKICAgICB9CiAKICAgICB2b2lkIG1ha2VDdXJyZW50
KCkKQEAgLTQwMCw3ICsyMzQsNyBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAg
ICAgICAgIGRvbmVDdXJyZW50KCk7CiAgICAgfQogCi0gICAgRGlzcGxheSogZGlzcGxheSgpIGNv
bnN0IHsgcmV0dXJuIE9mZlNjcmVlblJvb3RXaW5kb3c6OmRpc3BsYXkoKTsgfQorICAgIERpc3Bs
YXkqIGRpc3BsYXkoKSBjb25zdCB7IHJldHVybiBYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCk7
IH0KIAogICAgIEdMWFBpeG1hcCBnbHhQaXhtYXAoKSBjb25zdAogICAgIHsKQEAgLTQyMCwyNSAr
MjU0LDEwIEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICB9CiAKICAgICBi
b29sIGlzUmVjZWl2ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzUmVjZWl2ZXI7IH0KLXByaXZhdGU6
Ci0gICAgR0xYRkJDb25maWcmIGZpbmRGQkNvbmZpZ1dpdGhBbHBoYShHTFhGQkNvbmZpZyogZmJD
b25maWdzLCBpbnQgbnVtYmVyT2ZDb25maWdzKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1iZXJPZkNvbmZpZ3M7ICsraSkgewotICAgICAgICAgICAgWFZpc3VhbEluZm8q
IHZpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoZGlzcGxheSgpLCBmYkNvbmZp
Z3NbaV0pOwotICAgICAgICAgICAgaWYgKCF2aXN1YWxJbmZvKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRl
ckZpbmRWaXN1YWxGb3JtYXQoZGlzcGxheSgpLCB2aXN1YWxJbmZvLT52aXN1YWwpOwotICAgICAg
ICAgICAgWEZyZWUodmlzdWFsSW5mbyk7CiAKLSAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9y
bWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmJDb25m
aWdzW2ldOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJuIDFzdCBjb25maWcgYXMgYSBm
YWxsYmFjayB3aXRoIG5vIGFscGhhIHN1cHBvcnQuCi0gICAgICAgIHJldHVybiBmYkNvbmZpZ3Nb
MF07Ci0gICAgfQorICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJl
dHVybiBtX2ZsYWdzOyB9CiAKK3ByaXZhdGU6CiAgICAgdm9pZCBjbGVhcigpCiAgICAgewogICAg
ICAgICBpZiAobV9nbHhQaXhtYXApIHsKQEAgLTQ2MSwyMSArMjgwLDIzIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBnbFhEZXN0cm95Q29udGV4dChkaXNwbGF5KCksIG1fZ2xDb250ZXh0KTsKICAg
ICAgICAgICAgIG1fZ2xDb250ZXh0ID0gMDsKICAgICAgICAgfQorCisgICAgICAgIGlmIChtX2Nv
bmZpZ1NlbGVjdG9yKQorICAgICAgICAgICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7CiAg
ICAgfQogCi0gICAgT3duUHRyPE9mZlNjcmVlblJvb3RXaW5kb3c+IG1fb2ZmU2NyZWVuV2luZG93
OwogICAgIEludFNpemUgbV9zaXplOwogICAgIFBpeG1hcCBtX3hQaXhtYXA7CiAgICAgR0xYUGl4
bWFwIG1fZ2x4UGl4bWFwOwotICAgIFdpbmRvdyBtX3N1cmZhY2U7CisgICAgdWludDMyX3QgbV9z
dXJmYWNlOwogICAgIFdpbmRvdyBtX2dseFN1cmZhY2U7CiAgICAgR0xYQ29udGV4dCBtX2dsQ29u
dGV4dDsKICAgICBHTFhDb250ZXh0IG1fZGV0YWNoZWRDb250ZXh0OwogICAgIEdMWERyYXdhYmxl
IG1fZGV0YWNoZWRTdXJmYWNlOwotICAgIEdMWEZCQ29uZmlnIG1fZmJDb25maWc7Ci0gICAgYm9v
bCBtX3RleHR1cmVJc1lJbnZlcnRlZDsKKyAgICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1f
Y29uZmlnU2VsZWN0b3I7CiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9pc1JlY2Vp
dmVyOworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgbV9mbGFnczsKIH07CiAKIHN0YXRpYyBi
b29sIHJlc29sdmVHTE1ldGhvZHMoKQpAQCAtNTM5LDEzICszNjAsMTAgQEAgdm9pZCBHcmFwaGlj
c1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRl
eHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBtX3ByaXZhdGUtPnRleHR1cmVJc1lJbnZlcnRl
ZCgpID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZSA6IDA7Ci0gICAgZmxhZ3Mg
fD0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZDsKLQogICAgIEZsb2F0UmVjdCByZWN0T25D
b250ZW50cyhGbG9hdFBvaW50Ojp6ZXJvKCksIHNpemUpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtOwogICAgIGFkanVzdGVkVHJhbnNmb3Jt
Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KHJlY3RPbkNvbnRlbnRz
LCB0YXJnZXRSZWN0KSk7Ci0gICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVy
ZU1hcHBlciktPmRyYXdUZXh0dXJlKHRleHR1cmUsIGZsYWdzLCBzaXplLCByZWN0T25Db250ZW50
cywgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOworICAgIHN0YXRpY19jYXN0PFRl
eHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBtX3By
aXZhdGUtPmZsYWdzKCksIHNpemUsIHJlY3RPbkNvbnRlbnRzLCBhZGp1c3RlZFRyYW5zZm9ybSwg
b3BhY2l0eSwgbWFzayk7CiB9CiAKIHVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1G
cm9udEJ1ZmZlcigpIGNvbnN0CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMjYzZWEuLjAwMDAwMDAKLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJYMTFXaW5kb3dSZXNvdXJjZXMuaCIKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1TaGFyZWRYMTFSZXNvdXJjZXMqIFNoYXJlZFgxMVJlc291cmNlczo6bV9zdGF0aWNTaGFyZWRS
ZXNvdXJjZSA9IDA7Ci0KLVgxMU9mZlNjcmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2luZG93KCkK
LSAgICA6IG1fc2hhcmVkUmVzb3VyY2VzKDApCi17Ci0gICAgbV9zaGFyZWRSZXNvdXJjZXMgPSBT
aGFyZWRYMTFSZXNvdXJjZXM6OmNyZWF0ZSgpOwotfQotCi1YMTFPZmZTY3JlZW5XaW5kb3c6On5Y
MTFPZmZTY3JlZW5XaW5kb3coKQotewotfQotCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6cmVT
aXplV2luZG93KGNvbnN0IEludFJlY3QmIG5ld1JlY3QsIGNvbnN0IHVpbnQzMl90IHdpbmRvd0lk
KQotewotICAgIFhSZXNpemVXaW5kb3cobV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwg
d2luZG93SWQsIG5ld1JlY3Qud2lkdGgoKSwgbmV3UmVjdC5oZWlnaHQoKSk7Ci0gICAgWEZsdXNo
KG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCkpOwotfQotCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93
KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbEluZm8mIHZpc0luZm8sIGNvbnN0IElu
dFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFtX3NoYXJlZFJlc291cmNlcykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNw
bGF5KCk7Ci0gICAgaWYgKCFkaXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXZp
c0luZm8udmlzdWFsKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZpbmQgdmFsaWQg
WFZpc3VhbC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdpbmRvdyB4V2luZG93
ID0gbV9zaGFyZWRSZXNvdXJjZXMtPmdldFhXaW5kb3coKTsKLSAgICBpZiAoIXhXaW5kb3cpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlz
cGxheSwgeFdpbmRvdywgdmlzSW5mby52aXN1YWwsIEFsbG9jTm9uZSk7Ci0gICAgWFNldFdpbmRv
d0F0dHJpYnV0ZXMgYXR0cmlidXRlOwotICAgIGF0dHJpYnV0ZS5iYWNrZ3JvdW5kX3BpeGVsID0g
V2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1dGUuYm9yZGVyX3BpeGVsID0gQmxh
Y2tQaXhlbChkaXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1dGUuY29sb3JtYXAgPSBjbWFwOwotICAg
IGF0dHJpYnV0ZS5ldmVudF9tYXNrID0gUmVzaXplUmVkaXJlY3RNYXNrOwotICAgIHVpbnQzMl90
IHRlbXBIYW5kbGVJZDsKLSAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXks
IHhXaW5kb3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgdmlzSW5mby5k
ZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8udmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVy
UGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKLQotICAgIGlmICghdGVtcEhhbmRsZUlk
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93
LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgWFNldFdpbmRvd0JhY2tncm91bmRQ
aXhtYXAoZGlzcGxheSwgdGVtcEhhbmRsZUlkLCAwKTsKLSAgICBYQ29tcG9zaXRlUmVkaXJlY3RX
aW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0g
ICAgWE1hcFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQpOwotICAgICpoYW5kbGVJZCA9IHRl
bXBIYW5kbGVJZDsKLX0KLQotI2lmIFVTRShFR0wpCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6
Y3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3QgRUdMaW50IGlk
LCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIFZpc3VhbElEIHZpc3VhbElkID0gc3RhdGlj
X2Nhc3Q8VmlzdWFsSUQ+KGlkKTsKLQotICAgIGlmICghdmlzdWFsSWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIEVHTCBoYXMgc3VnZ2VzdGVkIGEgdmlzdWFsIGlkLCBzbyBnZXQgdGhlIHJl
c3Qgb2YgdGhlIHZpc3VhbCBpbmZvIGZvciB0aGF0IGlkLgotICAgIFhWaXN1YWxJbmZvIHZpc3Vh
bEluZm9UZW1wbGF0ZTsKLSAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwgc2l6ZW9m
KFhWaXN1YWxJbmZvKSk7Ci0gICAgdmlzdWFsSW5mb1RlbXBsYXRlLnZpc3VhbGlkID0gdmlzdWFs
SWQ7Ci0gICAgaW50IG1hdGNoaW5nQ291bnQgPSAwOwotICAgIE93blB0clgxMTxYVmlzdWFsSW5m
bz4gbWF0Y2hpbmdWaXN1YWxzID0gYWRvcHRQdHIoWEdldFZpc3VhbEluZm8obV9zaGFyZWRSZXNv
dXJjZXMtPngxMURpc3BsYXkoKSwgVmlzdWFsSURNYXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAm
bWF0Y2hpbmdDb3VudCkpOwotICAgIFhWaXN1YWxJbmZvKiBmb3VuZFZpc3VhbCA9IDA7Ci0KLSAg
ICBpZiAobWF0Y2hpbmdWaXN1YWxzKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpPCBtYXRj
aGluZ0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFhWaXN1YWxJbmZvKiB0ZW1wID0gJm1hdGNo
aW5nVmlzdWFsc1tpXTsKLQotICAgICAgICAgICAgaWYgKG1fc2hhcmVkUmVzb3VyY2VzLT5pc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0
Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX3NoYXJlZFJlc291cmNl
cy0+eDExRGlzcGxheSgpLCB0ZW1wLT52aXN1YWwpOwotICAgICAgICAgICAgICAgIGlmIChmb3Jt
YXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkgewotICAgICAgICAgICAgICAgICAg
ICBmb3VuZFZpc3VhbCA9IHRlbXA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRlbXAtPmRlcHRo
ID09IDMyKSB7Ci0gICAgICAgICAgICAgICAgZm91bmRWaXN1YWwgPSB0ZW1wOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZv
dW5kVmlzdWFsKQotICAgICAgICAgICAgY3JlYXRlT2ZmU2NyZWVuV2luZG93KGhhbmRsZUlkLCAq
Zm91bmRWaXN1YWwsIHNpemUpOwotICAgIH0KLX0KLSNlbmRpZgotCi0jZW5kaWYKLQotdm9pZCBY
MTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coY29uc3QgdWludDMyX3Qgd2luZG93SWQp
Ci17Ci0gICAgaWYgKCF3aW5kb3dJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlzcGxheSog
ZGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7Ci0gICAgaWYgKCFkaXNw
bGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCB3aW5k
b3dJZCk7Ci19Ci0KLURpc3BsYXkqIFgxMU9mZlNjcmVlbldpbmRvdzo6bmF0aXZlU2hhcmVkRGlz
cGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5
KCk7Ci19Ci0KLWJvb2wgWDExT2ZmU2NyZWVuV2luZG93Ojppc1hSZW5kZXJFeHRlbnNpb25TdXBw
b3J0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+aXNYUmVuZGVy
RXh0ZW5zaW9uU3VwcG9ydGVkKCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNl
cy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5k
b3dSZXNvdXJjZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyZDMzZi4uMDAw
MDAwMAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gx
MVdpbmRvd1Jlc291cmNlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgWDExV2luZG93UmVzb3VyY2VzX2gKLSNkZWZpbmUgWDEx
V2luZG93UmVzb3VyY2VzX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJPd25QdHJYMTEuaCIKLQotI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotCi0jaWYg
VVNFKEVHTCkKLSNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUg
PFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9Y
cmVuZGVyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTaGFyZWRY
MTFSZXNvdXJjZXMgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2hhcmVkWDExUmVzb3VyY2VzKTsKLQotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNoYXJlZFgxMVJlc291cmNlcz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSkKLSAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVz
b3VyY2UgPSBuZXcgU2hhcmVkWDExUmVzb3VyY2VzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UtPnJlZigpOwotCi0gICAgICAgIHJldHVybiBhZG9w
dFJlZihtX3N0YXRpY1NoYXJlZFJlc291cmNlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlcmVmKCkK
LSAgICB7Ci0gICAgICAgIGlmIChkZXJlZkJhc2UoKSkgewotICAgICAgICAgICAgbV9zdGF0aWNT
aGFyZWRSZXNvdXJjZSA9IDA7Ci0gICAgICAgICAgICBkZWxldGUgdGhpczsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIERpc3BsYXkqIHgxMURpc3BsYXkoKQotICAgIHsKLSAgICAgICAgaWYgKCFt
X2Rpc3BsYXkpIHsKLSAgICAgICAgICAgIG1fZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLSAg
ICAgICAgICAgIGlmICghbV9kaXNwbGF5KSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gbWFrZSBjb25uZWN0aW9uIHdpdGggWCIpOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgfQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgICAgICAg
ICAgaWYgKG1fZGlzcGxheSkgewotICAgICAgICAgICAgICAgIGludCBldmVudEJhc2VwLCBlcnJv
ckJhc2VwOwotICAgICAgICAgICAgICAgIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uID0gWFJl
bmRlclF1ZXJ5RXh0ZW5zaW9uKG1fZGlzcGxheSwgJmV2ZW50QmFzZXAsICZlcnJvckJhc2VwKTsK
LSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1fZGlz
cGxheTsKLSAgICB9Ci0KLSAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCi0gICAgewotICAgICAgICBp
ZiAoIW1fd2luZG93KSB7Ci0gICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSB4MTFEaXNwbGF5KCk7
Ci0gICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotICAgICAgICAg
ICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRydWU7Ci0gICAgICAgICAgICBtX3dp
bmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVmYXVsdFJvb3RXaW5kb3coZHB5KSwg
LTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCksIFdoaXRlUGl4ZWwoZHB5LCAwKSk7
Ci0gICAgICAgICAgICAvLyBGcm9tIGh0dHA6Ly90cm9uY2hlLmNvbS9ndWkveC94bGliL3dpbmRv
dy9hdHRyaWJ1dGVzLwotICAgICAgICAgICAgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCBt
X3dpbmRvdywgQ1dPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBY
TWFwV2luZG93KGRweSwgbV93aW5kb3cpOwotCi0gICAgICAgICAgICBpZiAoIW1fd2luZG93KSB7
Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiBy
b290IHdpbmRvdy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3dpbmRvdzsKLSAgICB9Ci0KLSAgICBib29s
IGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
U2hhcmVkWDExUmVzb3VyY2VzKCkKLSAgICAgICAgOiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lv
bihmYWxzZSkKLSAgICAgICAgLCBtX3dpbmRvdygwKQotICAgICAgICAsIG1fZGlzcGxheSgwKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5TaGFyZWRYMTFSZXNvdXJjZXMoKQotICAgIHsK
LSAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKG1fd2luZG93KSB7Ci0gICAgICAgICAgICBYVW5tYXBXaW5kb3cobV9kaXNwbGF5LCBtX3dp
bmRvdyk7Ci0gICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsK
LSAgICAgICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFhDbG9zZURp
c3BsYXkobV9kaXNwbGF5KTsKLSAgICAgICAgbV9kaXNwbGF5ID0gMDsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgU2hhcmVkWDExUmVzb3VyY2VzKiBtX3N0YXRpY1NoYXJlZFJlc291cmNlOwotICAgIGJv
b2wgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247Ci0gICAgV2luZG93IG1fd2luZG93OwotICAg
IERpc3BsYXkqIG1fZGlzcGxheTsKLX07Ci0KLWNsYXNzIFgxMU9mZlNjcmVlbldpbmRvdyB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWDExT2ZmU2NyZWVuV2luZG93KTsKLQotcHVibGljOgot
ICAgIFgxMU9mZlNjcmVlbldpbmRvdygpOwotICAgIHZpcnR1YWwgflgxMU9mZlNjcmVlbldpbmRv
dygpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3JlYXRlT2ZmU2NyZWVu
V2luZG93KHVpbnQzMl90KiwgY29uc3QgWFZpc3VhbEluZm8mLCBjb25zdCBJbnRTaXplJiA9IElu
dFNpemUoMSwgMSkpOwotI2lmIFVTRShFR0wpCi0gICAgdm9pZCBjcmVhdGVPZmZTY3JlZW5XaW5k
b3codWludDMyX3QqLCBjb25zdCBFR0xpbnQsIGNvbnN0IEludFNpemUmID0gSW50U2l6ZSgxLCAx
KSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHZvaWQgZGVzdHJveVdpbmRvdyhjb25zdCB1aW50MzJf
dCk7Ci0gICAgdm9pZCByZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYsIGNvbnN0IHVpbnQzMl90
KTsKLSAgICBEaXNwbGF5KiBuYXRpdmVTaGFyZWREaXNwbGF5KCkgY29uc3Q7Ci0gICAgYm9vbCBp
c1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8U2hhcmVkWDExUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNlczsKLX07Ci0KLX0KLQotI2Vu
ZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9YMTFXcmFwcGVyLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExV3JhcHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNmFhYzdiMQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV3JhcHBlci5jcHAKQEAgLTAsMCArMSwyNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJY
MTFXcmFwcGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVXNlZCBmb3IgaGFuZGxp
bmcgWEVycm9yLgorc3RhdGljIGJvb2wgdmFsaWRPcGVyYXRpb24gPSB0cnVlOworc3RhdGljIGlu
dCBoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJvcihEaXNwbGF5KiwgWEVycm9yRXZlbnQqIGV2ZW50
KQoreworICAgIGlmIChldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRNYXRjaCB8fCBldmVudC0+ZXJy
b3JfY29kZSA9PSBCYWRXaW5kb3cgfHwgZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkQWxsb2MpIHsK
KyAgICAgICAgdmFsaWRPcGVyYXRpb24gPSBmYWxzZTsKKworICAgICAgICBzd2l0Y2ggKGV2ZW50
LT5lcnJvcl9jb2RlKSB7CisgICAgICAgIGNhc2UgQmFkTWF0Y2g6CisgICAgICAgICAgICBMT0df
RVJST1IoIkJhZE1hdGNoLiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmFk
V2luZG93OgorICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRXaW5kb3cuIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBCYWRBbGxvYzoKKyAgICAgICAgICAgIExPR19FUlJPUigi
QmFkQWxsb2MuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0
cnVjdCBEaXNwbGF5Q29ubmVjdGlvbiB7CisgICAgRGlzcGxheUNvbm5lY3Rpb24oKQorICAgIHsK
KyAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOworCisgICAgICAgIGlmICghbV9k
aXNwbGF5KQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb25uZWN0aW9u
IHdpdGggWCIpOworICAgIH0KKworICAgIH5EaXNwbGF5Q29ubmVjdGlvbigpCisgICAgeworICAg
ICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7CisgICAgfQorCisgICAgRGlzcGxheSogZGlz
cGxheSgpIHsgcmV0dXJuIG1fZGlzcGxheTsgfQorcHJpdmF0ZToKKyAgICBEaXNwbGF5KiBtX2Rp
c3BsYXk7Cit9OworCitzdHJ1Y3QgT2ZmU2NyZWVuUm9vdFdpbmRvdyB7CisKKyAgICBPZmZTY3Jl
ZW5Sb290V2luZG93KCkKKyAgICB7CisgICAgICAgIG1fd2luZG93ID0gMDsKKyAgICAgICAgRGlz
cGxheSogZHB5ID0gWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpOworICAgICAgICBpZiAoIWRw
eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBh
dHRyaWJ1dGVzOworICAgICAgICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsK
KyAgICAgICAgbV93aW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290
V2luZG93KGRweSksIC0xLCAtMSwgMSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBp
eGVsKGRweSwgMCkpOworICAgICAgICAvLyBGcm9tIGh0dHA6Ly90cm9uY2hlLmNvbS9ndWkveC94
bGliL3dpbmRvdy9hdHRyaWJ1dGVzLworICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhk
cHksIG1fd2luZG93LCBDV092ZXJyaWRlUmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKKyAgICAgICAg
WE1hcFdpbmRvdyhkcHksIG1fd2luZG93KTsKKworICAgICAgICBpZiAoIW1fd2luZG93KQorICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiByb290IHdpbmRv
dy4iKTsKKyAgICB9CisKKyAgICB+T2ZmU2NyZWVuUm9vdFdpbmRvdygpCisgICAgeworICAgICAg
ICBpZiAoIVgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAobV93aW5kb3cpIHsKKyAgICAgICAgICAgIFhVbm1hcFdpbmRvdyhYMTFX
cmFwcGVyOjpuYXRpdmVEaXNwbGF5KCksIG1fd2luZG93KTsKKyAgICAgICAgICAgIFhEZXN0cm95
V2luZG93KFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSwgbV93aW5kb3cpOworICAgICAgICAg
ICAgbV93aW5kb3cgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgV2luZG93IHJvb3RXaW5k
b3coKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd2luZG93OworICAgIH0KKworcHJpdmF0ZToK
KyAgICBXaW5kb3cgbV93aW5kb3c7Cit9OworCitTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhh
bmRsZXI6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpCit7CisgICAgLy8gWFN5
bmMgbXVzdCBiZSBjYWxsZWQgdG8gZW5zdXJlIHRoYXQgY3VycmVudCBlcnJvcnMgYXJlIGhhbmRs
ZWQgYnkgdGhlIG9yaWdpbmFsIGhhbmRsZXIuCisgICAgWFN5bmMoWDExV3JhcHBlcjo6bmF0aXZl
RGlzcGxheSgpLCBmYWxzZSk7CisgICAgbV9wcmV2aW91c0Vycm9ySGFuZGxlciA9IFhTZXRFcnJv
ckhhbmRsZXIoaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IpOworfQorCitTY29wZWRYUGl4bWFw
Q3JlYXRpb25FcnJvckhhbmRsZXI6On5TY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIo
KQoreworICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGhhbmRsZXIuCisgICAgWFNldEVycm9y
SGFuZGxlcihtX3ByZXZpb3VzRXJyb3JIYW5kbGVyKTsKK30KKworYm9vbCBTY29wZWRYUGl4bWFw
Q3JlYXRpb25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24oKSBjb25zdAoreworICAgIHZh
bGlkT3BlcmF0aW9uID0gdHJ1ZTsKKyAgICAvLyBYU3luYyBpcyBuZWVkZWQgdG8gY2F0Y2ggcG9z
c2libGUgZXJyb3JzIGFzIHRoZXkgYXJlIGdlbmVyYXRlZCBhc3luY2hyb25vdXNseS4KKyAgICBY
U3luYyhYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCksIGZhbHNlKTsKKyAgICByZXR1cm4gdmFs
aWRPcGVyYXRpb247Cit9CisKK3ZvaWQgWDExV3JhcHBlcjo6cmVzaXplV2luZG93KGNvbnN0IElu
dFJlY3QmIG5ld1JlY3QsIGNvbnN0IHVpbnQzMl90IHdpbmRvd0lkKQoreworICAgIFhSZXNpemVX
aW5kb3cobmF0aXZlRGlzcGxheSgpLCB3aW5kb3dJZCwgbmV3UmVjdC53aWR0aCgpLCBuZXdSZWN0
LmhlaWdodCgpKTsKKyAgICBYRmx1c2gobmF0aXZlRGlzcGxheSgpKTsKK30KKwordm9pZCBYMTFX
cmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBY
VmlzdWFsSW5mbyYgdmlzSW5mbywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0aXZlRGlzcGxheSgpOwor
ICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2aXNJbmZvLnZp
c3VhbCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1YWwu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXaW5kb3cgeFdpbmRvdyA9IG9mZnNj
cmVlblJvb3RXaW5kb3coKTsKKyAgICBpZiAoIXhXaW5kb3cpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdywgdmlz
SW5mby52aXN1YWwsIEFsbG9jTm9uZSk7CisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmli
dXRlOworICAgIGF0dHJpYnV0ZS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5
LCAwKTsKKyAgICBhdHRyaWJ1dGUuYm9yZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAw
KTsKKyAgICBhdHRyaWJ1dGUuY29sb3JtYXAgPSBjbWFwOworICAgIGF0dHJpYnV0ZS5ldmVudF9t
YXNrID0gUmVzaXplUmVkaXJlY3RNYXNrOworICAgIHVpbnQzMl90IHRlbXBIYW5kbGVJZDsKKyAg
ICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgdmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQs
IHZpc0luZm8udmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFw
LCAmYXR0cmlidXRlKTsKKworICAgIGlmICghdGVtcEhhbmRsZUlkKSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93LiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgdGVt
cEhhbmRsZUlkLCAwKTsKKyAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgdGVt
cEhhbmRsZUlkLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisgICAgWE1hcFdpbmRvdyhkaXNw
bGF5LCB0ZW1wSGFuZGxlSWQpOworICAgICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZUlkKTsKKyAgICBVTlVTRURfUEFSQU0odmlzSW5mbyk7
CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworI2VuZGlmCit9CisKKyNpZiBVU0UoRUdMKQordm9p
ZCBYMTFXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBj
b25zdCBFR0xpbnQgaWQsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgVmlzdWFsSUQgdmlz
dWFsSWQgPSBzdGF0aWNfY2FzdDxWaXN1YWxJRD4oaWQpOworCisgICAgaWYgKCF2aXN1YWxJZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRUdMIGhhcyBzdWdnZXN0ZWQgYSB2aXN1YWwgaWQs
IHNvIGdldCB0aGUgcmVzdCBvZiB0aGUgdmlzdWFsIGluZm8gZm9yIHRoYXQgaWQuCisgICAgWFZp
c3VhbEluZm8gdmlzdWFsSW5mb1RlbXBsYXRlOworICAgIG1lbXNldCgmdmlzdWFsSW5mb1RlbXBs
YXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsKKyAgICB2aXN1YWxJbmZvVGVtcGxhdGUudmlz
dWFsaWQgPSB2aXN1YWxJZDsKKyAgICBpbnQgbWF0Y2hpbmdDb3VudCA9IDA7CisgICAgT3duUHRy
WDExPFhWaXN1YWxJbmZvPiBtYXRjaGluZ1Zpc3VhbHMoWEdldFZpc3VhbEluZm8obmF0aXZlRGlz
cGxheSgpLCBWaXN1YWxJRE1hc2ssICZ2aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRjaGluZ0NvdW50
KSk7CisgICAgWFZpc3VhbEluZm8qIGZvdW5kVmlzdWFsID0gMDsKKworICAgIGlmIChtYXRjaGlu
Z1Zpc3VhbHMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGk8IG1hdGNoaW5nQ291bnQ7IGkr
KykgeworICAgICAgICAgICAgWFZpc3VhbEluZm8qIHRlbXAgPSAmbWF0Y2hpbmdWaXN1YWxzW2ld
OworCisgICAgICAgICAgICBpZiAoaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpIHsKKyAg
ICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1
YWxGb3JtYXQobmF0aXZlRGlzcGxheSgpLCB0ZW1wLT52aXN1YWwpOworICAgICAgICAgICAgICAg
IGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkgeworICAgICAgICAg
ICAgICAgICAgICBmb3VuZFZpc3VhbCA9IHRlbXA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRl
bXAtPmRlcHRoID09IDMyKSB7CisgICAgICAgICAgICAgICAgZm91bmRWaXN1YWwgPSB0ZW1wOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGZvdW5kVmlzdWFsKQorICAgICAgICAgICAgY3JlYXRlT2ZmU2NyZWVuV2luZG93KGhh
bmRsZUlkLCAqZm91bmRWaXN1YWwsIHNpemUpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFgx
MVdyYXBwZXI6OmRlc3Ryb3lXaW5kb3coY29uc3QgdWludDMyX3Qgd2luZG93SWQpCit7CisgICAg
aWYgKCF3aW5kb3dJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGlzcGxheSogZGlzcGxheSA9
IG5hdGl2ZURpc3BsYXkoKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIHdpbmRvd0lkKTsKK30KKworYm9vbCBYMTFXcmFw
cGVyOjppc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKQoreworICAgIHN0YXRpYyBib29sIHF1
ZXJ5RG9uZSA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lv
biA9IGZhbHNlOworCisgICAgaWYgKCFxdWVyeURvbmUpIHsKKyAgICAgICAgcXVlcnlEb25lID0g
dHJ1ZTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgRGlzcGxheSogZGlzcGxh
eSA9IG5hdGl2ZURpc3BsYXkoKTsKKworICAgICAgICBpZiAoZGlzcGxheSkgeworICAgICAgICAg
ICAgaW50IGV2ZW50QmFzZXAsIGVycm9yQmFzZXA7CisgICAgICAgICAgICBzdXBwb3J0c1hSZW5k
ZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVlcnlFeHRlbnNpb24oZGlzcGxheSwgJmV2ZW50QmFzZXAs
ICZlcnJvckJhc2VwKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHN1
cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKK30KKworRGlzcGxheSogWDExV3JhcHBlcjo6bmF0aXZl
RGlzcGxheSgpCit7CisgICAgLy8gRGlzcGxheSBjb25uZWN0aW9uIHdpbGwgb25seSBiZSBicm9r
ZW4gYXQgcHJvZ3JhbSBzaHV0ZG93bi4KKyAgICBzdGF0aWMgRGlzcGxheUNvbm5lY3Rpb24gZGlz
cGxheUNvbm5lY3Rpb247CisgICAgcmV0dXJuIGRpc3BsYXlDb25uZWN0aW9uLmRpc3BsYXkoKTsK
K30KKworV2luZG93IFgxMVdyYXBwZXI6Om9mZnNjcmVlblJvb3RXaW5kb3coKQoreworICAgIHN0
YXRpYyBPZmZTY3JlZW5Sb290V2luZG93IG9mZnNjcmVlbldpbmRvdzsKKyAgICByZXR1cm4gb2Zm
c2NyZWVuV2luZG93LnJvb3RXaW5kb3coKTsKK30KKworfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXcmFwcGVyLmggU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdyYXBwZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTE5NWRhCi0tLSAvZGV2L251bGwKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXcmFwcGVyLmgK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBYMTFXcmFwcGVy
X2gKKyNkZWZpbmUgWDExV3JhcHBlcl9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiT3duUHRyWDExLmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKworI2lmIFVTRShF
R0wpCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxYMTEv
ZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRl
ci5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFgxMVdyYXBwZXIgeworCitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgY3Jl
YXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgWFZpc3VhbEluZm8mLCBjb25zdCBJ
bnRTaXplJiA9IEludFNpemUoMSwgMSkpOworI2lmIFVTRShFR0wpCisgICAgc3RhdGljIHZvaWQg
Y3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgRUdMaW50LCBjb25zdCBJbnRT
aXplJiA9IEludFNpemUoMSwgMSkpOworI2VuZGlmCisgICAgc3RhdGljIHZvaWQgZGVzdHJveVdp
bmRvdyhjb25zdCB1aW50MzJfdCk7CisgICAgc3RhdGljIHZvaWQgcmVzaXplV2luZG93KGNvbnN0
IEludFJlY3QmLCBjb25zdCB1aW50MzJfdCk7CisgICAgc3RhdGljIGJvb2wgaXNYUmVuZGVyRXh0
ZW5zaW9uU3VwcG9ydGVkKCk7CisgICAgc3RhdGljIERpc3BsYXkqIG5hdGl2ZURpc3BsYXkoKTsK
KyAgICBzdGF0aWMgV2luZG93IG9mZnNjcmVlblJvb3RXaW5kb3coKTsKK307CisKK2NsYXNzIFNj
b3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlciB7CisKK3B1YmxpYzoKKyAgICBTY29wZWRY
UGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKTsKKyAgICB+U2NvcGVkWFBpeG1hcENyZWF0aW9u
RXJyb3JIYW5kbGVyKCk7CisgICAgYm9vbCBpc1ZhbGlkT3BlcmF0aW9uKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgWEVycm9ySGFuZGxlciBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyOworfTsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBUb29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1
cmVzLnByZiBUb29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgppbmRleCBj
YzkwNzJkLi5lMzljMGMyIDEwMDY0NAotLS0gVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9m
ZWF0dXJlcy5wcmYKKysrIFRvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJm
CkBAIC0xMzgsNyArMTM4LDcgQEAgZGVmaW5lVGVzdChkZXRlY3RGZWF0dXJlcykgewogICAgIHVz
ZT8oM2RfZ3JhcGhpY3MpIHsKICAgICAgICAgbWFjOiBXRUJLSVRfQ09ORklHICs9IHVzZV9ncmFw
aGljc19zdXJmYWNlCiAgICAgICAgIHdpbjMyOmNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMy
KTogV0VCS0lUX0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFjZQotICAgICAgICBsaW51eC0q
OmNvbnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfZ2x4KTpjb250YWlucyhXRUJLSVRfQ09ORklH
LCBoYXZlX3hjb21wb3NpdGUpOmNvbnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfeHJlbmRlcik6
IFdFQktJVF9DT05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZhY2UKKyAgICAgICAgbGludXgtKjpj
b250YWlucyhXRUJLSVRfQ09ORklHLCBoYXZlX2dseCk6Y29udGFpbnMoV0VCS0lUX0NPTkZJRywg
aGF2ZV94Y29tcG9zaXRlKTpjb250YWlucyhXRUJLSVRfQ09ORklHLCBoYXZlX3hyZW5kZXIpOiBX
RUJLSVRfQ09ORklHICs9IHVzZV9ncmFwaGljc19zdXJmYWNlIHVzZV9nbHgKICAgICB9CiAKICAg
ICAjIFNsaWRlciBUb3VjaCBpcyBzZW5zaWJsZSB0byB1c2Ugd2hlbiBjb21waWxpbmcgV2ViS2l0
Mgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186437</attachid>
            <date>2013-02-04 12:30:28 -0800</date>
            <delta_ts>2013-02-04 12:31:21 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patchforreview.patch</filename>
            <type>text/plain</type>
            <size>59191</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGY2YzdiNWMuLmM3ODJkZGMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEz
LTAyLTA0ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtRdF1bV2ViR0xdIFNoYXJlIHRoZSBjb21tb24gY29kZSBiZXR3ZWVu
IEdyYXBoaWNzU3VyZmFjZUdMWCBhbmQgWDExV2luZG93UmVzb3VyY2VzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBX
ZWJHTCB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IGR1cGxpY2F0ZSBj
b2RlIGluIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlR0xY
LiBObyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVHTENvbmZpZ1NlbGVjdG9yOjpwaXhtYXBDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaDoKKyAgICAgICAg
KEVHTENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oOgorICAgICAgICAo
V2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OkdMWENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OkdMWENvbmZpZ1NlbGVjdG9yOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6Y3JlYXRlU3VyZmFjZUNvbmZpZyk6CisgICAgICAg
IChHTFhDb25maWdTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUFSQkV4
dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6R0xYT2Zm
U2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRm
b3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4
dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWENvbnRleHQuaDoKKyAgICAgICAgKEdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhQQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oOgorICAgICAgICAoR0xYVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChHTFhQQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6R3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpp
bml0aWFsaXplKToKKyAgICAgICAgKEdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjcmVhdGVQaXhtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpmbGFncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICBObyBu
ZXcgZnVuY3Rpb25hbGl0eSBhZGRlZC4gTWFkZSBjaGFuZ2VzIHRvIHRha2UgdGhlIGNvbW1vbiBj
b2RlIGludG8gdXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMVdpbmRvd1Jlc291cmNlcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9u
OjpEaXNwbGF5Q29ubmVjdGlvbik6CisgICAgICAgIChEaXNwbGF5Q29ubmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5Q29ubmVjdGlvbjo6fkRpc3BsYXlDb25uZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9uOjpkaXNwbGF5KToKKyAgICAgICAgKE9m
ZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmU2NyZWVuUm9vdFdpbmRv
dzo6T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3JlZW5Sb290
V2luZG93Ojp+T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3Jl
ZW5Sb290V2luZG93Ojpyb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6
cmVzaXplV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2Ny
ZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6ZGVzdHJveVdpbmRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6WDExSGVscGVyOjpvZmZzY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJv
cik6CisgICAgICAgIChYMTFIZWxwZXIpOgorICAgICAgICAoU2NvcGVkWFBpeG1hcENyZWF0aW9u
RXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVy
cm9ySGFuZGxlcjo6U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6flNjb3BlZFhQaXht
YXBDcmVhdGlvbkVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRYUGl4bWFw
Q3JlYXRpb25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24pOgorICAgICAgICBNb3ZlZCBj
b21tb24gY29kZSBmcm9tIEdyYXBoaWNzU3VyZmFjZUdMWCB0byBYMTFIZWxwZXIuCisKIDIwMTMt
MDItMDQgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtD
aHJvbWl1bV0gTW92ZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB0byBXZWJDb3JlCkBAIC0z
MjcwNSw3ICszMjc5Miw3IEBACiAKIDIwMTMtMDEtMDYgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJh
c3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KIAotICAgICAgICBCdWfCoDEwNjE3NyAtIFtH
U3RyZWFtZXJdIERvbid0IGNhbGwgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCkgd2l0aCBub24t
Zml4ZWQgY2FwcworICAgICAgICBCdWcgMTA2MTc3IC0gW0dTdHJlYW1lcl0gRG9uJ3QgY2FsbCBn
c3RfdmlkZW9faW5mb19mcm9tX2NhcHMoKSB3aXRoIG5vbi1maXhlZCBjYXBzCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYxNzcKIAogICAgICAgICBS
ZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNWIx
NjhkMy4uMDhlMzU4MSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTMxLDkgKzEzMSw2IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6RmFjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJm
QnV6elNoYXBlci5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhD
b250ZXh0LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNl
LmNwcAotCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCiAKICAgICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKQEAgLTMx
NSw4ICszMTIsNyBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5j
cHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
LmNwcAogICAgICkKQEAgLTMyNyw2ICszMjMsMTIgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1Mp
CiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5j
cHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNl
LmNwcAogICAgICAgICApCisgICAgZWxzZSAoKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhD
b250ZXh0LmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dM
WFN1cmZhY2UuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R3JhcGhpY3NTdXJmYWNlR0xYLmNwcAorICAgICAgICApCiAgICAgZW5kaWYgKCkKIAogICAgIGlm
IChXVEZfVVNFX09QRU5HTF9FU18yKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBlOGY2ZmMxLi45NjNlY2ZhIDEwMDY0
NAotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtNDE5NCw3ICs0MTk0LDEyIEBAIHVzZT8oR1JBUEhJQ1NfU1VSRkFDRSkgewogICAg
ICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3dpbi9HcmFwaGljc1N1
cmZhY2VXaW4uY3BwCiAgICAgfQogICAgIGhhdmU/KFhDT01QT1NJVEUpIHsKLSAgICAgICAgU09V
UkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xY
LmNwcAorICAgICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuaCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaAorICAgICAgICBTT1VSQ0VTICs9IFwK
KyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3Bw
IFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1
cmZhY2VHTFguY3BwCiAgICAgfQogfQogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAppbmRleCAyNmQ1NmE1
Li5lNjcxMWY4IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKQEAgLTMzLDEzICszMywxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFu
c3BvcnRTdXJmYWNlKCkKICAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKIHsKLSAgICBtX25hdGl2
ZVJlc291cmNlID0gYWRvcHRQdHIobmV3IE5hdGl2ZU9mZlNjcmVlbldpbmRvdygpKTsKLSAgICBt
X2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKG1fbmF0aXZl
UmVzb3VyY2UtPm5hdGl2ZVNoYXJlZERpc3BsYXkoKSkpOworICAgIG1fY29uZmlnU2VsZWN0b3Ig
PSBhZG9wdFB0cihuZXcgRUdMQ29uZmlnU2VsZWN0b3IoTmF0aXZlV3JhcHBlcjo6bmF0aXZlRGlz
cGxheSgpKSk7CiAgICAgbV9zaGFyZWREaXNwbGF5ID0gbV9jb25maWdTZWxlY3Rvci0+ZGlzcGxh
eSgpOwogCiAgICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgewogICAg
ICAgICBtX2NvbmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKLSAgICAgICAgbV9uYXRpdmVSZXNvdXJj
ZSA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU3LDcgKzU1LDcgQEAg
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSgpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX25hdGl2ZVJlc291cmNlLT5jcmVhdGVPZmZT
Y3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCB2aXN1YWxJZCk7CisgICAgTmF0aXZlV3JhcHBl
cjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSwgdmlzdWFsSWQpOwogCiAg
ICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgewogICAgICAgICBkZXN0cm95KCk7CkBAIC0xMDQsNyAr
MTAyLDcgQEAgdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCiB2
b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKQogewogICAgIEdMUGxhdGZv
cm1TdXJmYWNlOjpkZXN0cm95KCk7Ci0gICAgbV9uYXRpdmVSZXNvdXJjZS0+ZGVzdHJveVdpbmRv
dyhtX2J1ZmZlckhhbmRsZSk7CisgICAgTmF0aXZlV3JhcHBlcjo6ZGVzdHJveVdpbmRvdyhtX2J1
ZmZlckhhbmRsZSk7CiAgICAgZnJlZUVHTFJlc291cmNlcygpOwogICAgIG1fYnVmZmVySGFuZGxl
ID0gMDsKIH0KQEAgLTEyOCw3ICsxMjYsNyBAQCB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OmZyZWVFR0xSZXNvdXJjZXMoKQogdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpz
ZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogewogICAgIEdMUGxhdGZvcm1TdXJm
YWNlOjpzZXRHZW9tZXRyeShuZXdSZWN0KTsKLSAgICBtX25hdGl2ZVJlc291cmNlLT5yZVNpemVX
aW5kb3cobmV3UmVjdCwgbV9idWZmZXJIYW5kbGUpOworICAgIE5hdGl2ZVdyYXBwZXI6OnJlc2l6
ZVdpbmRvdyhuZXdSZWN0LCBtX2J1ZmZlckhhbmRsZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgK
aW5kZXggNWMyODhhOS4uMmVhNzA0MiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKQEAgLTMxLDEzICszMSwx
MyBAQAogI2luY2x1ZGUgIkVHTENvbmZpZ1NlbGVjdG9yLmgiCiAjaW5jbHVkZSAiR0xQbGF0Zm9y
bVN1cmZhY2UuaCIKIAotI2luY2x1ZGUgPGdseC9YMTFXaW5kb3dSZXNvdXJjZXMuaD4KKyNpbmNs
dWRlIDxnbHgvWDExSGVscGVyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVm
IFgxMU9mZlNjcmVlbldpbmRvdyBOYXRpdmVPZmZTY3JlZW5XaW5kb3c7Cit0eXBlZGVmIFgxMUhl
bHBlciBOYXRpdmVXcmFwcGVyOwogCiAvLyBDb250ZW50cyBvZiB0aGUgc3VyZmFjZSBhcmUgYmFj
a2VkIGJ5IG5hdGl2ZSB3aW5kb3cuCiBjbGFzcyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlIDog
cHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKQEAgLTUyLDcgKzUyLDYgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIHZvaWQgZnJlZUVHTFJlc291cmNlcygpOwotICAgIE93blB0cjxOYXRpdmVP
ZmZTY3JlZW5XaW5kb3c+IG1fbmF0aXZlUmVzb3VyY2U7CiAgICAgT3duUHRyPEVHTENvbmZpZ1Nl
bGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9yOwogfTsKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rv
ci5oCmluZGV4IGRkMWI2MmIuLjVlODc5NWQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29uZmlnU2VsZWN0b3IuaAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9y
LmgKQEAgLTI2LDIxICsyNiwzMCBAQAogI2lmbmRlZiBHTFhDb25maWdTZWxlY3Rvcl9oCiAjZGVm
aW5lIEdMWENvbmZpZ1NlbGVjdG9yX2gKIAotI2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5o
IgotCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoR0xYKQogCisjaW5j
bHVkZSAiWDExSGVscGVyLmgiCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBpbnQgY2xpZW50QXR0cmlidXRlc1tdID0geworICAgIC8v
IFRoZSBzcGVjaWZpY2F0aW9uIGlzIGEgc2V0IGtleSB2YWx1ZSBwYWlycyBzdG9yZWQgaW4gYSBz
aW1wbGUgYXJyYXkuCisgICAgR0xYX0xFVkVMLCAgICAgICAgICAgICAgICAgICAgICAgICAgMCwK
KyAgICBzdGF0aWNfY2FzdDxpbnQ+KEdMWF9WSVNVQUxfSUQpLCAgICAwLAorICAgIEdMWF9EUkFX
QUJMRV9UWVBFLCAgICAgICAgICAgICAgICAgIEdMWF9QSVhNQVBfQklULAorICAgIEdMWF9CSU5E
X1RPX1RFWFRVUkVfVEFSR0VUU19FWFQsICAgIEdMWF9URVhUVVJFXzJEX0JJVF9FWFQsCisgICAg
R0xYX0JJTkRfVE9fVEVYVFVSRV9SR0JBX0VYVCwgICAgICAgVFJVRSwKKyAgICAwCit9OworCiBj
bGFzcyBHTFhDb25maWdTZWxlY3RvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xYQ29u
ZmlnU2VsZWN0b3IpOwogCiBwdWJsaWM6Ci0gICAgR0xYQ29uZmlnU2VsZWN0b3IoRGlzcGxheSog
eERpc3BsYXksIGJvb2wgc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKQorICAgIEdMWENvbmZpZ1Nl
bGVjdG9yKCkKICAgICAgICAgOiBtX3BidWZmZXJGQkNvbmZpZygwKQogICAgICAgICAsIG1fc3Vy
ZmFjZUNvbnRleHRGQkNvbmZpZygwKQotICAgICAgICAsIG1fc2hhcmVkRGlzcGxheSh4RGlzcGxh
eSkKLSAgICAgICAgLCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbihzdXBwb3J0c1hSZW5kZXJF
eHRlbnNpb24pCiAgICAgewogICAgIH0KIApAQCAtNTMsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmICghc3VyZmFjZUNvbnRleHRDb25maWcoKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgICAgIHJldHVybiBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcobV9zaGFyZWREaXNwbGF5
LCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcpOworICAgICAgICByZXR1cm4gZ2xYR2V0VmlzdWFs
RnJvbUZCQ29uZmlnKFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSwgbV9zdXJmYWNlQ29udGV4
dEZCQ29uZmlnKTsKICAgICB9CiAKICAgICBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZp
ZygpCkBAIC03MCwxMCArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgTm9uZQogICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgaW50IG51bUF2YWlsYWJsZUNvbmZpZ3M7Ci0gICAg
ICAgICAgICBPd25QdHJYMTE8R0xYRkJDb25maWc+IHRlbXAoZ2xYQ2hvb3NlRkJDb25maWcobV9z
aGFyZWREaXNwbGF5LCBEZWZhdWx0U2NyZWVuKG1fc2hhcmVkRGlzcGxheSksIGF0dHJpYnV0ZXMs
ICZudW1BdmFpbGFibGVDb25maWdzKSk7Ci0gICAgICAgICAgICBpZiAobnVtQXZhaWxhYmxlQ29u
ZmlncykKLSAgICAgICAgICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IHRlbXBbMF07CisgICAg
ICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IGZpbmRNYXRjaGluZ0NvbmZpZyhhdHRyaWJ1dGVz
KTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBtX3BidWZmZXJGQkNvbmZpZzsKQEAgLTg3
LDYgKzkzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRGQkNv
bmZpZzsKICAgICB9CiAKKyAgICBHTFhGQkNvbmZpZyBzdXJmYWNlQ2xpZW50Q29uZmlnKGludCBk
ZXB0aCwgVmlzdWFsSUQgaWQpCisgICAgeworICAgICAgICBjbGllbnRBdHRyaWJ1dGVzWzNdID0g
c3RhdGljX2Nhc3Q8aW50PihpZCk7CisgICAgICAgIGNsaWVudEF0dHJpYnV0ZXNbOF0gPSBkZXB0
aCA9PSAzMiA/IEdMWF9CSU5EX1RPX1RFWFRVUkVfUkdCQV9FWFQgOiBHTFhfQklORF9UT19URVhU
VVJFX1JHQl9FWFQ7CisKKyAgICAgICAgcmV0dXJuIGZpbmRNYXRjaGluZ0NvbmZpZyhjbGllbnRB
dHRyaWJ1dGVzLCBkZXB0aCwgaWQpOworICAgIH0KKwogICAgIHZvaWQgcmVzZXQoKQogICAgIHsK
ICAgICAgICAgbV9wYnVmZmVyRkJDb25maWcgPSAwOwpAQCAtMTEwLDQzICsxMjQsNDMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIE5vbmUKICAgICAgICAgfTsKIAorICAgICAgICBtX3N1cmZhY2VD
b250ZXh0RkJDb25maWcgPSBmaW5kTWF0Y2hpbmdDb25maWcoYXR0cmlidXRlcyk7CisgICAgfQor
CisgICAgR0xYRkJDb25maWcgZmluZE1hdGNoaW5nQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1dGVz
W10sIGludCBkZXB0aCA9IDMyLCBWaXN1YWxJRCBpZCA9IDApCisgICAgewogICAgICAgICBpbnQg
bnVtQXZhaWxhYmxlQ29uZmlnczsKLSAgICAgICAgT3duUHRyWDExPEdMWEZCQ29uZmlnPiB0ZW1w
KGdsWENob29zZUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgRGVmYXVsdFNjcmVlbihtX3NoYXJl
ZERpc3BsYXkpLCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29uZmlncykpOworICAgICAgICBP
d25QdHJYMTE8R0xYRkJDb25maWc+IHRlbXAoZ2xYQ2hvb3NlRkJDb25maWcoWDExV3JhcHBlcjo6
bmF0aXZlRGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXko
KSksIGF0dHJpYnV0ZXMsICZudW1BdmFpbGFibGVDb25maWdzKSk7CiAKLSAgICAgICAgaWYgKCFu
dW1BdmFpbGFibGVDb25maWdzKSB7Ci0gICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25m
aWcgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICghbnVt
QXZhaWxhYmxlQ29uZmlncyB8fCAhdGVtcC5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwog
CiAgICAgICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gc2NvcGVkVmlzdWFsSW5mbzsKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdmFpbGFibGVDb25maWdzOyArK2kpIHsKLSAgICAg
ICAgICAgIHNjb3BlZFZpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcobV9zaGFy
ZWREaXNwbGF5LCB0ZW1wW2ldKTsKKyAgICAgICAgICAgIHNjb3BlZFZpc3VhbEluZm8gPSBnbFhH
ZXRWaXN1YWxGcm9tRkJDb25maWcoWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpLCB0ZW1wW2ld
KTsKICAgICAgICAgICAgIGlmICghc2NvcGVkVmlzdWFsSW5mby5nZXQoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGlkICYmIHNjb3BlZFZpc3VhbEluZm8t
PmRlcHRoID09IGRlcHRoICYmIHNjb3BlZFZpc3VhbEluZm8tPnZpc3VhbGlkID09IGlkKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0ZW1wW2ldOworCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci0gICAgICAgICAgICBpZiAobV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24pIHsKLSAgICAgICAg
ICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3Jt
YXQobV9zaGFyZWREaXNwbGF5LCBzY29wZWRWaXN1YWxJbmZvLT52aXN1YWwpOwotICAgICAgICAg
ICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkgewotICAg
ICAgICAgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSB0ZW1wW2ldOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoWDExV3JhcHBlcjo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpIHsKKyAgICAgICAg
ICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3Jt
YXQoWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpLCBzY29wZWRWaXN1YWxJbmZvLT52aXN1YWwp
OworICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZGVwdGggPT0gMzIgJiYgZm9ybWF0LT5k
aXJlY3QuYWxwaGFNYXNrID4gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBbaV07
CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIGlmICghbV9zdXJmYWNlQ29udGV4
dEZCQ29uZmlnICYmIHNjb3BlZFZpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7Ci0gICAgICAgICAg
ICAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnID0gdGVtcFtpXTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzY29wZWRWaXN1YWxJbmZv
LT5kZXB0aCA9PSBkZXB0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVtcFtpXTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIERpZCBub3QgZmluZCBhbnkgdmlzdWFsIHN1cHBvcnRpbmcgYWxw
aGEsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGNvbmZpZy4KLSAgICAgICAgaWYgKCFtX3N1
cmZhY2VDb250ZXh0RkJDb25maWcpCi0gICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25m
aWcgPSB0ZW1wWzBdOworICAgICAgICByZXR1cm4gdGVtcFswXTsKICAgICB9CiAKICAgICBHTFhG
QkNvbmZpZyBtX3BidWZmZXJGQkNvbmZpZzsKICAgICBHTFhGQkNvbmZpZyBtX3N1cmZhY2VDb250
ZXh0RkJDb25maWc7Ci0gICAgRGlzcGxheSogbV9zaGFyZWREaXNwbGF5OwotICAgIGJvb2wgbV9z
dXBwb3J0c1hSZW5kZXJFeHRlbnNpb247CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAppbmRl
eCBhOWYzMjJkLi4wMjg0MWM2IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKQEAgLTI4LDYgKzI4LDgg
QEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKEdMWCkKIAorI2lu
Y2x1ZGUgIlgxMUhlbHBlci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYgR0xY
Q29udGV4dCAoKkdMWENSRUFURUNPTlRFWFRBVFRSSUJTQVJCUFJPQykoRGlzcGxheSosIEdMWEZC
Q29uZmlnLCBHTFhDb250ZXh0LCBCb29sLCBjb25zdCBpbnQqKTsKQEAgLTM4LDIwICs0MCwxOSBA
QCBzdGF0aWMgaW50IEF0dHJpYnNbXSA9IHsKICAgICBHTFhfTE9TRV9DT05URVhUX09OX1JFU0VU
X0FSQiwKICAgICAwIH07CiAKLXN0YXRpYyB2b2lkIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKERp
c3BsYXkqIGRpc3BsYXkpCitzdGF0aWMgdm9pZCBpbml0aWFsaXplQVJCRXh0ZW5zaW9ucygpCiB7
CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICBpZiAoaW5pdGlhbGl6
ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICBpZiAo
R0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xYRXh0ZW5zaW9uKGRpc3BsYXksICJHTFhfQVJC
X2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MiKSkKKyAgICBpZiAoR0xQbGF0Zm9ybUNvbnRleHQ6
OnN1cHBvcnRzR0xYRXh0ZW5zaW9uKFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSwgIkdMWF9B
UkJfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyIpKQogICAgICAgICBnbFhDcmVhdGVDb250ZXh0
QXR0cmlic0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQ
Uk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigi
Z2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIiKSkpOwogfQogCiBHTFhPZmZTY3JlZW5Db250ZXh0
OjpHTFhPZmZTY3JlZW5Db250ZXh0KCkKICAgICA6IEdMUGxhdGZvcm1Db250ZXh0KCkKLSAgICAs
IG1fZGlzcGxheSgwKQogewogfQogCkBAIC02MCwxNyArNjEsMTcgQEAgYm9vbCBHTFhPZmZTY3Jl
ZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQogICAgIGlm
ICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9kaXNwbGF5ID0gc3Vy
ZmFjZS0+c2hhcmVkRGlzcGxheSgpOwotICAgIGlmICghbV9kaXNwbGF5KQorICAgIERpc3BsYXkq
IHgxMURpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNwbGF5KCk7CisgICAgaWYgKCF4MTFEaXNw
bGF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBHTFhGQkNvbmZpZyBjb25maWcgPSBz
dXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CiAKICAgICBpZiAoY29uZmlnKSB7Ci0gICAgICAgIGlu
aXRpYWxpemVBUkJFeHRlbnNpb25zKG1fZGlzcGxheSk7CisgICAgICAgIGluaXRpYWxpemVBUkJF
eHRlbnNpb25zKCk7CiAKICAgICAgICAgaWYgKGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCKQot
ICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIo
bV9kaXNwbGF5LCBjb25maWcsIDAsIHRydWUsIEF0dHJpYnMpOworICAgICAgICAgICAgbV9jb250
ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIoeDExRGlzcGxheSwgY29uZmln
LCAwLCB0cnVlLCBBdHRyaWJzKTsKIAogICAgICAgICBpZiAobV9jb250ZXh0SGFuZGxlKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgR0xYX0FSQl9jcmVhdGVfY29udGV4dF9yb2J1c3RuZXNzIHNwZWMg
cmVxdWlyZXMgdGhhdCBhIGNvbnRleHQgY3JlYXRlZCB3aXRoCkBAIC04MCwxMSArODEsMTEgQEAg
Ym9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKiBz
dXJmYWNlKQogICAgICAgICAgICAgaWYgKHBsYXRmb3JtTWFrZUN1cnJlbnQoc3VyZmFjZSkgJiYg
R0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xFeHRlbnNpb24oIkdMX0FSQl9yb2J1c3RuZXNz
IikpCiAgICAgICAgICAgICAgICAgbV9yZXNldExvc3RDb250ZXh0ID0gdHJ1ZTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnbFhEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1f
Y29udGV4dEhhbmRsZSk7CisgICAgICAgICAgICAgICAgZ2xYRGVzdHJveUNvbnRleHQoeDExRGlz
cGxheSwgbV9jb250ZXh0SGFuZGxlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9jb250
ZXh0SGFuZGxlKQotICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlTmV3Q29u
dGV4dChtX2Rpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQRSwgMCwgdHJ1ZSk7CisgICAgICAg
ICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVOZXdDb250ZXh0KHgxMURpc3BsYXksIGNv
bmZpZywgR0xYX1JHQkFfVFlQRSwgMCwgdHJ1ZSk7CiAKICAgICAgICAgaWYgKG1fY29udGV4dEhh
bmRsZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTA5LDE0ICsxMTAsMjEgQEAgYm9v
bCBHTFhPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJm
YWNlKiBzdXJmYWNlKQogCiB2b2lkIEdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtUmVsZWFz
ZUN1cnJlbnQoKQogewotICAgIGdsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwgMCwgMCk7Ci0gICAg
bV9kaXNwbGF5ID0gMDsKKyAgICBEaXNwbGF5KiB4MTFEaXNwbGF5ID0gWDExV3JhcHBlcjo6bmF0
aXZlRGlzcGxheSgpOworICAgIGlmICgheDExRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2xYTWFrZUN1cnJlbnQoeDExRGlzcGxheSwgMCwgMCk7CiB9CiAKIHZvaWQgR0xYT2ZmU2Ny
ZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcygpCiB7CisgICAgRGlzcGxheSogeDExRGlzcGxheSA9
IFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKTsKKyAgICBpZiAoIXgxMURpc3BsYXkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGlmIChtX2NvbnRleHRIYW5kbGUpCi0gICAgICAgIGdsWERlc3Ry
b3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKKyAgICAgICAgZ2xYRGVzdHJv
eUNvbnRleHQoeDExRGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKIAogICAgIG1fY29udGV4dEhh
bmRsZSA9IDA7CiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oCmluZGV4IGNiZGUwZWYuLjQ0NGU3ZjIgMTAwNjQ0
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29u
dGV4dC5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R0xYQ29udGV4dC5oCkBAIC00NSw3ICs0NSw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2
b2lkIGZyZWVSZXNvdXJjZXMoKTsKLSAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7CiB9OwogCiB9CmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dM
WFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HTFhTdXJmYWNlLmNwcAppbmRleCA4MGZjMjYyLi40YmJhNDM3IDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFj
ZS5jcHAKQEAgLTM2LDE1ICszNiw4IEBAIHN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0
ZXNbXSA9IHsgR0xYX1BCVUZGRVJfV0lEVEgsIDEsIEdMWF9QQlVGRkVSX0hFSUdICiBHTFhUcmFu
c3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKCkKICAgICA6IEdMUGxhdGZvcm1TdXJm
YWNlKCkKIHsKLSAgICBtX25hdGl2ZVJlc291cmNlID0gYWRvcHRQdHIobmV3IFgxMU9mZlNjcmVl
bldpbmRvdygpKTsKLSAgICBtX3NoYXJlZERpc3BsYXkgPSBtX25hdGl2ZVJlc291cmNlLT5uYXRp
dmVTaGFyZWREaXNwbGF5KCk7Ci0KLSAgICBpZiAoIW1fc2hhcmVkRGlzcGxheSkgewotICAgICAg
ICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IobV9z
aGFyZWREaXNwbGF5LCBtX25hdGl2ZVJlc291cmNlLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0
ZWQoKSkpOworICAgIG1fc2hhcmVkRGlzcGxheSA9IFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXko
KTsKKyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZpZ1NlbGVjdG9y
KCkpOwogICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gdmlzSW5mbyhtX2NvbmZpZ1NlbGVjdG9y
LT52aXN1YWxJbmZvKCkpOwogCiAgICAgaWYgKCF2aXNJbmZvLmdldCgpKSB7CkBAIC01Miw3ICs0
NSw3IEBAIEdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV9uYXRpdmVSZXNvdXJjZS0+Y3JlYXRlT2ZmU2NyZWVu
V2luZG93KCZtX2J1ZmZlckhhbmRsZSwgKnZpc0luZm8uZ2V0KCkpOworICAgIFgxMVdyYXBwZXI6
OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsICp2aXNJbmZvLmdldCgpKTsK
IAogICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKICAgICAgICAgZGVzdHJveSgpOwpAQCAtNzQs
NyArNjcsNyBAQCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29u
ZmlndXJhdGlvbigpCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0
IEludFJlY3QmIG5ld1JlY3QpCiB7CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5
KG5ld1JlY3QpOwotICAgIG1fbmF0aXZlUmVzb3VyY2UtPnJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBt
X2RyYXdhYmxlKTsKKyAgICBYMTFXcmFwcGVyOjpyZXNpemVXaW5kb3cobmV3UmVjdCwgbV9kcmF3
YWJsZSk7CiAgICAgLy8gRm9yY2UgcmVzaXplIG9mIEdMIHN1cmZhY2UgYWZ0ZXIgd2luZG93IHJl
c2l6ZS4KICAgICBnbFhTd2FwQnVmZmVycyhzaGFyZWREaXNwbGF5KCksIG1fZHJhd2FibGUpOwog
fQpAQCAtOTksNyArOTIsNyBAQCB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKQog
ICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7CiAKICAgICBpZiAobV9idWZmZXJIYW5k
bGUpIHsKLSAgICAgICAgbV9uYXRpdmVSZXNvdXJjZS0+ZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhh
bmRsZSk7CisgICAgICAgIFgxMVdyYXBwZXI6OmRlc3Ryb3lXaW5kb3cobV9idWZmZXJIYW5kbGUp
OwogICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CiAgICAgICAgIG1fZHJhd2FibGUgPSAwOwog
ICAgIH0KQEAgLTEyMSwxNSArMTE0LDkgQEAgR0xYUEJ1ZmZlcjo6fkdMWFBCdWZmZXIoKQogCiB2
b2lkIEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQogewotICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBh
ZG9wdFB0cihuZXcgWDExT2ZmU2NyZWVuV2luZG93KCkpOwotICAgIG1fc2hhcmVkRGlzcGxheSA9
IG1fbmF0aXZlUmVzb3VyY2UtPm5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKLQotICAgIGlmICghbV9z
aGFyZWREaXNwbGF5KSB7Ci0gICAgICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRyOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fc2hhcmVkRGlzcGxheSA9IFgxMVdyYXBwZXI6Om5h
dGl2ZURpc3BsYXkoKTsKIAotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xY
Q29uZmlnU2VsZWN0b3IobV9zaGFyZWREaXNwbGF5LCBtX25hdGl2ZVJlc291cmNlLT5pc1hSZW5k
ZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0
cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7CiAgICAgR0xYRkJDb25maWcgY29uZmlnID0gbV9j
b25maWdTZWxlY3Rvci0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKIAogICAgIGlmICghY29uZmln
KSB7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYU3VyZmFjZS5oCmluZGV4IDg0NzE1YzEuLjllNzczMmEgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFj
ZS5oCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgog
I2luY2x1ZGUgIkdMWENvbmZpZ1NlbGVjdG9yLmgiCi0jaW5jbHVkZSAiWDExV2luZG93UmVzb3Vy
Y2VzLmgiCisjaW5jbHVkZSAiWDExSGVscGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDcsNyArNDcsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXpl
KCk7Ci0gICAgT3duUHRyPFgxMU9mZlNjcmVlbldpbmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsKICAg
ICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogI2VuZGlm
CkBAIC02NCw3ICs2Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXpl
KCk7CiAgICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7Ci0gICAgT3duUHRyPFgxMU9mZlNjcmVlbldp
bmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsKICAgICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1f
Y29uZmlnU2VsZWN0b3I7CiB9OwogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAK
aW5kZXggYTU3YjYzOC4uZGFmMDFkMSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xY
LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMyBJ
bnRlbCBDb3Jwb3JhdGlvbi4KIAogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsMTkgKzMxLDE1IEBACiAjaW5j
bHVkZSA8UUd1aUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgogI2luY2x1
ZGUgPHFwYS9xcGxhdGZvcm1uYXRpdmVpbnRlcmZhY2UuaD4KLSNlbGlmIFBMQVRGT1JNKEVGTCkK
LSNpbmNsdWRlIDxHTC9nbC5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxHTC9nbGV4dC5oPgogI2lu
Y2x1ZGUgPEdML2dseC5oPgotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaW5jbHVkZSA8WDExL2V4
dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIu
aD4KKyNlbHNlCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorI2VuZGlmCiAKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKKyNpbmNsdWRlICJHTFhDb25maWdTZWxlY3Rvci5oIgogCi1zdGF0aWMgbG9u
ZyBYMTFPdmVycmlkZVJlZGlyZWN0ID0gMUwgPDwgOTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIFBGTkdMWEJJTkRURVhJTUFHRUVYVFBST0MgcEdsWEJpbmRUZXhJbWFnZUVYVCA9IDA7
CiBzdGF0aWMgUEZOR0xYUkVMRUFTRVRFWElNQUdFRVhUUFJPQyBwR2xYUmVsZWFzZVRleEltYWdl
RVhUID0gMDsKQEAgLTUyLDE1MyArNDksNyBAQCBzdGF0aWMgUEZOR0xHRU5GUkFNRUJVRkZFUlNQ
Uk9DIHBHbEdlbkZyYW1lYnVmZmVycyA9IDA7CiBzdGF0aWMgUEZOR0xERUxFVEVGUkFNRUJVRkZF
UlNQUk9DIHBHbERlbGV0ZUZyYW1lYnVmZmVycyA9IDA7CiBzdGF0aWMgUEZOR0xGUkFNRUJVRkZF
UlRFWFRVUkUyRFBST0MgcEdsRnJhbWVidWZmZXJUZXh0dXJlMkQgPSAwOwogCi0vLyBVc2VkIGZv
ciBoYW5kbGluZyBYRXJyb3IuCi1zdGF0aWMgYm9vbCB2YWxpZE9wZXJhdGlvbiA9IHRydWU7Ci1z
dGF0aWMgaW50IGhhbmRsZVhQaXhtYXBDcmVhdGlvbkVycm9yKERpc3BsYXkqLCBYRXJyb3JFdmVu
dCogZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZE1hdGNoIHx8IGV2
ZW50LT5lcnJvcl9jb2RlID09IEJhZFdpbmRvdyB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRB
bGxvYykgewotICAgICAgICB2YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHN3aXRj
aCAoZXZlbnQtPmVycm9yX2NvZGUpIHsKLSAgICAgICAgY2FzZSBCYWRNYXRjaDoKLSAgICAgICAg
ICAgIExPR19FUlJPUigiQmFkTWF0Y2guIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBCYWRXaW5kb3c6Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkJhZFdpbmRvdy4iKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJhZEFsbG9jOgotICAgICAgICAgICAgTE9H
X0VSUk9SKCJCYWRBbGxvYy4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotc3RhdGljIGludCBhdHRyaWJ1dGVzW10gPSB7Ci0gICAgR0xYX0xFVkVMLCAwLAotICAg
IEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfV0lORE9XX0JJVCwKLSAgICBHTFhfUkVOREVSX1RZUEUs
ICAgR0xYX1JHQkFfQklULAotICAgIEdMWF9SRURfU0laRSwgICAgICAxLAotICAgIEdMWF9HUkVF
Tl9TSVpFLCAgICAxLAotICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAotICAgIEdMWF9BTFBIQV9T
SVpFLCAgICAxLAotICAgIEdMWF9ERVBUSF9TSVpFLCAgICAxLAotICAgIEdMWF9YX1ZJU1VBTF9U
WVBFLCBHTFhfVFJVRV9DT0xPUiwKLSAgICBHTFhfRE9VQkxFQlVGRkVSLCAgVHJ1ZSwKLSAgICBO
b25lCi19OwotCi1jbGFzcyBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgewotCi1w
dWJsaWM6Ci0gICAgU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKERpc3BsYXkqIGRp
c3BsYXkpCi0gICAgICAgIDogbV9kaXNwbGF5KGRpc3BsYXkpCi0gICAgewotICAgICAgICAvLyBY
U3luYyBtdXN0IGJlIGNhbGxlZCB0byBlbnN1cmUgdGhhdCBjdXJyZW50IGVycm9ycyBhcmUgaGFu
ZGxlZCBieSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KLSAgICAgICAgWFN5bmMobV9kaXNwbGF5LCBm
YWxzZSk7Ci0gICAgICAgIG1fcHJldmlvdXNFcnJvckhhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVy
KGhhbmRsZVhQaXhtYXBDcmVhdGlvbkVycm9yKTsKLSAgICB9Ci0KLSAgICB+U2NvcGVkWFBpeG1h
cENyZWF0aW9uRXJyb3JIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUgdGhlIG9y
aWdpbmFsIGhhbmRsZXIuCi0gICAgICAgIFhTZXRFcnJvckhhbmRsZXIobV9wcmV2aW91c0Vycm9y
SGFuZGxlcik7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkT3BlcmF0aW9uKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgLy8gWFN5bmMgaXMg
bmVlZGVkIHRvIGNhdGNoIHBvc3NpYmxlIGVycm9ycyBhcyB0aGV5IGFyZSBnZW5lcmF0ZWQgYXN5
bmNocm9ub3VzbHkuCi0gICAgICAgIFhTeW5jKG1fZGlzcGxheSwgZmFsc2UpOwotICAgICAgICBy
ZXR1cm4gdmFsaWRPcGVyYXRpb247Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFhFcnJvckhhbmRs
ZXIgbV9wcmV2aW91c0Vycm9ySGFuZGxlcjsKLSAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci19Owot
Ci0vLyBGSVhNRTogVGFrZSBYMTFXaW5kb3dSZXNvdXJjZXMgYW5kIEdMWENvbmZpZ1NlbGVjdG9y
IGludG8gdXNlLgotY2xhc3MgT2ZmU2NyZWVuUm9vdFdpbmRvdyB7Ci1wdWJsaWM6Ci0gICAgT2Zm
U2NyZWVuUm9vdFdpbmRvdygpCi0gICAgewotICAgICAgICArK21fcmVmQ291bnQ7Ci0gICAgfQot
Ci0gICAgV2luZG93IGdldFhXaW5kb3coKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3dpbmRvdykg
ewotICAgICAgICAgICAgRGlzcGxheSogZHB5ID0gZGlzcGxheSgpOwotICAgICAgICAgICAgbV93
aW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSks
IC0xLCAtMSwgMSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkp
OwotICAgICAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOwotICAgICAgICAgICAgWENo
YW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCBtX3dpbmRvdywgWDExT3ZlcnJpZGVSZWRpcmVjdCwg
JmF0dHJpYnV0ZXMpOwotICAgICAgICAgICAgLy8gTWFwIHdpbmRvdyB0byB0aGUgc2NyZWVuCi0g
ICAgICAgICAgICBYTWFwV2luZG93KGRweSwgbV93aW5kb3cpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIG1fd2luZG93OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgRGlzcGxh
eUNvbm5lY3Rpb24gewotICAgICAgICBEaXNwbGF5Q29ubmVjdGlvbigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIH5EaXNwbGF5Q29ubmVjdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhDbG9zZURp
c3BsYXkobV9kaXNwbGF5KTsKLSAgICAgICAgfQotCi0gICAgICAgIERpc3BsYXkqIGRpc3BsYXko
KSB7IHJldHVybiBtX2Rpc3BsYXk7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBEaXNwbGF5KiBt
X2Rpc3BsYXk7Ci0gICAgfTsKLQotcHVibGljOgotICAgIHN0YXRpYyBEaXNwbGF5KiBkaXNwbGF5
KCkKLSAgICB7Ci0gICAgICAgIC8vIERpc3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgYnJv
a2VuIGF0IHByb2dyYW0gc2h1dGRvd24uCi0gICAgICAgIHN0YXRpYyBEaXNwbGF5Q29ubmVjdGlv
biBkaXNwbGF5Q29ubmVjdGlvbjsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlDb25uZWN0aW9uLmRp
c3BsYXkoKTsKLSAgICB9Ci0KLSAgICB+T2ZmU2NyZWVuUm9vdFdpbmRvdygpCi0gICAgewotICAg
ICAgICBpZiAoLS1tX3JlZkNvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChtX3dpbmRvdykgewotICAgICAgICAgICAgWFVubWFwV2luZG93KGRpc3BsYXkoKSwgbV93aW5k
b3cpOwotICAgICAgICAgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSgpLCBtX3dpbmRvdyk7Ci0g
ICAgICAgICAgICBtX3dpbmRvdyA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIGludCBtX3JlZkNvdW50OwotICAgIHN0YXRpYyBXaW5kb3cgbV93aW5kb3c7Ci19
OwotCi1pbnQgT2ZmU2NyZWVuUm9vdFdpbmRvdzo6bV9yZWZDb3VudCA9IDA7Ci1XaW5kb3cgT2Zm
U2NyZWVuUm9vdFdpbmRvdzo6bV93aW5kb3cgPSAwOwotCi1zdGF0aWMgY29uc3QgaW50IGdseFNw
ZWNbXSA9IHsKLSAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBpcyBhIHNldCBrZXkgdmFsdWUgcGFp
cnMgc3RvcmVkIGluIGEgc2ltcGxlIGFycmF5LgotICAgIEdMWF9MRVZFTCwgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsCi0gICAgR0xYX0RSQVdBQkxFX1RZUEUsICAgICAgICAgICAgICAgICAg
R0xYX1BJWE1BUF9CSVQgfCBHTFhfV0lORE9XX0JJVCwKLSAgICBHTFhfQklORF9UT19URVhUVVJF
X1RBUkdFVFNfRVhULCAgICBHTFhfVEVYVFVSRV8yRF9CSVRfRVhULAotICAgIEdMWF9CSU5EX1RP
X1RFWFRVUkVfUkdCQV9FWFQsICAgICAgIFRSVUUsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0
IGludCBnbHhBdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsK
ICAgICBHTFhfVEVYVFVSRV9GT1JNQVRfRVhULAogICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JB
X0VYVCwKICAgICBHTFhfVEVYVFVSRV9UQVJHRVRfRVhULApAQCAtMjA4LDE3ICs1OSwxMyBAQCBz
dGF0aWMgY29uc3QgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsKIAogc3RydWN0IEdyYXBoaWNzU3Vy
ZmFjZVByaXZhdGUgewogICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoY29uc3QgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBzaGFyZUNvbnRleHQgPSAwKQotICAgICAgICA6IG1fb2ZmU2NyZWVu
V2luZG93KGFkb3B0UHRyKG5ldyBPZmZTY3JlZW5Sb290V2luZG93KCkpKQotICAgICAgICAsIG1f
eFBpeG1hcCgwKQorICAgICAgICA6IG1feFBpeG1hcCgwKQogICAgICAgICAsIG1fZ2x4UGl4bWFw
KDApCiAgICAgICAgICwgbV9zdXJmYWNlKDApCiAgICAgICAgICwgbV9nbHhTdXJmYWNlKDApCiAg
ICAgICAgICwgbV9nbENvbnRleHQoMCkKICAgICAgICAgLCBtX2RldGFjaGVkQ29udGV4dCgwKQog
ICAgICAgICAsIG1fZGV0YWNoZWRTdXJmYWNlKDApCi0gICAgICAgICwgbV9mYkNvbmZpZygwKQot
ICAgICAgICAsIG1fdGV4dHVyZUlzWUludmVydGVkKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxw
aGEoZmFsc2UpCiAgICAgICAgICwgbV9pc1JlY2VpdmVyKGZhbHNlKQogICAgIHsKICAgICAgICAg
R0xYQ29udGV4dCBzaGFyZUNvbnRleHRPYmplY3QgPSAwOwpAQCAtMjM0LDE2ICs4MSwxNSBAQCBz
dHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgIFVOVVNFRF9QQVJBTShzaGFy
ZUNvbnRleHQpOwogI2VuZGlmCiAKLSAgICAgICAgaW50IG51bVJldHVybmVkOwotICAgICAgICBH
TFhGQkNvbmZpZyogZmJDb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSgpLCBEZWZh
dWx0U2NyZWVuKGRpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZudW1SZXR1cm5lZCk7Ci0KLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgY2hvb3NlIGEgY29uZmlndXJhdGlvbiB0aGF0IHN1cHBv
cnRzIGFuIGFscGhhIG1hc2suCi0gICAgICAgIG1fZmJDb25maWcgPSBmaW5kRkJDb25maWdXaXRo
QWxwaGEoZmJDb25maWdzLCBudW1SZXR1cm5lZCk7CisgICAgICAgIG1fY29uZmlnU2VsZWN0b3Ig
PSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7CiAKLSAgICAgICAgWEZyZWUoZmJD
b25maWdzKTsKKyAgICAgICAgaWYgKCFtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENv
bmZpZygpKSB7CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgR0xYIGNvbnRleHQgZm9yIE9wZW5HTCByZW5k
ZXJpbmcKLSAgICAgICAgbV9nbENvbnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KGRpc3BsYXko
KSwgbV9mYkNvbmZpZywgR0xYX1JHQkFfVFlQRSwgc2hhcmVDb250ZXh0T2JqZWN0LCB0cnVlKTsK
KyAgICAgICAgbV9nbENvbnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KGRpc3BsYXkoKSwgbV9j
b25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgR0xYX1JHQkFfVFlQRSwgc2hh
cmVDb250ZXh0T2JqZWN0LCB0cnVlKTsKICAgICB9CiAKICAgICBHcmFwaGljc1N1cmZhY2VQcml2
YXRlKHVpbnQzMl90IHdpbklkKQpAQCAtMjU0LDExICsxMDAsMTAgQEAgc3RydWN0IEdyYXBoaWNz
U3VyZmFjZVByaXZhdGUgewogICAgICAgICAsIG1fZ2xDb250ZXh0KDApCiAgICAgICAgICwgbV9k
ZXRhY2hlZENvbnRleHQoMCkKICAgICAgICAgLCBtX2RldGFjaGVkU3VyZmFjZSgwKQotICAgICAg
ICAsIG1fZmJDb25maWcoMCkKLSAgICAgICAgLCBtX3RleHR1cmVJc1lJbnZlcnRlZChmYWxzZSkK
LSAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQogICAgICAgICAsIG1faXNSZWNlaXZlcih0cnVl
KQotICAgIHsgfQorICAgIHsKKyAgICAgICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5l
dyBHTFhDb25maWdTZWxlY3RvcigpKTsKKyAgICB9CiAKICAgICB+R3JhcGhpY3NTdXJmYWNlUHJp
dmF0ZSgpCiAgICAgewpAQCAtMjY3LDM1ICsxMTIsMzIgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFj
ZVByaXZhdGUgewogCiAgICAgdWludDMyX3QgY3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXplJiBz
aXplKQogICAgIHsKLSAgICAgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBnbFhHZXRWaXN1
YWxGcm9tRkJDb25maWcoZGlzcGxheSgpLCBtX2ZiQ29uZmlnKTsKLSAgICAgICAgaWYgKCF2aXN1
YWxJbmZvKQorICAgICAgICBpZiAoIWRpc3BsYXkoKSB8fCAhbV9jb25maWdTZWxlY3RvcikKKyAg
ICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gdmlz
SW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKCkpOworCisgICAgICAgIGlmICghdmlz
SW5mby5nZXQoKSkgeworICAgICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisKKyAgICAgICAgWDExV3JhcHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93
KCZtX3N1cmZhY2UsICp2aXNJbmZvLmdldCgpLCBzaXplKTsKIAotICAgICAgICBDb2xvcm1hcCBj
bWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXkoKSwgbV9vZmZTY3JlZW5XaW5kb3ctPmdldFhX
aW5kb3coKSwgdmlzdWFsSW5mby0+dmlzdWFsLCBBbGxvY05vbmUpOwotCi0gICAgICAgIFhTZXRX
aW5kb3dBdHRyaWJ1dGVzIGE7Ci0gICAgICAgIGEuYmFja2dyb3VuZF9waXhlbCA9IFdoaXRlUGl4
ZWwoZGlzcGxheSgpLCAwKTsKLSAgICAgICAgYS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRp
c3BsYXkoKSwgMCk7Ci0gICAgICAgIGEuY29sb3JtYXAgPSBjbWFwOwotICAgICAgICBtX3N1cmZh
Y2UgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXkoKSwgbV9vZmZTY3JlZW5XaW5kb3ctPmdldFhXaW5k
b3coKSwgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAgMCwg
dmlzdWFsSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCB2aXN1YWxJbmZvLT52aXN1YWwsCi0gICAg
ICAgICAgICBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYSk7Ci0g
ICAgICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXkoKSwgbV9zdXJmYWNlLCAw
KTsKLSAgICAgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXkoKSwgbV9zdXJmYWNl
LCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0gICAgICAgIG1fZ2x4U3VyZmFjZSA9IGdsWENy
ZWF0ZVdpbmRvdyhkaXNwbGF5KCksIG1fZmJDb25maWcsIG1fc3VyZmFjZSwgMCk7Ci0gICAgICAg
IFhGcmVlKHZpc3VhbEluZm8pOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgWFJlbmRlciBF
eHRlbnNpb24gaXMgYXZhaWxhYmxlLgotICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJyb3JCYXNl
cDsKLSAgICAgICAgaWYgKCFYUmVuZGVyUXVlcnlFeHRlbnNpb24oZGlzcGxheSgpLCAmZXZlbnRC
YXNlcCwgJmVycm9yQmFzZXApKQorICAgICAgICBpZiAoIW1fc3VyZmFjZSkgeworICAgICAgICAg
ICAgY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKLSAgICAgICAg
WE1hcFdpbmRvdyhkaXNwbGF5KCksIG1fc3VyZmFjZSk7CisgICAgICAgIG1fZ2x4U3VyZmFjZSA9
IGdsWENyZWF0ZVdpbmRvdyhkaXNwbGF5KCksIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250
ZXh0Q29uZmlnKCksIG1fc3VyZmFjZSwgMCk7CiAgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CiAg
ICAgfQogCiAgICAgdm9pZCBjcmVhdGVQaXhtYXAodWludDMyX3Qgd2luSWQpCiAgICAgeworICAg
ICAgICBpZiAoIW1fY29uZmlnU2VsZWN0b3IpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAg
ICAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKICAgICAgICAgaWYgKCFYR2V0V2luZG93QXR0cmli
dXRlcyhkaXNwbGF5KCksIHdpbklkLCAmYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0z
MDQsMzUgKzE0NiwyNSBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAg
IGlmIChhdHRyLm1hcF9zdGF0ZSA9PSBJc1VubWFwcGVkIHx8IGF0dHIubWFwX3N0YXRlID09IElz
VW52aWV3YWJsZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBTY29wZWRYUGl4bWFw
Q3JlYXRpb25FcnJvckhhbmRsZXIgaGFuZGxlcihkaXNwbGF5KCkpOworICAgICAgICBTY29wZWRY
UGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgaGFuZGxlcjsKICAgICAgICAgbV9zaXplID0gSW50
U2l6ZShhdHRyLndpZHRoLCBhdHRyLmhlaWdodCk7CiAKICAgICAgICAgWFJlbmRlclBpY3RGb3Jt
YXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXkoKSwgYXR0ci52aXN1
YWwpOwotICAgICAgICBtX2hhc0FscGhhID0gKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlwZURpcmVj
dCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spOwotCi0gICAgICAgIGludCBudW1iZXJPZkNv
bmZpZ3M7Ci0gICAgICAgIEdMWEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWco
ZGlzcGxheSgpLCBYRGVmYXVsdFNjcmVlbihkaXNwbGF5KCkpLCBnbHhTcGVjLCAmbnVtYmVyT2ZD
b25maWdzKTsKLQotICAgICAgICAvLyBJZiBvcmlnaW4gd2luZG93IGhhcyBhbHBoYSB0aGVuIGZp
bmQgY29uZmlnIHdpdGggYWxwaGEuCi0gICAgICAgIEdMWEZCQ29uZmlnJiBjb25maWcgPSBtX2hh
c0FscGhhID8gZmluZEZCQ29uZmlnV2l0aEFscGhhKGNvbmZpZ3MsIG51bWJlck9mQ29uZmlncykg
OiBjb25maWdzWzBdOwotCisgICAgICAgIGJvb2wgaGFzQWxwaGEgPSAoZm9ybWF0LT50eXBlID09
IFBpY3RUeXBlRGlyZWN0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayk7CiAgICAgICAgIG1f
eFBpeG1hcCA9IFhDb21wb3NpdGVOYW1lV2luZG93UGl4bWFwKGRpc3BsYXkoKSwgd2luSWQpOwot
ICAgICAgICBtX2dseFBpeG1hcCA9IGdsWENyZWF0ZVBpeG1hcChkaXNwbGF5KCksIGNvbmZpZywg
bV94UGl4bWFwLCBnbHhBdHRyaWJ1dGVzKTsKKyAgICAgICAgZ2x4QXR0cmlidXRlc1sxXSA9IChm
b3JtYXQtPmRlcHRoID09IDMyIHx8IGhhc0FscGhhKSA/IEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JB
X0VYVCA6IEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JfRVhUOworICAgICAgICBtX2dseFBpeG1hcCA9
IGdsWENyZWF0ZVBpeG1hcChkaXNwbGF5KCksIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDbGll
bnRDb25maWcoZm9ybWF0LT5kZXB0aCwgWFZpc3VhbElERnJvbVZpc3VhbChhdHRyLnZpc3VhbCkp
LCBtX3hQaXhtYXAsIGdseEF0dHJpYnV0ZXMpOwogCiAgICAgICAgIGlmICghaGFuZGxlci5pc1Zh
bGlkT3BlcmF0aW9uKCkpCiAgICAgICAgICAgICBjbGVhcigpOwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIHVpbnQgaW52ZXJ0ZWQgPSAwOwogICAgICAgICAgICAgZ2xYUXVlcnlEcmF3YWJs
ZShkaXNwbGF5KCksIG1fZ2x4UGl4bWFwLCBHTFhfWV9JTlZFUlRFRF9FWFQsICZpbnZlcnRlZCk7
Ci0gICAgICAgICAgICBtX3RleHR1cmVJc1lJbnZlcnRlZCA9ICEhaW52ZXJ0ZWQ7Ci0gICAgICAg
IH0KLQotICAgICAgICBYRnJlZShjb25maWdzKTsKLSAgICB9CisgICAgICAgICAgICBtX2ZsYWdz
ID0gISFpbnZlcnRlZCA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgOiAwOwog
Ci0gICAgYm9vbCB0ZXh0dXJlSXNZSW52ZXJ0ZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
dGV4dHVyZUlzWUludmVydGVkOworICAgICAgICAgICAgaWYgKGhhc0FscGhhKQorICAgICAgICAg
ICAgICAgIG1fZmxhZ3MgfD0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZDsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIHZvaWQgbWFrZUN1cnJlbnQoKQpAQCAtNDAwLDcgKzIzMiw3IEBAIHN0
cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICAgICAgZG9uZUN1cnJlbnQoKTsKICAg
ICB9CiAKLSAgICBEaXNwbGF5KiBkaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gT2ZmU2NyZWVuUm9v
dFdpbmRvdzo6ZGlzcGxheSgpOyB9CisgICAgRGlzcGxheSogZGlzcGxheSgpIGNvbnN0IHsgcmV0
dXJuIFgxMVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKTsgfQogCiAgICAgR0xYUGl4bWFwIGdseFBp
eG1hcCgpIGNvbnN0CiAgICAgewpAQCAtNDIwLDI1ICsyNTIsMTAgQEAgc3RydWN0IEdyYXBoaWNz
U3VyZmFjZVByaXZhdGUgewogICAgIH0KIAogICAgIGJvb2wgaXNSZWNlaXZlcigpIGNvbnN0IHsg
cmV0dXJuIG1faXNSZWNlaXZlcjsgfQotcHJpdmF0ZToKLSAgICBHTFhGQkNvbmZpZyYgZmluZEZC
Q29uZmlnV2l0aEFscGhhKEdMWEZCQ29uZmlnKiBmYkNvbmZpZ3MsIGludCBudW1iZXJPZkNvbmZp
Z3MpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mQ29uZmlnczsg
KytpKSB7Ci0gICAgICAgICAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IGdsWEdldFZpc3Vh
bEZyb21GQkNvbmZpZyhkaXNwbGF5KCksIGZiQ29uZmlnc1tpXSk7Ci0gICAgICAgICAgICBpZiAo
IXZpc3VhbEluZm8pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFhS
ZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChkaXNwbGF5
KCksIHZpc3VhbEluZm8tPnZpc3VhbCk7Ci0gICAgICAgICAgICBYRnJlZSh2aXN1YWxJbmZvKTsK
IAotICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAw
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYkNvbmZpZ3NbaV07Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBSZXR1cm4gMXN0IGNvbmZpZyBhcyBhIGZhbGxiYWNrIHdpdGggbm8gYWxwaGEgc3Vw
cG9ydC4KLSAgICAgICAgcmV0dXJuIGZiQ29uZmlnc1swXTsKLSAgICB9CisgICAgVGV4dHVyZU1h
cHBlckdMOjpGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KIAorcHJpdmF0
ZToKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dseFBpeG1hcCkgewpA
QCAtNDYxLDIxICsyNzgsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGdsWERlc3Ryb3lDb250
ZXh0KGRpc3BsYXkoKSwgbV9nbENvbnRleHQpOwogICAgICAgICAgICAgbV9nbENvbnRleHQgPSAw
OwogICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fY29uZmlnU2VsZWN0b3IpCisgICAgICAgICAg
ICBtX2NvbmZpZ1NlbGVjdG9yID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBPd25QdHI8T2ZmU2Ny
ZWVuUm9vdFdpbmRvdz4gbV9vZmZTY3JlZW5XaW5kb3c7CiAgICAgSW50U2l6ZSBtX3NpemU7CiAg
ICAgUGl4bWFwIG1feFBpeG1hcDsKICAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7Ci0gICAgV2lu
ZG93IG1fc3VyZmFjZTsKKyAgICB1aW50MzJfdCBtX3N1cmZhY2U7CiAgICAgV2luZG93IG1fZ2x4
U3VyZmFjZTsKICAgICBHTFhDb250ZXh0IG1fZ2xDb250ZXh0OwogICAgIEdMWENvbnRleHQgbV9k
ZXRhY2hlZENvbnRleHQ7CiAgICAgR0xYRHJhd2FibGUgbV9kZXRhY2hlZFN1cmZhY2U7Ci0gICAg
R0xYRkJDb25maWcgbV9mYkNvbmZpZzsKLSAgICBib29sIG1fdGV4dHVyZUlzWUludmVydGVkOwot
ICAgIGJvb2wgbV9oYXNBbHBoYTsKKyAgICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1fY29u
ZmlnU2VsZWN0b3I7CiAgICAgYm9vbCBtX2lzUmVjZWl2ZXI7CisgICAgVGV4dHVyZU1hcHBlckdM
OjpGbGFncyBtX2ZsYWdzOwogfTsKIAogc3RhdGljIGJvb2wgcmVzb2x2ZUdMTWV0aG9kcygpCkBA
IC01MzksMTMgKzM1NywxMCBAQCB2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1QYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLAogICAgIGlmICghdGV4
dHVyZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFn
cyA9IG1fcHJpdmF0ZS0+dGV4dHVyZUlzWUludmVydGVkKCkgPyBUZXh0dXJlTWFwcGVyR0w6OlNo
b3VsZEZsaXBUZXh0dXJlIDogMDsKLSAgICBmbGFncyB8PSBUZXh0dXJlTWFwcGVyR0w6OlNob3Vs
ZEJsZW5kOwotCiAgICAgRmxvYXRSZWN0IHJlY3RPbkNvbnRlbnRzKEZsb2F0UG9pbnQ6Onplcm8o
KSwgc2l6ZSk7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0
cmFuc2Zvcm07CiAgICAgYWRqdXN0ZWRUcmFuc2Zvcm0ubXVsdGlwbHkoVHJhbnNmb3JtYXRpb25N
YXRyaXg6OnJlY3RUb1JlY3QocmVjdE9uQ29udGVudHMsIHRhcmdldFJlY3QpKTsKLSAgICBzdGF0
aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmUodGV4
dHVyZSwgZmxhZ3MsIHNpemUsIHJlY3RPbkNvbnRlbnRzLCBhZGp1c3RlZFRyYW5zZm9ybSwgb3Bh
Y2l0eSwgbWFzayk7CisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1h
cHBlciktPmRyYXdUZXh0dXJlKHRleHR1cmUsIG1fcHJpdmF0ZS0+ZmxhZ3MoKSwgc2l6ZSwgcmVj
dE9uQ29udGVudHMsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKIH0KIAogdWlu
dDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUZyb250QnVmZmVyKCkgY29uc3QKZGlmZiAt
LWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVs
cGVyLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
SGVscGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTVlYjQ1Ci0t
LSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFIZWxwZXIuY3BwCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiWDExSGVscGVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gVXNlZCBmb3IgaGFuZGxpbmcgWEVycm9yLgorc3RhdGljIGJvb2wg
dmFsaWRPcGVyYXRpb24gPSB0cnVlOworc3RhdGljIGludCBoYW5kbGVYUGl4bWFwQ3JlYXRpb25F
cnJvcihEaXNwbGF5KiwgWEVycm9yRXZlbnQqIGV2ZW50KQoreworICAgIGlmIChldmVudC0+ZXJy
b3JfY29kZSA9PSBCYWRNYXRjaCB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRXaW5kb3cgfHwg
ZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkQWxsb2MpIHsKKyAgICAgICAgdmFsaWRPcGVyYXRpb24g
PSBmYWxzZTsKKworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5lcnJvcl9jb2RlKSB7CisgICAgICAg
IGNhc2UgQmFkTWF0Y2g6CisgICAgICAgICAgICBMT0dfRVJST1IoIkJhZE1hdGNoLiIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmFkV2luZG93OgorICAgICAgICAgICAgTE9H
X0VSUk9SKCJCYWRXaW5kb3cuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBC
YWRBbGxvYzoKKyAgICAgICAgICAgIExPR19FUlJPUigiQmFkQWxsb2MuIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBEaXNwbGF5Q29ubmVjdGlvbiB7
CisgICAgRGlzcGxheUNvbm5lY3Rpb24oKQorICAgIHsKKyAgICAgICAgbV9kaXNwbGF5ID0gWE9w
ZW5EaXNwbGF5KDApOworCisgICAgICAgIGlmICghbV9kaXNwbGF5KQorICAgICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb25uZWN0aW9uIHdpdGggWCIpOworICAgIH0KKworICAg
IH5EaXNwbGF5Q29ubmVjdGlvbigpCisgICAgeworICAgICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlz
cGxheSk7CisgICAgfQorCisgICAgRGlzcGxheSogZGlzcGxheSgpIHsgcmV0dXJuIG1fZGlzcGxh
eTsgfQorcHJpdmF0ZToKKyAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Cit9OworCitzdHJ1Y3QgT2Zm
U2NyZWVuUm9vdFdpbmRvdyB7CisKKyAgICBPZmZTY3JlZW5Sb290V2luZG93KCkKKyAgICB7Cisg
ICAgICAgIG1fd2luZG93ID0gMDsKKyAgICAgICAgRGlzcGxheSogZHB5ID0gWDExV3JhcHBlcjo6
bmF0aXZlRGlzcGxheSgpOworICAgICAgICBpZiAoIWRweSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAgICBhdHRy
aWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgbV93aW5kb3cgPSBYQ3Jl
YXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSksIC0xLCAtMSwgMSwg
MSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkpOworICAgICAgICAv
LyBGcm9tIGh0dHA6Ly90cm9uY2hlLmNvbS9ndWkveC94bGliL3dpbmRvdy9hdHRyaWJ1dGVzLwor
ICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBDV092ZXJyaWRl
UmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKKyAgICAgICAgWE1hcFdpbmRvdyhkcHksIG1fd2luZG93
KTsKKworICAgICAgICBpZiAoIW1fd2luZG93KQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiByb290IHdpbmRvdy4iKTsKKyAgICB9CisKKyAgICB+T2Zm
U2NyZWVuUm9vdFdpbmRvdygpCisgICAgeworICAgICAgICBpZiAoIVgxMVdyYXBwZXI6Om5hdGl2
ZURpc3BsYXkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV93aW5kb3cp
IHsKKyAgICAgICAgICAgIFhVbm1hcFdpbmRvdyhYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCks
IG1fd2luZG93KTsKKyAgICAgICAgICAgIFhEZXN0cm95V2luZG93KFgxMVdyYXBwZXI6Om5hdGl2
ZURpc3BsYXkoKSwgbV93aW5kb3cpOworICAgICAgICAgICAgbV93aW5kb3cgPSAwOworICAgICAg
ICB9CisgICAgfQorCisgICAgV2luZG93IHJvb3RXaW5kb3coKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fd2luZG93OworICAgIH0KKworcHJpdmF0ZToKKyAgICBXaW5kb3cgbV93aW5kb3c7Cit9
OworCitTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6OlNjb3BlZFhQaXhtYXBDcmVh
dGlvbkVycm9ySGFuZGxlcigpCit7CisgICAgLy8gWFN5bmMgbXVzdCBiZSBjYWxsZWQgdG8gZW5z
dXJlIHRoYXQgY3VycmVudCBlcnJvcnMgYXJlIGhhbmRsZWQgYnkgdGhlIG9yaWdpbmFsIGhhbmRs
ZXIuCisgICAgWFN5bmMoWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpLCBmYWxzZSk7CisgICAg
bV9wcmV2aW91c0Vycm9ySGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoaGFuZGxlWFBpeG1hcENy
ZWF0aW9uRXJyb3IpOworfQorCitTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6On5T
Y29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKQoreworICAgIC8vIFJlc3RvcmUgdGhl
IG9yaWdpbmFsIGhhbmRsZXIuCisgICAgWFNldEVycm9ySGFuZGxlcihtX3ByZXZpb3VzRXJyb3JI
YW5kbGVyKTsKK30KKworYm9vbCBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6Omlz
VmFsaWRPcGVyYXRpb24oKSBjb25zdAoreworICAgIHZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsKKyAg
ICAvLyBYU3luYyBpcyBuZWVkZWQgdG8gY2F0Y2ggcG9zc2libGUgZXJyb3JzIGFzIHRoZXkgYXJl
IGdlbmVyYXRlZCBhc3luY2hyb25vdXNseS4KKyAgICBYU3luYyhYMTFXcmFwcGVyOjpuYXRpdmVE
aXNwbGF5KCksIGZhbHNlKTsKKyAgICByZXR1cm4gdmFsaWRPcGVyYXRpb247Cit9CisKK3ZvaWQg
WDExV3JhcHBlcjo6cmVzaXplV2luZG93KGNvbnN0IEludFJlY3QmIG5ld1JlY3QsIGNvbnN0IHVp
bnQzMl90IHdpbmRvd0lkKQoreworICAgIFhSZXNpemVXaW5kb3cobmF0aXZlRGlzcGxheSgpLCB3
aW5kb3dJZCwgbmV3UmVjdC53aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKKyAgICBYRmx1c2go
bmF0aXZlRGlzcGxheSgpKTsKK30KKwordm9pZCBYMTFXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5X
aW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBYVmlzdWFsSW5mbyYgdmlzSW5mbywgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBEaXNw
bGF5KiBkaXNwbGF5ID0gbmF0aXZlRGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCF2aXNJbmZvLnZpc3VhbCkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1YWwuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBXaW5kb3cgeFdpbmRvdyA9IG9mZnNjcmVlblJvb3RXaW5kb3coKTsKKyAgICBp
ZiAoIXhXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIENvbG9ybWFwIGNtYXAgPSBYQ3Jl
YXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdywgdmlzSW5mby52aXN1YWwsIEFsbG9jTm9uZSk7
CisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlOworICAgIGF0dHJpYnV0ZS5iYWNr
Z3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKKyAgICBhdHRyaWJ1dGUuYm9y
ZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKKyAgICBhdHRyaWJ1dGUuY29sb3Jt
YXAgPSBjbWFwOworICAgIGF0dHJpYnV0ZS5ldmVudF9tYXNrID0gUmVzaXplUmVkaXJlY3RNYXNr
OworICAgIHVpbnQzMl90IHRlbXBIYW5kbGVJZDsKKyAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRl
V2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSwgMCwgdmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8udmlzdWFsLCBDV0JhY2tQ
aXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKKworICAgIGlm
ICghdGVtcEhhbmRsZUlkKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBv
ZmZzY3JlZW4gd2luZG93LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgWFNldFdp
bmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgdGVtcEhhbmRsZUlkLCAwKTsKKyAgICBYQ29t
cG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkLCBDb21wb3NpdGVSZWRp
cmVjdE1hbnVhbCk7CisgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQpOworICAg
ICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGhhbmRs
ZUlkKTsKKyAgICBVTlVTRURfUEFSQU0odmlzSW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHNpemUp
OworI2VuZGlmCit9CisKKyNpZiBVU0UoRUdMKQordm9pZCBYMTFXcmFwcGVyOjpjcmVhdGVPZmZT
Y3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBFR0xpbnQgaWQsIGNvbnN0IElu
dFNpemUmIHNpemUpCit7CisgICAgVmlzdWFsSUQgdmlzdWFsSWQgPSBzdGF0aWNfY2FzdDxWaXN1
YWxJRD4oaWQpOworCisgICAgaWYgKCF2aXN1YWxJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRUdMIGhhcyBzdWdnZXN0ZWQgYSB2aXN1YWwgaWQsIHNvIGdldCB0aGUgcmVzdCBvZiB0aGUg
dmlzdWFsIGluZm8gZm9yIHRoYXQgaWQuCisgICAgWFZpc3VhbEluZm8gdmlzdWFsSW5mb1RlbXBs
YXRlOworICAgIG1lbXNldCgmdmlzdWFsSW5mb1RlbXBsYXRlLCAwLCBzaXplb2YoWFZpc3VhbElu
Zm8pKTsKKyAgICB2aXN1YWxJbmZvVGVtcGxhdGUudmlzdWFsaWQgPSB2aXN1YWxJZDsKKyAgICBp
bnQgbWF0Y2hpbmdDb3VudCA9IDA7CisgICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiBtYXRjaGlu
Z1Zpc3VhbHMoWEdldFZpc3VhbEluZm8obmF0aXZlRGlzcGxheSgpLCBWaXN1YWxJRE1hc2ssICZ2
aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRjaGluZ0NvdW50KSk7CisgICAgWFZpc3VhbEluZm8qIGZv
dW5kVmlzdWFsID0gMDsKKworICAgIGlmIChtYXRjaGluZ1Zpc3VhbHMpIHsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGk8IG1hdGNoaW5nQ291bnQ7IGkrKykgeworICAgICAgICAgICAgWFZpc3Vh
bEluZm8qIHRlbXAgPSAmbWF0Y2hpbmdWaXN1YWxzW2ldOworCisgICAgICAgICAgICBpZiAoaXNY
UmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpIHsKKyAgICAgICAgICAgICAgICBYUmVuZGVyUGlj
dEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQobmF0aXZlRGlzcGxheSgp
LCB0ZW1wLT52aXN1YWwpOworICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5k
aXJlY3QuYWxwaGFNYXNrID4gMCkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZFZpc3VhbCA9
IHRlbXA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRlbXAtPmRlcHRoID09IDMyKSB7CisgICAg
ICAgICAgICAgICAgZm91bmRWaXN1YWwgPSB0ZW1wOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZvdW5kVmlzdWFsKQorICAg
ICAgICAgICAgY3JlYXRlT2ZmU2NyZWVuV2luZG93KGhhbmRsZUlkLCAqZm91bmRWaXN1YWwsIHNp
emUpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFgxMVdyYXBwZXI6OmRlc3Ryb3lXaW5kb3co
Y29uc3QgdWludDMyX3Qgd2luZG93SWQpCit7CisgICAgaWYgKCF3aW5kb3dJZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3BsYXkoKTsKKyAgICBp
ZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIFhEZXN0cm95V2luZG93KGRpc3Bs
YXksIHdpbmRvd0lkKTsKK30KKworYm9vbCBYMTFXcmFwcGVyOjppc1hSZW5kZXJFeHRlbnNpb25T
dXBwb3J0ZWQoKQoreworICAgIHN0YXRpYyBib29sIHF1ZXJ5RG9uZSA9IGZhbHNlOworICAgIHN0
YXRpYyBib29sIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbiA9IGZhbHNlOworCisgICAgaWYgKCFx
dWVyeURvbmUpIHsKKyAgICAgICAgcXVlcnlEb25lID0gdHJ1ZTsKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKKyAgICAgICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3BsYXkoKTsKKwor
ICAgICAgICBpZiAoZGlzcGxheSkgeworICAgICAgICAgICAgaW50IGV2ZW50QmFzZXAsIGVycm9y
QmFzZXA7CisgICAgICAgICAgICBzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVl
cnlFeHRlbnNpb24oZGlzcGxheSwgJmV2ZW50QmFzZXAsICZlcnJvckJhc2VwKTsKKyAgICAgICAg
fQorI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsK
K30KKworRGlzcGxheSogWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpCit7CisgICAgLy8gRGlz
cGxheSBjb25uZWN0aW9uIHdpbGwgb25seSBiZSBicm9rZW4gYXQgcHJvZ3JhbSBzaHV0ZG93bi4K
KyAgICBzdGF0aWMgRGlzcGxheUNvbm5lY3Rpb24gZGlzcGxheUNvbm5lY3Rpb247CisgICAgcmV0
dXJuIGRpc3BsYXlDb25uZWN0aW9uLmRpc3BsYXkoKTsKK30KKworV2luZG93IFgxMVdyYXBwZXI6
Om9mZnNjcmVlblJvb3RXaW5kb3coKQoreworICAgIHN0YXRpYyBPZmZTY3JlZW5Sb290V2luZG93
IG9mZnNjcmVlbldpbmRvdzsKKyAgICByZXR1cm4gb2Zmc2NyZWVuV2luZG93LnJvb3RXaW5kb3co
KTsKK30KKworfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9YMTFIZWxwZXIuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvWDExSGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZjMwMTBjMAotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBYMTFIZWxwZXJfaAorI2RlZmluZSBYMTFIZWxwZXJfaAorCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk93blB0clgxMS5oIgorCisjaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCisKKyNpZiBVU0UoRUdMKQorI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMu
aD4KKyNlbmRpZgorCisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2lu
Y2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8WDEx
L1hsaWIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBYMTFXcmFwcGVyIHsKKwor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCos
IGNvbnN0IFhWaXN1YWxJbmZvJiwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKDEsIDEpKTsKKyNp
ZiBVU0UoRUdMKQorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJf
dCosIGNvbnN0IEVHTGludCwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKDEsIDEpKTsKKyNlbmRp
ZgorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lXaW5kb3coY29uc3QgdWludDMyX3QpOworICAgIHN0
YXRpYyB2b2lkIHJlc2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgY29uc3QgdWludDMyX3QpOwor
ICAgIHN0YXRpYyBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOworICAgIHN0YXRp
YyBEaXNwbGF5KiBuYXRpdmVEaXNwbGF5KCk7CisgICAgc3RhdGljIFdpbmRvdyBvZmZzY3JlZW5S
b290V2luZG93KCk7Cit9OworCitjbGFzcyBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRs
ZXIgeworCitwdWJsaWM6CisgICAgU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKCk7
CisgICAgflNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpOworICAgIGJvb2wgaXNW
YWxpZE9wZXJhdGlvbigpIGNvbnN0OworCitwcml2YXRlOgorICAgIFhFcnJvckhhbmRsZXIgbV9w
cmV2aW91c0Vycm9ySGFuZGxlcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNl
cy5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdp
bmRvd1Jlc291cmNlcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMjYzZWEu
LjAwMDAwMDAKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJYMTFX
aW5kb3dSZXNvdXJjZXMuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaGFyZWRYMTFSZXNvdXJjZXMqIFNoYXJlZFgxMVJlc291
cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7Ci0KLVgxMU9mZlNjcmVlbldpbmRvdzo6
WDExT2ZmU2NyZWVuV2luZG93KCkKLSAgICA6IG1fc2hhcmVkUmVzb3VyY2VzKDApCi17Ci0gICAg
bV9zaGFyZWRSZXNvdXJjZXMgPSBTaGFyZWRYMTFSZXNvdXJjZXM6OmNyZWF0ZSgpOwotfQotCi1Y
MTFPZmZTY3JlZW5XaW5kb3c6On5YMTFPZmZTY3JlZW5XaW5kb3coKQotewotfQotCi12b2lkIFgx
MU9mZlNjcmVlbldpbmRvdzo6cmVTaXplV2luZG93KGNvbnN0IEludFJlY3QmIG5ld1JlY3QsIGNv
bnN0IHVpbnQzMl90IHdpbmRvd0lkKQotewotICAgIFhSZXNpemVXaW5kb3cobV9zaGFyZWRSZXNv
dXJjZXMtPngxMURpc3BsYXkoKSwgd2luZG93SWQsIG5ld1JlY3Qud2lkdGgoKSwgbmV3UmVjdC5o
ZWlnaHQoKSk7Ci0gICAgWEZsdXNoKG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCkpOwot
fQotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6
Y3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbElu
Zm8mIHZpc0luZm8sIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFtX3NoYXJlZFJl
c291cmNlcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IG1fc2hh
cmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7Ci0gICAgaWYgKCFkaXNwbGF5KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIXZpc0luZm8udmlzdWFsKSB7Ci0gICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFdpbmRvdyB4V2luZG93ID0gbV9zaGFyZWRSZXNvdXJjZXMtPmdldFhXaW5kb3coKTsK
LSAgICBpZiAoIXhXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIENvbG9ybWFwIGNtYXAg
PSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdywgdmlzSW5mby52aXN1YWwsIEFsbG9j
Tm9uZSk7Ci0gICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlOwotICAgIGF0dHJpYnV0
ZS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1
dGUuYm9yZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1dGUu
Y29sb3JtYXAgPSBjbWFwOwotICAgIGF0dHJpYnV0ZS5ldmVudF9tYXNrID0gUmVzaXplUmVkaXJl
Y3RNYXNrOwotICAgIHVpbnQzMl90IHRlbXBIYW5kbGVJZDsKLSAgICB0ZW1wSGFuZGxlSWQgPSBY
Q3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwgMCwgdmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8udmlzdWFsLCBD
V0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKLQot
ICAgIGlmICghdGVtcEhhbmRsZUlkKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNy
ZWF0ZSBvZmZzY3JlZW4gd2luZG93LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
WFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgdGVtcEhhbmRsZUlkLCAwKTsKLSAg
ICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkLCBDb21wb3Np
dGVSZWRpcmVjdE1hbnVhbCk7Ci0gICAgWE1hcFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQp
OwotICAgICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsKLX0KLQotI2lmIFVTRShFR0wpCi12b2lk
IFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5k
bGVJZCwgY29uc3QgRUdMaW50IGlkLCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIFZpc3Vh
bElEIHZpc3VhbElkID0gc3RhdGljX2Nhc3Q8VmlzdWFsSUQ+KGlkKTsKLQotICAgIGlmICghdmlz
dWFsSWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVHTCBoYXMgc3VnZ2VzdGVkIGEgdmlz
dWFsIGlkLCBzbyBnZXQgdGhlIHJlc3Qgb2YgdGhlIHZpc3VhbCBpbmZvIGZvciB0aGF0IGlkLgot
ICAgIFhWaXN1YWxJbmZvIHZpc3VhbEluZm9UZW1wbGF0ZTsKLSAgICBtZW1zZXQoJnZpc3VhbElu
Zm9UZW1wbGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZvKSk7Ci0gICAgdmlzdWFsSW5mb1RlbXBs
YXRlLnZpc3VhbGlkID0gdmlzdWFsSWQ7Ci0gICAgaW50IG1hdGNoaW5nQ291bnQgPSAwOwotICAg
IE93blB0clgxMTxYVmlzdWFsSW5mbz4gbWF0Y2hpbmdWaXN1YWxzID0gYWRvcHRQdHIoWEdldFZp
c3VhbEluZm8obV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgVmlzdWFsSURNYXNrLCAm
dmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCkpOwotICAgIFhWaXN1YWxJbmZvKiBm
b3VuZFZpc3VhbCA9IDA7Ci0KLSAgICBpZiAobWF0Y2hpbmdWaXN1YWxzKSB7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpPCBtYXRjaGluZ0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFhWaXN1
YWxJbmZvKiB0ZW1wID0gJm1hdGNoaW5nVmlzdWFsc1tpXTsKLQotICAgICAgICAgICAgaWYgKG1f
c2hhcmVkUmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkgewotICAgICAg
ICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZv
cm1hdChtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCB0ZW1wLT52aXN1YWwpOwotICAg
ICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkg
ewotICAgICAgICAgICAgICAgICAgICBmb3VuZFZpc3VhbCA9IHRlbXA7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRlbXAtPmRlcHRoID09IDMyKSB7Ci0gICAgICAgICAgICAgICAgZm91bmRWaXN1
YWwgPSB0ZW1wOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGZvdW5kVmlzdWFsKQotICAgICAgICAgICAgY3JlYXRlT2ZmU2Ny
ZWVuV2luZG93KGhhbmRsZUlkLCAqZm91bmRWaXN1YWwsIHNpemUpOwotICAgIH0KLX0KLSNlbmRp
ZgotCi0jZW5kaWYKLQotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coY29u
c3QgdWludDMyX3Qgd2luZG93SWQpCi17Ci0gICAgaWYgKCF3aW5kb3dJZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNw
bGF5KCk7Ci0gICAgaWYgKCFkaXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBYRGVzdHJv
eVdpbmRvdyhkaXNwbGF5LCB3aW5kb3dJZCk7Ci19Ci0KLURpc3BsYXkqIFgxMU9mZlNjcmVlbldp
bmRvdzo6bmF0aXZlU2hhcmVkRGlzcGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hhcmVk
UmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7Ci19Ci0KLWJvb2wgWDExT2ZmU2NyZWVuV2luZG93Ojpp
c1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3NoYXJl
ZFJlc291cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCk7Ci19Ci0KLX0KLQotI2Vu
ZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2MyZDMzZi4uMDAwMDAwMAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgWDExV2luZG93UmVz
b3VyY2VzX2gKLSNkZWZpbmUgWDExV2luZG93UmVzb3VyY2VzX2gKLQotI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJPd25Q
dHJYMTEuaCIKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQotCi0jaWYgVVNFKEVHTCkKLSNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KLSNpbmNs
dWRlIDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBTaGFyZWRYMTFSZXNvdXJjZXMgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVk
QmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkWDExUmVzb3VyY2VzKTsKLQot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFgxMVJlc291cmNlcz4gY3JlYXRl
KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSkKLSAgICAgICAg
ICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSBuZXcgU2hhcmVkWDExUmVzb3VyY2VzKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UtPnJlZigpOwot
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZFJlc291cmNlKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGRlcmVmKCkKLSAgICB7Ci0gICAgICAgIGlmIChkZXJlZkJhc2UoKSkgewot
ICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7Ci0gICAgICAgICAgICBkZWxl
dGUgdGhpczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIERpc3BsYXkqIHgxMURpc3BsYXkoKQot
ICAgIHsKLSAgICAgICAgaWYgKCFtX2Rpc3BsYXkpIHsKLSAgICAgICAgICAgIG1fZGlzcGxheSA9
IFhPcGVuRGlzcGxheSgwKTsKLSAgICAgICAgICAgIGlmICghbV9kaXNwbGF5KSB7Ci0gICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb25uZWN0aW9uIHdpdGggWCIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQotICAgICAgICAgICAgaWYgKG1fZGlzcGxheSkgewotICAgICAgICAgICAgICAg
IGludCBldmVudEJhc2VwLCBlcnJvckJhc2VwOwotICAgICAgICAgICAgICAgIG1fc3VwcG9ydHNY
UmVuZGVyRXh0ZW5zaW9uID0gWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uKG1fZGlzcGxheSwgJmV2ZW50
QmFzZXAsICZlcnJvckJhc2VwKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIG1fZGlzcGxheTsKLSAgICB9Ci0KLSAgICBXaW5kb3cgZ2V0WFdpbmRv
dygpCi0gICAgewotICAgICAgICBpZiAoIW1fd2luZG93KSB7Ci0gICAgICAgICAgICBEaXNwbGF5
KiBkcHkgPSB4MTFEaXNwbGF5KCk7Ci0gICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBh
dHRyaWJ1dGVzOwotICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRy
dWU7Ci0gICAgICAgICAgICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVm
YXVsdFJvb3RXaW5kb3coZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCks
IFdoaXRlUGl4ZWwoZHB5LCAwKSk7Ci0gICAgICAgICAgICAvLyBGcm9tIGh0dHA6Ly90cm9uY2hl
LmNvbS9ndWkveC94bGliL3dpbmRvdy9hdHRyaWJ1dGVzLwotICAgICAgICAgICAgWENoYW5nZVdp
bmRvd0F0dHJpYnV0ZXMoZHB5LCBtX3dpbmRvdywgQ1dPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmli
dXRlcyk7Ci0gICAgICAgICAgICBYTWFwV2luZG93KGRweSwgbV93aW5kb3cpOwotCi0gICAgICAg
ICAgICBpZiAoIW1fd2luZG93KSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY3JlYXRlIG9mZnNjcmVlbiByb290IHdpbmRvdy4iKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3dpbmRv
dzsKLSAgICB9Ci0KLSAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247Ci0gICAg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgU2hhcmVkWDExUmVzb3VyY2VzKCkKLSAgICAgICAgOiBtX3N1
cHBvcnRzWFJlbmRlckV4dGVuc2lvbihmYWxzZSkKLSAgICAgICAgLCBtX3dpbmRvdygwKQotICAg
ICAgICAsIG1fZGlzcGxheSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5TaGFyZWRY
MTFSZXNvdXJjZXMoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgICAgICBYVW5tYXBX
aW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgICAgICAgICBYRGVzdHJveVdpbmRvdyht
X2Rpc3BsYXksIG1fd2luZG93KTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsKLSAgICAgICAgbV9kaXNwbGF5
ID0gMDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU2hhcmVkWDExUmVzb3VyY2VzKiBtX3N0YXRpY1No
YXJlZFJlc291cmNlOwotICAgIGJvb2wgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247Ci0gICAg
V2luZG93IG1fd2luZG93OwotICAgIERpc3BsYXkqIG1fZGlzcGxheTsKLX07Ci0KLWNsYXNzIFgx
MU9mZlNjcmVlbldpbmRvdyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWDExT2ZmU2NyZWVu
V2luZG93KTsKLQotcHVibGljOgotICAgIFgxMU9mZlNjcmVlbldpbmRvdygpOwotICAgIHZpcnR1
YWwgflgxMU9mZlNjcmVlbldpbmRvdygpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IHZvaWQgY3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgWFZpc3VhbEluZm8m
LCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoMSwgMSkpOwotI2lmIFVTRShFR0wpCi0gICAgdm9p
ZCBjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBFR0xpbnQsIGNvbnN0IElu
dFNpemUmID0gSW50U2l6ZSgxLCAxKSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHZvaWQgZGVzdHJv
eVdpbmRvdyhjb25zdCB1aW50MzJfdCk7Ci0gICAgdm9pZCByZVNpemVXaW5kb3coY29uc3QgSW50
UmVjdCYsIGNvbnN0IHVpbnQzMl90KTsKLSAgICBEaXNwbGF5KiBuYXRpdmVTaGFyZWREaXNwbGF5
KCkgY29uc3Q7Ci0gICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291
cmNlczsKLX07Ci0KLX0KLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IFRvb2xzL3FtYWtl
L21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIFRvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVy
ZXMvZmVhdHVyZXMucHJmCmluZGV4IGNjOTA3MmQuLmUzOWMwYzIgMTAwNjQ0Ci0tLSBUb29scy9x
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysgVG9vbHMvcW1ha2UvbWtzcGVj
cy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKQEAgLTEzOCw3ICsxMzgsNyBAQCBkZWZpbmVUZXN0KGRl
dGVjdEZlYXR1cmVzKSB7CiAgICAgdXNlPygzZF9ncmFwaGljcykgewogICAgICAgICBtYWM6IFdF
QktJVF9DT05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZhY2UKICAgICAgICAgd2luMzI6Y29udGFp
bnMoUVRfQ09ORklHLCBvcGVuZ2xlczIpOiBXRUJLSVRfQ09ORklHICs9IHVzZV9ncmFwaGljc19z
dXJmYWNlCi0gICAgICAgIGxpbnV4LSo6Y29udGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV9nbHgp
OmNvbnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfeGNvbXBvc2l0ZSk6Y29udGFpbnMoV0VCS0lU
X0NPTkZJRywgaGF2ZV94cmVuZGVyKTogV0VCS0lUX0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3Vy
ZmFjZQorICAgICAgICBsaW51eC0qOmNvbnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfZ2x4KTpj
b250YWlucyhXRUJLSVRfQ09ORklHLCBoYXZlX3hjb21wb3NpdGUpOmNvbnRhaW5zKFdFQktJVF9D
T05GSUcsIGhhdmVfeHJlbmRlcik6IFdFQktJVF9DT05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZh
Y2UgdXNlX2dseAogICAgIH0KIAogICAgICMgU2xpZGVyIFRvdWNoIGlzIHNlbnNpYmxlIHRvIHVz
ZSB3aGVuIGNvbXBpbGluZyBXZWJLaXQyCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186439</attachid>
            <date>2013-02-04 12:32:29 -0800</date>
            <delta_ts>2013-02-04 13:58:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patchforreview.patch</filename>
            <type>text/plain</type>
            <size>58752</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGY2YzdiNWMuLmM3ODJkZGMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEz
LTAyLTA0ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtRdF1bV2ViR0xdIFNoYXJlIHRoZSBjb21tb24gY29kZSBiZXR3ZWVu
IEdyYXBoaWNzU3VyZmFjZUdMWCBhbmQgWDExV2luZG93UmVzb3VyY2VzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBX
ZWJHTCB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IGR1cGxpY2F0ZSBj
b2RlIGluIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlR0xY
LiBObyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVHTENvbmZpZ1NlbGVjdG9yOjpwaXhtYXBDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaDoKKyAgICAgICAg
KEVHTENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oOgorICAgICAgICAo
V2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OkdMWENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OkdMWENvbmZpZ1NlbGVjdG9yOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6Y3JlYXRlU3VyZmFjZUNvbmZpZyk6CisgICAgICAg
IChHTFhDb25maWdTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUFSQkV4
dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6R0xYT2Zm
U2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRm
b3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4
dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWENvbnRleHQuaDoKKyAgICAgICAgKEdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhQQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oOgorICAgICAgICAoR0xYVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChHTFhQQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6R3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpp
bml0aWFsaXplKToKKyAgICAgICAgKEdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjcmVhdGVQaXhtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpmbGFncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICBObyBu
ZXcgZnVuY3Rpb25hbGl0eSBhZGRlZC4gTWFkZSBjaGFuZ2VzIHRvIHRha2UgdGhlIGNvbW1vbiBj
b2RlIGludG8gdXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMVdpbmRvd1Jlc291cmNlcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9u
OjpEaXNwbGF5Q29ubmVjdGlvbik6CisgICAgICAgIChEaXNwbGF5Q29ubmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5Q29ubmVjdGlvbjo6fkRpc3BsYXlDb25uZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9uOjpkaXNwbGF5KToKKyAgICAgICAgKE9m
ZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmU2NyZWVuUm9vdFdpbmRv
dzo6T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3JlZW5Sb290
V2luZG93Ojp+T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3Jl
ZW5Sb290V2luZG93Ojpyb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6
cmVzaXplV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2Ny
ZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6ZGVzdHJveVdpbmRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6WDExSGVscGVyOjpvZmZzY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJv
cik6CisgICAgICAgIChYMTFIZWxwZXIpOgorICAgICAgICAoU2NvcGVkWFBpeG1hcENyZWF0aW9u
RXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVy
cm9ySGFuZGxlcjo6U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6flNjb3BlZFhQaXht
YXBDcmVhdGlvbkVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRYUGl4bWFw
Q3JlYXRpb25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24pOgorICAgICAgICBNb3ZlZCBj
b21tb24gY29kZSBmcm9tIEdyYXBoaWNzU3VyZmFjZUdMWCB0byBYMTFIZWxwZXIuCisKIDIwMTMt
MDItMDQgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgoKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCA1YjE2OGQzLi4wOGUzNTgxIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC0xMzEsOSArMTMxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCi0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZv
cm1hdC5jcHAKIAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2Rl
ckNhaXJvLmNwcApAQCAtMzE1LDggKzMxMiw3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJm
YWNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NT
dXJmYWNlR0xYLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
V2luZG93UmVzb3VyY2VzLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvWDExSGVscGVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0uY3BwCiAgICAgKQpAQCAtMzI3LDYgKzMyMywxMiBAQCBpZiAoV1RG
X1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb250ZXh0LmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTFN1cmZhY2UuY3BwCiAgICAgICAgICkKKyAgICBlbHNlICgpCisgICAgICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisgICAgICAgICkKICAgICBl
bmRpZiAoKQogCiAgICAgaWYgKFdURl9VU0VfT1BFTkdMX0VTXzIpCmRpZmYgLS1naXQgU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGU4ZjZm
YzEuLjk2M2VjZmEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC00MTk0LDcgKzQxOTQsMTIgQEAgdXNlPyhHUkFQSElD
U19TVVJGQUNFKSB7CiAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvd2luL0dyYXBoaWNzU3VyZmFjZVdpbi5jcHAKICAgICB9CiAgICAgaGF2ZT8oWENPTVBPU0lU
RSkgewotICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
cmFwaGljc1N1cmZhY2VHTFguY3BwCisgICAgICAgIEhFQURFUlMgKz0gXAorICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5oIFwKKyAgICAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oCisgICAg
ICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L1gxMUhlbHBlci5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
Y3BwCmluZGV4IDI2ZDU2YTUuLmU2NzExZjggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApAQCAtMzMs
MTMgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQogICAgIDogR0xQbGF0Zm9ybVN1cmZhY2Uo
KQogewotICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgTmF0aXZlT2ZmU2NyZWVu
V2luZG93KCkpOwotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgRUdMQ29uZmln
U2VsZWN0b3IobV9uYXRpdmVSZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgpKSk7CisgICAg
bV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdTZWxlY3RvcihOYXRpdmVX
cmFwcGVyOjpuYXRpdmVEaXNwbGF5KCkpKTsKICAgICBtX3NoYXJlZERpc3BsYXkgPSBtX2NvbmZp
Z1NlbGVjdG9yLT5kaXNwbGF5KCk7CiAKICAgICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9O
T19ESVNQTEFZKSB7CiAgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwotICAgICAg
ICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNTcsNyArNTUsNyBAQCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFu
c3BvcnRTdXJmYWNlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbmF0aXZlUmVz
b3VyY2UtPmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsIHZpc3VhbElkKTsK
KyAgICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxl
LCB2aXN1YWxJZCk7CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CiAgICAgICAgIGRlc3Ry
b3koKTsKQEAgLTEwNCw3ICsxMDIsNyBAQCB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6
OnN3YXBCdWZmZXJzKCkKIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgp
CiB7CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKLSAgICBtX25hdGl2ZVJlc291
cmNlLT5kZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBOYXRpdmVXcmFwcGVyOjpk
ZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKICAgICBmcmVlRUdMUmVzb3VyY2VzKCk7CiAg
ICAgbV9idWZmZXJIYW5kbGUgPSAwOwogfQpAQCAtMTI4LDcgKzEyNiw3IEBAIHZvaWQgRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNlcygpCiB2b2lkIEVHTFdpbmRvd1Ry
YW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB7CiAg
ICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwotICAgIG1fbmF0aXZl
UmVzb3VyY2UtPnJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2J1ZmZlckhhbmRsZSk7CisgICAgTmF0
aXZlV3JhcHBlcjo6cmVzaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuaAppbmRleCA1YzI4OGE5Li4yZWE3MDQyIDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaAorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
aApAQCAtMzEsMTMgKzMxLDEzIEBACiAjaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgogCi0jaW5jbHVkZSA8Z2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5oPgorI2luY2x1ZGUgPGdseC9YMTFIZWxwZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXR5cGVkZWYgWDExT2ZmU2NyZWVuV2luZG93IE5hdGl2ZU9mZlNjcmVlbldpbmRv
dzsKK3R5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7CiAKIC8vIENvbnRlbnRzIG9mIHRo
ZSBzdXJmYWNlIGFyZSBiYWNrZWQgYnkgbmF0aXZlIHdpbmRvdy4KIGNsYXNzIEVHTFdpbmRvd1Ry
YW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgewpAQCAtNTIsNyArNTIs
NiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBmcmVlRUdMUmVzb3VyY2VzKCk7Ci0g
ICAgT3duUHRyPE5hdGl2ZU9mZlNjcmVlbldpbmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsKICAgICBP
d25QdHI8RUdMQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogCmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZp
Z1NlbGVjdG9yLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWENvbmZpZ1NlbGVjdG9yLmgKaW5kZXggZGQxYjYyYi4uNWU4Nzk1ZCAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxl
Y3Rvci5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R0xYQ29uZmlnU2VsZWN0b3IuaApAQCAtMjYsMjEgKzI2LDMwIEBACiAjaWZuZGVmIEdMWENvbmZp
Z1NlbGVjdG9yX2gKICNkZWZpbmUgR0xYQ29uZmlnU2VsZWN0b3JfaAogCi0jaW5jbHVkZSAiWDEx
V2luZG93UmVzb3VyY2VzLmgiCi0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShHTFgpCiAKKyNpbmNsdWRlICJYMTFIZWxwZXIuaCIKKyNpbmNsdWRlIDxvcGVuZ2wvR0xE
ZWZzLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGludCBjbGllbnRBdHRyaWJ1
dGVzW10gPSB7CisgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaXMgYSBzZXQga2V5IHZhbHVlIHBh
aXJzIHN0b3JlZCBpbiBhIHNpbXBsZSBhcnJheS4KKyAgICBHTFhfTEVWRUwsICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLAorICAgIHN0YXRpY19jYXN0PGludD4oR0xYX1ZJU1VBTF9JRCksICAg
IDAsCisgICAgR0xYX0RSQVdBQkxFX1RZUEUsICAgICAgICAgICAgICAgICAgR0xYX1BJWE1BUF9C
SVQsCisgICAgR0xYX0JJTkRfVE9fVEVYVFVSRV9UQVJHRVRTX0VYVCwgICAgR0xYX1RFWFRVUkVf
MkRfQklUX0VYVCwKKyAgICBHTFhfQklORF9UT19URVhUVVJFX1JHQkFfRVhULCAgICAgICBUUlVF
LAorICAgIDAKK307CisKIGNsYXNzIEdMWENvbmZpZ1NlbGVjdG9yIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHTFhDb25maWdTZWxlY3Rvcik7CiAKIHB1YmxpYzoKLSAgICBHTFhDb25maWdT
ZWxlY3RvcihEaXNwbGF5KiB4RGlzcGxheSwgYm9vbCBzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24p
CisgICAgR0xYQ29uZmlnU2VsZWN0b3IoKQogICAgICAgICA6IG1fcGJ1ZmZlckZCQ29uZmlnKDAp
CiAgICAgICAgICwgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKDApCi0gICAgICAgICwgbV9zaGFy
ZWREaXNwbGF5KHhEaXNwbGF5KQotICAgICAgICAsIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9u
KHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikKICAgICB7CiAgICAgfQogCkBAIC01Myw3ICs2Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFzdXJmYWNlQ29udGV4dENvbmZpZygpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIGdsWEdldFZpc3VhbEZyb21GQkNvbmZp
ZyhtX3NoYXJlZERpc3BsYXksIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyk7CisgICAgICAgIHJl
dHVybiBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgp
LCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcpOwogICAgIH0KIAogICAgIEdMWEZCQ29uZmlnIHBC
dWZmZXJDb250ZXh0Q29uZmlnKCkKQEAgLTcwLDEwICs3OSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBOb25lCiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBpbnQgbnVtQXZhaWxh
YmxlQ29uZmlnczsKLSAgICAgICAgICAgIE93blB0clgxMTxHTFhGQkNvbmZpZz4gdGVtcChnbFhD
aG9vc2VGQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIERlZmF1bHRTY3JlZW4obV9zaGFyZWREaXNw
bGF5KSwgYXR0cmlidXRlcywgJm51bUF2YWlsYWJsZUNvbmZpZ3MpKTsKLSAgICAgICAgICAgIGlm
IChudW1BdmFpbGFibGVDb25maWdzKQotICAgICAgICAgICAgICAgIG1fcGJ1ZmZlckZCQ29uZmln
ID0gdGVtcFswXTsKKyAgICAgICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gZmluZE1hdGNoaW5n
Q29uZmlnKGF0dHJpYnV0ZXMpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG1fcGJ1ZmZl
ckZCQ29uZmlnOwpAQCAtODcsNiArOTMsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9z
dXJmYWNlQ29udGV4dEZCQ29uZmlnOwogICAgIH0KIAorICAgIEdMWEZCQ29uZmlnIHN1cmZhY2VD
bGllbnRDb25maWcoaW50IGRlcHRoLCBWaXN1YWxJRCBpZCkKKyAgICB7CisgICAgICAgIGNsaWVu
dEF0dHJpYnV0ZXNbM10gPSBzdGF0aWNfY2FzdDxpbnQ+KGlkKTsKKyAgICAgICAgY2xpZW50QXR0
cmlidXRlc1s4XSA9IGRlcHRoID09IDMyID8gR0xYX0JJTkRfVE9fVEVYVFVSRV9SR0JBX0VYVCA6
IEdMWF9CSU5EX1RPX1RFWFRVUkVfUkdCX0VYVDsKKworICAgICAgICByZXR1cm4gZmluZE1hdGNo
aW5nQ29uZmlnKGNsaWVudEF0dHJpYnV0ZXMsIGRlcHRoLCBpZCk7CisgICAgfQorCiAgICAgdm9p
ZCByZXNldCgpCiAgICAgewogICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IDA7CkBAIC0xMTAs
NDMgKzEyNCw0MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9uZQogICAgICAgICB9OwogCisg
ICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IGZpbmRNYXRjaGluZ0NvbmZpZyhhdHRy
aWJ1dGVzKTsKKyAgICB9CisKKyAgICBHTFhGQkNvbmZpZyBmaW5kTWF0Y2hpbmdDb25maWcoY29u
c3QgaW50IGF0dHJpYnV0ZXNbXSwgaW50IGRlcHRoID0gMzIsIFZpc3VhbElEIGlkID0gMCkKKyAg
ICB7CiAgICAgICAgIGludCBudW1BdmFpbGFibGVDb25maWdzOwotICAgICAgICBPd25QdHJYMTE8
R0xYRkJDb25maWc+IHRlbXAoZ2xYQ2hvb3NlRkJDb25maWcobV9zaGFyZWREaXNwbGF5LCBEZWZh
dWx0U2NyZWVuKG1fc2hhcmVkRGlzcGxheSksIGF0dHJpYnV0ZXMsICZudW1BdmFpbGFibGVDb25m
aWdzKSk7CisgICAgICAgIE93blB0clgxMTxHTFhGQkNvbmZpZz4gdGVtcChnbFhDaG9vc2VGQkNv
bmZpZyhYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCksIERlZmF1bHRTY3JlZW4oWDExV3JhcHBl
cjo6bmF0aXZlRGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bUF2YWlsYWJsZUNvbmZpZ3MpKTsK
IAotICAgICAgICBpZiAoIW51bUF2YWlsYWJsZUNvbmZpZ3MpIHsKLSAgICAgICAgICAgIG1fc3Vy
ZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKCFudW1BdmFpbGFibGVDb25maWdzIHx8ICF0ZW1wLmdldCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiBzY29wZWRW
aXN1YWxJbmZvOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF2YWlsYWJsZUNvbmZp
Z3M7ICsraSkgewotICAgICAgICAgICAgc2NvcGVkVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZy
b21GQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbaV0pOworICAgICAgICAgICAgc2NvcGVk
VmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhYMTFXcmFwcGVyOjpuYXRpdmVE
aXNwbGF5KCksIHRlbXBbaV0pOwogICAgICAgICAgICAgaWYgKCFzY29wZWRWaXN1YWxJbmZvLmdl
dCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoaWQgJiYg
c2NvcGVkVmlzdWFsSW5mby0+ZGVwdGggPT0gZGVwdGggJiYgc2NvcGVkVmlzdWFsSW5mby0+dmlz
dWFsaWQgPT0gaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBbaV07CisKICNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAgICAgICAgIGlmIChtX3N1cHBvcnRzWFJlbmRlckV4dGVu
c2lvbikgewotICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVu
ZGVyRmluZFZpc3VhbEZvcm1hdChtX3NoYXJlZERpc3BsYXksIHNjb3BlZFZpc3VhbEluZm8tPnZp
c3VhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBo
YU1hc2sgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZp
ZyA9IHRlbXBbaV07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChYMTFXcmFwcGVyOjppc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0
ZWQoKSkgeworICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVu
ZGVyRmluZFZpc3VhbEZvcm1hdChYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCksIHNjb3BlZFZp
c3VhbEluZm8tPnZpc3VhbCk7CisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBkZXB0aCA9
PSAzMiAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGVtcFtpXTsKICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgaWYg
KCFtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgJiYgc2NvcGVkVmlzdWFsSW5mby0+ZGVwdGggPT0g
MzIpIHsKLSAgICAgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSB0ZW1wW2ld
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHNjb3BlZFZpc3VhbEluZm8tPmRlcHRoID09IGRlcHRoKQorICAgICAgICAgICAgICAgIHJldHVy
biB0ZW1wW2ldOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRGlkIG5vdCBmaW5kIGFueSB2aXN1
YWwgc3VwcG9ydGluZyBhbHBoYSwgc2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUgY29uZmlnLgot
ICAgICAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZykKLSAgICAgICAgICAgIG1fc3Vy
ZmFjZUNvbnRleHRGQkNvbmZpZyA9IHRlbXBbMF07CisgICAgICAgIHJldHVybiB0ZW1wWzBdOwog
ICAgIH0KIAogICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOwogICAgIEdMWEZCQ29u
ZmlnIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKLSAgICBEaXNwbGF5KiBtX3NoYXJlZERpc3Bs
YXk7Ci0gICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKIH07CiAKIH0KZGlmZiAt
LWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29u
dGV4dC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dM
WENvbnRleHQuY3BwCmluZGV4IGE5ZjMyMmQuLjAyODQxYzYgMTAwNjQ0Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNw
cApAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBVU0UoR0xYKQogCisjaW5jbHVkZSAiWDExSGVscGVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdHlwZWRlZiBHTFhDb250ZXh0ICgqR0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9D
KShEaXNwbGF5KiwgR0xYRkJDb25maWcsIEdMWENvbnRleHQsIEJvb2wsIGNvbnN0IGludCopOwpA
QCAtMzgsMjAgKzQwLDE5IEBAIHN0YXRpYyBpbnQgQXR0cmlic1tdID0gewogICAgIEdMWF9MT1NF
X0NPTlRFWFRfT05fUkVTRVRfQVJCLAogICAgIDAgfTsKIAotc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZUFSQkV4dGVuc2lvbnMoRGlzcGxheSogZGlzcGxheSkKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVB
UkJFeHRlbnNpb25zKCkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwog
ICAgIGlmIChpbml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5pdGlhbGl6ZWQg
PSB0cnVlOwotICAgIGlmIChHTFBsYXRmb3JtQ29udGV4dDo6c3VwcG9ydHNHTFhFeHRlbnNpb24o
ZGlzcGxheSwgIkdMWF9BUkJfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyIpKQorICAgIGlmIChH
TFBsYXRmb3JtQ29udGV4dDo6c3VwcG9ydHNHTFhFeHRlbnNpb24oWDExV3JhcHBlcjo6bmF0aXZl
RGlzcGxheSgpLCAiR0xYX0FSQl9jcmVhdGVfY29udGV4dF9yb2J1c3RuZXNzIikpCiAgICAgICAg
IGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCID0gcmVpbnRlcnByZXRfY2FzdDxHTFhDUkVBVEVD
T05URVhUQVRUUklCU0FSQlBST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgR0x1Ynl0ZSo+KCJnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQiIpKSk7CiB9CiAKIEdM
WE9mZlNjcmVlbkNvbnRleHQ6OkdMWE9mZlNjcmVlbkNvbnRleHQoKQogICAgIDogR0xQbGF0Zm9y
bUNvbnRleHQoKQotICAgICwgbV9kaXNwbGF5KDApCiB7CiB9CiAKQEAgLTYwLDE3ICs2MSwxNyBA
QCBib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2Uq
IHN1cmZhY2UpCiAgICAgaWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBtX2Rpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNwbGF5KCk7Ci0gICAgaWYgKCFtX2Rpc3Bs
YXkpCisgICAgRGlzcGxheSogeDExRGlzcGxheSA9IHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKTsK
KyAgICBpZiAoIXgxMURpc3BsYXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdMWEZC
Q29uZmlnIGNvbmZpZyA9IHN1cmZhY2UtPmNvbmZpZ3VyYXRpb24oKTsKIAogICAgIGlmIChjb25m
aWcpIHsKLSAgICAgICAgaW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMobV9kaXNwbGF5KTsKKyAgICAg
ICAgaW5pdGlhbGl6ZUFSQkV4dGVuc2lvbnMoKTsKIAogICAgICAgICBpZiAoZ2xYQ3JlYXRlQ29u
dGV4dEF0dHJpYnNBUkIpCi0gICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVD
b250ZXh0QXR0cmlic0FSQihtX2Rpc3BsYXksIGNvbmZpZywgMCwgdHJ1ZSwgQXR0cmlicyk7Cisg
ICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVDb250ZXh0QXR0cmlic0FSQih4
MTFEaXNwbGF5LCBjb25maWcsIDAsIHRydWUsIEF0dHJpYnMpOwogCiAgICAgICAgIGlmIChtX2Nv
bnRleHRIYW5kbGUpIHsKICAgICAgICAgICAgIC8vIFRoZSBHTFhfQVJCX2NyZWF0ZV9jb250ZXh0
X3JvYnVzdG5lc3Mgc3BlYyByZXF1aXJlcyB0aGF0IGEgY29udGV4dCBjcmVhdGVkIHdpdGgKQEAg
LTgwLDExICs4MSwxMSBAQCBib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQ
bGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCiAgICAgICAgICAgICBpZiAocGxhdGZvcm1NYWtlQ3Vy
cmVudChzdXJmYWNlKSAmJiBHTFBsYXRmb3JtQ29udGV4dDo6c3VwcG9ydHNHTEV4dGVuc2lvbigi
R0xfQVJCX3JvYnVzdG5lc3MiKSkKICAgICAgICAgICAgICAgICBtX3Jlc2V0TG9zdENvbnRleHQg
PSB0cnVlOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdsWERlc3Ryb3lDb250
ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKKyAgICAgICAgICAgICAgICBnbFhEZXN0
cm95Q29udGV4dCh4MTFEaXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKCFtX2NvbnRleHRIYW5kbGUpCi0gICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUg
PSBnbFhDcmVhdGVOZXdDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBHTFhfUkdCQV9UWVBFLCAw
LCB0cnVlKTsKKyAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0ZU5ld0NvbnRl
eHQoeDExRGlzcGxheSwgY29uZmlnLCBHTFhfUkdCQV9UWVBFLCAwLCB0cnVlKTsKIAogICAgICAg
ICBpZiAobV9jb250ZXh0SGFuZGxlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDks
MTQgKzExMCwyMSBAQCBib29sIEdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJl
bnQoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCiAKIHZvaWQgR0xYT2ZmU2NyZWVuQ29udGV4
dDo6cGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpCiB7Ci0gICAgZ2xYTWFrZUN1cnJlbnQobV9kaXNw
bGF5LCAwLCAwKTsKLSAgICBtX2Rpc3BsYXkgPSAwOworICAgIERpc3BsYXkqIHgxMURpc3BsYXkg
PSBYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCk7CisgICAgaWYgKCF4MTFEaXNwbGF5KQorICAg
ICAgICByZXR1cm47CisKKyAgICBnbFhNYWtlQ3VycmVudCh4MTFEaXNwbGF5LCAwLCAwKTsKIH0K
IAogdm9pZCBHTFhPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3VyY2VzKCkKIHsKKyAgICBEaXNw
bGF5KiB4MTFEaXNwbGF5ID0gWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpOworICAgIGlmICgh
eDExRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkK
LSAgICAgICAgZ2xYRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOwor
ICAgICAgICBnbFhEZXN0cm95Q29udGV4dCh4MTFEaXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOwog
CiAgICAgbV9jb250ZXh0SGFuZGxlID0gMDsKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKaW5kZXggY2JkZTBl
Zi4uNDQ0ZTdmMiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIHZvaWQgZnJlZVJlc291cmNlcygpOwotICAgIERpc3BsYXkqIG1fZGlz
cGxheTsKIH07CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IDgwZmMyNjIuLjRiYmE0Mzcg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R0xYU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhTdXJmYWNlLmNwcApAQCAtMzYsMTUgKzM2LDggQEAgc3RhdGljIGNvbnN0IGlu
dCBwYnVmZmVyQXR0cmlidXRlc1tdID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZG
RVJfSEVJR0gKIEdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UoKQogICAg
IDogR0xQbGF0Zm9ybVN1cmZhY2UoKQogewotICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0
cihuZXcgWDExT2ZmU2NyZWVuV2luZG93KCkpOwotICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fbmF0
aXZlUmVzb3VyY2UtPm5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKLQotICAgIGlmICghbV9zaGFyZWRE
aXNwbGF5KSB7Ci0gICAgICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRyOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhD
b25maWdTZWxlY3RvcihtX3NoYXJlZERpc3BsYXksIG1fbmF0aXZlUmVzb3VyY2UtPmlzWFJlbmRl
ckV4dGVuc2lvblN1cHBvcnRlZCgpKSk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0gWDExV3JhcHBl
cjo6bmF0aXZlRGlzcGxheSgpOworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcg
R0xYQ29uZmlnU2VsZWN0b3IoKSk7CiAgICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiB2aXNJbmZv
KG1fY29uZmlnU2VsZWN0b3ItPnZpc3VhbEluZm8oKSk7CiAKICAgICBpZiAoIXZpc0luZm8uZ2V0
KCkpIHsKQEAgLTUyLDcgKzQ1LDcgQEAgR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0
U3VyZmFjZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX25hdGl2ZVJlc291cmNl
LT5jcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCAqdmlzSW5mby5nZXQoKSk7
CisgICAgWDExV3JhcHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSwg
KnZpc0luZm8uZ2V0KCkpOwogCiAgICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgewogICAgICAgICBk
ZXN0cm95KCk7CkBAIC03NCw3ICs2Nyw3IEBAIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBHTFhUcmFu
c3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKCkKIHZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6
c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKIHsKICAgICBHTFBsYXRmb3JtU3Vy
ZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7Ci0gICAgbV9uYXRpdmVSZXNvdXJjZS0+cmVTaXpl
V2luZG93KG5ld1JlY3QsIG1fZHJhd2FibGUpOworICAgIFgxMVdyYXBwZXI6OnJlc2l6ZVdpbmRv
dyhuZXdSZWN0LCBtX2RyYXdhYmxlKTsKICAgICAvLyBGb3JjZSByZXNpemUgb2YgR0wgc3VyZmFj
ZSBhZnRlciB3aW5kb3cgcmVzaXplLgogICAgIGdsWFN3YXBCdWZmZXJzKHNoYXJlZERpc3BsYXko
KSwgbV9kcmF3YWJsZSk7CiB9CkBAIC05OSw3ICs5Miw3IEBAIHZvaWQgR0xYVHJhbnNwb3J0U3Vy
ZmFjZTo6ZGVzdHJveSgpCiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKIAogICAg
IGlmIChtX2J1ZmZlckhhbmRsZSkgewotICAgICAgICBtX25hdGl2ZVJlc291cmNlLT5kZXN0cm95
V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICAgICAgWDExV3JhcHBlcjo6ZGVzdHJveVdpbmRv
dyhtX2J1ZmZlckhhbmRsZSk7CiAgICAgICAgIG1fYnVmZmVySGFuZGxlID0gMDsKICAgICAgICAg
bV9kcmF3YWJsZSA9IDA7CiAgICAgfQpAQCAtMTIxLDE1ICsxMTQsOSBAQCBHTFhQQnVmZmVyOjp+
R0xYUEJ1ZmZlcigpCiAKIHZvaWQgR0xYUEJ1ZmZlcjo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgbV9u
YXRpdmVSZXNvdXJjZSA9IGFkb3B0UHRyKG5ldyBYMTFPZmZTY3JlZW5XaW5kb3coKSk7Ci0gICAg
bV9zaGFyZWREaXNwbGF5ID0gbV9uYXRpdmVSZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgp
OwotCi0gICAgaWYgKCFtX3NoYXJlZERpc3BsYXkpIHsKLSAgICAgICAgbV9uYXRpdmVSZXNvdXJj
ZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV9zaGFyZWREaXNwbGF5
ID0gWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpOwogCi0gICAgbV9jb25maWdTZWxlY3RvciA9
IGFkb3B0UHRyKG5ldyBHTFhDb25maWdTZWxlY3RvcihtX3NoYXJlZERpc3BsYXksIG1fbmF0aXZl
UmVzb3VyY2UtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKSk7CisgICAgbV9jb25maWdT
ZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhDb25maWdTZWxlY3RvcigpKTsKICAgICBHTFhGQkNv
bmZpZyBjb25maWcgPSBtX2NvbmZpZ1NlbGVjdG9yLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOwog
CiAgICAgaWYgKCFjb25maWcpIHsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKaW5kZXggODQ3MTVjMS4uOWU3NzMy
YSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HTFhTdXJmYWNlLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhTdXJmYWNlLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkdMUGxh
dGZvcm1TdXJmYWNlLmgiCiAjaW5jbHVkZSAiR0xYQ29uZmlnU2VsZWN0b3IuaCIKLSNpbmNsdWRl
ICJYMTFXaW5kb3dSZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJYMTFIZWxwZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00Nyw3ICs0Nyw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICB2b2lkIGluaXRpYWxpemUoKTsKLSAgICBPd25QdHI8WDExT2ZmU2NyZWVuV2luZG93PiBtX25h
dGl2ZVJlc291cmNlOwogICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxl
Y3RvcjsKIH07CiAjZW5kaWYKQEAgLTY0LDcgKzYzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICB2b2lkIGluaXRpYWxpemUoKTsKICAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKLSAgICBPd25Q
dHI8WDExT2ZmU2NyZWVuV2luZG93PiBtX25hdGl2ZVJlc291cmNlOwogICAgIE93blB0cjxHTFhD
b25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKIH07CiAKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xY
LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhp
Y3NTdXJmYWNlR0xYLmNwcAppbmRleCBhNTdiNjM4Li5kYWYwMWQxIDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdM
WC5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
cmFwaGljc1N1cmZhY2VHTFguY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29w
eXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLgogCiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwx
OSArMzEsMTUgQEAKICNpbmNsdWRlIDxRR3VpQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UU9wZW5H
TENvbnRleHQ+CiAjaW5jbHVkZSA8cXBhL3FwbGF0Zm9ybW5hdGl2ZWludGVyZmFjZS5oPgotI2Vs
aWYgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUgPEdML2dsLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUg
PEdML2dsZXh0Lmg+CiAjaW5jbHVkZSA8R0wvZ2x4Lmg+Ci0jaW5jbHVkZSA8WDExL1hsaWIuaD4K
LSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4
dGVuc2lvbnMvWHJlbmRlci5oPgorI2Vsc2UKKyNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+Cisj
ZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgIkdMWENvbmZpZ1NlbGVjdG9y
LmgiCiAKLXN0YXRpYyBsb25nIFgxMU92ZXJyaWRlUmVkaXJlY3QgPSAxTCA8PCA5OworbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgUEZOR0xYQklORFRFWElNQUdFRVhUUFJPQyBwR2xYQmlu
ZFRleEltYWdlRVhUID0gMDsKIHN0YXRpYyBQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DIHBH
bFhSZWxlYXNlVGV4SW1hZ2VFWFQgPSAwOwpAQCAtNTIsMTUzICs0OSw3IEBAIHN0YXRpYyBQRk5H
TEdFTkZSQU1FQlVGRkVSU1BST0MgcEdsR2VuRnJhbWVidWZmZXJzID0gMDsKIHN0YXRpYyBQRk5H
TERFTEVURUZSQU1FQlVGRkVSU1BST0MgcEdsRGVsZXRlRnJhbWVidWZmZXJzID0gMDsKIHN0YXRp
YyBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJEUFJPQyBwR2xGcmFtZWJ1ZmZlclRleHR1cmUyRCA9
IDA7CiAKLS8vIFVzZWQgZm9yIGhhbmRsaW5nIFhFcnJvci4KLXN0YXRpYyBib29sIHZhbGlkT3Bl
cmF0aW9uID0gdHJ1ZTsKLXN0YXRpYyBpbnQgaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IoRGlz
cGxheSosIFhFcnJvckV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPmVycm9yX2NvZGUg
PT0gQmFkTWF0Y2ggfHwgZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkV2luZG93IHx8IGV2ZW50LT5l
cnJvcl9jb2RlID09IEJhZEFsbG9jKSB7Ci0gICAgICAgIHZhbGlkT3BlcmF0aW9uID0gZmFsc2U7
Ci0KLSAgICAgICAgc3dpdGNoIChldmVudC0+ZXJyb3JfY29kZSkgewotICAgICAgICBjYXNlIEJh
ZE1hdGNoOgotICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRNYXRjaC4iKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEJhZFdpbmRvdzoKLSAgICAgICAgICAgIExPR19FUlJPUigi
QmFkV2luZG93LiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmFkQWxsb2M6
Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkJhZEFsbG9jLiIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICBH
TFhfTEVWRUwsIDAsCi0gICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAotICAg
IEdMWF9SRU5ERVJfVFlQRSwgICBHTFhfUkdCQV9CSVQsCi0gICAgR0xYX1JFRF9TSVpFLCAgICAg
IDEsCi0gICAgR0xYX0dSRUVOX1NJWkUsICAgIDEsCi0gICAgR0xYX0JMVUVfU0laRSwgICAgIDEs
Ci0gICAgR0xYX0FMUEhBX1NJWkUsICAgIDEsCi0gICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCi0g
ICAgR0xYX1hfVklTVUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAotICAgIEdMWF9ET1VCTEVCVUZG
RVIsICBUcnVlLAotICAgIE5vbmUKLX07Ci0KLWNsYXNzIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVy
cm9ySGFuZGxlciB7Ci0KLXB1YmxpYzoKLSAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhh
bmRsZXIoRGlzcGxheSogZGlzcGxheSkKLSAgICAgICAgOiBtX2Rpc3BsYXkoZGlzcGxheSkKLSAg
ICB7Ci0gICAgICAgIC8vIFhTeW5jIG11c3QgYmUgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGN1cnJl
bnQgZXJyb3JzIGFyZSBoYW5kbGVkIGJ5IHRoZSBvcmlnaW5hbCBoYW5kbGVyLgotICAgICAgICBY
U3luYyhtX2Rpc3BsYXksIGZhbHNlKTsKLSAgICAgICAgbV9wcmV2aW91c0Vycm9ySGFuZGxlciA9
IFhTZXRFcnJvckhhbmRsZXIoaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IpOwotICAgIH0KLQot
ICAgIH5TY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKQotICAgIHsKLSAgICAgICAg
Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KLSAgICAgICAgWFNldEVycm9ySGFuZGxl
cihtX3ByZXZpb3VzRXJyb3JIYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBib29sIGlzVmFsaWRPcGVy
YXRpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgdmFsaWRPcGVyYXRpb24gPSB0cnVlOwotICAg
ICAgICAvLyBYU3luYyBpcyBuZWVkZWQgdG8gY2F0Y2ggcG9zc2libGUgZXJyb3JzIGFzIHRoZXkg
YXJlIGdlbmVyYXRlZCBhc3luY2hyb25vdXNseS4KLSAgICAgICAgWFN5bmMobV9kaXNwbGF5LCBm
YWxzZSk7Ci0gICAgICAgIHJldHVybiB2YWxpZE9wZXJhdGlvbjsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgWEVycm9ySGFuZGxlciBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyOwotICAgIERpc3BsYXkq
IG1fZGlzcGxheTsKLX07Ci0KLS8vIEZJWE1FOiBUYWtlIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQg
R0xYQ29uZmlnU2VsZWN0b3IgaW50byB1c2UuCi1jbGFzcyBPZmZTY3JlZW5Sb290V2luZG93IHsK
LXB1YmxpYzoKLSAgICBPZmZTY3JlZW5Sb290V2luZG93KCkKLSAgICB7Ci0gICAgICAgICsrbV9y
ZWZDb3VudDsKLSAgICB9Ci0KLSAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCi0gICAgewotICAgICAg
ICBpZiAoIW1fd2luZG93KSB7Ci0gICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSBkaXNwbGF5KCk7
Ci0gICAgICAgICAgICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVmYXVs
dFJvb3RXaW5kb3coZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCksIFdo
aXRlUGl4ZWwoZHB5LCAwKSk7Ci0gICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRy
aWJ1dGVzOwotICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRydWU7
Ci0gICAgICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBYMTFP
dmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAvLyBNYXAgd2luZG93
IHRvIHRoZSBzY3JlZW4KLSAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dpbmRvdyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV93aW5kb3c7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHN0cnVjdCBEaXNwbGF5Q29ubmVjdGlvbiB7Ci0gICAgICAgIERpc3BsYXlDb25uZWN0aW9u
KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOwot
ICAgICAgICB9Ci0KLSAgICAgICAgfkRpc3BsYXlDb25uZWN0aW9uKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
RGlzcGxheSogZGlzcGxheSgpIHsgcmV0dXJuIG1fZGlzcGxheTsgfQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIERpc3BsYXkqIG1fZGlzcGxheTsKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgc3RhdGlj
IERpc3BsYXkqIGRpc3BsYXkoKQotICAgIHsKLSAgICAgICAgLy8gRGlzcGxheSBjb25uZWN0aW9u
IHdpbGwgb25seSBiZSBicm9rZW4gYXQgcHJvZ3JhbSBzaHV0ZG93bi4KLSAgICAgICAgc3RhdGlj
IERpc3BsYXlDb25uZWN0aW9uIGRpc3BsYXlDb25uZWN0aW9uOwotICAgICAgICByZXR1cm4gZGlz
cGxheUNvbm5lY3Rpb24uZGlzcGxheSgpOwotICAgIH0KLQotICAgIH5PZmZTY3JlZW5Sb290V2lu
ZG93KCkKLSAgICB7Ci0gICAgICAgIGlmICgtLW1fcmVmQ291bnQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgICAgICBYVW5tYXBXaW5kb3co
ZGlzcGxheSgpLCBtX3dpbmRvdyk7Ci0gICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5
KCksIG1fd2luZG93KTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAgfQotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgaW50IG1fcmVmQ291bnQ7Ci0gICAgc3RhdGljIFdp
bmRvdyBtX3dpbmRvdzsKLX07Ci0KLWludCBPZmZTY3JlZW5Sb290V2luZG93OjptX3JlZkNvdW50
ID0gMDsKLVdpbmRvdyBPZmZTY3JlZW5Sb290V2luZG93OjptX3dpbmRvdyA9IDA7Ci0KLXN0YXRp
YyBjb25zdCBpbnQgZ2x4U3BlY1tdID0gewotICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIGlzIGEg
c2V0IGtleSB2YWx1ZSBwYWlycyBzdG9yZWQgaW4gYSBzaW1wbGUgYXJyYXkuCi0gICAgR0xYX0xF
VkVMLCAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICBHTFhfRFJBV0FCTEVfVFlQRSwg
ICAgICAgICAgICAgICAgICBHTFhfUElYTUFQX0JJVCB8IEdMWF9XSU5ET1dfQklULAotICAgIEdM
WF9CSU5EX1RPX1RFWFRVUkVfVEFSR0VUU19FWFQsICAgIEdMWF9URVhUVVJFXzJEX0JJVF9FWFQs
Ci0gICAgR0xYX0JJTkRfVE9fVEVYVFVSRV9SR0JBX0VYVCwgICAgICAgVFJVRSwKLSAgICAwCi19
OwotCi1zdGF0aWMgY29uc3QgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsKK3N0YXRpYyBpbnQgZ2x4
QXR0cmlidXRlc1tdID0gewogICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9FWFQsCiAgICAgR0xYX1RF
WFRVUkVfRk9STUFUX1JHQkFfRVhULAogICAgIEdMWF9URVhUVVJFX1RBUkdFVF9FWFQsCkBAIC0y
MDgsMTcgKzU5LDEzIEBAIHN0YXRpYyBjb25zdCBpbnQgZ2x4QXR0cmlidXRlc1tdID0gewogCiBz
dHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgR3JhcGhpY3NTdXJmYWNlUHJpdmF0
ZShjb25zdCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHNoYXJlQ29udGV4dCA9IDApCi0gICAg
ICAgIDogbV9vZmZTY3JlZW5XaW5kb3coYWRvcHRQdHIobmV3IE9mZlNjcmVlblJvb3RXaW5kb3co
KSkpCi0gICAgICAgICwgbV94UGl4bWFwKDApCisgICAgICAgIDogbV94UGl4bWFwKDApCiAgICAg
ICAgICwgbV9nbHhQaXhtYXAoMCkKICAgICAgICAgLCBtX3N1cmZhY2UoMCkKICAgICAgICAgLCBt
X2dseFN1cmZhY2UoMCkKICAgICAgICAgLCBtX2dsQ29udGV4dCgwKQogICAgICAgICAsIG1fZGV0
YWNoZWRDb250ZXh0KDApCiAgICAgICAgICwgbV9kZXRhY2hlZFN1cmZhY2UoMCkKLSAgICAgICAg
LCBtX2ZiQ29uZmlnKDApCi0gICAgICAgICwgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQoZmFsc2UpCi0g
ICAgICAgICwgbV9oYXNBbHBoYShmYWxzZSkKICAgICAgICAgLCBtX2lzUmVjZWl2ZXIoZmFsc2Up
CiAgICAgewogICAgICAgICBHTFhDb250ZXh0IHNoYXJlQ29udGV4dE9iamVjdCA9IDA7CkBAIC0y
MzQsMTYgKzgxLDE1IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICAgICAg
VU5VU0VEX1BBUkFNKHNoYXJlQ29udGV4dCk7CiAjZW5kaWYKIAotICAgICAgICBpbnQgbnVtUmV0
dXJuZWQ7Ci0gICAgICAgIEdMWEZCQ29uZmlnKiBmYkNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZp
ZyhkaXNwbGF5KCksIERlZmF1bHRTY3JlZW4oZGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bVJl
dHVybmVkKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBjaG9vc2UgYSBjb25maWd1
cmF0aW9uIHRoYXQgc3VwcG9ydHMgYW4gYWxwaGEgbWFzay4KLSAgICAgICAgbV9mYkNvbmZpZyA9
IGZpbmRGQkNvbmZpZ1dpdGhBbHBoYShmYkNvbmZpZ3MsIG51bVJldHVybmVkKTsKKyAgICAgICAg
bV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhDb25maWdTZWxlY3RvcigpKTsKIAot
ICAgICAgICBYRnJlZShmYkNvbmZpZ3MpOworICAgICAgICBpZiAoIW1fY29uZmlnU2VsZWN0b3It
PnN1cmZhY2VDb250ZXh0Q29uZmlnKCkpIHsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICAvLyBDcmVhdGUgYSBHTFggY29udGV4
dCBmb3IgT3BlbkdMIHJlbmRlcmluZwotICAgICAgICBtX2dsQ29udGV4dCA9IGdsWENyZWF0ZU5l
d0NvbnRleHQoZGlzcGxheSgpLCBtX2ZiQ29uZmlnLCBHTFhfUkdCQV9UWVBFLCBzaGFyZUNvbnRl
eHRPYmplY3QsIHRydWUpOworICAgICAgICBtX2dsQ29udGV4dCA9IGdsWENyZWF0ZU5ld0NvbnRl
eHQoZGlzcGxheSgpLCBtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpLCBH
TFhfUkdCQV9UWVBFLCBzaGFyZUNvbnRleHRPYmplY3QsIHRydWUpOwogICAgIH0KIAogICAgIEdy
YXBoaWNzU3VyZmFjZVByaXZhdGUodWludDMyX3Qgd2luSWQpCkBAIC0yNTQsMTEgKzEwMCwxMCBA
QCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgICwgbV9nbENvbnRleHQo
MCkKICAgICAgICAgLCBtX2RldGFjaGVkQ29udGV4dCgwKQogICAgICAgICAsIG1fZGV0YWNoZWRT
dXJmYWNlKDApCi0gICAgICAgICwgbV9mYkNvbmZpZygwKQotICAgICAgICAsIG1fdGV4dHVyZUlz
WUludmVydGVkKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCiAgICAgICAgICwg
bV9pc1JlY2VpdmVyKHRydWUpCi0gICAgeyB9CisgICAgeworICAgICAgICBtX2NvbmZpZ1NlbGVj
dG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZpZ1NlbGVjdG9yKCkpOworICAgIH0KIAogICAgIH5H
cmFwaGljc1N1cmZhY2VQcml2YXRlKCkKICAgICB7CkBAIC0yNjcsMzUgKzExMiwzMiBAQCBzdHJ1
Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAKICAgICB1aW50MzJfdCBjcmVhdGVTdXJmYWNl
KGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgewotICAgICAgICBYVmlzdWFsSW5mbyogdmlzdWFs
SW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhkaXNwbGF5KCksIG1fZmJDb25maWcpOwot
ICAgICAgICBpZiAoIXZpc3VhbEluZm8pCisgICAgICAgIGlmICghZGlzcGxheSgpIHx8ICFtX2Nv
bmZpZ1NlbGVjdG9yKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgT3duUHRyWDEx
PFhWaXN1YWxJbmZvPiB2aXNJbmZvKG1fY29uZmlnU2VsZWN0b3ItPnZpc3VhbEluZm8oKSk7CisK
KyAgICAgICAgaWYgKCF2aXNJbmZvLmdldCgpKSB7CisgICAgICAgICAgICBjbGVhcigpOwogICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBYMTFXcmFwcGVyOjpjcmVh
dGVPZmZTY3JlZW5XaW5kb3coJm1fc3VyZmFjZSwgKnZpc0luZm8uZ2V0KCksIHNpemUpOwogCi0g
ICAgICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSgpLCBtX29mZlNj
cmVlbldpbmRvdy0+Z2V0WFdpbmRvdygpLCB2aXN1YWxJbmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7
Ci0KLSAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYTsKLSAgICAgICAgYS5iYWNrZ3JvdW5k
X3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5KCksIDApOwotICAgICAgICBhLmJvcmRlcl9waXhl
bCA9IEJsYWNrUGl4ZWwoZGlzcGxheSgpLCAwKTsKLSAgICAgICAgYS5jb2xvcm1hcCA9IGNtYXA7
Ci0gICAgICAgIG1fc3VyZmFjZSA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSgpLCBtX29mZlNjcmVl
bldpbmRvdy0+Z2V0WFdpbmRvdygpLCAwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCks
Ci0gICAgICAgICAgICAwLCB2aXN1YWxJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc3VhbElu
Zm8tPnZpc3VhbCwKLSAgICAgICAgICAgIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENX
Q29sb3JtYXAsICZhKTsKLSAgICAgICAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxh
eSgpLCBtX3N1cmZhY2UsIDApOwotICAgICAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlz
cGxheSgpLCBtX3N1cmZhY2UsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKLSAgICAgICAgbV9n
bHhTdXJmYWNlID0gZ2xYQ3JlYXRlV2luZG93KGRpc3BsYXkoKSwgbV9mYkNvbmZpZywgbV9zdXJm
YWNlLCAwKTsKLSAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0KLSAgICAgICAgLy8gTWFrZSBz
dXJlIHRoZSBYUmVuZGVyIEV4dGVuc2lvbiBpcyBhdmFpbGFibGUuCi0gICAgICAgIGludCBldmVu
dEJhc2VwLCBlcnJvckJhc2VwOwotICAgICAgICBpZiAoIVhSZW5kZXJRdWVyeUV4dGVuc2lvbihk
aXNwbGF5KCksICZldmVudEJhc2VwLCAmZXJyb3JCYXNlcCkpCisgICAgICAgIGlmICghbV9zdXJm
YWNlKSB7CisgICAgICAgICAgICBjbGVhcigpOwogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KIAotICAgICAgICBYTWFwV2luZG93KGRpc3BsYXkoKSwgbV9zdXJmYWNlKTsKKyAgICAg
ICAgbV9nbHhTdXJmYWNlID0gZ2xYQ3JlYXRlV2luZG93KGRpc3BsYXkoKSwgbV9jb25maWdTZWxl
Y3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgbV9zdXJmYWNlLCAwKTsKICAgICAgICAgcmV0
dXJuIG1fc3VyZmFjZTsKICAgICB9CiAKICAgICB2b2lkIGNyZWF0ZVBpeG1hcCh1aW50MzJfdCB3
aW5JZCkKICAgICB7CisgICAgICAgIGlmICghbV9jb25maWdTZWxlY3RvcikKKyAgICAgICAgICAg
IHJldHVybjsKKwogICAgICAgICBYV2luZG93QXR0cmlidXRlcyBhdHRyOwogICAgICAgICBpZiAo
IVhHZXRXaW5kb3dBdHRyaWJ1dGVzKGRpc3BsYXkoKSwgd2luSWQsICZhdHRyKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTMwNCwzNSArMTQ2LDI1IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQ
cml2YXRlIHsKICAgICAgICAgaWYgKGF0dHIubWFwX3N0YXRlID09IElzVW5tYXBwZWQgfHwgYXR0
ci5tYXBfc3RhdGUgPT0gSXNVbnZpZXdhYmxlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlciBoYW5kbGVyKGRpc3BsYXkoKSk7
CisgICAgICAgIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlciBoYW5kbGVyOwogICAg
ICAgICBtX3NpemUgPSBJbnRTaXplKGF0dHIud2lkdGgsIGF0dHIuaGVpZ2h0KTsKIAogICAgICAg
ICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoZGlz
cGxheSgpLCBhdHRyLnZpc3VhbCk7Ci0gICAgICAgIG1faGFzQWxwaGEgPSAoZm9ybWF0LT50eXBl
ID09IFBpY3RUeXBlRGlyZWN0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayk7Ci0KLSAgICAg
ICAgaW50IG51bWJlck9mQ29uZmlnczsKLSAgICAgICAgR0xYRkJDb25maWcqIGNvbmZpZ3MgPSBn
bFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5KCksIFhEZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSksIGds
eFNwZWMsICZudW1iZXJPZkNvbmZpZ3MpOwotCi0gICAgICAgIC8vIElmIG9yaWdpbiB3aW5kb3cg
aGFzIGFscGhhIHRoZW4gZmluZCBjb25maWcgd2l0aCBhbHBoYS4KLSAgICAgICAgR0xYRkJDb25m
aWcmIGNvbmZpZyA9IG1faGFzQWxwaGEgPyBmaW5kRkJDb25maWdXaXRoQWxwaGEoY29uZmlncywg
bnVtYmVyT2ZDb25maWdzKSA6IGNvbmZpZ3NbMF07Ci0KKyAgICAgICAgYm9vbCBoYXNBbHBoYSA9
IChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVEaXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFN
YXNrKTsKICAgICAgICAgbV94UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAoZGlz
cGxheSgpLCB3aW5JZCk7Ci0gICAgICAgIG1fZ2x4UGl4bWFwID0gZ2xYQ3JlYXRlUGl4bWFwKGRp
c3BsYXkoKSwgY29uZmlnLCBtX3hQaXhtYXAsIGdseEF0dHJpYnV0ZXMpOworICAgICAgICBnbHhB
dHRyaWJ1dGVzWzFdID0gKGZvcm1hdC0+ZGVwdGggPT0gMzIgfHwgaGFzQWxwaGEpID8gR0xYX1RF
WFRVUkVfRk9STUFUX1JHQkFfRVhUIDogR0xYX1RFWFRVUkVfRk9STUFUX1JHQl9FWFQ7CisgICAg
ICAgIG1fZ2x4UGl4bWFwID0gZ2xYQ3JlYXRlUGl4bWFwKGRpc3BsYXkoKSwgbV9jb25maWdTZWxl
Y3Rvci0+c3VyZmFjZUNsaWVudENvbmZpZyhmb3JtYXQtPmRlcHRoLCBYVmlzdWFsSURGcm9tVmlz
dWFsKGF0dHIudmlzdWFsKSksIG1feFBpeG1hcCwgZ2x4QXR0cmlidXRlcyk7CiAKICAgICAgICAg
aWYgKCFoYW5kbGVyLmlzVmFsaWRPcGVyYXRpb24oKSkKICAgICAgICAgICAgIGNsZWFyKCk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgdWludCBpbnZlcnRlZCA9IDA7CiAgICAgICAgICAg
ICBnbFhRdWVyeURyYXdhYmxlKGRpc3BsYXkoKSwgbV9nbHhQaXhtYXAsIEdMWF9ZX0lOVkVSVEVE
X0VYVCwgJmludmVydGVkKTsKLSAgICAgICAgICAgIG1fdGV4dHVyZUlzWUludmVydGVkID0gISFp
bnZlcnRlZDsKLSAgICAgICAgfQotCi0gICAgICAgIFhGcmVlKGNvbmZpZ3MpOwotICAgIH0KKyAg
ICAgICAgICAgIG1fZmxhZ3MgPSAhIWludmVydGVkID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRG
bGlwVGV4dHVyZSA6IDA7CiAKLSAgICBib29sIHRleHR1cmVJc1lJbnZlcnRlZCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV90ZXh0dXJlSXNZSW52ZXJ0ZWQ7CisgICAgICAgICAgICBpZiAoaGFz
QWxwaGEpCisgICAgICAgICAgICAgICAgbV9mbGFncyB8PSBUZXh0dXJlTWFwcGVyR0w6OlNob3Vs
ZEJsZW5kOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBtYWtlQ3VycmVudCgpCkBAIC00
MDAsNyArMjMyLDcgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgewogICAgICAgICBk
b25lQ3VycmVudCgpOwogICAgIH0KIAotICAgIERpc3BsYXkqIGRpc3BsYXkoKSBjb25zdCB7IHJl
dHVybiBPZmZTY3JlZW5Sb290V2luZG93OjpkaXNwbGF5KCk7IH0KKyAgICBEaXNwbGF5KiBkaXNw
bGF5KCkgY29uc3QgeyByZXR1cm4gWDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpOyB9CiAKICAg
ICBHTFhQaXhtYXAgZ2x4UGl4bWFwKCkgY29uc3QKICAgICB7CkBAIC00MjAsMjUgKzI1MiwxMCBA
QCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgfQogCiAgICAgYm9vbCBpc1Jl
Y2VpdmVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlY2VpdmVyOyB9Ci1wcml2YXRlOgotICAgIEdM
WEZCQ29uZmlnJiBmaW5kRkJDb25maWdXaXRoQWxwaGEoR0xYRkJDb25maWcqIGZiQ29uZmlncywg
aW50IG51bWJlck9mQ29uZmlncykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtYmVyT2ZDb25maWdzOyArK2kpIHsKLSAgICAgICAgICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJ
bmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKGRpc3BsYXkoKSwgZmJDb25maWdzW2ldKTsK
LSAgICAgICAgICAgIGlmICghdmlzdWFsSW5mbykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlz
dWFsRm9ybWF0KGRpc3BsYXkoKSwgdmlzdWFsSW5mby0+dmlzdWFsKTsKLSAgICAgICAgICAgIFhG
cmVlKHZpc3VhbEluZm8pOwogCi0gICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGly
ZWN0LmFscGhhTWFzayA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZiQ29uZmlnc1tpXTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHVybiAxc3QgY29uZmlnIGFzIGEgZmFsbGJhY2sg
d2l0aCBubyBhbHBoYSBzdXBwb3J0LgotICAgICAgICByZXR1cm4gZmJDb25maWdzWzBdOwotICAg
IH0KKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9m
bGFnczsgfQogCitwcml2YXRlOgogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgaWYg
KG1fZ2x4UGl4bWFwKSB7CkBAIC00NjEsMjEgKzI3OCwyMiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgZ2xYRGVzdHJveUNvbnRleHQoZGlzcGxheSgpLCBtX2dsQ29udGV4dCk7CiAgICAgICAgICAg
ICBtX2dsQ29udGV4dCA9IDA7CiAgICAgICAgIH0KKworICAgICAgICBpZiAobV9jb25maWdTZWxl
Y3RvcikKKyAgICAgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwogICAgIH0KIAot
ICAgIE93blB0cjxPZmZTY3JlZW5Sb290V2luZG93PiBtX29mZlNjcmVlbldpbmRvdzsKICAgICBJ
bnRTaXplIG1fc2l6ZTsKICAgICBQaXhtYXAgbV94UGl4bWFwOwogICAgIEdMWFBpeG1hcCBtX2ds
eFBpeG1hcDsKLSAgICBXaW5kb3cgbV9zdXJmYWNlOworICAgIHVpbnQzMl90IG1fc3VyZmFjZTsK
ICAgICBXaW5kb3cgbV9nbHhTdXJmYWNlOwogICAgIEdMWENvbnRleHQgbV9nbENvbnRleHQ7CiAg
ICAgR0xYQ29udGV4dCBtX2RldGFjaGVkQ29udGV4dDsKICAgICBHTFhEcmF3YWJsZSBtX2RldGFj
aGVkU3VyZmFjZTsKLSAgICBHTFhGQkNvbmZpZyBtX2ZiQ29uZmlnOwotICAgIGJvb2wgbV90ZXh0
dXJlSXNZSW52ZXJ0ZWQ7Ci0gICAgYm9vbCBtX2hhc0FscGhhOworICAgIE93blB0cjxHTFhDb25m
aWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKICAgICBib29sIG1faXNSZWNlaXZlcjsKKyAg
ICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3M7CiB9OwogCiBzdGF0aWMgYm9vbCByZXNv
bHZlR0xNZXRob2RzKCkKQEAgLTUzOSwxMyArMzU3LDEwIEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNl
OjpwbGF0Zm9ybVBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsCiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm47CiAKLSAgICBUZXh0dXJlTWFw
cGVyR0w6OkZsYWdzIGZsYWdzID0gbV9wcml2YXRlLT50ZXh0dXJlSXNZSW52ZXJ0ZWQoKSA/IFRl
eHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgOiAwOwotICAgIGZsYWdzIHw9IFRleHR1
cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQ7Ci0KICAgICBGbG9hdFJlY3QgcmVjdE9uQ29udGVudHMo
RmxvYXRQb2ludDo6emVybygpLCBzaXplKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1
c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKICAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBs
eShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChyZWN0T25Db250ZW50cywgdGFyZ2V0
UmVjdCkpOwotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIp
LT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBmbGFncywgc2l6ZSwgcmVjdE9uQ29udGVudHMsIGFkanVz
dGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFw
cGVyR0wqPih0ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1cmUodGV4dHVyZSwgbV9wcml2YXRlLT5m
bGFncygpLCBzaXplLCByZWN0T25Db250ZW50cywgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHks
IG1hc2spOwogfQogCiB1aW50MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZm
ZXIoKSBjb25zdApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjMxNWViNDUKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHAKQEAgLTAsMCArMSwyNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYMTFIZWxw
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBoYW5kbGluZyBYRXJy
b3IuCitzdGF0aWMgYm9vbCB2YWxpZE9wZXJhdGlvbiA9IHRydWU7CitzdGF0aWMgaW50IGhhbmRs
ZVhQaXhtYXBDcmVhdGlvbkVycm9yKERpc3BsYXkqLCBYRXJyb3JFdmVudCogZXZlbnQpCit7Cisg
ICAgaWYgKGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZE1hdGNoIHx8IGV2ZW50LT5lcnJvcl9jb2Rl
ID09IEJhZFdpbmRvdyB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRBbGxvYykgeworICAgICAg
ICB2YWxpZE9wZXJhdGlvbiA9IGZhbHNlOworCisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmVycm9y
X2NvZGUpIHsKKyAgICAgICAgY2FzZSBCYWRNYXRjaDoKKyAgICAgICAgICAgIExPR19FUlJPUigi
QmFkTWF0Y2guIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCYWRXaW5kb3c6
CisgICAgICAgICAgICBMT0dfRVJST1IoIkJhZFdpbmRvdy4iKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEJhZEFsbG9jOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRBbGxv
Yy4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RydWN0IERp
c3BsYXlDb25uZWN0aW9uIHsKKyAgICBEaXNwbGF5Q29ubmVjdGlvbigpCisgICAgeworICAgICAg
ICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXkp
CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIGNvbm5lY3Rpb24gd2l0aCBY
Iik7CisgICAgfQorCisgICAgfkRpc3BsYXlDb25uZWN0aW9uKCkKKyAgICB7CisgICAgICAgIFhD
bG9zZURpc3BsYXkobV9kaXNwbGF5KTsKKyAgICB9CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkg
eyByZXR1cm4gbV9kaXNwbGF5OyB9Citwcml2YXRlOgorICAgIERpc3BsYXkqIG1fZGlzcGxheTsK
K307CisKK3N0cnVjdCBPZmZTY3JlZW5Sb290V2luZG93IHsKKworICAgIE9mZlNjcmVlblJvb3RX
aW5kb3coKQorICAgIHsKKyAgICAgICAgbV93aW5kb3cgPSAwOworICAgICAgICBEaXNwbGF5KiBk
cHkgPSBYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5KCk7CisgICAgICAgIGlmICghZHB5KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXM7CisgICAgICAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOworICAgICAg
ICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVmYXVsdFJvb3RXaW5kb3co
ZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCksIFdoaXRlUGl4ZWwoZHB5
LCAwKSk7CisgICAgICAgIC8vIEZyb20gaHR0cDovL3Ryb25jaGUuY29tL2d1aS94L3hsaWIvd2lu
ZG93L2F0dHJpYnV0ZXMvCisgICAgICAgIFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgbV93
aW5kb3csIENXT3ZlcnJpZGVSZWRpcmVjdCwgJmF0dHJpYnV0ZXMpOworICAgICAgICBYTWFwV2lu
ZG93KGRweSwgbV93aW5kb3cpOworCisgICAgICAgIGlmICghbV93aW5kb3cpCisgICAgICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHJvb3Qgd2luZG93LiIpOwor
ICAgIH0KKworICAgIH5PZmZTY3JlZW5Sb290V2luZG93KCkKKyAgICB7CisgICAgICAgIGlmICgh
WDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChtX3dpbmRvdykgeworICAgICAgICAgICAgWFVubWFwV2luZG93KFgxMVdyYXBwZXI6
Om5hdGl2ZURpc3BsYXkoKSwgbV93aW5kb3cpOworICAgICAgICAgICAgWERlc3Ryb3lXaW5kb3co
WDExV3JhcHBlcjo6bmF0aXZlRGlzcGxheSgpLCBtX3dpbmRvdyk7CisgICAgICAgICAgICBtX3dp
bmRvdyA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXaW5kb3cgcm9vdFdpbmRvdygpCisg
ICAgeworICAgICAgICByZXR1cm4gbV93aW5kb3c7CisgICAgfQorCitwcml2YXRlOgorICAgIFdp
bmRvdyBtX3dpbmRvdzsKK307CisKK1Njb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6
U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKCkKK3sKKyAgICAvLyBYU3luYyBtdXN0
IGJlIGNhbGxlZCB0byBlbnN1cmUgdGhhdCBjdXJyZW50IGVycm9ycyBhcmUgaGFuZGxlZCBieSB0
aGUgb3JpZ2luYWwgaGFuZGxlci4KKyAgICBYU3luYyhYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5
KCksIGZhbHNlKTsKKyAgICBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyID0gWFNldEVycm9ySGFuZGxl
cihoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJvcik7Cit9CisKK1Njb3BlZFhQaXhtYXBDcmVhdGlv
bkVycm9ySGFuZGxlcjo6flNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpCit7Cisg
ICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KKyAgICBYU2V0RXJyb3JIYW5kbGVy
KG1fcHJldmlvdXNFcnJvckhhbmRsZXIpOworfQorCitib29sIFNjb3BlZFhQaXhtYXBDcmVhdGlv
bkVycm9ySGFuZGxlcjo6aXNWYWxpZE9wZXJhdGlvbigpIGNvbnN0Cit7CisgICAgdmFsaWRPcGVy
YXRpb24gPSB0cnVlOworICAgIC8vIFhTeW5jIGlzIG5lZWRlZCB0byBjYXRjaCBwb3NzaWJsZSBl
cnJvcnMgYXMgdGhleSBhcmUgZ2VuZXJhdGVkIGFzeW5jaHJvbm91c2x5LgorICAgIFhTeW5jKFgx
MVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSwgZmFsc2UpOworICAgIHJldHVybiB2YWxpZE9wZXJh
dGlvbjsKK30KKwordm9pZCBYMTFXcmFwcGVyOjpyZXNpemVXaW5kb3coY29uc3QgSW50UmVjdCYg
bmV3UmVjdCwgY29uc3QgdWludDMyX3Qgd2luZG93SWQpCit7CisgICAgWFJlc2l6ZVdpbmRvdyhu
YXRpdmVEaXNwbGF5KCksIHdpbmRvd0lkLCBuZXdSZWN0LndpZHRoKCksIG5ld1JlY3QuaGVpZ2h0
KCkpOworICAgIFhGbHVzaChuYXRpdmVEaXNwbGF5KCkpOworfQorCit2b2lkIFgxMVdyYXBwZXI6
OmNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCogaGFuZGxlSWQsIGNvbnN0IFhWaXN1YWxJ
bmZvJiB2aXNJbmZvLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQorICAgIERpc3BsYXkqIGRpc3BsYXkgPSBuYXRpdmVEaXNwbGF5KCk7CisgICAgaWYg
KCFkaXNwbGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXZpc0luZm8udmlzdWFsKSB7
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbC4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdpbmRvdyB4V2luZG93ID0gb2Zmc2NyZWVuUm9v
dFdpbmRvdygpOworICAgIGlmICgheFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ29s
b3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2luZG93LCB2aXNJbmZvLnZp
c3VhbCwgQWxsb2NOb25lKTsKKyAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7Cisg
ICAgYXR0cmlidXRlLmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOwor
ICAgIGF0dHJpYnV0ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOworICAg
IGF0dHJpYnV0ZS5jb2xvcm1hcCA9IGNtYXA7CisgICAgYXR0cmlidXRlLmV2ZW50X21hc2sgPSBS
ZXNpemVSZWRpcmVjdE1hc2s7CisgICAgdWludDMyX3QgdGVtcEhhbmRsZUlkOworICAgIHRlbXBI
YW5kbGVJZCA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpLCAwLCB2aXNJbmZvLmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzSW5m
by52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRy
aWJ1dGUpOworCisgICAgaWYgKCF0ZW1wSGFuZGxlSWQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiB3aW5kb3cuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBYU2V0V2luZG93QmFja2dyb3VuZFBpeG1hcChkaXNwbGF5LCB0ZW1wSGFuZGxl
SWQsIDApOworICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxl
SWQsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKKyAgICBYTWFwV2luZG93KGRpc3BsYXksIHRl
bXBIYW5kbGVJZCk7CisgICAgKmhhbmRsZUlkID0gdGVtcEhhbmRsZUlkOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oaGFuZGxlSWQpOworICAgIFVOVVNFRF9QQVJBTSh2aXNJbmZvKTsKKyAgICBV
TlVTRURfUEFSQU0oc2l6ZSk7CisjZW5kaWYKK30KKworI2lmIFVTRShFR0wpCit2b2lkIFgxMVdy
YXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCogaGFuZGxlSWQsIGNvbnN0IEVH
TGludCBpZCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBWaXN1YWxJRCB2aXN1YWxJZCA9
IHN0YXRpY19jYXN0PFZpc3VhbElEPihpZCk7CisKKyAgICBpZiAoIXZpc3VhbElkKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBFR0wgaGFzIHN1Z2dlc3RlZCBhIHZpc3VhbCBpZCwgc28gZ2V0
IHRoZSByZXN0IG9mIHRoZSB2aXN1YWwgaW5mbyBmb3IgdGhhdCBpZC4KKyAgICBYVmlzdWFsSW5m
byB2aXN1YWxJbmZvVGVtcGxhdGU7CisgICAgbWVtc2V0KCZ2aXN1YWxJbmZvVGVtcGxhdGUsIDAs
IHNpemVvZihYVmlzdWFsSW5mbykpOworICAgIHZpc3VhbEluZm9UZW1wbGF0ZS52aXN1YWxpZCA9
IHZpc3VhbElkOworICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKKyAgICBPd25QdHJYMTE8WFZp
c3VhbEluZm8+IG1hdGNoaW5nVmlzdWFscyhYR2V0VmlzdWFsSW5mbyhuYXRpdmVEaXNwbGF5KCks
IFZpc3VhbElETWFzaywgJnZpc3VhbEluZm9UZW1wbGF0ZSwgJm1hdGNoaW5nQ291bnQpKTsKKyAg
ICBYVmlzdWFsSW5mbyogZm91bmRWaXN1YWwgPSAwOworCisgICAgaWYgKG1hdGNoaW5nVmlzdWFs
cykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaTwgbWF0Y2hpbmdDb3VudDsgaSsrKSB7Cisg
ICAgICAgICAgICBYVmlzdWFsSW5mbyogdGVtcCA9ICZtYXRjaGluZ1Zpc3VhbHNbaV07CisKKyAg
ICAgICAgICAgIGlmIChpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkgeworICAgICAgICAg
ICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1h
dChuYXRpdmVEaXNwbGF5KCksIHRlbXAtPnZpc3VhbCk7CisgICAgICAgICAgICAgICAgaWYgKGZv
cm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvdW5kVmlzdWFsID0gdGVtcDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGVtcC0+ZGVw
dGggPT0gMzIpIHsKKyAgICAgICAgICAgICAgICBmb3VuZFZpc3VhbCA9IHRlbXA7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
Zm91bmRWaXN1YWwpCisgICAgICAgICAgICBjcmVhdGVPZmZTY3JlZW5XaW5kb3coaGFuZGxlSWQs
ICpmb3VuZFZpc3VhbCwgc2l6ZSk7CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgWDExV3JhcHBl
cjo6ZGVzdHJveVdpbmRvdyhjb25zdCB1aW50MzJfdCB3aW5kb3dJZCkKK3sKKyAgICBpZiAoIXdp
bmRvd0lkKQorICAgICAgICByZXR1cm47CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0aXZl
RGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgWERl
c3Ryb3lXaW5kb3coZGlzcGxheSwgd2luZG93SWQpOworfQorCitib29sIFgxMVdyYXBwZXI6Omlz
WFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCit7CisgICAgc3RhdGljIGJvb2wgcXVlcnlEb25l
ID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uID0gZmFs
c2U7CisKKyAgICBpZiAoIXF1ZXJ5RG9uZSkgeworICAgICAgICBxdWVyeURvbmUgPSB0cnVlOwor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0
aXZlRGlzcGxheSgpOworCisgICAgICAgIGlmIChkaXNwbGF5KSB7CisgICAgICAgICAgICBpbnQg
ZXZlbnRCYXNlcCwgZXJyb3JCYXNlcDsKKyAgICAgICAgICAgIHN1cHBvcnRzWFJlbmRlckV4dGVu
c2lvbiA9IFhSZW5kZXJRdWVyeUV4dGVuc2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlcCwgJmVycm9y
QmFzZXApOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gc3VwcG9ydHNY
UmVuZGVyRXh0ZW5zaW9uOworfQorCitEaXNwbGF5KiBYMTFXcmFwcGVyOjpuYXRpdmVEaXNwbGF5
KCkKK3sKKyAgICAvLyBEaXNwbGF5IGNvbm5lY3Rpb24gd2lsbCBvbmx5IGJlIGJyb2tlbiBhdCBw
cm9ncmFtIHNodXRkb3duLgorICAgIHN0YXRpYyBEaXNwbGF5Q29ubmVjdGlvbiBkaXNwbGF5Q29u
bmVjdGlvbjsKKyAgICByZXR1cm4gZGlzcGxheUNvbm5lY3Rpb24uZGlzcGxheSgpOworfQorCitX
aW5kb3cgWDExV3JhcHBlcjo6b2Zmc2NyZWVuUm9vdFdpbmRvdygpCit7CisgICAgc3RhdGljIE9m
ZlNjcmVlblJvb3RXaW5kb3cgb2Zmc2NyZWVuV2luZG93OworICAgIHJldHVybiBvZmZzY3JlZW5X
aW5kb3cucm9vdFdpbmRvdygpOworfQorCit9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5oIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mMzAxMGMwCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuaApAQCAtMCwwICsx
LDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFgxMUhlbHBlcl9oCisjZGVmaW5l
IFgxMUhlbHBlcl9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiT3duUHRyWDEx
LmgiCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKworI2lmIFVTRShFR0wpCisjaW5jbHVk
ZSA8b3BlbmdsL0dMRGVmcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9Y
Y29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRlci5oPgorI2VuZGlm
CisKKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFgxMVdyYXBwZXIgeworCitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgY3JlYXRlT2ZmU2NyZWVu
V2luZG93KHVpbnQzMl90KiwgY29uc3QgWFZpc3VhbEluZm8mLCBjb25zdCBJbnRTaXplJiA9IElu
dFNpemUoMSwgMSkpOworI2lmIFVTRShFR0wpCisgICAgc3RhdGljIHZvaWQgY3JlYXRlT2ZmU2Ny
ZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgRUdMaW50LCBjb25zdCBJbnRTaXplJiA9IEludFNp
emUoMSwgMSkpOworI2VuZGlmCisgICAgc3RhdGljIHZvaWQgZGVzdHJveVdpbmRvdyhjb25zdCB1
aW50MzJfdCk7CisgICAgc3RhdGljIHZvaWQgcmVzaXplV2luZG93KGNvbnN0IEludFJlY3QmLCBj
b25zdCB1aW50MzJfdCk7CisgICAgc3RhdGljIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9y
dGVkKCk7CisgICAgc3RhdGljIERpc3BsYXkqIG5hdGl2ZURpc3BsYXkoKTsKKyAgICBzdGF0aWMg
V2luZG93IG9mZnNjcmVlblJvb3RXaW5kb3coKTsKK307CisKK2NsYXNzIFNjb3BlZFhQaXhtYXBD
cmVhdGlvbkVycm9ySGFuZGxlciB7CisKK3B1YmxpYzoKKyAgICBTY29wZWRYUGl4bWFwQ3JlYXRp
b25FcnJvckhhbmRsZXIoKTsKKyAgICB+U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVy
KCk7CisgICAgYm9vbCBpc1ZhbGlkT3BlcmF0aW9uKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
WEVycm9ySGFuZGxlciBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyOworfTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
WDExV2luZG93UmVzb3VyY2VzLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2UyNjNlYS4uMDAwMDAwMAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNoYXJlZFgxMVJlc291cmNl
cyogU2hhcmVkWDExUmVzb3VyY2VzOjptX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKLQotWDEx
T2ZmU2NyZWVuV2luZG93OjpYMTFPZmZTY3JlZW5XaW5kb3coKQotICAgIDogbV9zaGFyZWRSZXNv
dXJjZXMoMCkKLXsKLSAgICBtX3NoYXJlZFJlc291cmNlcyA9IFNoYXJlZFgxMVJlc291cmNlczo6
Y3JlYXRlKCk7Ci19Ci0KLVgxMU9mZlNjcmVlbldpbmRvdzo6flgxMU9mZlNjcmVlbldpbmRvdygp
Ci17Ci19Ci0KLXZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpyZVNpemVXaW5kb3coY29uc3QgSW50
UmVjdCYgbmV3UmVjdCwgY29uc3QgdWludDMyX3Qgd2luZG93SWQpCi17Ci0gICAgWFJlc2l6ZVdp
bmRvdyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCB3aW5kb3dJZCwgbmV3UmVjdC53
aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKLSAgICBYRmx1c2gobV9zaGFyZWRSZXNvdXJjZXMt
PngxMURpc3BsYXkoKSk7Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgWDEx
T2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlk
LCBjb25zdCBYVmlzdWFsSW5mbyYgdmlzSW5mbywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAg
ICBpZiAoIW1fc2hhcmVkUmVzb3VyY2VzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXNwbGF5
KiBkaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKLSAgICBpZiAoIWRp
c3BsYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdmlzSW5mby52aXN1YWwpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZmluZCB2YWxpZCBYVmlzdWFsLiIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgV2luZG93IHhXaW5kb3cgPSBtX3NoYXJlZFJlc291cmNl
cy0+Z2V0WFdpbmRvdygpOwotICAgIGlmICgheFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2luZG93LCB2aXNJ
bmZvLnZpc3VhbCwgQWxsb2NOb25lKTsKLSAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1
dGU7Ci0gICAgYXR0cmlidXRlLmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXks
IDApOwotICAgIGF0dHJpYnV0ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDAp
OwotICAgIGF0dHJpYnV0ZS5jb2xvcm1hcCA9IGNtYXA7Ci0gICAgYXR0cmlidXRlLmV2ZW50X21h
c2sgPSBSZXNpemVSZWRpcmVjdE1hc2s7Ci0gICAgdWludDMyX3QgdGVtcEhhbmRsZUlkOwotICAg
IHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCB2aXNJbmZvLmRlcHRoLCBJbnB1dE91dHB1dCwg
dmlzSW5mby52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAs
ICZhdHRyaWJ1dGUpOwotCi0gICAgaWYgKCF0ZW1wSGFuZGxlSWQpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiB3aW5kb3cuIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBYU2V0V2luZG93QmFja2dyb3VuZFBpeG1hcChkaXNwbGF5LCB0ZW1w
SGFuZGxlSWQsIDApOwotICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCB0ZW1w
SGFuZGxlSWQsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKLSAgICBYTWFwV2luZG93KGRpc3Bs
YXksIHRlbXBIYW5kbGVJZCk7Ci0gICAgKmhhbmRsZUlkID0gdGVtcEhhbmRsZUlkOwotfQotCi0j
aWYgVVNFKEVHTCkKLXZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZTY3JlZW5XaW5k
b3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBFR0xpbnQgaWQsIGNvbnN0IEludFNpemUmIHNp
emUpCi17Ci0gICAgVmlzdWFsSUQgdmlzdWFsSWQgPSBzdGF0aWNfY2FzdDxWaXN1YWxJRD4oaWQp
OwotCi0gICAgaWYgKCF2aXN1YWxJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRUdMIGhh
cyBzdWdnZXN0ZWQgYSB2aXN1YWwgaWQsIHNvIGdldCB0aGUgcmVzdCBvZiB0aGUgdmlzdWFsIGlu
Zm8gZm9yIHRoYXQgaWQuCi0gICAgWFZpc3VhbEluZm8gdmlzdWFsSW5mb1RlbXBsYXRlOwotICAg
IG1lbXNldCgmdmlzdWFsSW5mb1RlbXBsYXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsKLSAg
ICB2aXN1YWxJbmZvVGVtcGxhdGUudmlzdWFsaWQgPSB2aXN1YWxJZDsKLSAgICBpbnQgbWF0Y2hp
bmdDb3VudCA9IDA7Ci0gICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiBtYXRjaGluZ1Zpc3VhbHMg
PSBhZG9wdFB0cihYR2V0VmlzdWFsSW5mbyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgp
LCBWaXN1YWxJRE1hc2ssICZ2aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRjaGluZ0NvdW50KSk7Ci0g
ICAgWFZpc3VhbEluZm8qIGZvdW5kVmlzdWFsID0gMDsKLQotICAgIGlmIChtYXRjaGluZ1Zpc3Vh
bHMpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGk8IG1hdGNoaW5nQ291bnQ7IGkrKykgewot
ICAgICAgICAgICAgWFZpc3VhbEluZm8qIHRlbXAgPSAmbWF0Y2hpbmdWaXN1YWxzW2ldOwotCi0g
ICAgICAgICAgICBpZiAobV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBv
cnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhS
ZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIHRl
bXAtPnZpc3VhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVj
dC5hbHBoYU1hc2sgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVmlzdWFsID0gdGVt
cDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGVtcC0+ZGVwdGggPT0gMzIpIHsKLSAgICAgICAg
ICAgICAgICBmb3VuZFZpc3VhbCA9IHRlbXA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZm91bmRWaXN1YWwpCi0gICAgICAg
ICAgICBjcmVhdGVPZmZTY3JlZW5XaW5kb3coaGFuZGxlSWQsICpmb3VuZFZpc3VhbCwgc2l6ZSk7
Ci0gICAgfQotfQotI2VuZGlmCi0KLSNlbmRpZgotCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6
ZGVzdHJveVdpbmRvdyhjb25zdCB1aW50MzJfdCB3aW5kb3dJZCkKLXsKLSAgICBpZiAoIXdpbmRv
d0lkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbV9zaGFyZWRS
ZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKLSAgICBpZiAoIWRpc3BsYXkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIHdpbmRvd0lkKTsKLX0KLQotRGlzcGxh
eSogWDExT2ZmU2NyZWVuV2luZG93OjpuYXRpdmVTaGFyZWREaXNwbGF5KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKLX0KLQotYm9vbCBYMTFP
ZmZTY3JlZW5XaW5kb3c6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQo
KTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmggU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzJkMzNmLi4wMDAwMDAwCi0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBYMTFXaW5kb3dSZXNvdXJjZXNfaAotI2RlZmluZSBYMTFXaW5kb3dSZXNvdXJjZXNfaAot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgIk93blB0clgxMS5oIgotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0KLSNpZiBVU0UoRUdMKQotI2luY2x1ZGUg
PG9wZW5nbC9HTERlZnMuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNv
bXBvc2l0ZS5oPgotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZFgxMVJlc291cmNlcyA6IHB1Ymxp
YyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRY
MTFSZXNvdXJjZXMpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkWDEx
UmVzb3VyY2VzPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJl
c291cmNlKQotICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IG5ldyBTaGFyZWRY
MTFSZXNvdXJjZXMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRS
ZXNvdXJjZS0+cmVmKCk7Ci0KLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVk
UmVzb3VyY2UpOwotICAgIH0KLQotICAgIHZvaWQgZGVyZWYoKQotICAgIHsKLSAgICAgICAgaWYg
KGRlcmVmQmFzZSgpKSB7Ci0gICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsK
LSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgRGlzcGxh
eSogeDExRGlzcGxheSgpCi0gICAgewotICAgICAgICBpZiAoIW1fZGlzcGxheSkgewotICAgICAg
ICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOwotICAgICAgICAgICAgaWYgKCFtX2Rp
c3BsYXkpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIGNvbm5l
Y3Rpb24gd2l0aCBYIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9
Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgICAgICAgICBpZiAobV9kaXNwbGF5KSB7
Ci0gICAgICAgICAgICAgICAgaW50IGV2ZW50QmFzZXAsIGVycm9yQmFzZXA7Ci0gICAgICAgICAg
ICAgICAgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVlcnlFeHRlbnNpb24o
bV9kaXNwbGF5LCAmZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApOwotICAgICAgICAgICAgfQotI2Vu
ZGlmCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbV9kaXNwbGF5OwotICAgIH0KLQotICAg
IFdpbmRvdyBnZXRYV2luZG93KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV93aW5kb3cpIHsKLSAg
ICAgICAgICAgIERpc3BsYXkqIGRweSA9IHgxMURpc3BsYXkoKTsKLSAgICAgICAgICAgIFhTZXRX
aW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVzLm92ZXJy
aWRlX3JlZGlyZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gWENyZWF0ZVNpbXBs
ZVdpbmRvdyhkcHksIFhEZWZhdWx0Um9vdFdpbmRvdyhkcHkpLCAtMSwgLTEsIDEsIDEsIDAsIEJs
YWNrUGl4ZWwoZHB5LCAwKSwgV2hpdGVQaXhlbChkcHksIDApKTsKLSAgICAgICAgICAgIC8vIEZy
b20gaHR0cDovL3Ryb25jaGUuY29tL2d1aS94L3hsaWIvd2luZG93L2F0dHJpYnV0ZXMvCi0gICAg
ICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBDV092ZXJyaWRl
UmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKLSAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dp
bmRvdyk7Ci0KLSAgICAgICAgICAgIGlmICghbV93aW5kb3cpIHsKLSAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHJvb3Qgd2luZG93LiIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIG1fd2luZG93OwotICAgIH0KLQotICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9u
U3VwcG9ydGVkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N1cHBvcnRzWFJlbmRl
ckV4dGVuc2lvbjsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBTaGFyZWRYMTFSZXNvdXJjZXMo
KQotICAgICAgICA6IG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKGZhbHNlKQotICAgICAgICAs
IG1fd2luZG93KDApCi0gICAgICAgICwgbV9kaXNwbGF5KDApCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgflNoYXJlZFgxMVJlc291cmNlcygpCi0gICAgewotICAgICAgICBpZiAoIW1fZGlz
cGxheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV93aW5kb3cpIHsKLSAg
ICAgICAgICAgIFhVbm1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKLSAgICAgICAgICAg
IFhEZXN0cm95V2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOwotICAgICAgICAgICAgbV93aW5k
b3cgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOwot
ICAgICAgICBtX2Rpc3BsYXkgPSAwOwotICAgIH0KLQotICAgIHN0YXRpYyBTaGFyZWRYMTFSZXNv
dXJjZXMqIG1fc3RhdGljU2hhcmVkUmVzb3VyY2U7Ci0gICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRl
ckV4dGVuc2lvbjsKLSAgICBXaW5kb3cgbV93aW5kb3c7Ci0gICAgRGlzcGxheSogbV9kaXNwbGF5
OwotfTsKLQotY2xhc3MgWDExT2ZmU2NyZWVuV2luZG93IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShYMTFPZmZTY3JlZW5XaW5kb3cpOwotCi1wdWJsaWM6Ci0gICAgWDExT2ZmU2NyZWVuV2lu
ZG93KCk7Ci0gICAgdmlydHVhbCB+WDExT2ZmU2NyZWVuV2luZG93KCk7Ci0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBj
b25zdCBYVmlzdWFsSW5mbyYsIGNvbnN0IEludFNpemUmID0gSW50U2l6ZSgxLCAxKSk7Ci0jaWYg
VVNFKEVHTCkKLSAgICB2b2lkIGNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCosIGNvbnN0
IEVHTGludCwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKDEsIDEpKTsKLSNlbmRpZgotI2VuZGlm
Ci0gICAgdm9pZCBkZXN0cm95V2luZG93KGNvbnN0IHVpbnQzMl90KTsKLSAgICB2b2lkIHJlU2l6
ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgY29uc3QgdWludDMyX3QpOwotICAgIERpc3BsYXkqIG5h
dGl2ZVNoYXJlZERpc3BsYXkoKSBjb25zdDsKLSAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1
cHBvcnRlZCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxTaGFyZWRYMTFSZXNvdXJj
ZXM+IG1fc2hhcmVkUmVzb3VyY2VzOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYg
LS1naXQgVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYgVG9vbHMvcW1h
a2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKaW5kZXggY2M5MDcyZC4uZTM5YzBjMiAx
MDA2NDQKLS0tIFRvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBU
b29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtMTM4LDcgKzEzOCw3
IEBAIGRlZmluZVRlc3QoZGV0ZWN0RmVhdHVyZXMpIHsKICAgICB1c2U/KDNkX2dyYXBoaWNzKSB7
CiAgICAgICAgIG1hYzogV0VCS0lUX0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFjZQogICAg
ICAgICB3aW4zMjpjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMik6IFdFQktJVF9DT05GSUcg
Kz0gdXNlX2dyYXBoaWNzX3N1cmZhY2UKLSAgICAgICAgbGludXgtKjpjb250YWlucyhXRUJLSVRf
Q09ORklHLCBoYXZlX2dseCk6Y29udGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV94Y29tcG9zaXRl
KTpjb250YWlucyhXRUJLSVRfQ09ORklHLCBoYXZlX3hyZW5kZXIpOiBXRUJLSVRfQ09ORklHICs9
IHVzZV9ncmFwaGljc19zdXJmYWNlCisgICAgICAgIGxpbnV4LSo6Y29udGFpbnMoV0VCS0lUX0NP
TkZJRywgaGF2ZV9nbHgpOmNvbnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfeGNvbXBvc2l0ZSk6
Y29udGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV94cmVuZGVyKTogV0VCS0lUX0NPTkZJRyArPSB1
c2VfZ3JhcGhpY3Nfc3VyZmFjZSB1c2VfZ2x4CiAgICAgfQogCiAgICAgIyBTbGlkZXIgVG91Y2gg
aXMgc2Vuc2libGUgdG8gdXNlIHdoZW4gY29tcGlsaW5nIFdlYktpdDIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186453</attachid>
            <date>2013-02-04 13:58:03 -0800</date>
            <delta_ts>2013-02-06 12:37:53 -0800</delta_ts>
            <desc>patchv2</desc>
            <filename>glxreview.patch</filename>
            <type>text/plain</type>
            <size>58722</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGY2YzdiNWMuLmM3ODJkZGMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEz
LTAyLTA0ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtRdF1bV2ViR0xdIFNoYXJlIHRoZSBjb21tb24gY29kZSBiZXR3ZWVu
IEdyYXBoaWNzU3VyZmFjZUdMWCBhbmQgWDExV2luZG93UmVzb3VyY2VzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBX
ZWJHTCB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IGR1cGxpY2F0ZSBj
b2RlIGluIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlR0xY
LiBObyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVHTENvbmZpZ1NlbGVjdG9yOjpwaXhtYXBDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaDoKKyAgICAgICAg
KEVHTENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oOgorICAgICAgICAo
V2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OkdMWENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OkdMWENvbmZpZ1NlbGVjdG9yOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6Y3JlYXRlU3VyZmFjZUNvbmZpZyk6CisgICAgICAg
IChHTFhDb25maWdTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUFSQkV4
dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6R0xYT2Zm
U2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRm
b3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4
dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWENvbnRleHQuaDoKKyAgICAgICAgKEdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhQQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oOgorICAgICAgICAoR0xYVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChHTFhQQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6R3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpp
bml0aWFsaXplKToKKyAgICAgICAgKEdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjcmVhdGVQaXhtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpmbGFncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICBObyBu
ZXcgZnVuY3Rpb25hbGl0eSBhZGRlZC4gTWFkZSBjaGFuZ2VzIHRvIHRha2UgdGhlIGNvbW1vbiBj
b2RlIGludG8gdXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMVdpbmRvd1Jlc291cmNlcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9u
OjpEaXNwbGF5Q29ubmVjdGlvbik6CisgICAgICAgIChEaXNwbGF5Q29ubmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5Q29ubmVjdGlvbjo6fkRpc3BsYXlDb25uZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9uOjpkaXNwbGF5KToKKyAgICAgICAgKE9m
ZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmU2NyZWVuUm9vdFdpbmRv
dzo6T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3JlZW5Sb290
V2luZG93Ojp+T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3Jl
ZW5Sb290V2luZG93Ojpyb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6
cmVzaXplV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2Ny
ZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6ZGVzdHJveVdpbmRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6WDExSGVscGVyOjpvZmZzY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJv
cik6CisgICAgICAgIChYMTFIZWxwZXIpOgorICAgICAgICAoU2NvcGVkWFBpeG1hcENyZWF0aW9u
RXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVy
cm9ySGFuZGxlcjo6U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6flNjb3BlZFhQaXht
YXBDcmVhdGlvbkVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRYUGl4bWFw
Q3JlYXRpb25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24pOgorICAgICAgICBNb3ZlZCBj
b21tb24gY29kZSBmcm9tIEdyYXBoaWNzU3VyZmFjZUdMWCB0byBYMTFIZWxwZXIuCisKIDIwMTMt
MDItMDQgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgoKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCA1YjE2OGQzLi4wOGUzNTgxIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC0xMzEsOSArMTMxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCi0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZv
cm1hdC5jcHAKIAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2Rl
ckNhaXJvLmNwcApAQCAtMzE1LDggKzMxMiw3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJm
YWNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NT
dXJmYWNlR0xYLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
V2luZG93UmVzb3VyY2VzLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvWDExSGVscGVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0uY3BwCiAgICAgKQpAQCAtMzI3LDYgKzMyMywxMiBAQCBpZiAoV1RG
X1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb250ZXh0LmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTFN1cmZhY2UuY3BwCiAgICAgICAgICkKKyAgICBlbHNlICgpCisgICAgICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisgICAgICAgICkKICAgICBl
bmRpZiAoKQogCiAgICAgaWYgKFdURl9VU0VfT1BFTkdMX0VTXzIpCmRpZmYgLS1naXQgU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGU4ZjZm
YzEuLjk2M2VjZmEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC00MTk0LDcgKzQxOTQsMTIgQEAgdXNlPyhHUkFQSElD
U19TVVJGQUNFKSB7CiAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvd2luL0dyYXBoaWNzU3VyZmFjZVdpbi5jcHAKICAgICB9CiAgICAgaGF2ZT8oWENPTVBPU0lU
RSkgewotICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
cmFwaGljc1N1cmZhY2VHTFguY3BwCisgICAgICAgIEhFQURFUlMgKz0gXAorICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5oIFwKKyAgICAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oCisgICAg
ICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L1gxMUhlbHBlci5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
Y3BwCmluZGV4IDI2ZDU2YTUuLmU2NzExZjggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApAQCAtMzMs
MTMgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQogICAgIDogR0xQbGF0Zm9ybVN1cmZhY2Uo
KQogewotICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgTmF0aXZlT2ZmU2NyZWVu
V2luZG93KCkpOwotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgRUdMQ29uZmln
U2VsZWN0b3IobV9uYXRpdmVSZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgpKSk7CisgICAg
bV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdTZWxlY3RvcihOYXRpdmVX
cmFwcGVyOjpuYXRpdmVEaXNwbGF5KCkpKTsKICAgICBtX3NoYXJlZERpc3BsYXkgPSBtX2NvbmZp
Z1NlbGVjdG9yLT5kaXNwbGF5KCk7CiAKICAgICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9O
T19ESVNQTEFZKSB7CiAgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwotICAgICAg
ICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNTcsNyArNTUsNyBAQCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFu
c3BvcnRTdXJmYWNlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbmF0aXZlUmVz
b3VyY2UtPmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsIHZpc3VhbElkKTsK
KyAgICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxl
LCB2aXN1YWxJZCk7CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CiAgICAgICAgIGRlc3Ry
b3koKTsKQEAgLTEwNCw3ICsxMDIsNyBAQCB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6
OnN3YXBCdWZmZXJzKCkKIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgp
CiB7CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKLSAgICBtX25hdGl2ZVJlc291
cmNlLT5kZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBOYXRpdmVXcmFwcGVyOjpk
ZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKICAgICBmcmVlRUdMUmVzb3VyY2VzKCk7CiAg
ICAgbV9idWZmZXJIYW5kbGUgPSAwOwogfQpAQCAtMTI4LDcgKzEyNiw3IEBAIHZvaWQgRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNlcygpCiB2b2lkIEVHTFdpbmRvd1Ry
YW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB7CiAg
ICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwotICAgIG1fbmF0aXZl
UmVzb3VyY2UtPnJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2J1ZmZlckhhbmRsZSk7CisgICAgTmF0
aXZlV3JhcHBlcjo6cmVzaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuaAppbmRleCA1YzI4OGE5Li4yZWE3MDQyIDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaAorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
aApAQCAtMzEsMTMgKzMxLDEzIEBACiAjaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKICNp
bmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgogCi0jaW5jbHVkZSA8Z2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5oPgorI2luY2x1ZGUgPGdseC9YMTFIZWxwZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXR5cGVkZWYgWDExT2ZmU2NyZWVuV2luZG93IE5hdGl2ZU9mZlNjcmVlbldpbmRv
dzsKK3R5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7CiAKIC8vIENvbnRlbnRzIG9mIHRo
ZSBzdXJmYWNlIGFyZSBiYWNrZWQgYnkgbmF0aXZlIHdpbmRvdy4KIGNsYXNzIEVHTFdpbmRvd1Ry
YW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgewpAQCAtNTIsNyArNTIs
NiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBmcmVlRUdMUmVzb3VyY2VzKCk7Ci0g
ICAgT3duUHRyPE5hdGl2ZU9mZlNjcmVlbldpbmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsKICAgICBP
d25QdHI8RUdMQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogCmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZp
Z1NlbGVjdG9yLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWENvbmZpZ1NlbGVjdG9yLmgKaW5kZXggZGQxYjYyYi4uZWE3MzkyMSAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxl
Y3Rvci5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R0xYQ29uZmlnU2VsZWN0b3IuaApAQCAtMjYsMjEgKzI2LDMwIEBACiAjaWZuZGVmIEdMWENvbmZp
Z1NlbGVjdG9yX2gKICNkZWZpbmUgR0xYQ29uZmlnU2VsZWN0b3JfaAogCi0jaW5jbHVkZSAiWDEx
V2luZG93UmVzb3VyY2VzLmgiCi0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShHTFgpCiAKKyNpbmNsdWRlICJYMTFIZWxwZXIuaCIKKyNpbmNsdWRlIDxvcGVuZ2wvR0xE
ZWZzLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGludCBjbGllbnRBdHRyaWJ1
dGVzW10gPSB7CisgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaXMgYSBzZXQga2V5IHZhbHVlIHBh
aXJzIHN0b3JlZCBpbiBhIHNpbXBsZSBhcnJheS4KKyAgICBHTFhfTEVWRUwsICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLAorICAgIHN0YXRpY19jYXN0PGludD4oR0xYX1ZJU1VBTF9JRCksICAg
IDAsCisgICAgR0xYX0RSQVdBQkxFX1RZUEUsICAgICAgICAgICAgICAgICAgR0xYX1BJWE1BUF9C
SVQsCisgICAgR0xYX0JJTkRfVE9fVEVYVFVSRV9UQVJHRVRTX0VYVCwgICAgR0xYX1RFWFRVUkVf
MkRfQklUX0VYVCwKKyAgICBHTFhfQklORF9UT19URVhUVVJFX1JHQkFfRVhULCAgICAgICBUUlVF
LAorICAgIDAKK307CisKIGNsYXNzIEdMWENvbmZpZ1NlbGVjdG9yIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHTFhDb25maWdTZWxlY3Rvcik7CiAKIHB1YmxpYzoKLSAgICBHTFhDb25maWdT
ZWxlY3RvcihEaXNwbGF5KiB4RGlzcGxheSwgYm9vbCBzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24p
CisgICAgR0xYQ29uZmlnU2VsZWN0b3IoKQogICAgICAgICA6IG1fcGJ1ZmZlckZCQ29uZmlnKDAp
CiAgICAgICAgICwgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKDApCi0gICAgICAgICwgbV9zaGFy
ZWREaXNwbGF5KHhEaXNwbGF5KQotICAgICAgICAsIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9u
KHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikKICAgICB7CiAgICAgfQogCkBAIC01Myw3ICs2Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFzdXJmYWNlQ29udGV4dENvbmZpZygpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIGdsWEdldFZpc3VhbEZyb21GQkNvbmZp
ZyhtX3NoYXJlZERpc3BsYXksIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyk7CisgICAgICAgIHJl
dHVybiBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCks
IG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyk7CiAgICAgfQogCiAgICAgR0xYRkJDb25maWcgcEJ1
ZmZlckNvbnRleHRDb25maWcoKQpAQCAtNzAsMTAgKzc5LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIE5vbmUKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGludCBudW1BdmFpbGFi
bGVDb25maWdzOwotICAgICAgICAgICAgT3duUHRyWDExPEdMWEZCQ29uZmlnPiB0ZW1wKGdsWENo
b29zZUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgRGVmYXVsdFNjcmVlbihtX3NoYXJlZERpc3Bs
YXkpLCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29uZmlncykpOwotICAgICAgICAgICAgaWYg
KG51bUF2YWlsYWJsZUNvbmZpZ3MpCi0gICAgICAgICAgICAgICAgbV9wYnVmZmVyRkJDb25maWcg
PSB0ZW1wWzBdOworICAgICAgICAgICAgbV9wYnVmZmVyRkJDb25maWcgPSBmaW5kTWF0Y2hpbmdD
b25maWcoYXR0cmlidXRlcyk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbV9wYnVmZmVy
RkJDb25maWc7CkBAIC04Nyw2ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3N1
cmZhY2VDb250ZXh0RkJDb25maWc7CiAgICAgfQogCisgICAgR0xYRkJDb25maWcgc3VyZmFjZUNs
aWVudENvbmZpZyhpbnQgZGVwdGgsIFZpc3VhbElEIGlkKQorICAgIHsKKyAgICAgICAgY2xpZW50
QXR0cmlidXRlc1szXSA9IHN0YXRpY19jYXN0PGludD4oaWQpOworICAgICAgICBjbGllbnRBdHRy
aWJ1dGVzWzhdID0gZGVwdGggPT0gMzIgPyBHTFhfQklORF9UT19URVhUVVJFX1JHQkFfRVhUIDog
R0xYX0JJTkRfVE9fVEVYVFVSRV9SR0JfRVhUOworCisgICAgICAgIHJldHVybiBmaW5kTWF0Y2hp
bmdDb25maWcoY2xpZW50QXR0cmlidXRlcywgZGVwdGgsIGlkKTsKKyAgICB9CisKICAgICB2b2lk
IHJlc2V0KCkKICAgICB7CiAgICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gMDsKQEAgLTExMCw0
MyArMTI0LDQzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb25lCiAgICAgICAgIH07CiAKKyAg
ICAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnID0gZmluZE1hdGNoaW5nQ29uZmlnKGF0dHJp
YnV0ZXMpOworICAgIH0KKworICAgIEdMWEZCQ29uZmlnIGZpbmRNYXRjaGluZ0NvbmZpZyhjb25z
dCBpbnQgYXR0cmlidXRlc1tdLCBpbnQgZGVwdGggPSAzMiwgVmlzdWFsSUQgaWQgPSAwKQorICAg
IHsKICAgICAgICAgaW50IG51bUF2YWlsYWJsZUNvbmZpZ3M7Ci0gICAgICAgIE93blB0clgxMTxH
TFhGQkNvbmZpZz4gdGVtcChnbFhDaG9vc2VGQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIERlZmF1
bHRTY3JlZW4obV9zaGFyZWREaXNwbGF5KSwgYXR0cmlidXRlcywgJm51bUF2YWlsYWJsZUNvbmZp
Z3MpKTsKKyAgICAgICAgT3duUHRyWDExPEdMWEZCQ29uZmlnPiB0ZW1wKGdsWENob29zZUZCQ29u
ZmlnKFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKFgxMUhlbHBlcjo6
bmF0aXZlRGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bUF2YWlsYWJsZUNvbmZpZ3MpKTsKIAot
ICAgICAgICBpZiAoIW51bUF2YWlsYWJsZUNvbmZpZ3MpIHsKLSAgICAgICAgICAgIG1fc3VyZmFj
ZUNvbnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKCFudW1BdmFpbGFibGVDb25maWdzIHx8ICF0ZW1wLmdldCgpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAgICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiBzY29wZWRWaXN1
YWxJbmZvOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF2YWlsYWJsZUNvbmZpZ3M7
ICsraSkgewotICAgICAgICAgICAgc2NvcGVkVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21G
QkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbaV0pOworICAgICAgICAgICAgc2NvcGVkVmlz
dWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3Bs
YXkoKSwgdGVtcFtpXSk7CiAgICAgICAgICAgICBpZiAoIXNjb3BlZFZpc3VhbEluZm8uZ2V0KCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChpZCAmJiBzY29w
ZWRWaXN1YWxJbmZvLT5kZXB0aCA9PSBkZXB0aCAmJiBzY29wZWRWaXN1YWxJbmZvLT52aXN1YWxp
ZCA9PSBpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVtcFtpXTsKKwogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQotICAgICAgICAgICAgaWYgKG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9u
KSB7Ci0gICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJG
aW5kVmlzdWFsRm9ybWF0KG1fc2hhcmVkRGlzcGxheSwgc2NvcGVkVmlzdWFsSW5mby0+dmlzdWFs
KTsKLSAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFz
ayA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnID0g
dGVtcFtpXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKFgxMUhlbHBlcjo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkp
IHsKKyAgICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZp
bmRWaXN1YWxGb3JtYXQoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIHNjb3BlZFZpc3VhbElu
Zm8tPnZpc3VhbCk7CisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBkZXB0aCA9PSAzMiAm
JiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGVtcFtpXTsKICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgaWYgKCFtX3N1
cmZhY2VDb250ZXh0RkJDb25maWcgJiYgc2NvcGVkVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsK
LSAgICAgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSB0ZW1wW2ldOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjb3Bl
ZFZpc3VhbEluZm8tPmRlcHRoID09IGRlcHRoKQorICAgICAgICAgICAgICAgIHJldHVybiB0ZW1w
W2ldOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRGlkIG5vdCBmaW5kIGFueSB2aXN1YWwgc3Vw
cG9ydGluZyBhbHBoYSwgc2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUgY29uZmlnLgotICAgICAg
ICBpZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZykKLSAgICAgICAgICAgIG1fc3VyZmFjZUNv
bnRleHRGQkNvbmZpZyA9IHRlbXBbMF07CisgICAgICAgIHJldHVybiB0ZW1wWzBdOwogICAgIH0K
IAogICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOwogICAgIEdMWEZCQ29uZmlnIG1f
c3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKLSAgICBEaXNwbGF5KiBtX3NoYXJlZERpc3BsYXk7Ci0g
ICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKIH07CiAKIH0KZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5j
cHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRl
eHQuY3BwCmluZGV4IGE5ZjMyMmQuLjhmNDA0NjMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcApAQCAt
MjgsNiArMjgsOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0Uo
R0xYKQogCisjaW5jbHVkZSAiWDExSGVscGVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dHlwZWRlZiBHTFhDb250ZXh0ICgqR0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DKShEaXNw
bGF5KiwgR0xYRkJDb25maWcsIEdMWENvbnRleHQsIEJvb2wsIGNvbnN0IGludCopOwpAQCAtMzgs
MjAgKzQwLDE5IEBAIHN0YXRpYyBpbnQgQXR0cmlic1tdID0gewogICAgIEdMWF9MT1NFX0NPTlRF
WFRfT05fUkVTRVRfQVJCLAogICAgIDAgfTsKIAotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFSQkV4
dGVuc2lvbnMoRGlzcGxheSogZGlzcGxheSkKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVBUkJFeHRl
bnNpb25zKCkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgIGlm
IChpbml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5pdGlhbGl6ZWQgPSB0cnVl
OwotICAgIGlmIChHTFBsYXRmb3JtQ29udGV4dDo6c3VwcG9ydHNHTFhFeHRlbnNpb24oZGlzcGxh
eSwgIkdMWF9BUkJfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyIpKQorICAgIGlmIChHTFBsYXRm
b3JtQ29udGV4dDo6c3VwcG9ydHNHTFhFeHRlbnNpb24oWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5
KCksICJHTFhfQVJCX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MiKSkKICAgICAgICAgZ2xYQ3Jl
YXRlQ29udGV4dEF0dHJpYnNBUkIgPSByZWludGVycHJldF9jYXN0PEdMWENSRUFURUNPTlRFWFRB
VFRSSUJTQVJCUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBH
THVieXRlKj4oImdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCIikpKTsKIH0KIAogR0xYT2ZmU2Ny
ZWVuQ29udGV4dDo6R0xYT2ZmU2NyZWVuQ29udGV4dCgpCiAgICAgOiBHTFBsYXRmb3JtQ29udGV4
dCgpCi0gICAgLCBtX2Rpc3BsYXkoMCkKIHsKIH0KIApAQCAtNjAsMTcgKzYxLDE3IEBAIGJvb2wg
R0xYT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFj
ZSkKICAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZGlz
cGxheSA9IHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKTsKLSAgICBpZiAoIW1fZGlzcGxheSkKKyAg
ICBEaXNwbGF5KiB4MTFEaXNwbGF5ID0gc3VyZmFjZS0+c2hhcmVkRGlzcGxheSgpOworICAgIGlm
ICgheDExRGlzcGxheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR0xYRkJDb25maWcg
Y29uZmlnID0gc3VyZmFjZS0+Y29uZmlndXJhdGlvbigpOwogCiAgICAgaWYgKGNvbmZpZykgewot
ICAgICAgICBpbml0aWFsaXplQVJCRXh0ZW5zaW9ucyhtX2Rpc3BsYXkpOworICAgICAgICBpbml0
aWFsaXplQVJCRXh0ZW5zaW9ucygpOwogCiAgICAgICAgIGlmIChnbFhDcmVhdGVDb250ZXh0QXR0
cmlic0FSQikKLSAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0ZUNvbnRleHRB
dHRyaWJzQVJCKG1fZGlzcGxheSwgY29uZmlnLCAwLCB0cnVlLCBBdHRyaWJzKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCKHgxMURpc3Bs
YXksIGNvbmZpZywgMCwgdHJ1ZSwgQXR0cmlicyk7CiAKICAgICAgICAgaWYgKG1fY29udGV4dEhh
bmRsZSkgewogICAgICAgICAgICAgLy8gVGhlIEdMWF9BUkJfY3JlYXRlX2NvbnRleHRfcm9idXN0
bmVzcyBzcGVjIHJlcXVpcmVzIHRoYXQgYSBjb250ZXh0IGNyZWF0ZWQgd2l0aApAQCAtODAsMTEg
KzgxLDExIEBAIGJvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3Jt
U3VyZmFjZSogc3VyZmFjZSkKICAgICAgICAgICAgIGlmIChwbGF0Zm9ybU1ha2VDdXJyZW50KHN1
cmZhY2UpICYmIEdMUGxhdGZvcm1Db250ZXh0OjpzdXBwb3J0c0dMRXh0ZW5zaW9uKCJHTF9BUkJf
cm9idXN0bmVzcyIpKQogICAgICAgICAgICAgICAgIG1fcmVzZXRMb3N0Q29udGV4dCA9IHRydWU7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ2xYRGVzdHJveUNvbnRleHQobV9k
aXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOworICAgICAgICAgICAgICAgIGdsWERlc3Ryb3lDb250
ZXh0KHgxMURpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIW1fY29udGV4dEhhbmRsZSkKLSAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWENy
ZWF0ZU5ld0NvbnRleHQobV9kaXNwbGF5LCBjb25maWcsIEdMWF9SR0JBX1RZUEUsIDAsIHRydWUp
OworICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlTmV3Q29udGV4dCh4MTFE
aXNwbGF5LCBjb25maWcsIEdMWF9SR0JBX1RZUEUsIDAsIHRydWUpOwogCiAgICAgICAgIGlmICht
X2NvbnRleHRIYW5kbGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwOSwxNCArMTEw
LDIxIEBAIGJvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudChHTFBs
YXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKIAogdm9pZCBHTFhPZmZTY3JlZW5Db250ZXh0OjpwbGF0
Zm9ybVJlbGVhc2VDdXJyZW50KCkKIHsKLSAgICBnbFhNYWtlQ3VycmVudChtX2Rpc3BsYXksIDAs
IDApOwotICAgIG1fZGlzcGxheSA9IDA7CisgICAgRGlzcGxheSogeDExRGlzcGxheSA9IFgxMUhl
bHBlcjo6bmF0aXZlRGlzcGxheSgpOworICAgIGlmICgheDExRGlzcGxheSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZ2xYTWFrZUN1cnJlbnQoeDExRGlzcGxheSwgMCwgMCk7CiB9CiAKIHZvaWQg
R0xYT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcygpCiB7CisgICAgRGlzcGxheSogeDEx
RGlzcGxheSA9IFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpOworICAgIGlmICgheDExRGlzcGxh
eSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKLSAgICAgICAg
Z2xYRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOworICAgICAgICBn
bFhEZXN0cm95Q29udGV4dCh4MTFEaXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOwogCiAgICAgbV9j
b250ZXh0SGFuZGxlID0gMDsKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKaW5kZXggY2JkZTBlZi4uNDQ0ZTdm
MiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HTFhDb250ZXh0LmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhDb250ZXh0LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIHZvaWQgZnJlZVJlc291cmNlcygpOwotICAgIERpc3BsYXkqIG1fZGlzcGxheTsKIH07
CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IDgwZmMyNjIuLmMwM2MzZDAgMTAwNjQ0Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFj
ZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
TFhTdXJmYWNlLmNwcApAQCAtMzYsMTUgKzM2LDggQEAgc3RhdGljIGNvbnN0IGludCBwYnVmZmVy
QXR0cmlidXRlc1tdID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0gK
IEdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UoKQogICAgIDogR0xQbGF0
Zm9ybVN1cmZhY2UoKQogewotICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgWDEx
T2ZmU2NyZWVuV2luZG93KCkpOwotICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fbmF0aXZlUmVzb3Vy
Y2UtPm5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKLQotICAgIGlmICghbV9zaGFyZWREaXNwbGF5KSB7
Ci0gICAgICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhDb25maWdTZWxl
Y3RvcihtX3NoYXJlZERpc3BsYXksIG1fbmF0aXZlUmVzb3VyY2UtPmlzWFJlbmRlckV4dGVuc2lv
blN1cHBvcnRlZCgpKSk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0gWDExSGVscGVyOjpuYXRpdmVE
aXNwbGF5KCk7CisgICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhDb25maWdT
ZWxlY3RvcigpKTsKICAgICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IHZpc0luZm8obV9jb25maWdT
ZWxlY3Rvci0+dmlzdWFsSW5mbygpKTsKIAogICAgIGlmICghdmlzSW5mby5nZXQoKSkgewpAQCAt
NTIsNyArNDUsNyBAQCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbmF0aXZlUmVzb3VyY2UtPmNyZWF0ZU9m
ZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsICp2aXNJbmZvLmdldCgpKTsKKyAgICBYMTFI
ZWxwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsICp2aXNJbmZvLmdl
dCgpKTsKIAogICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKICAgICAgICAgZGVzdHJveSgpOwpA
QCAtNzQsNyArNjcsNyBAQCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYVHJhbnNwb3J0U3VyZmFj
ZTo6Y29uZmlndXJhdGlvbigpCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5
KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB7CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdl
b21ldHJ5KG5ld1JlY3QpOwotICAgIG1fbmF0aXZlUmVzb3VyY2UtPnJlU2l6ZVdpbmRvdyhuZXdS
ZWN0LCBtX2RyYXdhYmxlKTsKKyAgICBYMTFIZWxwZXI6OnJlc2l6ZVdpbmRvdyhuZXdSZWN0LCBt
X2RyYXdhYmxlKTsKICAgICAvLyBGb3JjZSByZXNpemUgb2YgR0wgc3VyZmFjZSBhZnRlciB3aW5k
b3cgcmVzaXplLgogICAgIGdsWFN3YXBCdWZmZXJzKHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJs
ZSk7CiB9CkBAIC05OSw3ICs5Miw3IEBAIHZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJv
eSgpCiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKIAogICAgIGlmIChtX2J1ZmZl
ckhhbmRsZSkgewotICAgICAgICBtX25hdGl2ZVJlc291cmNlLT5kZXN0cm95V2luZG93KG1fYnVm
ZmVySGFuZGxlKTsKKyAgICAgICAgWDExSGVscGVyOjpkZXN0cm95V2luZG93KG1fYnVmZmVySGFu
ZGxlKTsKICAgICAgICAgbV9idWZmZXJIYW5kbGUgPSAwOwogICAgICAgICBtX2RyYXdhYmxlID0g
MDsKICAgICB9CkBAIC0xMjEsMTUgKzExNCw5IEBAIEdMWFBCdWZmZXI6On5HTFhQQnVmZmVyKCkK
IAogdm9pZCBHTFhQQnVmZmVyOjppbml0aWFsaXplKCkKIHsKLSAgICBtX25hdGl2ZVJlc291cmNl
ID0gYWRvcHRQdHIobmV3IFgxMU9mZlNjcmVlbldpbmRvdygpKTsKLSAgICBtX3NoYXJlZERpc3Bs
YXkgPSBtX25hdGl2ZVJlc291cmNlLT5uYXRpdmVTaGFyZWREaXNwbGF5KCk7Ci0KLSAgICBpZiAo
IW1fc2hhcmVkRGlzcGxheSkgewotICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX3NoYXJlZERpc3BsYXkgPSBYMTFIZWxwZXI6
Om5hdGl2ZURpc3BsYXkoKTsKIAotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcg
R0xYQ29uZmlnU2VsZWN0b3IobV9zaGFyZWREaXNwbGF5LCBtX25hdGl2ZVJlc291cmNlLT5pc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9w
dFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7CiAgICAgR0xYRkJDb25maWcgY29uZmlnID0g
bV9jb25maWdTZWxlY3Rvci0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKIAogICAgIGlmICghY29u
ZmlnKSB7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5oCmluZGV4IDg0NzE1YzEuLjllNzczMmEgMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5o
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3Vy
ZmFjZS5oCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5o
IgogI2luY2x1ZGUgIkdMWENvbmZpZ1NlbGVjdG9yLmgiCi0jaW5jbHVkZSAiWDExV2luZG93UmVz
b3VyY2VzLmgiCisjaW5jbHVkZSAiWDExSGVscGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDcsNyArNDcsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFs
aXplKCk7Ci0gICAgT3duUHRyPFgxMU9mZlNjcmVlbldpbmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsK
ICAgICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogI2Vu
ZGlmCkBAIC02NCw3ICs2Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFs
aXplKCk7CiAgICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7Ci0gICAgT3duUHRyPFgxMU9mZlNjcmVl
bldpbmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsKICAgICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+
IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5j
cHAKaW5kZXggYTU3YjYzOC4uYTM4M2NjZiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNl
R0xYLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAx
MyBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsMTkgKzMxLDE1IEBACiAj
aW5jbHVkZSA8UUd1aUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgogI2lu
Y2x1ZGUgPHFwYS9xcGxhdGZvcm1uYXRpdmVpbnRlcmZhY2UuaD4KLSNlbGlmIFBMQVRGT1JNKEVG
TCkKLSNpbmNsdWRlIDxHTC9nbC5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxHTC9nbGV4dC5oPgog
I2luY2x1ZGUgPEdML2dseC5oPgotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaW5jbHVkZSA8WDEx
L2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5k
ZXIuaD4KKyNlbHNlCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorI2VuZGlmCiAKLW5hbWVz
cGFjZSBXZWJDb3JlIHsKKyNpbmNsdWRlICJHTFhDb25maWdTZWxlY3Rvci5oIgogCi1zdGF0aWMg
bG9uZyBYMTFPdmVycmlkZVJlZGlyZWN0ID0gMUwgPDwgOTsKK25hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RhdGljIFBGTkdMWEJJTkRURVhJTUFHRUVYVFBST0MgcEdsWEJpbmRUZXhJbWFnZUVYVCA9
IDA7CiBzdGF0aWMgUEZOR0xYUkVMRUFTRVRFWElNQUdFRVhUUFJPQyBwR2xYUmVsZWFzZVRleElt
YWdlRVhUID0gMDsKQEAgLTUyLDE1MyArNDksNyBAQCBzdGF0aWMgUEZOR0xHRU5GUkFNRUJVRkZF
UlNQUk9DIHBHbEdlbkZyYW1lYnVmZmVycyA9IDA7CiBzdGF0aWMgUEZOR0xERUxFVEVGUkFNRUJV
RkZFUlNQUk9DIHBHbERlbGV0ZUZyYW1lYnVmZmVycyA9IDA7CiBzdGF0aWMgUEZOR0xGUkFNRUJV
RkZFUlRFWFRVUkUyRFBST0MgcEdsRnJhbWVidWZmZXJUZXh0dXJlMkQgPSAwOwogCi0vLyBVc2Vk
IGZvciBoYW5kbGluZyBYRXJyb3IuCi1zdGF0aWMgYm9vbCB2YWxpZE9wZXJhdGlvbiA9IHRydWU7
Ci1zdGF0aWMgaW50IGhhbmRsZVhQaXhtYXBDcmVhdGlvbkVycm9yKERpc3BsYXkqLCBYRXJyb3JF
dmVudCogZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZE1hdGNoIHx8
IGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZFdpbmRvdyB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBC
YWRBbGxvYykgewotICAgICAgICB2YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHN3
aXRjaCAoZXZlbnQtPmVycm9yX2NvZGUpIHsKLSAgICAgICAgY2FzZSBCYWRNYXRjaDoKLSAgICAg
ICAgICAgIExPR19FUlJPUigiQmFkTWF0Y2guIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBCYWRXaW5kb3c6Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkJhZFdpbmRvdy4iKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJhZEFsbG9jOgotICAgICAgICAgICAg
TE9HX0VSUk9SKCJCYWRBbGxvYy4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotc3RhdGljIGludCBhdHRyaWJ1dGVzW10gPSB7Ci0gICAgR0xYX0xFVkVMLCAwLAot
ICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfV0lORE9XX0JJVCwKLSAgICBHTFhfUkVOREVSX1RZ
UEUsICAgR0xYX1JHQkFfQklULAotICAgIEdMWF9SRURfU0laRSwgICAgICAxLAotICAgIEdMWF9H
UkVFTl9TSVpFLCAgICAxLAotICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAotICAgIEdMWF9BTFBI
QV9TSVpFLCAgICAxLAotICAgIEdMWF9ERVBUSF9TSVpFLCAgICAxLAotICAgIEdMWF9YX1ZJU1VB
TF9UWVBFLCBHTFhfVFJVRV9DT0xPUiwKLSAgICBHTFhfRE9VQkxFQlVGRkVSLCAgVHJ1ZSwKLSAg
ICBOb25lCi19OwotCi1jbGFzcyBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgewot
Ci1wdWJsaWM6Ci0gICAgU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKERpc3BsYXkq
IGRpc3BsYXkpCi0gICAgICAgIDogbV9kaXNwbGF5KGRpc3BsYXkpCi0gICAgewotICAgICAgICAv
LyBYU3luYyBtdXN0IGJlIGNhbGxlZCB0byBlbnN1cmUgdGhhdCBjdXJyZW50IGVycm9ycyBhcmUg
aGFuZGxlZCBieSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KLSAgICAgICAgWFN5bmMobV9kaXNwbGF5
LCBmYWxzZSk7Ci0gICAgICAgIG1fcHJldmlvdXNFcnJvckhhbmRsZXIgPSBYU2V0RXJyb3JIYW5k
bGVyKGhhbmRsZVhQaXhtYXBDcmVhdGlvbkVycm9yKTsKLSAgICB9Ci0KLSAgICB+U2NvcGVkWFBp
eG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUgdGhl
IG9yaWdpbmFsIGhhbmRsZXIuCi0gICAgICAgIFhTZXRFcnJvckhhbmRsZXIobV9wcmV2aW91c0Vy
cm9ySGFuZGxlcik7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkT3BlcmF0aW9uKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgLy8gWFN5bmMg
aXMgbmVlZGVkIHRvIGNhdGNoIHBvc3NpYmxlIGVycm9ycyBhcyB0aGV5IGFyZSBnZW5lcmF0ZWQg
YXN5bmNocm9ub3VzbHkuCi0gICAgICAgIFhTeW5jKG1fZGlzcGxheSwgZmFsc2UpOwotICAgICAg
ICByZXR1cm4gdmFsaWRPcGVyYXRpb247Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFhFcnJvckhh
bmRsZXIgbV9wcmV2aW91c0Vycm9ySGFuZGxlcjsKLSAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci19
OwotCi0vLyBGSVhNRTogVGFrZSBYMTFXaW5kb3dSZXNvdXJjZXMgYW5kIEdMWENvbmZpZ1NlbGVj
dG9yIGludG8gdXNlLgotY2xhc3MgT2ZmU2NyZWVuUm9vdFdpbmRvdyB7Ci1wdWJsaWM6Ci0gICAg
T2ZmU2NyZWVuUm9vdFdpbmRvdygpCi0gICAgewotICAgICAgICArK21fcmVmQ291bnQ7Ci0gICAg
fQotCi0gICAgV2luZG93IGdldFhXaW5kb3coKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3dpbmRv
dykgewotICAgICAgICAgICAgRGlzcGxheSogZHB5ID0gZGlzcGxheSgpOwotICAgICAgICAgICAg
bV93aW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRw
eSksIC0xLCAtMSwgMSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwg
MCkpOwotICAgICAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAg
ICAgICAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOwotICAgICAgICAgICAg
WENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCBtX3dpbmRvdywgWDExT3ZlcnJpZGVSZWRpcmVj
dCwgJmF0dHJpYnV0ZXMpOwotICAgICAgICAgICAgLy8gTWFwIHdpbmRvdyB0byB0aGUgc2NyZWVu
Ci0gICAgICAgICAgICBYTWFwV2luZG93KGRweSwgbV93aW5kb3cpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIG1fd2luZG93OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgRGlz
cGxheUNvbm5lY3Rpb24gewotICAgICAgICBEaXNwbGF5Q29ubmVjdGlvbigpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIH5EaXNwbGF5Q29ubmVjdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhDbG9z
ZURpc3BsYXkobV9kaXNwbGF5KTsKLSAgICAgICAgfQotCi0gICAgICAgIERpc3BsYXkqIGRpc3Bs
YXkoKSB7IHJldHVybiBtX2Rpc3BsYXk7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBEaXNwbGF5
KiBtX2Rpc3BsYXk7Ci0gICAgfTsKLQotcHVibGljOgotICAgIHN0YXRpYyBEaXNwbGF5KiBkaXNw
bGF5KCkKLSAgICB7Ci0gICAgICAgIC8vIERpc3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUg
YnJva2VuIGF0IHByb2dyYW0gc2h1dGRvd24uCi0gICAgICAgIHN0YXRpYyBEaXNwbGF5Q29ubmVj
dGlvbiBkaXNwbGF5Q29ubmVjdGlvbjsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlDb25uZWN0aW9u
LmRpc3BsYXkoKTsKLSAgICB9Ci0KLSAgICB+T2ZmU2NyZWVuUm9vdFdpbmRvdygpCi0gICAgewot
ICAgICAgICBpZiAoLS1tX3JlZkNvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGlmIChtX3dpbmRvdykgewotICAgICAgICAgICAgWFVubWFwV2luZG93KGRpc3BsYXkoKSwgbV93
aW5kb3cpOwotICAgICAgICAgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSgpLCBtX3dpbmRvdyk7
Ci0gICAgICAgICAgICBtX3dpbmRvdyA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgc3RhdGljIGludCBtX3JlZkNvdW50OwotICAgIHN0YXRpYyBXaW5kb3cgbV93aW5kb3c7
Ci19OwotCi1pbnQgT2ZmU2NyZWVuUm9vdFdpbmRvdzo6bV9yZWZDb3VudCA9IDA7Ci1XaW5kb3cg
T2ZmU2NyZWVuUm9vdFdpbmRvdzo6bV93aW5kb3cgPSAwOwotCi1zdGF0aWMgY29uc3QgaW50IGds
eFNwZWNbXSA9IHsKLSAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBpcyBhIHNldCBrZXkgdmFsdWUg
cGFpcnMgc3RvcmVkIGluIGEgc2ltcGxlIGFycmF5LgotICAgIEdMWF9MRVZFTCwgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsCi0gICAgR0xYX0RSQVdBQkxFX1RZUEUsICAgICAgICAgICAgICAg
ICAgR0xYX1BJWE1BUF9CSVQgfCBHTFhfV0lORE9XX0JJVCwKLSAgICBHTFhfQklORF9UT19URVhU
VVJFX1RBUkdFVFNfRVhULCAgICBHTFhfVEVYVFVSRV8yRF9CSVRfRVhULAotICAgIEdMWF9CSU5E
X1RPX1RFWFRVUkVfUkdCQV9FWFQsICAgICAgIFRSVUUsCi0gICAgMAotfTsKLQotc3RhdGljIGNv
bnN0IGludCBnbHhBdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgaW50IGdseEF0dHJpYnV0ZXNbXSA9
IHsKICAgICBHTFhfVEVYVFVSRV9GT1JNQVRfRVhULAogICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9S
R0JBX0VYVCwKICAgICBHTFhfVEVYVFVSRV9UQVJHRVRfRVhULApAQCAtMjA4LDE3ICs1OSwxMyBA
QCBzdGF0aWMgY29uc3QgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsKIAogc3RydWN0IEdyYXBoaWNz
U3VyZmFjZVByaXZhdGUgewogICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoY29uc3QgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBzaGFyZUNvbnRleHQgPSAwKQotICAgICAgICA6IG1fb2ZmU2Ny
ZWVuV2luZG93KGFkb3B0UHRyKG5ldyBPZmZTY3JlZW5Sb290V2luZG93KCkpKQotICAgICAgICAs
IG1feFBpeG1hcCgwKQorICAgICAgICA6IG1feFBpeG1hcCgwKQogICAgICAgICAsIG1fZ2x4UGl4
bWFwKDApCiAgICAgICAgICwgbV9zdXJmYWNlKDApCiAgICAgICAgICwgbV9nbHhTdXJmYWNlKDAp
CiAgICAgICAgICwgbV9nbENvbnRleHQoMCkKICAgICAgICAgLCBtX2RldGFjaGVkQ29udGV4dCgw
KQogICAgICAgICAsIG1fZGV0YWNoZWRTdXJmYWNlKDApCi0gICAgICAgICwgbV9mYkNvbmZpZygw
KQotICAgICAgICAsIG1fdGV4dHVyZUlzWUludmVydGVkKGZhbHNlKQotICAgICAgICAsIG1faGFz
QWxwaGEoZmFsc2UpCiAgICAgICAgICwgbV9pc1JlY2VpdmVyKGZhbHNlKQogICAgIHsKICAgICAg
ICAgR0xYQ29udGV4dCBzaGFyZUNvbnRleHRPYmplY3QgPSAwOwpAQCAtMjM0LDE2ICs4MSwxNSBA
QCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgIFVOVVNFRF9QQVJBTShz
aGFyZUNvbnRleHQpOwogI2VuZGlmCiAKLSAgICAgICAgaW50IG51bVJldHVybmVkOwotICAgICAg
ICBHTFhGQkNvbmZpZyogZmJDb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSgpLCBE
ZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZudW1SZXR1cm5lZCk7Ci0KLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgY2hvb3NlIGEgY29uZmlndXJhdGlvbiB0aGF0IHN1
cHBvcnRzIGFuIGFscGhhIG1hc2suCi0gICAgICAgIG1fZmJDb25maWcgPSBmaW5kRkJDb25maWdX
aXRoQWxwaGEoZmJDb25maWdzLCBudW1SZXR1cm5lZCk7CisgICAgICAgIG1fY29uZmlnU2VsZWN0
b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7CiAKLSAgICAgICAgWEZyZWUo
ZmJDb25maWdzKTsKKyAgICAgICAgaWYgKCFtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4
dENvbmZpZygpKSB7CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgR0xYIGNvbnRleHQgZm9yIE9wZW5HTCBy
ZW5kZXJpbmcKLSAgICAgICAgbV9nbENvbnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KGRpc3Bs
YXkoKSwgbV9mYkNvbmZpZywgR0xYX1JHQkFfVFlQRSwgc2hhcmVDb250ZXh0T2JqZWN0LCB0cnVl
KTsKKyAgICAgICAgbV9nbENvbnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KGRpc3BsYXkoKSwg
bV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgR0xYX1JHQkFfVFlQRSwg
c2hhcmVDb250ZXh0T2JqZWN0LCB0cnVlKTsKICAgICB9CiAKICAgICBHcmFwaGljc1N1cmZhY2VQ
cml2YXRlKHVpbnQzMl90IHdpbklkKQpAQCAtMjU0LDExICsxMDAsMTAgQEAgc3RydWN0IEdyYXBo
aWNzU3VyZmFjZVByaXZhdGUgewogICAgICAgICAsIG1fZ2xDb250ZXh0KDApCiAgICAgICAgICwg
bV9kZXRhY2hlZENvbnRleHQoMCkKICAgICAgICAgLCBtX2RldGFjaGVkU3VyZmFjZSgwKQotICAg
ICAgICAsIG1fZmJDb25maWcoMCkKLSAgICAgICAgLCBtX3RleHR1cmVJc1lJbnZlcnRlZChmYWxz
ZSkKLSAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQogICAgICAgICAsIG1faXNSZWNlaXZlcih0
cnVlKQotICAgIHsgfQorICAgIHsKKyAgICAgICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRy
KG5ldyBHTFhDb25maWdTZWxlY3RvcigpKTsKKyAgICB9CiAKICAgICB+R3JhcGhpY3NTdXJmYWNl
UHJpdmF0ZSgpCiAgICAgewpAQCAtMjY3LDM1ICsxMTIsMzIgQEAgc3RydWN0IEdyYXBoaWNzU3Vy
ZmFjZVByaXZhdGUgewogCiAgICAgdWludDMyX3QgY3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXpl
JiBzaXplKQogICAgIHsKLSAgICAgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBnbFhHZXRW
aXN1YWxGcm9tRkJDb25maWcoZGlzcGxheSgpLCBtX2ZiQ29uZmlnKTsKLSAgICAgICAgaWYgKCF2
aXN1YWxJbmZvKQorICAgICAgICBpZiAoIWRpc3BsYXkoKSB8fCAhbV9jb25maWdTZWxlY3RvcikK
KyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4g
dmlzSW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1YWxJbmZvKCkpOworCisgICAgICAgIGlmICgh
dmlzSW5mby5nZXQoKSkgeworICAgICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICB9CisKKyAgICAgICAgWDExSGVscGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5k
b3coJm1fc3VyZmFjZSwgKnZpc0luZm8uZ2V0KCksIHNpemUpOwogCi0gICAgICAgIENvbG9ybWFw
IGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlzcGxheSgpLCBtX29mZlNjcmVlbldpbmRvdy0+Z2V0
WFdpbmRvdygpLCB2aXN1YWxJbmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7Ci0KLSAgICAgICAgWFNl
dFdpbmRvd0F0dHJpYnV0ZXMgYTsKLSAgICAgICAgYS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQ
aXhlbChkaXNwbGF5KCksIDApOwotICAgICAgICBhLmJvcmRlcl9waXhlbCA9IEJsYWNrUGl4ZWwo
ZGlzcGxheSgpLCAwKTsKLSAgICAgICAgYS5jb2xvcm1hcCA9IGNtYXA7Ci0gICAgICAgIG1fc3Vy
ZmFjZSA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSgpLCBtX29mZlNjcmVlbldpbmRvdy0+Z2V0WFdp
bmRvdygpLCAwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksCi0gICAgICAgICAgICAw
LCB2aXN1YWxJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc3VhbEluZm8tPnZpc3VhbCwKLSAg
ICAgICAgICAgIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhKTsK
LSAgICAgICAgWFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSgpLCBtX3N1cmZhY2Us
IDApOwotICAgICAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSgpLCBtX3N1cmZh
Y2UsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKLSAgICAgICAgbV9nbHhTdXJmYWNlID0gZ2xY
Q3JlYXRlV2luZG93KGRpc3BsYXkoKSwgbV9mYkNvbmZpZywgbV9zdXJmYWNlLCAwKTsKLSAgICAg
ICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBYUmVuZGVy
IEV4dGVuc2lvbiBpcyBhdmFpbGFibGUuCi0gICAgICAgIGludCBldmVudEJhc2VwLCBlcnJvckJh
c2VwOwotICAgICAgICBpZiAoIVhSZW5kZXJRdWVyeUV4dGVuc2lvbihkaXNwbGF5KCksICZldmVu
dEJhc2VwLCAmZXJyb3JCYXNlcCkpCisgICAgICAgIGlmICghbV9zdXJmYWNlKSB7CisgICAgICAg
ICAgICBjbGVhcigpOwogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KIAotICAgICAg
ICBYTWFwV2luZG93KGRpc3BsYXkoKSwgbV9zdXJmYWNlKTsKKyAgICAgICAgbV9nbHhTdXJmYWNl
ID0gZ2xYQ3JlYXRlV2luZG93KGRpc3BsYXkoKSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNv
bnRleHRDb25maWcoKSwgbV9zdXJmYWNlLCAwKTsKICAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsK
ICAgICB9CiAKICAgICB2b2lkIGNyZWF0ZVBpeG1hcCh1aW50MzJfdCB3aW5JZCkKICAgICB7Cisg
ICAgICAgIGlmICghbV9jb25maWdTZWxlY3RvcikKKyAgICAgICAgICAgIHJldHVybjsKKwogICAg
ICAgICBYV2luZG93QXR0cmlidXRlcyBhdHRyOwogICAgICAgICBpZiAoIVhHZXRXaW5kb3dBdHRy
aWJ1dGVzKGRpc3BsYXkoKSwgd2luSWQsICZhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTMwNCwzNSArMTQ2LDI1IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICAg
ICAgaWYgKGF0dHIubWFwX3N0YXRlID09IElzVW5tYXBwZWQgfHwgYXR0ci5tYXBfc3RhdGUgPT0g
SXNVbnZpZXdhYmxlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFNjb3BlZFhQaXht
YXBDcmVhdGlvbkVycm9ySGFuZGxlciBoYW5kbGVyKGRpc3BsYXkoKSk7CisgICAgICAgIFNjb3Bl
ZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlciBoYW5kbGVyOwogICAgICAgICBtX3NpemUgPSBJ
bnRTaXplKGF0dHIud2lkdGgsIGF0dHIuaGVpZ2h0KTsKIAogICAgICAgICBYUmVuZGVyUGljdEZv
cm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoZGlzcGxheSgpLCBhdHRyLnZp
c3VhbCk7Ci0gICAgICAgIG1faGFzQWxwaGEgPSAoZm9ybWF0LT50eXBlID09IFBpY3RUeXBlRGly
ZWN0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayk7Ci0KLSAgICAgICAgaW50IG51bWJlck9m
Q29uZmlnczsKLSAgICAgICAgR0xYRkJDb25maWcqIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZp
ZyhkaXNwbGF5KCksIFhEZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSksIGdseFNwZWMsICZudW1iZXJP
ZkNvbmZpZ3MpOwotCi0gICAgICAgIC8vIElmIG9yaWdpbiB3aW5kb3cgaGFzIGFscGhhIHRoZW4g
ZmluZCBjb25maWcgd2l0aCBhbHBoYS4KLSAgICAgICAgR0xYRkJDb25maWcmIGNvbmZpZyA9IG1f
aGFzQWxwaGEgPyBmaW5kRkJDb25maWdXaXRoQWxwaGEoY29uZmlncywgbnVtYmVyT2ZDb25maWdz
KSA6IGNvbmZpZ3NbMF07Ci0KKyAgICAgICAgYm9vbCBoYXNBbHBoYSA9IChmb3JtYXQtPnR5cGUg
PT0gUGljdFR5cGVEaXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKTsKICAgICAgICAg
bV94UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAoZGlzcGxheSgpLCB3aW5JZCk7
Ci0gICAgICAgIG1fZ2x4UGl4bWFwID0gZ2xYQ3JlYXRlUGl4bWFwKGRpc3BsYXkoKSwgY29uZmln
LCBtX3hQaXhtYXAsIGdseEF0dHJpYnV0ZXMpOworICAgICAgICBnbHhBdHRyaWJ1dGVzWzFdID0g
KGZvcm1hdC0+ZGVwdGggPT0gMzIgfHwgaGFzQWxwaGEpID8gR0xYX1RFWFRVUkVfRk9STUFUX1JH
QkFfRVhUIDogR0xYX1RFWFRVUkVfRk9STUFUX1JHQl9FWFQ7CisgICAgICAgIG1fZ2x4UGl4bWFw
ID0gZ2xYQ3JlYXRlUGl4bWFwKGRpc3BsYXkoKSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNs
aWVudENvbmZpZyhmb3JtYXQtPmRlcHRoLCBYVmlzdWFsSURGcm9tVmlzdWFsKGF0dHIudmlzdWFs
KSksIG1feFBpeG1hcCwgZ2x4QXR0cmlidXRlcyk7CiAKICAgICAgICAgaWYgKCFoYW5kbGVyLmlz
VmFsaWRPcGVyYXRpb24oKSkKICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgdWludCBpbnZlcnRlZCA9IDA7CiAgICAgICAgICAgICBnbFhRdWVyeURyYXdh
YmxlKGRpc3BsYXkoKSwgbV9nbHhQaXhtYXAsIEdMWF9ZX0lOVkVSVEVEX0VYVCwgJmludmVydGVk
KTsKLSAgICAgICAgICAgIG1fdGV4dHVyZUlzWUludmVydGVkID0gISFpbnZlcnRlZDsKLSAgICAg
ICAgfQotCi0gICAgICAgIFhGcmVlKGNvbmZpZ3MpOwotICAgIH0KKyAgICAgICAgICAgIG1fZmxh
Z3MgPSAhIWludmVydGVkID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZSA6IDA7
CiAKLSAgICBib29sIHRleHR1cmVJc1lJbnZlcnRlZCgpCi0gICAgewotICAgICAgICByZXR1cm4g
bV90ZXh0dXJlSXNZSW52ZXJ0ZWQ7CisgICAgICAgICAgICBpZiAoaGFzQWxwaGEpCisgICAgICAg
ICAgICAgICAgbV9mbGFncyB8PSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgdm9pZCBtYWtlQ3VycmVudCgpCkBAIC00MDAsNyArMjMyLDcgQEAg
c3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUgewogICAgICAgICBkb25lQ3VycmVudCgpOwog
ICAgIH0KIAotICAgIERpc3BsYXkqIGRpc3BsYXkoKSBjb25zdCB7IHJldHVybiBPZmZTY3JlZW5S
b290V2luZG93OjpkaXNwbGF5KCk7IH0KKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkgY29uc3QgeyBy
ZXR1cm4gWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCk7IH0KIAogICAgIEdMWFBpeG1hcCBnbHhQ
aXhtYXAoKSBjb25zdAogICAgIHsKQEAgLTQyMCwyNSArMjUyLDEwIEBAIHN0cnVjdCBHcmFwaGlj
c1N1cmZhY2VQcml2YXRlIHsKICAgICB9CiAKICAgICBib29sIGlzUmVjZWl2ZXIoKSBjb25zdCB7
IHJldHVybiBtX2lzUmVjZWl2ZXI7IH0KLXByaXZhdGU6Ci0gICAgR0xYRkJDb25maWcmIGZpbmRG
QkNvbmZpZ1dpdGhBbHBoYShHTFhGQkNvbmZpZyogZmJDb25maWdzLCBpbnQgbnVtYmVyT2ZDb25m
aWdzKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbmZpZ3M7
ICsraSkgewotICAgICAgICAgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBnbFhHZXRWaXN1
YWxGcm9tRkJDb25maWcoZGlzcGxheSgpLCBmYkNvbmZpZ3NbaV0pOwotICAgICAgICAgICAgaWYg
KCF2aXN1YWxJbmZvKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBY
UmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoZGlzcGxh
eSgpLCB2aXN1YWxJbmZvLT52aXN1YWwpOwotICAgICAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7
CiAKLSAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4g
MCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmJDb25maWdzW2ldOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gUmV0dXJuIDFzdCBjb25maWcgYXMgYSBmYWxsYmFjayB3aXRoIG5vIGFscGhhIHN1
cHBvcnQuCi0gICAgICAgIHJldHVybiBmYkNvbmZpZ3NbMF07Ci0gICAgfQorICAgIFRleHR1cmVN
YXBwZXJHTDo6RmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAKK3ByaXZh
dGU6CiAgICAgdm9pZCBjbGVhcigpCiAgICAgewogICAgICAgICBpZiAobV9nbHhQaXhtYXApIHsK
QEAgLTQ2MSwyMSArMjc4LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBnbFhEZXN0cm95Q29u
dGV4dChkaXNwbGF5KCksIG1fZ2xDb250ZXh0KTsKICAgICAgICAgICAgIG1fZ2xDb250ZXh0ID0g
MDsKICAgICAgICAgfQorCisgICAgICAgIGlmIChtX2NvbmZpZ1NlbGVjdG9yKQorICAgICAgICAg
ICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgT3duUHRyPE9mZlNj
cmVlblJvb3RXaW5kb3c+IG1fb2ZmU2NyZWVuV2luZG93OwogICAgIEludFNpemUgbV9zaXplOwog
ICAgIFBpeG1hcCBtX3hQaXhtYXA7CiAgICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOwotICAgIFdp
bmRvdyBtX3N1cmZhY2U7CisgICAgdWludDMyX3QgbV9zdXJmYWNlOwogICAgIFdpbmRvdyBtX2ds
eFN1cmZhY2U7CiAgICAgR0xYQ29udGV4dCBtX2dsQ29udGV4dDsKICAgICBHTFhDb250ZXh0IG1f
ZGV0YWNoZWRDb250ZXh0OwogICAgIEdMWERyYXdhYmxlIG1fZGV0YWNoZWRTdXJmYWNlOwotICAg
IEdMWEZCQ29uZmlnIG1fZmJDb25maWc7Ci0gICAgYm9vbCBtX3RleHR1cmVJc1lJbnZlcnRlZDsK
LSAgICBib29sIG1faGFzQWxwaGE7CisgICAgT3duUHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBtX2Nv
bmZpZ1NlbGVjdG9yOwogICAgIGJvb2wgbV9pc1JlY2VpdmVyOworICAgIFRleHR1cmVNYXBwZXJH
TDo6RmxhZ3MgbV9mbGFnczsKIH07CiAKIHN0YXRpYyBib29sIHJlc29sdmVHTE1ldGhvZHMoKQpA
QCAtNTM5LDEzICszNTcsMTAgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwKICAgICBpZiAoIXRl
eHR1cmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxh
Z3MgPSBtX3ByaXZhdGUtPnRleHR1cmVJc1lJbnZlcnRlZCgpID8gVGV4dHVyZU1hcHBlckdMOjpT
aG91bGRGbGlwVGV4dHVyZSA6IDA7Ci0gICAgZmxhZ3MgfD0gVGV4dHVyZU1hcHBlckdMOjpTaG91
bGRCbGVuZDsKLQogICAgIEZsb2F0UmVjdCByZWN0T25Db250ZW50cyhGbG9hdFBvaW50Ojp6ZXJv
KCksIHNpemUpOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0g
dHJhbnNmb3JtOwogICAgIGFkanVzdGVkVHJhbnNmb3JtLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9u
TWF0cml4OjpyZWN0VG9SZWN0KHJlY3RPbkNvbnRlbnRzLCB0YXJnZXRSZWN0KSk7Ci0gICAgc3Rh
dGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlciktPmRyYXdUZXh0dXJlKHRl
eHR1cmUsIGZsYWdzLCBzaXplLCByZWN0T25Db250ZW50cywgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9w
YWNpdHksIG1hc2spOworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVN
YXBwZXIpLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBtX3ByaXZhdGUtPmZsYWdzKCksIHNpemUsIHJl
Y3RPbkNvbnRlbnRzLCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7CiB9CiAKIHVp
bnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcigpIGNvbnN0CmRpZmYg
LS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhl
bHBlci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gx
MUhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwYmIyZQot
LS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExSGVscGVyLmNwcApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlgxMUhlbHBlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIFVzZWQgZm9yIGhhbmRsaW5nIFhFcnJvci4KK3N0YXRpYyBib29s
IHZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsKK3N0YXRpYyBpbnQgaGFuZGxlWFBpeG1hcENyZWF0aW9u
RXJyb3IoRGlzcGxheSosIFhFcnJvckV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPmVy
cm9yX2NvZGUgPT0gQmFkTWF0Y2ggfHwgZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkV2luZG93IHx8
IGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZEFsbG9jKSB7CisgICAgICAgIHZhbGlkT3BlcmF0aW9u
ID0gZmFsc2U7CisKKyAgICAgICAgc3dpdGNoIChldmVudC0+ZXJyb3JfY29kZSkgeworICAgICAg
ICBjYXNlIEJhZE1hdGNoOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRNYXRjaC4iKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJhZFdpbmRvdzoKKyAgICAgICAgICAgIExP
R19FUlJPUigiQmFkV2luZG93LiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QmFkQWxsb2M6CisgICAgICAgICAgICBMT0dfRVJST1IoIkJhZEFsbG9jLiIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdHJ1Y3QgRGlzcGxheUNvbm5lY3Rpb24g
eworICAgIERpc3BsYXlDb25uZWN0aW9uKCkKKyAgICB7CisgICAgICAgIG1fZGlzcGxheSA9IFhP
cGVuRGlzcGxheSgwKTsKKworICAgICAgICBpZiAoIW1fZGlzcGxheSkKKyAgICAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIG1ha2UgY29ubmVjdGlvbiB3aXRoIFgiKTsKKyAgICB9CisKKyAg
ICB+RGlzcGxheUNvbm5lY3Rpb24oKQorICAgIHsKKyAgICAgICAgWENsb3NlRGlzcGxheShtX2Rp
c3BsYXkpOworICAgIH0KKworICAgIERpc3BsYXkqIGRpc3BsYXkoKSB7IHJldHVybiBtX2Rpc3Bs
YXk7IH0KK3ByaXZhdGU6CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworfTsKKworc3RydWN0IE9m
ZlNjcmVlblJvb3RXaW5kb3cgeworCisgICAgT2ZmU2NyZWVuUm9vdFdpbmRvdygpCisgICAgewor
ICAgICAgICBtX3dpbmRvdyA9IDA7CisgICAgICAgIERpc3BsYXkqIGRweSA9IFgxMUhlbHBlcjo6
bmF0aXZlRGlzcGxheSgpOworICAgICAgICBpZiAoIWRweSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAgICBhdHRy
aWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgbV93aW5kb3cgPSBYQ3Jl
YXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSksIC0xLCAtMSwgMSwg
MSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkpOworICAgICAgICAv
LyBGcm9tIGh0dHA6Ly90cm9uY2hlLmNvbS9ndWkveC94bGliL3dpbmRvdy9hdHRyaWJ1dGVzLwor
ICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBDV092ZXJyaWRl
UmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKKyAgICAgICAgWE1hcFdpbmRvdyhkcHksIG1fd2luZG93
KTsKKworICAgICAgICBpZiAoIW1fd2luZG93KQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiByb290IHdpbmRvdy4iKTsKKyAgICB9CisKKyAgICB+T2Zm
U2NyZWVuUm9vdFdpbmRvdygpCisgICAgeworICAgICAgICBpZiAoIVgxMUhlbHBlcjo6bmF0aXZl
RGlzcGxheSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3dpbmRvdykg
eworICAgICAgICAgICAgWFVubWFwV2luZG93KFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpLCBt
X3dpbmRvdyk7CisgICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhYMTFIZWxwZXI6Om5hdGl2ZURp
c3BsYXkoKSwgbV93aW5kb3cpOworICAgICAgICAgICAgbV93aW5kb3cgPSAwOworICAgICAgICB9
CisgICAgfQorCisgICAgV2luZG93IHJvb3RXaW5kb3coKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fd2luZG93OworICAgIH0KKworcHJpdmF0ZToKKyAgICBXaW5kb3cgbV93aW5kb3c7Cit9Owor
CitTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6OlNjb3BlZFhQaXhtYXBDcmVhdGlv
bkVycm9ySGFuZGxlcigpCit7CisgICAgLy8gWFN5bmMgbXVzdCBiZSBjYWxsZWQgdG8gZW5zdXJl
IHRoYXQgY3VycmVudCBlcnJvcnMgYXJlIGhhbmRsZWQgYnkgdGhlIG9yaWdpbmFsIGhhbmRsZXIu
CisgICAgWFN5bmMoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIGZhbHNlKTsKKyAgICBtX3By
ZXZpb3VzRXJyb3JIYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcihoYW5kbGVYUGl4bWFwQ3JlYXRp
b25FcnJvcik7Cit9CisKK1Njb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6flNjb3Bl
ZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpCit7CisgICAgLy8gUmVzdG9yZSB0aGUgb3Jp
Z2luYWwgaGFuZGxlci4KKyAgICBYU2V0RXJyb3JIYW5kbGVyKG1fcHJldmlvdXNFcnJvckhhbmRs
ZXIpOworfQorCitib29sIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6aXNWYWxp
ZE9wZXJhdGlvbigpIGNvbnN0Cit7CisgICAgdmFsaWRPcGVyYXRpb24gPSB0cnVlOworICAgIC8v
IFhTeW5jIGlzIG5lZWRlZCB0byBjYXRjaCBwb3NzaWJsZSBlcnJvcnMgYXMgdGhleSBhcmUgZ2Vu
ZXJhdGVkIGFzeW5jaHJvbm91c2x5LgorICAgIFhTeW5jKFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxh
eSgpLCBmYWxzZSk7CisgICAgcmV0dXJuIHZhbGlkT3BlcmF0aW9uOworfQorCit2b2lkIFgxMUhl
bHBlcjo6cmVzaXplV2luZG93KGNvbnN0IEludFJlY3QmIG5ld1JlY3QsIGNvbnN0IHVpbnQzMl90
IHdpbmRvd0lkKQoreworICAgIFhSZXNpemVXaW5kb3cobmF0aXZlRGlzcGxheSgpLCB3aW5kb3dJ
ZCwgbmV3UmVjdC53aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKKyAgICBYRmx1c2gobmF0aXZl
RGlzcGxheSgpKTsKK30KKwordm9pZCBYMTFIZWxwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1
aW50MzJfdCogaGFuZGxlSWQsIGNvbnN0IFhWaXN1YWxJbmZvJiB2aXNJbmZvLCBjb25zdCBJbnRT
aXplJiBzaXplKQoreworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIERpc3BsYXkqIGRp
c3BsYXkgPSBuYXRpdmVEaXNwbGF5KCk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIXZpc0luZm8udmlzdWFsKSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFdpbmRvdyB4V2luZG93ID0gb2Zmc2NyZWVuUm9vdFdpbmRvdygpOworICAgIGlmICgheFdp
bmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xv
cm1hcChkaXNwbGF5LCB4V2luZG93LCB2aXNJbmZvLnZpc3VhbCwgQWxsb2NOb25lKTsKKyAgICBY
U2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7CisgICAgYXR0cmlidXRlLmJhY2tncm91bmRf
cGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOworICAgIGF0dHJpYnV0ZS5ib3JkZXJfcGl4
ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOworICAgIGF0dHJpYnV0ZS5jb2xvcm1hcCA9IGNt
YXA7CisgICAgYXR0cmlidXRlLmV2ZW50X21hc2sgPSBSZXNpemVSZWRpcmVjdE1hc2s7CisgICAg
dWludDMyX3QgdGVtcEhhbmRsZUlkOworICAgIHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVXaW5kb3co
ZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCB2
aXNJbmZvLmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzSW5mby52aXN1YWwsIENXQmFja1BpeGVsIHwg
Q1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOworCisgICAgaWYgKCF0ZW1w
SGFuZGxlSWQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVl
biB3aW5kb3cuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBYU2V0V2luZG93QmFj
a2dyb3VuZFBpeG1hcChkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIDApOworICAgIFhDb21wb3NpdGVS
ZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIENvbXBvc2l0ZVJlZGlyZWN0TWFu
dWFsKTsKKyAgICBYTWFwV2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJZCk7CisgICAgKmhhbmRs
ZUlkID0gdGVtcEhhbmRsZUlkOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlSWQpOwor
ICAgIFVOVVNFRF9QQVJBTSh2aXNJbmZvKTsKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisjZW5k
aWYKK30KKworI2lmIFVTRShFR0wpCit2b2lkIFgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2lu
ZG93KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3QgRUdMaW50IGlkLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIFZpc3VhbElEIHZpc3VhbElkID0gc3RhdGljX2Nhc3Q8VmlzdWFsSUQ+KGlk
KTsKKworICAgIGlmICghdmlzdWFsSWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVHTCBo
YXMgc3VnZ2VzdGVkIGEgdmlzdWFsIGlkLCBzbyBnZXQgdGhlIHJlc3Qgb2YgdGhlIHZpc3VhbCBp
bmZvIGZvciB0aGF0IGlkLgorICAgIFhWaXN1YWxJbmZvIHZpc3VhbEluZm9UZW1wbGF0ZTsKKyAg
ICBtZW1zZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZvKSk7Cisg
ICAgdmlzdWFsSW5mb1RlbXBsYXRlLnZpc3VhbGlkID0gdmlzdWFsSWQ7CisgICAgaW50IG1hdGNo
aW5nQ291bnQgPSAwOworICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gbWF0Y2hpbmdWaXN1YWxz
KFhHZXRWaXN1YWxJbmZvKG5hdGl2ZURpc3BsYXkoKSwgVmlzdWFsSURNYXNrLCAmdmlzdWFsSW5m
b1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCkpOworICAgIFhWaXN1YWxJbmZvKiBmb3VuZFZpc3Vh
bCA9IDA7CisKKyAgICBpZiAobWF0Y2hpbmdWaXN1YWxzKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpPCBtYXRjaGluZ0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIFhWaXN1YWxJbmZvKiB0
ZW1wID0gJm1hdGNoaW5nVmlzdWFsc1tpXTsKKworICAgICAgICAgICAgaWYgKGlzWFJlbmRlckV4
dGVuc2lvblN1cHBvcnRlZCgpKSB7CisgICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQq
IGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG5hdGl2ZURpc3BsYXkoKSwgdGVtcC0+
dmlzdWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFs
cGhhTWFzayA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRWaXN1YWwgPSB0ZW1wOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh0ZW1wLT5kZXB0aCA9PSAzMikgeworICAgICAgICAgICAg
ICAgIGZvdW5kVmlzdWFsID0gdGVtcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3VuZFZpc3VhbCkKKyAgICAgICAgICAg
IGNyZWF0ZU9mZlNjcmVlbldpbmRvdyhoYW5kbGVJZCwgKmZvdW5kVmlzdWFsLCBzaXplKTsKKyAg
ICB9Cit9CisjZW5kaWYKKwordm9pZCBYMTFIZWxwZXI6OmRlc3Ryb3lXaW5kb3coY29uc3QgdWlu
dDMyX3Qgd2luZG93SWQpCit7CisgICAgaWYgKCF3aW5kb3dJZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3BsYXkoKTsKKyAgICBpZiAoIWRpc3Bs
YXkpCisgICAgICAgIHJldHVybjsKKworICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIHdpbmRv
d0lkKTsKK30KKworYm9vbCBYMTFIZWxwZXI6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgp
Cit7CisgICAgc3RhdGljIGJvb2wgcXVlcnlEb25lID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wg
c3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uID0gZmFsc2U7CisKKyAgICBpZiAoIXF1ZXJ5RG9uZSkg
eworICAgICAgICBxdWVyeURvbmUgPSB0cnVlOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
ICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0aXZlRGlzcGxheSgpOworCisgICAgICAgIGlm
IChkaXNwbGF5KSB7CisgICAgICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJyb3JCYXNlcDsKKyAg
ICAgICAgICAgIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbiA9IFhSZW5kZXJRdWVyeUV4dGVuc2lv
bihkaXNwbGF5LCAmZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApOworICAgICAgICB9CisjZW5kaWYK
KyAgICB9CisKKyAgICByZXR1cm4gc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOworfQorCitEaXNw
bGF5KiBYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKQoreworICAgIC8vIERpc3BsYXkgY29ubmVj
dGlvbiB3aWxsIG9ubHkgYmUgYnJva2VuIGF0IHByb2dyYW0gc2h1dGRvd24uCisgICAgc3RhdGlj
IERpc3BsYXlDb25uZWN0aW9uIGRpc3BsYXlDb25uZWN0aW9uOworICAgIHJldHVybiBkaXNwbGF5
Q29ubmVjdGlvbi5kaXNwbGF5KCk7Cit9CisKK1dpbmRvdyBYMTFIZWxwZXI6Om9mZnNjcmVlblJv
b3RXaW5kb3coKQoreworICAgIHN0YXRpYyBPZmZTY3JlZW5Sb290V2luZG93IG9mZnNjcmVlbldp
bmRvdzsKKyAgICByZXR1cm4gb2Zmc2NyZWVuV2luZG93LnJvb3RXaW5kb3coKTsKK30KKworfQpk
aWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9Y
MTFIZWxwZXIuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
WDExSGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3YTY4Mgot
LS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExSGVscGVyLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBYMTFIZWxwZXJfaAorI2RlZmluZSBYMTFIZWxwZXJfaAorCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIk93blB0clgxMS5oIgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCisKKyNpZiBVU0UoRUdMKQorI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KKyNlbmRpZgor
CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2luY2x1ZGUgPFgxMS9l
eHRlbnNpb25zL1hyZW5kZXIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBYMTFIZWxwZXIgeworCitwdWJsaWM6CisgICAg
c3RhdGljIHZvaWQgY3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgWFZpc3Vh
bEluZm8mLCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoMSwgMSkpOworI2lmIFVTRShFR0wpCisg
ICAgc3RhdGljIHZvaWQgY3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgRUdM
aW50LCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoMSwgMSkpOworI2VuZGlmCisgICAgc3RhdGlj
IHZvaWQgZGVzdHJveVdpbmRvdyhjb25zdCB1aW50MzJfdCk7CisgICAgc3RhdGljIHZvaWQgcmVz
aXplV2luZG93KGNvbnN0IEludFJlY3QmLCBjb25zdCB1aW50MzJfdCk7CisgICAgc3RhdGljIGJv
b2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCk7CisgICAgc3RhdGljIERpc3BsYXkqIG5h
dGl2ZURpc3BsYXkoKTsKKyAgICBzdGF0aWMgV2luZG93IG9mZnNjcmVlblJvb3RXaW5kb3coKTsK
K307CisKK2NsYXNzIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlciB7CisKK3B1Ymxp
YzoKKyAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKTsKKyAgICB+U2NvcGVk
WFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKCk7CisgICAgYm9vbCBpc1ZhbGlkT3BlcmF0aW9u
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgWEVycm9ySGFuZGxlciBtX3ByZXZpb3VzRXJyb3JI
YW5kbGVyOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2Vz
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UyNjNlYS4uMDAwMDAwMAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNl
cy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVNoYXJlZFgxMVJlc291cmNlcyogU2hhcmVkWDExUmVzb3VyY2VzOjptX3N0YXRp
Y1NoYXJlZFJlc291cmNlID0gMDsKLQotWDExT2ZmU2NyZWVuV2luZG93OjpYMTFPZmZTY3JlZW5X
aW5kb3coKQotICAgIDogbV9zaGFyZWRSZXNvdXJjZXMoMCkKLXsKLSAgICBtX3NoYXJlZFJlc291
cmNlcyA9IFNoYXJlZFgxMVJlc291cmNlczo6Y3JlYXRlKCk7Ci19Ci0KLVgxMU9mZlNjcmVlbldp
bmRvdzo6flgxMU9mZlNjcmVlbldpbmRvdygpCi17Ci19Ci0KLXZvaWQgWDExT2ZmU2NyZWVuV2lu
ZG93OjpyZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYgbmV3UmVjdCwgY29uc3QgdWludDMyX3Qg
d2luZG93SWQpCi17Ci0gICAgWFJlc2l6ZVdpbmRvdyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlz
cGxheSgpLCB3aW5kb3dJZCwgbmV3UmVjdC53aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKLSAg
ICBYRmx1c2gobV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSk7Ci19Ci0KLSNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZTY3Jl
ZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBYVmlzdWFsSW5mbyYgdmlzSW5mbywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoIW1fc2hhcmVkUmVzb3VyY2VzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMt
PngxMURpc3BsYXkoKTsKLSAgICBpZiAoIWRpc3BsYXkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghdmlzSW5mby52aXN1YWwpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZmlu
ZCB2YWxpZCBYVmlzdWFsLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2luZG93
IHhXaW5kb3cgPSBtX3NoYXJlZFJlc291cmNlcy0+Z2V0WFdpbmRvdygpOwotICAgIGlmICgheFdp
bmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3JtYXAgY21hcCA9IFhDcmVhdGVDb2xv
cm1hcChkaXNwbGF5LCB4V2luZG93LCB2aXNJbmZvLnZpc3VhbCwgQWxsb2NOb25lKTsKLSAgICBY
U2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRlLmJhY2tncm91bmRf
cGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOwotICAgIGF0dHJpYnV0ZS5ib3JkZXJfcGl4
ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOwotICAgIGF0dHJpYnV0ZS5jb2xvcm1hcCA9IGNt
YXA7Ci0gICAgYXR0cmlidXRlLmV2ZW50X21hc2sgPSBSZXNpemVSZWRpcmVjdE1hc2s7Ci0gICAg
dWludDMyX3QgdGVtcEhhbmRsZUlkOwotICAgIHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVXaW5kb3co
ZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCB2
aXNJbmZvLmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzSW5mby52aXN1YWwsIENXQmFja1BpeGVsIHwg
Q1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOwotCi0gICAgaWYgKCF0ZW1w
SGFuZGxlSWQpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVl
biB3aW5kb3cuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBYU2V0V2luZG93QmFj
a2dyb3VuZFBpeG1hcChkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIDApOwotICAgIFhDb21wb3NpdGVS
ZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIENvbXBvc2l0ZVJlZGlyZWN0TWFu
dWFsKTsKLSAgICBYTWFwV2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJZCk7Ci0gICAgKmhhbmRs
ZUlkID0gdGVtcEhhbmRsZUlkOwotfQotCi0jaWYgVVNFKEVHTCkKLXZvaWQgWDExT2ZmU2NyZWVu
V2luZG93OjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBF
R0xpbnQgaWQsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgVmlzdWFsSUQgdmlzdWFsSWQg
PSBzdGF0aWNfY2FzdDxWaXN1YWxJRD4oaWQpOwotCi0gICAgaWYgKCF2aXN1YWxJZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gRUdMIGhhcyBzdWdnZXN0ZWQgYSB2aXN1YWwgaWQsIHNvIGdl
dCB0aGUgcmVzdCBvZiB0aGUgdmlzdWFsIGluZm8gZm9yIHRoYXQgaWQuCi0gICAgWFZpc3VhbElu
Zm8gdmlzdWFsSW5mb1RlbXBsYXRlOwotICAgIG1lbXNldCgmdmlzdWFsSW5mb1RlbXBsYXRlLCAw
LCBzaXplb2YoWFZpc3VhbEluZm8pKTsKLSAgICB2aXN1YWxJbmZvVGVtcGxhdGUudmlzdWFsaWQg
PSB2aXN1YWxJZDsKLSAgICBpbnQgbWF0Y2hpbmdDb3VudCA9IDA7Ci0gICAgT3duUHRyWDExPFhW
aXN1YWxJbmZvPiBtYXRjaGluZ1Zpc3VhbHMgPSBhZG9wdFB0cihYR2V0VmlzdWFsSW5mbyhtX3No
YXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCBWaXN1YWxJRE1hc2ssICZ2aXN1YWxJbmZvVGVt
cGxhdGUsICZtYXRjaGluZ0NvdW50KSk7Ci0gICAgWFZpc3VhbEluZm8qIGZvdW5kVmlzdWFsID0g
MDsKLQotICAgIGlmIChtYXRjaGluZ1Zpc3VhbHMpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGk8IG1hdGNoaW5nQ291bnQ7IGkrKykgewotICAgICAgICAgICAgWFZpc3VhbEluZm8qIHRlbXAg
PSAmbWF0Y2hpbmdWaXN1YWxzW2ldOwotCi0gICAgICAgICAgICBpZiAobV9zaGFyZWRSZXNvdXJj
ZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgWFJl
bmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG1fc2hhcmVk
UmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIHRlbXAtPnZpc3VhbCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvdW5kVmlzdWFsID0gdGVtcDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGVt
cC0+ZGVwdGggPT0gMzIpIHsKLSAgICAgICAgICAgICAgICBmb3VuZFZpc3VhbCA9IHRlbXA7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoZm91bmRWaXN1YWwpCi0gICAgICAgICAgICBjcmVhdGVPZmZTY3JlZW5XaW5kb3coaGFu
ZGxlSWQsICpmb3VuZFZpc3VhbCwgc2l6ZSk7Ci0gICAgfQotfQotI2VuZGlmCi0KLSNlbmRpZgot
Ci12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdyhjb25zdCB1aW50MzJfdCB3
aW5kb3dJZCkKLXsKLSAgICBpZiAoIXdpbmRvd0lkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBE
aXNwbGF5KiBkaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKLSAgICBp
ZiAoIWRpc3BsYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFhEZXN0cm95V2luZG93KGRpc3Bs
YXksIHdpbmRvd0lkKTsKLX0KLQotRGlzcGxheSogWDExT2ZmU2NyZWVuV2luZG93OjpuYXRpdmVT
aGFyZWREaXNwbGF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPngx
MURpc3BsYXkoKTsKLX0KLQotYm9vbCBYMTFPZmZTY3JlZW5XaW5kb3c6OmlzWFJlbmRlckV4dGVu
c2lvblN1cHBvcnRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT5p
c1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93
UmVzb3VyY2VzLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMVdpbmRvd1Jlc291cmNlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzJk
MzNmLi4wMDAwMDAwCi0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBYMTFXaW5kb3dSZXNvdXJjZXNfaAotI2Rl
ZmluZSBYMTFXaW5kb3dSZXNvdXJjZXNfaAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk93blB0clgxMS5oIgotCi0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci0KLSNpZiBVU0UoRUdMKQotI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KLSNlbmRpZgotCi0j
aW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2luY2x1ZGUgPFgxMS9leHRl
bnNpb25zL1hyZW5kZXIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFSZXNvdXJjZXMpOwotCi1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBjcmVhdGUoKQotICAgIHsKLSAg
ICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291cmNlKQotICAgICAgICAgICAgbV9zdGF0aWNT
aGFyZWRSZXNvdXJjZSA9IG5ldyBTaGFyZWRYMTFSZXNvdXJjZXMoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZS0+cmVmKCk7Ci0KLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkUmVzb3VyY2UpOwotICAgIH0KLQotICAgIHZvaWQg
ZGVyZWYoKQotICAgIHsKLSAgICAgICAgaWYgKGRlcmVmQmFzZSgpKSB7Ci0gICAgICAgICAgICBt
X3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgRGlzcGxheSogeDExRGlzcGxheSgpCi0gICAgewotICAgICAg
ICBpZiAoIW1fZGlzcGxheSkgewotICAgICAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5
KDApOwotICAgICAgICAgICAgaWYgKCFtX2Rpc3BsYXkpIHsKLSAgICAgICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBtYWtlIGNvbm5lY3Rpb24gd2l0aCBYIik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0g
ICAgICAgICAgICBpZiAobV9kaXNwbGF5KSB7Ci0gICAgICAgICAgICAgICAgaW50IGV2ZW50QmFz
ZXAsIGVycm9yQmFzZXA7Ci0gICAgICAgICAgICAgICAgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNp
b24gPSBYUmVuZGVyUXVlcnlFeHRlbnNpb24obV9kaXNwbGF5LCAmZXZlbnRCYXNlcCwgJmVycm9y
QmFzZXApOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gbV9kaXNwbGF5OwotICAgIH0KLQotICAgIFdpbmRvdyBnZXRYV2luZG93KCkKLSAgICB7Ci0g
ICAgICAgIGlmICghbV93aW5kb3cpIHsKLSAgICAgICAgICAgIERpc3BsYXkqIGRweSA9IHgxMURp
c3BsYXkoKTsKLSAgICAgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci0g
ICAgICAgICAgICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIG1fd2luZG93ID0gWENyZWF0ZVNpbXBsZVdpbmRvdyhkcHksIFhEZWZhdWx0Um9vdFdpbmRv
dyhkcHkpLCAtMSwgLTEsIDEsIDEsIDAsIEJsYWNrUGl4ZWwoZHB5LCAwKSwgV2hpdGVQaXhlbChk
cHksIDApKTsKLSAgICAgICAgICAgIC8vIEZyb20gaHR0cDovL3Ryb25jaGUuY29tL2d1aS94L3hs
aWIvd2luZG93L2F0dHJpYnV0ZXMvCi0gICAgICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRl
cyhkcHksIG1fd2luZG93LCBDV092ZXJyaWRlUmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKLSAgICAg
ICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dpbmRvdyk7Ci0KLSAgICAgICAgICAgIGlmICghbV93
aW5kb3cpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zm
c2NyZWVuIHJvb3Qgd2luZG93LiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1fd2luZG93OwotICAgIH0KLQot
ICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKLSAgICB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBTaGFyZWRYMTFSZXNvdXJjZXMoKQotICAgICAgICA6IG1fc3VwcG9ydHNYUmVuZGVy
RXh0ZW5zaW9uKGZhbHNlKQotICAgICAgICAsIG1fd2luZG93KDApCi0gICAgICAgICwgbV9kaXNw
bGF5KDApCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgflNoYXJlZFgxMVJlc291cmNlcygp
Ci0gICAgewotICAgICAgICBpZiAoIW1fZGlzcGxheSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAobV93aW5kb3cpIHsKLSAgICAgICAgICAgIFhVbm1hcFdpbmRvdyhtX2Rpc3Bs
YXksIG1fd2luZG93KTsKLSAgICAgICAgICAgIFhEZXN0cm95V2luZG93KG1fZGlzcGxheSwgbV93
aW5kb3cpOwotICAgICAgICAgICAgbV93aW5kb3cgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAg
WENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOwotICAgICAgICBtX2Rpc3BsYXkgPSAwOwotICAgIH0K
LQotICAgIHN0YXRpYyBTaGFyZWRYMTFSZXNvdXJjZXMqIG1fc3RhdGljU2hhcmVkUmVzb3VyY2U7
Ci0gICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKLSAgICBXaW5kb3cgbV93aW5k
b3c7Ci0gICAgRGlzcGxheSogbV9kaXNwbGF5OwotfTsKLQotY2xhc3MgWDExT2ZmU2NyZWVuV2lu
ZG93IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYMTFPZmZTY3JlZW5XaW5kb3cpOwotCi1w
dWJsaWM6Ci0gICAgWDExT2ZmU2NyZWVuV2luZG93KCk7Ci0gICAgdmlydHVhbCB+WDExT2ZmU2Ny
ZWVuV2luZG93KCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVP
ZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBYVmlzdWFsSW5mbyYsIGNvbnN0IEludFNp
emUmID0gSW50U2l6ZSgxLCAxKSk7Ci0jaWYgVVNFKEVHTCkKLSAgICB2b2lkIGNyZWF0ZU9mZlNj
cmVlbldpbmRvdyh1aW50MzJfdCosIGNvbnN0IEVHTGludCwgY29uc3QgSW50U2l6ZSYgPSBJbnRT
aXplKDEsIDEpKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgdm9pZCBkZXN0cm95V2luZG93KGNvbnN0
IHVpbnQzMl90KTsKLSAgICB2b2lkIHJlU2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgY29uc3Qg
dWludDMyX3QpOwotICAgIERpc3BsYXkqIG5hdGl2ZVNoYXJlZERpc3BsYXkoKSBjb25zdDsKLSAg
ICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIFJlZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+IG1fc2hhcmVkUmVzb3VyY2VzOwotfTsKLQot
fQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0
dXJlcy9mZWF0dXJlcy5wcmYgVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5w
cmYKaW5kZXggY2M5MDcyZC4uZTM5YzBjMiAxMDA2NDQKLS0tIFRvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBUb29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2Zl
YXR1cmVzLnByZgpAQCAtMTM4LDcgKzEzOCw3IEBAIGRlZmluZVRlc3QoZGV0ZWN0RmVhdHVyZXMp
IHsKICAgICB1c2U/KDNkX2dyYXBoaWNzKSB7CiAgICAgICAgIG1hYzogV0VCS0lUX0NPTkZJRyAr
PSB1c2VfZ3JhcGhpY3Nfc3VyZmFjZQogICAgICAgICB3aW4zMjpjb250YWlucyhRVF9DT05GSUcs
IG9wZW5nbGVzMik6IFdFQktJVF9DT05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZhY2UKLSAgICAg
ICAgbGludXgtKjpjb250YWlucyhXRUJLSVRfQ09ORklHLCBoYXZlX2dseCk6Y29udGFpbnMoV0VC
S0lUX0NPTkZJRywgaGF2ZV94Y29tcG9zaXRlKTpjb250YWlucyhXRUJLSVRfQ09ORklHLCBoYXZl
X3hyZW5kZXIpOiBXRUJLSVRfQ09ORklHICs9IHVzZV9ncmFwaGljc19zdXJmYWNlCisgICAgICAg
IGxpbnV4LSo6Y29udGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV9nbHgpOmNvbnRhaW5zKFdFQktJ
VF9DT05GSUcsIGhhdmVfeGNvbXBvc2l0ZSk6Y29udGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV94
cmVuZGVyKTogV0VCS0lUX0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFjZSB1c2VfZ2x4CiAg
ICAgfQogCiAgICAgIyBTbGlkZXIgVG91Y2ggaXMgc2Vuc2libGUgdG8gdXNlIHdoZW4gY29tcGls
aW5nIFdlYktpdDIK
</data>
<flag name="commit-queue"
          id="205974"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186896</attachid>
            <date>2013-02-06 12:37:53 -0800</date>
            <delta_ts>2013-02-08 00:53:09 -0800</delta_ts>
            <desc>patchv3</desc>
            <filename>glxreviewchanges.patch</filename>
            <type>text/plain</type>
            <size>59698</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDk2N2JiZjIuLjRiOTU2NTQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEz
LTAyLTA2ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtRdF1bV2ViR0xdIFNoYXJlIHRoZSBjb21tb24gY29kZSBiZXR3ZWVu
IEdyYXBoaWNzU3VyZmFjZUdMWCBhbmQgWDExV2luZG93UmVzb3VyY2VzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBX
ZWJHTCB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IGR1cGxpY2F0ZSBj
b2RlIGluIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlR0xY
LiBObyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAqIFBsYXRmb3JtRWZs
LmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVHTENvbmZpZ1NlbGVjdG9yOjpwaXhtYXBDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3IuaDoKKyAgICAgICAg
KEVHTENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oOgorICAgICAgICAo
V2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OkdMWENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjp2aXN1YWxJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OkdMWENvbmZpZ1NlbGVjdG9yOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6Y3JlYXRlU3VyZmFjZUNvbmZpZyk6CisgICAgICAg
IChHTFhDb25maWdTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUFSQkV4
dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4dDo6R0xYT2Zm
U2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3JlZW5Db250ZXh0Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRm
b3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29udGV4
dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWENvbnRleHQuaDoKKyAgICAgICAgKEdMWE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpHTFhQQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oOgorICAgICAgICAoR0xYVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChHTFhQQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6R3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpp
bml0aWFsaXplKToKKyAgICAgICAgKEdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjcmVhdGVQaXhtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpmbGFncyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICBObyBu
ZXcgZnVuY3Rpb25hbGl0eSBhZGRlZC4gTWFkZSBjaGFuZ2VzIHRvIHRha2UgdGhlIGNvbW1vbiBj
b2RlIGludG8gdXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMVdpbmRvd1Jlc291cmNlcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9u
OjpEaXNwbGF5Q29ubmVjdGlvbik6CisgICAgICAgIChEaXNwbGF5Q29ubmVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5Q29ubmVjdGlvbjo6fkRpc3BsYXlDb25uZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9uOjpkaXNwbGF5KToKKyAgICAgICAgKE9m
ZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmU2NyZWVuUm9vdFdpbmRv
dzo6T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3JlZW5Sb290
V2luZG93Ojp+T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3Jl
ZW5Sb290V2luZG93Ojpyb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6
cmVzaXplV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6Y3JlYXRlT2ZmU2Ny
ZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6ZGVzdHJveVdpbmRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6OmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6WDExSGVscGVyOjpvZmZzY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVYUGl4bWFwQ3JlYXRpb25FcnJv
cik6CisgICAgICAgIChYMTFIZWxwZXIpOgorICAgICAgICAoU2NvcGVkWFBpeG1hcENyZWF0aW9u
RXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVy
cm9ySGFuZGxlcjo6U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6flNjb3BlZFhQaXht
YXBDcmVhdGlvbkVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRYUGl4bWFw
Q3JlYXRpb25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24pOgorICAgICAgICBNb3ZlZCBj
b21tb24gY29kZSBmcm9tIEdyYXBoaWNzU3VyZmFjZUdMWCB0byBYMTFIZWxwZXIuCisKIDIwMTMt
MDItMDYgIEpvbmF0aG9uIEpvbmdzbWEgIDxqb25hdGhvbi5qb25nc21hQGNvbGxhYm9yYS5jb20+
CiAKICAgICAgICAgW0dTdHJlYW1lcl0gTWVkaWFQbGF5ZXIncyBjb2RlIGlzIG5vdCBlYXNpbHkg
cmV1c2FibGUgYnkgb3RoZXIgR1N0cmVhbWVyLWJhc2VkIHBsYXllcnMKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZQppbmRleCBlMThiZGI1Li41MTYxM2NlIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0x
MzIsOSArMTMyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFN1cmZhY2UuY3BwCi0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1h
dC5jcHAKIAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNh
aXJvLmNwcApAQCAtMzE2LDggKzMxMyw3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNl
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJm
YWNlR0xYLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2lu
ZG93UmVzb3VyY2VzLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
WDExSGVscGVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0uY3BwCiAgICAgKQpAQCAtMzI4LDYgKzMyNCwxMiBAQCBpZiAoV1RGX1VT
RV8zRF9HUkFQSElDUykKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xDb250ZXh0LmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuY3BwCiAgICAgICAgICkKKyAgICBlbHNlICgpCisgICAgICAgIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisgICAgICAgICkKICAgICBlbmRp
ZiAoKQogCiAgICAgaWYgKFdURl9VU0VfT1BFTkdMX0VTXzIpCmRpZmYgLS1naXQgU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGE0ZjI0ODgu
LjI3Y2FhY2UgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCkBAIC00MjE3LDcgKzQyMTcsMTIgQEAgdXNlPyhHUkFQSElDU19T
VVJGQUNFKSB7CiAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
d2luL0dyYXBoaWNzU3VyZmFjZVdpbi5jcHAKICAgICB9CiAgICAgaGF2ZT8oWENPTVBPU0lURSkg
ewotICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFw
aGljc1N1cmZhY2VHTFguY3BwCisgICAgICAgIEhFQURFUlMgKz0gXAorICAgICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5oIFwKKyAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5oCisgICAgICAg
IFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMUhlbHBlci5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3Bw
CmluZGV4IDI2ZDU2YTUuLmU2NzExZjggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApAQCAtMzMsMTMg
KzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6
OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQogICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoKQog
ewotICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgTmF0aXZlT2ZmU2NyZWVuV2lu
ZG93KCkpOwotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgRUdMQ29uZmlnU2Vs
ZWN0b3IobV9uYXRpdmVSZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgpKSk7CisgICAgbV9j
b25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdTZWxlY3RvcihOYXRpdmVXcmFw
cGVyOjpuYXRpdmVEaXNwbGF5KCkpKTsKICAgICBtX3NoYXJlZERpc3BsYXkgPSBtX2NvbmZpZ1Nl
bGVjdG9yLT5kaXNwbGF5KCk7CiAKICAgICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19E
SVNQTEFZKSB7CiAgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBudWxscHRyOwotICAgICAgICBt
X25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NTcsNyArNTUsNyBAQCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbmF0aXZlUmVzb3Vy
Y2UtPmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsIHZpc3VhbElkKTsKKyAg
ICBOYXRpdmVXcmFwcGVyOjpjcmVhdGVPZmZTY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlLCB2
aXN1YWxJZCk7CiAKICAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CiAgICAgICAgIGRlc3Ryb3ko
KTsKQEAgLTEwNCw3ICsxMDIsNyBAQCB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3
YXBCdWZmZXJzKCkKIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpCiB7
CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKLSAgICBtX25hdGl2ZVJlc291cmNl
LT5kZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBOYXRpdmVXcmFwcGVyOjpkZXN0
cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKICAgICBmcmVlRUdMUmVzb3VyY2VzKCk7CiAgICAg
bV9idWZmZXJIYW5kbGUgPSAwOwogfQpAQCAtMTI4LDcgKzEyNiw3IEBAIHZvaWQgRUdMV2luZG93
VHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNlcygpCiB2b2lkIEVHTFdpbmRvd1RyYW5z
cG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB7CiAgICAg
R0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwotICAgIG1fbmF0aXZlUmVz
b3VyY2UtPnJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2J1ZmZlckhhbmRsZSk7CisgICAgTmF0aXZl
V3JhcHBlcjo6cmVzaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9F
R0xTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWds
L0VHTFN1cmZhY2UuaAppbmRleCA1YzI4OGE5Li4yZWE3MDQyIDEwMDY0NAotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaApA
QCAtMzEsMTMgKzMxLDEzIEBACiAjaW5jbHVkZSAiRUdMQ29uZmlnU2VsZWN0b3IuaCIKICNpbmNs
dWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgogCi0jaW5jbHVkZSA8Z2x4L1gxMVdpbmRvd1Jlc291
cmNlcy5oPgorI2luY2x1ZGUgPGdseC9YMTFIZWxwZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXR5cGVkZWYgWDExT2ZmU2NyZWVuV2luZG93IE5hdGl2ZU9mZlNjcmVlbldpbmRvdzsK
K3R5cGVkZWYgWDExSGVscGVyIE5hdGl2ZVdyYXBwZXI7CiAKIC8vIENvbnRlbnRzIG9mIHRoZSBz
dXJmYWNlIGFyZSBiYWNrZWQgYnkgbmF0aXZlIHdpbmRvdy4KIGNsYXNzIEVHTFdpbmRvd1RyYW5z
cG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgewpAQCAtNTIsNyArNTIsNiBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBmcmVlRUdMUmVzb3VyY2VzKCk7Ci0gICAg
T3duUHRyPE5hdGl2ZU9mZlNjcmVlbldpbmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsKICAgICBPd25Q
dHI8RUdMQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogCmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1Nl
bGVjdG9yLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dM
WENvbmZpZ1NlbGVjdG9yLmgKaW5kZXggZGQxYjYyYi4uZWE3MzkyMSAxMDA2NDQKLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rv
ci5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
Q29uZmlnU2VsZWN0b3IuaApAQCAtMjYsMjEgKzI2LDMwIEBACiAjaWZuZGVmIEdMWENvbmZpZ1Nl
bGVjdG9yX2gKICNkZWZpbmUgR0xYQ29uZmlnU2VsZWN0b3JfaAogCi0jaW5jbHVkZSAiWDExV2lu
ZG93UmVzb3VyY2VzLmgiCi0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShHTFgpCiAKKyNpbmNsdWRlICJYMTFIZWxwZXIuaCIKKyNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZz
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGludCBjbGllbnRBdHRyaWJ1dGVz
W10gPSB7CisgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaXMgYSBzZXQga2V5IHZhbHVlIHBhaXJz
IHN0b3JlZCBpbiBhIHNpbXBsZSBhcnJheS4KKyAgICBHTFhfTEVWRUwsICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLAorICAgIHN0YXRpY19jYXN0PGludD4oR0xYX1ZJU1VBTF9JRCksICAgIDAs
CisgICAgR0xYX0RSQVdBQkxFX1RZUEUsICAgICAgICAgICAgICAgICAgR0xYX1BJWE1BUF9CSVQs
CisgICAgR0xYX0JJTkRfVE9fVEVYVFVSRV9UQVJHRVRTX0VYVCwgICAgR0xYX1RFWFRVUkVfMkRf
QklUX0VYVCwKKyAgICBHTFhfQklORF9UT19URVhUVVJFX1JHQkFfRVhULCAgICAgICBUUlVFLAor
ICAgIDAKK307CisKIGNsYXNzIEdMWENvbmZpZ1NlbGVjdG9yIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShHTFhDb25maWdTZWxlY3Rvcik7CiAKIHB1YmxpYzoKLSAgICBHTFhDb25maWdTZWxl
Y3RvcihEaXNwbGF5KiB4RGlzcGxheSwgYm9vbCBzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24pCisg
ICAgR0xYQ29uZmlnU2VsZWN0b3IoKQogICAgICAgICA6IG1fcGJ1ZmZlckZCQ29uZmlnKDApCiAg
ICAgICAgICwgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKDApCi0gICAgICAgICwgbV9zaGFyZWRE
aXNwbGF5KHhEaXNwbGF5KQotICAgICAgICAsIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKHN1
cHBvcnRzWFJlbmRlckV4dGVuc2lvbikKICAgICB7CiAgICAgfQogCkBAIC01Myw3ICs2Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKCFzdXJmYWNlQ29udGV4dENvbmZpZygpKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICAgICAgcmV0dXJuIGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyht
X3NoYXJlZERpc3BsYXksIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyk7CisgICAgICAgIHJldHVy
biBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIG1f
c3VyZmFjZUNvbnRleHRGQkNvbmZpZyk7CiAgICAgfQogCiAgICAgR0xYRkJDb25maWcgcEJ1ZmZl
ckNvbnRleHRDb25maWcoKQpAQCAtNzAsMTAgKzc5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIE5vbmUKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGludCBudW1BdmFpbGFibGVD
b25maWdzOwotICAgICAgICAgICAgT3duUHRyWDExPEdMWEZCQ29uZmlnPiB0ZW1wKGdsWENob29z
ZUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgRGVmYXVsdFNjcmVlbihtX3NoYXJlZERpc3BsYXkp
LCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29uZmlncykpOwotICAgICAgICAgICAgaWYgKG51
bUF2YWlsYWJsZUNvbmZpZ3MpCi0gICAgICAgICAgICAgICAgbV9wYnVmZmVyRkJDb25maWcgPSB0
ZW1wWzBdOworICAgICAgICAgICAgbV9wYnVmZmVyRkJDb25maWcgPSBmaW5kTWF0Y2hpbmdDb25m
aWcoYXR0cmlidXRlcyk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbV9wYnVmZmVyRkJD
b25maWc7CkBAIC04Nyw2ICs5MywxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3N1cmZh
Y2VDb250ZXh0RkJDb25maWc7CiAgICAgfQogCisgICAgR0xYRkJDb25maWcgc3VyZmFjZUNsaWVu
dENvbmZpZyhpbnQgZGVwdGgsIFZpc3VhbElEIGlkKQorICAgIHsKKyAgICAgICAgY2xpZW50QXR0
cmlidXRlc1szXSA9IHN0YXRpY19jYXN0PGludD4oaWQpOworICAgICAgICBjbGllbnRBdHRyaWJ1
dGVzWzhdID0gZGVwdGggPT0gMzIgPyBHTFhfQklORF9UT19URVhUVVJFX1JHQkFfRVhUIDogR0xY
X0JJTkRfVE9fVEVYVFVSRV9SR0JfRVhUOworCisgICAgICAgIHJldHVybiBmaW5kTWF0Y2hpbmdD
b25maWcoY2xpZW50QXR0cmlidXRlcywgZGVwdGgsIGlkKTsKKyAgICB9CisKICAgICB2b2lkIHJl
c2V0KCkKICAgICB7CiAgICAgICAgIG1fcGJ1ZmZlckZCQ29uZmlnID0gMDsKQEAgLTExMCw0MyAr
MTI0LDQzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb25lCiAgICAgICAgIH07CiAKKyAgICAg
ICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnID0gZmluZE1hdGNoaW5nQ29uZmlnKGF0dHJpYnV0
ZXMpOworICAgIH0KKworICAgIEdMWEZCQ29uZmlnIGZpbmRNYXRjaGluZ0NvbmZpZyhjb25zdCBp
bnQgYXR0cmlidXRlc1tdLCBpbnQgZGVwdGggPSAzMiwgVmlzdWFsSUQgaWQgPSAwKQorICAgIHsK
ICAgICAgICAgaW50IG51bUF2YWlsYWJsZUNvbmZpZ3M7Ci0gICAgICAgIE93blB0clgxMTxHTFhG
QkNvbmZpZz4gdGVtcChnbFhDaG9vc2VGQkNvbmZpZyhtX3NoYXJlZERpc3BsYXksIERlZmF1bHRT
Y3JlZW4obV9zaGFyZWREaXNwbGF5KSwgYXR0cmlidXRlcywgJm51bUF2YWlsYWJsZUNvbmZpZ3Mp
KTsKKyAgICAgICAgT3duUHRyWDExPEdMWEZCQ29uZmlnPiB0ZW1wKGdsWENob29zZUZCQ29uZmln
KFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKFgxMUhlbHBlcjo6bmF0
aXZlRGlzcGxheSgpKSwgYXR0cmlidXRlcywgJm51bUF2YWlsYWJsZUNvbmZpZ3MpKTsKIAotICAg
ICAgICBpZiAoIW51bUF2YWlsYWJsZUNvbmZpZ3MpIHsKLSAgICAgICAgICAgIG1fc3VyZmFjZUNv
bnRleHRGQkNvbmZpZyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKCFudW1BdmFpbGFibGVDb25maWdzIHx8ICF0ZW1wLmdldCgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICAgICAgT3duUHRyWDExPFhWaXN1YWxJbmZvPiBzY29wZWRWaXN1YWxJ
bmZvOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF2YWlsYWJsZUNvbmZpZ3M7ICsr
aSkgewotICAgICAgICAgICAgc2NvcGVkVmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNv
bmZpZyhtX3NoYXJlZERpc3BsYXksIHRlbXBbaV0pOworICAgICAgICAgICAgc2NvcGVkVmlzdWFs
SW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXko
KSwgdGVtcFtpXSk7CiAgICAgICAgICAgICBpZiAoIXNjb3BlZFZpc3VhbEluZm8uZ2V0KCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChpZCAmJiBzY29wZWRW
aXN1YWxJbmZvLT5kZXB0aCA9PSBkZXB0aCAmJiBzY29wZWRWaXN1YWxJbmZvLT52aXN1YWxpZCA9
PSBpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVtcFtpXTsKKwogI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQotICAgICAgICAgICAgaWYgKG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKSB7
Ci0gICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5k
VmlzdWFsRm9ybWF0KG1fc2hhcmVkRGlzcGxheSwgc2NvcGVkVmlzdWFsSW5mby0+dmlzdWFsKTsK
LSAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnID0gdGVt
cFtpXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKFgxMUhlbHBlcjo6aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpIHsK
KyAgICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRW
aXN1YWxGb3JtYXQoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIHNjb3BlZFZpc3VhbEluZm8t
PnZpc3VhbCk7CisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBkZXB0aCA9PSAzMiAmJiBm
b3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGVtcFtpXTsKICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgaWYgKCFtX3N1cmZh
Y2VDb250ZXh0RkJDb25maWcgJiYgc2NvcGVkVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpIHsKLSAg
ICAgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSB0ZW1wW2ldOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNjb3BlZFZp
c3VhbEluZm8tPmRlcHRoID09IGRlcHRoKQorICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wW2ld
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gRGlkIG5vdCBmaW5kIGFueSB2aXN1YWwgc3VwcG9y
dGluZyBhbHBoYSwgc2VsZWN0IHRoZSBmaXJzdCBhdmFpbGFibGUgY29uZmlnLgotICAgICAgICBp
ZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZykKLSAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRl
eHRGQkNvbmZpZyA9IHRlbXBbMF07CisgICAgICAgIHJldHVybiB0ZW1wWzBdOwogICAgIH0KIAog
ICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlckZCQ29uZmlnOwogICAgIEdMWEZCQ29uZmlnIG1fc3Vy
ZmFjZUNvbnRleHRGQkNvbmZpZzsKLSAgICBEaXNwbGF5KiBtX3NoYXJlZERpc3BsYXk7Ci0gICAg
Ym9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKIH07CiAKIH0KZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQu
Y3BwCmluZGV4IGE5ZjMyMmQuLjhmNDA0NjMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcApAQCAtMjgs
NiArMjgsOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoR0xY
KQogCisjaW5jbHVkZSAiWDExSGVscGVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdHlw
ZWRlZiBHTFhDb250ZXh0ICgqR0xYQ1JFQVRFQ09OVEVYVEFUVFJJQlNBUkJQUk9DKShEaXNwbGF5
KiwgR0xYRkJDb25maWcsIEdMWENvbnRleHQsIEJvb2wsIGNvbnN0IGludCopOwpAQCAtMzgsMjAg
KzQwLDE5IEBAIHN0YXRpYyBpbnQgQXR0cmlic1tdID0gewogICAgIEdMWF9MT1NFX0NPTlRFWFRf
T05fUkVTRVRfQVJCLAogICAgIDAgfTsKIAotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFSQkV4dGVu
c2lvbnMoRGlzcGxheSogZGlzcGxheSkKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVBUkJFeHRlbnNp
b25zKCkKIHsKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwogICAgIGlmIChp
bml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgIGlmIChHTFBsYXRmb3JtQ29udGV4dDo6c3VwcG9ydHNHTFhFeHRlbnNpb24oZGlzcGxheSwg
IkdMWF9BUkJfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyIpKQorICAgIGlmIChHTFBsYXRmb3Jt
Q29udGV4dDo6c3VwcG9ydHNHTFhFeHRlbnNpb24oWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCks
ICJHTFhfQVJCX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MiKSkKICAgICAgICAgZ2xYQ3JlYXRl
Q29udGV4dEF0dHJpYnNBUkIgPSByZWludGVycHJldF9jYXN0PEdMWENSRUFURUNPTlRFWFRBVFRS
SUJTQVJCUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVi
eXRlKj4oImdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCIikpKTsKIH0KIAogR0xYT2ZmU2NyZWVu
Q29udGV4dDo6R0xYT2ZmU2NyZWVuQ29udGV4dCgpCiAgICAgOiBHTFBsYXRmb3JtQ29udGV4dCgp
Ci0gICAgLCBtX2Rpc3BsYXkoMCkKIHsKIH0KIApAQCAtNjAsMTcgKzYxLDE3IEBAIGJvb2wgR0xY
T2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkK
ICAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZGlzcGxh
eSA9IHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKTsKLSAgICBpZiAoIW1fZGlzcGxheSkKKyAgICBE
aXNwbGF5KiB4MTFEaXNwbGF5ID0gc3VyZmFjZS0+c2hhcmVkRGlzcGxheSgpOworICAgIGlmICgh
eDExRGlzcGxheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgR0xYRkJDb25maWcgY29u
ZmlnID0gc3VyZmFjZS0+Y29uZmlndXJhdGlvbigpOwogCiAgICAgaWYgKGNvbmZpZykgewotICAg
ICAgICBpbml0aWFsaXplQVJCRXh0ZW5zaW9ucyhtX2Rpc3BsYXkpOworICAgICAgICBpbml0aWFs
aXplQVJCRXh0ZW5zaW9ucygpOwogCiAgICAgICAgIGlmIChnbFhDcmVhdGVDb250ZXh0QXR0cmli
c0FSQikKLSAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0ZUNvbnRleHRBdHRy
aWJzQVJCKG1fZGlzcGxheSwgY29uZmlnLCAwLCB0cnVlLCBBdHRyaWJzKTsKKyAgICAgICAgICAg
IG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0ZUNvbnRleHRBdHRyaWJzQVJCKHgxMURpc3BsYXks
IGNvbmZpZywgMCwgdHJ1ZSwgQXR0cmlicyk7CiAKICAgICAgICAgaWYgKG1fY29udGV4dEhhbmRs
ZSkgewogICAgICAgICAgICAgLy8gVGhlIEdMWF9BUkJfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVz
cyBzcGVjIHJlcXVpcmVzIHRoYXQgYSBjb250ZXh0IGNyZWF0ZWQgd2l0aApAQCAtODAsMTEgKzgx
LDExIEBAIGJvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3Vy
ZmFjZSogc3VyZmFjZSkKICAgICAgICAgICAgIGlmIChwbGF0Zm9ybU1ha2VDdXJyZW50KHN1cmZh
Y2UpICYmIEdMUGxhdGZvcm1Db250ZXh0OjpzdXBwb3J0c0dMRXh0ZW5zaW9uKCJHTF9BUkJfcm9i
dXN0bmVzcyIpKQogICAgICAgICAgICAgICAgIG1fcmVzZXRMb3N0Q29udGV4dCA9IHRydWU7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ2xYRGVzdHJveUNvbnRleHQobV9kaXNw
bGF5LCBtX2NvbnRleHRIYW5kbGUpOworICAgICAgICAgICAgICAgIGdsWERlc3Ryb3lDb250ZXh0
KHgxMURpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
IW1fY29udGV4dEhhbmRsZSkKLSAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGdsWENyZWF0
ZU5ld0NvbnRleHQobV9kaXNwbGF5LCBjb25maWcsIEdMWF9SR0JBX1RZUEUsIDAsIHRydWUpOwor
ICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlTmV3Q29udGV4dCh4MTFEaXNw
bGF5LCBjb25maWcsIEdMWF9SR0JBX1RZUEUsIDAsIHRydWUpOwogCiAgICAgICAgIGlmIChtX2Nv
bnRleHRIYW5kbGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwOSwxNCArMTEwLDIx
IEBAIGJvb2wgR0xYT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRm
b3JtU3VyZmFjZSogc3VyZmFjZSkKIAogdm9pZCBHTFhPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9y
bVJlbGVhc2VDdXJyZW50KCkKIHsKLSAgICBnbFhNYWtlQ3VycmVudChtX2Rpc3BsYXksIDAsIDAp
OwotICAgIG1fZGlzcGxheSA9IDA7CisgICAgRGlzcGxheSogeDExRGlzcGxheSA9IFgxMUhlbHBl
cjo6bmF0aXZlRGlzcGxheSgpOworICAgIGlmICgheDExRGlzcGxheSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ2xYTWFrZUN1cnJlbnQoeDExRGlzcGxheSwgMCwgMCk7CiB9CiAKIHZvaWQgR0xY
T2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcygpCiB7CisgICAgRGlzcGxheSogeDExRGlz
cGxheSA9IFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpOworICAgIGlmICgheDExRGlzcGxheSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1fY29udGV4dEhhbmRsZSkKLSAgICAgICAgZ2xY
RGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOworICAgICAgICBnbFhE
ZXN0cm95Q29udGV4dCh4MTFEaXNwbGF5LCBtX2NvbnRleHRIYW5kbGUpOwogCiAgICAgbV9jb250
ZXh0SGFuZGxlID0gMDsKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmgKaW5kZXggY2JkZTBlZi4uNDQ0ZTdmMiAx
MDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
TFhDb250ZXh0LmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9HTFhDb250ZXh0LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIHZvaWQgZnJlZVJlc291cmNlcygpOwotICAgIERpc3BsYXkqIG1fZGlzcGxheTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IDgwZmMyNjIuLmMwM2MzZDAgMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5j
cHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmNwcApAQCAtMzYsMTUgKzM2LDggQEAgc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0
cmlidXRlc1tdID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0gKIEdM
WFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UoKQogICAgIDogR0xQbGF0Zm9y
bVN1cmZhY2UoKQogewotICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgWDExT2Zm
U2NyZWVuV2luZG93KCkpOwotICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fbmF0aXZlUmVzb3VyY2Ut
Pm5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKLQotICAgIGlmICghbV9zaGFyZWREaXNwbGF5KSB7Ci0g
ICAgICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhDb25maWdTZWxlY3Rv
cihtX3NoYXJlZERpc3BsYXksIG1fbmF0aXZlUmVzb3VyY2UtPmlzWFJlbmRlckV4dGVuc2lvblN1
cHBvcnRlZCgpKSk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0gWDExSGVscGVyOjpuYXRpdmVEaXNw
bGF5KCk7CisgICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhDb25maWdTZWxl
Y3RvcigpKTsKICAgICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IHZpc0luZm8obV9jb25maWdTZWxl
Y3Rvci0+dmlzdWFsSW5mbygpKTsKIAogICAgIGlmICghdmlzSW5mby5nZXQoKSkgewpAQCAtNTIs
NyArNDUsNyBAQCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbmF0aXZlUmVzb3VyY2UtPmNyZWF0ZU9mZlNj
cmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsICp2aXNJbmZvLmdldCgpKTsKKyAgICBYMTFIZWxw
ZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUsICp2aXNJbmZvLmdldCgp
KTsKIAogICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKICAgICAgICAgZGVzdHJveSgpOwpAQCAt
NzQsNyArNjcsNyBAQCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYVHJhbnNwb3J0U3VyZmFjZTo6
Y29uZmlndXJhdGlvbigpCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIG5ld1JlY3QpCiB7CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21l
dHJ5KG5ld1JlY3QpOwotICAgIG1fbmF0aXZlUmVzb3VyY2UtPnJlU2l6ZVdpbmRvdyhuZXdSZWN0
LCBtX2RyYXdhYmxlKTsKKyAgICBYMTFIZWxwZXI6OnJlc2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2Ry
YXdhYmxlKTsKICAgICAvLyBGb3JjZSByZXNpemUgb2YgR0wgc3VyZmFjZSBhZnRlciB3aW5kb3cg
cmVzaXplLgogICAgIGdsWFN3YXBCdWZmZXJzKHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSk7
CiB9CkBAIC05OSw3ICs5Miw3IEBAIHZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgp
CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKIAogICAgIGlmIChtX2J1ZmZlckhh
bmRsZSkgewotICAgICAgICBtX25hdGl2ZVJlc291cmNlLT5kZXN0cm95V2luZG93KG1fYnVmZmVy
SGFuZGxlKTsKKyAgICAgICAgWDExSGVscGVyOjpkZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxl
KTsKICAgICAgICAgbV9idWZmZXJIYW5kbGUgPSAwOwogICAgICAgICBtX2RyYXdhYmxlID0gMDsK
ICAgICB9CkBAIC0xMjEsMTUgKzExNCw5IEBAIEdMWFBCdWZmZXI6On5HTFhQQnVmZmVyKCkKIAog
dm9pZCBHTFhQQnVmZmVyOjppbml0aWFsaXplKCkKIHsKLSAgICBtX25hdGl2ZVJlc291cmNlID0g
YWRvcHRQdHIobmV3IFgxMU9mZlNjcmVlbldpbmRvdygpKTsKLSAgICBtX3NoYXJlZERpc3BsYXkg
PSBtX25hdGl2ZVJlc291cmNlLT5uYXRpdmVTaGFyZWREaXNwbGF5KCk7Ci0KLSAgICBpZiAoIW1f
c2hhcmVkRGlzcGxheSkgewotICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX3NoYXJlZERpc3BsYXkgPSBYMTFIZWxwZXI6Om5h
dGl2ZURpc3BsYXkoKTsKIAotICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xY
Q29uZmlnU2VsZWN0b3IobV9zaGFyZWREaXNwbGF5LCBtX25hdGl2ZVJlc291cmNlLT5pc1hSZW5k
ZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkpOworICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0
cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7CiAgICAgR0xYRkJDb25maWcgY29uZmlnID0gbV9j
b25maWdTZWxlY3Rvci0+cEJ1ZmZlckNvbnRleHRDb25maWcoKTsKIAogICAgIGlmICghY29uZmln
KSB7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYU3VyZmFjZS5oCmluZGV4IDg0NzE1YzEuLjllNzczMmEgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFj
ZS5oCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgog
I2luY2x1ZGUgIkdMWENvbmZpZ1NlbGVjdG9yLmgiCi0jaW5jbHVkZSAiWDExV2luZG93UmVzb3Vy
Y2VzLmgiCisjaW5jbHVkZSAiWDExSGVscGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDcsNyArNDcsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXpl
KCk7Ci0gICAgT3duUHRyPFgxMU9mZlNjcmVlbldpbmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsKICAg
ICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1fY29uZmlnU2VsZWN0b3I7CiB9OwogI2VuZGlm
CkBAIC02NCw3ICs2Myw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXpl
KCk7CiAgICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7Ci0gICAgT3duUHRyPFgxMU9mZlNjcmVlbldp
bmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsKICAgICBPd25QdHI8R0xYQ29uZmlnU2VsZWN0b3I+IG1f
Y29uZmlnU2VsZWN0b3I7CiB9OwogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAK
aW5kZXggNzc1N2U2OC4uZTZiMTQ0YSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xY
LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMyBJ
bnRlbCBDb3Jwb3JhdGlvbi4KIAogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsMTkgKzMxLDE1IEBACiAjaW5j
bHVkZSA8UUd1aUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgogI2luY2x1
ZGUgPHFwYS9xcGxhdGZvcm1uYXRpdmVpbnRlcmZhY2UuaD4KLSNlbGlmIFBMQVRGT1JNKEVGTCkK
LSNpbmNsdWRlIDxHTC9nbC5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxHTC9nbGV4dC5oPgogI2lu
Y2x1ZGUgPEdML2dseC5oPgotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaW5jbHVkZSA8WDExL2V4
dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIu
aD4KKyNlbHNlCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorI2VuZGlmCiAKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKKyNpbmNsdWRlICJHTFhDb25maWdTZWxlY3Rvci5oIgogCi1zdGF0aWMgbG9u
ZyBYMTFPdmVycmlkZVJlZGlyZWN0ID0gMUwgPDwgOTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIFBGTkdMWEJJTkRURVhJTUFHRUVYVFBST0MgcEdsWEJpbmRUZXhJbWFnZUVYVCA9IDA7
CiBzdGF0aWMgUEZOR0xYUkVMRUFTRVRFWElNQUdFRVhUUFJPQyBwR2xYUmVsZWFzZVRleEltYWdl
RVhUID0gMDsKQEAgLTUyLDE1OSArNDksNyBAQCBzdGF0aWMgUEZOR0xHRU5GUkFNRUJVRkZFUlNQ
Uk9DIHBHbEdlbkZyYW1lYnVmZmVycyA9IDA7CiBzdGF0aWMgUEZOR0xERUxFVEVGUkFNRUJVRkZF
UlNQUk9DIHBHbERlbGV0ZUZyYW1lYnVmZmVycyA9IDA7CiBzdGF0aWMgUEZOR0xGUkFNRUJVRkZF
UlRFWFRVUkUyRFBST0MgcEdsRnJhbWVidWZmZXJUZXh0dXJlMkQgPSAwOwogCi0vLyBVc2VkIGZv
ciBoYW5kbGluZyBYRXJyb3IuCi1zdGF0aWMgYm9vbCB2YWxpZE9wZXJhdGlvbiA9IHRydWU7Ci1z
dGF0aWMgaW50IGhhbmRsZVhQaXhtYXBDcmVhdGlvbkVycm9yKERpc3BsYXkqLCBYRXJyb3JFdmVu
dCogZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZE1hdGNoIHx8IGV2
ZW50LT5lcnJvcl9jb2RlID09IEJhZFdpbmRvdyB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRB
bGxvYykgewotICAgICAgICB2YWxpZE9wZXJhdGlvbiA9IGZhbHNlOwotCi0gICAgICAgIHN3aXRj
aCAoZXZlbnQtPmVycm9yX2NvZGUpIHsKLSAgICAgICAgY2FzZSBCYWRNYXRjaDoKLSAgICAgICAg
ICAgIExPR19FUlJPUigiQmFkTWF0Y2guIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBCYWRXaW5kb3c6Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkJhZFdpbmRvdy4iKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJhZEFsbG9jOgotICAgICAgICAgICAgTE9H
X0VSUk9SKCJCYWRBbGxvYy4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotc3RhdGljIGludCBhdHRyaWJ1dGVzW10gPSB7Ci0gICAgR0xYX0xFVkVMLCAwLAotICAg
IEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfV0lORE9XX0JJVCwKLSAgICBHTFhfUkVOREVSX1RZUEUs
ICAgR0xYX1JHQkFfQklULAotICAgIEdMWF9SRURfU0laRSwgICAgICAxLAotICAgIEdMWF9HUkVF
Tl9TSVpFLCAgICAxLAotICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAotICAgIEdMWF9BTFBIQV9T
SVpFLCAgICAxLAotICAgIEdMWF9ERVBUSF9TSVpFLCAgICAxLAotICAgIEdMWF9YX1ZJU1VBTF9U
WVBFLCBHTFhfVFJVRV9DT0xPUiwKLSAgICBHTFhfRE9VQkxFQlVGRkVSLCAgVHJ1ZSwKLSAgICBO
b25lCi19OwotCi1jbGFzcyBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgewotCi1w
dWJsaWM6Ci0gICAgU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKERpc3BsYXkqIGRp
c3BsYXkpCi0gICAgICAgIDogbV9kaXNwbGF5KGRpc3BsYXkpCi0gICAgewotICAgICAgICAvLyBY
U3luYyBtdXN0IGJlIGNhbGxlZCB0byBlbnN1cmUgdGhhdCBjdXJyZW50IGVycm9ycyBhcmUgaGFu
ZGxlZCBieSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KLSAgICAgICAgWFN5bmMobV9kaXNwbGF5LCBm
YWxzZSk7Ci0gICAgICAgIG1fcHJldmlvdXNFcnJvckhhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVy
KGhhbmRsZVhQaXhtYXBDcmVhdGlvbkVycm9yKTsKLSAgICB9Ci0KLSAgICB+U2NvcGVkWFBpeG1h
cENyZWF0aW9uRXJyb3JIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIC8vIFJlc3RvcmUgdGhlIG9y
aWdpbmFsIGhhbmRsZXIuCi0gICAgICAgIFhTZXRFcnJvckhhbmRsZXIobV9wcmV2aW91c0Vycm9y
SGFuZGxlcik7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkT3BlcmF0aW9uKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgLy8gWFN5bmMgaXMg
bmVlZGVkIHRvIGNhdGNoIHBvc3NpYmxlIGVycm9ycyBhcyB0aGV5IGFyZSBnZW5lcmF0ZWQgYXN5
bmNocm9ub3VzbHkuCi0gICAgICAgIFhTeW5jKG1fZGlzcGxheSwgZmFsc2UpOwotICAgICAgICBy
ZXR1cm4gdmFsaWRPcGVyYXRpb247Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFhFcnJvckhhbmRs
ZXIgbV9wcmV2aW91c0Vycm9ySGFuZGxlcjsKLSAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci19Owot
Ci0vLyBGSVhNRTogVGFrZSBYMTFXaW5kb3dSZXNvdXJjZXMgYW5kIEdMWENvbmZpZ1NlbGVjdG9y
IGludG8gdXNlLgotY2xhc3MgT2ZmU2NyZWVuUm9vdFdpbmRvdyB7Ci1wdWJsaWM6Ci0gICAgT2Zm
U2NyZWVuUm9vdFdpbmRvdygpCi0gICAgewotICAgICAgICArK21fcmVmQ291bnQ7Ci0gICAgfQot
Ci0gICAgV2luZG93IGdldFhXaW5kb3coKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3dpbmRvdykg
ewotICAgICAgICAgICAgRGlzcGxheSogZHB5ID0gZGlzcGxheSgpOwotICAgICAgICAgICAgbV93
aW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSks
IC0xLCAtMSwgMSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkp
OwotICAgICAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSB0cnVlOwotICAgICAgICAgICAgWENo
YW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCBtX3dpbmRvdywgWDExT3ZlcnJpZGVSZWRpcmVjdCwg
JmF0dHJpYnV0ZXMpOwotICAgICAgICAgICAgLy8gTWFwIHdpbmRvdyB0byB0aGUgc2NyZWVuCi0g
ICAgICAgICAgICBYTWFwV2luZG93KGRweSwgbV93aW5kb3cpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIG1fd2luZG93OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgRGlzcGxh
eUNvbm5lY3Rpb24gewotICAgICAgICBEaXNwbGF5Q29ubmVjdGlvbigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIH5EaXNwbGF5Q29ubmVjdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhDbG9zZURp
c3BsYXkobV9kaXNwbGF5KTsKLSAgICAgICAgfQotCi0gICAgICAgIERpc3BsYXkqIGRpc3BsYXko
KSB7IHJldHVybiBtX2Rpc3BsYXk7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBEaXNwbGF5KiBt
X2Rpc3BsYXk7Ci0gICAgfTsKLQotcHVibGljOgotICAgIHN0YXRpYyBEaXNwbGF5KiBkaXNwbGF5
KCkKLSAgICB7Ci0gICAgICAgIC8vIERpc3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgYnJv
a2VuIGF0IHByb2dyYW0gc2h1dGRvd24uCi0gICAgICAgIHN0YXRpYyBEaXNwbGF5Q29ubmVjdGlv
biBkaXNwbGF5Q29ubmVjdGlvbjsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlDb25uZWN0aW9uLmRp
c3BsYXkoKTsKLSAgICB9Ci0KLSAgICB+T2ZmU2NyZWVuUm9vdFdpbmRvdygpCi0gICAgewotICAg
ICAgICBpZiAoLS1tX3JlZkNvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChtX3dpbmRvdykgewotICAgICAgICAgICAgWFVubWFwV2luZG93KGRpc3BsYXkoKSwgbV93aW5k
b3cpOwotICAgICAgICAgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSgpLCBtX3dpbmRvdyk7Ci0g
ICAgICAgICAgICBtX3dpbmRvdyA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBpc01lc2FHTFgoKQotICAgIHsKLSAgICAgICAgc3RhdGljIGJvb2wgaXNNZXNhID0gISFz
dHJzdHIoZ2xYR2V0Q2xpZW50U3RyaW5nKGRpc3BsYXkoKSwgR0xYX1ZFTkRPUiksICJNZXNhIik7
Ci0gICAgICAgIHJldHVybiBpc01lc2E7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBp
bnQgbV9yZWZDb3VudDsKLSAgICBzdGF0aWMgV2luZG93IG1fd2luZG93OwotfTsKLQotaW50IE9m
ZlNjcmVlblJvb3RXaW5kb3c6Om1fcmVmQ291bnQgPSAwOwotV2luZG93IE9mZlNjcmVlblJvb3RX
aW5kb3c6Om1fd2luZG93ID0gMDsKLQotc3RhdGljIGNvbnN0IGludCBnbHhTcGVjW10gPSB7Ci0g
ICAgLy8gVGhlIHNwZWNpZmljYXRpb24gaXMgYSBzZXQga2V5IHZhbHVlIHBhaXJzIHN0b3JlZCBp
biBhIHNpbXBsZSBhcnJheS4KLSAgICBHTFhfTEVWRUwsICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLAotICAgIEdMWF9EUkFXQUJMRV9UWVBFLCAgICAgICAgICAgICAgICAgIEdMWF9QSVhNQVBf
QklUIHwgR0xYX1dJTkRPV19CSVQsCi0gICAgR0xYX0JJTkRfVE9fVEVYVFVSRV9UQVJHRVRTX0VY
VCwgICAgR0xYX1RFWFRVUkVfMkRfQklUX0VYVCwKLSAgICBHTFhfQklORF9UT19URVhUVVJFX1JH
QkFfRVhULCAgICAgICBUUlVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgZ2x4QXR0
cmlidXRlc1tdID0geworc3RhdGljIGludCBnbHhBdHRyaWJ1dGVzW10gPSB7CiAgICAgR0xYX1RF
WFRVUkVfRk9STUFUX0VYVCwKICAgICBHTFhfVEVYVFVSRV9GT1JNQVRfUkdCQV9FWFQsCiAgICAg
R0xYX1RFWFRVUkVfVEFSR0VUX0VYVCwKQEAgLTIxMiwxOSArNTcsMjEgQEAgc3RhdGljIGNvbnN0
IGludCBnbHhBdHRyaWJ1dGVzW10gPSB7CiAgICAgMAogfTsKIAorc3RhdGljIGJvb2wgaXNNZXNh
R0xYKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpc01lc2EgPSAhIXN0cnN0cihnbFhHZXRDbGllbnRT
dHJpbmcoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIEdMWF9WRU5ET1IpLCAiTWVzYSIpOwor
ICAgIHJldHVybiBpc01lc2E7Cit9CisKIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsK
ICAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKGNvbnN0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0Qgc2hhcmVDb250ZXh0ID0gMCkKLSAgICAgICAgOiBtX29mZlNjcmVlbldpbmRvdyhhZG9wdFB0
cihuZXcgT2ZmU2NyZWVuUm9vdFdpbmRvdygpKSkKLSAgICAgICAgLCBtX3hQaXhtYXAoMCkKKyAg
ICAgICAgOiBtX3hQaXhtYXAoMCkKICAgICAgICAgLCBtX2dseFBpeG1hcCgwKQogICAgICAgICAs
IG1fc3VyZmFjZSgwKQogICAgICAgICAsIG1fZ2x4U3VyZmFjZSgwKQogICAgICAgICAsIG1fZ2xD
b250ZXh0KDApCiAgICAgICAgICwgbV9kZXRhY2hlZENvbnRleHQoMCkKICAgICAgICAgLCBtX2Rl
dGFjaGVkU3VyZmFjZSgwKQotICAgICAgICAsIG1fZmJDb25maWcoMCkKLSAgICAgICAgLCBtX3Rl
eHR1cmVJc1lJbnZlcnRlZChmYWxzZSkKLSAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQogICAg
ICAgICAsIG1faXNSZWNlaXZlcihmYWxzZSkKICAgICB7CiAgICAgICAgIEdMWENvbnRleHQgc2hh
cmVDb250ZXh0T2JqZWN0ID0gMDsKQEAgLTI0MCwxNiArODcsMTUgQEAgc3RydWN0IEdyYXBoaWNz
U3VyZmFjZVByaXZhdGUgewogICAgICAgICBVTlVTRURfUEFSQU0oc2hhcmVDb250ZXh0KTsKICNl
bmRpZgogCi0gICAgICAgIGludCBudW1SZXR1cm5lZDsKLSAgICAgICAgR0xYRkJDb25maWcqIGZi
Q29uZmlncyA9IGdsWENob29zZUZCQ29uZmlnKGRpc3BsYXkoKSwgRGVmYXVsdFNjcmVlbihkaXNw
bGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtUmV0dXJuZWQpOworICAgICAgICBtX2NvbmZpZ1NlbGVj
dG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZpZ1NlbGVjdG9yKCkpOwogCi0gICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHdlIGNob29zZSBhIGNvbmZpZ3VyYXRpb24gdGhhdCBzdXBwb3J0cyBhbiBh
bHBoYSBtYXNrLgotICAgICAgICBtX2ZiQ29uZmlnID0gZmluZEZCQ29uZmlnV2l0aEFscGhhKGZi
Q29uZmlncywgbnVtUmV0dXJuZWQpOwotCi0gICAgICAgIFhGcmVlKGZiQ29uZmlncyk7CisgICAg
ICAgIGlmICghbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSkgeworICAg
ICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAg
ICAgIC8vIENyZWF0ZSBhIEdMWCBjb250ZXh0IGZvciBPcGVuR0wgcmVuZGVyaW5nCi0gICAgICAg
IG1fZ2xDb250ZXh0ID0gZ2xYQ3JlYXRlTmV3Q29udGV4dChkaXNwbGF5KCksIG1fZmJDb25maWcs
IEdMWF9SR0JBX1RZUEUsIHNoYXJlQ29udGV4dE9iamVjdCwgdHJ1ZSk7CisgICAgICAgIG1fZ2xD
b250ZXh0ID0gZ2xYQ3JlYXRlTmV3Q29udGV4dChkaXNwbGF5KCksIG1fY29uZmlnU2VsZWN0b3It
PnN1cmZhY2VDb250ZXh0Q29uZmlnKCksIEdMWF9SR0JBX1RZUEUsIHNoYXJlQ29udGV4dE9iamVj
dCwgdHJ1ZSk7CiAgICAgfQogCiAgICAgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSh1aW50MzJfdCB3
aW5JZCkKQEAgLTI2MCwxMSArMTA2LDEwIEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRl
IHsKICAgICAgICAgLCBtX2dsQ29udGV4dCgwKQogICAgICAgICAsIG1fZGV0YWNoZWRDb250ZXh0
KDApCiAgICAgICAgICwgbV9kZXRhY2hlZFN1cmZhY2UoMCkKLSAgICAgICAgLCBtX2ZiQ29uZmln
KDApCi0gICAgICAgICwgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQoZmFsc2UpCi0gICAgICAgICwgbV9o
YXNBbHBoYShmYWxzZSkKICAgICAgICAgLCBtX2lzUmVjZWl2ZXIodHJ1ZSkKLSAgICB7IH0KKyAg
ICB7CisgICAgICAgIG1fY29uZmlnU2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2Vs
ZWN0b3IoKSk7CisgICAgfQogCiAgICAgfkdyYXBoaWNzU3VyZmFjZVByaXZhdGUoKQogICAgIHsK
QEAgLTI3MywzNSArMTE4LDMyIEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKIAog
ICAgIHVpbnQzMl90IGNyZWF0ZVN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICB7Ci0g
ICAgICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmln
KGRpc3BsYXkoKSwgbV9mYkNvbmZpZyk7Ci0gICAgICAgIGlmICghdmlzdWFsSW5mbykKKyAgICAg
ICAgaWYgKCFkaXNwbGF5KCkgfHwgIW1fY29uZmlnU2VsZWN0b3IpCiAgICAgICAgICAgICByZXR1
cm4gMDsKIAotICAgICAgICBDb2xvcm1hcCBjbWFwID0gWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXko
KSwgbV9vZmZTY3JlZW5XaW5kb3ctPmdldFhXaW5kb3coKSwgdmlzdWFsSW5mby0+dmlzdWFsLCBB
bGxvY05vbmUpOwotCi0gICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGE7Ci0gICAgICAgIGEu
YmFja2dyb3VuZF9waXhlbCA9IFdoaXRlUGl4ZWwoZGlzcGxheSgpLCAwKTsKLSAgICAgICAgYS5i
b3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXkoKSwgMCk7Ci0gICAgICAgIGEuY29sb3Jt
YXAgPSBjbWFwOwotICAgICAgICBtX3N1cmZhY2UgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXkoKSwg
bV9vZmZTY3JlZW5XaW5kb3ctPmdldFhXaW5kb3coKSwgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLAotICAgICAgICAgICAgMCwgdmlzdWFsSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0
LCB2aXN1YWxJbmZvLT52aXN1YWwsCi0gICAgICAgICAgICBDV0JhY2tQaXhlbCB8IENXQm9yZGVy
UGl4ZWwgfCBDV0NvbG9ybWFwLCAmYSk7Ci0gICAgICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4
bWFwKGRpc3BsYXkoKSwgbV9zdXJmYWNlLCAwKTsKLSAgICAgICAgWENvbXBvc2l0ZVJlZGlyZWN0
V2luZG93KGRpc3BsYXkoKSwgbV9zdXJmYWNlLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0g
ICAgICAgIG1fZ2x4U3VyZmFjZSA9IGdsWENyZWF0ZVdpbmRvdyhkaXNwbGF5KCksIG1fZmJDb25m
aWcsIG1fc3VyZmFjZSwgMCk7Ci0gICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwotCi0gICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgWFJlbmRlciBFeHRlbnNpb24gaXMgYXZhaWxhYmxlLgotICAgICAg
ICBpbnQgZXZlbnRCYXNlcCwgZXJyb3JCYXNlcDsKLSAgICAgICAgaWYgKCFYUmVuZGVyUXVlcnlF
eHRlbnNpb24oZGlzcGxheSgpLCAmZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApKQorICAgICAgICBP
d25QdHJYMTE8WFZpc3VhbEluZm8+IHZpc0luZm8obV9jb25maWdTZWxlY3Rvci0+dmlzdWFsSW5m
bygpKTsKKworICAgICAgICBpZiAoIXZpc0luZm8uZ2V0KCkpIHsKKyAgICAgICAgICAgIGNsZWFy
KCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogCi0gICAgICAgIFhNYXBXaW5k
b3coZGlzcGxheSgpLCBtX3N1cmZhY2UpOworICAgICAgICBYMTFIZWxwZXI6OmNyZWF0ZU9mZlNj
cmVlbldpbmRvdygmbV9zdXJmYWNlLCAqdmlzSW5mby5nZXQoKSwgc2l6ZSk7CisKKyAgICAgICAg
aWYgKCFtX3N1cmZhY2UpIHsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIG1fZ2x4U3VyZmFjZSA9IGdsWENyZWF0ZVdpbmRv
dyhkaXNwbGF5KCksIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCksIG1f
c3VyZmFjZSwgMCk7CiAgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CiAgICAgfQogCiAgICAgdm9p
ZCBjcmVhdGVQaXhtYXAodWludDMyX3Qgd2luSWQpCiAgICAgeworICAgICAgICBpZiAoIW1fY29u
ZmlnU2VsZWN0b3IpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgWFdpbmRvd0F0dHJp
YnV0ZXMgYXR0cjsKICAgICAgICAgaWYgKCFYR2V0V2luZG93QXR0cmlidXRlcyhkaXNwbGF5KCks
IHdpbklkLCAmYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMTAsMzUgKzE1MiwyNSBA
QCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgIGlmIChhdHRyLm1hcF9z
dGF0ZSA9PSBJc1VubWFwcGVkIHx8IGF0dHIubWFwX3N0YXRlID09IElzVW52aWV3YWJsZSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhh
bmRsZXIgaGFuZGxlcihkaXNwbGF5KCkpOworICAgICAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25F
cnJvckhhbmRsZXIgaGFuZGxlcjsKICAgICAgICAgbV9zaXplID0gSW50U2l6ZShhdHRyLndpZHRo
LCBhdHRyLmhlaWdodCk7CiAKICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhS
ZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXkoKSwgYXR0ci52aXN1YWwpOwotICAgICAgICBt
X2hhc0FscGhhID0gKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlwZURpcmVjdCAmJiBmb3JtYXQtPmRp
cmVjdC5hbHBoYU1hc2spOwotCi0gICAgICAgIGludCBudW1iZXJPZkNvbmZpZ3M7Ci0gICAgICAg
IEdMWEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSgpLCBYRGVm
YXVsdFNjcmVlbihkaXNwbGF5KCkpLCBnbHhTcGVjLCAmbnVtYmVyT2ZDb25maWdzKTsKLQotICAg
ICAgICAvLyBJZiBvcmlnaW4gd2luZG93IGhhcyBhbHBoYSB0aGVuIGZpbmQgY29uZmlnIHdpdGgg
YWxwaGEuCi0gICAgICAgIEdMWEZCQ29uZmlnJiBjb25maWcgPSBtX2hhc0FscGhhID8gZmluZEZC
Q29uZmlnV2l0aEFscGhhKGNvbmZpZ3MsIG51bWJlck9mQ29uZmlncykgOiBjb25maWdzWzBdOwot
CisgICAgICAgIGJvb2wgaGFzQWxwaGEgPSAoZm9ybWF0LT50eXBlID09IFBpY3RUeXBlRGlyZWN0
ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayk7CiAgICAgICAgIG1feFBpeG1hcCA9IFhDb21w
b3NpdGVOYW1lV2luZG93UGl4bWFwKGRpc3BsYXkoKSwgd2luSWQpOwotICAgICAgICBtX2dseFBp
eG1hcCA9IGdsWENyZWF0ZVBpeG1hcChkaXNwbGF5KCksIGNvbmZpZywgbV94UGl4bWFwLCBnbHhB
dHRyaWJ1dGVzKTsKKyAgICAgICAgZ2x4QXR0cmlidXRlc1sxXSA9IChmb3JtYXQtPmRlcHRoID09
IDMyIHx8IGhhc0FscGhhKSA/IEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JBX0VYVCA6IEdMWF9URVhU
VVJFX0ZPUk1BVF9SR0JfRVhUOworICAgICAgICBtX2dseFBpeG1hcCA9IGdsWENyZWF0ZVBpeG1h
cChkaXNwbGF5KCksIG1fY29uZmlnU2VsZWN0b3ItPnN1cmZhY2VDbGllbnRDb25maWcoZm9ybWF0
LT5kZXB0aCwgWFZpc3VhbElERnJvbVZpc3VhbChhdHRyLnZpc3VhbCkpLCBtX3hQaXhtYXAsIGds
eEF0dHJpYnV0ZXMpOwogCiAgICAgICAgIGlmICghaGFuZGxlci5pc1ZhbGlkT3BlcmF0aW9uKCkp
CiAgICAgICAgICAgICBjbGVhcigpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHVpbnQg
aW52ZXJ0ZWQgPSAwOwogICAgICAgICAgICAgZ2xYUXVlcnlEcmF3YWJsZShkaXNwbGF5KCksIG1f
Z2x4UGl4bWFwLCBHTFhfWV9JTlZFUlRFRF9FWFQsICZpbnZlcnRlZCk7Ci0gICAgICAgICAgICBt
X3RleHR1cmVJc1lJbnZlcnRlZCA9ICEhaW52ZXJ0ZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBY
RnJlZShjb25maWdzKTsKLSAgICB9CisgICAgICAgICAgICBtX2ZsYWdzID0gISFpbnZlcnRlZCA/
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgOiAwOwogCi0gICAgYm9vbCB0ZXh0
dXJlSXNZSW52ZXJ0ZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdGV4dHVyZUlzWUludmVy
dGVkOworICAgICAgICAgICAgaWYgKGhhc0FscGhhKQorICAgICAgICAgICAgICAgIG1fZmxhZ3Mg
fD0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZDsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IHZvaWQgbWFrZUN1cnJlbnQoKQpAQCAtNDA2LDcgKzIzOCw3IEBAIHN0cnVjdCBHcmFwaGljc1N1
cmZhY2VQcml2YXRlIHsKICAgICAgICAgZG9uZUN1cnJlbnQoKTsKICAgICB9CiAKLSAgICBEaXNw
bGF5KiBkaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gT2ZmU2NyZWVuUm9vdFdpbmRvdzo6ZGlzcGxh
eSgpOyB9CisgICAgRGlzcGxheSogZGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIFgxMUhlbHBlcjo6
bmF0aXZlRGlzcGxheSgpOyB9CiAKICAgICBHTFhQaXhtYXAgZ2x4UGl4bWFwKCkgY29uc3QKICAg
ICB7CkBAIC00MjYsMjUgKzI1OCwxMCBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7
CiAgICAgfQogCiAgICAgYm9vbCBpc1JlY2VpdmVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlY2Vp
dmVyOyB9Ci1wcml2YXRlOgotICAgIEdMWEZCQ29uZmlnJiBmaW5kRkJDb25maWdXaXRoQWxwaGEo
R0xYRkJDb25maWcqIGZiQ29uZmlncywgaW50IG51bWJlck9mQ29uZmlncykKLSAgICB7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyT2ZDb25maWdzOyArK2kpIHsKLSAgICAgICAg
ICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKGRp
c3BsYXkoKSwgZmJDb25maWdzW2ldKTsKLSAgICAgICAgICAgIGlmICghdmlzdWFsSW5mbykKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQq
IGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KGRpc3BsYXkoKSwgdmlzdWFsSW5mby0+
dmlzdWFsKTsKLSAgICAgICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwogCi0gICAgICAgICAgICBp
ZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZiQ29uZmlnc1tpXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHVybiAx
c3QgY29uZmlnIGFzIGEgZmFsbGJhY2sgd2l0aCBubyBhbHBoYSBzdXBwb3J0LgotICAgICAgICBy
ZXR1cm4gZmJDb25maWdzWzBdOwotICAgIH0KKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZs
YWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogCitwcml2YXRlOgogICAgIHZvaWQgY2xl
YXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ2x4UGl4bWFwKSB7CkBAIC00NjcsMjEgKzI4NCwy
MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgZ2xYRGVzdHJveUNvbnRleHQoZGlzcGxheSgpLCBt
X2dsQ29udGV4dCk7CiAgICAgICAgICAgICBtX2dsQ29udGV4dCA9IDA7CiAgICAgICAgIH0KKwor
ICAgICAgICBpZiAobV9jb25maWdTZWxlY3RvcikKKyAgICAgICAgICAgIG1fY29uZmlnU2VsZWN0
b3IgPSBudWxscHRyOwogICAgIH0KIAotICAgIE93blB0cjxPZmZTY3JlZW5Sb290V2luZG93PiBt
X29mZlNjcmVlbldpbmRvdzsKICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICBQaXhtYXAgbV94UGl4
bWFwOwogICAgIEdMWFBpeG1hcCBtX2dseFBpeG1hcDsKLSAgICBXaW5kb3cgbV9zdXJmYWNlOwor
ICAgIHVpbnQzMl90IG1fc3VyZmFjZTsKICAgICBXaW5kb3cgbV9nbHhTdXJmYWNlOwogICAgIEdM
WENvbnRleHQgbV9nbENvbnRleHQ7CiAgICAgR0xYQ29udGV4dCBtX2RldGFjaGVkQ29udGV4dDsK
ICAgICBHTFhEcmF3YWJsZSBtX2RldGFjaGVkU3VyZmFjZTsKLSAgICBHTFhGQkNvbmZpZyBtX2Zi
Q29uZmlnOwotICAgIGJvb2wgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQ7Ci0gICAgYm9vbCBtX2hhc0Fs
cGhhOworICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKICAg
ICBib29sIG1faXNSZWNlaXZlcjsKKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3M7
CiB9OwogCiBzdGF0aWMgYm9vbCByZXNvbHZlR0xNZXRob2RzKCkKQEAgLTU0NSwxMyArMzYzLDEw
IEBAIHZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVBhaW50VG9UZXh0dXJlTWFwcGVyKFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsCiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gbV9wcml2YXRlLT50
ZXh0dXJlSXNZSW52ZXJ0ZWQoKSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUg
OiAwOwotICAgIGZsYWdzIHw9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQ7Ci0KICAgICBG
bG9hdFJlY3QgcmVjdE9uQ29udGVudHMoRmxvYXRQb2ludDo6emVybygpLCBzaXplKTsKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKICAgICBh
ZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVj
dChyZWN0T25Db250ZW50cywgdGFyZ2V0UmVjdCkpOwotICAgIHN0YXRpY19jYXN0PFRleHR1cmVN
YXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBmbGFncywgc2l6
ZSwgcmVjdE9uQ29udGVudHMsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKKyAg
ICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJlTWFwcGVyKS0+ZHJhd1RleHR1
cmUodGV4dHVyZSwgbV9wcml2YXRlLT5mbGFncygpLCBzaXplLCByZWN0T25Db250ZW50cywgYWRq
dXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOwogfQogCiB1aW50MzJfdCBHcmFwaGljc1N1
cmZhY2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIoKSBjb25zdApAQCAtNTYyLDcgKzM3Nyw3IEBAIHVp
bnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcigpIGNvbnN0CiB1aW50
MzJfdCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtU3dhcEJ1ZmZlcnMoKQogewogICAgIGlmICht
X3ByaXZhdGUtPmlzUmVjZWl2ZXIoKSkgewotICAgICAgICBpZiAoT2ZmU2NyZWVuUm9vdFdpbmRv
dzo6aXNNZXNhR0xYKCkgJiYgcGxhdGZvcm1HZXRUZXh0dXJlSUQoKSkgeworICAgICAgICBpZiAo
aXNNZXNhR0xYKCkgJiYgcGxhdGZvcm1HZXRUZXh0dXJlSUQoKSkgewogICAgICAgICAgICAgZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBwbGF0Zm9ybUdldFRleHR1cmVJRCgpKTsKICAgICAg
ICAgICAgIC8vIE1lc2EgZG9lc24ndCByZS1iaW5kIHRleHR1cmUgdG8gdGhlIGZyb250IGJ1ZmZl
ciBvbiBnbFhTd2FwQnVmZXIKICAgICAgICAgICAgIC8vIE1hbnVhbGx5IHJlbGVhc2UgcHJldmlv
dXMgbG9jayBhbmQgcmViaW5kIHRleHR1cmUgdG8gc3VyZmFjZSB0byBnZXQgZnJhbWUgdXBkYXRl
LgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9YMTFIZWxwZXIuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEw
MGJiMmUKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHAKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYMTFIZWxwZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBoYW5kbGluZyBYRXJyb3IuCitzdGF0
aWMgYm9vbCB2YWxpZE9wZXJhdGlvbiA9IHRydWU7CitzdGF0aWMgaW50IGhhbmRsZVhQaXhtYXBD
cmVhdGlvbkVycm9yKERpc3BsYXkqLCBYRXJyb3JFdmVudCogZXZlbnQpCit7CisgICAgaWYgKGV2
ZW50LT5lcnJvcl9jb2RlID09IEJhZE1hdGNoIHx8IGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZFdp
bmRvdyB8fCBldmVudC0+ZXJyb3JfY29kZSA9PSBCYWRBbGxvYykgeworICAgICAgICB2YWxpZE9w
ZXJhdGlvbiA9IGZhbHNlOworCisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmVycm9yX2NvZGUpIHsK
KyAgICAgICAgY2FzZSBCYWRNYXRjaDoKKyAgICAgICAgICAgIExPR19FUlJPUigiQmFkTWF0Y2gu
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCYWRXaW5kb3c6CisgICAgICAg
ICAgICBMT0dfRVJST1IoIkJhZFdpbmRvdy4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEJhZEFsbG9jOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRBbGxvYy4iKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RydWN0IERpc3BsYXlDb25u
ZWN0aW9uIHsKKyAgICBEaXNwbGF5Q29ubmVjdGlvbigpCisgICAgeworICAgICAgICBtX2Rpc3Bs
YXkgPSBYT3BlbkRpc3BsYXkoMCk7CisKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIGNvbm5lY3Rpb24gd2l0aCBYIik7CisgICAg
fQorCisgICAgfkRpc3BsYXlDb25uZWN0aW9uKCkKKyAgICB7CisgICAgICAgIFhDbG9zZURpc3Bs
YXkobV9kaXNwbGF5KTsKKyAgICB9CisKKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkgeyByZXR1cm4g
bV9kaXNwbGF5OyB9Citwcml2YXRlOgorICAgIERpc3BsYXkqIG1fZGlzcGxheTsKK307CisKK3N0
cnVjdCBPZmZTY3JlZW5Sb290V2luZG93IHsKKworICAgIE9mZlNjcmVlblJvb3RXaW5kb3coKQor
ICAgIHsKKyAgICAgICAgbV93aW5kb3cgPSAwOworICAgICAgICBEaXNwbGF5KiBkcHkgPSBYMTFI
ZWxwZXI6Om5hdGl2ZURpc3BsYXkoKTsKKyAgICAgICAgaWYgKCFkcHkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlczsKKyAgICAg
ICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRydWU7CisgICAgICAgIG1fd2luZG93
ID0gWENyZWF0ZVNpbXBsZVdpbmRvdyhkcHksIFhEZWZhdWx0Um9vdFdpbmRvdyhkcHkpLCAtMSwg
LTEsIDEsIDEsIDAsIEJsYWNrUGl4ZWwoZHB5LCAwKSwgV2hpdGVQaXhlbChkcHksIDApKTsKKyAg
ICAgICAgLy8gRnJvbSBodHRwOi8vdHJvbmNoZS5jb20vZ3VpL3gveGxpYi93aW5kb3cvYXR0cmli
dXRlcy8KKyAgICAgICAgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoZHB5LCBtX3dpbmRvdywgQ1dP
dmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7CisgICAgICAgIFhNYXBXaW5kb3coZHB5LCBt
X3dpbmRvdyk7CisKKyAgICAgICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gcm9vdCB3aW5kb3cuIik7CisgICAgfQorCisg
ICAgfk9mZlNjcmVlblJvb3RXaW5kb3coKQorICAgIHsKKyAgICAgICAgaWYgKCFYMTFIZWxwZXI6
Om5hdGl2ZURpc3BsYXkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobV93
aW5kb3cpIHsKKyAgICAgICAgICAgIFhVbm1hcFdpbmRvdyhYMTFIZWxwZXI6Om5hdGl2ZURpc3Bs
YXkoKSwgbV93aW5kb3cpOworICAgICAgICAgICAgWERlc3Ryb3lXaW5kb3coWDExSGVscGVyOjpu
YXRpdmVEaXNwbGF5KCksIG1fd2luZG93KTsKKyAgICAgICAgICAgIG1fd2luZG93ID0gMDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFdpbmRvdyByb290V2luZG93KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3dpbmRvdzsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2luZG93IG1fd2luZG93
OworfTsKKworU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyOjpTY29wZWRYUGl4bWFw
Q3JlYXRpb25FcnJvckhhbmRsZXIoKQoreworICAgIC8vIFhTeW5jIG11c3QgYmUgY2FsbGVkIHRv
IGVuc3VyZSB0aGF0IGN1cnJlbnQgZXJyb3JzIGFyZSBoYW5kbGVkIGJ5IHRoZSBvcmlnaW5hbCBo
YW5kbGVyLgorICAgIFhTeW5jKFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpLCBmYWxzZSk7Cisg
ICAgbV9wcmV2aW91c0Vycm9ySGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoaGFuZGxlWFBpeG1h
cENyZWF0aW9uRXJyb3IpOworfQorCitTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6
On5TY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKQoreworICAgIC8vIFJlc3RvcmUg
dGhlIG9yaWdpbmFsIGhhbmRsZXIuCisgICAgWFNldEVycm9ySGFuZGxlcihtX3ByZXZpb3VzRXJy
b3JIYW5kbGVyKTsKK30KKworYm9vbCBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6
OmlzVmFsaWRPcGVyYXRpb24oKSBjb25zdAoreworICAgIHZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsK
KyAgICAvLyBYU3luYyBpcyBuZWVkZWQgdG8gY2F0Y2ggcG9zc2libGUgZXJyb3JzIGFzIHRoZXkg
YXJlIGdlbmVyYXRlZCBhc3luY2hyb25vdXNseS4KKyAgICBYU3luYyhYMTFIZWxwZXI6Om5hdGl2
ZURpc3BsYXkoKSwgZmFsc2UpOworICAgIHJldHVybiB2YWxpZE9wZXJhdGlvbjsKK30KKwordm9p
ZCBYMTFIZWxwZXI6OnJlc2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiBuZXdSZWN0LCBjb25zdCB1
aW50MzJfdCB3aW5kb3dJZCkKK3sKKyAgICBYUmVzaXplV2luZG93KG5hdGl2ZURpc3BsYXkoKSwg
d2luZG93SWQsIG5ld1JlY3Qud2lkdGgoKSwgbmV3UmVjdC5oZWlnaHQoKSk7CisgICAgWEZsdXNo
KG5hdGl2ZURpc3BsYXkoKSk7Cit9CisKK3ZvaWQgWDExSGVscGVyOjpjcmVhdGVPZmZTY3JlZW5X
aW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBYVmlzdWFsSW5mbyYgdmlzSW5mbywgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBEaXNw
bGF5KiBkaXNwbGF5ID0gbmF0aXZlRGlzcGxheSgpOworICAgIGlmICghZGlzcGxheSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCF2aXNJbmZvLnZpc3VhbCkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1YWwuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBXaW5kb3cgeFdpbmRvdyA9IG9mZnNjcmVlblJvb3RXaW5kb3coKTsKKyAgICBp
ZiAoIXhXaW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIENvbG9ybWFwIGNtYXAgPSBYQ3Jl
YXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdywgdmlzSW5mby52aXN1YWwsIEFsbG9jTm9uZSk7
CisgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlOworICAgIGF0dHJpYnV0ZS5iYWNr
Z3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKKyAgICBhdHRyaWJ1dGUuYm9y
ZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKKyAgICBhdHRyaWJ1dGUuY29sb3Jt
YXAgPSBjbWFwOworICAgIGF0dHJpYnV0ZS5ldmVudF9tYXNrID0gUmVzaXplUmVkaXJlY3RNYXNr
OworICAgIHVpbnQzMl90IHRlbXBIYW5kbGVJZDsKKyAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRl
V2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSwgMCwgdmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8udmlzdWFsLCBDV0JhY2tQ
aXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKKworICAgIGlm
ICghdGVtcEhhbmRsZUlkKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBv
ZmZzY3JlZW4gd2luZG93LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgWFNldFdp
bmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgdGVtcEhhbmRsZUlkLCAwKTsKKyAgICBYQ29t
cG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkLCBDb21wb3NpdGVSZWRp
cmVjdE1hbnVhbCk7CisgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQpOworICAg
ICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGhhbmRs
ZUlkKTsKKyAgICBVTlVTRURfUEFSQU0odmlzSW5mbyk7CisgICAgVU5VU0VEX1BBUkFNKHNpemUp
OworI2VuZGlmCit9CisKKyNpZiBVU0UoRUdMKQordm9pZCBYMTFIZWxwZXI6OmNyZWF0ZU9mZlNj
cmVlbldpbmRvdyh1aW50MzJfdCogaGFuZGxlSWQsIGNvbnN0IEVHTGludCBpZCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICBWaXN1YWxJRCB2aXN1YWxJZCA9IHN0YXRpY19jYXN0PFZpc3Vh
bElEPihpZCk7CisKKyAgICBpZiAoIXZpc3VhbElkKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBFR0wgaGFzIHN1Z2dlc3RlZCBhIHZpc3VhbCBpZCwgc28gZ2V0IHRoZSByZXN0IG9mIHRoZSB2
aXN1YWwgaW5mbyBmb3IgdGhhdCBpZC4KKyAgICBYVmlzdWFsSW5mbyB2aXN1YWxJbmZvVGVtcGxh
dGU7CisgICAgbWVtc2V0KCZ2aXN1YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFsSW5m
bykpOworICAgIHZpc3VhbEluZm9UZW1wbGF0ZS52aXN1YWxpZCA9IHZpc3VhbElkOworICAgIGlu
dCBtYXRjaGluZ0NvdW50ID0gMDsKKyAgICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IG1hdGNoaW5n
VmlzdWFscyhYR2V0VmlzdWFsSW5mbyhuYXRpdmVEaXNwbGF5KCksIFZpc3VhbElETWFzaywgJnZp
c3VhbEluZm9UZW1wbGF0ZSwgJm1hdGNoaW5nQ291bnQpKTsKKyAgICBYVmlzdWFsSW5mbyogZm91
bmRWaXN1YWwgPSAwOworCisgICAgaWYgKG1hdGNoaW5nVmlzdWFscykgeworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaTwgbWF0Y2hpbmdDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBYVmlzdWFs
SW5mbyogdGVtcCA9ICZtYXRjaGluZ1Zpc3VhbHNbaV07CisKKyAgICAgICAgICAgIGlmIChpc1hS
ZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkgeworICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0
Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChuYXRpdmVEaXNwbGF5KCks
IHRlbXAtPnZpc3VhbCk7CisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRp
cmVjdC5hbHBoYU1hc2sgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kVmlzdWFsID0g
dGVtcDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGVtcC0+ZGVwdGggPT0gMzIpIHsKKyAgICAg
ICAgICAgICAgICBmb3VuZFZpc3VhbCA9IHRlbXA7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm91bmRWaXN1YWwpCisgICAg
ICAgICAgICBjcmVhdGVPZmZTY3JlZW5XaW5kb3coaGFuZGxlSWQsICpmb3VuZFZpc3VhbCwgc2l6
ZSk7CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgWDExSGVscGVyOjpkZXN0cm95V2luZG93KGNv
bnN0IHVpbnQzMl90IHdpbmRvd0lkKQoreworICAgIGlmICghd2luZG93SWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIERpc3BsYXkqIGRpc3BsYXkgPSBuYXRpdmVEaXNwbGF5KCk7CisgICAgaWYg
KCFkaXNwbGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5
LCB3aW5kb3dJZCk7Cit9CisKK2Jvb2wgWDExSGVscGVyOjppc1hSZW5kZXJFeHRlbnNpb25TdXBw
b3J0ZWQoKQoreworICAgIHN0YXRpYyBib29sIHF1ZXJ5RG9uZSA9IGZhbHNlOworICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbiA9IGZhbHNlOworCisgICAgaWYgKCFxdWVy
eURvbmUpIHsKKyAgICAgICAgcXVlcnlEb25lID0gdHJ1ZTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKKyAgICAgICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3BsYXkoKTsKKworICAg
ICAgICBpZiAoZGlzcGxheSkgeworICAgICAgICAgICAgaW50IGV2ZW50QmFzZXAsIGVycm9yQmFz
ZXA7CisgICAgICAgICAgICBzdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVlcnlF
eHRlbnNpb24oZGlzcGxheSwgJmV2ZW50QmFzZXAsICZlcnJvckJhc2VwKTsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKK30K
KworRGlzcGxheSogWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCkKK3sKKyAgICAvLyBEaXNwbGF5
IGNvbm5lY3Rpb24gd2lsbCBvbmx5IGJlIGJyb2tlbiBhdCBwcm9ncmFtIHNodXRkb3duLgorICAg
IHN0YXRpYyBEaXNwbGF5Q29ubmVjdGlvbiBkaXNwbGF5Q29ubmVjdGlvbjsKKyAgICByZXR1cm4g
ZGlzcGxheUNvbm5lY3Rpb24uZGlzcGxheSgpOworfQorCitXaW5kb3cgWDExSGVscGVyOjpvZmZz
Y3JlZW5Sb290V2luZG93KCkKK3sKKyAgICBzdGF0aWMgT2ZmU2NyZWVuUm9vdFdpbmRvdyBvZmZz
Y3JlZW5XaW5kb3c7CisgICAgcmV0dXJuIG9mZnNjcmVlbldpbmRvdy5yb290V2luZG93KCk7Cit9
CisKK30KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExSGVscGVyLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L1gxMUhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZl
N2E2ODIKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgWDExSGVscGVyX2gKKyNkZWZpbmUgWDExSGVscGVyX2gKKworI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJPd25QdHJYMTEuaCIKKworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+Cisj
ZW5kaWYKKworI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KKyNpbmNsdWRl
IDxYMTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPFgxMS9YbGli
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgWDExSGVscGVyIHsKKworcHVibGlj
OgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCosIGNvbnN0
IFhWaXN1YWxJbmZvJiwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKDEsIDEpKTsKKyNpZiBVU0Uo
RUdMKQorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCosIGNv
bnN0IEVHTGludCwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXplKDEsIDEpKTsKKyNlbmRpZgorICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3lXaW5kb3coY29uc3QgdWludDMyX3QpOworICAgIHN0YXRpYyB2
b2lkIHJlc2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgY29uc3QgdWludDMyX3QpOworICAgIHN0
YXRpYyBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpOworICAgIHN0YXRpYyBEaXNw
bGF5KiBuYXRpdmVEaXNwbGF5KCk7CisgICAgc3RhdGljIFdpbmRvdyBvZmZzY3JlZW5Sb290V2lu
ZG93KCk7Cit9OworCitjbGFzcyBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIgewor
CitwdWJsaWM6CisgICAgU2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKCk7CisgICAg
flNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpOworICAgIGJvb2wgaXNWYWxpZE9w
ZXJhdGlvbigpIGNvbnN0OworCitwcml2YXRlOgorICAgIFhFcnJvckhhbmRsZXIgbV9wcmV2aW91
c0Vycm9ySGFuZGxlcjsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMjYzZWEuLjAwMDAw
MDAKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFX
aW5kb3dSZXNvdXJjZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJYMTFXaW5kb3dS
ZXNvdXJjZXMuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1TaGFyZWRYMTFSZXNvdXJjZXMqIFNoYXJlZFgxMVJlc291cmNlczo6
bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7Ci0KLVgxMU9mZlNjcmVlbldpbmRvdzo6WDExT2Zm
U2NyZWVuV2luZG93KCkKLSAgICA6IG1fc2hhcmVkUmVzb3VyY2VzKDApCi17Ci0gICAgbV9zaGFy
ZWRSZXNvdXJjZXMgPSBTaGFyZWRYMTFSZXNvdXJjZXM6OmNyZWF0ZSgpOwotfQotCi1YMTFPZmZT
Y3JlZW5XaW5kb3c6On5YMTFPZmZTY3JlZW5XaW5kb3coKQotewotfQotCi12b2lkIFgxMU9mZlNj
cmVlbldpbmRvdzo6cmVTaXplV2luZG93KGNvbnN0IEludFJlY3QmIG5ld1JlY3QsIGNvbnN0IHVp
bnQzMl90IHdpbmRvd0lkKQotewotICAgIFhSZXNpemVXaW5kb3cobV9zaGFyZWRSZXNvdXJjZXMt
PngxMURpc3BsYXkoKSwgd2luZG93SWQsIG5ld1JlY3Qud2lkdGgoKSwgbmV3UmVjdC5oZWlnaHQo
KSk7Ci0gICAgWEZsdXNoKG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCkpOwotfQotCi0j
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRl
T2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3QgWFZpc3VhbEluZm8mIHZp
c0luZm8sIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFtX3NoYXJlZFJlc291cmNl
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlzcGxheSogZGlzcGxheSA9IG1fc2hhcmVkUmVz
b3VyY2VzLT54MTFEaXNwbGF5KCk7Ci0gICAgaWYgKCFkaXNwbGF5KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIXZpc0luZm8udmlzdWFsKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGZpbmQgdmFsaWQgWFZpc3VhbC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFdpbmRvdyB4V2luZG93ID0gbV9zaGFyZWRSZXNvdXJjZXMtPmdldFhXaW5kb3coKTsKLSAgICBp
ZiAoIXhXaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIENvbG9ybWFwIGNtYXAgPSBYQ3Jl
YXRlQ29sb3JtYXAoZGlzcGxheSwgeFdpbmRvdywgdmlzSW5mby52aXN1YWwsIEFsbG9jTm9uZSk7
Ci0gICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYXR0cmlidXRlOwotICAgIGF0dHJpYnV0ZS5iYWNr
Z3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1dGUuYm9y
ZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKLSAgICBhdHRyaWJ1dGUuY29sb3Jt
YXAgPSBjbWFwOwotICAgIGF0dHJpYnV0ZS5ldmVudF9tYXNrID0gUmVzaXplUmVkaXJlY3RNYXNr
OwotICAgIHVpbnQzMl90IHRlbXBIYW5kbGVJZDsKLSAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRl
V2luZG93KGRpc3BsYXksIHhXaW5kb3csIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSwgMCwgdmlzSW5mby5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8udmlzdWFsLCBDV0JhY2tQ
aXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmlidXRlKTsKLQotICAgIGlm
ICghdGVtcEhhbmRsZUlkKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBv
ZmZzY3JlZW4gd2luZG93LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgWFNldFdp
bmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgdGVtcEhhbmRsZUlkLCAwKTsKLSAgICBYQ29t
cG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkLCBDb21wb3NpdGVSZWRp
cmVjdE1hbnVhbCk7Ci0gICAgWE1hcFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQpOwotICAg
ICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsKLX0KLQotI2lmIFVTRShFR0wpCi12b2lkIFgxMU9m
ZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCwg
Y29uc3QgRUdMaW50IGlkLCBjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIFZpc3VhbElEIHZp
c3VhbElkID0gc3RhdGljX2Nhc3Q8VmlzdWFsSUQ+KGlkKTsKLQotICAgIGlmICghdmlzdWFsSWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVHTCBoYXMgc3VnZ2VzdGVkIGEgdmlzdWFsIGlk
LCBzbyBnZXQgdGhlIHJlc3Qgb2YgdGhlIHZpc3VhbCBpbmZvIGZvciB0aGF0IGlkLgotICAgIFhW
aXN1YWxJbmZvIHZpc3VhbEluZm9UZW1wbGF0ZTsKLSAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1w
bGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZvKSk7Ci0gICAgdmlzdWFsSW5mb1RlbXBsYXRlLnZp
c3VhbGlkID0gdmlzdWFsSWQ7Ci0gICAgaW50IG1hdGNoaW5nQ291bnQgPSAwOwotICAgIE93blB0
clgxMTxYVmlzdWFsSW5mbz4gbWF0Y2hpbmdWaXN1YWxzID0gYWRvcHRQdHIoWEdldFZpc3VhbElu
Zm8obV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgVmlzdWFsSURNYXNrLCAmdmlzdWFs
SW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCkpOwotICAgIFhWaXN1YWxJbmZvKiBmb3VuZFZp
c3VhbCA9IDA7Ci0KLSAgICBpZiAobWF0Y2hpbmdWaXN1YWxzKSB7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpPCBtYXRjaGluZ0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFhWaXN1YWxJbmZv
KiB0ZW1wID0gJm1hdGNoaW5nVmlzdWFsc1tpXTsKLQotICAgICAgICAgICAgaWYgKG1fc2hhcmVk
UmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAg
ICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdCht
X3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCB0ZW1wLT52aXN1YWwpOwotICAgICAgICAg
ICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkgewotICAg
ICAgICAgICAgICAgICAgICBmb3VuZFZpc3VhbCA9IHRlbXA7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHRlbXAtPmRlcHRoID09IDMyKSB7Ci0gICAgICAgICAgICAgICAgZm91bmRWaXN1YWwgPSB0
ZW1wOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGZvdW5kVmlzdWFsKQotICAgICAgICAgICAgY3JlYXRlT2ZmU2NyZWVuV2lu
ZG93KGhhbmRsZUlkLCAqZm91bmRWaXN1YWwsIHNpemUpOwotICAgIH0KLX0KLSNlbmRpZgotCi0j
ZW5kaWYKLQotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coY29uc3QgdWlu
dDMyX3Qgd2luZG93SWQpCi17Ci0gICAgaWYgKCF3aW5kb3dJZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7
Ci0gICAgaWYgKCFkaXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBYRGVzdHJveVdpbmRv
dyhkaXNwbGF5LCB3aW5kb3dJZCk7Ci19Ci0KLURpc3BsYXkqIFgxMU9mZlNjcmVlbldpbmRvdzo6
bmF0aXZlU2hhcmVkRGlzcGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hhcmVkUmVzb3Vy
Y2VzLT54MTFEaXNwbGF5KCk7Ci19Ci0KLWJvb2wgWDExT2ZmU2NyZWVuV2luZG93Ojppc1hSZW5k
ZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3NoYXJlZFJlc291
cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gx
MVdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2MyZDMzZi4uMDAwMDAwMAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgWDExV2luZG93UmVzb3VyY2Vz
X2gKLSNkZWZpbmUgWDExV2luZG93UmVzb3VyY2VzX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLQotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJPd25QdHJYMTEu
aCIKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotCi0jaWYgVVNFKEVHTCkKLSNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+Ci0jZW5k
aWYKLQotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KLSNpbmNsdWRlIDxY
MTEvZXh0ZW5zaW9ucy9YcmVuZGVyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBTaGFyZWRYMTFSZXNvdXJjZXMgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkWDExUmVzb3VyY2VzKTsKLQotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFgxMVJlc291cmNlcz4gY3JlYXRlKCkKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSkKLSAgICAgICAgICAgIG1f
c3RhdGljU2hhcmVkUmVzb3VyY2UgPSBuZXcgU2hhcmVkWDExUmVzb3VyY2VzKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UtPnJlZigpOwotCi0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZFJlc291cmNlKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGRlcmVmKCkKLSAgICB7Ci0gICAgICAgIGlmIChkZXJlZkJhc2UoKSkgewotICAgICAg
ICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7Ci0gICAgICAgICAgICBkZWxldGUgdGhp
czsKLSAgICAgICAgfQotICAgIH0KLQotICAgIERpc3BsYXkqIHgxMURpc3BsYXkoKQotICAgIHsK
LSAgICAgICAgaWYgKCFtX2Rpc3BsYXkpIHsKLSAgICAgICAgICAgIG1fZGlzcGxheSA9IFhPcGVu
RGlzcGxheSgwKTsKLSAgICAgICAgICAgIGlmICghbV9kaXNwbGF5KSB7Ci0gICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb25uZWN0aW9uIHdpdGggWCIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQotICAgICAgICAgICAgaWYgKG1fZGlzcGxheSkgewotICAgICAgICAgICAgICAgIGludCBl
dmVudEJhc2VwLCBlcnJvckJhc2VwOwotICAgICAgICAgICAgICAgIG1fc3VwcG9ydHNYUmVuZGVy
RXh0ZW5zaW9uID0gWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uKG1fZGlzcGxheSwgJmV2ZW50QmFzZXAs
ICZlcnJvckJhc2VwKTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIG1fZGlzcGxheTsKLSAgICB9Ci0KLSAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCi0g
ICAgewotICAgICAgICBpZiAoIW1fd2luZG93KSB7Ci0gICAgICAgICAgICBEaXNwbGF5KiBkcHkg
PSB4MTFEaXNwbGF5KCk7Ci0gICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1
dGVzOwotICAgICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRydWU7Ci0g
ICAgICAgICAgICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVmYXVsdFJv
b3RXaW5kb3coZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCksIFdoaXRl
UGl4ZWwoZHB5LCAwKSk7Ci0gICAgICAgICAgICAvLyBGcm9tIGh0dHA6Ly90cm9uY2hlLmNvbS9n
dWkveC94bGliL3dpbmRvdy9hdHRyaWJ1dGVzLwotICAgICAgICAgICAgWENoYW5nZVdpbmRvd0F0
dHJpYnV0ZXMoZHB5LCBtX3dpbmRvdywgQ1dPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7
Ci0gICAgICAgICAgICBYTWFwV2luZG93KGRweSwgbV93aW5kb3cpOwotCi0gICAgICAgICAgICBp
ZiAoIW1fd2luZG93KSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIG9mZnNjcmVlbiByb290IHdpbmRvdy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3dpbmRvdzsKLSAg
ICB9Ci0KLSAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247Ci0gICAgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgU2hhcmVkWDExUmVzb3VyY2VzKCkKLSAgICAgICAgOiBtX3N1cHBvcnRz
WFJlbmRlckV4dGVuc2lvbihmYWxzZSkKLSAgICAgICAgLCBtX3dpbmRvdygwKQotICAgICAgICAs
IG1fZGlzcGxheSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5TaGFyZWRYMTFSZXNv
dXJjZXMoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2Rpc3BsYXkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgICAgICBYVW5tYXBXaW5kb3co
bV9kaXNwbGF5LCBtX3dpbmRvdyk7Ci0gICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhtX2Rpc3Bs
YXksIG1fd2luZG93KTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAgfQotCi0g
ICAgICAgIFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsKLSAgICAgICAgbV9kaXNwbGF5ID0gMDsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgU2hhcmVkWDExUmVzb3VyY2VzKiBtX3N0YXRpY1NoYXJlZFJl
c291cmNlOwotICAgIGJvb2wgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247Ci0gICAgV2luZG93
IG1fd2luZG93OwotICAgIERpc3BsYXkqIG1fZGlzcGxheTsKLX07Ci0KLWNsYXNzIFgxMU9mZlNj
cmVlbldpbmRvdyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWDExT2ZmU2NyZWVuV2luZG93
KTsKLQotcHVibGljOgotICAgIFgxMU9mZlNjcmVlbldpbmRvdygpOwotICAgIHZpcnR1YWwgflgx
MU9mZlNjcmVlbldpbmRvdygpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQg
Y3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiwgY29uc3QgWFZpc3VhbEluZm8mLCBjb25z
dCBJbnRTaXplJiA9IEludFNpemUoMSwgMSkpOwotI2lmIFVTRShFR0wpCi0gICAgdm9pZCBjcmVh
dGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBFR0xpbnQsIGNvbnN0IEludFNpemUm
ID0gSW50U2l6ZSgxLCAxKSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHZvaWQgZGVzdHJveVdpbmRv
dyhjb25zdCB1aW50MzJfdCk7Ci0gICAgdm9pZCByZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYs
IGNvbnN0IHVpbnQzMl90KTsKLSAgICBEaXNwbGF5KiBuYXRpdmVTaGFyZWREaXNwbGF5KCkgY29u
c3Q7Ci0gICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNlczsK
LX07Ci0KLX0KLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IFRvb2xzL3FtYWtlL21rc3Bl
Y3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmIFRvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvZmVh
dHVyZXMucHJmCmluZGV4IGNjOTA3MmQuLmUzOWMwYzIgMTAwNjQ0Ci0tLSBUb29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysgVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0
dXJlcy9mZWF0dXJlcy5wcmYKQEAgLTEzOCw3ICsxMzgsNyBAQCBkZWZpbmVUZXN0KGRldGVjdEZl
YXR1cmVzKSB7CiAgICAgdXNlPygzZF9ncmFwaGljcykgewogICAgICAgICBtYWM6IFdFQktJVF9D
T05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZhY2UKICAgICAgICAgd2luMzI6Y29udGFpbnMoUVRf
Q09ORklHLCBvcGVuZ2xlczIpOiBXRUJLSVRfQ09ORklHICs9IHVzZV9ncmFwaGljc19zdXJmYWNl
Ci0gICAgICAgIGxpbnV4LSo6Y29udGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV9nbHgpOmNvbnRh
aW5zKFdFQktJVF9DT05GSUcsIGhhdmVfeGNvbXBvc2l0ZSk6Y29udGFpbnMoV0VCS0lUX0NPTkZJ
RywgaGF2ZV94cmVuZGVyKTogV0VCS0lUX0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFjZQor
ICAgICAgICBsaW51eC0qOmNvbnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfZ2x4KTpjb250YWlu
cyhXRUJLSVRfQ09ORklHLCBoYXZlX3hjb21wb3NpdGUpOmNvbnRhaW5zKFdFQktJVF9DT05GSUcs
IGhhdmVfeHJlbmRlcik6IFdFQktJVF9DT05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1cmZhY2UgdXNl
X2dseAogICAgIH0KIAogICAgICMgU2xpZGVyIFRvdWNoIGlzIHNlbnNpYmxlIHRvIHVzZSB3aGVu
IGNvbXBpbGluZyBXZWJLaXQyCg==
</data>
<flag name="review"
          id="206500"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="206739"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187260</attachid>
            <date>2013-02-08 00:53:09 -0800</date>
            <delta_ts>2013-02-09 07:11:46 -0800</delta_ts>
            <desc>patch</desc>
            <filename>glxcommitchanges.patch</filename>
            <type>text/plain</type>
            <size>59703</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGIzNzdhN2IuLjFhOWRkNTcgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEz
LTAyLTA4ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXVtRdF1bV2ViR0xdIFNoYXJlIHRoZSBjb21tb24gY29kZSBiZXR3ZWVu
IEdyYXBoaWNzU3VyZmFjZUdMWCBhbmQgWDExV2luZG93UmVzb3VyY2VzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2NjY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyBXZWJHTCB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55
IGR1cGxpY2F0ZSBjb2RlIGluIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQKKyAgICAgICAgR3JhcGhp
Y3NTdXJmYWNlR0xYLiBObyBuZXcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAq
IFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ1NlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVHTENvbmZpZ1NlbGVjdG9yOjpwaXhtYXBDb250ZXh0Q29uZmlnKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnU2VsZWN0b3Iu
aDoKKyAgICAgICAgKEVHTENvbmZpZ1NlbGVjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFR0xX
aW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAg
ICAoV2ViQ29yZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb25maWdTZWxlY3Rvci5o
OgorICAgICAgICAoV2ViQ29yZTo6R0xYQ29uZmlnU2VsZWN0b3I6OkdMWENvbmZpZ1NlbGVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjp2aXN1YWxJbmZvKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdMWENvbmZpZ1NlbGVjdG9yOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6
CisgICAgICAgIChXZWJDb3JlOjpHTFhDb25maWdTZWxlY3Rvcjo6Y3JlYXRlU3VyZmFjZUNvbmZp
Zyk6CisgICAgICAgIChHTFhDb25maWdTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5p
dGlhbGl6ZUFSQkV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2ZmU2NyZWVuQ29u
dGV4dDo6R0xYT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHTFhPZmZTY3Jl
ZW5Db250ZXh0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdMWE9mZlNjcmVlbkNv
bnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R0xYT2Zm
U2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaDoKKyAgICAgICAgKEdMWE9mZlNjcmVlbkNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9y
dFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R0xYVHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpHTFhQQnVmZmVyOjppbml0aWFsaXplKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oOgorICAgICAgICAoR0xY
VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChHTFhQQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6
R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2VQcml2YXRlOjppbml0aWFsaXplKToKKyAgICAgICAgKEdyYXBoaWNzU3VyZmFjZVByaXZhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y3JlYXRlU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjcmVhdGVQaXht
YXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpmbGFncyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjpjbGVhcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBwZXIpOgor
ICAgICAgICBObyBuZXcgZnVuY3Rpb25hbGl0eSBhZGRlZC4gTWFkZSBjaGFuZ2VzIHRvIHRha2Ug
dGhlIGNvbW1vbiBjb2RlIGludG8gdXNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFIZWxwZXIuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlDb25uZWN0aW9uOjpEaXNwbGF5Q29ubmVjdGlvbik6CisgICAgICAgIChEaXNwbGF5Q29ubmVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q29ubmVjdGlvbjo6fkRpc3BsYXlDb25u
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDb25uZWN0aW9uOjpkaXNwbGF5KToK
KyAgICAgICAgKE9mZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmU2Ny
ZWVuUm9vdFdpbmRvdzo6T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpP
ZmZTY3JlZW5Sb290V2luZG93Ojp+T2ZmU2NyZWVuUm9vdFdpbmRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpPZmZTY3JlZW5Sb290V2luZG93Ojpyb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OlgxMUhlbHBlcjo6cmVzaXplV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6
Y3JlYXRlT2ZmU2NyZWVuV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlgxMUhlbHBlcjo6ZGVz
dHJveVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6OmlzWFJlbmRlckV4dGVu
c2lvblN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpYMTFIZWxwZXI6Om5hdGl2ZURpc3Bs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6WDExSGVscGVyOjpvZmZzY3JlZW5Sb290V2luZG93KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVYUGl4bWFw
Q3JlYXRpb25FcnJvcik6CisgICAgICAgIChYMTFIZWxwZXIpOgorICAgICAgICAoU2NvcGVkWFBp
eG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXht
YXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcjo6
flNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpT
Y29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6OmlzVmFsaWRPcGVyYXRpb24pOgorICAg
ICAgICBNb3ZlZCBjb21tb24gY29kZSBmcm9tIEdyYXBoaWNzU3VyZmFjZUdMWCB0byBYMTFIZWxw
ZXIuCisKIDIwMTMtMDItMDggIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE5hdGl2ZSBNZW1vcnkgSW5zdHJ1bWVudGF0aW9u
OiBhZGp1c3QgY2h1bmsgdHJhbnNmZXIgc2l6ZSBmb3IgYmV0dGVyIHNwZWVkLgpkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IGUxOGJkYjUuLjUxNjEzY2UgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
QEAgLTEzMiw5ICsxMzIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKLQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dPRkZGaWxl
Rm9ybWF0LmNwcAogCiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNv
ZGVyQ2Fpcm8uY3BwCkBAIC0zMTYsOCArMzEzLDcgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1Mp
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1
cmZhY2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGlj
c1N1cmZhY2VHTFguY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9Y
MTFXaW5kb3dSZXNvdXJjZXMuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFIZWxwZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbS5jcHAKICAgICApCkBAIC0zMjgsNiArMzI0LDEyIEBAIGlmIChX
VEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTENvbnRleHQuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKICAgICAgICAgKQorICAgIGVsc2UgKCkKKyAgICAgICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKKyAgICAgICAgKQogICAg
IGVuZGlmICgpCiAKICAgICBpZiAoV1RGX1VTRV9PUEVOR0xfRVNfMikKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZGQz
MTNhYS4uODYwNTE3YyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIFNv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQyMjUsNyArNDIyNSwxMiBAQCB1c2U/KEdSQVBI
SUNTX1NVUkZBQ0UpIHsKICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy93aW4vR3JhcGhpY3NTdXJmYWNlV2luLmNwcAogICAgIH0KICAgICBoYXZlPyhYQ09NUE9T
SVRFKSB7Ci0gICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKKyAgICAgICAgSEVBREVSUyArPSBcCisgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmggXAorICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1NlbGVjdG9yLmgKKyAg
ICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvWDExSGVscGVyLmNwcCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcAogICAgIH0KIH0KIApkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNw
cCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFj
ZS5jcHAKaW5kZXggMjZkNTZhNS4uZTY3MTFmOCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCkBAIC0z
MywxMyArMzMsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRUdMV2luZG93VHJhbnNwb3J0U3Vy
ZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSgpCiAgICAgOiBHTFBsYXRmb3JtU3VyZmFj
ZSgpCiB7Ci0gICAgbV9uYXRpdmVSZXNvdXJjZSA9IGFkb3B0UHRyKG5ldyBOYXRpdmVPZmZTY3Jl
ZW5XaW5kb3coKSk7Ci0gICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBFR0xDb25m
aWdTZWxlY3RvcihtX25hdGl2ZVJlc291cmNlLT5uYXRpdmVTaGFyZWREaXNwbGF5KCkpKTsKKyAg
ICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ1NlbGVjdG9yKE5hdGl2
ZVdyYXBwZXI6Om5hdGl2ZURpc3BsYXkoKSkpOwogICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fY29u
ZmlnU2VsZWN0b3ItPmRpc3BsYXkoKTsKIAogICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdM
X05PX0RJU1BMQVkpIHsKICAgICAgICAgbV9jb25maWdTZWxlY3RvciA9IG51bGxwdHI7Ci0gICAg
ICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC01Nyw3ICs1NSw3IEBAIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OkVHTFdpbmRvd1Ry
YW5zcG9ydFN1cmZhY2UoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9uYXRpdmVS
ZXNvdXJjZS0+Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSwgdmlzdWFsSWQp
OworICAgIE5hdGl2ZVdyYXBwZXI6OmNyZWF0ZU9mZlNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5k
bGUsIHZpc3VhbElkKTsKIAogICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKICAgICAgICAgZGVz
dHJveSgpOwpAQCAtMTA0LDcgKzEwMiw3IEBAIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6c3dhcEJ1ZmZlcnMoKQogdm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95
KCkKIHsKICAgICBHTFBsYXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpOwotICAgIG1fbmF0aXZlUmVz
b3VyY2UtPmRlc3Ryb3lXaW5kb3cobV9idWZmZXJIYW5kbGUpOworICAgIE5hdGl2ZVdyYXBwZXI6
OmRlc3Ryb3lXaW5kb3cobV9idWZmZXJIYW5kbGUpOwogICAgIGZyZWVFR0xSZXNvdXJjZXMoKTsK
ICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CiB9CkBAIC0xMjgsNyArMTI2LDcgQEAgdm9pZCBFR0xX
aW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpmcmVlRUdMUmVzb3VyY2VzKCkKIHZvaWQgRUdMV2luZG93
VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKIHsK
ICAgICBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7Ci0gICAgbV9uYXRp
dmVSZXNvdXJjZS0+cmVTaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKKyAgICBO
YXRpdmVXcmFwcGVyOjpyZXNpemVXaW5kb3cobmV3UmVjdCwgbV9idWZmZXJIYW5kbGUpOwogfQog
CiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5oCmluZGV4IDVjMjg4YTkuLjJlYTcwNDIgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFj
ZS5oCkBAIC0zMSwxMyArMzEsMTMgQEAKICNpbmNsdWRlICJFR0xDb25maWdTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIkdMUGxhdGZvcm1TdXJmYWNlLmgiCiAKLSNpbmNsdWRlIDxnbHgvWDExV2luZG93
UmVzb3VyY2VzLmg+CisjaW5jbHVkZSA8Z2x4L1gxMUhlbHBlci5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdHlwZWRlZiBYMTFPZmZTY3JlZW5XaW5kb3cgTmF0aXZlT2ZmU2NyZWVuV2lu
ZG93OwordHlwZWRlZiBYMTFIZWxwZXIgTmF0aXZlV3JhcHBlcjsKIAogLy8gQ29udGVudHMgb2Yg
dGhlIHN1cmZhY2UgYXJlIGJhY2tlZCBieSBuYXRpdmUgd2luZG93LgogY2xhc3MgRUdMV2luZG93
VHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CkBAIC01Miw3ICs1
Miw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGZyZWVFR0xSZXNvdXJjZXMoKTsK
LSAgICBPd25QdHI8TmF0aXZlT2ZmU2NyZWVuV2luZG93PiBtX25hdGl2ZVJlc291cmNlOwogICAg
IE93blB0cjxFR0xDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKIH07CiAKZGlmZiAt
LWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29u
ZmlnU2VsZWN0b3IuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYQ29uZmlnU2VsZWN0b3IuaAppbmRleCBkZDFiNjJiLi5lYTczOTIxIDEwMDY0NAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbmZpZ1Nl
bGVjdG9yLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HTFhDb25maWdTZWxlY3Rvci5oCkBAIC0yNiwyMSArMjYsMzAgQEAKICNpZm5kZWYgR0xYQ29u
ZmlnU2VsZWN0b3JfaAogI2RlZmluZSBHTFhDb25maWdTZWxlY3Rvcl9oCiAKLSNpbmNsdWRlICJY
MTFXaW5kb3dSZXNvdXJjZXMuaCIKLQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKEdMWCkKIAorI2luY2x1ZGUgIlgxMUhlbHBlci5oIgorI2luY2x1ZGUgPG9wZW5nbC9H
TERlZnMuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgaW50IGNsaWVudEF0dHJp
YnV0ZXNbXSA9IHsKKyAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBpcyBhIHNldCBrZXkgdmFsdWUg
cGFpcnMgc3RvcmVkIGluIGEgc2ltcGxlIGFycmF5LgorICAgIEdMWF9MRVZFTCwgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsCisgICAgc3RhdGljX2Nhc3Q8aW50PihHTFhfVklTVUFMX0lEKSwg
ICAgMCwKKyAgICBHTFhfRFJBV0FCTEVfVFlQRSwgICAgICAgICAgICAgICAgICBHTFhfUElYTUFQ
X0JJVCwKKyAgICBHTFhfQklORF9UT19URVhUVVJFX1RBUkdFVFNfRVhULCAgICBHTFhfVEVYVFVS
RV8yRF9CSVRfRVhULAorICAgIEdMWF9CSU5EX1RPX1RFWFRVUkVfUkdCQV9FWFQsICAgICAgIFRS
VUUsCisgICAgMAorfTsKKwogY2xhc3MgR0xYQ29uZmlnU2VsZWN0b3IgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEdMWENvbmZpZ1NlbGVjdG9yKTsKIAogcHVibGljOgotICAgIEdMWENvbmZp
Z1NlbGVjdG9yKERpc3BsYXkqIHhEaXNwbGF5LCBib29sIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lv
bikKKyAgICBHTFhDb25maWdTZWxlY3RvcigpCiAgICAgICAgIDogbV9wYnVmZmVyRkJDb25maWco
MCkKICAgICAgICAgLCBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcoMCkKLSAgICAgICAgLCBtX3No
YXJlZERpc3BsYXkoeERpc3BsYXkpCi0gICAgICAgICwgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNp
b24oc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKQogICAgIHsKICAgICB9CiAKQEAgLTUzLDcgKzYy
LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIXN1cmZhY2VDb250ZXh0Q29uZmlnKCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICByZXR1cm4gZ2xYR2V0VmlzdWFsRnJvbUZCQ29u
ZmlnKG1fc2hhcmVkRGlzcGxheSwgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKTsKKyAgICAgICAg
cmV0dXJuIGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXko
KSwgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKTsKICAgICB9CiAKICAgICBHTFhGQkNvbmZpZyBw
QnVmZmVyQ29udGV4dENvbmZpZygpCkBAIC03MCwxMCArNzksNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgTm9uZQogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgaW50IG51bUF2YWls
YWJsZUNvbmZpZ3M7Ci0gICAgICAgICAgICBPd25QdHJYMTE8R0xYRkJDb25maWc+IHRlbXAoZ2xY
Q2hvb3NlRkJDb25maWcobV9zaGFyZWREaXNwbGF5LCBEZWZhdWx0U2NyZWVuKG1fc2hhcmVkRGlz
cGxheSksIGF0dHJpYnV0ZXMsICZudW1BdmFpbGFibGVDb25maWdzKSk7Ci0gICAgICAgICAgICBp
ZiAobnVtQXZhaWxhYmxlQ29uZmlncykKLSAgICAgICAgICAgICAgICBtX3BidWZmZXJGQkNvbmZp
ZyA9IHRlbXBbMF07CisgICAgICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IGZpbmRNYXRjaGlu
Z0NvbmZpZyhhdHRyaWJ1dGVzKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBtX3BidWZm
ZXJGQkNvbmZpZzsKQEAgLTg3LDYgKzkzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
c3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKICAgICB9CiAKKyAgICBHTFhGQkNvbmZpZyBzdXJmYWNl
Q2xpZW50Q29uZmlnKGludCBkZXB0aCwgVmlzdWFsSUQgaWQpCisgICAgeworICAgICAgICBjbGll
bnRBdHRyaWJ1dGVzWzNdID0gc3RhdGljX2Nhc3Q8aW50PihpZCk7CisgICAgICAgIGNsaWVudEF0
dHJpYnV0ZXNbOF0gPSBkZXB0aCA9PSAzMiA/IEdMWF9CSU5EX1RPX1RFWFRVUkVfUkdCQV9FWFQg
OiBHTFhfQklORF9UT19URVhUVVJFX1JHQl9FWFQ7CisKKyAgICAgICAgcmV0dXJuIGZpbmRNYXRj
aGluZ0NvbmZpZyhjbGllbnRBdHRyaWJ1dGVzLCBkZXB0aCwgaWQpOworICAgIH0KKwogICAgIHZv
aWQgcmVzZXQoKQogICAgIHsKICAgICAgICAgbV9wYnVmZmVyRkJDb25maWcgPSAwOwpAQCAtMTEw
LDQzICsxMjQsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vbmUKICAgICAgICAgfTsKIAor
ICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBmaW5kTWF0Y2hpbmdDb25maWcoYXR0
cmlidXRlcyk7CisgICAgfQorCisgICAgR0xYRkJDb25maWcgZmluZE1hdGNoaW5nQ29uZmlnKGNv
bnN0IGludCBhdHRyaWJ1dGVzW10sIGludCBkZXB0aCA9IDMyLCBWaXN1YWxJRCBpZCA9IDApCisg
ICAgewogICAgICAgICBpbnQgbnVtQXZhaWxhYmxlQ29uZmlnczsKLSAgICAgICAgT3duUHRyWDEx
PEdMWEZCQ29uZmlnPiB0ZW1wKGdsWENob29zZUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgRGVm
YXVsdFNjcmVlbihtX3NoYXJlZERpc3BsYXkpLCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29u
ZmlncykpOworICAgICAgICBPd25QdHJYMTE8R0xYRkJDb25maWc+IHRlbXAoZ2xYQ2hvb3NlRkJD
b25maWcoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIERlZmF1bHRTY3JlZW4oWDExSGVscGVy
OjpuYXRpdmVEaXNwbGF5KCkpLCBhdHRyaWJ1dGVzLCAmbnVtQXZhaWxhYmxlQ29uZmlncykpOwog
Ci0gICAgICAgIGlmICghbnVtQXZhaWxhYmxlQ29uZmlncykgewotICAgICAgICAgICAgbV9zdXJm
YWNlQ29udGV4dEZCQ29uZmlnID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQor
ICAgICAgICBpZiAoIW51bUF2YWlsYWJsZUNvbmZpZ3MgfHwgIXRlbXAuZ2V0KCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKIAogICAgICAgICBPd25QdHJYMTE8WFZpc3VhbEluZm8+IHNjb3BlZFZp
c3VhbEluZm87CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXZhaWxhYmxlQ29uZmln
czsgKytpKSB7Ci0gICAgICAgICAgICBzY29wZWRWaXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJv
bUZCQ29uZmlnKG1fc2hhcmVkRGlzcGxheSwgdGVtcFtpXSk7CisgICAgICAgICAgICBzY29wZWRW
aXN1YWxJbmZvID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKFgxMUhlbHBlcjo6bmF0aXZlRGlz
cGxheSgpLCB0ZW1wW2ldKTsKICAgICAgICAgICAgIGlmICghc2NvcGVkVmlzdWFsSW5mby5nZXQo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGlkICYmIHNj
b3BlZFZpc3VhbEluZm8tPmRlcHRoID09IGRlcHRoICYmIHNjb3BlZFZpc3VhbEluZm8tPnZpc3Vh
bGlkID09IGlkKQorICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wW2ldOworCiAjaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi0gICAgICAgICAgICBpZiAobV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNp
b24pIHsKLSAgICAgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRl
ckZpbmRWaXN1YWxGb3JtYXQobV9zaGFyZWREaXNwbGF5LCBzY29wZWRWaXN1YWxJbmZvLT52aXN1
YWwpOwotICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFN
YXNrID4gMCkgewotICAgICAgICAgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcg
PSB0ZW1wW2ldOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoWDExSGVscGVyOjppc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQo
KSkgeworICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVy
RmluZFZpc3VhbEZvcm1hdChYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgc2NvcGVkVmlzdWFs
SW5mby0+dmlzdWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGRlcHRoID09IDMy
ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0ZW1wW2ldOwogICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICBpZiAoIW1f
c3VyZmFjZUNvbnRleHRGQkNvbmZpZyAmJiBzY29wZWRWaXN1YWxJbmZvLT5kZXB0aCA9PSAzMikg
ewotICAgICAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IHRlbXBbaV07Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2Nv
cGVkVmlzdWFsSW5mby0+ZGVwdGggPT0gZGVwdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRl
bXBbaV07CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEaWQgbm90IGZpbmQgYW55IHZpc3VhbCBz
dXBwb3J0aW5nIGFscGhhLCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBjb25maWcuCi0gICAg
ICAgIGlmICghbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnKQotICAgICAgICAgICAgbV9zdXJmYWNl
Q29udGV4dEZCQ29uZmlnID0gdGVtcFswXTsKKyAgICAgICAgcmV0dXJuIHRlbXBbMF07CiAgICAg
fQogCiAgICAgR0xYRkJDb25maWcgbV9wYnVmZmVyRkJDb25maWc7CiAgICAgR0xYRkJDb25maWcg
bV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOwotICAgIERpc3BsYXkqIG1fc2hhcmVkRGlzcGxheTsK
LSAgICBib29sIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwogfTsKIAogfQpkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0
LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29u
dGV4dC5jcHAKaW5kZXggYTlmMzIyZC4uOGY0MDQ2MyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCkBA
IC0yOCw2ICsyOCw4IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShHTFgpCiAKKyNpbmNsdWRlICJYMTFIZWxwZXIuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB0eXBlZGVmIEdMWENvbnRleHQgKCpHTFhDUkVBVEVDT05URVhUQVRUUklCU0FSQlBST0MpKERp
c3BsYXkqLCBHTFhGQkNvbmZpZywgR0xYQ29udGV4dCwgQm9vbCwgY29uc3QgaW50Kik7CkBAIC0z
OCwyMCArNDAsMTkgQEAgc3RhdGljIGludCBBdHRyaWJzW10gPSB7CiAgICAgR0xYX0xPU0VfQ09O
VEVYVF9PTl9SRVNFVF9BUkIsCiAgICAgMCB9OwogCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplQVJC
RXh0ZW5zaW9ucyhEaXNwbGF5KiBkaXNwbGF5KQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFSQkV4
dGVuc2lvbnMoKQogewogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAg
aWYgKGluaXRpYWxpemVkKQogICAgICAgICByZXR1cm47CiAKICAgICBpbml0aWFsaXplZCA9IHRy
dWU7Ci0gICAgaWYgKEdMUGxhdGZvcm1Db250ZXh0OjpzdXBwb3J0c0dMWEV4dGVuc2lvbihkaXNw
bGF5LCAiR0xYX0FSQl9jcmVhdGVfY29udGV4dF9yb2J1c3RuZXNzIikpCisgICAgaWYgKEdMUGxh
dGZvcm1Db250ZXh0OjpzdXBwb3J0c0dMWEV4dGVuc2lvbihYMTFIZWxwZXI6Om5hdGl2ZURpc3Bs
YXkoKSwgIkdMWF9BUkJfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyIpKQogICAgICAgICBnbFhD
cmVhdGVDb250ZXh0QXR0cmlic0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xYQ1JFQVRFQ09OVEVY
VEFUVFJJQlNBUkJQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0
IEdMdWJ5dGUqPigiZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIiKSkpOwogfQogCiBHTFhPZmZT
Y3JlZW5Db250ZXh0OjpHTFhPZmZTY3JlZW5Db250ZXh0KCkKICAgICA6IEdMUGxhdGZvcm1Db250
ZXh0KCkKLSAgICAsIG1fZGlzcGxheSgwKQogewogfQogCkBAIC02MCwxNyArNjEsMTcgQEAgYm9v
bCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJm
YWNlKQogICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9k
aXNwbGF5ID0gc3VyZmFjZS0+c2hhcmVkRGlzcGxheSgpOwotICAgIGlmICghbV9kaXNwbGF5KQor
ICAgIERpc3BsYXkqIHgxMURpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNwbGF5KCk7CisgICAg
aWYgKCF4MTFEaXNwbGF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBHTFhGQkNvbmZp
ZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CiAKICAgICBpZiAoY29uZmlnKSB7
Ci0gICAgICAgIGluaXRpYWxpemVBUkJFeHRlbnNpb25zKG1fZGlzcGxheSk7CisgICAgICAgIGlu
aXRpYWxpemVBUkJFeHRlbnNpb25zKCk7CiAKICAgICAgICAgaWYgKGdsWENyZWF0ZUNvbnRleHRB
dHRyaWJzQVJCKQotICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4
dEF0dHJpYnNBUkIobV9kaXNwbGF5LCBjb25maWcsIDAsIHRydWUsIEF0dHJpYnMpOworICAgICAg
ICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xYQ3JlYXRlQ29udGV4dEF0dHJpYnNBUkIoeDExRGlz
cGxheSwgY29uZmlnLCAwLCB0cnVlLCBBdHRyaWJzKTsKIAogICAgICAgICBpZiAobV9jb250ZXh0
SGFuZGxlKSB7CiAgICAgICAgICAgICAvLyBUaGUgR0xYX0FSQl9jcmVhdGVfY29udGV4dF9yb2J1
c3RuZXNzIHNwZWMgcmVxdWlyZXMgdGhhdCBhIGNvbnRleHQgY3JlYXRlZCB3aXRoCkBAIC04MCwx
MSArODEsMTEgQEAgYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxhdGZv
cm1TdXJmYWNlKiBzdXJmYWNlKQogICAgICAgICAgICAgaWYgKHBsYXRmb3JtTWFrZUN1cnJlbnQo
c3VyZmFjZSkgJiYgR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xFeHRlbnNpb24oIkdMX0FS
Ql9yb2J1c3RuZXNzIikpCiAgICAgICAgICAgICAgICAgbV9yZXNldExvc3RDb250ZXh0ID0gdHJ1
ZTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnbFhEZXN0cm95Q29udGV4dCht
X2Rpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7CisgICAgICAgICAgICAgICAgZ2xYRGVzdHJveUNv
bnRleHQoeDExRGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICghbV9jb250ZXh0SGFuZGxlKQotICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZ2xY
Q3JlYXRlTmV3Q29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQRSwgMCwgdHJ1
ZSk7CisgICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBnbFhDcmVhdGVOZXdDb250ZXh0KHgx
MURpc3BsYXksIGNvbmZpZywgR0xYX1JHQkFfVFlQRSwgMCwgdHJ1ZSk7CiAKICAgICAgICAgaWYg
KG1fY29udGV4dEhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTA5LDE0ICsx
MTAsMjEgQEAgYm9vbCBHTFhPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KEdM
UGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQogCiB2b2lkIEdMWE9mZlNjcmVlbkNvbnRleHQ6OnBs
YXRmb3JtUmVsZWFzZUN1cnJlbnQoKQogewotICAgIGdsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwg
MCwgMCk7Ci0gICAgbV9kaXNwbGF5ID0gMDsKKyAgICBEaXNwbGF5KiB4MTFEaXNwbGF5ID0gWDEx
SGVscGVyOjpuYXRpdmVEaXNwbGF5KCk7CisgICAgaWYgKCF4MTFEaXNwbGF5KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBnbFhNYWtlQ3VycmVudCh4MTFEaXNwbGF5LCAwLCAwKTsKIH0KIAogdm9p
ZCBHTFhPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3VyY2VzKCkKIHsKKyAgICBEaXNwbGF5KiB4
MTFEaXNwbGF5ID0gWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCk7CisgICAgaWYgKCF4MTFEaXNw
bGF5KQorICAgICAgICByZXR1cm47CisKICAgICBpZiAobV9jb250ZXh0SGFuZGxlKQotICAgICAg
ICBnbFhEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7CisgICAgICAg
IGdsWERlc3Ryb3lDb250ZXh0KHgxMURpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7CiAKICAgICBt
X2NvbnRleHRIYW5kbGUgPSAwOwogfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuaAppbmRleCBjYmRlMGVmLi40NDRl
N2YyIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWENvbnRleHQuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWENvbnRleHQuaApAQCAtNDUsNyArNDUsNiBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7Ci0gICAgRGlzcGxheSogbV9kaXNwbGF5Owog
fTsKIAogfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9HTFhTdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKaW5kZXggODBmYzI2Mi4uYzAzYzNkMCAxMDA2NDQK
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJm
YWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWFN1cmZhY2UuY3BwCkBAIC0zNiwxNSArMzYsOCBAQCBzdGF0aWMgY29uc3QgaW50IHBidWZm
ZXJBdHRyaWJ1dGVzW10gPSB7IEdMWF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlH
SAogR0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSgpCiAgICAgOiBHTFBs
YXRmb3JtU3VyZmFjZSgpCiB7Ci0gICAgbV9uYXRpdmVSZXNvdXJjZSA9IGFkb3B0UHRyKG5ldyBY
MTFPZmZTY3JlZW5XaW5kb3coKSk7Ci0gICAgbV9zaGFyZWREaXNwbGF5ID0gbV9uYXRpdmVSZXNv
dXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgpOwotCi0gICAgaWYgKCFtX3NoYXJlZERpc3BsYXkp
IHsKLSAgICAgICAgbV9uYXRpdmVSZXNvdXJjZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZpZ1Nl
bGVjdG9yKG1fc2hhcmVkRGlzcGxheSwgbV9uYXRpdmVSZXNvdXJjZS0+aXNYUmVuZGVyRXh0ZW5z
aW9uU3VwcG9ydGVkKCkpKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBYMTFIZWxwZXI6Om5hdGl2
ZURpc3BsYXkoKTsKKyAgICBtX2NvbmZpZ1NlbGVjdG9yID0gYWRvcHRQdHIobmV3IEdMWENvbmZp
Z1NlbGVjdG9yKCkpOwogICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gdmlzSW5mbyhtX2NvbmZp
Z1NlbGVjdG9yLT52aXN1YWxJbmZvKCkpOwogCiAgICAgaWYgKCF2aXNJbmZvLmdldCgpKSB7CkBA
IC01Miw3ICs0NSw3IEBAIEdMWFRyYW5zcG9ydFN1cmZhY2U6OkdMWFRyYW5zcG9ydFN1cmZhY2Uo
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9uYXRpdmVSZXNvdXJjZS0+Y3JlYXRl
T2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSwgKnZpc0luZm8uZ2V0KCkpOworICAgIFgx
MUhlbHBlcjo6Y3JlYXRlT2ZmU2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSwgKnZpc0luZm8u
Z2V0KCkpOwogCiAgICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgewogICAgICAgICBkZXN0cm95KCk7
CkBAIC03NCw3ICs2Nyw3IEBAIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBHTFhUcmFuc3BvcnRTdXJm
YWNlOjpjb25maWd1cmF0aW9uKCkKIHZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0
cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKIHsKICAgICBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0
R2VvbWV0cnkobmV3UmVjdCk7Ci0gICAgbV9uYXRpdmVSZXNvdXJjZS0+cmVTaXplV2luZG93KG5l
d1JlY3QsIG1fZHJhd2FibGUpOworICAgIFgxMUhlbHBlcjo6cmVzaXplV2luZG93KG5ld1JlY3Qs
IG1fZHJhd2FibGUpOwogICAgIC8vIEZvcmNlIHJlc2l6ZSBvZiBHTCBzdXJmYWNlIGFmdGVyIHdp
bmRvdyByZXNpemUuCiAgICAgZ2xYU3dhcEJ1ZmZlcnMoc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdh
YmxlKTsKIH0KQEAgLTk5LDcgKzkyLDcgQEAgdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0
cm95KCkKICAgICBHTFBsYXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpOwogCiAgICAgaWYgKG1fYnVm
ZmVySGFuZGxlKSB7Ci0gICAgICAgIG1fbmF0aXZlUmVzb3VyY2UtPmRlc3Ryb3lXaW5kb3cobV9i
dWZmZXJIYW5kbGUpOworICAgICAgICBYMTFIZWxwZXI6OmRlc3Ryb3lXaW5kb3cobV9idWZmZXJI
YW5kbGUpOwogICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CiAgICAgICAgIG1fZHJhd2FibGUg
PSAwOwogICAgIH0KQEAgLTEyMSwxNSArMTE0LDkgQEAgR0xYUEJ1ZmZlcjo6fkdMWFBCdWZmZXIo
KQogCiB2b2lkIEdMWFBCdWZmZXI6OmluaXRpYWxpemUoKQogewotICAgIG1fbmF0aXZlUmVzb3Vy
Y2UgPSBhZG9wdFB0cihuZXcgWDExT2ZmU2NyZWVuV2luZG93KCkpOwotICAgIG1fc2hhcmVkRGlz
cGxheSA9IG1fbmF0aXZlUmVzb3VyY2UtPm5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKLQotICAgIGlm
ICghbV9zaGFyZWREaXNwbGF5KSB7Ci0gICAgICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRy
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fc2hhcmVkRGlzcGxheSA9IFgxMUhlbHBl
cjo6bmF0aXZlRGlzcGxheSgpOwogCi0gICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5l
dyBHTFhDb25maWdTZWxlY3RvcihtX3NoYXJlZERpc3BsYXksIG1fbmF0aXZlUmVzb3VyY2UtPmlz
WFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKSk7CisgICAgbV9jb25maWdTZWxlY3RvciA9IGFk
b3B0UHRyKG5ldyBHTFhDb25maWdTZWxlY3RvcigpKTsKICAgICBHTFhGQkNvbmZpZyBjb25maWcg
PSBtX2NvbmZpZ1NlbGVjdG9yLT5wQnVmZmVyQ29udGV4dENvbmZpZygpOwogCiAgICAgaWYgKCFj
b25maWcpIHsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKaW5kZXggODQ3MTVjMS4uOWU3NzMyYSAxMDA2NDQKLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNl
LmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkdMUGxhdGZvcm1TdXJmYWNl
LmgiCiAjaW5jbHVkZSAiR0xYQ29uZmlnU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJYMTFXaW5kb3dS
ZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJYMTFIZWxwZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00Nyw3ICs0Nyw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRp
YWxpemUoKTsKLSAgICBPd25QdHI8WDExT2ZmU2NyZWVuV2luZG93PiBtX25hdGl2ZVJlc291cmNl
OwogICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rvcj4gbV9jb25maWdTZWxlY3RvcjsKIH07CiAj
ZW5kaWYKQEAgLTY0LDcgKzYzLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGluaXRp
YWxpemUoKTsKICAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKLSAgICBPd25QdHI8WDExT2ZmU2Ny
ZWVuV2luZG93PiBtX25hdGl2ZVJlc291cmNlOwogICAgIE93blB0cjxHTFhDb25maWdTZWxlY3Rv
cj4gbV9jb25maWdTZWxlY3RvcjsKIH07CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xYLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR3JhcGhpY3NTdXJmYWNlR0xY
LmNwcAppbmRleCA3NzU3ZTY4Li5lNmIxNDRhIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZh
Y2VHTFguY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAy
MDEzIEludGVsIENvcnBvcmF0aW9uLgogCiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwxOSArMzEsMTUgQEAK
ICNpbmNsdWRlIDxRR3VpQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UU9wZW5HTENvbnRleHQ+CiAj
aW5jbHVkZSA8cXBhL3FwbGF0Zm9ybW5hdGl2ZWludGVyZmFjZS5oPgotI2VsaWYgUExBVEZPUk0o
RUZMKQotI2luY2x1ZGUgPEdML2dsLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPEdML2dsZXh0Lmg+
CiAjaW5jbHVkZSA8R0wvZ2x4Lmg+Ci0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNpbmNsdWRlIDxY
MTEvZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+Ci0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJl
bmRlci5oPgorI2Vsc2UKKyNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+CisjZW5kaWYKIAotbmFt
ZXNwYWNlIFdlYkNvcmUgeworI2luY2x1ZGUgIkdMWENvbmZpZ1NlbGVjdG9yLmgiCiAKLXN0YXRp
YyBsb25nIFgxMU92ZXJyaWRlUmVkaXJlY3QgPSAxTCA8PCA5OworbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGF0aWMgUEZOR0xYQklORFRFWElNQUdFRVhUUFJPQyBwR2xYQmluZFRleEltYWdlRVhU
ID0gMDsKIHN0YXRpYyBQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DIHBHbFhSZWxlYXNlVGV4
SW1hZ2VFWFQgPSAwOwpAQCAtNTIsMTU5ICs0OSw3IEBAIHN0YXRpYyBQRk5HTEdFTkZSQU1FQlVG
RkVSU1BST0MgcEdsR2VuRnJhbWVidWZmZXJzID0gMDsKIHN0YXRpYyBQRk5HTERFTEVURUZSQU1F
QlVGRkVSU1BST0MgcEdsRGVsZXRlRnJhbWVidWZmZXJzID0gMDsKIHN0YXRpYyBQRk5HTEZSQU1F
QlVGRkVSVEVYVFVSRTJEUFJPQyBwR2xGcmFtZWJ1ZmZlclRleHR1cmUyRCA9IDA7CiAKLS8vIFVz
ZWQgZm9yIGhhbmRsaW5nIFhFcnJvci4KLXN0YXRpYyBib29sIHZhbGlkT3BlcmF0aW9uID0gdHJ1
ZTsKLXN0YXRpYyBpbnQgaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IoRGlzcGxheSosIFhFcnJv
ckV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkTWF0Y2gg
fHwgZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkV2luZG93IHx8IGV2ZW50LT5lcnJvcl9jb2RlID09
IEJhZEFsbG9jKSB7Ci0gICAgICAgIHZhbGlkT3BlcmF0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAg
c3dpdGNoIChldmVudC0+ZXJyb3JfY29kZSkgewotICAgICAgICBjYXNlIEJhZE1hdGNoOgotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJCYWRNYXRjaC4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEJhZFdpbmRvdzoKLSAgICAgICAgICAgIExPR19FUlJPUigiQmFkV2luZG93LiIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmFkQWxsb2M6Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIkJhZEFsbG9jLiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biAwOwotfQotCi1zdGF0aWMgaW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICBHTFhfTEVWRUwsIDAs
Ci0gICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAotICAgIEdMWF9SRU5ERVJf
VFlQRSwgICBHTFhfUkdCQV9CSVQsCi0gICAgR0xYX1JFRF9TSVpFLCAgICAgIDEsCi0gICAgR0xY
X0dSRUVOX1NJWkUsICAgIDEsCi0gICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCi0gICAgR0xYX0FM
UEhBX1NJWkUsICAgIDEsCi0gICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCi0gICAgR0xYX1hfVklT
VUFMX1RZUEUsIEdMWF9UUlVFX0NPTE9SLAotICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVlLAot
ICAgIE5vbmUKLX07Ci0KLWNsYXNzIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlciB7
Ci0KLXB1YmxpYzoKLSAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoRGlzcGxh
eSogZGlzcGxheSkKLSAgICAgICAgOiBtX2Rpc3BsYXkoZGlzcGxheSkKLSAgICB7Ci0gICAgICAg
IC8vIFhTeW5jIG11c3QgYmUgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IGN1cnJlbnQgZXJyb3JzIGFy
ZSBoYW5kbGVkIGJ5IHRoZSBvcmlnaW5hbCBoYW5kbGVyLgotICAgICAgICBYU3luYyhtX2Rpc3Bs
YXksIGZhbHNlKTsKLSAgICAgICAgbV9wcmV2aW91c0Vycm9ySGFuZGxlciA9IFhTZXRFcnJvckhh
bmRsZXIoaGFuZGxlWFBpeG1hcENyZWF0aW9uRXJyb3IpOwotICAgIH0KLQotICAgIH5TY29wZWRY
UGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgLy8gUmVzdG9yZSB0
aGUgb3JpZ2luYWwgaGFuZGxlci4KLSAgICAgICAgWFNldEVycm9ySGFuZGxlcihtX3ByZXZpb3Vz
RXJyb3JIYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBib29sIGlzVmFsaWRPcGVyYXRpb24oKSBjb25z
dAotICAgIHsKLSAgICAgICAgdmFsaWRPcGVyYXRpb24gPSB0cnVlOwotICAgICAgICAvLyBYU3lu
YyBpcyBuZWVkZWQgdG8gY2F0Y2ggcG9zc2libGUgZXJyb3JzIGFzIHRoZXkgYXJlIGdlbmVyYXRl
ZCBhc3luY2hyb25vdXNseS4KLSAgICAgICAgWFN5bmMobV9kaXNwbGF5LCBmYWxzZSk7Ci0gICAg
ICAgIHJldHVybiB2YWxpZE9wZXJhdGlvbjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgWEVycm9y
SGFuZGxlciBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyOwotICAgIERpc3BsYXkqIG1fZGlzcGxheTsK
LX07Ci0KLS8vIEZJWE1FOiBUYWtlIFgxMVdpbmRvd1Jlc291cmNlcyBhbmQgR0xYQ29uZmlnU2Vs
ZWN0b3IgaW50byB1c2UuCi1jbGFzcyBPZmZTY3JlZW5Sb290V2luZG93IHsKLXB1YmxpYzoKLSAg
ICBPZmZTY3JlZW5Sb290V2luZG93KCkKLSAgICB7Ci0gICAgICAgICsrbV9yZWZDb3VudDsKLSAg
ICB9Ci0KLSAgICBXaW5kb3cgZ2V0WFdpbmRvdygpCi0gICAgewotICAgICAgICBpZiAoIW1fd2lu
ZG93KSB7Ci0gICAgICAgICAgICBEaXNwbGF5KiBkcHkgPSBkaXNwbGF5KCk7Ci0gICAgICAgICAg
ICBtX3dpbmRvdyA9IFhDcmVhdGVTaW1wbGVXaW5kb3coZHB5LCBYRGVmYXVsdFJvb3RXaW5kb3co
ZHB5KSwgLTEsIC0xLCAxLCAxLCAwLCBCbGFja1BpeGVsKGRweSwgMCksIFdoaXRlUGl4ZWwoZHB5
LCAwKSk7Ci0gICAgICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotICAg
ICAgICAgICAgYXR0cmlidXRlcy5vdmVycmlkZV9yZWRpcmVjdCA9IHRydWU7Ci0gICAgICAgICAg
ICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBYMTFPdmVycmlkZVJlZGly
ZWN0LCAmYXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAvLyBNYXAgd2luZG93IHRvIHRoZSBzY3Jl
ZW4KLSAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dpbmRvdyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gbV93aW5kb3c7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0cnVjdCBE
aXNwbGF5Q29ubmVjdGlvbiB7Ci0gICAgICAgIERpc3BsYXlDb25uZWN0aW9uKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOwotICAgICAgICB9Ci0K
LSAgICAgICAgfkRpc3BsYXlDb25uZWN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgWENs
b3NlRGlzcGxheShtX2Rpc3BsYXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgRGlzcGxheSogZGlz
cGxheSgpIHsgcmV0dXJuIG1fZGlzcGxheTsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIERpc3Bs
YXkqIG1fZGlzcGxheTsKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIERpc3BsYXkqIGRp
c3BsYXkoKQotICAgIHsKLSAgICAgICAgLy8gRGlzcGxheSBjb25uZWN0aW9uIHdpbGwgb25seSBi
ZSBicm9rZW4gYXQgcHJvZ3JhbSBzaHV0ZG93bi4KLSAgICAgICAgc3RhdGljIERpc3BsYXlDb25u
ZWN0aW9uIGRpc3BsYXlDb25uZWN0aW9uOwotICAgICAgICByZXR1cm4gZGlzcGxheUNvbm5lY3Rp
b24uZGlzcGxheSgpOwotICAgIH0KLQotICAgIH5PZmZTY3JlZW5Sb290V2luZG93KCkKLSAgICB7
Ci0gICAgICAgIGlmICgtLW1fcmVmQ291bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgICAgICBYVW5tYXBXaW5kb3coZGlzcGxheSgpLCBt
X3dpbmRvdyk7Ci0gICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5KCksIG1fd2luZG93
KTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0
YXRpYyBib29sIGlzTWVzYUdMWCgpCi0gICAgewotICAgICAgICBzdGF0aWMgYm9vbCBpc01lc2Eg
PSAhIXN0cnN0cihnbFhHZXRDbGllbnRTdHJpbmcoZGlzcGxheSgpLCBHTFhfVkVORE9SKSwgIk1l
c2EiKTsKLSAgICAgICAgcmV0dXJuIGlzTWVzYTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3Rh
dGljIGludCBtX3JlZkNvdW50OwotICAgIHN0YXRpYyBXaW5kb3cgbV93aW5kb3c7Ci19OwotCi1p
bnQgT2ZmU2NyZWVuUm9vdFdpbmRvdzo6bV9yZWZDb3VudCA9IDA7Ci1XaW5kb3cgT2ZmU2NyZWVu
Um9vdFdpbmRvdzo6bV93aW5kb3cgPSAwOwotCi1zdGF0aWMgY29uc3QgaW50IGdseFNwZWNbXSA9
IHsKLSAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBpcyBhIHNldCBrZXkgdmFsdWUgcGFpcnMgc3Rv
cmVkIGluIGEgc2ltcGxlIGFycmF5LgotICAgIEdMWF9MRVZFTCwgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCi0gICAgR0xYX0RSQVdBQkxFX1RZUEUsICAgICAgICAgICAgICAgICAgR0xYX1BJ
WE1BUF9CSVQgfCBHTFhfV0lORE9XX0JJVCwKLSAgICBHTFhfQklORF9UT19URVhUVVJFX1RBUkdF
VFNfRVhULCAgICBHTFhfVEVYVFVSRV8yRF9CSVRfRVhULAotICAgIEdMWF9CSU5EX1RPX1RFWFRV
UkVfUkdCQV9FWFQsICAgICAgIFRSVUUsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IGludCBn
bHhBdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsKICAgICBH
TFhfVEVYVFVSRV9GT1JNQVRfRVhULAogICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JBX0VYVCwK
ICAgICBHTFhfVEVYVFVSRV9UQVJHRVRfRVhULApAQCAtMjEyLDE5ICs1NywyMSBAQCBzdGF0aWMg
Y29uc3QgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsKICAgICAwCiB9OwogCitzdGF0aWMgYm9vbCBp
c01lc2FHTFgoKQoreworICAgIHN0YXRpYyBib29sIGlzTWVzYSA9ICEhc3Ryc3RyKGdsWEdldENs
aWVudFN0cmluZyhYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKSwgR0xYX1ZFTkRPUiksICJNZXNh
Iik7CisgICAgcmV0dXJuIGlzTWVzYTsKK30KKwogc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZh
dGUgewogICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoY29uc3QgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBzaGFyZUNvbnRleHQgPSAwKQotICAgICAgICA6IG1fb2ZmU2NyZWVuV2luZG93KGFk
b3B0UHRyKG5ldyBPZmZTY3JlZW5Sb290V2luZG93KCkpKQotICAgICAgICAsIG1feFBpeG1hcCgw
KQorICAgICAgICA6IG1feFBpeG1hcCgwKQogICAgICAgICAsIG1fZ2x4UGl4bWFwKDApCiAgICAg
ICAgICwgbV9zdXJmYWNlKDApCiAgICAgICAgICwgbV9nbHhTdXJmYWNlKDApCiAgICAgICAgICwg
bV9nbENvbnRleHQoMCkKICAgICAgICAgLCBtX2RldGFjaGVkQ29udGV4dCgwKQogICAgICAgICAs
IG1fZGV0YWNoZWRTdXJmYWNlKDApCi0gICAgICAgICwgbV9mYkNvbmZpZygwKQotICAgICAgICAs
IG1fdGV4dHVyZUlzWUludmVydGVkKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2Up
CiAgICAgICAgICwgbV9pc1JlY2VpdmVyKGZhbHNlKQogICAgIHsKICAgICAgICAgR0xYQ29udGV4
dCBzaGFyZUNvbnRleHRPYmplY3QgPSAwOwpAQCAtMjQwLDE2ICs4NywxNSBAQCBzdHJ1Y3QgR3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZSB7CiAgICAgICAgIFVOVVNFRF9QQVJBTShzaGFyZUNvbnRleHQp
OwogI2VuZGlmCiAKLSAgICAgICAgaW50IG51bVJldHVybmVkOwotICAgICAgICBHTFhGQkNvbmZp
ZyogZmJDb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoZGlzcGxheSgpLCBEZWZhdWx0U2NyZWVu
KGRpc3BsYXkoKSksIGF0dHJpYnV0ZXMsICZudW1SZXR1cm5lZCk7CisgICAgICAgIG1fY29uZmln
U2VsZWN0b3IgPSBhZG9wdFB0cihuZXcgR0xYQ29uZmlnU2VsZWN0b3IoKSk7CiAKLSAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgd2UgY2hvb3NlIGEgY29uZmlndXJhdGlvbiB0aGF0IHN1cHBvcnRz
IGFuIGFscGhhIG1hc2suCi0gICAgICAgIG1fZmJDb25maWcgPSBmaW5kRkJDb25maWdXaXRoQWxw
aGEoZmJDb25maWdzLCBudW1SZXR1cm5lZCk7Ci0KLSAgICAgICAgWEZyZWUoZmJDb25maWdzKTsK
KyAgICAgICAgaWYgKCFtX2NvbmZpZ1NlbGVjdG9yLT5zdXJmYWNlQ29udGV4dENvbmZpZygpKSB7
CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
ICAgICAgICAgLy8gQ3JlYXRlIGEgR0xYIGNvbnRleHQgZm9yIE9wZW5HTCByZW5kZXJpbmcKLSAg
ICAgICAgbV9nbENvbnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KGRpc3BsYXkoKSwgbV9mYkNv
bmZpZywgR0xYX1JHQkFfVFlQRSwgc2hhcmVDb250ZXh0T2JqZWN0LCB0cnVlKTsKKyAgICAgICAg
bV9nbENvbnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KGRpc3BsYXkoKSwgbV9jb25maWdTZWxl
Y3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgR0xYX1JHQkFfVFlQRSwgc2hhcmVDb250ZXh0
T2JqZWN0LCB0cnVlKTsKICAgICB9CiAKICAgICBHcmFwaGljc1N1cmZhY2VQcml2YXRlKHVpbnQz
Ml90IHdpbklkKQpAQCAtMjYwLDExICsxMDYsMTAgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVBy
aXZhdGUgewogICAgICAgICAsIG1fZ2xDb250ZXh0KDApCiAgICAgICAgICwgbV9kZXRhY2hlZENv
bnRleHQoMCkKICAgICAgICAgLCBtX2RldGFjaGVkU3VyZmFjZSgwKQotICAgICAgICAsIG1fZmJD
b25maWcoMCkKLSAgICAgICAgLCBtX3RleHR1cmVJc1lJbnZlcnRlZChmYWxzZSkKLSAgICAgICAg
LCBtX2hhc0FscGhhKGZhbHNlKQogICAgICAgICAsIG1faXNSZWNlaXZlcih0cnVlKQotICAgIHsg
fQorICAgIHsKKyAgICAgICAgbV9jb25maWdTZWxlY3RvciA9IGFkb3B0UHRyKG5ldyBHTFhDb25m
aWdTZWxlY3RvcigpKTsKKyAgICB9CiAKICAgICB+R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpCiAg
ICAgewpAQCAtMjczLDM1ICsxMTgsMzIgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUg
ewogCiAgICAgdWludDMyX3QgY3JlYXRlU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplKQogICAg
IHsKLSAgICAgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJD
b25maWcoZGlzcGxheSgpLCBtX2ZiQ29uZmlnKTsKLSAgICAgICAgaWYgKCF2aXN1YWxJbmZvKQor
ICAgICAgICBpZiAoIWRpc3BsYXkoKSB8fCAhbV9jb25maWdTZWxlY3RvcikKICAgICAgICAgICAg
IHJldHVybiAwOwogCi0gICAgICAgIENvbG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAoZGlz
cGxheSgpLCBtX29mZlNjcmVlbldpbmRvdy0+Z2V0WFdpbmRvdygpLCB2aXN1YWxJbmZvLT52aXN1
YWwsIEFsbG9jTm9uZSk7Ci0KLSAgICAgICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMgYTsKLSAgICAg
ICAgYS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5KCksIDApOwotICAgICAg
ICBhLmJvcmRlcl9waXhlbCA9IEJsYWNrUGl4ZWwoZGlzcGxheSgpLCAwKTsKLSAgICAgICAgYS5j
b2xvcm1hcCA9IGNtYXA7Ci0gICAgICAgIG1fc3VyZmFjZSA9IFhDcmVhdGVXaW5kb3coZGlzcGxh
eSgpLCBtX29mZlNjcmVlbldpbmRvdy0+Z2V0WFdpbmRvdygpLCAwLCAwLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCksCi0gICAgICAgICAgICAwLCB2aXN1YWxJbmZvLT5kZXB0aCwgSW5wdXRP
dXRwdXQsIHZpc3VhbEluZm8tPnZpc3VhbCwKLSAgICAgICAgICAgIENXQmFja1BpeGVsIHwgQ1dC
b3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhKTsKLSAgICAgICAgWFNldFdpbmRvd0JhY2tncm91
bmRQaXhtYXAoZGlzcGxheSgpLCBtX3N1cmZhY2UsIDApOwotICAgICAgICBYQ29tcG9zaXRlUmVk
aXJlY3RXaW5kb3coZGlzcGxheSgpLCBtX3N1cmZhY2UsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFs
KTsKLSAgICAgICAgbV9nbHhTdXJmYWNlID0gZ2xYQ3JlYXRlV2luZG93KGRpc3BsYXkoKSwgbV9m
YkNvbmZpZywgbV9zdXJmYWNlLCAwKTsKLSAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0KLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSBYUmVuZGVyIEV4dGVuc2lvbiBpcyBhdmFpbGFibGUuCi0g
ICAgICAgIGludCBldmVudEJhc2VwLCBlcnJvckJhc2VwOwotICAgICAgICBpZiAoIVhSZW5kZXJR
dWVyeUV4dGVuc2lvbihkaXNwbGF5KCksICZldmVudEJhc2VwLCAmZXJyb3JCYXNlcCkpCisgICAg
ICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gdmlzSW5mbyhtX2NvbmZpZ1NlbGVjdG9yLT52aXN1
YWxJbmZvKCkpOworCisgICAgICAgIGlmICghdmlzSW5mby5nZXQoKSkgeworICAgICAgICAgICAg
Y2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKLSAgICAgICAgWE1h
cFdpbmRvdyhkaXNwbGF5KCksIG1fc3VyZmFjZSk7CisgICAgICAgIFgxMUhlbHBlcjo6Y3JlYXRl
T2ZmU2NyZWVuV2luZG93KCZtX3N1cmZhY2UsICp2aXNJbmZvLmdldCgpLCBzaXplKTsKKworICAg
ICAgICBpZiAoIW1fc3VyZmFjZSkgeworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgbV9nbHhTdXJmYWNlID0gZ2xYQ3JlYXRl
V2luZG93KGRpc3BsYXkoKSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNvbnRleHRDb25maWco
KSwgbV9zdXJmYWNlLCAwKTsKICAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKICAgICB9CiAKICAg
ICB2b2lkIGNyZWF0ZVBpeG1hcCh1aW50MzJfdCB3aW5JZCkKICAgICB7CisgICAgICAgIGlmICgh
bV9jb25maWdTZWxlY3RvcikKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBYV2luZG93
QXR0cmlidXRlcyBhdHRyOwogICAgICAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1dGVzKGRpc3Bs
YXkoKSwgd2luSWQsICZhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMCwzNSArMTUy
LDI1IEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2YXRlIHsKICAgICAgICAgaWYgKGF0dHIu
bWFwX3N0YXRlID09IElzVW5tYXBwZWQgfHwgYXR0ci5tYXBfc3RhdGUgPT0gSXNVbnZpZXdhYmxl
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVy
cm9ySGFuZGxlciBoYW5kbGVyKGRpc3BsYXkoKSk7CisgICAgICAgIFNjb3BlZFhQaXhtYXBDcmVh
dGlvbkVycm9ySGFuZGxlciBoYW5kbGVyOwogICAgICAgICBtX3NpemUgPSBJbnRTaXplKGF0dHIu
d2lkdGgsIGF0dHIuaGVpZ2h0KTsKIAogICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0
ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoZGlzcGxheSgpLCBhdHRyLnZpc3VhbCk7Ci0gICAg
ICAgIG1faGFzQWxwaGEgPSAoZm9ybWF0LT50eXBlID09IFBpY3RUeXBlRGlyZWN0ICYmIGZvcm1h
dC0+ZGlyZWN0LmFscGhhTWFzayk7Ci0KLSAgICAgICAgaW50IG51bWJlck9mQ29uZmlnczsKLSAg
ICAgICAgR0xYRkJDb25maWcqIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5KCks
IFhEZWZhdWx0U2NyZWVuKGRpc3BsYXkoKSksIGdseFNwZWMsICZudW1iZXJPZkNvbmZpZ3MpOwot
Ci0gICAgICAgIC8vIElmIG9yaWdpbiB3aW5kb3cgaGFzIGFscGhhIHRoZW4gZmluZCBjb25maWcg
d2l0aCBhbHBoYS4KLSAgICAgICAgR0xYRkJDb25maWcmIGNvbmZpZyA9IG1faGFzQWxwaGEgPyBm
aW5kRkJDb25maWdXaXRoQWxwaGEoY29uZmlncywgbnVtYmVyT2ZDb25maWdzKSA6IGNvbmZpZ3Nb
MF07Ci0KKyAgICAgICAgYm9vbCBoYXNBbHBoYSA9IChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVE
aXJlY3QgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrKTsKICAgICAgICAgbV94UGl4bWFwID0g
WENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAoZGlzcGxheSgpLCB3aW5JZCk7Ci0gICAgICAgIG1f
Z2x4UGl4bWFwID0gZ2xYQ3JlYXRlUGl4bWFwKGRpc3BsYXkoKSwgY29uZmlnLCBtX3hQaXhtYXAs
IGdseEF0dHJpYnV0ZXMpOworICAgICAgICBnbHhBdHRyaWJ1dGVzWzFdID0gKGZvcm1hdC0+ZGVw
dGggPT0gMzIgfHwgaGFzQWxwaGEpID8gR0xYX1RFWFRVUkVfRk9STUFUX1JHQkFfRVhUIDogR0xY
X1RFWFRVUkVfRk9STUFUX1JHQl9FWFQ7CisgICAgICAgIG1fZ2x4UGl4bWFwID0gZ2xYQ3JlYXRl
UGl4bWFwKGRpc3BsYXkoKSwgbV9jb25maWdTZWxlY3Rvci0+c3VyZmFjZUNsaWVudENvbmZpZyhm
b3JtYXQtPmRlcHRoLCBYVmlzdWFsSURGcm9tVmlzdWFsKGF0dHIudmlzdWFsKSksIG1feFBpeG1h
cCwgZ2x4QXR0cmlidXRlcyk7CiAKICAgICAgICAgaWYgKCFoYW5kbGVyLmlzVmFsaWRPcGVyYXRp
b24oKSkKICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
dWludCBpbnZlcnRlZCA9IDA7CiAgICAgICAgICAgICBnbFhRdWVyeURyYXdhYmxlKGRpc3BsYXko
KSwgbV9nbHhQaXhtYXAsIEdMWF9ZX0lOVkVSVEVEX0VYVCwgJmludmVydGVkKTsKLSAgICAgICAg
ICAgIG1fdGV4dHVyZUlzWUludmVydGVkID0gISFpbnZlcnRlZDsKLSAgICAgICAgfQotCi0gICAg
ICAgIFhGcmVlKGNvbmZpZ3MpOwotICAgIH0KKyAgICAgICAgICAgIG1fZmxhZ3MgPSAhIWludmVy
dGVkID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZSA6IDA7CiAKLSAgICBib29s
IHRleHR1cmVJc1lJbnZlcnRlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV90ZXh0dXJlSXNZ
SW52ZXJ0ZWQ7CisgICAgICAgICAgICBpZiAoaGFzQWxwaGEpCisgICAgICAgICAgICAgICAgbV9m
bGFncyB8PSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kOworICAgICAgICB9CiAgICAgfQog
CiAgICAgdm9pZCBtYWtlQ3VycmVudCgpCkBAIC00MDYsNyArMjM4LDcgQEAgc3RydWN0IEdyYXBo
aWNzU3VyZmFjZVByaXZhdGUgewogICAgICAgICBkb25lQ3VycmVudCgpOwogICAgIH0KIAotICAg
IERpc3BsYXkqIGRpc3BsYXkoKSBjb25zdCB7IHJldHVybiBPZmZTY3JlZW5Sb290V2luZG93Ojpk
aXNwbGF5KCk7IH0KKyAgICBEaXNwbGF5KiBkaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gWDExSGVs
cGVyOjpuYXRpdmVEaXNwbGF5KCk7IH0KIAogICAgIEdMWFBpeG1hcCBnbHhQaXhtYXAoKSBjb25z
dAogICAgIHsKQEAgLTQyNiwyNSArMjU4LDEwIEBAIHN0cnVjdCBHcmFwaGljc1N1cmZhY2VQcml2
YXRlIHsKICAgICB9CiAKICAgICBib29sIGlzUmVjZWl2ZXIoKSBjb25zdCB7IHJldHVybiBtX2lz
UmVjZWl2ZXI7IH0KLXByaXZhdGU6Ci0gICAgR0xYRkJDb25maWcmIGZpbmRGQkNvbmZpZ1dpdGhB
bHBoYShHTFhGQkNvbmZpZyogZmJDb25maWdzLCBpbnQgbnVtYmVyT2ZDb25maWdzKQotICAgIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbmZpZ3M7ICsraSkgewotICAg
ICAgICAgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBnbFhHZXRWaXN1YWxGcm9tRkJDb25m
aWcoZGlzcGxheSgpLCBmYkNvbmZpZ3NbaV0pOwotICAgICAgICAgICAgaWYgKCF2aXN1YWxJbmZv
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBYUmVuZGVyUGljdEZv
cm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoZGlzcGxheSgpLCB2aXN1YWxJ
bmZvLT52aXN1YWwpOwotICAgICAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7CiAKLSAgICAgICAg
ICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNrID4gMCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmJDb25maWdzW2ldOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0
dXJuIDFzdCBjb25maWcgYXMgYSBmYWxsYmFjayB3aXRoIG5vIGFscGhhIHN1cHBvcnQuCi0gICAg
ICAgIHJldHVybiBmYkNvbmZpZ3NbMF07Ci0gICAgfQorICAgIFRleHR1cmVNYXBwZXJHTDo6Rmxh
Z3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAKK3ByaXZhdGU6CiAgICAgdm9p
ZCBjbGVhcigpCiAgICAgewogICAgICAgICBpZiAobV9nbHhQaXhtYXApIHsKQEAgLTQ2NywyMSAr
Mjg0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBnbFhEZXN0cm95Q29udGV4dChkaXNwbGF5
KCksIG1fZ2xDb250ZXh0KTsKICAgICAgICAgICAgIG1fZ2xDb250ZXh0ID0gMDsKICAgICAgICAg
fQorCisgICAgICAgIGlmIChtX2NvbmZpZ1NlbGVjdG9yKQorICAgICAgICAgICAgbV9jb25maWdT
ZWxlY3RvciA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgT3duUHRyPE9mZlNjcmVlblJvb3RXaW5k
b3c+IG1fb2ZmU2NyZWVuV2luZG93OwogICAgIEludFNpemUgbV9zaXplOwogICAgIFBpeG1hcCBt
X3hQaXhtYXA7CiAgICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOwotICAgIFdpbmRvdyBtX3N1cmZh
Y2U7CisgICAgdWludDMyX3QgbV9zdXJmYWNlOwogICAgIFdpbmRvdyBtX2dseFN1cmZhY2U7CiAg
ICAgR0xYQ29udGV4dCBtX2dsQ29udGV4dDsKICAgICBHTFhDb250ZXh0IG1fZGV0YWNoZWRDb250
ZXh0OwogICAgIEdMWERyYXdhYmxlIG1fZGV0YWNoZWRTdXJmYWNlOwotICAgIEdMWEZCQ29uZmln
IG1fZmJDb25maWc7Ci0gICAgYm9vbCBtX3RleHR1cmVJc1lJbnZlcnRlZDsKLSAgICBib29sIG1f
aGFzQWxwaGE7CisgICAgT3duUHRyPEdMWENvbmZpZ1NlbGVjdG9yPiBtX2NvbmZpZ1NlbGVjdG9y
OwogICAgIGJvb2wgbV9pc1JlY2VpdmVyOworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgbV9m
bGFnczsKIH07CiAKIHN0YXRpYyBib29sIHJlc29sdmVHTE1ldGhvZHMoKQpAQCAtNTQ1LDEzICsz
NjMsMTAgQEAgdm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwKICAgICBpZiAoIXRleHR1cmUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBtX3ByaXZh
dGUtPnRleHR1cmVJc1lJbnZlcnRlZCgpID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4
dHVyZSA6IDA7Ci0gICAgZmxhZ3MgfD0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZDsKLQog
ICAgIEZsb2F0UmVjdCByZWN0T25Db250ZW50cyhGbG9hdFBvaW50Ojp6ZXJvKCksIHNpemUpOwog
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtOwog
ICAgIGFkanVzdGVkVHJhbnNmb3JtLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0
VG9SZWN0KHJlY3RPbkNvbnRlbnRzLCB0YXJnZXRSZWN0KSk7Ci0gICAgc3RhdGljX2Nhc3Q8VGV4
dHVyZU1hcHBlckdMKj4odGV4dHVyZU1hcHBlciktPmRyYXdUZXh0dXJlKHRleHR1cmUsIGZsYWdz
LCBzaXplLCByZWN0T25Db250ZW50cywgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2sp
OworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpLT5kcmF3
VGV4dHVyZSh0ZXh0dXJlLCBtX3ByaXZhdGUtPmZsYWdzKCksIHNpemUsIHJlY3RPbkNvbnRlbnRz
LCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7CiB9CiAKIHVpbnQzMl90IEdyYXBo
aWNzU3VyZmFjZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcigpIGNvbnN0CkBAIC01NjIsNyArMzc3LDcg
QEAgdWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUZyb250QnVmZmVyKCkgY29uc3QK
IHVpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Td2FwQnVmZmVycygpCiB7CiAgICAg
aWYgKG1fcHJpdmF0ZS0+aXNSZWNlaXZlcigpKSB7Ci0gICAgICAgIGlmIChPZmZTY3JlZW5Sb290
V2luZG93Ojppc01lc2FHTFgoKSAmJiBwbGF0Zm9ybUdldFRleHR1cmVJRCgpKSB7CisgICAgICAg
IGlmIChpc01lc2FHTFgoKSAmJiBwbGF0Zm9ybUdldFRleHR1cmVJRCgpKSB7CiAgICAgICAgICAg
ICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHBsYXRmb3JtR2V0VGV4dHVyZUlEKCkpOwog
ICAgICAgICAgICAgLy8gTWVzYSBkb2Vzbid0IHJlLWJpbmQgdGV4dHVyZSB0byB0aGUgZnJvbnQg
YnVmZmVyIG9uIGdsWFN3YXBCdWZlcgogICAgICAgICAgICAgLy8gTWFudWFsbHkgcmVsZWFzZSBw
cmV2aW91cyBsb2NrIGFuZCByZWJpbmQgdGV4dHVyZSB0byBzdXJmYWNlIHRvIGdldCBmcmFtZSB1
cGRhdGUuCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L1gxMUhlbHBlci5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMTAwYmIyZQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmNwcApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlgxMUhlbHBlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzZWQgZm9yIGhhbmRsaW5nIFhFcnJvci4K
K3N0YXRpYyBib29sIHZhbGlkT3BlcmF0aW9uID0gdHJ1ZTsKK3N0YXRpYyBpbnQgaGFuZGxlWFBp
eG1hcENyZWF0aW9uRXJyb3IoRGlzcGxheSosIFhFcnJvckV2ZW50KiBldmVudCkKK3sKKyAgICBp
ZiAoZXZlbnQtPmVycm9yX2NvZGUgPT0gQmFkTWF0Y2ggfHwgZXZlbnQtPmVycm9yX2NvZGUgPT0g
QmFkV2luZG93IHx8IGV2ZW50LT5lcnJvcl9jb2RlID09IEJhZEFsbG9jKSB7CisgICAgICAgIHZh
bGlkT3BlcmF0aW9uID0gZmFsc2U7CisKKyAgICAgICAgc3dpdGNoIChldmVudC0+ZXJyb3JfY29k
ZSkgeworICAgICAgICBjYXNlIEJhZE1hdGNoOgorICAgICAgICAgICAgTE9HX0VSUk9SKCJCYWRN
YXRjaC4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJhZFdpbmRvdzoKKyAg
ICAgICAgICAgIExPR19FUlJPUigiQmFkV2luZG93LiIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQmFkQWxsb2M6CisgICAgICAgICAgICBMT0dfRVJST1IoIkJhZEFsbG9jLiIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdHJ1Y3QgRGlzcGxh
eUNvbm5lY3Rpb24geworICAgIERpc3BsYXlDb25uZWN0aW9uKCkKKyAgICB7CisgICAgICAgIG1f
ZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKworICAgICAgICBpZiAoIW1fZGlzcGxheSkKKyAg
ICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG1ha2UgY29ubmVjdGlvbiB3aXRoIFgiKTsK
KyAgICB9CisKKyAgICB+RGlzcGxheUNvbm5lY3Rpb24oKQorICAgIHsKKyAgICAgICAgWENsb3Nl
RGlzcGxheShtX2Rpc3BsYXkpOworICAgIH0KKworICAgIERpc3BsYXkqIGRpc3BsYXkoKSB7IHJl
dHVybiBtX2Rpc3BsYXk7IH0KK3ByaXZhdGU6CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworfTsK
Kworc3RydWN0IE9mZlNjcmVlblJvb3RXaW5kb3cgeworCisgICAgT2ZmU2NyZWVuUm9vdFdpbmRv
dygpCisgICAgeworICAgICAgICBtX3dpbmRvdyA9IDA7CisgICAgICAgIERpc3BsYXkqIGRweSA9
IFgxMUhlbHBlcjo6bmF0aXZlRGlzcGxheSgpOworICAgICAgICBpZiAoIWRweSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwor
ICAgICAgICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgbV93
aW5kb3cgPSBYQ3JlYXRlU2ltcGxlV2luZG93KGRweSwgWERlZmF1bHRSb290V2luZG93KGRweSks
IC0xLCAtMSwgMSwgMSwgMCwgQmxhY2tQaXhlbChkcHksIDApLCBXaGl0ZVBpeGVsKGRweSwgMCkp
OworICAgICAgICAvLyBGcm9tIGh0dHA6Ly90cm9uY2hlLmNvbS9ndWkveC94bGliL3dpbmRvdy9h
dHRyaWJ1dGVzLworICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93
LCBDV092ZXJyaWRlUmVkaXJlY3QsICZhdHRyaWJ1dGVzKTsKKyAgICAgICAgWE1hcFdpbmRvdyhk
cHksIG1fd2luZG93KTsKKworICAgICAgICBpZiAoIW1fd2luZG93KQorICAgICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiByb290IHdpbmRvdy4iKTsKKyAgICB9
CisKKyAgICB+T2ZmU2NyZWVuUm9vdFdpbmRvdygpCisgICAgeworICAgICAgICBpZiAoIVgxMUhl
bHBlcjo6bmF0aXZlRGlzcGxheSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChtX3dpbmRvdykgeworICAgICAgICAgICAgWFVubWFwV2luZG93KFgxMUhlbHBlcjo6bmF0aXZl
RGlzcGxheSgpLCBtX3dpbmRvdyk7CisgICAgICAgICAgICBYRGVzdHJveVdpbmRvdyhYMTFIZWxw
ZXI6Om5hdGl2ZURpc3BsYXkoKSwgbV93aW5kb3cpOworICAgICAgICAgICAgbV93aW5kb3cgPSAw
OworICAgICAgICB9CisgICAgfQorCisgICAgV2luZG93IHJvb3RXaW5kb3coKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fd2luZG93OworICAgIH0KKworcHJpdmF0ZToKKyAgICBXaW5kb3cgbV93
aW5kb3c7Cit9OworCitTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXI6OlNjb3BlZFhQ
aXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpCit7CisgICAgLy8gWFN5bmMgbXVzdCBiZSBjYWxs
ZWQgdG8gZW5zdXJlIHRoYXQgY3VycmVudCBlcnJvcnMgYXJlIGhhbmRsZWQgYnkgdGhlIG9yaWdp
bmFsIGhhbmRsZXIuCisgICAgWFN5bmMoWDExSGVscGVyOjpuYXRpdmVEaXNwbGF5KCksIGZhbHNl
KTsKKyAgICBtX3ByZXZpb3VzRXJyb3JIYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcihoYW5kbGVY
UGl4bWFwQ3JlYXRpb25FcnJvcik7Cit9CisKK1Njb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFu
ZGxlcjo6flNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxlcigpCit7CisgICAgLy8gUmVz
dG9yZSB0aGUgb3JpZ2luYWwgaGFuZGxlci4KKyAgICBYU2V0RXJyb3JIYW5kbGVyKG1fcHJldmlv
dXNFcnJvckhhbmRsZXIpOworfQorCitib29sIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFu
ZGxlcjo6aXNWYWxpZE9wZXJhdGlvbigpIGNvbnN0Cit7CisgICAgdmFsaWRPcGVyYXRpb24gPSB0
cnVlOworICAgIC8vIFhTeW5jIGlzIG5lZWRlZCB0byBjYXRjaCBwb3NzaWJsZSBlcnJvcnMgYXMg
dGhleSBhcmUgZ2VuZXJhdGVkIGFzeW5jaHJvbm91c2x5LgorICAgIFhTeW5jKFgxMUhlbHBlcjo6
bmF0aXZlRGlzcGxheSgpLCBmYWxzZSk7CisgICAgcmV0dXJuIHZhbGlkT3BlcmF0aW9uOworfQor
Cit2b2lkIFgxMUhlbHBlcjo6cmVzaXplV2luZG93KGNvbnN0IEludFJlY3QmIG5ld1JlY3QsIGNv
bnN0IHVpbnQzMl90IHdpbmRvd0lkKQoreworICAgIFhSZXNpemVXaW5kb3cobmF0aXZlRGlzcGxh
eSgpLCB3aW5kb3dJZCwgbmV3UmVjdC53aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKKyAgICBY
Rmx1c2gobmF0aXZlRGlzcGxheSgpKTsKK30KKwordm9pZCBYMTFIZWxwZXI6OmNyZWF0ZU9mZlNj
cmVlbldpbmRvdyh1aW50MzJfdCogaGFuZGxlSWQsIGNvbnN0IFhWaXN1YWxJbmZvJiB2aXNJbmZv
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAg
IERpc3BsYXkqIGRpc3BsYXkgPSBuYXRpdmVEaXNwbGF5KCk7CisgICAgaWYgKCFkaXNwbGF5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXZpc0luZm8udmlzdWFsKSB7CisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbC4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFdpbmRvdyB4V2luZG93ID0gb2Zmc2NyZWVuUm9vdFdpbmRvdygpOwor
ICAgIGlmICgheFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ29sb3JtYXAgY21hcCA9
IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2luZG93LCB2aXNJbmZvLnZpc3VhbCwgQWxsb2NO
b25lKTsKKyAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7CisgICAgYXR0cmlidXRl
LmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOworICAgIGF0dHJpYnV0
ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOworICAgIGF0dHJpYnV0ZS5j
b2xvcm1hcCA9IGNtYXA7CisgICAgYXR0cmlidXRlLmV2ZW50X21hc2sgPSBSZXNpemVSZWRpcmVj
dE1hc2s7CisgICAgdWludDMyX3QgdGVtcEhhbmRsZUlkOworICAgIHRlbXBIYW5kbGVJZCA9IFhD
cmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpLCAwLCB2aXNJbmZvLmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzSW5mby52aXN1YWwsIENX
QmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOworCisg
ICAgaWYgKCF0ZW1wSGFuZGxlSWQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIG9mZnNjcmVlbiB3aW5kb3cuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBY
U2V0V2luZG93QmFja2dyb3VuZFBpeG1hcChkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIDApOworICAg
IFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIENvbXBvc2l0
ZVJlZGlyZWN0TWFudWFsKTsKKyAgICBYTWFwV2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJZCk7
CisgICAgKmhhbmRsZUlkID0gdGVtcEhhbmRsZUlkOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
aGFuZGxlSWQpOworICAgIFVOVVNFRF9QQVJBTSh2aXNJbmZvKTsKKyAgICBVTlVTRURfUEFSQU0o
c2l6ZSk7CisjZW5kaWYKK30KKworI2lmIFVTRShFR0wpCit2b2lkIFgxMUhlbHBlcjo6Y3JlYXRl
T2ZmU2NyZWVuV2luZG93KHVpbnQzMl90KiBoYW5kbGVJZCwgY29uc3QgRUdMaW50IGlkLCBjb25z
dCBJbnRTaXplJiBzaXplKQoreworICAgIFZpc3VhbElEIHZpc3VhbElkID0gc3RhdGljX2Nhc3Q8
VmlzdWFsSUQ+KGlkKTsKKworICAgIGlmICghdmlzdWFsSWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEVHTCBoYXMgc3VnZ2VzdGVkIGEgdmlzdWFsIGlkLCBzbyBnZXQgdGhlIHJlc3Qgb2Yg
dGhlIHZpc3VhbCBpbmZvIGZvciB0aGF0IGlkLgorICAgIFhWaXN1YWxJbmZvIHZpc3VhbEluZm9U
ZW1wbGF0ZTsKKyAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwgc2l6ZW9mKFhWaXN1
YWxJbmZvKSk7CisgICAgdmlzdWFsSW5mb1RlbXBsYXRlLnZpc3VhbGlkID0gdmlzdWFsSWQ7Cisg
ICAgaW50IG1hdGNoaW5nQ291bnQgPSAwOworICAgIE93blB0clgxMTxYVmlzdWFsSW5mbz4gbWF0
Y2hpbmdWaXN1YWxzKFhHZXRWaXN1YWxJbmZvKG5hdGl2ZURpc3BsYXkoKSwgVmlzdWFsSURNYXNr
LCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCkpOworICAgIFhWaXN1YWxJbmZv
KiBmb3VuZFZpc3VhbCA9IDA7CisKKyAgICBpZiAobWF0Y2hpbmdWaXN1YWxzKSB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpPCBtYXRjaGluZ0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIFhW
aXN1YWxJbmZvKiB0ZW1wID0gJm1hdGNoaW5nVmlzdWFsc1tpXTsKKworICAgICAgICAgICAgaWYg
KGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKSB7CisgICAgICAgICAgICAgICAgWFJlbmRl
clBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG5hdGl2ZURpc3Bs
YXkoKSwgdGVtcC0+dmlzdWFsKTsKKyAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1h
dC0+ZGlyZWN0LmFscGhhTWFzayA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRWaXN1
YWwgPSB0ZW1wOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZW1wLT5kZXB0aCA9PSAzMikgewor
ICAgICAgICAgICAgICAgIGZvdW5kVmlzdWFsID0gdGVtcDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb3VuZFZpc3VhbCkK
KyAgICAgICAgICAgIGNyZWF0ZU9mZlNjcmVlbldpbmRvdyhoYW5kbGVJZCwgKmZvdW5kVmlzdWFs
LCBzaXplKTsKKyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBYMTFIZWxwZXI6OmRlc3Ryb3lXaW5k
b3coY29uc3QgdWludDMyX3Qgd2luZG93SWQpCit7CisgICAgaWYgKCF3aW5kb3dJZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRGlzcGxheSogZGlzcGxheSA9IG5hdGl2ZURpc3BsYXkoKTsKKyAg
ICBpZiAoIWRpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIFhEZXN0cm95V2luZG93KGRp
c3BsYXksIHdpbmRvd0lkKTsKK30KKworYm9vbCBYMTFIZWxwZXI6OmlzWFJlbmRlckV4dGVuc2lv
blN1cHBvcnRlZCgpCit7CisgICAgc3RhdGljIGJvb2wgcXVlcnlEb25lID0gZmFsc2U7CisgICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uID0gZmFsc2U7CisKKyAgICBpZiAo
IXF1ZXJ5RG9uZSkgeworICAgICAgICBxdWVyeURvbmUgPSB0cnVlOworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorICAgICAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbmF0aXZlRGlzcGxheSgpOwor
CisgICAgICAgIGlmIChkaXNwbGF5KSB7CisgICAgICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJy
b3JCYXNlcDsKKyAgICAgICAgICAgIHN1cHBvcnRzWFJlbmRlckV4dGVuc2lvbiA9IFhSZW5kZXJR
dWVyeUV4dGVuc2lvbihkaXNwbGF5LCAmZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApOworICAgICAg
ICB9CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9u
OworfQorCitEaXNwbGF5KiBYMTFIZWxwZXI6Om5hdGl2ZURpc3BsYXkoKQoreworICAgIC8vIERp
c3BsYXkgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgYnJva2VuIGF0IHByb2dyYW0gc2h1dGRvd24u
CisgICAgc3RhdGljIERpc3BsYXlDb25uZWN0aW9uIGRpc3BsYXlDb25uZWN0aW9uOworICAgIHJl
dHVybiBkaXNwbGF5Q29ubmVjdGlvbi5kaXNwbGF5KCk7Cit9CisKK1dpbmRvdyBYMTFIZWxwZXI6
Om9mZnNjcmVlblJvb3RXaW5kb3coKQoreworICAgIHN0YXRpYyBPZmZTY3JlZW5Sb290V2luZG93
IG9mZnNjcmVlbldpbmRvdzsKKyAgICByZXR1cm4gb2Zmc2NyZWVuV2luZG93LnJvb3RXaW5kb3co
KTsKK30KKworfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9YMTFIZWxwZXIuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvWDExSGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNmU3YTY4MgotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExSGVscGVyLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBYMTFIZWxwZXJfaAorI2RlZmluZSBYMTFIZWxwZXJfaAorCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk93blB0clgxMS5oIgorCisjaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCisKKyNpZiBVU0UoRUdMKQorI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMu
aD4KKyNlbmRpZgorCisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgorI2lu
Y2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8WDEx
L1hsaWIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBYMTFIZWxwZXIgeworCitw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgY3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90Kiwg
Y29uc3QgWFZpc3VhbEluZm8mLCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoMSwgMSkpOworI2lm
IFVTRShFR0wpCisgICAgc3RhdGljIHZvaWQgY3JlYXRlT2ZmU2NyZWVuV2luZG93KHVpbnQzMl90
KiwgY29uc3QgRUdMaW50LCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoMSwgMSkpOworI2VuZGlm
CisgICAgc3RhdGljIHZvaWQgZGVzdHJveVdpbmRvdyhjb25zdCB1aW50MzJfdCk7CisgICAgc3Rh
dGljIHZvaWQgcmVzaXplV2luZG93KGNvbnN0IEludFJlY3QmLCBjb25zdCB1aW50MzJfdCk7Cisg
ICAgc3RhdGljIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCk7CisgICAgc3RhdGlj
IERpc3BsYXkqIG5hdGl2ZURpc3BsYXkoKTsKKyAgICBzdGF0aWMgV2luZG93IG9mZnNjcmVlblJv
b3RXaW5kb3coKTsKK307CisKK2NsYXNzIFNjb3BlZFhQaXhtYXBDcmVhdGlvbkVycm9ySGFuZGxl
ciB7CisKK3B1YmxpYzoKKyAgICBTY29wZWRYUGl4bWFwQ3JlYXRpb25FcnJvckhhbmRsZXIoKTsK
KyAgICB+U2NvcGVkWFBpeG1hcENyZWF0aW9uRXJyb3JIYW5kbGVyKCk7CisgICAgYm9vbCBpc1Zh
bGlkT3BlcmF0aW9uKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgWEVycm9ySGFuZGxlciBtX3By
ZXZpb3VzRXJyb3JIYW5kbGVyOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2Vz
LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2lu
ZG93UmVzb3VyY2VzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UyNjNlYS4u
MDAwMDAwMAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlgxMVdp
bmRvd1Jlc291cmNlcy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNoYXJlZFgxMVJlc291cmNlcyogU2hhcmVkWDExUmVzb3Vy
Y2VzOjptX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKLQotWDExT2ZmU2NyZWVuV2luZG93OjpY
MTFPZmZTY3JlZW5XaW5kb3coKQotICAgIDogbV9zaGFyZWRSZXNvdXJjZXMoMCkKLXsKLSAgICBt
X3NoYXJlZFJlc291cmNlcyA9IFNoYXJlZFgxMVJlc291cmNlczo6Y3JlYXRlKCk7Ci19Ci0KLVgx
MU9mZlNjcmVlbldpbmRvdzo6flgxMU9mZlNjcmVlbldpbmRvdygpCi17Ci19Ci0KLXZvaWQgWDEx
T2ZmU2NyZWVuV2luZG93OjpyZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYgbmV3UmVjdCwgY29u
c3QgdWludDMyX3Qgd2luZG93SWQpCi17Ci0gICAgWFJlc2l6ZVdpbmRvdyhtX3NoYXJlZFJlc291
cmNlcy0+eDExRGlzcGxheSgpLCB3aW5kb3dJZCwgbmV3UmVjdC53aWR0aCgpLCBuZXdSZWN0Lmhl
aWdodCgpKTsKLSAgICBYRmx1c2gobV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSk7Ci19
Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgWDExT2ZmU2NyZWVuV2luZG93Ojpj
cmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRsZUlkLCBjb25zdCBYVmlzdWFsSW5m
byYgdmlzSW5mbywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoIW1fc2hhcmVkUmVz
b3VyY2VzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbV9zaGFy
ZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKLSAgICBpZiAoIWRpc3BsYXkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghdmlzSW5mby52aXN1YWwpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gZmluZCB2YWxpZCBYVmlzdWFsLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgV2luZG93IHhXaW5kb3cgPSBtX3NoYXJlZFJlc291cmNlcy0+Z2V0WFdpbmRvdygpOwot
ICAgIGlmICgheFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3JtYXAgY21hcCA9
IFhDcmVhdGVDb2xvcm1hcChkaXNwbGF5LCB4V2luZG93LCB2aXNJbmZvLnZpc3VhbCwgQWxsb2NO
b25lKTsKLSAgICBYU2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGU7Ci0gICAgYXR0cmlidXRl
LmJhY2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOwotICAgIGF0dHJpYnV0
ZS5ib3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOwotICAgIGF0dHJpYnV0ZS5j
b2xvcm1hcCA9IGNtYXA7Ci0gICAgYXR0cmlidXRlLmV2ZW50X21hc2sgPSBSZXNpemVSZWRpcmVj
dE1hc2s7Ci0gICAgdWludDMyX3QgdGVtcEhhbmRsZUlkOwotICAgIHRlbXBIYW5kbGVJZCA9IFhD
cmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpLCAwLCB2aXNJbmZvLmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzSW5mby52aXN1YWwsIENX
QmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOwotCi0g
ICAgaWYgKCF0ZW1wSGFuZGxlSWQpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3Jl
YXRlIG9mZnNjcmVlbiB3aW5kb3cuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBY
U2V0V2luZG93QmFja2dyb3VuZFBpeG1hcChkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIDApOwotICAg
IFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIENvbXBvc2l0
ZVJlZGlyZWN0TWFudWFsKTsKLSAgICBYTWFwV2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJZCk7
Ci0gICAgKmhhbmRsZUlkID0gdGVtcEhhbmRsZUlkOwotfQotCi0jaWYgVVNFKEVHTCkKLXZvaWQg
WDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqIGhhbmRs
ZUlkLCBjb25zdCBFR0xpbnQgaWQsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgVmlzdWFs
SUQgdmlzdWFsSWQgPSBzdGF0aWNfY2FzdDxWaXN1YWxJRD4oaWQpOwotCi0gICAgaWYgKCF2aXN1
YWxJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRUdMIGhhcyBzdWdnZXN0ZWQgYSB2aXN1
YWwgaWQsIHNvIGdldCB0aGUgcmVzdCBvZiB0aGUgdmlzdWFsIGluZm8gZm9yIHRoYXQgaWQuCi0g
ICAgWFZpc3VhbEluZm8gdmlzdWFsSW5mb1RlbXBsYXRlOwotICAgIG1lbXNldCgmdmlzdWFsSW5m
b1RlbXBsYXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsKLSAgICB2aXN1YWxJbmZvVGVtcGxh
dGUudmlzdWFsaWQgPSB2aXN1YWxJZDsKLSAgICBpbnQgbWF0Y2hpbmdDb3VudCA9IDA7Ci0gICAg
T3duUHRyWDExPFhWaXN1YWxJbmZvPiBtYXRjaGluZ1Zpc3VhbHMgPSBhZG9wdFB0cihYR2V0Vmlz
dWFsSW5mbyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCBWaXN1YWxJRE1hc2ssICZ2
aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRjaGluZ0NvdW50KSk7Ci0gICAgWFZpc3VhbEluZm8qIGZv
dW5kVmlzdWFsID0gMDsKLQotICAgIGlmIChtYXRjaGluZ1Zpc3VhbHMpIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGk8IG1hdGNoaW5nQ291bnQ7IGkrKykgewotICAgICAgICAgICAgWFZpc3Vh
bEluZm8qIHRlbXAgPSAmbWF0Y2hpbmdWaXN1YWxzW2ldOwotCi0gICAgICAgICAgICBpZiAobV9z
aGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9y
bWF0KG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIHRlbXAtPnZpc3VhbCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kVmlzdWFsID0gdGVtcDsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodGVtcC0+ZGVwdGggPT0gMzIpIHsKLSAgICAgICAgICAgICAgICBmb3VuZFZpc3Vh
bCA9IHRlbXA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZm91bmRWaXN1YWwpCi0gICAgICAgICAgICBjcmVhdGVPZmZTY3Jl
ZW5XaW5kb3coaGFuZGxlSWQsICpmb3VuZFZpc3VhbCwgc2l6ZSk7Ci0gICAgfQotfQotI2VuZGlm
Ci0KLSNlbmRpZgotCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdyhjb25z
dCB1aW50MzJfdCB3aW5kb3dJZCkKLXsKLSAgICBpZiAoIXdpbmRvd0lkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3Bs
YXkoKTsKLSAgICBpZiAoIWRpc3BsYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFhEZXN0cm95
V2luZG93KGRpc3BsYXksIHdpbmRvd0lkKTsKLX0KLQotRGlzcGxheSogWDExT2ZmU2NyZWVuV2lu
ZG93OjpuYXRpdmVTaGFyZWREaXNwbGF5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaGFyZWRS
ZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKLX0KLQotYm9vbCBYMTFPZmZTY3JlZW5XaW5kb3c6Omlz
WFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hhcmVk
UmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKTsKLX0KLQotfQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvWDExV2luZG93UmVzb3VyY2VzLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjYzJkMzNmLi4wMDAwMDAwCi0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBYMTFXaW5kb3dSZXNv
dXJjZXNfaAotI2RlZmluZSBYMTFXaW5kb3dSZXNvdXJjZXNfaAotCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk93blB0
clgxMS5oIgotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0KLSNpZiBVU0UoRUdMKQotI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4K
LSNlbmRpZgotCi0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWGNvbXBvc2l0ZS5oPgotI2luY2x1
ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWRC
YXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFSZXNvdXJjZXMpOwotCi1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkWDExUmVzb3VyY2VzPiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291cmNlKQotICAgICAgICAg
ICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IG5ldyBTaGFyZWRYMTFSZXNvdXJjZXMoKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZS0+cmVmKCk7Ci0K
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkUmVzb3VyY2UpOwotICAgIH0K
LQotICAgIHZvaWQgZGVyZWYoKQotICAgIHsKLSAgICAgICAgaWYgKGRlcmVmQmFzZSgpKSB7Ci0g
ICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gMDsKLSAgICAgICAgICAgIGRlbGV0
ZSB0aGlzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgRGlzcGxheSogeDExRGlzcGxheSgpCi0g
ICAgewotICAgICAgICBpZiAoIW1fZGlzcGxheSkgewotICAgICAgICAgICAgbV9kaXNwbGF5ID0g
WE9wZW5EaXNwbGF5KDApOwotICAgICAgICAgICAgaWYgKCFtX2Rpc3BsYXkpIHsKLSAgICAgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBtYWtlIGNvbm5lY3Rpb24gd2l0aCBYIik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0gICAgICAgICAgICBpZiAobV9kaXNwbGF5KSB7Ci0gICAgICAgICAgICAgICAg
aW50IGV2ZW50QmFzZXAsIGVycm9yQmFzZXA7Ci0gICAgICAgICAgICAgICAgbV9zdXBwb3J0c1hS
ZW5kZXJFeHRlbnNpb24gPSBYUmVuZGVyUXVlcnlFeHRlbnNpb24obV9kaXNwbGF5LCAmZXZlbnRC
YXNlcCwgJmVycm9yQmFzZXApOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gbV9kaXNwbGF5OwotICAgIH0KLQotICAgIFdpbmRvdyBnZXRYV2luZG93
KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV93aW5kb3cpIHsKLSAgICAgICAgICAgIERpc3BsYXkq
IGRweSA9IHgxMURpc3BsYXkoKTsKLSAgICAgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXM7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1
ZTsKLSAgICAgICAgICAgIG1fd2luZG93ID0gWENyZWF0ZVNpbXBsZVdpbmRvdyhkcHksIFhEZWZh
dWx0Um9vdFdpbmRvdyhkcHkpLCAtMSwgLTEsIDEsIDEsIDAsIEJsYWNrUGl4ZWwoZHB5LCAwKSwg
V2hpdGVQaXhlbChkcHksIDApKTsKLSAgICAgICAgICAgIC8vIEZyb20gaHR0cDovL3Ryb25jaGUu
Y29tL2d1aS94L3hsaWIvd2luZG93L2F0dHJpYnV0ZXMvCi0gICAgICAgICAgICBYQ2hhbmdlV2lu
ZG93QXR0cmlidXRlcyhkcHksIG1fd2luZG93LCBDV092ZXJyaWRlUmVkaXJlY3QsICZhdHRyaWJ1
dGVzKTsKLSAgICAgICAgICAgIFhNYXBXaW5kb3coZHB5LCBtX3dpbmRvdyk7Ci0KLSAgICAgICAg
ICAgIGlmICghbV93aW5kb3cpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgb2Zmc2NyZWVuIHJvb3Qgd2luZG93LiIpOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1fd2luZG93
OwotICAgIH0KLQotICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKLSAgICB9
Ci0KLXByb3RlY3RlZDoKLSAgICBTaGFyZWRYMTFSZXNvdXJjZXMoKQotICAgICAgICA6IG1fc3Vw
cG9ydHNYUmVuZGVyRXh0ZW5zaW9uKGZhbHNlKQotICAgICAgICAsIG1fd2luZG93KDApCi0gICAg
ICAgICwgbV9kaXNwbGF5KDApCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgflNoYXJlZFgx
MVJlc291cmNlcygpCi0gICAgewotICAgICAgICBpZiAoIW1fZGlzcGxheSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAobV93aW5kb3cpIHsKLSAgICAgICAgICAgIFhVbm1hcFdp
bmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKLSAgICAgICAgICAgIFhEZXN0cm95V2luZG93KG1f
ZGlzcGxheSwgbV93aW5kb3cpOwotICAgICAgICAgICAgbV93aW5kb3cgPSAwOwotICAgICAgICB9
Ci0KLSAgICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOwotICAgICAgICBtX2Rpc3BsYXkg
PSAwOwotICAgIH0KLQotICAgIHN0YXRpYyBTaGFyZWRYMTFSZXNvdXJjZXMqIG1fc3RhdGljU2hh
cmVkUmVzb3VyY2U7Ci0gICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKLSAgICBX
aW5kb3cgbV93aW5kb3c7Ci0gICAgRGlzcGxheSogbV9kaXNwbGF5OwotfTsKLQotY2xhc3MgWDEx
T2ZmU2NyZWVuV2luZG93IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYMTFPZmZTY3JlZW5X
aW5kb3cpOwotCi1wdWJsaWM6Ci0gICAgWDExT2ZmU2NyZWVuV2luZG93KCk7Ci0gICAgdmlydHVh
bCB+WDExT2ZmU2NyZWVuV2luZG93KCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAg
dm9pZCBjcmVhdGVPZmZTY3JlZW5XaW5kb3codWludDMyX3QqLCBjb25zdCBYVmlzdWFsSW5mbyYs
IGNvbnN0IEludFNpemUmID0gSW50U2l6ZSgxLCAxKSk7Ci0jaWYgVVNFKEVHTCkKLSAgICB2b2lk
IGNyZWF0ZU9mZlNjcmVlbldpbmRvdyh1aW50MzJfdCosIGNvbnN0IEVHTGludCwgY29uc3QgSW50
U2l6ZSYgPSBJbnRTaXplKDEsIDEpKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgdm9pZCBkZXN0cm95
V2luZG93KGNvbnN0IHVpbnQzMl90KTsKLSAgICB2b2lkIHJlU2l6ZVdpbmRvdyhjb25zdCBJbnRS
ZWN0JiwgY29uc3QgdWludDMyX3QpOwotICAgIERpc3BsYXkqIG5hdGl2ZVNoYXJlZERpc3BsYXko
KSBjb25zdDsKLSAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIFJlZlB0cjxTaGFyZWRYMTFSZXNvdXJjZXM+IG1fc2hhcmVkUmVzb3Vy
Y2VzOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYgVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJl
cy9mZWF0dXJlcy5wcmYKaW5kZXggY2M5MDcyZC4uZTM5YzBjMiAxMDA2NDQKLS0tIFRvb2xzL3Ft
YWtlL21rc3BlY3MvZmVhdHVyZXMvZmVhdHVyZXMucHJmCisrKyBUb29scy9xbWFrZS9ta3NwZWNz
L2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtMTM4LDcgKzEzOCw3IEBAIGRlZmluZVRlc3QoZGV0
ZWN0RmVhdHVyZXMpIHsKICAgICB1c2U/KDNkX2dyYXBoaWNzKSB7CiAgICAgICAgIG1hYzogV0VC
S0lUX0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFjZQogICAgICAgICB3aW4zMjpjb250YWlu
cyhRVF9DT05GSUcsIG9wZW5nbGVzMik6IFdFQktJVF9DT05GSUcgKz0gdXNlX2dyYXBoaWNzX3N1
cmZhY2UKLSAgICAgICAgbGludXgtKjpjb250YWlucyhXRUJLSVRfQ09ORklHLCBoYXZlX2dseCk6
Y29udGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV94Y29tcG9zaXRlKTpjb250YWlucyhXRUJLSVRf
Q09ORklHLCBoYXZlX3hyZW5kZXIpOiBXRUJLSVRfQ09ORklHICs9IHVzZV9ncmFwaGljc19zdXJm
YWNlCisgICAgICAgIGxpbnV4LSo6Y29udGFpbnMoV0VCS0lUX0NPTkZJRywgaGF2ZV9nbHgpOmNv
bnRhaW5zKFdFQktJVF9DT05GSUcsIGhhdmVfeGNvbXBvc2l0ZSk6Y29udGFpbnMoV0VCS0lUX0NP
TkZJRywgaGF2ZV94cmVuZGVyKTogV0VCS0lUX0NPTkZJRyArPSB1c2VfZ3JhcGhpY3Nfc3VyZmFj
ZSB1c2VfZ2x4CiAgICAgfQogCiAgICAgIyBTbGlkZXIgVG91Y2ggaXMgc2Vuc2libGUgdG8gdXNl
IHdoZW4gY29tcGlsaW5nIFdlYktpdDIK
</data>

          </attachment>
      

    </bug>

</bugzilla>