<?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>209805</bug_id>
          
          <creation_ts>2020-03-31 06:38:15 -0700</creation_ts>
          <short_desc>[GTK] Bring back support for rendering scrollbars using the system appearance</short_desc>
          <delta_ts>2020-04-14 02:50:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=208129</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alicem</cc>
    
    <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1635992</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-03-31 06:38:15 -0700</bug_when>
    <thetext>For backwards compatibility, but including new API to opt-out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1635994</commentid>
    <comment_count>1</comment_count>
      <attachid>395032</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-03-31 06:44:42 -0700</bug_when>
    <thetext>Created attachment 395032
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1635995</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-03-31 06:45:30 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636137</commentid>
    <comment_count>3</comment_count>
      <attachid>395032</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-03-31 11:08:54 -0700</bug_when>
    <thetext>Comment on attachment 395032
Patch

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

I&apos;ve skimmed over the WebCore changes, since they are mostly restoring previous code.

&gt; Source/WebKit/ChangeLog:9
&gt; +        Add WebKitWebContext:use-system-appearance-for-scrollbars property. It&apos;s enabled by default to keep backwards
&gt; +        compatibility.

Why? Would an app ever really want to change this setting? For GTK 3, I think every app wants to use it, and no apps would want to turn it off. For GTK 4, there&apos;s no way to make it work, so every app will need to have it off.  So I don&apos;t think the new property is needed.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp:539
&gt; +     * This is enabled by default for backwards compatibility, but it&apos;s only
&gt; +     * recommened to use when the application includes other widgets to ensure
&gt; +     * consistency, or when consistency with other applications is required too.

I can&apos;t think of any reason to turn it off...? Isn&apos;t consistency with other applications always required for GTK? I think so.

&gt; Tools/ChangeLog:8
&gt; +        Do not use system appearance for scrollbars in MiniBrowser and unit tests.

Hm, I guess we could find a private way to disable the themed scrollbars for layout tests? Something that doesn&apos;t require exposing public API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636429</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-01 02:02:02 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #3)
&gt; Comment on attachment 395032 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=395032&amp;action=review
&gt; 
&gt; I&apos;ve skimmed over the WebCore changes, since they are mostly restoring
&gt; previous code.
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:9
&gt; &gt; +        Add WebKitWebContext:use-system-appearance-for-scrollbars property. It&apos;s enabled by default to keep backwards
&gt; &gt; +        compatibility.
&gt; 
&gt; Why? Would an app ever really want to change this setting?

Apps not using other widgets, like web browsers. It&apos;s more efficient and would allow to enable threaded rendering (when it&apos;s ready). I expect ephy use the setting to disable system appearance.

&gt; For GTK 3, I
&gt; think every app wants to use it, and no apps would want to turn it off. For
&gt; GTK 4, there&apos;s no way to make it work, so every app will need to have it
&gt; off.  So I don&apos;t think the new property is needed.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitWebContext.cpp:539
&gt; &gt; +     * This is enabled by default for backwards compatibility, but it&apos;s only
&gt; &gt; +     * recommened to use when the application includes other widgets to ensure
&gt; &gt; +     * consistency, or when consistency with other applications is required too.
&gt; 
&gt; I can&apos;t think of any reason to turn it off...? Isn&apos;t consistency with other
&gt; applications always required for GTK? I think so.

Not so important for a web browser, I would say, web sites can use their own scrollbars, so we are used to not being always consistent. The same way we are no longer consistent when rendering buttons or any other controls. Other apps like evolution would look really weird if the emails list uses one scrollbar and the main view a different one.

&gt; &gt; Tools/ChangeLog:8
&gt; &gt; +        Do not use system appearance for scrollbars in MiniBrowser and unit tests.
&gt; 
&gt; Hm, I guess we could find a private way to disable the themed scrollbars for
&gt; layout tests? Something that doesn&apos;t require exposing public API?

We are not using any api for layout tests, it&apos;s disabled by default, because layout tests don&apos;t use the glib api.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636472</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-01 07:21:24 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; Apps not using other widgets, like web browsers. It&apos;s more efficient and
&gt; would allow to enable threaded rendering (when it&apos;s ready). I expect ephy
&gt; use the setting to disable system appearance.

I think native scrollbar is more important for Ephy than threaded rendering is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636473</commentid>
    <comment_count>6</comment_count>
      <attachid>395032</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-01 07:22:33 -0700</bug_when>
    <thetext>Comment on attachment 395032
Patch

OK, r=me, but one caveat: since I don&apos;t like the new API, I&apos;d like another GTK maintainer (probably Adrian, I wonder what he thinks about this) to approve the new API before you commit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636524</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-01 09:16:50 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #5)
&gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; Apps not using other widgets, like web browsers. It&apos;s more efficient and
&gt; &gt; would allow to enable threaded rendering (when it&apos;s ready). I expect ephy
&gt; &gt; use the setting to disable system appearance.
&gt; 
&gt; I think native scrollbar is more important for Ephy than threaded rendering
&gt; is.

Performance is not important for ephy? I really want to disable themed scrollbars in ephy, if that&apos;s not going to happen, maybe it&apos;s better not to add api for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636553</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-01 10:09:12 -0700</bug_when>
    <thetext>Well performance is important, certainly, but desktop integration is critical.

I don&apos;t know Carlos, it&apos;s a shame we can&apos;t have both. :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636585</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-01 11:28:22 -0700</bug_when>
    <thetext>Maybe use threaded rendering only if the current theme is Adwaita? :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636828</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-02 01:34:23 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; Well performance is important, certainly, but desktop integration is
&gt; critical.

We have already lost the desktop integration for the rest of the themed controls. I understand scrollbars are different when apps are mixing them, but not for ephy. And it&apos;s going to be even worse with GTK4 that we can&apos;t even get selection colors.

&gt; I don&apos;t know Carlos, it&apos;s a shame we can&apos;t have both. :/

I always said desktop integration was one of the key features of WebKitGTK compared to other browsers/engines, but you (and others) convinced me that it was causing more problems than the benefits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636829</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-02 01:37:32 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #9)
&gt; Maybe use threaded rendering only if the current theme is Adwaita? :/

Threaded rendering was just an example, it&apos;s not even ready yet. Even without it, the new code is a lot more efficient. Note that it&apos;s based on Adwaita, but it&apos;s not Adwaita and it could even diverge more. The theming code (when using gtk foreign drawing) is the only place where we render directly to the cairo context, instead of using GraphicsContext API. That might cause more problems in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636867</commentid>
    <comment_count>12</comment_count>
      <attachid>395032</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-02 06:13:02 -0700</bug_when>
    <thetext>Comment on attachment 395032
Patch

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

I don&apos;t have a good answer.

For GTK 4, where we have no choice, I guess we can blame GTK 4 when users complain. GTK 4 will be stable very soon anyway. But as long as we&apos;re using GTK 3, I think I&apos;d prefer native scrollbars to avoid user complaints, since we can&apos;t blame GTK 4 for that.

&gt; Tools/MiniBrowser/gtk/main.c:546
&gt; +    WebKitWebContext *webContext = g_object_new(WEBKIT_TYPE_WEB_CONTEXT, &quot;website-data-manager&quot;, manager, &quot;process-swap-on-cross-site-navigation-enabled&quot;, TRUE,
&gt; +        &quot;use-system-appearance-for-scrollbars&quot;, FALSE, NULL);

Since this property is not construct-only, and can be changed after the web process has started... why not put it into WebKitSettings instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636879</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-02 07:22:50 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #12)
&gt; Comment on attachment 395032 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=395032&amp;action=review
&gt; 
&gt; I don&apos;t have a good answer.
&gt; 
&gt; For GTK 4, where we have no choice, I guess we can blame GTK 4 when users
&gt; complain. GTK 4 will be stable very soon anyway. But as long as we&apos;re using
&gt; GTK 3, I think I&apos;d prefer native scrollbars to avoid user complaints, since
&gt; we can&apos;t blame GTK 4 for that.

I don&apos;t think this is about who to blame, but what behavior we want for WebKitGTK.

&gt; &gt; Tools/MiniBrowser/gtk/main.c:546
&gt; &gt; +    WebKitWebContext *webContext = g_object_new(WEBKIT_TYPE_WEB_CONTEXT, &quot;website-data-manager&quot;, manager, &quot;process-swap-on-cross-site-navigation-enabled&quot;, TRUE,
&gt; &gt; +        &quot;use-system-appearance-for-scrollbars&quot;, FALSE, NULL);
&gt; 
&gt; Since this property is not construct-only, and can be changed after the web
&gt; process has started... why not put it into WebKitSettings instead?

Because WebKitSettings can be set per web view, but RenderScrollbarTheme is a singleton in the web process, so we can&apos;t change the setting for a particular page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636881</commentid>
    <comment_count>14</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-04-02 07:38:36 -0700</bug_when>
    <thetext>I also find it appealing to be able to make the setting controllable
by the application. There are many cases in which one may want the
extra performance, or the web content itself is already overriding
the scrollbars (e.g. Riot/Revolt) and having the logic enabled for
native-looking scrollbars is not particularly useful anyway… I am
okay with the API to opt-in to use scrollbars rendered by GTK, it&apos;s
not great but we already have other not-so-great opt-ins anyway in
the public API (like PSON being an opt-in, too).

TL;DR: I see the point in allowing the application to control which
kind of scrollbars to use, the API is not great but I am okay with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1636886</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-02 08:02:21 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #14)
&gt; There are many cases in which one may want the
&gt; extra performance, or the web content itself is already overriding
&gt; the scrollbars (e.g. Riot/Revolt) and having the logic enabled for
&gt; native-looking scrollbars is not particularly useful anyway… 

OK, you convinced me that the WebKitWebContext API makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637323</commentid>
    <comment_count>16</comment_count>
    <who name="Alice Mikhaylenko">alicem</who>
    <bug_when>2020-04-03 06:02:30 -0700</bug_when>
    <thetext>I was going to file a bug about the new scrollbar handle not having minimum height, but I guess this obsoletes it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637326</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-03 06:26:29 -0700</bug_when>
    <thetext>(In reply to Alexander Mikhaylenko from comment #16)
&gt; I was going to file a bug about the new scrollbar handle not having minimum
&gt; height, but I guess this obsoletes it?

No, we should fix both scrollbar modes. This patch adds API to choose whether you get native scrollbars or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641296</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-14 02:50:40 -0700</bug_when>
    <thetext>Committed r260065: &lt;https://trac.webkit.org/changeset/260065&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395032</attachid>
            <date>2020-03-31 06:44:42 -0700</date>
            <delta_ts>2020-04-01 07:22:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-scrollbars-theme.diff</filename>
            <type>text/plain</type>
            <size>78370</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZGU3ZmJiNzc5MWEuLjMzNDE2ZTZjZDQyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDcyIEBACisyMDIwLTAzLTMxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBCcmluZyBiYWNrIHN1cHBvcnQgZm9yIHJlbmRl
cmluZyBzY3JvbGxiYXJzIHVzaW5nIHRoZSBzeXN0ZW0gYXBwZWFyYW5jZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5ODA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJpbmcgYmFjayBTY3JvbGxiYXJU
aGVtZUd0aywgUmVuZGVyVGhlbWVHYWRnZXQgYW5kIFJlbmRlclRoZW1lV2lkZ2V0IChyZW5hbWVk
IGFzIFJlbmRlclRoZW1lU2Nyb2xsYmFyKSwKKyAgICAgICAgaW5jbHVkaW5nIG9ubHkgdGhlIGNv
ZGUgbmVlZGVkIHRvIHJlbmRlciB0aGUgc2Nyb2xsYmFycy4gU2Nyb2xsYmFyVGhlbWVHdGsgaW5o
ZXJpdHMgZnJvbSBTY3JvbGxiYXJUaGVtZUFkd2FpdGEKKyAgICAgICAgdGhhdCBpcyB1c2VkIHdo
ZW4gc3lzdGVtIGFwcGVhcmFuY2UgaXMgZGlzYWJsZWQuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdU
Sy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9h
ZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vYWR3
YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVu
ZGVyVGhlbWVHYWRnZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R2FkZ2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3R5bGVDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEVsZW1lbnRUb1BhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHYWRnZXQ6OlJlbmRlclRoZW1lR2FkZ2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR2FkZ2V0OjptYXJnaW5Cb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHYWRnZXQ6OmJvcmRlckJveCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUdhZGdldDo6cGFkZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUdhZGdldDo6Y29udGVudHNCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHYWRnZXQ6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR2FkZ2V0OjpiYWNrZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVHYWRnZXQ6Om9wYWNpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHYWRnZXQ6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lR2FkZ2V0OjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUdh
ZGdldDo6bWluaW11bVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
YWRnZXQ6OnByZWZlcnJlZFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHYWRnZXQ6OnJlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUJveEdhZGdl
dDo6UmVuZGVyVGhlbWVCb3hHYWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVC
b3hHYWRnZXQ6OnByZWZlcnJlZFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpyZW5kZXJTdGVwcGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHYWRnZXQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUdhZGdldDo6Y29udGV4dCBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lU2Nyb2xsYmFyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjp3aWRnZXRNYXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTY3Jv
bGxiYXI6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Nyb2xs
YmFyOjpjbGVhckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lU2Nyb2xsYmFy
OjpSZW5kZXJUaGVtZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNj
cm9sbGJhcjo6c3RlcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lU2Ny
b2xsYmFyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTY3JvbGxiYXI6
OnNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNjcm9sbGJh
cjo6Y29udGVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVTY3JvbGxi
YXI6OnNsaWRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVNjcm9sbGJh
cjo6dHJvdWdoIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVH
dGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVU
aGVtZSk6CisgICAgICAgIChXZWJDb3JlOjp0aGVtZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6U2Nyb2xsYmFyVGhlbWVHdGspOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnNldFVzZVN5c3RlbUFwcGVhcmFuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnRoZW1lQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpoYXNCdXR0b25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6
OndpZGdldFR5cGVGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudHNSZWN0
YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OnRyYWNrUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6YmFja0J1dHRvblJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUd0azo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lR3RrOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVHdGs6Om1pbmltdW1UaHVtYkxlbmd0aCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmg6IEFkZGVkLgorCiAyMDIw
LTAzLTMwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFNjcm9sbCBsYXRjaGluZyBzdGF0ZSBpcyBub3QgYSBzdGFjawpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5j
bWFrZQppbmRleCBhMWYwMDBlYzcyNjUuLjdmMzA4Yjg0YzkzYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKQEAgLTUwLDYgKzUwLDggQEAgaWYgKFVTRV9XUEVfUkVOREVSRVIpCiBlbmRpZiAo
KQogCiBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKKyAgICBw
bGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5oCisKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy94
MTEvWEVycm9yVHJhcHBlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1hVbmlxdWVQdHIu
aApAQCAtNTksNiArNjEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKICAgICBwbGF0Zm9ybS9ndGsvR1VuaXF1ZVB0ckd0ay5oCiAgICAgcGxhdGZvcm0v
Z3RrL0d0a1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaAor
ICAgIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCiAgICAgcGxhdGZvcm0vZ3RrL1Nl
bGVjdGlvbkRhdGEuaAogCiAgICAgcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5j
aGFudC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDE3YjUxM2IyMmI4NS4uYjc1MTk4NmY2YjVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtMTE1LDYgKzExNSw5IEBAIHBsYXRmb3JtL2d0ay9Q
bGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1QYXN0ZWJvYXJk
R3RrLmNwcAogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNwcAogcGxhdGZvcm0vZ3Rr
L1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKK3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdl
dC5jcHAKK3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZVNjcm9sbGJhci5jcHAKK3BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKIHBsYXRmb3JtL2d0ay9TZWxlY3Rpb25EYXRhLmNwcAog
cGxhdGZvcm0vZ3RrL1RoZW1lR3RrLmNwcAogcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVB
ZHdhaXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhl
bWVBZHdhaXRhLmNwcAppbmRleCA0MTYzZTVhYjQ4NWUuLmYxZjFkODZjY2Y1NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVB
ZHdhaXRhLmNwcApAQCAtMjIwLDEwICsyMjAsMTIgQEAgU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rp
b24gU2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoU2Nyb2xsYmEK
ICAgICByZXR1cm4gU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246Ok5vbmU7CiB9CiAKKyNpZiAh
UExBVEZPUk0oR1RLKQogU2Nyb2xsYmFyVGhlbWUmIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpCiB7CiAgICAgc3RhdGljIFNjcm9sbGJhclRoZW1lQWR3YWl0YSB0aGVtZTsKICAgICByZXR1
cm4gdGhlbWU7CiB9CisjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVBZHdhaXRh
LmgKaW5kZXggMjY2MWRlOWU5YjM4Li41ZDE4Y2IwMTYzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Fkd2FpdGEvU2Nyb2xsYmFyVGhlbWVBZHdhaXRhLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuaApAQCAt
MjksMTIgKzI5LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2Nyb2xsYmFy
VGhlbWVBZHdhaXRhIGZpbmFsIDogcHVibGljIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIHsKK2Ns
YXNzIFNjcm9sbGJhclRoZW1lQWR3YWl0YSA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0
ZSB7CiBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyVGhlbWVBZHdhaXRhKCkgPSBkZWZhdWx0OwogICAg
IHZpcnR1YWwgflNjcm9sbGJhclRoZW1lQWR3YWl0YSgpID0gZGVmYXVsdDsKIAotcHJpdmF0ZToK
K3Byb3RlY3RlZDoKICAgICBib29sIHVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IG92ZXJy
aWRlOwogICAgIGJvb2wgaW52YWxpZGF0ZU9uTW91c2VFbnRlckV4aXQoKSBvdmVycmlkZSB7IHJl
dHVybiB1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHYWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLmNmMTI4MzEwMzliMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdldC5jcHAKQEAgLTAsMCArMSwy
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lR2FkZ2V0LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGNvbnN0
IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50
LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNpZ25l
ZCBwb3NpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGluZm8udHlwZSkgeworICAgIGNhc2UgUmVuZGVy
VGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWM6CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJl
bmRlclRoZW1lR2FkZ2V0PihpbmZvLCBwYXJlbnQsIHNpYmxpbmdzLCBwb3NpdGlvbik7CisgICAg
Y2FzZSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6U2Nyb2xsYmFyOgorICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldD4oaW5mbywgcGFyZW50LCBzaWJs
aW5ncywgcG9zaXRpb24pOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNy
ZWF0ZVN0eWxlQ29udGV4dChHdGtXaWRnZXRQYXRoKiBwYXRoLCBHdGtTdHlsZUNvbnRleHQqIHBh
cmVudCkKK3sKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGFkb3B0R1Jl
ZihndGtfc3R5bGVfY29udGV4dF9uZXcoKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3Bh
dGgoY29udGV4dC5nZXQoKSwgcGF0aCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhcmVu
dChjb250ZXh0LmdldCgpLCBwYXJlbnQpOworICAgIHJldHVybiBjb250ZXh0OworfQorCitzdGF0
aWMgdm9pZCBhcHBlbmRFbGVtZW50VG9QYXRoKEd0a1dpZGdldFBhdGgqIHBhdGgsIGNvbnN0IFJl
bmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvKQoreworICAgIC8vIFNjcm9sbGJhcnMgbmVlZCB0
byB1c2UgaXRzIEdUeXBlIHRvIGJlIGFibGUgdG8gZ2V0IG5vbi1DU1Mgc3R5bGUgcHJvcGVydGll
cy4KKyAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aCwgaW5mby50eXBlID09IFJl
bmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpTY3JvbGxiYXIgPyBHVEtfVFlQRV9TQ1JPTExCQVIgOiBH
X1RZUEVfTk9ORSk7CisgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBh
dGgsIC0xLCBpbmZvLm5hbWUpOworICAgIGZvciAoY29uc3QgYXV0byogY2xhc3NOYW1lIDogaW5m
by5jbGFzc0xpc3QpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRo
LCAtMSwgY2xhc3NOYW1lKTsKK30KKworUmVuZGVyVGhlbWVHYWRnZXQ6OlJlbmRlclRoZW1lR2Fk
Z2V0KGNvbnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdl
dCogcGFyZW50LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdz
LCB1bnNpZ25lZCBwb3NpdGlvbikKK3sKKyAgICBHUmVmUHRyPEd0a1dpZGdldFBhdGg+IHBhdGgg
PSBwYXJlbnQgPyBhZG9wdEdSZWYoZ3RrX3dpZGdldF9wYXRoX2NvcHkoZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X3BhdGgocGFyZW50LT5jb250ZXh0KCkpKSkgOiBhZG9wdEdSZWYoZ3RrX3dpZGdldF9w
YXRoX25ldygpKTsKKyAgICBpZiAoIXNpYmxpbmdzLmlzRW1wdHkoKSkgeworICAgICAgICBHUmVm
UHRyPEd0a1dpZGdldFBhdGg+IHNpYmxpbmdzUGF0aCA9IGFkb3B0R1JlZihndGtfd2lkZ2V0X3Bh
dGhfbmV3KCkpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHNpYmxpbmdJbmZvIDogc2libGlu
Z3MpCisgICAgICAgICAgICBhcHBlbmRFbGVtZW50VG9QYXRoKHNpYmxpbmdzUGF0aC5nZXQoKSwg
c2libGluZ0luZm8pOworICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3dpdGhfc2libGlu
Z3MocGF0aC5nZXQoKSwgc2libGluZ3NQYXRoLmdldCgpLCBwb3NpdGlvbik7CisgICAgfSBlbHNl
CisgICAgICAgIGFwcGVuZEVsZW1lbnRUb1BhdGgocGF0aC5nZXQoKSwgaW5mbyk7CisgICAgbV9j
b250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHBhdGguZ2V0KCksIHBhcmVudCA/IHBhcmVudC0+
Y29udGV4dCgpIDogbnVsbHB0cik7Cit9CisKK1JlbmRlclRoZW1lR2FkZ2V0Ojp+UmVuZGVyVGhl
bWVHYWRnZXQoKSA9IGRlZmF1bHQ7CisKK0d0a0JvcmRlciBSZW5kZXJUaGVtZUdhZGdldDo6bWFy
Z2luQm94KCkgY29uc3QKK3sKKyAgICBHdGtCb3JkZXIgcmV0dXJuVmFsdWU7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X21hcmdpbihtX2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0
X2dldF9zdGF0ZShtX2NvbnRleHQuZ2V0KCkpLCAmcmV0dXJuVmFsdWUpOworICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKK30KKworR3RrQm9yZGVyIFJlbmRlclRoZW1lR2FkZ2V0Ojpib3JkZXJCb3go
KSBjb25zdAoreworICAgIEd0a0JvcmRlciByZXR1cm5WYWx1ZTsKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9nZXRfYm9yZGVyKG1fY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0
YXRlKG1fY29udGV4dC5nZXQoKSksICZyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHVyblZh
bHVlOworfQorCitHdGtCb3JkZXIgUmVuZGVyVGhlbWVHYWRnZXQ6OnBhZGRpbmdCb3goKSBjb25z
dAoreworICAgIEd0a0JvcmRlciByZXR1cm5WYWx1ZTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfcGFkZGluZyhtX2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZSht
X2NvbnRleHQuZ2V0KCkpLCAmcmV0dXJuVmFsdWUpOworICAgIHJldHVybiByZXR1cm5WYWx1ZTsK
K30KKworR3RrQm9yZGVyIFJlbmRlclRoZW1lR2FkZ2V0Ojpjb250ZW50c0JveCgpIGNvbnN0Cit7
CisgICAgYXV0byBtYXJnaW4gPSBtYXJnaW5Cb3goKTsKKyAgICBhdXRvIGJvcmRlciA9IGJvcmRl
ckJveCgpOworICAgIGF1dG8gcGFkZGluZyA9IHBhZGRpbmdCb3goKTsKKyAgICBwYWRkaW5nLmxl
ZnQgKz0gbWFyZ2luLmxlZnQgKyBib3JkZXIubGVmdDsKKyAgICBwYWRkaW5nLnJpZ2h0ICs9IG1h
cmdpbi5yaWdodCArIGJvcmRlci5yaWdodDsKKyAgICBwYWRkaW5nLnRvcCArPSBtYXJnaW4udG9w
ICsgYm9yZGVyLnRvcDsKKyAgICBwYWRkaW5nLmJvdHRvbSArPSBtYXJnaW4uYm90dG9tICsgYm9y
ZGVyLmJvdHRvbTsKKyAgICByZXR1cm4gcGFkZGluZzsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVH
YWRnZXQ6OmNvbG9yKCkgY29uc3QKK3sKKyAgICBHZGtSR0JBIHJldHVyblZhbHVlOworICAgIGd0
a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihtX2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250
ZXh0X2dldF9zdGF0ZShtX2NvbnRleHQuZ2V0KCkpLCAmcmV0dXJuVmFsdWUpOworICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHYWRnZXQ6OmJhY2tncm91bmRD
b2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSByZXR1cm5WYWx1ZTsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihtX2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdGF0ZShtX2NvbnRleHQuZ2V0KCkpLCAmcmV0dXJuVmFsdWUpOworICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKK30KKworZG91YmxlIFJlbmRlclRoZW1lR2FkZ2V0OjpvcGFjaXR5
KCkgY29uc3QKK3sKKyAgICBkb3VibGUgcmV0dXJuVmFsdWU7CisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0KG1fY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKG1fY29u
dGV4dC5nZXQoKSksICJvcGFjaXR5IiwgJnJldHVyblZhbHVlLCBudWxscHRyKTsKKyAgICByZXR1
cm4gcmV0dXJuVmFsdWU7Cit9CisKK0d0a1N0YXRlRmxhZ3MgUmVuZGVyVGhlbWVHYWRnZXQ6OnN0
YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKG1f
Y29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHYWRnZXQ6OnNldFN0YXRlKEd0
a1N0YXRlRmxhZ3Mgc3RhdGUpCit7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKG1f
Y29udGV4dC5nZXQoKSwgc3RhdGUpOworfQorCitJbnRTaXplIFJlbmRlclRoZW1lR2FkZ2V0Ojpt
aW5pbXVtU2l6ZSgpIGNvbnN0Cit7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0KG1fY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0
YXRlKG1fY29udGV4dC5nZXQoKSksICJtaW4td2lkdGgiLCAmd2lkdGgsICJtaW4taGVpZ2h0Iiwg
JmhlaWdodCwgbnVsbHB0cik7CisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhlaWdodCk7Cit9
CisKK0ludFNpemUgUmVuZGVyVGhlbWVHYWRnZXQ6OnByZWZlcnJlZFNpemUoKSBjb25zdAorewor
ICAgIGF1dG8gbWFyZ2luID0gbWFyZ2luQm94KCk7CisgICAgYXV0byBib3JkZXIgPSBib3JkZXJC
b3goKTsKKyAgICBhdXRvIHBhZGRpbmcgPSBwYWRkaW5nQm94KCk7CisgICAgYXV0byBtaW5TaXpl
ID0gbWluaW11bVNpemUoKTsKKyAgICBtaW5TaXplLmV4cGFuZChtYXJnaW4ubGVmdCArIG1hcmdp
bi5yaWdodCArIGJvcmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0ICsgcGFkZGluZy5sZWZ0ICsgcGFk
ZGluZy5yaWdodCwKKyAgICAgICAgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyBib3JkZXIu
dG9wICsgYm9yZGVyLmJvdHRvbSArIHBhZGRpbmcudG9wICsgcGFkZGluZy5ib3R0b20pOworICAg
IHJldHVybiBtaW5TaXplOworfQorCitib29sIFJlbmRlclRoZW1lR2FkZ2V0OjpyZW5kZXIoY2Fp
cm9fdCogY3IsIGNvbnN0IEZsb2F0UmVjdCYgcGFpbnRSZWN0LCBGbG9hdFJlY3QqIGNvbnRlbnRz
UmVjdCkKK3sKKyAgICBGbG9hdFJlY3QgcmVjdCA9IHBhaW50UmVjdDsKKworICAgIGF1dG8gbWFy
Z2luID0gbWFyZ2luQm94KCk7CisgICAgcmVjdC5tb3ZlKG1hcmdpbi5sZWZ0LCBtYXJnaW4udG9w
KTsKKyAgICByZWN0LmNvbnRyYWN0KG1hcmdpbi5sZWZ0ICsgbWFyZ2luLnJpZ2h0LCBtYXJnaW4u
dG9wICsgbWFyZ2luLmJvdHRvbSk7CisKKyAgICBhdXRvIG1pblNpemUgPSBtaW5pbXVtU2l6ZSgp
OworICAgIHJlY3Quc2V0V2lkdGgoc3RkOjptYXg8ZmxvYXQ+KHJlY3Qud2lkdGgoKSwgbWluU2l6
ZS53aWR0aCgpKSk7CisgICAgcmVjdC5zZXRIZWlnaHQoc3RkOjptYXg8ZmxvYXQ+KHJlY3QuaGVp
Z2h0KCksIG1pblNpemUuaGVpZ2h0KCkpKTsKKworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZCht
X2NvbnRleHQuZ2V0KCksIGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRleHQuZ2V0KCksIGNyLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBp
ZiAoY29udGVudHNSZWN0KSB7CisgICAgICAgIGF1dG8gYm9yZGVyID0gYm9yZGVyQm94KCk7Cisg
ICAgICAgIGF1dG8gcGFkZGluZyA9IHBhZGRpbmdCb3goKTsKKyAgICAgICAgKmNvbnRlbnRzUmVj
dCA9IHJlY3Q7CisgICAgICAgIGNvbnRlbnRzUmVjdC0+bW92ZShib3JkZXIubGVmdCArIHBhZGRp
bmcubGVmdCwgYm9yZGVyLnRvcCArIHBhZGRpbmcudG9wKTsKKyAgICAgICAgY29udGVudHNSZWN0
LT5jb250cmFjdChib3JkZXIubGVmdCArIGJvcmRlci5yaWdodCArIHBhZGRpbmcubGVmdCArIHBh
ZGRpbmcucmlnaHQsIGJvcmRlci50b3AgKyBib3JkZXIuYm90dG9tICsgcGFkZGluZy50b3AgKyBw
YWRkaW5nLmJvdHRvbSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlbmRlclRo
ZW1lQm94R2FkZ2V0OjpSZW5kZXJUaGVtZUJveEdhZGdldChjb25zdCBSZW5kZXJUaGVtZUdhZGdl
dDo6SW5mbyYgaW5mbywgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGNvbnN0IFZlY3RvcjxS
ZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gY2hpbGRyZW4sIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJl
bnQpCisgICAgOiBSZW5kZXJUaGVtZUdhZGdldChpbmZvLCBwYXJlbnQsIFZlY3RvcjxSZW5kZXJU
aGVtZUdhZGdldDo6SW5mbz4oKSwgMCkKKyAgICAsIG1fb3JpZW50YXRpb24ob3JpZW50YXRpb24p
Cit7CisgICAgbV9jaGlsZHJlbi5yZXNlcnZlQ2FwYWNpdHkoY2hpbGRyZW4uc2l6ZSgpKTsKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZEluZm8gOiBj
aGlsZHJlbikKKyAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoUmVuZGVyVGhlbWVH
YWRnZXQ6OmNyZWF0ZShjaGlsZEluZm8sIHRoaXMsIGNoaWxkcmVuLCBpbmRleCsrKSk7Cit9CisK
K0ludFNpemUgUmVuZGVyVGhlbWVCb3hHYWRnZXQ6OnByZWZlcnJlZFNpemUoKSBjb25zdAorewor
ICAgIEludFNpemUgY2hpbGRyZW5TaXplOworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBt
X2NoaWxkcmVuKSB7CisgICAgICAgIEludFNpemUgY2hpbGRTaXplID0gY2hpbGQtPnByZWZlcnJl
ZFNpemUoKTsKKyAgICAgICAgc3dpdGNoIChtX29yaWVudGF0aW9uKSB7CisgICAgICAgIGNhc2Ug
R1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw6CisgICAgICAgICAgICBjaGlsZHJlblNpemUuc2V0
V2lkdGgoY2hpbGRyZW5TaXplLndpZHRoKCkgKyBjaGlsZFNpemUud2lkdGgoKSk7CisgICAgICAg
ICAgICBjaGlsZHJlblNpemUuc2V0SGVpZ2h0KHN0ZDo6bWF4KGNoaWxkcmVuU2l6ZS5oZWlnaHQo
KSwgY2hpbGRTaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw6CisgICAgICAgICAgICBjaGlsZHJlblNpemUuc2V0
V2lkdGgoc3RkOjptYXgoY2hpbGRyZW5TaXplLndpZHRoKCksIGNoaWxkU2l6ZS53aWR0aCgpKSk7
CisgICAgICAgICAgICBjaGlsZHJlblNpemUuc2V0SGVpZ2h0KGNoaWxkcmVuU2l6ZS5oZWlnaHQo
KSArIGNoaWxkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gUmVuZGVyVGhlbWVHYWRnZXQ6OnByZWZlcnJlZFNpemUoKS5leHBh
bmRlZFRvKGNoaWxkcmVuU2l6ZSk7Cit9CisKK1JlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpS
ZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldChjb25zdCBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyYg
aW5mbywgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1l
R2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywgdW5zaWduZWQgcG9zaXRpb24pCisgICAgOiBSZW5kZXJU
aGVtZUdhZGdldChpbmZvLCBwYXJlbnQsIHNpYmxpbmdzLCBwb3NpdGlvbikKK3sKKyAgICBnYm9v
bGVhbiBoYXNCYWNrd2FyZCwgaGFzRm9yd2FyZCwgaGFzU2Vjb25kYXJ5QmFja3dhcmQsIGhhc1Nl
Y29uZGFyeUZvcndhcmQ7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4
dC5nZXQoKSwgImhhcy1iYWNrd2FyZC1zdGVwcGVyIiwgJmhhc0JhY2t3YXJkLCAiaGFzLWZvcndh
cmQtc3RlcHBlciIsICZoYXNGb3J3YXJkLAorICAgICAgICAiaGFzLXNlY29uZGFyeS1iYWNrd2Fy
ZC1zdGVwcGVyIiwgJmhhc1NlY29uZGFyeUJhY2t3YXJkLCAiaGFzLXNlY29uZGFyeS1mb3J3YXJk
LXN0ZXBwZXIiLCAmaGFzU2Vjb25kYXJ5Rm9yd2FyZCwgbnVsbHB0cik7CisgICAgaWYgKGhhc0Jh
Y2t3YXJkKQorICAgICAgICBtX3N0ZXBwZXJzLmFkZChTdGVwcGVyczo6QmFja3dhcmQpOworICAg
IGlmIChoYXNGb3J3YXJkKQorICAgICAgICBtX3N0ZXBwZXJzLmFkZChTdGVwcGVyczo6Rm9yd2Fy
ZCk7CisgICAgaWYgKGhhc1NlY29uZGFyeUJhY2t3YXJkKQorICAgICAgICBtX3N0ZXBwZXJzLmFk
ZChTdGVwcGVyczo6U2Vjb25kYXJ5QmFja3dhcmQpOworICAgIGlmIChoYXNTZWNvbmRhcnlGb3J3
YXJkKQorICAgICAgICBtX3N0ZXBwZXJzLmFkZChTdGVwcGVyczo6U2Vjb25kYXJ5Rm9yd2FyZCk7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OnJlbmRlclN0ZXBwZXIoY2Fp
cm9fdCogY3IsIGNvbnN0IEZsb2F0UmVjdCYgcGFpbnRSZWN0LCBSZW5kZXJUaGVtZUdhZGdldCog
c3RlcHBlckdhZGdldCwgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFN0ZXBwZXJzIHN0ZXBw
ZXIpCit7CisgICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICBzdGVwcGVyR2FkZ2V0LT5y
ZW5kZXIoY3IsIHBhaW50UmVjdCwgJmNvbnRlbnRzUmVjdCk7CisgICAgZG91YmxlIGFuZ2xlOwor
ICAgIHN3aXRjaCAoc3RlcHBlcikgeworICAgIGNhc2UgU3RlcHBlcnM6OkJhY2t3YXJkOgorICAg
IGNhc2UgU3RlcHBlcnM6OlNlY29uZGFyeUJhY2t3YXJkOgorICAgICAgICBhbmdsZSA9IG9yaWVu
dGF0aW9uID09IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCA/IDAgOiAzICogKEdfUEkgLyAyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGVwcGVyczo6Rm9yd2FyZDoKKyAgICBjYXNlIFN0
ZXBwZXJzOjpTZWNvbmRhcnlGb3J3YXJkOgorICAgICAgICBhbmdsZSA9IG9yaWVudGF0aW9uID09
IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCA/IEdfUEkgLyAyIDogR19QSTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaW50IHN0ZXBwZXJTaXplID0gc3RkOjptYXgoY29udGVudHNSZWN0
LndpZHRoKCksIGNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRlcl9hcnJvdyhz
dGVwcGVyR2FkZ2V0LT5jb250ZXh0KCksIGNyLCBhbmdsZSwgY29udGVudHNSZWN0LngoKSArIChj
b250ZW50c1JlY3Qud2lkdGgoKSAtIHN0ZXBwZXJTaXplKSAvIDIsCisgICAgICAgIGNvbnRlbnRz
UmVjdC55KCkgKyAoY29udGVudHNSZWN0LmhlaWdodCgpIC0gc3RlcHBlclNpemUpIC8gMiwgc3Rl
cHBlclNpemUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHYWRnZXQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uNzAzMmZhZmM2MmE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmgKQEAgLTAsMCArMSwx
MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb2xvci5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGbG9hdFJlY3Q7CisKK2NsYXNzIFJlbmRlclRo
ZW1lR2FkZ2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZW5kZXJUaGVtZUdhZGdldCk7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBU
eXBlIHsKKyAgICAgICAgR2VuZXJpYywKKyAgICAgICAgU2Nyb2xsYmFyLAorICAgIH07CisKKyAg
ICBzdHJ1Y3QgSW5mbyB7CisgICAgICAgIFR5cGUgdHlwZTsKKyAgICAgICAgY29uc3QgY2hhciog
bmFtZTsKKyAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBjbGFzc0xpc3Q7CisgICAgfTsKKwor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IGNyZWF0ZShjb25z
dCBJbmZvJiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCA9IG51bGxwdHIsIGNvbnN0IFZlY3Rv
cjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MgPSBWZWN0b3I8UmVuZGVyVGhlbWVH
YWRnZXQ6OkluZm8+KCksIHVuc2lnbmVkIHBvc2l0aW9uID0gMCk7CisgICAgUmVuZGVyVGhlbWVH
YWRnZXQoY29uc3QgSW5mbyYsIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQsIGNvbnN0IFZlY3Rv
cjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVkIHBvc2l0aW9uKTsK
KyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUdhZGdldCgpOworCisgICAgdmlydHVhbCBJbnRTaXpl
IHByZWZlcnJlZFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyKGNhaXJvX3Qq
LCBjb25zdCBGbG9hdFJlY3QmLCBGbG9hdFJlY3QqID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBJ
bnRTaXplIG1pbmltdW1TaXplKCkgY29uc3Q7CisKKyAgICBHdGtCb3JkZXIgY29udGVudHNCb3go
KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcigpIGNvbnN0OworICAgIENvbG9yIGJhY2tncm91bmRD
b2xvcigpIGNvbnN0OworICAgIGRvdWJsZSBvcGFjaXR5KCkgY29uc3Q7CisKKyAgICBHdGtTdHls
ZUNvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKwor
ICAgIEd0a1N0YXRlRmxhZ3Mgc3RhdGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFN0YXRlKEd0a1N0
YXRlRmxhZ3MpOworCitwcm90ZWN0ZWQ6CisgICAgR3RrQm9yZGVyIG1hcmdpbkJveCgpIGNvbnN0
OworICAgIEd0a0JvcmRlciBib3JkZXJCb3goKSBjb25zdDsKKyAgICBHdGtCb3JkZXIgcGFkZGlu
Z0JveCgpIGNvbnN0OworCisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IG1fY29udGV4dDsK
K307CisKK2NsYXNzIFJlbmRlclRoZW1lQm94R2FkZ2V0IGZpbmFsIDogcHVibGljIFJlbmRlclRo
ZW1lR2FkZ2V0IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJUaGVtZUJveEdhZGdldChjb25zdCBSZW5k
ZXJUaGVtZUdhZGdldDo6SW5mbyYsIEd0a09yaWVudGF0aW9uLCBjb25zdCBWZWN0b3I8UmVuZGVy
VGhlbWVHYWRnZXQ6OkluZm8+IGNoaWxkcmVuLCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50ID0g
bnVsbHB0cik7CisKKyAgICBJbnRTaXplIHByZWZlcnJlZFNpemUoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIFJlbmRlclRoZW1lR2FkZ2V0KiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZHJlbltpbmRleF0uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0Pj4gbV9jaGlsZHJlbjsKKyAgICBHdGtP
cmllbnRhdGlvbiBtX29yaWVudGF0aW9uIHsgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwgfTsK
K307CisKK2NsYXNzIFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0IGZpbmFsIDogcHVibGljIFJl
bmRlclRoZW1lR2FkZ2V0IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdl
dChjb25zdCBJbmZvJiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCwgY29uc3QgVmVjdG9yPFJl
bmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywgdW5zaWduZWQgcG9zaXRpb24pOworCisg
ICAgZW51bSBjbGFzcyBTdGVwcGVycyB7CisgICAgICAgIEJhY2t3YXJkID0gMSA8PCAwLAorICAg
ICAgICBGb3J3YXJkID0gMSA8PCAxLAorICAgICAgICBTZWNvbmRhcnlCYWNrd2FyZCA9IDEgPDwg
MiwKKyAgICAgICAgU2Vjb25kYXJ5Rm9yd2FyZCA9IDEgPDwgMworICAgIH07CisgICAgT3B0aW9u
U2V0PFN0ZXBwZXJzPiBzdGVwcGVycygpIGNvbnN0IHsgcmV0dXJuIG1fc3RlcHBlcnM7IH07CisK
KyAgICB2b2lkIHJlbmRlclN0ZXBwZXIoY2Fpcm9fdCosIGNvbnN0IEZsb2F0UmVjdCYsIFJlbmRl
clRoZW1lR2FkZ2V0KiwgR3RrT3JpZW50YXRpb24sIFN0ZXBwZXJzKTsKKworcHJpdmF0ZToKKyAg
ICBPcHRpb25TZXQ8U3RlcHBlcnM+IG1fc3RlcHBlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhl
bWVTY3JvbGxiYXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
U2Nyb2xsYmFyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE2
ZmRiMWQ4Zjc1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZVNjcm9sbGJhci5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1l
U2Nyb2xsYmFyLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBIYXNoTWFw
PHVuc2lnbmVkLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVTY3JvbGxiYXI+PiYgd2lkZ2V0
TWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDx1bnNpZ25lZCwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclRoZW1lU2Nyb2xsYmFyPj4+IG1hcDsKKyAgICByZXR1cm4gbWFw
OworfQorCitSZW5kZXJUaGVtZVNjcm9sbGJhciYgUmVuZGVyVGhlbWVTY3JvbGxiYXI6OmdldE9y
Q3JlYXRlKFR5cGUgd2lkZ2V0VHlwZSkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IHdpZGdldE1h
cCgpLmVuc3VyZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4od2lkZ2V0VHlwZSksIFt3aWRnZXRUeXBl
XSgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZVNjcm9sbGJhcj4geworICAgICAgICBz
d2l0Y2ggKHdpZGdldFR5cGUpIHsKKyAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVNjcm9sbGJhcjo6
VHlwZTo6VmVydGljYWxTY3JvbGxiYXJSaWdodDoKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPFJlbmRlclRoZW1lU2Nyb2xsYmFyPihHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIFJlbmRl
clRoZW1lU2Nyb2xsYmFyOjpNb2RlOjpGdWxsKTsKKyAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVNj
cm9sbGJhcjo6VHlwZTo6VmVydGljYWxTY3JvbGxiYXJMZWZ0OgorICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8UmVuZGVyVGhlbWVTY3JvbGxiYXI+KEdUS19PUklFTlRBVElPTl9WRVJUSUNB
TCwgUmVuZGVyVGhlbWVTY3JvbGxiYXI6Ok1vZGU6OkZ1bGwsIFJlbmRlclRoZW1lU2Nyb2xsYmFy
OjpWZXJ0aWNhbFBvc2l0aW9uOjpMZWZ0KTsKKyAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVNjcm9s
bGJhcjo6VHlwZTo6SG9yaXpvbnRhbFNjcm9sbGJhcjoKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlPFJlbmRlclRoZW1lU2Nyb2xsYmFyPihHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwg
UmVuZGVyVGhlbWVTY3JvbGxiYXI6Ok1vZGU6OkZ1bGwpOworICAgICAgICBjYXNlIFJlbmRlclRo
ZW1lU2Nyb2xsYmFyOjpUeXBlOjpWZXJ0aWNhbFNjcm9sbEluZGljYXRvclJpZ2h0OgorICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVuZGVyVGhlbWVTY3JvbGxiYXI+KEdUS19PUklFTlRB
VElPTl9WRVJUSUNBTCwgUmVuZGVyVGhlbWVTY3JvbGxiYXI6Ok1vZGU6OkluZGljYXRvcik7Cisg
ICAgICAgIGNhc2UgUmVuZGVyVGhlbWVTY3JvbGxiYXI6OlR5cGU6OlZlcnRpY2FsU2Nyb2xsSW5k
aWNhdG9yTGVmdDoKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lU2Ny
b2xsYmFyPihHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpN
b2RlOjpJbmRpY2F0b3IsIFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpWZXJ0aWNhbFBvc2l0aW9uOjpM
ZWZ0KTsKKyAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVNjcm9sbGJhcjo6VHlwZTo6SG9yaXpvbnRh
bFNjcm9sbEluZGljYXRvcjoKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRo
ZW1lU2Nyb2xsYmFyPihHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgUmVuZGVyVGhlbWVTY3Jv
bGxiYXI6Ok1vZGU6OkluZGljYXRvcik7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0pOworICAgIHJldHVybiAq
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVNjcm9sbGJh
cjo6Y2xlYXJDYWNoZSgpCit7CisgICAgd2lkZ2V0TWFwKCkuY2xlYXIoKTsKK30KKworUmVuZGVy
VGhlbWVTY3JvbGxiYXI6OlJlbmRlclRoZW1lU2Nyb2xsYmFyKEd0a09yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBNb2RlIG1vZGUsIFZlcnRpY2FsUG9zaXRpb24gdmVydGljYWxQb3NpdGlvbikKK3sK
KyAgICBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyBpbmZvID0geyBSZW5kZXJUaGVtZUdhZGdldDo6
VHlwZTo6U2Nyb2xsYmFyLCAic2Nyb2xsYmFyIiwgeyB9IH07CisgICAgaWYgKG9yaWVudGF0aW9u
ID09IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCkgeworICAgICAgICBpbmZvLmNsYXNzTGlzdC5h
cHBlbmQoInZlcnRpY2FsIik7CisgICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCh2ZXJ0aWNh
bFBvc2l0aW9uID09IFZlcnRpY2FsUG9zaXRpb246OlJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5mby5jbGFzc0xpc3QuYXBwZW5kKCJob3Jpem9udGFs
Iik7CisgICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgiYm90dG9tIik7CisgICAgfQorICAg
IHN0YXRpYyBib29sIHVzZXNPdmVybGF5U2Nyb2xsYmFycyA9IGdfc3RyY21wMChnX2dldGVudigi
R1RLX09WRVJMQVlfU0NST0xMSU5HIiksICIwIik7CisgICAgaWYgKHVzZXNPdmVybGF5U2Nyb2xs
YmFycykKKyAgICAgICAgaW5mby5jbGFzc0xpc3QuYXBwZW5kKCJvdmVybGF5LWluZGljYXRvciIp
OworICAgIGlmIChtb2RlID09IE1vZGU6OkZ1bGwpCisgICAgICAgIGluZm8uY2xhc3NMaXN0LmFw
cGVuZCgiaG92ZXJpbmciKTsKKyAgICBtX3Njcm9sbGJhciA9IFJlbmRlclRoZW1lR2FkZ2V0Ojpj
cmVhdGUoaW5mbyk7CisKKyAgICBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IGNoaWxk
cmVuOworICAgIGF1dG8gc3RlcHBlcnMgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNjcm9sbGJh
ckdhZGdldCo+KG1fc2Nyb2xsYmFyLmdldCgpKS0+c3RlcHBlcnMoKTsKKyAgICBpZiAoc3RlcHBl
cnMuY29udGFpbnMoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpCYWNrd2Fy
ZCkpIHsKKyAgICAgICAgbV9zdGVwcGVyc1Bvc2l0aW9uWzBdID0gY2hpbGRyZW4uc2l6ZSgpOwor
ICAgICAgICBjaGlsZHJlbi5hcHBlbmQoeyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJp
YywgImJ1dHRvbiIsIHsgInVwIiB9IH0pOworICAgIH0KKyAgICBpZiAoc3RlcHBlcnMuY29udGFp
bnMoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpTZWNvbmRhcnlGb3J3YXJk
KSkgeworICAgICAgICBtX3N0ZXBwZXJzUG9zaXRpb25bMV0gPSBjaGlsZHJlbi5zaXplKCk7Cisg
ICAgICAgIGNoaWxkcmVuLmFwcGVuZCh7IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpHZW5lcmlj
LCAiYnV0dG9uIiwgeyAiZG93biIgfSB9KTsKKyAgICB9CisgICAgbV90cm91Z2hQb3NpdGlvbiA9
IGNoaWxkcmVuLnNpemUoKTsKKyAgICBjaGlsZHJlbi5hcHBlbmQoeyBSZW5kZXJUaGVtZUdhZGdl
dDo6VHlwZTo6R2VuZXJpYywgInRyb3VnaCIsIHsgfSB9KTsKKyAgICBpZiAoc3RlcHBlcnMuY29u
dGFpbnMoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpTZWNvbmRhcnlCYWNr
d2FyZCkpIHsKKyAgICAgICAgbV9zdGVwcGVyc1Bvc2l0aW9uWzJdID0gY2hpbGRyZW4uc2l6ZSgp
OworICAgICAgICBjaGlsZHJlbi5hcHBlbmQoeyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2Vu
ZXJpYywgImJ1dHRvbiIsIHsgInVwIiB9IH0pOworICAgIH0KKyAgICBpZiAoc3RlcHBlcnMuY29u
dGFpbnMoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpGb3J3YXJkKSkgewor
ICAgICAgICBtX3N0ZXBwZXJzUG9zaXRpb25bM10gPSBjaGlsZHJlbi5zaXplKCk7CisgICAgICAg
IGNoaWxkcmVuLmFwcGVuZCh7IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpHZW5lcmljLCAiYnV0
dG9uIiwgeyAiZG93biIgfSB9KTsKKyAgICB9CisgICAgaW5mby50eXBlID0gUmVuZGVyVGhlbWVH
YWRnZXQ6OlR5cGU6OkdlbmVyaWM7CisgICAgaW5mby5uYW1lID0gImNvbnRlbnRzIjsKKyAgICBp
bmZvLmNsYXNzTGlzdC5jbGVhcigpOworICAgIG1fY29udGVudHMgPSBtYWtlVW5pcXVlPFJlbmRl
clRoZW1lQm94R2FkZ2V0PihpbmZvLCBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIGNoaWxkcmVu
LCBtX3Njcm9sbGJhci5nZXQoKSk7CisgICAgaW5mby5uYW1lID0gInNsaWRlciI7CisgICAgbV9z
bGlkZXIgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIG1fY29udGVudHMtPmNoaWxk
KG1fdHJvdWdoUG9zaXRpb24pKTsKK30KKworUmVuZGVyVGhlbWVHYWRnZXQqIFJlbmRlclRoZW1l
U2Nyb2xsYmFyOjpzdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVycyBz
Y3JvbGxiYXJTdGVwcGVyKQoreworICAgIGlmICghc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTY3Jv
bGxiYXJHYWRnZXQqPihtX3Njcm9sbGJhci5nZXQoKSktPnN0ZXBwZXJzKCkuY29udGFpbnMoc2Ny
b2xsYmFyU3RlcHBlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3dpdGNoIChz
Y3JvbGxiYXJTdGVwcGVyKSB7CisgICAgY2FzZSBSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6
U3RlcHBlcnM6OkJhY2t3YXJkOgorICAgICAgICByZXR1cm4gbV9jb250ZW50cy0+Y2hpbGQobV9z
dGVwcGVyc1Bvc2l0aW9uWzBdKTsKKyAgICBjYXNlIFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0
OjpTdGVwcGVyczo6U2Vjb25kYXJ5Rm9yd2FyZDoKKyAgICAgICAgcmV0dXJuIG1fY29udGVudHMt
PmNoaWxkKG1fc3RlcHBlcnNQb3NpdGlvblsxXSk7CisgICAgY2FzZSBSZW5kZXJUaGVtZVNjcm9s
bGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUJhY2t3YXJkOgorICAgICAgICByZXR1cm4g
bV9jb250ZW50cy0+Y2hpbGQobV9zdGVwcGVyc1Bvc2l0aW9uWzJdKTsKKyAgICBjYXNlIFJlbmRl
clRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9yd2FyZDoKKyAgICAgICAgcmV0dXJu
IG1fY29udGVudHMtPmNoaWxkKG1fc3RlcHBlcnNQb3NpdGlvblszXSk7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8g
bmFtZXBzYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZVNjcm9sbGJhci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lU2Nyb2xsYmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwLi5lMmNlMTY4OWExYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVTY3JvbGxiYXIuaApAQCAtMCwwICsxLDY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVH
YWRnZXQuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUmVuZGVyVGhlbWVTY3JvbGxiYXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlclRoZW1lU2Nyb2xsYmFyKTsKK3B1Ymxp
YzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBWZXJ0aWNhbFNjcm9sbGJhclJpZ2h0
ID0gMSwKKyAgICAgICAgVmVydGljYWxTY3JvbGxiYXJMZWZ0LAorICAgICAgICBIb3Jpem9udGFs
U2Nyb2xsYmFyLAorICAgICAgICBWZXJ0aWNhbFNjcm9sbEluZGljYXRvclJpZ2h0LAorICAgICAg
ICBWZXJ0aWNhbFNjcm9sbEluZGljYXRvckxlZnQsCisgICAgICAgIEhvcml6b250YWxTY3JvbGxJ
bmRpY2F0b3IsCisgICAgfTsKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWVTY3JvbGxiYXImIGdldE9y
Q3JlYXRlKFR5cGUpOworICAgIHN0YXRpYyB2b2lkIGNsZWFyQ2FjaGUoKTsKKworICAgIGVudW0g
Y2xhc3MgTW9kZSB7IEZ1bGwsIEluZGljYXRvciB9OworICAgIGVudW0gY2xhc3MgVmVydGljYWxQ
b3NpdGlvbiB7IFJpZ2h0LCBMZWZ0IH07CisgICAgUmVuZGVyVGhlbWVTY3JvbGxiYXIoR3RrT3Jp
ZW50YXRpb24sIE1vZGUsIFZlcnRpY2FsUG9zaXRpb24gPSBWZXJ0aWNhbFBvc2l0aW9uOjpSaWdo
dCk7CisgICAgflJlbmRlclRoZW1lU2Nyb2xsYmFyKCkgPSBkZWZhdWx0OworCisgICAgUmVuZGVy
VGhlbWVHYWRnZXQmIHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuICptX3Njcm9sbGJhcjsgfQor
ICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBjb250ZW50cygpIGNvbnN0IHsgcmV0dXJuICptX2NvbnRl
bnRzOyB9CisgICAgUmVuZGVyVGhlbWVHYWRnZXQmIHNsaWRlcigpIGNvbnN0IHsgcmV0dXJuICpt
X3NsaWRlcjsgfQorICAgIFJlbmRlclRoZW1lR2FkZ2V0JiB0cm91Z2goKSBjb25zdCB7IHJldHVy
biAqbV9jb250ZW50cy0+Y2hpbGQobV90cm91Z2hQb3NpdGlvbik7IH0KKyAgICBSZW5kZXJUaGVt
ZUdhZGdldCogc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnMpOwor
Citwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9zY3Jv
bGxiYXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lQm94R2FkZ2V0PiBtX2NvbnRl
bnRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9zbGlkZXI7Cisg
ICAgdW5zaWduZWQgbV90cm91Z2hQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBtX3N0ZXBwZXJzUG9z
aXRpb25bNF07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhmYzg4OWJjMDg5NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKQEAgLTAs
MCArMSw1NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUd0ay5oIgorCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1N
b3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVTY3JvbGxiYXIuaCIKKyNpbmNsdWRl
ICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSA8Y3N0ZGxp
Yj4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xs
YmFyVGhlbWUmIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCit7CisgICAgc3RhdGljIFNj
cm9sbGJhclRoZW1lR3RrIHRoZW1lOworICAgIHJldHVybiB0aGVtZTsKK30KKworU2Nyb2xsYmFy
VGhlbWVHdGs6On5TY3JvbGxiYXJUaGVtZUd0aygpID0gZGVmYXVsdDsKKworc3RhdGljIHZvaWQg
dGhlbWVDaGFuZ2VkQ2FsbGJhY2soKQoreworICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnRo
ZW1lQ2hhbmdlZCgpOworfQorCitTY3JvbGxiYXJUaGVtZUd0azo6U2Nyb2xsYmFyVGhlbWVHdGso
KQoreworICAgIHN0YXRpYyBib29sIHRoZW1lTW9uaXRvckluaXRpYWxpemVkID0gZmFsc2U7Cisg
ICAgaWYgKCF0aGVtZU1vbml0b3JJbml0aWFsaXplZCkgeworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpLCAibm90aWZ5OjpndGstdGhlbWUtbmFtZSIs
IEdfQ0FMTEJBQ0sodGhlbWVDaGFuZ2VkQ2FsbGJhY2spLCBudWxscHRyKTsKKyAgICAgICAgdGhl
bWVNb25pdG9ySW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICB1cGRhdGVUaGVtZVByb3BlcnRp
ZXMoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnNldFVzZVN5c3RlbUFw
cGVhcmFuY2UoYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlKQoreworICAgIGlmIChtX3VzZVN5c3Rl
bUFwcGVhcmFuY2UgPT0gdXNlU3lzdGVtQXBwZWFyYW5jZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV91c2VTeXN0ZW1BcHBlYXJhbmNlID0gdXNlU3lzdGVtQXBwZWFyYW5jZTsKKworICAgIFJl
bmRlclRoZW1lU2Nyb2xsYmFyOjpjbGVhckNhY2hlKCk7CisgICAgaWYgKG1fdXNlU3lzdGVtQXBw
ZWFyYW5jZSkKKyAgICAgICAgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyVGhlbWVHdGs6OnRoZW1lQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX3VzZVN5c3RlbUFw
cGVhcmFuY2UpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpj
bGVhckNhY2hlKCk7CisgICAgdXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyVGhlbWVHdGs6OnVwZGF0ZVRoZW1lUHJvcGVydGllcygpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQobV91c2VTeXN0ZW1BcHBlYXJhbmNlKTsKKyAgICBhdXRvJiBzY3JvbGxiYXIgPSBzdGF0
aWNfY2FzdDxSZW5kZXJUaGVtZVNjcm9sbGJhciY+KFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpnZXRP
ckNyZWF0ZShSZW5kZXJUaGVtZVNjcm9sbGJhcjo6VHlwZTo6VmVydGljYWxTY3JvbGxiYXJSaWdo
dCkpOworICAgIG1faGFzQmFja0J1dHRvblN0YXJ0UGFydCA9IHNjcm9sbGJhci5zdGVwcGVyKFJl
bmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6QmFja3dhcmQpOworICAgIG1faGFz
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQgPSBzY3JvbGxiYXIuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9s
bGJhckdhZGdldDo6U3RlcHBlcnM6OkZvcndhcmQpOworICAgIG1faGFzQmFja0J1dHRvbkVuZFBh
cnQgPSBzY3JvbGxiYXIuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBl
cnM6OlNlY29uZGFyeUJhY2t3YXJkKTsKKyAgICBtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQg
PSBzY3JvbGxiYXIuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnM6
OlNlY29uZGFyeUZvcndhcmQpOworfQorCitib29sIFNjcm9sbGJhclRoZW1lR3RrOjpoYXNCdXR0
b25zKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQoreworICAgIGlmICghbV91c2VTeXN0ZW1BcHBlYXJh
bmNlKQorICAgICAgICByZXR1cm4gU2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjpoYXNCdXR0b25zKHNj
cm9sbGJhcik7CisKKyAgICByZXR1cm4gc2Nyb2xsYmFyLmVuYWJsZWQoKSAmJiAobV9oYXNCYWNr
QnV0dG9uU3RhcnRQYXJ0IHx8IG1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgbV9oYXNCYWNr
QnV0dG9uRW5kUGFydCB8fCBtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQpOworfQorCitzdGF0
aWMgR3RrU3RhdGVGbGFncyBzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhTY3JvbGxiYXImIHNjcm9s
bGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpCit7CisgICAg
dW5zaWduZWQgc3RhdGVGbGFncyA9IDA7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgY2FzZSBB
bGxQYXJ0czoKKyAgICAgICAgaWYgKCFwYWludGluZyB8fCBzY3JvbGxiYXIuaG92ZXJlZFBhcnQo
KSAhPSBOb1BhcnQpCisgICAgICAgICAgICBzdGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BS
RUxJR0hUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJhY2tUcmFja1BhcnQ6CisgICAgY2Fz
ZSBGb3J3YXJkVHJhY2tQYXJ0OgorICAgICAgICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkg
PT0gQmFja1RyYWNrUGFydCB8fCBzY3JvbGxiYXIuaG92ZXJlZFBhcnQoKSA9PSBGb3J3YXJkVHJh
Y2tQYXJ0KQorICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdI
VDsKKyAgICAgICAgaWYgKHNjcm9sbGJhci5wcmVzc2VkUGFydCgpID09IEJhY2tUcmFja1BhcnQg
fHwgc2Nyb2xsYmFyLnByZXNzZWRQYXJ0KCkgPT0gRm9yd2FyZFRyYWNrUGFydCkKKyAgICAgICAg
ICAgIHN0YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEJhY2tCdXR0b25TdGFydFBhcnQ6CisgICAgY2FzZSBGb3J3YXJkQnV0dG9uU3Rh
cnRQYXJ0OgorICAgIGNhc2UgQmFja0J1dHRvbkVuZFBhcnQ6CisgICAgY2FzZSBGb3J3YXJkQnV0
dG9uRW5kUGFydDoKKyAgICAgICAgaWYgKCgocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8
IHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQpICYmICFzY3JvbGxiYXIuY3VycmVudFBvcygpKQor
ICAgICAgICAgICAgfHwgKChwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgJiYgc2Nyb2xsYmFyLmN1cnJlbnRQb3MoKSA9PSBzY3Jv
bGxiYXIubWF4aW11bSgpKSkgeworICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19JTlNFTlNJVElWRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IEZBTExUSFJPVUdIOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChzY3JvbGxiYXIuaG92ZXJl
ZFBhcnQoKSA9PSBwYXJ0KQorICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxB
R19QUkVMSUdIVDsKKworICAgICAgICBpZiAoc2Nyb2xsYmFyLnByZXNzZWRQYXJ0KCkgPT0gcGFy
dCkKKyAgICAgICAgICAgIHN0YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFn
cz4oc3RhdGVGbGFncyk7Cit9CisKK3N0YXRpYyBSZW5kZXJUaGVtZVNjcm9sbGJhcjo6VHlwZSB3
aWRnZXRUeXBlRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHdGtTdGF0ZUZsYWdz
IHNjcm9sbGJhclN0YXRlKQoreworICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBpZiAoc2Nyb2xsYmFyLnNjcm9sbGFibGVBcmVh
KCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHNjcm9sbGJhclN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQgPyBSZW5k
ZXJUaGVtZVNjcm9sbGJhcjo6VHlwZTo6VmVydGljYWxTY3JvbGxiYXJMZWZ0IDogUmVuZGVyVGhl
bWVTY3JvbGxiYXI6OlR5cGU6OlZlcnRpY2FsU2Nyb2xsSW5kaWNhdG9yTGVmdDsKKyAgICAgICAg
cmV0dXJuIHNjcm9sbGJhclN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQgPyBSZW5kZXJU
aGVtZVNjcm9sbGJhcjo6VHlwZTo6VmVydGljYWxTY3JvbGxiYXJSaWdodCA6IFJlbmRlclRoZW1l
U2Nyb2xsYmFyOjpUeXBlOjpWZXJ0aWNhbFNjcm9sbEluZGljYXRvclJpZ2h0OworICAgIH0KKyAg
ICByZXR1cm4gc2Nyb2xsYmFyU3RhdGUgJiBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVCA/IFJlbmRl
clRoZW1lU2Nyb2xsYmFyOjpUeXBlOjpIb3Jpem9udGFsU2Nyb2xsYmFyIDogUmVuZGVyVGhlbWVT
Y3JvbGxiYXI6OlR5cGU6Okhvcml6b250YWxTY3JvbGxJbmRpY2F0b3I7Cit9CisKK3N0YXRpYyBJ
bnRSZWN0IGNvbnRlbnRzUmVjdGFuZ2xlKFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBSZW5kZXJUaGVt
ZVNjcm9sbGJhciYgc2Nyb2xsYmFyV2lkZ2V0KQoreworICAgIEd0a0JvcmRlciBzY3JvbGxiYXJD
b250ZW50c0JveCA9IHNjcm9sbGJhcldpZGdldC5zY3JvbGxiYXIoKS5jb250ZW50c0JveCgpOwor
ICAgIEd0a0JvcmRlciBjb250ZW50c0NvbnRlbnRzQm94ID0gc2Nyb2xsYmFyV2lkZ2V0LmNvbnRl
bnRzKCkuY29udGVudHNCb3goKTsKKyAgICBHdGtCb3JkZXIgcGFkZGluZzsKKyAgICBwYWRkaW5n
LmxlZnQgPSBzY3JvbGxiYXJDb250ZW50c0JveC5sZWZ0ICsgY29udGVudHNDb250ZW50c0JveC5s
ZWZ0OworICAgIHBhZGRpbmcucmlnaHQgPSBzY3JvbGxiYXJDb250ZW50c0JveC5yaWdodCArIGNv
bnRlbnRzQ29udGVudHNCb3gucmlnaHQ7CisgICAgcGFkZGluZy50b3AgPSBzY3JvbGxiYXJDb250
ZW50c0JveC50b3AgKyBjb250ZW50c0NvbnRlbnRzQm94LnRvcDsKKyAgICBwYWRkaW5nLmJvdHRv
bSA9IHNjcm9sbGJhckNvbnRlbnRzQm94LmJvdHRvbSArIGNvbnRlbnRzQ29udGVudHNCb3guYm90
dG9tOworICAgIEludFJlY3QgY29udGVudHNSZWN0ID0gc2Nyb2xsYmFyLmZyYW1lUmVjdCgpOwor
ICAgIGNvbnRlbnRzUmVjdC5tb3ZlKHBhZGRpbmcubGVmdCwgcGFkZGluZy50b3ApOworICAgIGNv
bnRlbnRzUmVjdC5jb250cmFjdChwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0LCBwYWRkaW5n
LnRvcCArIHBhZGRpbmcuYm90dG9tKTsKKyAgICByZXR1cm4gY29udGVudHNSZWN0OworfQorCitJ
bnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIs
IGJvb2wgcGFpbnRpbmcpCit7CisgICAgaWYgKCFtX3VzZVN5c3RlbUFwcGVhcmFuY2UpCisgICAg
ICAgIHJldHVybiBTY3JvbGxiYXJUaGVtZUFkd2FpdGE6OnRyYWNrUmVjdChzY3JvbGxiYXIsIHBh
aW50aW5nKTsKKworICAgIGF1dG8gc2Nyb2xsYmFyU3RhdGUgPSBzY3JvbGxiYXJQYXJ0U3RhdGVG
bGFncyhzY3JvbGxiYXIsIEFsbFBhcnRzKTsKKyAgICBhdXRvJiBzY3JvbGxiYXJXaWRnZXQgPSBz
dGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNjcm9sbGJhciY+KFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpn
ZXRPckNyZWF0ZSh3aWRnZXRUeXBlRm9yU2Nyb2xsYmFyKHNjcm9sbGJhciwgc2Nyb2xsYmFyU3Rh
dGUpKSk7CisgICAgc2Nyb2xsYmFyV2lkZ2V0LnNjcm9sbGJhcigpLnNldFN0YXRlKHNjcm9sbGJh
clN0YXRlKTsKKworICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRzUmVjdGFuZ2xlKHNjcm9sbGJh
ciwgc2Nyb2xsYmFyV2lkZ2V0KTsKKyAgICBpZiAoYXV0byogYmFja3dhcmRTdGVwcGVyID0gc2Ny
b2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJz
OjpCYWNrd2FyZCkpIHsKKyAgICAgICAgYmFja3dhcmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxi
YXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEJhY2tCdXR0b25TdGFydFBhcnQpKTsKKyAgICAg
ICAgSW50U2l6ZSBzdGVwcGVyU2l6ZSA9IGJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgp
OworICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxi
YXIpIHsKKyAgICAgICAgICAgIHJlY3QubW92ZSgwLCBzdGVwcGVyU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICByZWN0LmNvbnRyYWN0KDAsIHN0ZXBwZXJTaXplLmhlaWdodCgpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlY3QubW92ZShzdGVwcGVyU2l6ZS53aWR0aCgpLCAw
KTsKKyAgICAgICAgICAgIHJlY3QuY29udHJhY3Qoc3RlcHBlclNpemUud2lkdGgoKSwgMCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKGF1dG8qIHNlY29uZGFyeUZvcndhcmRTdGVwcGVyID0g
c2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBw
ZXJzOjpTZWNvbmRhcnlGb3J3YXJkKSkgeworICAgICAgICBzZWNvbmRhcnlGb3J3YXJkU3RlcHBl
ci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0KSk7CisgICAgICAgIEludFNpemUgc3RlcHBlclNpemUgPSBzZWNvbmRhcnlG
b3J3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpOworICAgICAgICBpZiAoc2Nyb2xsYmFyLm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgICAgIHJlY3QubW92
ZSgwLCBzdGVwcGVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICByZWN0LmNvbnRyYWN0KDAs
IHN0ZXBwZXJTaXplLmhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJl
Y3QubW92ZShzdGVwcGVyU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAgICAgICAgIHJlY3QuY29udHJh
Y3Qoc3RlcHBlclNpemUud2lkdGgoKSwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGF1
dG8qIHNlY29uZGFyeUJhY2t3YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVwcGVyKFJl
bmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vjb25kYXJ5QmFja3dhcmQpKSB7
CisgICAgICAgIHNlY29uZGFyeUJhY2t3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFy
dFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5kUGFydCkpOworICAgICAgICBpZiAo
c2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAg
ICByZWN0LmNvbnRyYWN0KDAsIHNlY29uZGFyeUJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6
ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdC5jb250cmFjdChz
ZWNvbmRhcnlCYWNrd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKS53aWR0aCgpLCAwKTsKKyAg
ICB9CisgICAgaWYgKGF1dG8qIGZvcndhcmRTdGVwcGVyID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBw
ZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpGb3J3YXJkKSkgeworICAg
ICAgICBmb3J3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Moc2Ny
b2xsYmFyLCBGb3J3YXJkQnV0dG9uRW5kUGFydCkpOworICAgICAgICBpZiAoc2Nyb2xsYmFyLm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICByZWN0LmNvbnRy
YWN0KDAsIGZvcndhcmRTdGVwcGVyLT5wcmVmZXJyZWRTaXplKCkuaGVpZ2h0KCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZWN0LmNvbnRyYWN0KGZvcndhcmRTdGVwcGVyLT5wcmVmZXJy
ZWRTaXplKCkud2lkdGgoKSwgMCk7CisgICAgfQorCisgICAgaWYgKHNjcm9sbGJhci5vcmllbnRh
dGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLmhl
aWdodCgpIDwgcmVjdC5oZWlnaHQoKSA/IEludFJlY3QoKSA6IHJlY3Q7CisKKyAgICByZXR1cm4g
c2Nyb2xsYmFyLndpZHRoKCkgPCByZWN0LndpZHRoKCkgPyBJbnRSZWN0KCkgOiByZWN0OworfQor
CitJbnRSZWN0IFNjcm9sbGJhclRoZW1lR3RrOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXImIHNj
cm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQoreworICAgIGlmICgh
bV91c2VTeXN0ZW1BcHBlYXJhbmNlKQorICAgICAgICByZXR1cm4gU2Nyb2xsYmFyVGhlbWVBZHdh
aXRhOjpiYWNrQnV0dG9uUmVjdChzY3JvbGxiYXIsIHBhcnQsIHBhaW50aW5nKTsKKworICAgIEFT
U0VSVChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uRW5k
UGFydCk7CisgICAgaWYgKChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0ICYmICFtX2hhc0JhY2tC
dXR0b25FbmRQYXJ0KSB8fCAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0Jh
Y2tCdXR0b25TdGFydFBhcnQpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgYXV0
byBzY3JvbGxiYXJTdGF0ZSA9IHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgQWxs
UGFydHMpOworICAgIGF1dG8mIHNjcm9sbGJhcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRo
ZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhlbWVTY3JvbGxiYXI6OmdldE9yQ3JlYXRlKHdpZGdldFR5
cGVGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyLCBzY3JvbGxiYXJTdGF0ZSkpKTsKKyAgICBzY3JvbGxi
YXJXaWRnZXQuc2Nyb2xsYmFyKCkuc2V0U3RhdGUoc2Nyb2xsYmFyU3RhdGUpOworCisgICAgSW50
UmVjdCByZWN0ID0gY29udGVudHNSZWN0YW5nbGUoc2Nyb2xsYmFyLCBzY3JvbGxiYXJXaWRnZXQp
OworICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpIHsKKyAgICAgICAgYXV0byog
YmFja3dhcmRTdGVwcGVyID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3Jv
bGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpCYWNrd2FyZCk7CisgICAgICAgIEFTU0VSVChiYWNrd2Fy
ZFN0ZXBwZXIpOworICAgICAgICBiYWNrd2FyZFN0ZXBwZXItPnNldFN0YXRlKHNjcm9sbGJhclBh
cnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgQmFja0J1dHRvblN0YXJ0UGFydCkpOworICAgICAgICBy
ZXR1cm4gSW50UmVjdChyZWN0LmxvY2F0aW9uKCksIGJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVk
U2l6ZSgpKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byogc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXIg
PSBzY3JvbGxiYXJXaWRnZXQuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3Rl
cHBlcnM6OlNlY29uZGFyeUZvcndhcmQpKSB7CisgICAgICAgIHNlY29uZGFyeUZvcndhcmRTdGVw
cGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEZvcndhcmRC
dXR0b25TdGFydFBhcnQpKTsKKyAgICAgICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gc2Vjb25k
YXJ5Rm9yd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKKyAgICAgICAgaWYgKHNjcm9sbGJh
ci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgICAgICByZWN0
Lm1vdmUoMCwgcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICByZWN0LmNvbnRy
YWN0KDAsIHByZWZlcnJlZFNpemUuaGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmVjdC5tb3ZlKHByZWZlcnJlZFNpemUud2lkdGgoKSwgMCk7CisgICAgICAgICAgICBy
ZWN0LmNvbnRyYWN0KDAsIHByZWZlcnJlZFNpemUud2lkdGgoKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoYXV0byogc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyID0gc2Nyb2xsYmFyV2lk
Z2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpTZWNvbmRh
cnlCYWNrd2FyZCkpIHsKKyAgICAgICAgc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyLT5zZXRTdGF0
ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0KSk7
CisgICAgICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJh
cikKKyAgICAgICAgICAgIHJlY3QuY29udHJhY3QoMCwgc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVy
LT5wcmVmZXJyZWRTaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZWN0LmNvbnRyYWN0KHNlY29uZGFyeUJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpLndp
ZHRoKCksIDApOworICAgIH0KKworICAgIGF1dG8qIGZvcndhcmRTdGVwcGVyID0gc2Nyb2xsYmFy
V2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpGb3J3
YXJkKTsKKyAgICBBU1NFUlQoZm9yd2FyZFN0ZXBwZXIpOworICAgIGZvcndhcmRTdGVwcGVyLT5z
ZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25F
bmRQYXJ0KSk7CisgICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gZm9yd2FyZFN0ZXBwZXItPnBy
ZWZlcnJlZFNpemUoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWxTY3JvbGxiYXIpCisgICAgICAgIHJlY3QubW92ZSgwLCByZWN0LmhlaWdodCgpIC0gcHJlZmVy
cmVkU2l6ZS5oZWlnaHQoKSk7CisgICAgZWxzZQorICAgICAgICByZWN0Lm1vdmUocmVjdC53aWR0
aCgpIC0gcHJlZmVycmVkU2l6ZS53aWR0aCgpLCAwKTsKKworICAgIHJldHVybiBJbnRSZWN0KHJl
Y3QubG9jYXRpb24oKSwgcHJlZmVycmVkU2l6ZSk7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhl
bWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0IHBhcnQsIGJvb2wgcGFpbnRpbmcpCit7CisgICAgaWYgKCFtX3VzZVN5c3RlbUFwcGVhcmFu
Y2UpCisgICAgICAgIHJldHVybiBTY3JvbGxiYXJUaGVtZUFkd2FpdGE6OmZvcndhcmRCdXR0b25S
ZWN0KHNjcm9sbGJhciwgcGFydCwgcGFpbnRpbmcpOworCisgICAgQVNTRVJUKHBhcnQgPT0gRm9y
d2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0KTsKKyAg
ICBpZiAoKHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAmJiAhbV9oYXNGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0KSB8fCAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCAmJiAhbV9oYXNG
b3J3YXJkQnV0dG9uRW5kUGFydCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBh
dXRvIHNjcm9sbGJhclN0YXRlID0gc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBB
bGxQYXJ0cyk7CisgICAgYXV0byYgc2Nyb2xsYmFyV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVTY3JvbGxiYXImPihSZW5kZXJUaGVtZVNjcm9sbGJhcjo6Z2V0T3JDcmVhdGUod2lkZ2V0
VHlwZUZvclNjcm9sbGJhcihzY3JvbGxiYXIsIHNjcm9sbGJhclN0YXRlKSkpOworICAgIHNjcm9s
bGJhcldpZGdldC5zY3JvbGxiYXIoKS5zZXRTdGF0ZShzY3JvbGxiYXJTdGF0ZSk7CisKKyAgICBJ
bnRSZWN0IHJlY3QgPSBjb250ZW50c1JlY3RhbmdsZShzY3JvbGxiYXIsIHNjcm9sbGJhcldpZGdl
dCk7CisgICAgaWYgKGF1dG8qIGJhY2t3YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVw
cGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6QmFja3dhcmQpKSB7Cisg
ICAgICAgIGJhY2t3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Mo
c2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KSk7CisgICAgICAgIEludFNpemUgcHJlZmVy
cmVkU2l6ZSA9IGJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpOworICAgICAgICBpZiAo
c2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAg
ICAgIHJlY3QubW92ZSgwLCBwcmVmZXJyZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHJl
Y3QuY29udHJhY3QoMCwgcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICByZWN0Lm1vdmUocHJlZmVycmVkU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAg
ICAgICAgIHJlY3QuY29udHJhY3QocHJlZmVycmVkU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChhdXRvKiBzZWNvbmRhcnlGb3J3YXJkU3RlcHBlciA9IHNjcm9s
bGJhcldpZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6
U2Vjb25kYXJ5Rm9yd2FyZCkpIHsKKyAgICAgICAgc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXItPnNl
dFN0YXRlKHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvblN0
YXJ0UGFydCkpOworICAgICAgICBJbnRTaXplIHByZWZlcnJlZFNpemUgPSBzZWNvbmRhcnlGb3J3
YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpOworICAgICAgICBpZiAocGFydCA9PSBGb3J3YXJk
QnV0dG9uU3RhcnRQYXJ0KQorICAgICAgICAgICAgcmV0dXJuIEludFJlY3QocmVjdC5sb2NhdGlv
bigpLCBwcmVmZXJyZWRTaXplKTsKKworICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgICAgIHJlY3QubW92ZSgwLCBwcmVm
ZXJyZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHJlY3QuY29udHJhY3QoMCwgcHJlZmVy
cmVkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZWN0Lm1v
dmUocHJlZmVycmVkU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAgICAgICAgIHJlY3QuY29udHJhY3Qo
cHJlZmVycmVkU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8q
IGZvcndhcmRTdGVwcGVyID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3Jv
bGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpGb3J3YXJkKTsKKyAgICBBU1NFUlQoZm9yd2FyZFN0ZXBw
ZXIpOworICAgIGZvcndhcmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFn
cyhzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0KSk7CisgICAgSW50U2l6ZSBwcmVmZXJy
ZWRTaXplID0gZm9yd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKKyAgICBpZiAoc2Nyb2xs
YmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJlY3QubW92
ZSgwLCByZWN0LmhlaWdodCgpIC0gcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7CisgICAgZWxzZQor
ICAgICAgICByZWN0Lm1vdmUocmVjdC53aWR0aCgpIC0gcHJlZmVycmVkU2l6ZS53aWR0aCgpLCAw
KTsKKworICAgIHJldHVybiBJbnRSZWN0KHJlY3QubG9jYXRpb24oKSwgcHJlZmVycmVkU2l6ZSk7
Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFy
LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCkKK3sKKyAgICBpZiAoIW1fdXNlU3lzdGVtQXBwZWFyYW5jZSkKKyAgICAgICAgcmV0dXJu
IFNjcm9sbGJhclRoZW1lQWR3YWl0YTo6cGFpbnQoc2Nyb2xsYmFyLCBncmFwaGljc0NvbnRleHQs
IGRhbWFnZVJlY3QpOworCisgICAgaWYgKGdyYXBoaWNzQ29udGV4dC5wYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghc2Nyb2xsYmFyLmVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkb3VibGUgb3BhY2l0eSA9IHNjcm9sbGJh
ci5ob3ZlcmVkUGFydCgpID09IE5vUGFydCA/IHNjcm9sbGJhci5vcGFjaXR5KCkgOiAxOworICAg
IGlmICghb3BhY2l0eSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBJbnRSZWN0IHJlY3Qg
PSBzY3JvbGxiYXIuZnJhbWVSZWN0KCk7CisgICAgaWYgKCFyZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byBzY3JvbGxiYXJTdGF0ZSA9
IHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgQWxsUGFydHMsIHRydWUpOworICAg
IGF1dG8mIHNjcm9sbGJhcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFy
Jj4oUmVuZGVyVGhlbWVTY3JvbGxiYXI6OmdldE9yQ3JlYXRlKHdpZGdldFR5cGVGb3JTY3JvbGxi
YXIoc2Nyb2xsYmFyLCBzY3JvbGxiYXJTdGF0ZSkpKTsKKyAgICBhdXRvJiBzY3JvbGxiYXJHYWRn
ZXQgPSBzY3JvbGxiYXJXaWRnZXQuc2Nyb2xsYmFyKCk7CisgICAgc2Nyb2xsYmFyR2FkZ2V0LnNl
dFN0YXRlKHNjcm9sbGJhclN0YXRlKTsKKyAgICBpZiAodXNlc092ZXJsYXlTY3JvbGxiYXJzKCkp
CisgICAgICAgIG9wYWNpdHkgKj0gc2Nyb2xsYmFyR2FkZ2V0Lm9wYWNpdHkoKTsKKyAgICBpZiAo
IW9wYWNpdHkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byYgdHJvdWdoID0gc2Ny
b2xsYmFyV2lkZ2V0LnRyb3VnaCgpOworICAgIHRyb3VnaC5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0
U3RhdGVGbGFncyhzY3JvbGxiYXIsIEJhY2tUcmFja1BhcnQpKTsKKworICAgIGF1dG8qIGJhY2t3
YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFy
R2FkZ2V0OjpTdGVwcGVyczo6QmFja3dhcmQpOworICAgIGlmIChiYWNrd2FyZFN0ZXBwZXIpCisg
ICAgICAgIGJhY2t3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Mo
c2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KSk7CisgICAgYXV0byogc2Vjb25kYXJ5Rm9y
d2FyZFN0ZXBwZXIgPSBzY3JvbGxiYXJXaWRnZXQuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJh
ckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUZvcndhcmQpOworICAgIGlmIChzZWNvbmRhcnlG
b3J3YXJkU3RlcHBlcikKKyAgICAgICAgc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXItPnNldFN0YXRl
KHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFy
dCkpOworICAgIGF1dG8qIHNlY29uZGFyeUJhY2t3YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdl
dC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vjb25kYXJ5
QmFja3dhcmQpOworICAgIGlmIChzZWNvbmRhcnlCYWNrd2FyZFN0ZXBwZXIpCisgICAgICAgIHNl
Y29uZGFyeUJhY2t3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Mo
c2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5kUGFydCkpOworICAgIGF1dG8qIGZvcndhcmRTdGVwcGVy
ID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0
ZXBwZXJzOjpGb3J3YXJkKTsKKyAgICBpZiAoZm9yd2FyZFN0ZXBwZXIpCisgICAgICAgIGZvcndh
cmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEZv
cndhcmRCdXR0b25FbmRQYXJ0KSk7CisKKyAgICBJbnRTaXplIHByZWZlcnJlZFNpemUgPSBzY3Jv
bGxiYXJXaWRnZXQuY29udGVudHMoKS5wcmVmZXJyZWRTaXplKCk7CisgICAgaW50IHRodW1iU2l6
ZSA9IHRodW1iTGVuZ3RoKHNjcm9sbGJhcik7CisgICAgaWYgKHRodW1iU2l6ZSkgeworICAgICAg
ICBzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkuc2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxh
Z3Moc2Nyb2xsYmFyLCBUaHVtYlBhcnQpKTsKKyAgICAgICAgcHJlZmVycmVkU2l6ZSA9IHByZWZl
cnJlZFNpemUuZXhwYW5kZWRUbyhzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkucHJlZmVycmVkU2l6
ZSgpKTsKKyAgICB9CisgICAgcHJlZmVycmVkU2l6ZSArPSBzY3JvbGxiYXJHYWRnZXQucHJlZmVy
cmVkU2l6ZSgpIC0gc2Nyb2xsYmFyR2FkZ2V0Lm1pbmltdW1TaXplKCk7CisKKyAgICBGbG9hdFJl
Y3QgY29udGVudHNSZWN0KHJlY3QpOworICAgIC8vIFdoZW4gdXNpbmcgb3ZlcmxheSBzY3JvbGxi
YXJzIHdlIGFsd2F5cyBjbGFpbSB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyIHdoZW4gaG92ZXJl
ZCwgc28gd2hlbgorICAgIC8vIGRyYXdpbmcgdGhlIGluZGljYXRvciB3ZSBuZWVkIHRvIGFkanVz
dCB0aGUgcmVjdGFuZ2xlIHRvIGl0cyBhY3R1YWwgc2l6ZSBpbiBpbmRpY2F0b3IgbW9kZS4KKyAg
ICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAg
ICAgICAgaWYgKHJlY3Qud2lkdGgoKSAhPSBwcmVmZXJyZWRTaXplLndpZHRoKCkpIHsKKyAgICAg
ICAgICAgIGlmICghc2Nyb2xsYmFyLnNjcm9sbGFibGVBcmVhKCkuc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5t
b3ZlKHN0ZDo6YWJzKHJlY3Qud2lkdGgoKSAtIHByZWZlcnJlZFNpemUud2lkdGgoKSksIDApOwor
ICAgICAgICAgICAgY29udGVudHNSZWN0LnNldFdpZHRoKHByZWZlcnJlZFNpemUud2lkdGgoKSk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocmVjdC5oZWlnaHQoKSAhPSBw
cmVmZXJyZWRTaXplLmhlaWdodCgpKSB7CisgICAgICAgICAgICBjb250ZW50c1JlY3QubW92ZSgw
LCBzdGQ6OmFicyhyZWN0LmhlaWdodCgpIC0gcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSkpOworICAg
ICAgICAgICAgY29udGVudHNSZWN0LnNldEhlaWdodChwcmVmZXJyZWRTaXplLmhlaWdodCgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvcGFjaXR5ICE9IDEpIHsKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNhdmUoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoZGFtYWdl
UmVjdCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpOworICAgIH0KKworICAgIHNjcm9sbGJhckdhZGdldC5yZW5kZXIoZ3JhcGhpY3NDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBjb250ZW50c1JlY3QsICZjb250ZW50c1JlY3Qp
OworICAgIHNjcm9sbGJhcldpZGdldC5jb250ZW50cygpLnJlbmRlcihncmFwaGljc0NvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGNvbnRlbnRzUmVjdCwgJmNvbnRlbnRzUmVjdCk7CisK
KyAgICBpZiAoYmFja3dhcmRTdGVwcGVyKSB7CisgICAgICAgIEZsb2F0UmVjdCBidXR0b25SZWN0
ID0gY29udGVudHNSZWN0OworICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBidXR0b25SZWN0LnNldEhlaWdodChiYWNr
d2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoYmFja3dhcmRTdGVwcGVyLT5wcmVmZXJyZWRT
aXplKCkud2lkdGgoKSk7CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFy
R2FkZ2V0Jj4oc2Nyb2xsYmFyR2FkZ2V0KS5yZW5kZXJTdGVwcGVyKGdyYXBoaWNzQ29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdCwgYmFja3dhcmRTdGVwcGVyLAorICAg
ICAgICAgICAgc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyBH
VEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgUmVu
ZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpCYWNrd2FyZCk7CisgICAgICAgIGlm
IChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAg
ICAgICAgY29udGVudHNSZWN0Lm1vdmUoMCwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7CisgICAgICAg
ICAgICBjb250ZW50c1JlY3QuY29udHJhY3QoMCwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZW50c1JlY3QubW92ZShidXR0b25SZWN0Lndp
ZHRoKCksIDApOworICAgICAgICAgICAgY29udGVudHNSZWN0LmNvbnRyYWN0KGJ1dHRvblJlY3Qu
d2lkdGgoKSwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNlY29uZGFyeUZvcndhcmRT
dGVwcGVyKSB7CisgICAgICAgIEZsb2F0UmVjdCBidXR0b25SZWN0ID0gY29udGVudHNSZWN0Owor
ICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIp
CisgICAgICAgICAgICBidXR0b25SZWN0LnNldEhlaWdodChzZWNvbmRhcnlGb3J3YXJkU3RlcHBl
ci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YnV0dG9uUmVjdC5zZXRXaWR0aChzZWNvbmRhcnlGb3J3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6
ZSgpLndpZHRoKCkpOworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNjcm9sbGJhckdh
ZGdldCY+KHNjcm9sbGJhckdhZGdldCkucmVuZGVyU3RlcHBlcihncmFwaGljc0NvbnRleHQucGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QsIHNlY29uZGFyeUZvcndhcmRTdGVwcGVy
LAorICAgICAgICAgICAgc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxi
YXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRB
TCwgUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpTZWNvbmRhcnlGb3J3YXJk
KTsKKyAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xs
YmFyKSB7CisgICAgICAgICAgICBjb250ZW50c1JlY3QubW92ZSgwLCBidXR0b25SZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5jb250cmFjdCgwLCBidXR0b25SZWN0Lmhl
aWdodCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5tb3Zl
KGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7CisgICAgICAgICAgICBjb250ZW50c1JlY3QuY29udHJh
Y3QoYnV0dG9uUmVjdC53aWR0aCgpLCAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2Vj
b25kYXJ5QmFja3dhcmRTdGVwcGVyKSB7CisgICAgICAgIEZsb2F0UmVjdCBidXR0b25SZWN0ID0g
Y29udGVudHNSZWN0OworICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgICAgIGJ1dHRvblJlY3Quc2V0SGVpZ2h0KHNlY29u
ZGFyeUJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGJ1dHRvblJlY3QubW92ZSgwLCBjb250ZW50c1JlY3QuaGVpZ2h0KCkgLSBidXR0b25SZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1dHRvblJlY3Quc2V0
V2lkdGgoc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyLT5wcmVmZXJyZWRTaXplKCkud2lkdGgoKSk7
CisgICAgICAgICAgICBidXR0b25SZWN0Lm1vdmUoY29udGVudHNSZWN0LndpZHRoKCkgLSBidXR0
b25SZWN0LndpZHRoKCksIDApOworICAgICAgICB9CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lU2Nyb2xsYmFyR2FkZ2V0Jj4oc2Nyb2xsYmFyR2FkZ2V0KS5yZW5kZXJTdGVwcGVyKGdy
YXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdCwgc2Vjb25k
YXJ5QmFja3dhcmRTdGVwcGVyLAorICAgICAgICAgICAgc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJ
RU5UQVRJT05fSE9SSVpPTlRBTCwgUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJz
OjpTZWNvbmRhcnlCYWNrd2FyZCk7CisgICAgICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5jb250cmFj
dCgwLCBidXR0b25SZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29u
dGVudHNSZWN0LmNvbnRyYWN0KGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7CisgICAgfQorICAgIGlm
IChmb3J3YXJkU3RlcHBlcikgeworICAgICAgICBGbG9hdFJlY3QgYnV0dG9uUmVjdCA9IGNvbnRl
bnRzUmVjdDsKKyAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
U2Nyb2xsYmFyKSB7CisgICAgICAgICAgICBidXR0b25SZWN0LnNldEhlaWdodChmb3J3YXJkU3Rl
cHBlci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGJ1dHRvblJlY3Qu
bW92ZSgwLCBjb250ZW50c1JlY3QuaGVpZ2h0KCkgLSBidXR0b25SZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoZm9yd2FyZFN0
ZXBwZXItPnByZWZlcnJlZFNpemUoKS53aWR0aCgpKTsKKyAgICAgICAgICAgIGJ1dHRvblJlY3Qu
bW92ZShjb250ZW50c1JlY3Qud2lkdGgoKSAtIGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7CisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQmPihz
Y3JvbGxiYXJHYWRnZXQpLnJlbmRlclN0ZXBwZXIoZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCBidXR0b25SZWN0LCBmb3J3YXJkU3RlcHBlciwKKyAgICAgICAgICAgIHNj
cm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gR1RLX09SSUVOVEFU
SU9OX1ZFUlRJQ0FMIDogR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIFJlbmRlclRoZW1lU2Ny
b2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9yd2FyZCk7CisgICAgICAgIGlmIChzY3JvbGxiYXIu
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIGNvbnRlbnRz
UmVjdC5jb250cmFjdCgwLCBidXR0b25SZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY29udGVudHNSZWN0LmNvbnRyYWN0KGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7Cisg
ICAgfQorCisgICAgdHJvdWdoLnJlbmRlcihncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIGNvbnRlbnRzUmVjdCwgJmNvbnRlbnRzUmVjdCk7CisKKyAgICBpZiAodGh1bWJT
aXplKSB7CisgICAgICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNj
cm9sbGJhcikgeworICAgICAgICAgICAgY29udGVudHNSZWN0Lm1vdmUoMCwgdGh1bWJQb3NpdGlv
bihzY3JvbGxiYXIpKTsKKyAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5zZXRXaWR0aChzY3JvbGxi
YXJXaWRnZXQuc2xpZGVyKCkucHJlZmVycmVkU2l6ZSgpLndpZHRoKCkpOworICAgICAgICAgICAg
Y29udGVudHNSZWN0LnNldEhlaWdodCh0aHVtYlNpemUpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgY29udGVudHNSZWN0Lm1vdmUodGh1bWJQb3NpdGlvbihzY3JvbGxiYXIpLCAwKTsK
KyAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5zZXRXaWR0aCh0aHVtYlNpemUpOworICAgICAgICAg
ICAgY29udGVudHNSZWN0LnNldEhlaWdodChzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkucHJlZmVy
cmVkU2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGVudHNSZWN0
LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAgICAgICBzY3JvbGxiYXJXaWRnZXQuc2xp
ZGVyKCkucmVuZGVyKGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgY29u
dGVudHNSZWN0KTsKKyAgICB9CisKKyAgICBpZiAob3BhY2l0eSAhPSAxKSB7CisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgICAgICBncmFwaGljc0Nv
bnRleHQucmVzdG9yZSgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitTY3JvbGxi
YXJCdXR0b25QcmVzc0FjdGlvbiBTY3JvbGxiYXJUaGVtZUd0azo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50
LCBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0KQoreworICAgIGlmICghbV91c2VTeXN0ZW1BcHBl
YXJhbmNlKQorICAgICAgICByZXR1cm4gU2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjpoYW5kbGVNb3Vz
ZVByZXNzRXZlbnQoc2Nyb2xsYmFyLCBldmVudCwgcHJlc3NlZFBhcnQpOworCisgICAgZ2Jvb2xl
YW4gd2FycFNsaWRlciA9IEZBTFNFOworICAgIHN3aXRjaCAocHJlc3NlZFBhcnQpIHsKKyAgICBj
YXNlIEJhY2tUcmFja1BhcnQ6CisgICAgY2FzZSBGb3J3YXJkVHJhY2tQYXJ0OgorICAgICAgICBn
X29iamVjdF9nZXQoZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCksCisgICAgICAgICAgICAiZ3Rr
LXByaW1hcnktYnV0dG9uLXdhcnBzLXNsaWRlciIsCisgICAgICAgICAgICAmd2FycFNsaWRlciwg
bnVsbHB0cik7CisgICAgICAgIC8vIFRoZSBzaGlmdCBrZXkgb3IgbWlkZGxlL3JpZ2h0IGJ1dHRv
biByZXZlcnNlcyB0aGUgc2Vuc2UuCisgICAgICAgIGlmIChldmVudC5zaGlmdEtleSgpIHx8IGV2
ZW50LmJ1dHRvbigpICE9IExlZnRCdXR0b24pCisgICAgICAgICAgICB3YXJwU2xpZGVyID0gIXdh
cnBTbGlkZXI7CisgICAgICAgIHJldHVybiB3YXJwU2xpZGVyID8KKyAgICAgICAgICAgIFNjcm9s
bGJhckJ1dHRvblByZXNzQWN0aW9uOjpDZW50ZXJPblRodW1iOgorICAgICAgICAgICAgU2Nyb2xs
YmFyQnV0dG9uUHJlc3NBY3Rpb246OlNjcm9sbDsKKyAgICBjYXNlIFRodW1iUGFydDoKKyAgICAg
ICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uKQorICAgICAgICAgICAgcmV0dXJu
IFNjcm9sbGJhckJ1dHRvblByZXNzQWN0aW9uOjpTdGFydERyYWc7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQmFja0J1dHRvblN0YXJ0UGFydDoKKyAgICBjYXNlIEZvcndhcmRCdXR0b25TdGFy
dFBhcnQ6CisgICAgY2FzZSBCYWNrQnV0dG9uRW5kUGFydDoKKyAgICBjYXNlIEZvcndhcmRCdXR0
b25FbmRQYXJ0OgorICAgICAgICByZXR1cm4gU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246OlNj
cm9sbDsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
U2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246Ok5vbmU7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVt
ZUd0azo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXpl
LCBTY3JvbGxiYXJFeHBhbnNpb25TdGF0ZSBleHBhbnNpb25TdGF0ZSkKK3sKKyAgICBpZiAoIW1f
dXNlU3lzdGVtQXBwZWFyYW5jZSkKKyAgICAgICAgcmV0dXJuIFNjcm9sbGJhclRoZW1lQWR3YWl0
YTo6c2Nyb2xsYmFyVGhpY2tuZXNzKGNvbnRyb2xTaXplLCBleHBhbnNpb25TdGF0ZSk7CisKKyAg
ICBhdXRvJiBzY3JvbGxiYXJXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNjcm9sbGJh
ciY+KFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVNjcm9sbGJh
cjo6VHlwZTo6VmVydGljYWxTY3JvbGxiYXJSaWdodCkpOworICAgIHNjcm9sbGJhcldpZGdldC5z
Y3JvbGxiYXIoKS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19QUkVMSUdIVCk7CisgICAgSW50U2l6
ZSBjb250ZW50c1ByZWZlcnJlZFNpemUgPSBzY3JvbGxiYXJXaWRnZXQuY29udGVudHMoKS5wcmVm
ZXJyZWRTaXplKCk7CisgICAgY29udGVudHNQcmVmZXJyZWRTaXplID0gY29udGVudHNQcmVmZXJy
ZWRTaXplLmV4cGFuZGVkVG8oc2Nyb2xsYmFyV2lkZ2V0LnNsaWRlcigpLnByZWZlcnJlZFNpemUo
KSk7CisgICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gY29udGVudHNQcmVmZXJyZWRTaXplICsg
c2Nyb2xsYmFyV2lkZ2V0LnNjcm9sbGJhcigpLnByZWZlcnJlZFNpemUoKSAtIHNjcm9sbGJhcldp
ZGdldC5zY3JvbGxiYXIoKS5taW5pbXVtU2l6ZSgpOworICAgIHJldHVybiBwcmVmZXJyZWRTaXpl
LndpZHRoKCk7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1iTGVuZ3Ro
KFNjcm9sbGJhciYgc2Nyb2xsYmFyKQoreworICAgIGlmICghbV91c2VTeXN0ZW1BcHBlYXJhbmNl
KQorICAgICAgICByZXR1cm4gU2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjptaW5pbXVtVGh1bWJMZW5n
dGgoc2Nyb2xsYmFyKTsKKworICAgIGF1dG8mIHNjcm9sbGJhcldpZGdldCA9IHN0YXRpY19jYXN0
PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhlbWVTY3JvbGxiYXI6OmdldE9yQ3JlYXRl
KFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpUeXBlOjpWZXJ0aWNhbFNjcm9sbGJhclJpZ2h0KSk7Cisg
ICAgc2Nyb2xsYmFyV2lkZ2V0LnNjcm9sbGJhcigpLnNldFN0YXRlKEdUS19TVEFURV9GTEFHX1BS
RUxJR0hUKTsKKyAgICBJbnRTaXplIG1pblNpemUgPSBzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCku
bWluaW11bVNpemUoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWxTY3JvbGxiYXIgPyBtaW5TaXplLmhlaWdodCgpIDogbWluU2l6ZS53aWR0aCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxiYXJUaGVtZUd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uM2JlMDVhMDY0NmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiU2Nyb2xsYmFyVGhlbWVBZHdhaXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU2Nyb2xsYmFyVGhlbWVHdGsgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVBZHdh
aXRhIHsKK3B1YmxpYzoKKyAgICBTY3JvbGxiYXJUaGVtZUd0aygpOworICAgIHZpcnR1YWwgflNj
cm9sbGJhclRoZW1lR3RrKCk7CisKKyAgICB2b2lkIHNldFVzZVN5c3RlbUFwcGVhcmFuY2UoYm9v
bCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciYpIG92ZXJyaWRl
OworICAgIEludFJlY3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyJiwgU2Nyb2xsYmFyUGFydCwg
Ym9vbCkgb3ZlcnJpZGU7CisgICAgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIm
LCBTY3JvbGxiYXJQYXJ0LCBib29sKSBvdmVycmlkZTsKKyAgICBJbnRSZWN0IHRyYWNrUmVjdChT
Y3JvbGxiYXImLCBib29sKSBvdmVycmlkZTsKKworICAgIGJvb2wgcGFpbnQoU2Nyb2xsYmFyJiwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkgb3ZlcnJpZGU7Cisg
ICAgU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb24gaGFuZGxlTW91c2VQcmVzc0V2ZW50KFNjcm9s
bGJhciYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIFNjcm9sbGJhclBhcnQpIG92ZXJyaWRl
OworICAgIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUsIFNjcm9s
bGJhckV4cGFuc2lvblN0YXRlID0gU2Nyb2xsYmFyRXhwYW5zaW9uU3RhdGU6OkV4cGFuZGVkKSBv
dmVycmlkZTsKKyAgICBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciYpIG92ZXJyaWRl
OworCisgICAgdm9pZCB0aGVtZUNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVRo
ZW1lUHJvcGVydGllcygpOworCisgICAgYm9vbCBtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQg
OiAxOworICAgIGJvb2wgbV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydCA6IDE7CisgICAgYm9vbCBt
X2hhc0JhY2tCdXR0b25TdGFydFBhcnQgOiAxOworICAgIGJvb2wgbV9oYXNCYWNrQnV0dG9uRW5k
UGFydCA6IDE7CisgICAgYm9vbCBtX3VzZVN5c3RlbUFwcGVhcmFuY2UgeyB0cnVlIH07Cit9Owor
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggODc1NWQxYmY1NDNhLi40MjU0ZjUwMTVmZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzggQEAKKzIwMjAtMDMtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEJyaW5nIGJhY2sgc3VwcG9ydCBmb3IgcmVu
ZGVyaW5nIHNjcm9sbGJhcnMgdXNpbmcgdGhlIHN5c3RlbSBhcHBlYXJhbmNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk4MDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0V2ViQ29udGV4
dDp1c2Utc3lzdGVtLWFwcGVhcmFuY2UtZm9yLXNjcm9sbGJhcnMgcHJvcGVydHkuIEl0J3MgZW5h
YmxlZCBieSBkZWZhdWx0IHRvIGtlZXAgYmFja3dhcmRzCisgICAgICAgIGNvbXBhdGliaWxpdHku
CisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSBjb25z
dCk6IEVuY29kZSB1c2VTeXN0ZW1BcHBlYXJhbmNlRm9yU2Nyb2xsYmFycy4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKTogRGVjb2RlIHVzZVN5
c3RlbUFwcGVhcmFuY2VGb3JTY3JvbGxiYXJzLgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb246OmNvcHkpOiBDb3B5IG1fdXNlU3lzdGVtQXBwZWFyYW5jZUZvclNjcm9sbGJhcnM7Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAg
ICh3ZWJraXRXZWJDb250ZXh0R2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0V2ViQ29udGV4
dFNldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3VzZV9zeXN0ZW1fYXBwZWFyYW5jZV9mb3Jfc2Nyb2xsYmFycyk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3VzZV9zeXN0ZW1fYXBwZWFyYW5jZV9mb3Jf
c2Nyb2xsYmFycyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2Vj
dGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NQb29sR0xpYi5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVX
ZWJQcm9jZXNzKTogSW5pdGlhbGl6ZSB1c2VTeXN0ZW1BcHBlYXJhbmNlRm9yU2Nyb2xsYmFycyBw
YXJhbWV0ZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
Z2xpYi9XZWJQcm9jZXNzR0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOiBDYWxsIHNldFVzZVN5c3RlbUFwcGVhcmFuY2VG
b3JTY3JvbGxiYXJzIHRvIHNldAorICAgICAgICB1c2VTeXN0ZW1BcHBlYXJhbmNlRm9yU2Nyb2xs
YmFycyBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnNldFVzZVN5c3Rl
bUFwcGVhcmFuY2VGb3JTY3JvbGxiYXJzKTogQ2FsbCBTY3JvbGxiYXJUaGVtZUd0azo6c2V0VXNl
U3lzdGVtQXBwZWFyYW5jZSgpLgorCiAyMDIwLTAzLTMxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNTg4MjkpOiBbQ29v
cmRpbmF0ZWRHcmFwaGljc10gV2ViIHZpZXcgbm90IHVwZGF0ZWQgYWZ0ZXIgY3Jvc3Mgc2l0ZSBu
YXZpZ2F0aW9uIHdpdGggUFNPTiBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDlkY2ZlOWJhZTg4Mi4u
MDZlNzNkZjliODY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtMTkzLDYgKzE5MywxMCBAQCB2b2lkIFdlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiAgICAgZW5jb2RlciA8PCBwcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZTsKICNlbmRpZgog
I2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCisgICAgZW5jb2RlciA8PCB1c2VTeXN0ZW1BcHBl
YXJhbmNlRm9yU2Nyb2xsYmFyczsKKyNlbmRpZgogfQogCiBib29sIFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFdlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC01MzIsNiArNTM2LDE0IEBAIGJvb2wgV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
V2ViUHJvY2Vzc0NyZWF0CiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorICAg
IE9wdGlvbmFsPGJvb2w+IHVzZVN5c3RlbUFwcGVhcmFuY2VGb3JTY3JvbGxiYXJzOworICAgIGRl
Y29kZXIgPj4gdXNlU3lzdGVtQXBwZWFyYW5jZUZvclNjcm9sbGJhcnM7CisgICAgaWYgKCF1c2VT
eXN0ZW1BcHBlYXJhbmNlRm9yU2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHBhcmFtZXRlcnMudXNlU3lzdGVtQXBwZWFyYW5jZUZvclNjcm9sbGJhcnMgPSBXVEZNb3ZlKCp1
c2VTeXN0ZW1BcHBlYXJhbmNlRm9yU2Nyb2xsYmFycyk7CisjZW5kaWYKKwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgKaW5kZXggMTE2MGQ2YjBmOWYwLi43Njc2NmE4MGU3MDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgK
QEAgLTIzMyw2ICsyMzMsMTAgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMg
ewogICAgIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gcHJlZmVyZW5jZXNFeHRl
bnNpb25IYW5kbGU7CiAjZW5kaWYKICNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIGJv
b2wgdXNlU3lzdGVtQXBwZWFyYW5jZUZvclNjcm9sbGJhcnMgeyBmYWxzZSB9OworI2VuZGlmCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAKaW5kZXggNzJj
Y2VmNTY0ZDE4Li42NDFhYTIxMTZiMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCkBAIC02OCw2
ICs2OCw5IEBAIFJlZjxQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24+IFByb2Nlc3NQb29sQ29uZmln
dXJhdGlvbjo6Y29weSgpCiAgICAgY29weS0+bV91c2VzQmFja0ZvcndhcmRDYWNoZSA9IHRoaXMt
Pm1fdXNlc0JhY2tGb3J3YXJkQ2FjaGU7CiAgICAgY29weS0+bV9jdXN0b21XZWJDb250ZW50U2Vy
dmljZUJ1bmRsZUlkZW50aWZpZXIgPSB0aGlzLT5tX2N1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllcjsKICAgICBjb3B5LT5tX3VzZXNTaW5nbGVXZWJQcm9jZXNzID0gbV91c2Vz
U2luZ2xlV2ViUHJvY2VzczsKKyNpZiBQTEFURk9STShHVEspCisgICAgY29weS0+bV91c2VTeXN0
ZW1BcHBlYXJhbmNlRm9yU2Nyb2xsYmFycyA9IG1fdXNlU3lzdGVtQXBwZWFyYW5jZUZvclNjcm9s
bGJhcnM7CisjZW5kaWYKIAogICAgIHJldHVybiBjb3B5OwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCmlu
ZGV4IDJhN2UzMThlMTRmNS4uNTU2NmI5MjRkYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oCkBAIC0x
MzEsNiArMTMxLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBXVEY6OlN0cmluZyYgY3VzdG9tV2Vi
Q29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21X
ZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXI7IH0KICAgICB2b2lkIHNldEN1c3RvbVdl
YkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihjb25zdCBXVEY6OlN0cmluZyYgY3VzdG9t
V2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKSB7IG1fY3VzdG9tV2ViQ29udGVudFNl
cnZpY2VCdW5kbGVJZGVudGlmaWVyID0gY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVu
dGlmaWVyOyB9CiAKKyNpZiBQTEFURk9STShHVEspCisgICAgYm9vbCB1c2VTeXN0ZW1BcHBlYXJh
bmNlRm9yU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlU3lzdGVtQXBwZWFyYW5jZUZv
clNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNldFVzZVN5c3RlbUFwcGVhcmFuY2VGb3JTY3JvbGxi
YXJzKGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZUZvclNjcm9sbGJhcnMpIHsgbV91c2VTeXN0ZW1B
cHBlYXJhbmNlRm9yU2Nyb2xsYmFycyA9IHVzZVN5c3RlbUFwcGVhcmFuY2VGb3JTY3JvbGxiYXJz
OyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBXVEY6OlN0cmluZyBtX2luamVjdGVkQnVuZGxl
UGF0aDsKICAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fY3VzdG9tQ2xhc3Nlc0ZvclBhcmFtZXRl
ckNvZGVyOwpAQCAtMTU3LDYgKzE2Miw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZENv
bmZpZ3VyZUpTQ0ZvclRlc3RpbmcgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0pJVEVuYWJsZWQg
eyB0cnVlIH07CiAgICAgYm9vbCBtX3VzZXNTaW5nbGVXZWJQcm9jZXNzIHsgZmFsc2UgfTsKKyNp
ZiBQTEFURk9STShHVEspCisgICAgYm9vbCBtX3VzZVN5c3RlbUFwcGVhcmFuY2VGb3JTY3JvbGxi
YXJzIHsgZmFsc2UgfTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3Bw
CmluZGV4IDMzYTliN2Q1YWQwNi4uNGQ4OTQwMDU1NjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMTIwLDcg
KzEyMCw4IEBAIGVudW0gewogI2VuZGlmCiAgICAgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUiwK
ICNpZiBQTEFURk9STShHVEspCi0gICAgUFJPUF9QU09OX0VOQUJMRUQKKyAgICBQUk9QX1BTT05f
RU5BQkxFRCwKKyAgICBQUk9QX1VTRV9TWVNZRU1fQVBQRUFSQU5DRV9GT1JfU0NST0xMQkFSUwog
I2VuZGlmCiB9OwogCkBAIC0yMDQsNiArMjA1LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0
UHJpdmF0ZSB7CiAgICAgYm9vbCBjbGllbnRzRGV0YWNoZWQ7CiAjaWYgUExBVEZPUk0oR1RLKQog
ICAgIGJvb2wgcHNvbkVuYWJsZWQ7CisgICAgYm9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlRm9yU2Ny
b2xsYmFyczsKICNlbmRpZgogCiAgICAgR1JlZlB0cjxXZWJLaXRGYXZpY29uRGF0YWJhc2U+IGZh
dmljb25EYXRhYmFzZTsKQEAgLTMzMyw2ICszMzUsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJD
b250ZXh0R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSog
dgogICAgIGNhc2UgUFJPUF9QU09OX0VOQUJMRUQ6CiAgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIGNvbnRleHQtPnByaXYtPnBzb25FbmFibGVkKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1VTRV9TWVNZRU1fQVBQRUFSQU5DRV9GT1JfU0NST0xMQkFSUzoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X3dlYl9jb250ZXh0X2dldF91c2Vf
c3lzdGVtX2FwcGVhcmFuY2VfZm9yX3Njcm9sbGJhcnMoY29udGV4dCkpOworICAgICAgICBicmVh
azsKICNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFyYW1TcGVjKTsKQEAgLTM1OCw2ICszNjMsOSBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wSUQsIGNvbnN0IEdWYQogICAgIGNhc2UgUFJPUF9QU09OX0VOQUJMRUQ6CiAg
ICAgICAgIGNvbnRleHQtPnByaXYtPnBzb25FbmFibGVkID0gZ192YWx1ZV9nZXRfYm9vbGVhbih2
YWx1ZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VfU1lTWUVNX0FQUEVBUkFO
Q0VfRk9SX1NDUk9MTEJBUlM6CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfdXNlX3N5
c3RlbV9hcHBlYXJhbmNlX2Zvcl9zY3JvbGxiYXJzKGNvbnRleHQsIGdfdmFsdWVfZ2V0X2Jvb2xl
YW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFt
U3BlYyk7CkBAIC0zNzcsNiArMzg1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dENv
bnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICBjb25maWd1cmF0aW9uLnNldEluamVjdGVk
QnVuZGxlUGF0aChGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGJ1bmRsZUZpbGVuYW1lLmdldCgpKSk7CiAjaWYgUExBVEZPUk0oR1RLKQogICAgIGNvbmZpZ3Vy
YXRpb24uc2V0UHJvY2Vzc1N3YXBzT25OYXZpZ2F0aW9uKHByaXYtPnBzb25FbmFibGVkKTsKKyAg
ICBjb25maWd1cmF0aW9uLnNldFVzZVN5c3RlbUFwcGVhcmFuY2VGb3JTY3JvbGxiYXJzKHByaXYt
PnVzZVN5c3RlbUFwcGVhcmFuY2VGb3JTY3JvbGxiYXJzKTsKICNlbmRpZgogCiAgICAgaWYgKCFw
cml2LT53ZWJzaXRlRGF0YU1hbmFnZXIpCkBAIC01MTksNiArNTI4LDI3IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfY29udGV4dF9jbGFzc19pbml0KFdlYktpdFdlYkNvbnRleHRDbGFzcyogd2Vi
Q29udGV4dENsYXNzCiAgICAgICAgICAgICBfKCJXaGV0aGVyIHN3YXAgV2ViIHByb2Nlc3NlcyBv
biBjcm9zcy1zaXRlIG5hdmlnYXRpb25zIGlzIGVuYWJsZWQiKSwKICAgICAgICAgICAgIEZBTFNF
LAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2Vi
S2l0V2ViQ29udGV4dDp1c2Utc3lzdGVtLWFwcGVhcmFuY2UtZm9yLXNjcm9sbGJhcnM6CisgICAg
ICoKKyAgICAgKiBXaGV0aGVyIHRvIHVzZSBzeXN0ZW0gYXBwZWFyYW5jZSBmb3IgcmVuZGVyaW5n
IHNjcm9sbGJhcnMuCisgICAgICoKKyAgICAgKiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBm
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dCBpdCdzIG9ubHkKKyAgICAgKiByZWNvbW1l
bmVkIHRvIHVzZSB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpbmNsdWRlcyBvdGhlciB3aWRnZXRzIHRv
IGVuc3VyZQorICAgICAqIGNvbnNpc3RlbmN5LCBvciB3aGVuIGNvbnNpc3RlbmN5IHdpdGggb3Ro
ZXIgYXBwbGljYXRpb25zIGlzIHJlcXVpcmVkIHRvby4KKyAgICAgKgorICAgICAqIFNpbmNlOiAy
LjMwCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ09iamVjdENsYXNzLAorICAgICAgICBQUk9QX1VTRV9TWVNZRU1fQVBQRUFSQU5DRV9GT1Jf
U0NST0xMQkFSUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAi
dXNlLXN5c3RlbS1hcHBlYXJhbmNlLWZvci1zY3JvbGxiYXJzIiwKKyAgICAgICAgICAgIF8oIlVz
ZSBzeXN0ZW0gYXBwZWFyYW5jZSBmb3Igc2Nyb2xsYmFycyIpLAorICAgICAgICAgICAgXygiV2hl
dGhlciB0byB1c2Ugc3lzdGVtIGFwcGVhcmFuY2UgZm9yIHJlbmRlcmluZyBzY3JvbGxiYXJzIiks
CisgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+
KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCkpKTsKICNlbmRpZgog
CiAgICAgLyoqCkBAIC0xNzU1LDYgKzE3ODUsNTEgQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRf
c2VuZF9tZXNzYWdlX3RvX2FsbF9leHRlbnNpb25zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQK
ICAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2VuZE1lc3NhZ2VU
b1dlYkV4dGVuc2lvbih3ZWJraXRVc2VyTWVzc2FnZUdldE1lc3NhZ2UobWVzc2FnZSkpLCAwKTsK
IH0KIAorI2lmIFBMQVRGT1JNKEdUSykKKy8qKgorICogd2Via2l0X3dlYl9jb250ZXh0X3NldF91
c2Vfc3lzdGVtX2FwcGVhcmFuY2VfZm9yX3Njcm9sbGJhcnM6CisgKiBAY29udGV4dDogYSAjV2Vi
S2l0V2ViQ29udGV4dAorICogQGVuYWJsZWQ6IHZhbHVlIHRvIHNldAorICoKKyAqIFNldCB0aGUg
I1dlYktpdFdlYkNvbnRleHQ6dXNlLXN5c3RlbS1hcHBlYXJhbmNlLWZvci1zY3JvbGxiYXJzIHBy
b3BlcnR5LgorICoKKyAqIFNpbmNlOiAyLjMwCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9jb250ZXh0
X3NldF91c2Vfc3lzdGVtX2FwcGVhcmFuY2VfZm9yX3Njcm9sbGJhcnMoV2ViS2l0V2ViQ29udGV4
dCogY29udGV4dCwgZ2Jvb2xlYW4gZW5hYmxlZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CisKKyAgICBpZiAoY29udGV4dC0+cHJpdi0+
dXNlU3lzdGVtQXBwZWFyYW5jZUZvclNjcm9sbGJhcnMgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29udGV4dC0+cHJpdi0+dXNlU3lzdGVtQXBwZWFyYW5jZUZvclNjcm9sbGJh
cnMgPSBlbmFibGVkOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChjb250ZXh0KSwgInVz
ZS1zeXN0ZW0tYXBwZWFyYW5jZS1mb3Itc2Nyb2xsYmFycyIpOworCisgICAgaWYgKCFjb250ZXh0
LT5wcml2LT5wcm9jZXNzUG9vbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+cHJp
di0+cHJvY2Vzc1Bvb2wtPmNvbmZpZ3VyYXRpb24oKS5zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlRm9y
U2Nyb2xsYmFycyhlbmFibGVkKTsKKyAgICBjb250ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRVc2VTeXN0ZW1BcHBlYXJh
bmNlRm9yU2Nyb2xsYmFycyhlbmFibGVkKSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9jb250
ZXh0X2dldF91c2Vfc3lzdGVtX2FwcGVhcmFuY2VfZm9yX3Njcm9sbGJhcnM6CisgKiBAY29udGV4
dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICoKKyAqIEdldCB0aGUgI1dlYktpdFdlYkNvbnRleHQ6
dXNlLXN5c3RlbS1hcHBlYXJhbmNlLWZvci1zY3JvbGxiYXJzIHByb3BlcnR5LgorICoKKyAqIFJl
dHVybnM6ICVUUlVFIGlmIHNjcm9sbGJhcnMgYXJlIHJlbmRlcmluZyB1c2luZyB0aGUgc3lzdGVt
IGFwcGVhcmFuY2UsIG9yICVGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBTaW5jZTogMi4zMAorICov
CitnYm9vbGVhbiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3VzZV9zeXN0ZW1fYXBwZWFyYW5jZV9m
b3Jfc2Nyb2xsYmFycyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgVFJVRSk7CisKKyAg
ICByZXR1cm4gY29udGV4dC0+cHJpdi0+dXNlU3lzdGVtQXBwZWFyYW5jZUZvclNjcm9sbGJhcnM7
Cit9CisjZW5kaWYKKwogdm9pZCB3ZWJraXRXZWJDb250ZXh0SW5pdGlhbGl6ZU5vdGlmaWNhdGlv
blBlcm1pc3Npb25zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgZ19zaWduYWxf
ZW1pdChjb250ZXh0LCBzaWduYWxzW0lOSVRJQUxJWkVfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05T
XSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Q29udGV4dC5oCmluZGV4IDRkYTljZTdkOTFmMi4uZDIwNmYzMDYzM2ViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaApAQCAtMzI0
LDYgKzMyNCwxMyBAQCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF93ZWJfY29udGV4dF9zZW5kX21l
c3NhZ2VfdG9fYWxsX2V4dGVuc2lvbnMgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAg
KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYktpdFVzZXJNZXNzYWdlICAgICAgICAgICAgICptZXNzYWdlKTsKIAorV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3VzZV9zeXN0ZW1fYXBwZWFyYW5jZV9m
b3Jfc2Nyb2xsYmFycyAoV2ViS2l0V2ViQ29udGV4dCAgICAgICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29s
ZWFuICAgICAgICAgICAgICAgZW5hYmxlZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF93ZWJfY29udGV4dF9nZXRfdXNlX3N5c3RlbV9hcHBlYXJhbmNlX2Zvcl9zY3JvbGxiYXJzIChX
ZWJLaXRXZWJDb250ZXh0ICAgICAgKmNvbnRleHQpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLTQuMC1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CmluZGV4IDNkNzY5OTBmYzg2OS4uMWJjNDI3
MGM5ZjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTcxLDYgKzcxLDgg
QEAgd2Via2l0X3dlYl9jb250ZXh0X2dldF9wcm9jZXNzX21vZGVsCiB3ZWJraXRfd2ViX2NvbnRl
eHRfc2V0X3Byb2Nlc3NfbW9kZWwKIHdlYmtpdF93ZWJfY29udGV4dF9pbml0aWFsaXplX25vdGlm
aWNhdGlvbl9wZXJtaXNzaW9ucwogd2Via2l0X3dlYl9jb250ZXh0X3NlbmRfbWVzc2FnZV90b19h
bGxfZXh0ZW5zaW9ucword2Via2l0X3dlYl9jb250ZXh0X3NldF91c2Vfc3lzdGVtX2FwcGVhcmFu
Y2VfZm9yX3Njcm9sbGJhcnMKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfdXNlX3N5c3RlbV9hcHBl
YXJhbmNlX2Zvcl9zY3JvbGxiYXJzCiAKIDxTVUJTRUNUSU9OIFVSSSBTY2hlbWU+CiBXZWJLaXRV
UklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2dsaWIvV2ViUHJvY2Vzc1Bvb2xHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2dsaWIvV2ViUHJvY2Vzc1Bvb2xHTGliLmNwcAppbmRleCAxODBmMzkyYTM5YzMuLjhjNDI1OWJl
MWM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNz
UG9vbEdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvV2ViUHJvY2Vz
c1Bvb2xHTGliLmNwcApAQCAtMTM1LDYgKzEzNSwxMCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NQcm94eSYgcHJvY2Vz
cwogI2lmIFVTRShHU1RSRUFNRVIpCiAgICAgcGFyYW1ldGVycy5nc3RyZWFtZXJPcHRpb25zID0g
V2ViQ29yZTo6ZXh0cmFjdEdTdHJlYW1lck9wdGlvbnNGcm9tQ29tbWFuZExpbmUoKTsKICNlbmRp
ZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHBhcmFtZXRlcnMudXNlU3lzdGVtQXBwZWFyYW5j
ZUZvclNjcm9sbGJhcnMgPSBtX2NvbmZpZ3VyYXRpb24tPnVzZVN5c3RlbUFwcGVhcmFuY2VGb3JT
Y3JvbGxiYXJzKCk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRl
eCA5M2UxZWQ5ODMzYTUuLmI0N2E1ZGI4NWVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5oCkBAIC01MDMsNiArNTAzLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZW5kTWVz
c2FnZVRvV2ViRXh0ZW5zaW9uKFVzZXJNZXNzYWdlJiYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShHVEspCisgICAgdm9pZCBzZXRVc2VTeXN0ZW1BcHBlYXJhbmNlRm9yU2Nyb2xsYmFycyhib29s
KTsKKyNlbmRpZgorCiAgICAgYm9vbCBpc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSB7IHJldHVy
biBtX3Nlc3Npb25JRCA/IG1fc2Vzc2lvbklELT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSA6
IHRydWU7IH0KIAogICAgIFJlZlB0cjxXZWJDb25uZWN0aW9uVG9VSVByb2Nlc3M+IG1fd2ViQ29u
bmVjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KaW5kZXggYWJhYTljMzlhNjRmLi41ZDNkMGE0ZDAwNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNzMsNCArMTczLDgg
QEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciBOb3RSZWZDb3VudGVkIHsK
ICAgICBVbmJsb2NrUHJlZmVyZW5jZVNlcnZpY2UoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgaGFuZGxlKQogI2VuZGlmCiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBT
ZXRVc2VTeXN0ZW1BcHBlYXJhbmNlRm9yU2Nyb2xsYmFycyhib29sIHVzZVN5c3RlbUFwcGVhcmFu
Y2VGb3JTY3JvbGxiYXJzKQorI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzR0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvZ2xpYi9XZWJQcm9jZXNzR0xpYi5jcHAKaW5kZXggMDA3ZjA0NGQzOWE1Li42MzNkNzhkZmRh
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9nbGliL1dlYlByb2Nlc3NH
TGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvZ2xpYi9XZWJQcm9jZXNzR0xp
Yi5jcHAKQEAgLTQ2LDYgKzQ2LDEwIEBACiAjaW5jbHVkZSA8d3BlL3dwZS5oPgogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZUd0ay5o
PgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTg5LDYgKzkzLDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXpl
V2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhCiAjaWYgVVNFKEdT
VFJFQU1FUikKICAgICBXZWJDb3JlOjppbml0aWFsaXplR1N0cmVhbWVyKFdURk1vdmUocGFyYW1l
dGVycy5nc3RyZWFtZXJPcHRpb25zKSk7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAg
ICBzZXRVc2VTeXN0ZW1BcHBlYXJhbmNlRm9yU2Nyb2xsYmFycyhwYXJhbWV0ZXJzLnVzZVN5c3Rl
bUFwcGVhcmFuY2VGb3JTY3JvbGxiYXJzKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYlByb2Nlc3M6
OnBsYXRmb3JtU2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMoV2ViUHJvY2Vzc0RhdGFTdG9y
ZVBhcmFtZXRlcnMmJikKQEAgLTEwNSw0ICsxMTMsMTEgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZW5k
TWVzc2FnZVRvV2ViRXh0ZW5zaW9uKFVzZXJNZXNzYWdlJiYgbWVzc2FnZSkKICAgICAgICAgd2Vi
a2l0V2ViRXh0ZW5zaW9uRGlkUmVjZWl2ZVVzZXJNZXNzYWdlKGV4dGVuc2lvbiwgV1RGTW92ZSht
ZXNzYWdlKSk7CiB9CiAKKyNpZiBQTEFURk9STShHVEspCit2b2lkIFdlYlByb2Nlc3M6OnNldFVz
ZVN5c3RlbUFwcGVhcmFuY2VGb3JTY3JvbGxiYXJzKGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZUZv
clNjcm9sbGJhcnMpCit7CisgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVHdGsmPihTY3Jv
bGxiYXJUaGVtZTo6dGhlbWUoKSkuc2V0VXNlU3lzdGVtQXBwZWFyYW5jZSh1c2VTeXN0ZW1BcHBl
YXJhbmNlRm9yU2Nyb2xsYmFycyk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTlm
NDJmOTQ2NmZjLi5kNzRhNDc4ZDNjY2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wMy0zMSAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnJpbmcg
YmFjayBzdXBwb3J0IGZvciByZW5kZXJpbmcgc2Nyb2xsYmFycyB1c2luZyB0aGUgc3lzdGVtIGFw
cGVhcmFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwOTgwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERvIG5vdCB1c2Ugc3lzdGVtIGFwcGVhcmFuY2UgZm9yIHNjcm9sbGJhcnMgaW4gTWluaUJyb3dz
ZXIgYW5kIHVuaXQgdGVzdHMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9ndGsvbWFpbi5jOgor
ICAgICAgICAobWFpbik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIv
VGVzdE1haW4uaDoKKyAgICAgICAgKFRlc3Q6OlRlc3QpOgorCiAyMDIwLTAzLTMwICBQZW5nIExp
dSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgUGlQIHN1cHBvcnQgb2YgTWluaUJy
b3dzZXIgaXMgYnJva2VuCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5j
IGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwppbmRleCA0YzUxNDdkY2QzOGEuLjkyYzlh
NDMzYzY0ZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYworKysgYi9U
b29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCkBAIC01NDIsNyArNTQyLDggQEAgaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAgICB9CiAKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKm1hbmFnZXIgPSAocHJpdmF0ZU1vZGUgfHwgYXV0b21hdGlvbk1vZGUpID8gd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ld19lcGhlbWVyYWwoKSA6IHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9uZXcoTlVMTCk7Ci0gICAgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCA9
IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQ09OVEVYVCwgIndlYnNpdGUtZGF0YS1tYW5h
Z2VyIiwgbWFuYWdlciwgInByb2Nlc3Mtc3dhcC1vbi1jcm9zcy1zaXRlLW5hdmlnYXRpb24tZW5h
YmxlZCIsIFRSVUUsIE5VTEwpOworICAgIFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQgPSBn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsICJ3ZWJzaXRlLWRhdGEtbWFuYWdl
ciIsIG1hbmFnZXIsICJwcm9jZXNzLXN3YXAtb24tY3Jvc3Mtc2l0ZS1uYXZpZ2F0aW9uLWVuYWJs
ZWQiLCBUUlVFLAorICAgICAgICAidXNlLXN5c3RlbS1hcHBlYXJhbmNlLWZvci1zY3JvbGxiYXJz
IiwgRkFMU0UsIE5VTEwpOwogICAgIGdfb2JqZWN0X3VucmVmKG1hbmFnZXIpOwogCiAgICAgaWYg
KGNvb2tpZXNQb2xpY3kpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9X
ZWJLaXRHTGliL1Rlc3RNYWluLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xp
Yi9UZXN0TWFpbi5oCmluZGV4IGYwZDg4MGVmY2QwZC4uYjg3MDQ4OWQ2YzI4IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9UZXN0TWFpbi5oCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL1Rlc3RNYWluLmgKQEAgLTEzMyw2ICsx
MzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAid2Vic2l0ZS1kYXRhLW1hbmFnZXIiLCB3ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCksCiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICAgICAgInBy
b2Nlc3Mtc3dhcC1vbi1jcm9zcy1zaXRlLW5hdmlnYXRpb24tZW5hYmxlZCIsIFRSVUUsCisgICAg
ICAgICAgICAidXNlLXN5c3RlbS1hcHBlYXJhbmNlLWZvci1zY3JvbGxiYXJzIiwgRkFMU0UsCiAj
ZW5kaWYKICAgICAgICAgICAgIG51bGxwdHIpKSk7CiAgICAgICAgIGFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV93ZWJDb250ZXh0LmdldCgpKSk7Cg==
</data>
<flag name="review"
          id="410446"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>