<?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>89837</bug_id>
          
          <creation_ts>2012-06-24 17:07:30 -0700</creation_ts>
          <short_desc>[WK2][Qt][EFL] Extract common code from LayerTreeHostQt</short_desc>
          <delta_ts>2012-06-25 20:41:51 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>89840</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="YoungTaeck Song">youngtaeck.song</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>seojin.kim</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>656270</commentid>
    <comment_count>0</comment_count>
    <who name="YoungTaeck Song">youngtaeck.song</who>
    <bug_when>2012-06-24 17:07:30 -0700</bug_when>
    <thetext>Extract common code from LayerTreeHostQt to be used by both Qt and Efl.
Because Extracted codes use WebGraphicsLayer, these are named &apos;LayerTreeHostWeb&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656271</commentid>
    <comment_count>1</comment_count>
      <attachid>149209</attachid>
    <who name="YoungTaeck Song">youngtaeck.song</who>
    <bug_when>2012-06-24 17:11:06 -0700</bug_when>
    <thetext>Created attachment 149209
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656356</commentid>
    <comment_count>2</comment_count>
      <attachid>149231</attachid>
    <who name="YoungTaeck Song">youngtaeck.song</who>
    <bug_when>2012-06-24 20:39:21 -0700</bug_when>
    <thetext>Created attachment 149231
patch

rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656368</commentid>
    <comment_count>3</comment_count>
      <attachid>149231</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-24 21:23:31 -0700</bug_when>
    <thetext>Comment on attachment 149231
patch

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

LayerTreeHostWeb doesn&apos;t fit with the rest of the names around.
How about we create a LayerTreeCoordinator directory under WebProcess/WebPage, and also move WebGraphicsLayer under that directory? We should rename LayerTreeHostProxy to LayerTreeCoordinatorProxy while we&apos;re at it.

&gt; Source/WebKit2/WebProcess/WebPage/web/qt/LayerTreeHostQt.h:38
&gt; +class LayerTreeHostQt : public LayerTreeHostWeb {
&gt; +public:
&gt; +    static PassRefPtr&lt;LayerTreeHostQt&gt; create(WebPage*);
&gt; +    virtual ~LayerTreeHostQt();
&gt; +
&gt; +    virtual int64_t directlyCompositedImageKey(WebCore::Image*);
&gt; +
&gt; +private:
&gt; +    explicit LayerTreeHostQt(WebPage*);
&gt; +};

Virtualizing for this seems like an overkill... I&apos;d rather have non-virtual functions, and implement directlyCompositedImageKey inside a platform-specific #ifdef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656480</commentid>
    <comment_count>4</comment_count>
      <attachid>149275</attachid>
    <who name="YoungTaeck Song">youngtaeck.song</who>
    <bug_when>2012-06-25 04:38:44 -0700</bug_when>
    <thetext>Created attachment 149275
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656484</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-25 04:41:51 -0700</bug_when>
    <thetext>Attachment 149275 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.cpp:459:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/WebProcess/WebPage/LayerTreeCoordinator/WebGraphicsLayer.h:78:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656487</commentid>
    <comment_count>6</comment_count>
      <attachid>149275</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-25 04:42:05 -0700</bug_when>
    <thetext>Comment on attachment 149275
patch

Attachment 149275 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13097077</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656491</commentid>
    <comment_count>7</comment_count>
      <attachid>149276</attachid>
    <who name="YoungTaeck Song">youngtaeck.song</who>
    <bug_when>2012-06-25 04:49:06 -0700</bug_when>
    <thetext>Created attachment 149276
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656492</commentid>
    <comment_count>8</comment_count>
      <attachid>149276</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-06-25 04:52:44 -0700</bug_when>
    <thetext>Comment on attachment 149276
patch

To make this refactor more simple, I think you should do the renames of the classes first, then the move and then extract the code. It will be less horrible to review and easier to rollout if needed as it will be simple patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656493</commentid>
    <comment_count>9</comment_count>
      <attachid>149276</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-25 04:55:24 -0700</bug_when>
    <thetext>Comment on attachment 149276
patch

Attachment 149276 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13088165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656503</commentid>
    <comment_count>10</comment_count>
      <attachid>149277</attachid>
    <who name="YoungTaeck Song">youngtaeck.song</who>
    <bug_when>2012-06-25 05:34:17 -0700</bug_when>
    <thetext>Created attachment 149277
patch

fix build error of EFL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656508</commentid>
    <comment_count>11</comment_count>
      <attachid>149277</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-06-25 05:43:29 -0700</bug_when>
    <thetext>Comment on attachment 149277
patch

Attachment 149277 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13090134</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656510</commentid>
    <comment_count>12</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-06-25 05:55:00 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 149277 [details])
&gt; Attachment 149277 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/13090134

And you would not fight that much with EWS :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656511</commentid>
    <comment_count>13</comment_count>
    <who name="YoungTaeck Song">youngtaeck.song</who>
    <bug_when>2012-06-25 06:03:12 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (From update of attachment 149277 [details] [details])
&gt; &gt; Attachment 149277 [details] [details] did not pass gtk-ews (gtk):
&gt; &gt; Output: http://queues.webkit.org/results/13090134
&gt; 
&gt; And you would not fight that much with EWS :).

I&apos;m very sorry. I thought My patch would not affect to a different port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656520</commentid>
    <comment_count>14</comment_count>
      <attachid>149277</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-25 06:24:41 -0700</bug_when>
    <thetext>Comment on attachment 149277
patch

Looks great! Though the GTK build files need to be updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656804</commentid>
    <comment_count>15</comment_count>
      <attachid>149277</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-25 13:07:45 -0700</bug_when>
    <thetext>Comment on attachment 149277
patch

Need to fix build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657005</commentid>
    <comment_count>16</comment_count>
    <who name="YoungTaeck Song">youngtaeck.song</who>
    <bug_when>2012-06-25 16:43:11 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 149277 [details])
&gt; Need to fix build issues.

I&apos;m sorry too late.
That&apos;s why I&apos;m first time at building GTK.
I&apos;ll reupload ASAP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657124</commentid>
    <comment_count>17</comment_count>
      <attachid>149417</attachid>
    <who name="YoungTaeck Song">youngtaeck.song</who>
    <bug_when>2012-06-25 18:28:15 -0700</bug_when>
    <thetext>Created attachment 149417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657137</commentid>
    <comment_count>18</comment_count>
      <attachid>149417</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-06-25 18:46:30 -0700</bug_when>
    <thetext>Comment on attachment 149417
Patch

LGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657230</commentid>
    <comment_count>19</comment_count>
      <attachid>149417</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-25 20:41:45 -0700</bug_when>
    <thetext>Comment on attachment 149417
Patch

Clearing flags on attachment: 149417

Committed r121221: &lt;http://trac.webkit.org/changeset/121221&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657231</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-25 20:41:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149209</attachid>
            <date>2012-06-24 17:11:06 -0700</date>
            <delta_ts>2012-06-24 20:39:21 -0700</delta_ts>
            <desc>patch</desc>
            <filename>Extract-common-code-from-LayerTreeHostQt.diff</filename>
            <type>text/plain</type>
            <size>62001</size>
            <attacher name="YoungTaeck Song">youngtaeck.song</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NmY0OGZkLi4yZDIyODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUg
QEAKKzIwMTItMDYtMjQgIFlvdW5nVGFlY2sgU29uZyAgPHlvdW5ndGFlY2suc29uZ0BzYW1zdW5n
LmNvbT4KKworICAgICAgICBbV0syXVtRdF1bRUZMXSBFeHRyYWN0IGNvbW1vbiBjb2RlIGZyb20g
TGF5ZXJUcmVlSG9zdFF0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04OTgzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEV4dHJhY3QgY29tbW9uIGNvZGUgZnJvbSBMYXllclRyZWVIb3N0UXQgdG8gYmUgdXNl
ZCBieSBib3RoIFF0IGFuZCBFZmwuCisgICAgICAgIEJlY2F1c2UgRXh0cmFjdGVkIGNvZGVzIHVz
ZSBXZWJHcmFwaGljc0xheWVyLCB0aGVzZSBhcmUgbmFtZWQgJ0xheWVyVHJlZUhvc3RXZWInLgor
CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJLaXQyLnByaToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL3dlYi9MYXllclRyZWVIb3N0V2ViLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6fkxheWVyVHJlZUhvc3RXZWIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpMYXllclRyZWVIb3N0V2ViKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c2NoZWR1bGVM
YXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6Y2FuY2VsUGVu
ZGluZ0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzZXRT
aG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFdlYjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFdlYjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzY3JvbGxOb25Db21wb3NpdGVkQ29u
dGVudHMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpmb3JjZVJlcGFpbnQp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzaXplRGlkQ2hhbmdlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJs
YXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OnNldFBhZ2VP
dmVybGF5T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6
OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c3lu
Y0xheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzeW5j
Q2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c3luY0xheWVyRmls
dGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmF0dGFjaExheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6ZGV0YWNoTGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKToKKyAgICAgICAgKFdl
YktpdDo6dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0V2ViOjpzeW5jRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0V2ViOjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmxheWVyRmx1c2hUaW1lckZpcmVkKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OnJlbGVhc2VJbWFnZUJhY2tp
bmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpub3RpZnlT
eW5jUmVxdWlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpwYWludENv
bnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c2hvd0RlYnVnQm9y
ZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OnNob3dSZXBhaW50Q291
bnRlcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmNyZWF0ZVRpbGUpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjp1cGRhdGVUaWxlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RXZWI6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0V2ViOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFdlYjo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RXZWIuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
aC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChMYXllclRyZWVIb3N0V2ViKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6bGF5ZXJUcmVlQ29udGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OnBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hl
blBhaW50aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6cGF1c2VSZW5k
ZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpyZXN1bWVSZW5kZXJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpkZXZpY2VTY2FsZUZhY3Rv
ckRpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmRpcmVjdGx5
Q29tcG9zaXRlZEltYWdlS2V5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL3F0
L0xheWVyVHJlZUhvc3RRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VLZXkpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS93ZWIvcXQvTGF5ZXJUcmVlSG9zdFF0Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZUhvc3RRdCk6CisKIDIwMTItMDYtMjQgIEFu
ZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEy
MDMyOSk6IEludGVybWl0dGVudCBXZWJQcm9jZXNzIHNodXRkb3ducyBkdWUgdG8gb3V0LW9mLWxp
bmUgRGlkUmVjZWl2ZUV2ZW50IG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggN2I5YWI5OS4uODEz
NDg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0xLDQgKzEsMyBAQAotIyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRhcmdl
dCBmaWxlIGZvciB0aGUgV2ViS2l0MiBzdGF0aWMgbGlicmFyeQogIwogIyBTZWUgJ1Rvb2xzL3Ft
YWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSBidWlsZCBzeXN0ZW0KQEAgLTM3Nyw3
ICszNzYsOCBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaCBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmggXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9x
dC9MYXllclRyZWVIb3N0UXQuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dlYi9MYXllclRy
ZWVIb3N0V2ViLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93ZWIvcXQvTGF5ZXJUcmVlSG9z
dFF0LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzLmggXAogICAg
IFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1
bmRsZS5oIFwKQEAgLTc1NCw3ICs3NTQsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViVW5kb1N0ZXAuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViSW5zcGVjdG9y
UXQuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBc
CisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dlYi9MYXllclRyZWVIb3N0V2ViLmNwcCBcCisgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL3dlYi9xdC9MYXllclRyZWVIb3N0UXQuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFnZVF0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb25u
ZWN0aW9uVG9VSVByb2Nlc3MuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcmkKaW5kZXggMjRjYzVhMi4uYjBiMTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTU1
LDYgKzU1LDggQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9xdCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZSBcCisgICAgJCRT
T1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZS93ZWIgXAorICAgICQkU09VUkNFX0RJUi9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2ViL3F0IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9xdCBc
CiAgICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDVhOWI4YjQuLjQ0
MDYxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
UVQpCi0jaW5jbHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdFF0LmgiCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0
L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2
MmFhOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
TGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkxh
eWVyVHJlZUhvc3RRdC5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5m
by5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYkdy
YXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IExheWVyVHJlZUhv
c3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOwotfQotCi1MYXllclRyZWVIb3N0UXQ6On5MYXll
clRyZWVIb3N0UXQoKQotewotICAgIC8vIFByZXZlbnQgc2V0V2ViR3JhcGhpY3NMYXllckNsaWVu
dCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20gbW9kaWZ5aW5nIHRoZSBzZXQgd2hpbGUgd2UgaXRl
cmF0ZSBpdC4KLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPiByZWdpc3Rl
cmVkTGF5ZXJzOwotICAgIHJlZ2lzdGVyZWRMYXllcnMuc3dhcChtX3JlZ2lzdGVyZWRMYXllcnMp
OwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVu
ZCA9IHJlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGll
bnQoMCk7Ci19Ci0KLUxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqIHdl
YlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAgLCBtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotICAgICwg
bV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCi0gICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQot
ICAgICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlv
blVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCi0gICAgLCBtX3No
b3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKLSAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZM
YXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVkKQotICAgICwgbV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKLXsKLSAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgot
ICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwotICAgIFdlYkdy
YXBoaWNzTGF5ZXIqIHdlYlJvb3RMYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXll
ci5nZXQoKSk7Ci0gICAgd2ViUm9vdExheWVyLT5zZXRSb290TGF5ZXIodHJ1ZSk7Ci0jaWZuZGVm
IE5ERUJVRwotICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgcm9vdCBs
YXllciIpOwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7
Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotICAgIG1fbGF5
ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9XZWJHcmFwaGljc0xheWVyKHdlYlJvb3RMYXll
ciktPmlkKCk7Ci0KLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xh
eWVyOjpjcmVhdGUodGhpcyk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdl
dCgpKS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCh0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQg
bm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOwotI2VuZGlmCi0gICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVy
LT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOwotCi0gICAgaWYg
KG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlM
YXllcigpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5n
RW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5
ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7Ci0KLSAgICBpZiAobV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKLXsKLSAg
ICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJG
bHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hl
ZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQotewot
ICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7Ci0gICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRy
YXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KCkpOwotCi0gICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4K
LSAgICBpZiAoZ3JhcGhpY3NMYXllcikKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6
OmludmFsaWRhdGUoKQotewotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBB
U1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Ci0gICAgbV9pc1Zh
bGlkID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVk
Q29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3Qp
OwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVu
dHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWRE
aXNwbGF5KHNjcm9sbFJlY3QpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBh
aW50KCkKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0UXQ6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKLXsK
LSAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIC8vIElmIHRoZSBu
ZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEg
c2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAotICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2Vk
IGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zaXplKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5l
d1NpemUpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgewot
ICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6
ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0
aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOwotICAg
IH0KLQotICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxv
YXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWln
aHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIp
Ci0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkSW5zdGFs
bFBhZ2VPdmVybGF5KCkKLXsKLSAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRVbmluc3Rh
bGxQYWdlT3ZlcmxheSgpCi17Ci0gICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VP
dmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAg
QVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQgdmFsdWUp
Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXRPcGFjaXR5KHZhbHVlKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQot
Ym9vbCBMYXllclRyZWVIb3N0UXQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCi17Ci0gICAg
Ym9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIG1fcm9v
dExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICByZXR1
cm4gZGlkU3luYzsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnN5bmNMYXllclN0YXRlKFdl
YkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykKLXsKLSAgICBpZiAobV9zaG91
bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlz
aWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAgIG1fc2hvdWxkU2VuZFNjcm9s
bFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
dHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6
U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2Vi
TGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9z
aXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGlsZHJlbikpOwotfQotCi12b2lkIExheWVyVHJlZUhv
c3RRdDo6c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXpl
LCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJv
eHk6OlN5bmNDYW52YXMoaWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7Ci19
Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c3luY0xh
eWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMo
aWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6YXR0YWNo
TGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgQVNTRVJUKCFtX3JlZ2lzdGVy
ZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxh
eWVyKTsKLQotICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7Ci0g
ICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpkZXRhY2hMYXllcihXZWJHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBtX3JlZ2lzdGVy
ZWRMYXllcnMucmVtb3ZlKGxheWVyKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlT2Zm
c2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCi17Ci0gICAg
Ly8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgotICAgIFJlbmRl
ckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7Ci0gICAgaWYg
KCFiYWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBy
ZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc1Bvc2l0aW9u
ZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBG
aXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5y
ZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBo
aWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKLSAgICBncmFwaGljc0xheWVyLT5z
ZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZy
b21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKLXsKLSAgICB1cGRh
dGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVyKTsKLQotICAgIGlmIChyZW5k
ZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRG
b3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKLSAgICBpZiAocmVuZGVyTGF5ZXIt
Pm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVy
KHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6
OnN5bmNGaXhlZExheWVycygpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNl
dHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9iamVj
dHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXll
ciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9y
KCktPnJvb3RSZW5kZXJMYXllcigpOwotICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOwotICAg
IGlmIChyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgdXBkYXRlT2Zmc2V0
RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewot
ICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFt
X2lzVmFsaWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFs
c2U7Ci0gICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgaWYgKCFtX3Nob3VsZFN5
bmNGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RMYXll
cikgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94
eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVy
LmdldCgpKS0+aWQoKSkpOwotICAgICAgICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsK
LSAgICB9Ci0KLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94
eTo6RGlkUmVuZGVyRnJhbWUoKSk7Ci0gICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsK
LQotICAgIGlmICghbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIExldCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25l
IGEgZmx1c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMuCi0gICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0Fy
ZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXll
cnMoKTsKLSAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJU
cmVlSG9zdFF0PiopCi17Ci0gICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFT
U0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3Zl
cmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgcGFnZSBvdmVybGF5IGNvbnRlbnQi
KTsKLSNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsK
LQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOwot
fQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQotewot
ICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Ci19
Ci0KLWludDY0X3QgTGF5ZXJUcmVlSG9zdFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdl
KiBpbWFnZSkKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxh
eWVySUQ7Ci0gICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7Ci0KLSAgICBpZiAoIXBpeG1hcCkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJM
YXllcklEOwotCi0gICAgaW50NjRfdCBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7Ci0gICAgSGFz
aE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VSZWZDb3VudHMuZmluZChrZXkpOwotCi0gICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAgICAgICAgKysoaXQtPnNlY29uZCk7Ci0gICAg
ICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGlt
YWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0Fs
cGhhIDogMCkpOwotICAgIHsKLSAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VS
R0IsIEludFBvaW50Ojp6ZXJvKCkpOwotICAgIH0KLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlIGhhbmRsZTsKLSAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwotICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVEaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZShrZXksIGhhbmRsZSkpOwotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VSZWZDb3VudHMuYWRkKGtleSwgMSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotdm9pZCBMYXll
clRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKLXsKLSAg
ICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6
aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5
KTsKLSAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXQtPnNlY29uZC0tOwotCi0gICAgaWYgKGl0LT5z
ZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHMucmVtb3ZlKGl0KTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUhvc3RQcm94eTo6RGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSkpOwotfQot
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKLXsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KikKLXsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnBhaW50Q29udGVudHMoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNl
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhpY3NM
YXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsKLSAgICAgICAgbV93ZWJQYWdl
LT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChncmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgewot
ICAgICAgICAvLyBPdmVybGF5cyBjb250YWluIHRyYW5zcGFyZW50IGNvbnRlbnRzIGFuZCB3b24n
dCBjbGVhciB0aGUgY29udGV4dCBhcyBwYXJ0IG9mIHRoZWlyIHJlbmRlcmluZywgc28gd2UgZG8g
aXQgaGVyZS4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChjbGlwUmVjdCk7Ci0g
ICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJl
Y3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1ib29sIExheWVyVHJlZUhvc3RRdDo6
c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QKLXsK
LSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdC
b3JkZXJzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Ci19Ci0K
LWJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKLXsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVRpbGUo
V2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYg
dXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRh
cmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnVwZGF0
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxl
SUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6
OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUhvc3RQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwotfQot
Ci1XZWJDb3JlOjpJbnRSZWN0IExheWVyVHJlZUhvc3RRdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0g
ICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRz
UmVjdDsKLSAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRl
bnRzU2NhbGU7Ci0KLSAgICBpZiAodHJhamVjdG9yeVZlY3RvciAhPSBGbG9hdFBvaW50Ojp6ZXJv
KCkpCi0gICAgICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3Rv
cnlWZWN0b3IpOwotCi0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50c1Nj
YWxlRGlkQ2hhbmdlKSB7Ci0gICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0g
ICAgICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwotCi0gICAgICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMu
ZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46
Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpCi0gICAgICAgICAg
ICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOwotICAgICAgICAgICAgaWYgKGNv
bnRlbnRzUmVjdERpZENoYW5nZSkKLSAgICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJs
ZVJlY3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwot
ICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpCi0gICAgICAgIG1fd2ViUGFnZS0+
c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERp
ZENoYW5nZSkKLSAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVl
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAgICBt
X3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3YXBCdWZmZXJzKCk7Ci19Ci0KLWJvb2wgTGF5
ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAotewotICAg
IHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3RRdDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBIYXNoU2V0
PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVk
TGF5ZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
Kj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgKCppdCktPnB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgQVNTRVJU
KCFtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnNpemUoKSk7Ci0gICAgbV91cGRh
dGVBdGxhc2VzLmNsZWFyKCk7Ci19Ci0KLVBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBMYXllclRyZWVIb3N0UXQ6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVTdXJm
YWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
VXBkYXRlQXRsYXMmIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldOwotICAgICAgICBpZiAoYXRs
YXMuZmxhZ3MoKSA9PSBmbGFncykgewotICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBu
dWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFu
ZGxlLCBzaXplLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9
IDIwMDA7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRhdGVBdGxhcyhTY3JhdGNoQnVm
ZmVyRGltZW5zaW9uLCBmbGFncykpOwotICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgp
LmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlNTg1M2FkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSAr
MCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIExheWVyVHJlZUhvc3RRdF9oCi0j
ZGVmaW5lIExheWVyVHJlZUhvc3RRdF9oCi0KLSNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVk
ZSAiVXBkYXRlQXRsYXMuaCIKLSNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgVXBkYXRlSW5mbzsKLWNsYXNzIFdlYlBh
Z2U7Ci0KLWNsYXNzIExheWVyVHJlZUhvc3RRdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMg
V2ViR3JhcGhpY3NMYXllckNsaWVudAotewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExheWVyVHJlZUhvc3RRdD4gY3JlYXRlKFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5MYXllclRy
ZWVIb3N0UXQoKTsKLQotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpOwotCi0gICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVD
b250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5vdGlmeUFm
dGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJv
b3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRD
b250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7Ci0gICAg
dmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOwotICAgIHZpcnR1YWwgdm9pZCBzaXplRGlkQ2hh
bmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpOwotCi0gICAgdmlydHVhbCB2b2lk
IGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQ
YWdlT3ZlcmxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxh
eShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVy
bGF5T3BhY2l0eShmbG9hdCk7Ci0gICAgdmlydHVhbCBib29sIHBhZ2VPdmVybGF5U2hvdWxkQXBw
bHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1
YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9y
RGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3Rv
cmUoV2ViQ29yZTo6SW1hZ2UqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2lu
Z1N0b3JlKGludDY0X3QpOwotCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCk7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgdmlydHVhbCB2b2lkIHB1
cmdlQmFja2luZ1N0b3JlcygpOwotICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRl
c0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVj
dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwg
Y29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVu
KFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpOwotI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBj
b25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNT
aXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopOwotICAgIHZp
cnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFu
ZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IExh
eWVyVHJlZUhvc3RRdChXZWJQYWdlKik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gR3JhcGhpY3NMYXll
ckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5v
dGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCBib29s
IHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopIGNvbnN0OwotCi0gICAgLy8gTGF5ZXJUcmVlSG9zdFF0Ci0gICAgdm9pZCBjcmVh
dGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigp
OwotICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2go
KTsKLSAgICB2b2lkIHNlbmRMYXllcnNUb1VJKCk7Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Ci0KLSAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFp
bnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKLQotICAgIC8vIFRoZSBwYWdl
IG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4K
LSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwot
Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5
ZXJzOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
UmVmQ291bnRzOwotICAgIFZlY3RvcjxVcGRhdGVBdGxhcz4gbV91cGRhdGVBdGxhc2VzOwotCi0g
ICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNW
YWxpZDsKLQotICAgIGJvb2wgbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotICAgIGJvb2wgbV9pc1N1
c3BlbmRlZDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAg
ICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Ci0gICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3Np
dGlvblVwZGF0ZTsKLQotICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0Owot
ICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNSb290TGF5
ZXI7Ci0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRy
ZWVIb3N0UXQ+Kik7Ci0gICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlSG9zdFF0PiBtX2xheWVy
Rmx1c2hUaW1lcjsKLSAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOwotfTsK
LQotfQotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFF0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93ZWIvTGF5ZXJUcmVlSG9zdFdlYi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RXZWIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDkyZDIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RX
ZWIuY3BwCkBAIC0wLDAgKzEsNTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RXZWIuaCIKKworI2luY2x1
ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlE
LmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAi
V2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQ
dHI8TGF5ZXJUcmVlSG9zdFdlYj4gTGF5ZXJUcmVlSG9zdFdlYjo6Y3JlYXRlKFdlYlBhZ2UqIHdl
YlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0V2ViKHdlYlBh
Z2UpKTsKK30KKworTGF5ZXJUcmVlSG9zdFdlYjo6fkxheWVyVHJlZUhvc3RXZWIoKQoreworICAg
IC8vIFByZXZlbnQgc2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXllcigp
IGZyb20gbW9kaWZ5aW5nIHRoZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KKyAgICBIYXNoU2V0
PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOworICAgIHJlZ2lz
dGVyZWRMYXllcnMuc3dhcChtX3JlZ2lzdGVyZWRMYXllcnMpOworCisgICAgSGFzaFNldDxXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlZ2lzdGVyZWRMYXllcnMu
ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRl
cmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgKCppdCktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCk7Cit9CisKK0xheWVyVHJl
ZUhvc3RXZWI6OkxheWVyVHJlZUhvc3RXZWIoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVy
VHJlZUhvc3Qod2ViUGFnZSkKKyAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
KGZhbHNlKQorICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3ModHJ1ZSkKKyAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCisgICAgLCBtX2NvbnRlbnRzU2Nh
bGUoMSkKKyAgICAsIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRydWUpCisgICAg
LCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0
cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJkxheWVyVHJlZUhvc3RXZWI6Omxh
eWVyRmx1c2hUaW1lckZpcmVkKQorICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
dHJ1ZSkKK3sKKyAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgorICAgIG1fcm9vdExheWVyID0g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYlJv
b3RMYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgd2Vi
Um9vdExheWVyLT5zZXRSb290TGF5ZXIodHJ1ZSk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9v
dExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0V2ViIHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgor
ICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVy
LT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2Vi
TGF5ZXJJRCA9IHRvV2ViR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMp
OworICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFdlYkdyYXBo
aWNzTGF5ZXJDbGllbnQodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFdlYiBub24tY29tcG9zaXRlZCBj
b250ZW50Iik7CisjZW5kaWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNp
emUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBpZiAobV93ZWJQYWdlLT5oYXNQ
YWdlT3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpzZXRMYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAg
ICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJs
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
ID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7CisKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQpIHsKKyAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RXZWI6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2xh
eWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6Y2FuY2VsUGVuZGluZ0xh
eWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0V2ViOjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZs
dXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90aWZ5
QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFxdWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91
bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKTsKKworICAg
IC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHkuCisgICAgaWYgKGdy
YXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hp
bGQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6aW52YWxpZGF0
ZSgpCit7CisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKworICAgIEFTU0VSVChtX2lz
VmFsaWQpOworICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNO
ZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlm
IChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbE9mZnNldCkKK3sKKyAgICBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShz
Y3JvbGxSZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpmb3JjZVJlcGFpbnQoKQor
eworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6
OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBp
ZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXpl
IGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVl
ZHNEaXNwbGF5IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFz
LgorICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
aXplKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUp
OworCisgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAg
ICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWln
aHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAw
LCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKwor
ICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0
KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAt
IG9sZFNpemUuaGVpZ2h0KCkpKTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAg
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OmRpZEluc3RhbGxQYWdl
T3ZlcmxheSgpCit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OmRpZFVuaW5zdGFsbFBh
Z2VPdmVybGF5KCkKK3sKKyAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OnNldFBhZ2VPdmVy
bGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgQVNT
RVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFdlYjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0IHZhbHVlKQor
eworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK2Jv
b2wgTGF5ZXJUcmVlSG9zdFdlYjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBi
b29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkt
PnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgbV9yb290
TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHJldHVy
biBkaWRTeW5jOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OnN5bmNMYXllclN0YXRlKFdl
YkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykKK3sKKyAgICBpZiAobV9zaG91
bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlz
aWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7CisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9s
bFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7CisgICAgfQorICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
dHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6
U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFdlYjo6c3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdl
YkxheWVySUQ+JiBjaGlsZHJlbikKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Cisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBv
c2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0V2ViOjpzeW5jQ2FudmFzKFdlYkxheWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1Np
emUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKQoreworICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQ
cm94eTo6U3luY0NhbnZhcyhpZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsK
K30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6c3lu
Y0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0
ZXJzKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRl
cnMoaWQsIGZpbHRlcnMpKTsKK30KKyNlbmRpZgorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OmF0
dGFjaExheWVyKFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIEFTU0VSVCghbV9yZWdp
c3RlcmVkTGF5ZXJzLmNvbnRhaW5zKGxheWVyKSk7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFk
ZChsYXllcik7CisKKyAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShtX2NvbnRlbnRzU2NhbGUp
OworICAgIGxheWVyLT5hZGp1c3RWaXNpYmxlUmVjdCgpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RXZWI6OmRldGFjaExheWVyKFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fcmVn
aXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXIpOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVs
ZXRlQ29tcG9zaXRpbmdMYXllcihsYXllci0+aWQoKSkpOworfQorCitzdGF0aWMgdm9pZCB1cGRh
dGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sK
KyAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3QgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24uCisgICAg
UmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKKyAg
ICBpZiAoIWJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzUG9z
aXRpb25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigp
ICE9IEZpeGVkUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5
ZXItPnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV2ViR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IHRvV2Vi
R3JhcGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xheWVyKCkpOworICAgIGdyYXBoaWNzTGF5
ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT2Zm
c2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAg
IHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYocmVuZGVyTGF5ZXIpOworCisgICAgaWYg
KHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3
cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworICAgIGlmIChyZW5kZXJM
YXllci0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9y
TGF5ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RXZWI6OnN5bmNGaXhlZExheWVycygpCit7CisgICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdl
KCktPnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhl
ZE9iamVjdHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5k
ZXJMYXllciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21w
b3NpdG9yKCktPnJvb3RSZW5kZXJMYXllcigpOworICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIp
OworICAgIGlmIChyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRl
T2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNo
KCkKK3sKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAg
IGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IGZhbHNlOworICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIGlmICghbV9z
aG91bGRTeW5jRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Nob3VsZFN5bmNS
b290TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvV2ViR3JhcGhpY3NMYXllcihtX3Jv
b3RMYXllci5nZXQoKSktPmlkKCkpKTsKKyAgICAgICAgbV9zaG91bGRTeW5jUm9vdExheWVyID0g
ZmFsc2U7CisgICAgfQorCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0UHJveHk6OkRpZFJlbmRlckZyYW1lKCkpOworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9
IHRydWU7CisKKyAgICBpZiAoIW1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoYXQgd2Un
dmUgZG9uZSBhIGZsdXNoIG9mIHRoZSBsYXllciBjaGFuZ2VzLgorICAgIHN0YXRpY19jYXN0PERy
YXdpbmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZs
dXNoTGF5ZXJzKCk7CisgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBmYWxz
ZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1l
cjxMYXllclRyZWVIb3N0V2ViPiopCit7CisgICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2go
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkK
K3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VPdmVybGF5
TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFdlYiBwYWdlIG92ZXJs
YXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdz
Q29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdl
LT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXll
ci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6ZGVzdHJveVBhZ2VPdmVybGF5
TGF5ZXIoKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92
ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9
IG51bGxwdHI7Cit9CisKK2ludDY0X3QgTGF5ZXJUcmVlSG9zdFdlYjo6YWRvcHRJbWFnZUJhY2tp
bmdTdG9yZShJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJu
IEludmFsaWRXZWJMYXllcklEOworCisgICAgaW50NjRfdCBrZXkgPSBkaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZUtleShpbWFnZSk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiBJbnZhbGlk
V2ViTGF5ZXJJRDsKKworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKworICAgIGlmIChp
dCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7CisgICAgICAg
ICsrKGl0LT5zZWNvbmQpOworICAgICAgICByZXR1cm4ga2V5OworICAgIH0KKworICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVh
YmxlKGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJl
YWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKKyAgICB7CisgICAgICAgIE93blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRl
R3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGlt
YWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5k
bGUoaGFuZGxlKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQ
cm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKKyAgICBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFkZChrZXksIDEpOworICAgIHJldHVy
biBrZXk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6cmVsZWFzZUltYWdlQmFja2luZ1N0
b3JlKGludDY0X3Qga2V5KQoreworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm47CisgICAg
SGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOworICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpdC0+c2Vj
b25kLS07CisKKyAgICBpZiAoaXQtPnNlY29uZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUoaXQpOworICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95RGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2Uoa2V5KSk7Cit9CisKKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGlt
ZSkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpub3RpZnlTeW5jUmVxdWlyZWQoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdl
Yjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBS
ZWN0KQoreworICAgIGlmIChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xp
cFJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIg
PT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7CisgICAgICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJh
bnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2Yg
dGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgorICAgICAgICBncmFwaGljc0NvbnRl
eHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJs
YXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFdlYjo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVl
SG9zdFdlYjo6c2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkt
PnNob3dSZXBhaW50Q291bnRlcigpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OmNyZWF0
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKK3sK
KyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxl
SUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2Vi
Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldFJl
Y3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJ
RCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFdlYjo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCit7Cisg
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlE
KSk7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgTGF5ZXJUcmVlSG9zdFdlYjo6dmlzaWJsZUNvbnRl
bnRzUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVj
dG9yKQoreworICAgIGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2li
bGVDb250ZW50c1JlY3Q7CisgICAgYm9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUg
IT0gbV9jb250ZW50c1NjYWxlOworCisgICAgaWYgKHRyYWplY3RvcnlWZWN0b3IgIT0gRmxvYXRQ
b2ludDo6emVybygpKQorICAgICAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLmdldCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rv
cih0cmFqZWN0b3J5VmVjdG9yKTsKKworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwg
Y29udGVudHNTY2FsZURpZENoYW5nZSkgeworICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3Qg
PSByZWN0OworICAgICAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKworICAgICAgICBIYXNo
U2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3Rl
cmVkTGF5ZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hhbmdlKQor
ICAgICAgICAgICAgICAgICgqaXQpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICAgICAg
ICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPmFk
anVzdFZpc2libGVSZWN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKKyAgICBpZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKQorICAgICAgICBt
X3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOworICAgIGlmIChjb250
ZW50c1JlY3REaWRDaGFuZ2UpCisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBk
YXRlID0gdHJ1ZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpyZW5kZXJOZXh0RnJhbWUo
KQoreworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUo
KTsgKytpKQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0uZGlkU3dhcEJ1ZmZlcnMoKTsKK30K
KworYm9vbCBMYXllclRyZWVIb3N0V2ViOjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdAoreworICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9j
ZXNzOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7
CisgICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9
IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsK
KworICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkp
OworICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlSG9zdFdlYjo6YmVnaW5Db250ZW50VXBkYXRlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3Ms
IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zm
c2V0KQoreworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29u
dGV4dDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBVcGRhdGVBdGxhcyYgYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV07Cisg
ICAgICAgIGlmIChhdGxhcy5mbGFncygpID09IGZsYWdzKSB7CisgICAgICAgICAgICAvLyBUaGlz
IHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4K
KyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLmJlZ2luUGFpbnRpbmdPbkF2YWls
YWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoZ3JhcGhp
Y3NDb250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFz
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVm
ZmVyRGltZW5zaW9uID0gMjAwMDsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKFVwZGF0ZUF0
bGFzKFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSk7CisgICAgcmV0dXJuIG1fdXBkYXRl
QXRsYXNlcy5sYXN0KCkuYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGhhbmRsZSwgc2l6
ZSwgb2Zmc2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RXZWIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93ZWIvTGF5ZXJUcmVlSG9zdFdlYi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzRkMjAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RX
ZWIuaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXll
clRyZWVIb3N0V2ViX2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFdlYl9oCisKKyNpbmNsdWRlICJM
YXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNpbmNsdWRlICJXZWJHcmFwaGlj
c0xheWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXBkYXRl
SW5mbzsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIExheWVyVHJlZUhvc3RXZWIgOiBwdWJsaWMg
TGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAorICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBXZWJHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0V2ViPiBjcmVhdGUoV2ViUGFnZSopOwor
ICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RXZWIoKTsKKworICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOworCisgICAgdmlydHVhbCBjb25zdCBMYXllclRy
ZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29s
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdmlydHVhbCB2
b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdmlydHVhbCB2
b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNjcm9sbE9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZp
cnR1YWwgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUp
OworCisgICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7CisgICAgdmlydHVhbCBib29s
IHBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3Bl
bmRlZCA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lz
U3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAgdmlydHVhbCB2
b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgeyB9CisgICAgdmlydHVhbCBpbnQ2NF90
IGRpcmVjdGx5Q29tcG9zaXRlZEltYWdlS2V5KFdlYkNvcmU6OkltYWdlKikgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6Oklt
YWdlKik7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90
KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9y
ZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVy
SW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBj
b25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMo
V2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3Qg
Z3JhcGhpY3NTdXJmYWNlVG9rZW4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hM
YXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGRldGFj
aExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0ZpeGVkTGF5ZXJzKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNo
YXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6
OkludFBvaW50Jik7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0V2Vi
KFdlYlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciosIGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVp
cmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9y
ZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29u
c3Q7CisKKyAgICAvLyBMYXllclRyZWVIb3N0V2ViCisgICAgdm9pZCBjcmVhdGVQYWdlT3Zlcmxh
eUxheWVyKCk7CisgICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIGJvb2wg
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpOworICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lk
IHNlbmRMYXllcnNUb1VJKCk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9yb290TGF5ZXI7CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1j
b21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5
ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgSGFzaFNl
dDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOworICAgIEhh
c2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOwor
ICAgIFZlY3RvcjxVcGRhdGVBdGxhcz4gbV91cGRhdGVBdGxhc2VzOworCisgICAgYm9vbCBtX25v
dGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKKyAgICBib29sIG1faXNWYWxpZDsKKworICAg
IGJvb2wgbV93YWl0aW5nRm9yVUlQcm9jZXNzOworICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX2Nv
bnRlbnRzU2NhbGU7CisgICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsK
KworICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworICAgIGJvb2wgbV9z
aG91bGRTeW5jRnJhbWU7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNSb290TGF5ZXI7CisgICAgdm9p
ZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0V2ViPiop
OworICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RXZWI+IG1fbGF5ZXJGbHVzaFRpbWVy
OworICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNl
bmRpZiAvLyBMYXllclRyZWVIb3N0V2ViX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS93ZWIvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93ZWIvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWVmYzdlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3dlYi9xdC9MYXllclRyZWVIb3N0UXQu
Y3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RRdC5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRy
ZWVIb3N0UXQ+IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOworfQorCitM
YXllclRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQoKQoreworfQorCitMYXllclRyZWVIb3N0
UXQ6OkxheWVyVHJlZUhvc3RRdChXZWJQYWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9z
dFdlYih3ZWJQYWdlKQoreworfQorCitib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludDY0X3QgTGF5
ZXJUcmVlSG9zdFF0OjpkaXJlY3RseUNvbXBvc2l0ZWRJbWFnZUtleShJbWFnZSogaW1hZ2UpCit7
CisgICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisKKyAgICBpZiAoIXBpeG1hcCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
cGl4bWFwLT5jYWNoZUtleSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93ZWIvcXQvTGF5ZXJUcmVlSG9z
dFF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL3F0L0xheWVyVHJl
ZUhvc3RRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMjQzZDEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL3F0
L0xheWVyVHJlZUhvc3RRdC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFF0X2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFF0X2gKKwor
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3RXZWIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYlBhZ2U7CisKK2NsYXNzIExheWVyVHJlZUhvc3RRdCA6IHB1YmxpYyBMYXllclRyZWVI
b3N0V2ViIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+
IGNyZWF0ZShXZWJQYWdlKik7CisgICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFF0KCk7CisKKyAg
ICB2aXJ0dWFsIGludDY0X3QgZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VLZXkoV2ViQ29yZTo6SW1h
Z2UqKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0UXQoV2ViUGFnZSop
OworfTsKKworfQorCisjZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFF0X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149231</attachid>
            <date>2012-06-24 20:39:21 -0700</date>
            <delta_ts>2012-06-25 04:49:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>Extract-common-code-from-LayerTreeHostQt2.diff</filename>
            <type>text/plain</type>
            <size>62043</size>
            <attacher name="YoungTaeck Song">youngtaeck.song</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiOGFlZjVjLi5kZmY1NjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODcg
QEAKIDIwMTItMDYtMjQgIFlvdW5nVGFlY2sgU29uZyAgPHlvdW5ndGFlY2suc29uZ0BzYW1zdW5n
LmNvbT4KIAorICAgICAgICBbV0syXVtRdF1bRUZMXSBFeHRyYWN0IGNvbW1vbiBjb2RlIGZyb20g
TGF5ZXJUcmVlSG9zdFF0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04OTgzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEV4dHJhY3QgY29tbW9uIGNvZGUgZnJvbSBMYXllclRyZWVIb3N0UXQgdG8gYmUgdXNl
ZCBieSBib3RoIFF0IGFuZCBFZmwuCisgICAgICAgIEJlY2F1c2UgRXh0cmFjdGVkIGNvZGVzIHVz
ZSBXZWJHcmFwaGljc0xheWVyLCB0aGVzZSBhcmUgbmFtZWQgJ0xheWVyVHJlZUhvc3RXZWInLgor
CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJLaXQyLnByaToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL3dlYi9MYXllclRyZWVIb3N0V2ViLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6fkxheWVyVHJlZUhvc3RXZWIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpMYXllclRyZWVIb3N0V2ViKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c2NoZWR1bGVM
YXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6Y2FuY2VsUGVu
ZGluZ0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzZXRT
aG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFdlYjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFdlYjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzY3JvbGxOb25Db21wb3NpdGVkQ29u
dGVudHMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpmb3JjZVJlcGFpbnQp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzaXplRGlkQ2hhbmdlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJs
YXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OnNldFBhZ2VP
dmVybGF5T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6
OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c3lu
Y0xheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpzeW5j
Q2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c3luY0xheWVyRmls
dGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmF0dGFjaExheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6ZGV0YWNoTGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKToKKyAgICAgICAgKFdl
YktpdDo6dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0V2ViOjpzeW5jRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0V2ViOjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmxheWVyRmx1c2hUaW1lckZpcmVkKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OnJlbGVhc2VJbWFnZUJhY2tp
bmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpub3RpZnlT
eW5jUmVxdWlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpwYWludENv
bnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6c2hvd0RlYnVnQm9y
ZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OnNob3dSZXBhaW50Q291
bnRlcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmNyZWF0ZVRpbGUpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjp1cGRhdGVUaWxlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RXZWI6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0V2ViOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFdlYjo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RXZWIuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
aC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChMYXllclRyZWVIb3N0V2ViKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6bGF5ZXJUcmVlQ29udGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OnBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hl
blBhaW50aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFdlYjo6cGF1c2VSZW5k
ZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpyZXN1bWVSZW5kZXJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0V2ViOjpkZXZpY2VTY2FsZUZhY3Rv
ckRpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RXZWI6OmRpcmVjdGx5
Q29tcG9zaXRlZEltYWdlS2V5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL3F0
L0xheWVyVHJlZUhvc3RRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VLZXkpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS93ZWIvcXQvTGF5ZXJUcmVlSG9zdFF0Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZUhvc3RRdCk6CisKKzIwMTItMDYtMjQgIFlv
dW5nVGFlY2sgU29uZyAgPHlvdW5ndGFlY2suc29uZ0BzYW1zdW5nLmNvbT4KKwogICAgICAgICBb
V0syXVtRdF1bRUZMXSBNb2RpZnkgUXQgc3BlY2lmaWMgY29kZSB0byBjb21tb24gY29kZQogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4MzkKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkKaW5kZXggN2I5YWI5OS4uODEzNDg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0xLDQgKzEsMyBA
QAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAjIFRhcmdldCBmaWxlIGZvciB0aGUgV2ViS2l0MiBzdGF0aWMgbGli
cmFyeQogIwogIyBTZWUgJ1Rvb2xzL3FtYWtlL1JFQURNRScgZm9yIGFuIG92ZXJ2aWV3IG9mIHRo
ZSBidWlsZCBzeXN0ZW0KQEAgLTM3Nyw3ICszNzYsOCBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUdyb3VwUHJveHkuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmggXAot
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaCBcCisgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL3dlYi9MYXllclRyZWVIb3N0V2ViLmggXAorICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS93ZWIvcXQvTGF5ZXJUcmVlSG9zdFF0LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVj
dGlvblRvVUlQcm9jZXNzLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwKICAgICBX
ZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZS5oIFwKQEAgLTc1NCw3ICs3NTQsOCBAQCBTT1VS
Q0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwIFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvcXQvV2ViSW5zcGVjdG9yUXQuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dlYi9MYXll
clRyZWVIb3N0V2ViLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dlYi9xdC9MYXllclRy
ZWVIb3N0UXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFnZVF0LmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5kZXggMjRjYzVhMi4uYjBiMTUx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi5wcmkKQEAgLTU1LDYgKzU1LDggQEAgSU5DTFVERVBBVEggKz0gXAogICAg
ICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0IFwKICAgICAkJFNPVVJDRV9E
SVIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlBy
b2Nlc3MvV2ViUGFnZSBcCisgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZS93ZWIg
XAorICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL3F0IFwKICAgICAkJFNP
VVJDRV9ESVIvV2ViUHJvY2Vzcy9xdCBcCiAgICAgJCRTT1VSQ0VfRElSL1BsdWdpblByb2Nlc3MK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuY3BwCmluZGV4IDVhOWI4YjQuLjQ0MDYxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0
LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFF0LmgiCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMWZhOTFhYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDU3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RRdC5oIgotCi0jaW5jbHVkZSAiRHJh
d2luZ0FyZWFJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNp
bmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgotI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdl
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlclZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFzc1JlZlB0cjxMYXll
clRyZWVIb3N0UXQ+IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOwotfQot
Ci1MYXllclRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQoKQotewotICAgIC8vIFByZXZlbnQg
c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20gbW9kaWZ5
aW5nIHRoZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KLSAgICBIYXNoU2V0PFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOwotICAgIHJlZ2lzdGVyZWRMYXllcnMu
c3dhcChtX3JlZ2lzdGVyZWRMYXllcnMpOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBy
ZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCkt
PnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCk7Ci19Ci0KLUxheWVyVHJlZUhvc3RRdDo6TGF5
ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBh
Z2UpCi0gICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAs
IG1faXNWYWxpZCh0cnVlKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCi0gICAg
LCBtX2lzU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBt
X3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5j
RnJhbWUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKLSAgICAsIG1f
bGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1lckZp
cmVkKQotICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKLXsKLSAgICAv
LyBDcmVhdGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMpOwotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYlJvb3RMYXllciA9IHRvV2Vi
R3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAgd2ViUm9vdExheWVyLT5zZXRS
b290TGF5ZXIodHJ1ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcm9vdExheWVyLT5zZXROYW1l
KCJMYXllclRyZWVIb3N0UXQgcm9vdCBsYXllciIpOwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXIt
PnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9XZWJH
cmFwaGljc0xheWVyKHdlYlJvb3RMYXllciktPmlkKCk7Ci0KLSAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0gICAgdG9XZWJHcmFw
aGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCh0
aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROYW1lKCJMYXllclRyZWVIb3N0UXQgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOwotI2VuZGlm
Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6
ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAg
ICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0Vu
YWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
YW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2No
ZWR1bGVMYXllckZsdXNoKCkKLXsKLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBt
X2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRT
aG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoKQotewotICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwotfQotCi12b2lkIExheWVyVHJl
ZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllcikKLXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92
ZUFsbENoaWxkcmVuKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250
ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRy
YXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOwotCi0gICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRl
ZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KLSAgICBpZiAoZ3JhcGhpY3NMYXllcikKLSAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKLX0K
LQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmludmFsaWRhdGUoKQotewotICAgIGNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCk7Ci0KLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXll
ciA9IG51bGxwdHI7Ci0gICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQotewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0g
ICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwot
Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpz
Y3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xs
UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIHNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBhaW50KCkKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBu
ZXdTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdT
aXplKTsKLQotICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBu
b24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAotICAgIC8v
IGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0g
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7Ci0gICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgo
KSA+IG9sZFNpemUud2lkdGgoKSkgewotICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihz
dGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwot
ICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXpl
LndpZHRoKCksIGhlaWdodCkpOwotICAgIH0KLQotICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4g
b2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1Np
emUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKLQotICAg
IGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0
U2l6ZShuZXdTaXplKTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RRdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKLXsKLSAgICBjcmVhdGVQYWdl
T3ZlcmxheUxheWVyKCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpCi17Ci0gICAgZGVzdHJveVBh
Z2VPdmVybGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAg
bV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3Zl
cmxheU9wYWNpdHkoZmxvYXQgdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXll
cik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRPcGFjaXR5KHZhbHVlKTsKLSAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0UXQ6OmZsdXNoUGVuZGlu
Z0xheWVyQ2hhbmdlcygpCi17Ci0gICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1
YmZyYW1lcygpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikK
LSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKLQotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKLSAgICByZXR1cm4gZGlkU3luYzsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0UXQ6OnN5bmNMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYg
aW5mbykKLXsKLSAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKLSAg
ICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0g
ICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZv
KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXll
cklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGlsZHJlbikp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBj
b25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikK
LXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlN5bmNDYW52YXMoaWQsIGNhbnZhc1NpemUsIGdy
YXBoaWNzU3VyZmFjZVRva2VuKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lk
IExheWVyVHJlZUhvc3RRdDo6c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0
Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi12b2lk
IExheWVyVHJlZUhvc3RRdDo6YXR0YWNoTGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCi17
Ci0gICAgQVNTRVJUKCFtX3JlZ2lzdGVyZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKLSAgICBt
X3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyKTsKLQotICAgIGxheWVyLT5zZXRDb250ZW50c1Nj
YWxlKG1fY29udGVudHNTY2FsZSk7Ci0gICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkZXRhY2hMYXllcihXZWJHcmFwaGljc0xheWVyKiBs
YXllcikKLXsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyKTsKLSAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKLX0K
LQotc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXll
ciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRo
ZSBjb25kaXRpb25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclBvc2l0aW9uLgotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxh
eWVyLT5iYWNraW5nKCk7Ci0gICAgaWYgKCFiYWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsK
LSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVy
LT5yZW5kZXJlcigpLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+
aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXIt
PmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhp
Y3NMYXllcigpKTsKLSAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRl
ckxheWVyKiByZW5kZXJMYXllcikKLXsKLSAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JT
ZWxmKHJlbmRlckxheWVyKTsKLQotICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQot
ICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmly
c3RDaGlsZCgpKTsKLSAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAg
IHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGlu
ZygpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnN5bmNGaXhlZExheWVycygpCi17Ci0g
ICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+
Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV93ZWJQYWdlLT5t
YWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9iamVjdHMoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXllciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1l
KCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCktPnJvb3RSZW5kZXJMYXllcigpOwot
ICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOwotICAgIGlmIChyb290UmVuZGVyTGF5ZXItPmZp
cnN0Q2hpbGQoKSkKLSAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9v
dFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6
cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8
IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJQYWdl
LT5sYXlvdXRJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0gICAgZmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzKCk7Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNGcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RMYXllcikgewotICAgICAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIodG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOwotICAgICAg
ICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGlkUmVuZGVyRnJhbWUoKSk7Ci0g
ICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKLQotICAgIGlmICghbV9ub3RpZnlBZnRl
clNjaGVkdWxlZExheWVyRmx1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExldCB0aGUg
ZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25lIGEgZmx1c2ggb2YgdGhlIGxheWVyIGNo
YW5nZXMuCi0gICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3
aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKLSAgICBtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6
bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopCi17Ci0gICAgcGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNy
ZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVy
KTsKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlz
KTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXll
clRyZWVIb3N0UXQgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRD
aGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RR
dDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5
TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAg
IG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Ci19Ci0KLWludDY0X3QgTGF5ZXJUcmVlSG9z
dFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0gICAgUVBpeG1hcCogcGl4
bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0KLSAgICBpZiAoIXBp
eG1hcCkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAgaW50NjRfdCBr
ZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVy
YXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwot
Ci0gICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkp
IHsKLSAgICAgICAgKysoaXQtPnNlY29uZCk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBo
YSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwotICAgIHsKLSAgICAg
ICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0
bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwot
ICAgIH0KLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBiaXRtYXAt
PmNyZWF0ZUhhbmRsZShoYW5kbGUpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRs
ZSkpOwotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7
Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFn
ZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKLXsKLSAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQgPT0gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaXQtPnNlY29uZC0tOwotCi0gICAgaWYgKGl0LT5zZWNvbmQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSkpOwotfQotCi0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0
Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBk
b3VibGUgdGltZSkKLXsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1
aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UXQ6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBjbGlwUmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXIpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRl
eHQsIGNsaXBSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChncmFwaGlj
c0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgewotICAgICAgICAvLyBPdmVybGF5cyBjb250
YWluIHRyYW5zcGFyZW50IGNvbnRlbnRzIGFuZCB3b24ndCBjbGVhciB0aGUgY29udGV4dCBhcyBw
YXJ0IG9mIHRoZWlyIHJlbmRlcmluZywgc28gd2UgZG8gaXQgaGVyZS4KLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LmNsZWFyUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1Bh
Z2VPdmVybGF5KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi1ib29sIExheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Ci19Ci0KLWJvb2wgTGF5
ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGlu
Z3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdDo6c3Vw
cG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0
ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6
OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUlu
Zm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBs
YXllcklELCBpbnQgdGlsZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGls
ZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IExheWVy
VHJlZUhvc3RRdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
dmlzaWJsZUNvbnRlbnRzUmVjdDsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZs
b2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgYm9vbCBjb250ZW50c1JlY3REaWRD
aGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBib29sIGNvbnRlbnRz
U2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICBpZiAodHJh
amVjdG9yeVZlY3RvciAhPSBGbG9hdFBvaW50Ojp6ZXJvKCkpCi0gICAgICAgIHRvV2ViR3JhcGhp
Y3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29u
dGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwotCi0gICAgaWYgKGNv
bnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlKSB7Ci0gICAgICAg
IG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0gICAgICAgIG1fY29udGVudHNTY2FsZSA9
IHNjYWxlOwotCi0gICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+Ojpp
dGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFz
aFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3Rl
cmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGNv
bnRlbnRzU2NhbGVEaWRDaGFuZ2UpCi0gICAgICAgICAgICAgICAgKCppdCktPnNldENvbnRlbnRz
U2NhbGUoc2NhbGUpOwotICAgICAgICAgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKLSAg
ICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZp
eGVkTGF5b3V0KCkpCi0gICAgICAgIG1fd2ViUGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJl
Y3QocmVjdCk7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKLSAgICAgICAgbV9zaG91
bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJlZUhv
c3RRdDo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBm
YWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ld
LmRpZFN3YXBCdWZmZXJzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVU
aWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAm
JiAhbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cHVy
Z2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAo
SGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdp
c3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnB1
cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgQVNTRVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlUmVmQ291bnRzLnNpemUoKSk7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Ci19Ci0K
LVBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBMYXllclRyZWVIb3N0UXQ6OmJl
Z2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVC
aXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2Vi
Q29yZTo6SW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBncmFwaGljc0NvbnRleHQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0
ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91
cGRhdGVBdGxhc2VzW2ldOwotICAgICAgICBpZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgewot
ICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWls
YWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5i
ZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOwotICAg
ICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3Jh
cGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDIwMDA7Ci0gICAgbV91cGRhdGVBdGxh
c2VzLmFwcGVuZChVcGRhdGVBdGxhcyhTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpOwot
ICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJs
ZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTg1M2FkLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0q
LwotCi0jaWZuZGVmIExheWVyVHJlZUhvc3RRdF9oCi0jZGVmaW5lIExheWVyVHJlZUhvc3RRdF9o
Ci0KLSNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9z
dC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKLSNpbmNs
dWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
Q2xpZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgVXBkYXRlSW5mbzsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExheWVyVHJlZUhv
c3RRdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50
Ci0gICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViR3JhcGhpY3NMYXllckNsaWVudAot
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RRdD4gY3JlYXRl
KFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UXQoKTsKLQotICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwotCi0gICAgdmlydHVhbCBj
b25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXll
clRyZWVDb250ZXh0OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1
c2goYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRl
ZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWlu
dCgpOwotICAgIHZpcnR1YWwgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIG5ld1NpemUpOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgp
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7Ci0gICAg
dmlydHVhbCBib29sIHBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygp
IHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVy
aW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmly
dHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpOwotCi0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRS
ZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
TmV4dEZyYW1lKCk7Ci0gICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAg
IHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3Rv
cjxXZWJMYXllcklEPiYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJik7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1
cmZhY2VUb2tlbikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXll
cnMoKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0
bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQm
KTsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7
Ci0KLXByaXZhdGU6Ci0gICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBk
b3VibGUgdGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVw
YWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwotCi0gICAg
Ly8gTGF5ZXJUcmVlSG9zdFF0Ci0gICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0g
ICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIGJvb2wgZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotICAg
IHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lkIHNlbmRMYXllcnNU
b1VJKCk7Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7
Ci0KLSAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNv
bnRlbnQuCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllcjsKLQotICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUg
bnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwotICAgIEhhc2hNYXA8aW50NjRf
dCwgaW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOwotICAgIFZlY3RvcjxV
cGRhdGVBdGxhcz4gbV91cGRhdGVBdGxhc2VzOwotCi0gICAgYm9vbCBtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLQotICAgIGJvb2wgbV93YWl0
aW5nRm9yVUlQcm9jZXNzOwotICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7
Ci0gICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKLQotICAgIExheWVy
VHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJh
bWU7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNSb290TGF5ZXI7Ci0gICAgdm9pZCBsYXllckZsdXNo
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0UXQ+Kik7Ci0gICAgV2ViQ29y
ZTo6VGltZXI8TGF5ZXJUcmVlSG9zdFF0PiBtX2xheWVyRmx1c2hUaW1lcjsKLSAgICBib29sIG1f
bGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTGF5ZXJU
cmVlSG9zdFF0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS93ZWIvTGF5ZXJUcmVlSG9zdFdlYi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RXZWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmZlN2QxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RXZWIuY3BwCkBAIC0wLDAgKzEsNTY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RXZWIuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94
eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU3VyZmFjZVVw
ZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRl
ICJXZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdFdlYj4gTGF5
ZXJUcmVlSG9zdFdlYjo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBMYXllclRyZWVIb3N0V2ViKHdlYlBhZ2UpKTsKK30KKworTGF5ZXJUcmVlSG9z
dFdlYjo6fkxheWVyVHJlZUhvc3RXZWIoKQoreworICAgIC8vIFByZXZlbnQgc2V0V2ViR3JhcGhp
Y3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20gbW9kaWZ5aW5nIHRoZSBzZXQg
d2hpbGUgd2UgaXRlcmF0ZSBpdC4KKyAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOworICAgIHJlZ2lzdGVyZWRMYXllcnMuc3dhcChtX3JlZ2lz
dGVyZWRMYXllcnMpOworCisgICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46
Oml0ZXJhdG9yIGVuZCA9IHJlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0
PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnNldFdlYkdyYXBo
aWNzTGF5ZXJDbGllbnQoMCk7Cit9CisKK0xheWVyVHJlZUhvc3RXZWI6OkxheWVyVHJlZUhvc3RX
ZWIoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKKyAgICAs
IG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQorICAgICwgbV9pc1ZhbGlk
KHRydWUpCisgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKKyAgICAsIG1faXNTdXNw
ZW5kZWQoZmFsc2UpCisgICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKKyAgICAsIG1fc2hvdWxkU2Vu
ZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxz
ZSkKKyAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0cnVlKQorICAgICwgbV9sYXllckZsdXNo
VGltZXIodGhpcywgJkxheWVyVHJlZUhvc3RXZWI6OmxheWVyRmx1c2hUaW1lckZpcmVkKQorICAg
ICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKK3sKKyAgICAvLyBDcmVhdGUg
YSByb290IGxheWVyLgorICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRo
aXMpOworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYlJvb3RMYXllciA9IHRvV2ViR3JhcGhpY3NM
YXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgd2ViUm9vdExheWVyLT5zZXRSb290TGF5ZXIo
dHJ1ZSk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJMYXllclRy
ZWVIb3N0V2ViIHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6
ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5ZXJJRCA9IHRvV2ViR3JhcGhpY3NM
YXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworICAgIHRvV2ViR3JhcGhpY3NMYXll
cihtX3Jvb3RMYXllci5nZXQoKSktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQodGhpcyk7Cisj
aWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmFtZSgi
TGF5ZXJUcmVlSG9zdFdlYiBub24tY29tcG9zaXRlZCBjb250ZW50Iik7CisjZW5kaWYKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwor
CisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5n
ZXQoKSk7CisKKyAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQorICAgICAgICBj
cmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
Ym9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7
CisKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OnNjaGVkdWxl
TGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgp
KQorICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFdlYjo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5
ZXJGbHVzaFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpzZXRTaG91
bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
ID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RXZWI6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdy
YXBoaWNzTGF5ZXIpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVB
bGxDaGlsZHJlbigpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVu
dHNPcGFxdWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3
c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKTsKKworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQg
bGF5ZXIgdHJlZSBoaWVyYXJjaHkuCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6aW52YWxpZGF0ZSgpCit7CisgICAgY2FuY2VsUGVuZGlu
Z0xheWVyRmx1c2goKTsKKworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9vdExheWVy
ID0gbnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0V2ViOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisg
ICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwor
CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6
c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9s
bFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBzZXRO
b25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShzY3JvbGxSZWN0KTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0V2ViOjpmb3JjZVJlcGFpbnQoKQoreworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9
PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShu
ZXdTaXplKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRo
ZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAorICAg
IC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBvbGRTaXpl
ID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1NpemUud2lk
dGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1p
bihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkp
OworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRT
aXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhlaWdodCgp
ID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5l
d1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKKwor
ICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0U2l6ZShuZXdTaXplKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RXZWI6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSgpCit7CisgICAgY3JlYXRl
UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RXZWI6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAgICBkZXN0
cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RXZWI6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7
CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cisg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6c2V0
UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0IHZhbHVlKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVy
bGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0T3BhY2l0eSh2YWx1ZSk7Cisg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFdlYjo6Zmx1
c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5j
bHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdlT3Zlcmxh
eUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworCisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIHJldHVybiBkaWRTeW5jOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RXZWI6OnN5bmNMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxh
eWVySW5mbyYgaW5mbykKK3sKKyAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRh
dGUpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJv
eHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlv
bigpKSk7CisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7
CisgICAgfQorICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRl
KGlkLCBpbmZvKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6c3luY0xheWVyQ2hpbGRy
ZW4oV2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+JiBjaGlsZHJlbikKK3sK
KyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwg
Y2hpbGRyZW4pKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpzeW5jQ2FudmFzKFdlYkxh
eWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3Vy
ZmFjZVRva2VuKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U3luY0NhbnZhcyhpZCwgY2Fu
dmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKK30KKworI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklE
IGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhv
c3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKK30KKyNl
bmRpZgorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OmF0dGFjaExheWVyKFdlYkdyYXBoaWNzTGF5
ZXIqIGxheWVyKQoreworICAgIEFTU0VSVCghbV9yZWdpc3RlcmVkTGF5ZXJzLmNvbnRhaW5zKGxh
eWVyKSk7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllcik7CisKKyAgICBsYXllci0+
c2V0Q29udGVudHNTY2FsZShtX2NvbnRlbnRzU2NhbGUpOworICAgIGxheWVyLT5hZGp1c3RWaXNp
YmxlUmVjdCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OmRldGFjaExheWVyKFdlYkdy
YXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5
ZXIpOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihsYXll
ci0+aWQoKSkpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JT
ZWxmKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICAvLyBUaGVzZSBjb25kaXRpb25z
IG11c3QgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24uCisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNr
aW5nID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKKyAgICBpZiAoIWJhY2tpbmcpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxheWVyLT5yZW5kZXJl
cigpLT5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHJl
bmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCkt
PmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFyZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihi
YWNraW5nLT5ncmFwaGljc0xheWVyKCkpOworICAgIGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9W
aWV3cG9ydCh0cnVlKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0
Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAgIHVwZGF0ZU9mZnNldEZy
b21WaWV3cG9ydEZvclNlbGYocmVuZGVyTGF5ZXIpOworCisgICAgaWYgKHJlbmRlckxheWVyLT5m
aXJzdENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJl
bmRlckxheWVyLT5maXJzdENoaWxkKCkpOworICAgIGlmIChyZW5kZXJMYXllci0+bmV4dFNpYmxp
bmcoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5
ZXItPm5leHRTaWJsaW5nKCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OnN5bmNGaXhl
ZExheWVycygpCit7CisgICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkg
fHwgIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9iamVjdHMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXllciA9IG1fd2Vi
UGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCktPnJvb3RS
ZW5kZXJMYXllcigpOworICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOworICAgIGlmIChyb290
UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdw
b3J0Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RXZWI6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAgICBpZiAo
bV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgIGlmICghbV9pc1ZhbGlk
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOworICAg
IGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIGlmICghbV9zaG91bGRTeW5jRnJhbWUp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKKyAg
ICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlNldFJv
b3RDb21wb3NpdGluZ0xheWVyKHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PmlkKCkpKTsKKyAgICAgICAgbV9zaG91bGRTeW5jUm9vdExheWVyID0gZmFsc2U7CisgICAgfQor
CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRpZFJl
bmRlckZyYW1lKCkpOworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7CisKKyAgICBp
ZiAoIW1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoYXQgd2UndmUgZG9uZSBhIGZsdXNo
IG9mIHRoZSBsYXllciBjaGFuZ2VzLgorICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+
KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Cisg
ICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBmYWxzZTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0V2ViOjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVIb3N0
V2ViPiopCit7CisgICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0V2ViOjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQo
IW1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFdlYiBwYWdlIG92ZXJsYXkgY29udGVudCIpOwor
I2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsK
KyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisg
ICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAg
IEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVt
b3ZlRnJvbVBhcmVudCgpOworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Cit9CisK
K2ludDY0X3QgTGF5ZXJUcmVlSG9zdFdlYjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSog
aW1hZ2UpCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXll
cklEOworCisgICAgaW50NjRfdCBrZXkgPSBkaXJlY3RseUNvbXBvc2l0ZWRJbWFnZUtleShpbWFn
ZSk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKKwor
ICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKworICAgIGlmIChpdCAhPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7CisgICAgICAgICsrKGl0LT5zZWNvbmQp
OworICAgICAgICByZXR1cm4ga2V5OworICAgIH0KKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXpl
KCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3Vw
cG9ydHNBbHBoYSA6IDApKTsKKyAgICB7CisgICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAgICBTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlUmVmQ291bnRzLmFkZChrZXksIDEpOworICAgIHJldHVybiBrZXk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFdlYjo6cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3Qga2V5
KQoreworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm47CisgICAgSGFzaE1hcDxpbnQ2NF90
LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMu
ZmluZChrZXkpOworICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291
bnRzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpdC0+c2Vjb25kLS07CisKKyAgICBp
ZiAoaXQtPnNlY29uZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUoaXQpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5
KSk7Cit9CisKKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpub3RpZnlBbmltYXRpb25TdGFydGVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKK3sKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0V2ViOjpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6cGFpbnRDb250ZW50
cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlm
IChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgeworICAgICAg
ICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3Zlcmxh
eUxheWVyKSB7CisgICAgICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJhbnNwYXJlbnQgY29udGVu
dHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5n
LCBzbyB3ZSBkbyBpdCBoZXJlLgorICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGNs
aXBSZWN0KTsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250
ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJU
cmVlSG9zdFdlYjo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KikgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygp
LT5zaG93RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFdlYjo6c2hvd1Jl
cGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdAoreworICAg
IHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dSZXBhaW50Q291
bnRlcigpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RXZWI6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJ
RCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3Qs
IHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0V2ViOjp1cGRhdGVUaWxlKFdl
YkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJn
ZXRSZWN0LCB1cGRhdGVJbmZvKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFdlYjo6cmVtb3Zl
VGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9z
dFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Cit9CisKK1dlYkNv
cmU6OkludFJlY3QgTGF5ZXJUcmVlSG9zdFdlYjo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0V2ViOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZs
b2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGJv
b2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1JlY3Q7
CisgICAgYm9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUgIT0gbV9jb250ZW50c1Nj
YWxlOworCisgICAgaWYgKHRyYWplY3RvcnlWZWN0b3IgIT0gRmxvYXRQb2ludDo6emVybygpKQor
ICAgICAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdl
dCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVj
dG9yKTsKKworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2FsZURp
ZENoYW5nZSkgeworICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgICAg
ICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKworICAgICAgICBIYXNoU2V0PFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgp
OworICAgICAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVy
YXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hhbmdlKQorICAgICAgICAgICAgICAg
ICgqaXQpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICAgICAgICAgIGlmIChjb250ZW50
c1JlY3REaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPmFkanVzdFZpc2libGVSZWN0
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBp
ZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKQorICAgICAgICBtX3dlYlBhZ2UtPnNldEZp
eGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFu
Z2UpCisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0V2ViOjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1fd2Fp
dGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKQorICAgICAg
ICBtX3VwZGF0ZUF0bGFzZXNbaV0uZGlkU3dhcEJ1ZmZlcnMoKTsKK30KKworYm9vbCBMYXllclRy
ZWVIb3N0V2ViOjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIHJl
dHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9jZXNzOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RXZWI6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgSGFzaFNldDxX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExh
eWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+
OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIEFTU0VSVCgh
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOworICAgIG1fdXBkYXRl
QXRsYXNlcy5jbGVhcigpOworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gTGF5ZXJUcmVlSG9zdFdlYjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIFNoYXJlYWJsZVN1cmZh
Y2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIE93
blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBV
cGRhdGVBdGxhcyYgYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV07CisgICAgICAgIGlmIChhdGxh
cy5mbGFncygpID09IGZsYWdzKSB7CisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51
bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4KKyAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dCA9IGF0bGFzLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5k
bGUsIHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQorICAg
ICAgICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0g
MjAwMDsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKFVwZGF0ZUF0bGFzKFNjcmF0Y2hCdWZm
ZXJEaW1lbnNpb24sIGZsYWdzKSk7CisgICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCku
YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RXZWIuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS93ZWIvTGF5ZXJUcmVlSG9zdFdlYi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmY1MzRkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL0xheWVyVHJlZUhvc3RXZWIuaApAQCAtMCwwICsx
LDEzOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0V2ViX2gK
KyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFdlYl9oCisKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0
LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdl
YlBhZ2U7CisKK2NsYXNzIExheWVyVHJlZUhvc3RXZWIgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAsIHB1
YmxpYyBXZWJHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMYXllclRyZWVIb3N0V2ViPiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkxh
eWVyVHJlZUhvc3RXZWIoKTsKKworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpOworCisgICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXll
clRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9CisgICAgdmlydHVh
bCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5v
dGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7CisgICAgdmlydHVhbCB2b2lk
IHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBv
c2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7
CisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBzaXpl
RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpOworCisgICAgdmlydHVh
bCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRVbmlu
c3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRz
RGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldFBh
Z2VPdmVybGF5T3BhY2l0eShmbG9hdCk7CisgICAgdmlydHVhbCBib29sIHBhZ2VPdmVybGF5U2hv
dWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFs
c2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxl
RmFjdG9yRGlkQ2hhbmdlKCkgeyB9CisgICAgdmlydHVhbCBpbnQ2NF90IGRpcmVjdGx5Q29tcG9z
aXRlZEltYWdlS2V5KFdlYkNvcmU6OkltYWdlKikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
aW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKik7CisgICAgdmly
dHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KTsKKworICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxl
KFdlYkxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRG
cmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZs
b2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpOworICAgIHZp
cnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2Vi
TGF5ZXJJRD4mKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHN5
bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyYpOworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNl
VG9rZW4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCk7
CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdp
bkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6
RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jik7CisK
K3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0V2ViKFdlYlBhZ2UqKTsKKwor
cHJpdmF0ZToKKyAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJs
ZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXBSZWN0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50
Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CisKKyAgICAvLyBM
YXllclRyZWVIb3N0V2ViCisgICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAg
dm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgIHZv
aWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIHNlbmRMYXllcnNUb1VJ
KCk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisK
KyAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRl
bnQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVs
bCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgSGFzaFNldDxXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOworICAgIEhhc2hNYXA8aW50NjRfdCwg
aW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOworICAgIFZlY3RvcjxVcGRh
dGVBdGxhcz4gbV91cGRhdGVBdGxhc2VzOworCisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaDsKKyAgICBib29sIG1faXNWYWxpZDsKKworICAgIGJvb2wgbV93YWl0aW5n
Rm9yVUlQcm9jZXNzOworICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Cisg
ICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKKworICAgIExheWVyVHJl
ZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7
CisgICAgYm9vbCBtX3Nob3VsZFN5bmNSb290TGF5ZXI7CisgICAgdm9pZCBsYXllckZsdXNoVGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0V2ViPiopOworICAgIFdlYkNvcmU6
OlRpbWVyPExheWVyVHJlZUhvc3RXZWI+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIGJvb2wgbV9s
YXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXllclRy
ZWVIb3N0V2ViX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS93ZWIvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS93ZWIvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kOWVmYzdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL3dlYi9xdC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RRdC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdl
SUQuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IExheWVy
VHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOworfQorCitMYXllclRyZWVIb3N0UXQ6
On5MYXllclRyZWVIb3N0UXQoKQoreworfQorCitMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhv
c3RRdChXZWJQYWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9zdFdlYih3ZWJQYWdlKQor
eworfQorCitib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludDY0X3QgTGF5ZXJUcmVlSG9zdFF0Ojpk
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZUtleShJbWFnZSogaW1hZ2UpCit7CisgICAgUVBpeG1hcCog
cGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisKKyAgICBpZiAo
IXBpeG1hcCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcGl4bWFwLT5jYWNoZUtl
eSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS93ZWIvcXQvTGF5ZXJUcmVlSG9zdFF0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL3F0L0xheWVyVHJlZUhvc3RRdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMjQzZDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2ViL3F0L0xheWVyVHJlZUhvc3RR
dC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJU
cmVlSG9zdFF0X2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFF0X2gKKworI2luY2x1ZGUgIkxheWVy
VHJlZUhvc3RXZWIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CisK
K2NsYXNzIExheWVyVHJlZUhvc3RRdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0V2ViIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IGNyZWF0ZShXZWJQYWdl
Kik7CisgICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFF0KCk7CisKKyAgICB2aXJ0dWFsIGludDY0
X3QgZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VLZXkoV2ViQ29yZTo6SW1hZ2UqKTsKKworcHJpdmF0
ZToKKyAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0UXQoV2ViUGFnZSopOworfTsKKworfQorCisj
ZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFF0X2gK
</data>
<flag name="review"
          id="157187"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="157188"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149275</attachid>
            <date>2012-06-25 04:38:44 -0700</date>
            <delta_ts>2012-06-25 04:49:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>Extract-common-code-from-LayerTreeHostQt2.diff</filename>
            <type>text/plain</type>
            <size>178019</size>
            <attacher name="YoungTaeck Song">youngtaeck.song</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjMGZkOWQxLi5jNGFkNzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMz
IEBACisyMDEyLTA2LTI1ICBZb3VuZ1RhZWNrIFNvbmcgIDx5b3VuZ3RhZWNrLnNvbmdAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bUXRdW0VGTF0gRXh0cmFjdCBjb21tb24gY29kZSBmcm9t
IExheWVyVHJlZUhvc3RRdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODk4MzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFeHRyYWN0IGNvbW1vbiBjb2RlIGZyb20gTGF5ZXJUcmVlSG9zdFF0IHRvIGJlIHVz
ZWQgYnkgYm90aCBRdCBhbmQgRWZsLgorICAgICAgICBJIHJlbmFtZWQgTGF5ZXJUcmVlSG9zdCB0
byBMYXllclRyZWVDb29yZGluYXRvciwgYW5kIHRoZXNlIGFyZSBtb3ZlZCB1bmRlciBXZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuCisgICAgICAgIEkgTW9kaWZpZWQgTGF5
ZXJUcmVlSG9zdFByb3h5IHRvIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgdG9vLCBCZWNhdXNl
IExheWVyVHJlZUhvc3RQcm94eSBhbmQgTGF5ZXJUcmVlSG9zdCB3ZXJlIHBhaXIuCisgICAgICAg
IEFsc28gV2ViR3JhcGhpY3NMYXllciBtb3ZlZCB1bmRlciB0aGF0IGRpcmVjdG9yeS4KKworICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL01l
c3NhZ2VJRC5oOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjpw
YWludCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUpOgorICAgICAg
ICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94
eTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6
CisgICAgICAgIChEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1w
bDo6RHJhd2luZ0FyZWFQcm94eUltcGwpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoRHJhd2luZ0FyZWFQcm94eUlt
cGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHku
Y3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGluYXRvclByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVmlld3Bv
cnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaXNwYXRj
aFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmNy
ZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENv
bXBvc2l0aW5nTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVuZGVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50
c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW5k
ZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmguCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OmxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4u
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGV0YWNoKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJMYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYktpdDIucHJpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAoRHJhd2luZ0FyZWEpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2Up
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaDoKKyAgICAg
ICAgKERyYXdpbmdBcmVhSW1wbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp+TGF5ZXJU
cmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRTaG91bGROb3RpZnlBZnRlck5l
eHRTY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRl
bnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNlUmVwYWlu
dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZEluc3RhbGxQYWdl
T3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRVbmlu
c3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVyRmlsdGVycyk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphdHRhY2hMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXRhY2hMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYpOgorICAgICAgICAoV2ViS2l0Ojp1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb29yZGluYXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0cm95UGFnZU92
ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9w
dEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZSk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVw
ZGF0ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1
cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyVHJlZUNvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6cGFnZU92ZXJsYXlTaG91bGRBcHBseUZh
ZGVXaGVuUGFpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6
cGF1c2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6
cmVzdW1lUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW46
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpsYXllckJ5SURNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvV2ViTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpk
aWRDaGFuZ2VMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OmRpZENoYW5nZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OmRpZENoYW5nZUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6ZGlkQ2hhbmdlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJv
dmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXI6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNl
dE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjppZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0VHJhamVjdG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250
ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2hvdWxkVXNl
VGlsZWRCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXI6OnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6YWRqdXN0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlV2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjppbml0RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjpzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NM
YXllci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHcmFwaGljc0xheWVyLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6aW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjptYXNrVGFyZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tUYXJnZXQpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRS
ZWNlaXZlTWVzc2FnZSk6CisKIDIwMTItMDYtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFRlc3QgL3dlYmtpdDIvV2ViS2l0V2Vi
Vmlldy9wZXJtaXNzaW9uLXJlcXVlc3RzIGZhaWxzIGR1ZSB0byBhIHJ1bnRpbWUgd2FybmluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1dl
YktpdDIvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4IDBhNTBjN2QuLjMxOWJmN2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9EZXJpdmVkU291cmNlcy5wcmkKQEAgLTYzLDcgKzYzLDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMg
PSBcCiAgICAgRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgRHJhd2luZ0FyZWFQcm94
eS5tZXNzYWdlcy5pbiBcCiAgICAgRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluIFwKLSAgICBM
YXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gXAorICAgIExheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkubWVzc2FnZXMuaW4gXAogICAgIFBsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5p
biBcCiAgICAgUGx1Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4gXApAQCAtOTAsNyArOTAsNyBAQCBNRVNTQUdFX1JFQ0VJVkVS
UyA9IFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBcCiAgICAgV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9EcmF3aW5nQXJl
YS5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIFwK
KyAgICBXZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1l
c3NhZ2VzLmluIFwKICAgICBXZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBcCiAgICAg
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdl
SUQuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKaW5kZXgg
NWYzOThhYS4uZDkyM2ExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9NZXNzYWdlSUQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01l
c3NhZ2VJRC5oCkBAIC0zOCw3ICszOCw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsKICAgICBNZXNz
YWdlQ2xhc3NBdXRoZW50aWNhdGlvbk1hbmFnZXIsCiAgICAgTWVzc2FnZUNsYXNzRHJhd2luZ0Fy
ZWEsCiAgICAgTWVzc2FnZUNsYXNzSW5qZWN0ZWRCdW5kbGUsCi0gICAgTWVzc2FnZUNsYXNzTGF5
ZXJUcmVlSG9zdCwKKyAgICBNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvciwKICAgICBN
ZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NX
ZWJDb29raWVNYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc1dlYkRhdGFiYXNlTWFuYWdlciwKQEAg
LTYwLDcgKzYwLDcgQEAgZW51bSBNZXNzYWdlQ2xhc3MgewogICAgIC8vIE1lc3NhZ2VzIHNlbnQg
YnkgdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBVSSBwcm9jZXNzLgogICAgIE1lc3NhZ2VDbGFzc0Rv
d25sb2FkUHJveHksCiAgICAgTWVzc2FnZUNsYXNzRHJhd2luZ0FyZWFQcm94eSwKLSAgICBNZXNz
YWdlQ2xhc3NMYXllclRyZWVIb3N0UHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdl
clByb3h5LAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvbnRleHQsCiAgICAgTWVzc2FnZUNsYXNzV2Vi
Q29udGV4dExlZ2FjeSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDdiOWFiOTkuLmY1ZjM4MDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaQpAQCAtMjE0LDcgKzIxNCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9HZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVy
L1Byb2Nlc3NMYXVuY2hlci5oIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNo
ZXIuaCBcCi0gICAgVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIFwKKyAgICBVSVByb2Nl
c3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0
aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIFwKICAgICBVSVByb2Nlc3MvTm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIFwK
ICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb24uaCBcCkBAIC0zNTUs
NyArMzU1LDYgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFcnJvcnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9u
Q2xpZW50LmggXAotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5o
IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xp
ZW50LmggXApAQCAtMzY3LDYgKzM2Niw4IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBc
CisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRv
ci9XZWJHcmFwaGljc0xheWVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGln
aHRDb250cm9sbGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBcCkBAIC0zNzcsNyArMzc4LDYg
QEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmggXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJVbmRvU3RlcC5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJU
cmVlSG9zdFF0LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0QnVp
bHRpbkJ1bmRsZS5oIFwKQEAgLTU2Niw3ICs1NjYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVBy
b2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNo
ZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQv
VGhyZWFkTGF1bmNoZXJRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHku
Y3BwIFwKKyAgICBVSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgXAogICAg
IFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNw
cCBcCiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb24uY3BwIFwKQEAgLTcyMiw3ICs3MjIsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgXAogICAgIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcCBcCi0gICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwIFwKQEAg
LTc0MCw2ICs3MzksOCBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRW5j
b2RlckFkYXB0ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCisgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5h
dG9yLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dl
YkdyYXBoaWNzTGF5ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0
Q29udHJvbGxlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBcCkBAIC03NTQsNyAr
NzU1LDYgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91
cFByb3h5LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmNwcCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYkluc3BlY3RvclF0LmNwcCBcCi0gICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9XZWJQYWdlUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvbm5lY3Rpb25Ub1VJ
UHJvY2Vzcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXggZTBk
NjAxMi4uZTFmNjc1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0
UHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVk
ZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlU0dOb2RlLmgi
CiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTcyLDkgKzcyLDkgQEAgdm9p
ZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIpCiAgICAgaWYg
KCF3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExh
eWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5ID0gd2ViUGFnZVByb3h5LT5kcmF3
aW5nQXJlYSgpLT5sYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICBpZiAobGF5ZXJUcmVlSG9zdFBy
b3h5LT5sYXllclRyZWVSZW5kZXJlcigpKQotICAgICAgICBsYXllclRyZWVIb3N0UHJveHktPmxh
eWVyVHJlZVJlbmRlcmVyKCktPnBhaW50VG9HcmFwaGljc0NvbnRleHQocGFpbnRlcik7CisgICAg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IHdl
YlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpOwor
ICAgIGlmIChsYXllclRyZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpKQor
ICAgICAgICBsYXllclRyZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpLT5w
YWludFRvR3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwogfQogCiBRU0dOb2RlKiBRUXVpY2tXZWJQ
YWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0
YSopCkBAIC04Miw4ICs4Miw4IEBAIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50
Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKICAgICBpZiAoIWQt
PndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIG9sZE5vZGU7CiAK
LSAgICBMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSA9IGQtPndlYlBhZ2VQ
cm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAgV2ViTGF5ZXJU
cmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gbGF5ZXJUcmVlSG9zdFByb3h5LT5sYXllclRyZWVSZW5k
ZXJlcigpOworICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkgPSBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkoKTsKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBsYXll
clRyZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOwogCiAgICAgUXRXZWJQ
YWdlU0dOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8UXRXZWJQYWdlU0dOb2RlKj4ob2xkTm9kZSk7
CiAgICAgaWYgKCFub2RlKQpAQCAtMTU5LDggKzE1OSw4IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVBy
aXZhdGU6OnVwZGF0ZVNpemUoKQogICAgIFFTaXplRiBzY2FsZWRTaXplID0gY29udGVudHNTaXpl
ICogY29udGVudHNTY2FsZTsKIAogICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0g
d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmIChkcmF3aW5nQXJlYSAmJiBkcmF3
aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkpCi0gICAgICAgIGRyYXdpbmdBcmVhLT5sYXll
clRyZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKGNvbnRlbnRzU2l6ZSk7CisgICAgaWYg
KGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCkp
CisgICAgICAgIGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCktPnNldENv
bnRlbnRzU2l6ZShjb250ZW50c1NpemUpOwogCiAgICAgcS0+c2V0U2l6ZShzY2FsZWRTaXplKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4
IDA4YjIyNTcuLjVmN2IxMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3RQcm94eS5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNs
dWRlIDxDb3JlSVBDL01lc3NhZ2VJRC5oPgogI2VuZGlmCiAKQEAgLTY5LDcgKzY5LDcgQEAgV2Vi
Q29yZTo6SW50UmVjdCBEcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3QoKSBjb25zdAogICAg
IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZVByb3h5LT52aWV3U2l6
ZSgpKTsKIH0KIAotdm9pZCBEcmF3aW5nQXJlYVByb3h5OjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9z
dFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1l
c3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit2b2lkIERyYXdp
bmdBcmVhUHJveHk6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDlmMTcwNWQuLjQyNmZlYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApAQCAtNTQs
NyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgTGF5ZXJUcmVlQ29udGV4dDsKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKK2NsYXNzIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CiBjbGFzcyBVcGRhdGVJbmZvOwogY2xhc3MgV2ViTGF5
ZXJUcmVlSW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKQEAgLTkzLDEyICs5MywxMiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdwb3J0VmlzaWJsZVJl
Y3QoKSBjb25zdCB7IHJldHVybiBjb250ZW50c1JlY3QoKTsgfQogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNCYWNr
aW5nU3RvcmVSZWFkeSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICBMYXllclRyZWVIb3N0
UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9z
dFByb3h5LmdldCgpOyB9CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5nZXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uID0gV2ViQ29yZTo6
RmxvYXRQb2ludCgpKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKGlu
dCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlE
LCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqKTsKIAogICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFn
ZVByb3h5OyB9CiAjZW5kaWYKQEAgLTExMiw3ICsxMTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2Vi
Q29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lU
SU5HKQotICAgIE93blB0cjxMYXllclRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9zdFByb3h5
OworICAgIE93blB0cjxMYXllclRyZWVDb29yZGluYXRvclByb3h5PiBtX2xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDE1NjI2NzEuLjBiYjc0NDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKICNp
ZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHku
aCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjZW5kaWYKIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02MSw3ICs2MSw3IEBAIERyYXdpbmdBcmVhUHJveHlJ
bXBsOjpEcmF3aW5nQXJlYVByb3h5SW1wbChXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKICNp
ZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKICAgICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVh
cmx5IHRvIGFsbG93IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxl
IEFDIGlzIGVudGVyZWQgdGhlcmUuCiAgICAgaWYgKHdlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCkt
PnByZWZlcmVuY2VzKCktPmZvcmNlQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5KHRoaXMpKTsKICNlbmRpZgogfQogCkBAIC0zNTQsMjIgKzM1NCwy
MiBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleAogICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxh
eWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJ
TkcpCi0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVI
b3N0UHJveHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKKyAgICBp
ZiAoIW1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVDb29y
ZGluYXRvclByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkodGhp
cykpOwogI2VuZGlmCiB9CiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLXZvaWQgRHJh
d2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdl
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQordm9pZCBEcmF3aW5nQXJl
YVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdl
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIGlmIChtX2xh
eWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPmRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1l
bnRzKTsKKyAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclBy
b3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiB9CiAKIHZvaWQg
RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRpb24pCiB7Ci0gICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdFByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZlY3Rvciwg
YWNjdXJhdGVWaXNpYmxlQ29udGVudHNQb3NpdGlvbik7CisgICAgaWYgKG1fbGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5zZXRW
aXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1JlY3QsIHNjYWxlLCB0cmFqZWN0b3J5
VmVjdG9yLCBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKTsKIH0KIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4
IDM0NmYzNTQuLjRjNGFjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKK2NsYXNzIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk7CiAKIGNsYXNzIERyYXdpbmdBcmVhUHJveHlJbXBsIDogcHVi
bGljIERyYXdpbmdBcmVhUHJveHkgewogcHVibGljOgpAQCAtODMsNyArODMsNyBAQCBwcml2YXRl
OgogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRz
UmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3Rvcnks
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRp
b24gPSBXZWJDb3JlOjpGbG9hdFBvaW50KCkpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJl
ZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAjZW5kaWYKICNlbHNlCiAg
ICAgYm9vbCBpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNi
MDIxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5H
KQorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKKworI2luY2x1ZGUgIkxh
eWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVl
SW5mby5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3
aW5nQXJlYVByb3h5KQorICAgIDogbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkp
CisgICAgLCBtX3JlbmRlcmVyKGFkb3B0UmVmKG5ldyBXZWJMYXllclRyZWVSZW5kZXJlcih0aGlz
KSkpCit7Cit9CisKK0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGlu
YXRvclByb3h5KCkKK3sKKyAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKK30KKwordm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQoreworICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1
cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXll
cklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVUaWxlRm9y
TGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6
U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgUmVmUHRyPFNoYXJlYWJsZVN1
cmZhY2U+IHN1cmZhY2U7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdWludDMyX3Qg
dG9rZW4gPSB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUuZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsK
KyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPjo6aXRlcmF0
b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodG9rZW4pOworICAgIGlmIChpdCA9PSBtX3N1cmZhY2Vz
LmVuZCgpKSB7CisgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBk
YXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKKyAgICAgICAgbV9zdXJmYWNlcy5hZGQodG9rZW4sIHN1
cmZhY2UpOworICAgIH0gZWxzZQorICAgICAgICBzdXJmYWNlID0gaXQtPnNlY29uZDsKKyNlbHNl
CisgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZh
Y2VIYW5kbGUpOworI2VuZGlmCisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwg
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0
YXJnZXRSZWN0LCBzdXJmYWNlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXll
cklELCBpbnQgdGlsZUlEKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQp
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZWxldGVDb21wb3NpdGlu
Z0xheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworICAg
IHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVy
ZXIuZ2V0KCksIGlkKSk7CisgICAgdXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCBp
ZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgaW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBv
c2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJ
RD4mIGNoaWxkcmVuKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRMYXllckNoaWxkcmVuLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2hpbGRyZW4p
KTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZX
ZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgZmlsdGVycykpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6ZGlkUmVuZGVyRnJhbWUoKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5kZXJlci5nZXQoKSkpOworICAg
IHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0IFdlYktpdDo6
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZSwgbV9y
ZW5kZXJlci5nZXQoKSwga2V5LCBiaXRtYXApKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCit7
CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJ
bWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXpl
KQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRD
b250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNvbnRlbnRzU2l6ZSkpOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlW
ZWN0b3IsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRz
UG9zaXRpb24pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QsIG1fcmVuZGVyZXIuZ2V0KCksIHJlY3QsIHNjYWxl
LCBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKSk7CisgICAgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OlNldFZpc2libGVDb250ZW50c1JlY3QocmVjdCwgc2NhbGUsIHRyYWplY3RvcnlWZWN0b3Ip
LCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cGFnZUlEKCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRp
b24sIG1fcmVuZGVyZXIuZ2V0KCksIHBvc2l0aW9uKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCit7CisgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIu
Z2V0KCksIGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit9CisjZW5kaWYgLy8gVVNFKFVJX1NJREVfQ09N
UE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGU3
YjdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuaApAQCAtMCwwICsxLDkwIEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaWZuZGVmIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlfaAorI2RlZmluZSBMYXllclRyZWVD
b29yZGluYXRvclByb3h5X2gKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2lu
Y2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworY2xhc3MgUVNHTm9k
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdl
YkxheWVyVHJlZVJlbmRlcmVyOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOworCitjbGFzcyBM
YXllclRyZWVDb29yZGluYXRvclByb3h5IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICB2aXJ0dWFsIH5MYXllclRyZWVDb29y
ZGluYXRvclByb3h5KCk7CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5
ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVy
Q2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7CisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2Vi
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisgICAg
dm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOworICAgIHZvaWQgc2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKKyAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNl
dENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5LCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKTsKKyAgICB2b2lkIGRpZFJl
bmRlckZyYW1lKCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlE
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAg
ICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CisgICAg
dm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7CisgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UoaW50NjRfdCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgp
OworICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOworICAgIHZvaWQgc3lu
Y0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwg
dWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3Rv
cmVzKCk7CisgICAgV2ViTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
aXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICBEcmF3aW5nQXJl
YVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisgICAgUmVmUHRyPFdlYkxheWVyVHJlZVJlbmRl
cmVyPiBtX3JlbmRlcmVyOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIEhhc2hNYXA8
dWludDMyX3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+IG1fc3VyZmFjZXM7CisjZW5kaWYK
K307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBMYXllclRyZWVDb29yZGluYXRvclByb3h5
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzI4NGI5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzgg
QEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisj
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMgLT4gTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CisgICAgU2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVp
bnQzMl90IGlkLCBXZWJLaXQ6OldlYkxheWVySW5mbyBsYXllckluZm8pCisgICAgU2V0Q29tcG9z
aXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVu
KQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVy
cyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQorI2VuZGlm
CisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCisgICAgRGVsZXRlQ29t
cG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMy
X3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJL
aXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgVXBkYXRlVGlsZUZvckxheWVy
KHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVj
dCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFJlbW92ZVRpbGVG
b3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlEKQorICAgIENyZWF0ZURpcmVjdGx5
Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlIGhhbmRsZSkKKyAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBr
ZXkpCisgICAgRGlkUmVuZGVyRnJhbWUoKQorICAgIERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdl
YkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQorICAgIFN5bmNDYW52YXModWludDMyX3QgaWQsIFdl
YkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4p
Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRy
ZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQ
cm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4N2YwNzIuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0KLSNpbmNsdWRlICJMYXllclRyZWVIb3N0TWVzc2FnZXMu
aCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgIldlYkxheWVy
VHJlZVJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKLSAgICA6IG1fZHJhd2luZ0FyZWFQcm94eShk
cmF3aW5nQXJlYVByb3h5KQotICAgICwgbV9yZW5kZXJlcihhZG9wdFJlZihuZXcgV2ViTGF5ZXJU
cmVlUmVuZGVyZXIodGhpcykpKQotewotfQotCi1MYXllclRyZWVIb3N0UHJveHk6On5MYXllclRy
ZWVIb3N0UHJveHkoKQotewotICAgIG1fcmVuZGVyZXItPmRldGFjaCgpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQotewotICAgIG1fZHJhd2luZ0FyZWFQ
cm94eS0+dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRp
c3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIG1f
cmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRl
SW5mby5zY2FsZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxl
SUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlOwotI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQotICAgIHVpbnQzMl90IHRva2VuID0gdXBkYXRlSW5mby5zdXJmYWNl
SGFuZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVm
UHRyPFNoYXJlYWJsZVN1cmZhY2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHRv
a2VuKTsKLSAgICBpZiAoaXQgPT0gbV9zdXJmYWNlcy5lbmQoKSkgewotICAgICAgICBzdXJmYWNl
ID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7Ci0g
ICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2VuLCBzdXJmYWNlKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgc3VyZmFjZSA9IGl0LT5zZWNvbmQ7Ci0jZWxzZQotICAgIHN1cmZhY2UgPSBTaGFyZWFibGVT
dXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSNlbmRpZgotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3Jl
bmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpUaWxl
VXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgc3VyZmFjZSwgdXBkYXRl
SW5mby5zdXJmYWNlT2Zmc2V0KSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVt
b3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVy
LmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fcmVuZGVyZXIu
Z2V0KCksIGlkKSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQgaWQpCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklE
LCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJ
RCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdldCgp
LCBpZCwgaW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRp
bmdMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYg
Y2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldExheWVyQ2hpbGRyZW4sIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjaGlsZHJlbikpOwot
fQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNl
dENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldExheWVyRmlsdGVycywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGZpbHRlcnMp
KTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUo
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVz
aExheWVyQ2hhbmdlcywgbV9yZW5kZXJlci5nZXQoKSkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYg
aGFuZGxlKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXksIGJpdG1h
cCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9z
aXRlZEltYWdlKGludDY0X3Qga2V5KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxh
eWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSkpOwot
fQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgY29udGVudHNTaXplKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNvbnRlbnRz
U2l6ZSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRz
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYg
dHJhamVjdG9yeVZlY3RvciwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYWNjdXJhdGVWaXNp
YmxlQ29udGVudHNQb3NpdGlvbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXll
clRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9yZW5kZXJlci5nZXQoKSwg
cmVjdCwgc2NhbGUsIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRpb24pKTsKLSAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlLCB0cmFqZWN0b3J5VmVj
dG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgbV9kcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6
UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihj
b25zdCBJbnRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uLCBtX3JlbmRlcmVyLmdl
dCgpLCBwb3NpdGlvbikpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY0NhbnZh
cyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjYW52YXNTaXplLCBn
cmFwaGljc1N1cmZhY2VUb2tlbikpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cHVy
Z2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMo
KSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotfQotI2VuZGlm
IC8vIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTU4
YTVhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKLSNkZWZpbmUgTGF5ZXJUcmVlSG9zdFBy
b3h5X2gKLQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiQmFja2lu
Z1N0b3JlLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIlJlZ2lv
bi5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29w
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotY2xhc3MgUVNHTm9kZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkxheWVySW5mbzsKLWNsYXNzIFdlYkxheWVyVHJlZVJl
bmRlcmVyOwotY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwotCi1jbGFzcyBMYXllclRyZWVIb3N0
UHJveHkgewotcHVibGljOgotICAgIExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5
Kik7Ci0gICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAgdm9pZCBzZXRDb21w
b3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0gICAg
dm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9y
PFdlYkxheWVySUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29t
cG9zaXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYpOwotI2VuZGlmCi0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxh
eWVySUQpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0g
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHB1cmdlR0xS
ZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmKTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0
b3J5LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bv
c2l0aW9uKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxl
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVy
KGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5
ZXJJRCwgaW50IHRpbGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7Ci0gICAg
dm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7Ci0gICAgdm9pZCBk
aWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwg
Q29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lk
IHVwZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2b2lk
IGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlv
bik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7Ci0gICAgdm9p
ZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJlciogbGF5ZXJU
cmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsK
LQotICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKLSAgICBSZWZQdHI8
V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9z
dXJmYWNlczsKLSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIExheWVyVHJl
ZUhvc3RQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTg4YjQ0Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
SG9zdFByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIwot
IyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSMgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi1tZXNzYWdlcyAtPiBMYXllclRyZWVI
b3N0UHJveHkgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwgV2Vi
S2l0OjpXZWJMYXllckluZm8gbGF5ZXJJbmZvKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJDaGls
ZHJlbih1aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnModWludDMyX3QgaWQs
IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVycykKLSNlbmRpZgotICAgIFNldFJvb3RD
b21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIo
dWludDMyX3QgaWQpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGlu
dCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXll
cklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3Vy
ZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMy
X3QgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLSAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCi0g
ICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQotICAgIERpZFJl
bmRlckZyYW1lKCkKLSAgICBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2lu
dCBwb3NpdGlvbikKLSAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJbnRTaXpl
IGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKQotfQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcApp
bmRleCAzODUwZTUzLi5iODVlMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJCYWNraW5nU3Rv
cmUuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCiAjaW5jbHVkZSAi
U2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgpAQCAtODUsOSAr
ODUsOSBAQCBzdGF0aWMgSW50UG9pbnQgYm91bmRlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50UgogICAgIHJldHVybiBJbnRQb2ludChzY3Jv
bGxQb3NpdGlvblgsIHNjcm9sbFBvc2l0aW9uWSk7CiB9CiAKLVdlYkxheWVyVHJlZVJlbmRlcmVy
OjpXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQ
cm94eSkKK1dlYkxheWVyVHJlZVJlbmRlcmVyOjpXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRy
ZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5KQogICAgIDogbV9j
b250ZW50c1NjYWxlKDEpCi0gICAgLCBtX2xheWVyVHJlZUhvc3RQcm94eShsYXllclRyZWVIb3N0
UHJveHkpCisgICAgLCBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkobGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSkKICAgICAsIG1fcm9vdExheWVySUQoSW52YWxpZFdlYkxheWVySUQpCiAgICAg
LCBtX2lzQWN0aXZlKGZhbHNlKQogewpAQCAtMTc1LDggKzE3NSw4IEBAIHZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwg
ZmxvYXQgc2NhCiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KCkK
IHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9z
dFByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+dXBkYXRlVmlld3Bv
cnQoKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JG
aXhlZExheWVycygpCkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6Zmx1c2hMYXllckNoYW5nZXMoKQogCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW5k
ZXJOZXh0RnJhbWUoKQogewotICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0UHJveHktPnJlbmRlck5leHRGcmFtZSgpOworICAgIGlmIChtX2xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS0+cmVuZGVyTmV4dEZyYW1lKCk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmVu
c3VyZVJvb3RMYXllcigpCkBAIC00NjUsMTMgKzQ2NSwxMyBAQCB2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkKIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0g
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICBp
ZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCiB2b2lkIFdlYkxheWVyVHJl
ZVJlbmRlcmVyOjpkZXRhY2goKQogewotICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5ID0gMDsKKyAg
ICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgPSAwOwogfQogCiB2b2lkIFdlYkxheWVyVHJl
ZVJlbmRlcmVyOjphcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVy
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCmlu
ZGV4IGQ2NmIxOWQuLjJhNGJhYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJMYXllclRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJMYXllclRyZWVSZW5kZXJlci5oCkBAIC00MCw3ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgTGF5ZXJCYWNraW5nU3RvcmU7Ci1jbGFzcyBMYXllclRyZWVIb3N0UHJveHk7
CitjbGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5OwogY2xhc3MgV2ViTGF5ZXJJbmZvOwog
Y2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgfTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJlcihMYXll
clRyZWVIb3N0UHJveHkqKTsKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVDb29y
ZGluYXRvclByb3h5Kik7CiAgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlUmVuZGVyZXIoKTsKICAg
ICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgPSAw
KTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCk7CiAgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKIAotICAgIExheWVyVHJlZUhvc3RQ
cm94eSogbV9sYXllclRyZWVIb3N0UHJveHk7CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eSogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5OwogICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNU
b0RlbGV0ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRl
eCA2MjdlZTUyLi5iNTA0NmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcApAQCAtOTQsNyArOTQsNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoVUlfU0lERV9DT01Q
T1NJVElORykKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShRVCkKQEAgLTE3MzcsOCArMTczNyw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRS
ZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpN
CiAgICAgfQogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1lc3NhZ2VJ
RC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0UHJveHk+KCkpIHsKLSAgICAg
ICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoY29u
bmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOworICAgIGlmIChtZXNzYWdlSUQuaXM8Q29y
ZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eT4oKSkgeworICAgICAg
ICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3Nh
Z2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSBiL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDI0Y2M1YTIuLjc5MjgyZDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIucHJpCkBAIC01NSw2ICs1NSw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9E
SVIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvcXQgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBh
Z2UgXAorICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL3F0IFwKICAgICAkJFNPVVJDRV9E
SVIvUGx1Z2luUHJvY2VzcwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggODhkNjRlYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNzQ2ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykK
LSNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0KLSNpbmNsdWRlICJCYWNraW5nU3RvcmUu
aCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
IgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgotI2luY2x1ZGUgIldl
YlBhZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFzaE1hcDxXZWJMYXll
cklELCBXZWJHcmFwaGljc0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCi17Ci0gICAgc3RhdGljIEhh
c2hNYXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKLSAgICByZXR1
cm4gZ2xvYmFsTWFwOwotfQotCi1XZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjps
YXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQotewotICAgIEhhc2hNYXA8V2ViTGF5ZXJJ
RCwgV2ViR3JhcGhpY3NMYXllcio+JiB0YWJsZSA9IGxheWVyQnlJRE1hcCgpOwotICAgIEhhc2hN
YXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZp
bmQoaWQpOwotICAgIGlmIChpdCA9PSB0YWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLXN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJ
RChHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBo
aWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpk
aWRDaGFuZ2VMYXllclN0YXRlKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1
ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWly
ZWQodGhpcyk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4o
KQotewotICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkp
Ci0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0KLSNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRl
cnMoKQotewotICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSB0cnVlOwotICAgIGlmIChjbGllbnQo
KSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLSNlbmRp
ZgotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkK
LXsKLSAgICBpZiAoIXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xh
eWVyKGNoaWxkcmVuKClbaV0pLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwotICAgIGlm
IChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXll
cigpKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpkaWRDaGFuZ2VHZW9tZXRyeSgpCi17Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OwotICAgIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci19Ci0KLVdlYkdyYXBoaWNzTGF5
ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotICAgIDog
R3JhcGhpY3NMYXllcihjbGllbnQpCi0gICAgLCBtX21hc2tUYXJnZXQoMCkKLSAgICAsIG1faW5V
cGRhdGVNb2RlKGZhbHNlKQotICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQot
ICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQ2hp
bGRyZW4odHJ1ZSkKLSAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQotICAgICwgbV9jYW52
YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkK
LSAgICAsIG1fY29udGVudHNTY2FsZSgxKQotICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDAp
Ci17Ci0gICAgc3RhdGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOwotICAgIG1faWQgPSBu
ZXh0TGF5ZXJJRCsrOwotICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsKLX0KLQot
V2ViR3JhcGhpY3NMYXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQotewotICAgIGxheWVyQnlJRE1h
cCgpLnJlbW92ZShpZCgpKTsKLQotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsK
LSAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudC0+ZGV0YWNoTGF5ZXIodGhpcyk7Ci0gICAgfQotICAgIHdpbGxCZURlc3Ryb3llZCgp
OwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCi17Ci0gICAg
R3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NM
YXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4p
Ci17Ci0gICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsK
LSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBj
aGlsZCA9IHRvV2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7Ci0gICAgICAgIGNoaWxkLT5z
ZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAg
ICAgIGNoaWxkLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgfQotICAgIGRpZENoYW5nZUNo
aWxkcmVuKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGQobGF5ZXIpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBo
aWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBo
aWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hp
bGRyZW4oKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRD
aGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIp
LT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0g
ICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAg
IGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKLXsK
LSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKLSAgICB0
b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2Vi
R3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3Jh
cGhpY3NMYXllciogc2libGluZykKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93
KGxheWVyLCBzaWJsaW5nKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgdG9XZWJH
cmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRpZENoYW5n
ZUNoaWxkcmVuKCk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdy
YXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKLXsKLSAgICBi
b29sIG9rID0gR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7
Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRpZENoYW5nZUNoaWxk
cmVuKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPnNldFdlYkdyYXBoaWNz
TGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNz
TGF5ZXIobmV3Q2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCi17Ci0gICAg
aWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHBh
cmVudCgpKSkKLSAgICAgICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAg
R3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHApCi17Ci0gICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7Ci0gICAgZGlkQ2hhbmdlR2Vv
bWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHApCi17Ci0gICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7Ci0gICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7Ci0g
ICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgaWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNr
TGF5ZXIoKS0+c2V0U2l6ZShzaXplKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdCkKLXsKLSAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOwotICAgIGRpZENoYW5nZUdlb21l
dHJ5KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCi17Ci0gICAgaWYgKGNoaWxkcmVuVHJhbnNm
b3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0odCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCi17Ci0gICAgaWYgKHByZXNl
cnZlczNEKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0
UHJlc2VydmVzM0QoYik7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKLXsKLSAgICBpZiAobWFza3NU
b0JvdW5kcygpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRN
YXNrc1RvQm91bmRzKGIpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKLXsKLSAgICBpZiAoZHJhd3ND
b250ZW50KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldERy
YXdzQ29udGVudChiKTsKLQotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCi17Ci0gICAgaWYgKGNv
bnRlbnRzT3BhcXVlKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX21haW5CYWNr
aW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSgh
Yik7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7Ci0gICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNl
VmlzaWJpbGl0eShib29sIGIpCi17Ci0gICAgaWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJp
bGl0eShiKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQotewotICAgIGlmICh0aGlzLT5vcGFj
aXR5KCkgPT0gb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6
c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgaWYgKGNvbnRlbnRzUmVjdCgpID09IHIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXko
KQotewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlOwotICAgIHNldENvbnRlbnRz
VG9JbWFnZSgwKTsKLSAgICBzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOwotICAgIG1f
Y2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCi17Ci0gICAg
bV9jYW52YXNQbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKLSAgICBtX2NhbnZhc05lZWRz
RGlzcGxheSA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90
aWZ5U3luY1JlcXVpcmVkKHRoaXMpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotYm9v
bCBXZWJHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG5l
d0ZpbHRlcnMpCi17Ci0gICAgaWYgKGZpbHRlcnMoKSA9PSBuZXdGaWx0ZXJzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkaWRDaGFuZ2VGaWx0ZXJzKCk7Ci0gICAgcmV0dXJuIEdyYXBoaWNz
TGF5ZXI6OnNldEZpbHRlcnMobmV3RmlsdGVycyk7Ci19Ci0jZW5kaWYKLQotCi12b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYg
KGltYWdlID09IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQ2NF90IG5ld0lEID0g
MDsKLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7Ci0gICAgICAgIC8vIFdlIGFk
b3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBh
dm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KLSAgICAgICAgbmV3SUQg
PSBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoaW1hZ2Up
OwotICAgICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdT
dG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCAmJiBuZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudCBpcyBub3Qgc2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBzdG9yZSBJ
RC4KLSAgICAgICAgQVNTRVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAg
ICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIH0KLQotICAgIG1fbGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKLSAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgaWYg
KGxheWVyID09IG1hc2tMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xh
eWVyOjpzZXRNYXNrTGF5ZXIobGF5ZXIpOwotCi0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbGF5ZXItPnNldFNpemUoc2l6ZSgpKTsKLSAgICBXZWJHcmFwaGljc0xheWVy
KiB3ZWJHcmFwaGljc0xheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKLSAgICB3ZWJH
cmFwaGljc0xheWVyLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudCk7Ci0gICAgd2ViR3JhcGhpY3NMYXllci0+c2V0TWFza1RhcmdldCh0aGlzKTsKLSAg
ICB3ZWJHcmFwaGljc0xheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotCi19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRl
ZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKGxheWVyID09IHJlcGxp
Y2FMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIHRv
V2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJH
cmFwaGljc0xheWVyQ2xpZW50KTsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRC
eUxheWVyKGxheWVyKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpKSk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAobV9tYWluQmFj
a2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVj
dChyZWN0KSk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi1XZWJMYXllcklEIFdl
YkdyYXBoaWNzTGF5ZXI6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pZDsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b1dlYkdyYXBoaWNz
TGF5ZXIobWFza0xheWVyKCkpKQotICAgICAgICBtYXNrLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKLQotICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiByZXBsaWNhID0g
dG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKLSAgICAgICAgcmVwbGljYS0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBtX3dlYkdyYXBoaWNz
TGF5ZXJDbGllbnQtPnN5bmNGaXhlZExheWVycygpOwotCi0gICAgc3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxk
cmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKHJlY3QpOwotfQotCi1XZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkdyYXBo
aWNzTGF5ZXIqPihsYXllcik7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NoaWxk
cmVuKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICBWZWN0b3I8V2ViTGF5ZXJJ
RD4gY2hpbGRJRHM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUo
KTsgKytpKQotICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClb
aV0pKTsKLQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyQ2hpbGRyZW4o
bV9pZCwgY2hpbGRJRHMpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jRmlsdGVycygpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0
ZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOwot
ICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0
ZXJzKCkpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3Rh
dGUoKQotIHsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gZmFsc2U7Ci0gICAgbV9sYXllckluZm8u
Zml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1ZpZXdwb3J0KCk7Ci0KLSAgICBtX2xheWVySW5mby5h
bmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7Ci0gICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNp
YmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFu
c2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3Bh
cXVlID0gY29udGVudHNPcGFxdWUoKTsKLSAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBj
b250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRl
bnQoKTsKLSAgICBtX2xheWVySW5mby5tYXNrID0gdG9XZWJMYXllcklEKG1hc2tMYXllcigpKTsK
LSAgICBtX2xheWVySW5mby5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOwotICAgIG1f
bGF5ZXJJbmZvLm9wYWNpdHkgPSBvcGFjaXR5KCk7Ci0gICAgbV9sYXllckluZm8ucGFyZW50ID0g
dG9XZWJMYXllcklEKHBhcmVudCgpKTsKLSAgICBtX2xheWVySW5mby5wb3MgPSBwb3NpdGlvbigp
OwotICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJlc2VydmVzM0QoKTsKLSAgICBtX2xh
eWVySW5mby5yZXBsaWNhID0gdG9XZWJMYXllcklEKHJlcGxpY2FMYXllcigpKTsKLSAgICBtX2xh
eWVySW5mby5zaXplID0gc2l6ZSgpOwotICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5z
Zm9ybSgpOwotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyU3RhdGUobV9p
ZCwgbV9sYXllckluZm8pOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMo
KQotewotICAgIGlmICghbV9jYW52YXNOZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9jYW52YXNQbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbiA9
IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93
ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jQ2FudmFzKG1faWQsIEludFNpemUoc2l6ZSgpLndp
ZHRoKCksIHNpemUoKS5oZWlnaHQoKSksIGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKLSNlbmRpZgot
ICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKQotewotICAgIGlmICghbV9pbWFnZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkK
LSAgICAgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG1fd2ViR3JhcGhpY3NM
YXllckNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShtX2ltYWdlLmdldCgpKTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKQotewotICAgIC8vIFRoZSByZW1vdGUgaW1hZ2UgbWlnaHQgaGF2ZSBiZWVuIHJlbGVhc2Vk
IGJ5IHB1cmdlQmFja2luZ1N0b3Jlcy4KLSAgICBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOwot
ICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7Ci0gICAgc3luY0NoaWxkcmVuKCk7
Ci0gICAgc3luY0xheWVyU3RhdGUoKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgc3lu
Y0ZpbHRlcnMoKTsKLSNlbmRpZgotICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7Ci0gICAgc3lu
Y0NhbnZhcygpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRCZWdpbigpCi17Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVy
KGJvb2wgaXNSb290KQotewotICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290Owot
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpCi17Ci0gICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKLSAgICAgICAg
bV9tYWluQmFja2luZ1N0b3JlLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKHRyYWplY3RvcnlWZWN0
b3IpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQg
c2NhbGUpCi17Ci0gICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7Ci0gICAgYWRqdXN0Q29udGVu
dHNTY2FsZSgpOwotfQotCi1mbG9hdCBXZWJHcmFwaGljc0xheWVyOjplZmZlY3RpdmVDb250ZW50
c1NjYWxlKCkKLXsKLSAgICByZXR1cm4gc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKSA/IG1f
Y29udGVudHNTY2FsZSA6IDE7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRqdXN0Q29u
dGVudHNTY2FsZSgpCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUgfHwgbV9tYWluQmFja2luZ1N0b3JlLT5j
b250ZW50c1NjYWxlKCkgPT0gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBuZXcgYmFja2luZyBzdG9yZSBhbmQg
cGFpbnRpbmcgdGhlIGNvbnRlbnQsCi0gICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZHJvcCB0aGUg
cHJldmlvdXMgb25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluCi0gICAgLy8gYnJpZWZseSBzZWVp
bmcgZmxpY2tlcmluZyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBkcm9wcGVkIGJlZm9yZQotICAg
IC8vIHNvbWV0aGluZyByZXBsYWNlcyB0aGVtLgotICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUg
PSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOwotCi0gICAgLy8gTm8gcmVhc29uIHRvIHNh
dmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9yIG5vbi12aXNpYmxlIGFyZWFzLgotICAg
IG1fcHJldmlvdXNCYWNraW5nU3RvcmUtPnJlbW92ZUFsbE5vblZpc2libGVUaWxlcygpOwotCi0g
ICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlQmFja2luZ1N0b3JlKCkKLXsKLSAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihu
ZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFj
a2VuZDo6Y3JlYXRlKHRoaXMpKSk7Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0
c0FscGhhKCFjb250ZW50c09wYXF1ZSgpKTsKLSAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENv
bnRlbnRzU2NhbGUoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgcmVj
dCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVu
ZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKLXsKLX0KLQotYm9vbCBXZWJH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1faW5VcGRhdGVNb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2Vk
KCk7Ci19Ci0KLUludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250
ZW50c1JlY3QoKQotewotICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpOwotfQotCi1ib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNob3VsZFVzZVRp
bGVkQmFja2luZ1N0b3JlKCkKLXsKLSAgICByZXR1cm4gIXNlbGZPckFuY2VzdG9ySGF2ZU5vbkFm
ZmluZVRyYW5zZm9ybXMoKTsKLX0KLQotSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJh
Y2tpbmdTdG9yZVZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAoIXNob3VsZFVzZVRpbGVkQmFja2lu
Z1N0b3JlKCkpCi0gICAgICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgp
OwotCi0gICAgLy8gTm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4KLSAgICBp
ZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0ludmVydGlibGUoKSkKLSAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFJldHVybiBhIHByb2plY3Rpb24gb2YgdGhlIHZp
c2libGUgcmVjdCAoc3VyZmFjZSBjb29yZGluYXRlcykgb250byB0aGUgbGF5ZXIncyBwbGFuZSAo
bGF5ZXIgY29vcmRpbmF0ZXMpLgotICAgIC8vIFRoZSByZXN1bHRpbmcgcXVhZCBtaWdodCBiZSBz
cXVld2VkIGFuZCB0aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBx
dWFkLAotICAgIC8vIHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJlYWwgdmlz
aWJsZSBhcmVhIChhbmQgdGhlbiBldmVuIG1vcmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3ZlciByZWN0
IG11bHRpcGxpZXIpLgotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fbGF5ZXJUcmFuc2Zv
cm0uY29tYmluZWQoKS5pbnZlcnNlKCkuY2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChGbG9h
dFF1YWQoRmxvYXRSZWN0KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dmlzaWJsZUNvbnRlbnRz
UmVjdCgpKSkpKTsKLX0KLQotQ29sb3IgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBjb250ZW50c09wYXF1ZSgp
ID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OwotfQotCi1QYXNzT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gV2ViR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBk
YXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRs
ZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIHJldHVybiBtX3dl
YkdyYXBoaWNzTGF5ZXJDbGllbnQtPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09w
YXF1ZSgpID8gMCA6IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSwgaGFuZGxlLCBvZmZz
ZXQpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QpCi17Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5jcmVhdGVUaWxlKGlkKCks
IHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBk
YXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3dlYkdyYXBoaWNz
TGF5ZXJDbGllbnQtPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRS
ZWN0KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGludCB0aWxlSUQp
Ci17Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJ
RCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQot
ewotICAgIGlmICghZHJhd3NDb250ZW50KCkpIHsKLSAgICAgICAgbV9tYWluQmFja2luZ1N0b3Jl
LmNsZWFyKCk7Ci0gICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1faW5VcGRhdGVNb2RlID0gdHJ1ZTsKLSAgICAvLyBU
aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1haW4gdGlsZWQgYmFja2lu
ZyBzdG9yZSwgb25jZSB3ZQotICAgIC8vIGhhdmUgYSByZW1vdGUgY2xpZW50IGFuZCB3ZSBhcmUg
cmVhZHkgdG8gc2VuZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4KLSAgICBpZiAoIW1fbWFp
bkJhY2tpbmdTdG9yZSkKLSAgICAgICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgbV9tYWlu
QmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOwotICAgIG1faW5VcGRhdGVNb2RlID0g
ZmFsc2U7Ci0KLSAgICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBpcyBrZXB0IGFyb3Vu
ZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdlZW4KLSAgICAvLyByZW1vdmluZyB0aGUgZXhpc3Rp
bmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZpcnN0IHRpbWUKLSAgICAv
LyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92ZSB0aGUgcHJldmlvdXMg
YmFja2luZyBzdG9yZS4KLSAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlLT52aXNpYmxlQXJlYUlz
Q292ZXJlZCgpKQotICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci19Ci0K
LXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBtX21h
aW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFy
KCk7Ci0KLSAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkgewotICAgICAg
ICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xh
eWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgbV9sYXllckluZm8uaW1hZ2VC
YWNraW5nU3RvcmVJRCA9IDA7Ci0gICAgfQotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwot
ICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
V2ViR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqIGNs
aWVudCkKLXsKLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50ID09IGNsaWVudCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0b1dl
YkdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpKQotICAgICAgICByZXBsaWNhLT5zZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7Ci0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1h
c2sgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobWFza0xheWVyKCkpKQotICAgICAgICBtYXNrLT5zZXRX
ZWJHcmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0pOwotICAgICAgICBs
YXllci0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOwotICAgIH0KLQotICAgIC8v
IFdlIGhhdmUgdG8gcmVsZWFzZSByZXNvdXJjZXMgb24gdGhlIFVJIHByb2Nlc3MgaGVyZSBpZiB0
aGUgcmVtb3RlIGNsaWVudCBoYXMgY2hhbmdlZCBvciBpcyByZW1vdmVkLgotICAgIGlmIChtX3dl
YkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKLSAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0g
ICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+ZGV0YWNoTGF5ZXIodGhpcyk7Ci0gICAg
fQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCA9IGNsaWVudDsKLSAgICBpZiAoY2xpZW50
KQotICAgICAgICBjbGllbnQtPmF0dGFjaExheWVyKHRoaXMpOwotfQotCi12b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OmFkanVzdFZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAobV9tYWluQmFja2luZ1N0
b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQo
KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxl
UmVjdCgpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0KQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IGZhbHNlOwotICAgIG1fbGF5
ZXJUcmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtKCkpOwotICAgIG1fbGF5ZXJU
cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24oKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5z
ZXRBbmNob3JQb2ludChhbmNob3JQb2ludCgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldFNp
emUoc2l6ZSgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldEZsYXR0ZW5pbmcoIXByZXNlcnZl
czNEKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY2hpbGRy
ZW5UcmFuc2Zvcm0oKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5jb21iaW5lVHJhbnNmb3Jtcyhw
YXJlbnQoKSA/IHRvV2ViR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPm1fbGF5ZXJUcmFuc2Zvcm0u
Y29tYmluZWRGb3JDaGlsZHJlbigpIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAgICAv
LyBUaGUgY29tYmluZWQgdHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxlZEJhY2tpbmdTdG9y
ZVZpc2libGVSZWN0LgotICAgIGFkanVzdFZpc2libGVSZWN0KCk7Ci0gICAgYWRqdXN0Q29udGVu
dHNTY2FsZSgpOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVX
ZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6aW5pdEZhY3RvcnkoKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEdy
YXBoaWNzTGF5ZXJGYWN0b3J5KGNyZWF0ZVdlYkdyYXBoaWNzTGF5ZXIpOwotfQotCi1ib29sIFdl
YkdyYXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKQot
ewotICAgIGlmICghbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlzQWZmaW5lKCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZDc4MDYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotICAgIC8q
Ci0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgV2ViR3JhcGhp
Y3NMYXllcl9oCi0jZGVmaW5lIFdlYkdyYXBoaWNzTGF5ZXJfaAotCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkltYWdlLmgi
Ci0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxheWVyVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIK
LSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2luY2x1ZGUgIlRpbGVkQmFj
a2luZ1N0b3JlUmVtb3RlVGlsZS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
Ci0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIK
LSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9T
SVRJTkcpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBXZWJHcmFwaGljc0xheWVyOwotfQot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViR3JhcGhpY3NMYXllckNsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJM
YXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxh
eWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpID0gMDsKLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFBMQVRGT1JN
KFFUKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKSA9
IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJz
KCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0
bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQm
KSA9IDA7Ci19OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdlYkdyYXBoaWNz
TGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgotICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAot
ewotcHVibGljOgotICAgIFdlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopOwot
ICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzTGF5ZXIoKTsKLQotICAgIC8vIFJlaW1wbGVtZW50YXRp
b25zIGZyb20gR3JhcGhpY3NMYXllci5oLgotICAgIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVj
dG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwotICAgIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciop
OwotICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQpOwotICAgIHZv
aWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOwotICAgIHZv
aWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOwotICAgIGJv
b2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7Ci0gICAgdm9p
ZCByZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50Jik7Ci0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKLSAg
ICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCBzZXRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2b2lkIHNldENoaWxkcmVuVHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBzZXRQcmVzZXJ2ZXMz
RChib29sKTsKLSAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7Ci0gICAgdm9pZCBzZXRE
cmF3c0NvbnRlbnQoYm9vbCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c09wYXF1ZShib29sKTsKLSAg
ICB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKTsKLSAgICB2b2lkIHNldE9wYWNpdHko
ZmxvYXQpOwotICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwotICAgIHZvaWQgc2V0Q29udGVudHNUb0Nh
bnZhcyhQbGF0Zm9ybUxheWVyKik7Ci0gICAgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXll
ciopOwotICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOwotICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwot
ICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRWaXNpYmxlQ29u
dGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLSAgICBib29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFJvb3RMYXllcihib29sKTsKLQotICAgIFdlYktp
dDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0OwotICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBs
YXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsKLSAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7
Ci0gICAgSW1hZ2UqIGltYWdlKCkgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQotCi0gICAgYm9v
bCBmaXhlZFRvVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9ydDsgfQot
ICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wgaXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3
cG9ydCA9IGlzRml4ZWQ7IH0KLQotICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX21hc2tUYXJnZXQ7IH0KLSAgICB2b2lkIHNldE1hc2tUYXJnZXQoR3JhcGhp
Y3NMYXllciogbGF5ZXIpIHsgbV9tYXNrVGFyZ2V0ID0gbGF5ZXI7IH0KLQotICAgIHN0YXRpYyB2
b2lkIGluaXRGYWN0b3J5KCk7Ci0KLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAg
IHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKLSAgICB2aXJ0dWFs
IHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3Qg
VmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7Ci0gICAgdmlydHVhbCBib29sIHRpbGVkQmFj
a2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGls
ZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRC
YWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOwotICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5n
U3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQs
IGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0
OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6
SW50UG9pbnQmKTsKLQotICAgIHZvaWQgc2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6
OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKLSAgICB2b2lkIHN5bmNDaGlsZHJlbigpOwotICAg
IHZvaWQgc3luY0xheWVyU3RhdGUoKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9p
ZCBzeW5jRmlsdGVycygpOwotI2VuZGlmCi0gICAgdm9pZCBzeW5jQ2FudmFzKCk7Ci0gICAgdm9p
ZCBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgdm9pZCBhZGp1c3RWaXNpYmxlUmVj
dCgpOwotICAgIGJvb2wgaXNSZWFkeUZvclRpbGVCdWZmZXJTd2FwKCkgY29uc3Q7Ci0gICAgdm9p
ZCB1cGRhdGVDb250ZW50QnVmZmVycygpOwotICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7
Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwotICAgIFdl
YktpdDo6V2ViTGF5ZXJJRCBtX2lkOwotICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJ
bmZvOwotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKLSAgICBHcmFwaGljc0xheWVyKiBtX21h
c2tUYXJnZXQ7Ci0gICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBMYXllclRy
YW5zZm9ybSBtX2xheWVyVHJhbnNmb3JtOwotICAgIGJvb2wgbV9pblVwZGF0ZU1vZGUgOiAxOwot
ICAgIGJvb2wgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdDogMTsKLSAgICBib29sIG1fc2hvdWxk
U3luY0xheWVyU3RhdGU6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNDaGlsZHJlbjogMTsKLSAg
ICBib29sIG1fc2hvdWxkU3luY0ZpbHRlcnM6IDE7Ci0gICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9y
dCA6IDE7Ci0gICAgYm9vbCBtX2NhbnZhc05lZWRzRGlzcGxheSA6IDE7Ci0KLSAgICB2b2lkIG5v
dGlmeUNoYW5nZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLSAgICB2b2lkIGRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICB2b2lkIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci0jaWYg
RU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgZGlkQ2hhbmdlRmlsdGVycygpOwotI2VuZGlm
Ci0KLSAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgYm9vbCBzZWxmT3JBbmNl
c3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Ci0gICAgYm9vbCBzaG91bGRVc2VUaWxlZEJh
Y2tpbmdTdG9yZSgpOwotICAgIHZvaWQgYWRqdXN0Q29udGVudHNTY2FsZSgpOwotICAgIHZvaWQg
Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKLSAgICB2b2lkIHN5bmNMYXllclBhcmFt
ZXRlcnMoKTsKLSAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci0gICAgZmxv
YXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOwotCi0gICAgV2ViS2l0OjpXZWJHcmFwaGljc0xh
eWVyQ2xpZW50KiBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQ7Ci0gICAgT3duUHRyPFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7Ci0gICAgT3duUHRyPFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwotICAgIGZsb2F0
IG1fY29udGVudHNTY2FsZTsKLSAgICBQbGF0Zm9ybUxheWVyKiBtX2NhbnZhc1BsYXRmb3JtTGF5
ZXI7Ci19OwotCi1XZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NM
YXllciopOwotCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8vIFdlYkdyYXBoaWNzTGF5ZXJfSApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCA2
ODVjYjgzLi43MWFhNjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWEuaApAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5
ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBD
b3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopID0gMDsKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAppbmRleCBkZGFkY2IxLi41ZTZkNWVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmNwcApAQCAtNjg5LDEwICs2ODksMTAgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRp
c3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIH0KIAogI2lmIFVTRShVSV9TSURFX0NPTVBP
U0lUSU5HKQotdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQg
bWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKK3ZvaWQgRHJh
d2luZ0FyZWFJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewogICAgIGlmIChtX2xheWVy
VHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjZWl2ZUxheWVyVHJlZUhv
c3RNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKGNvbm5l
Y3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKaW5kZXggMzlk
MDUxNS4uMmNlYmJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuaApAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
LCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogI2VuZGlm
CiAKICAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mM2U4NzM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvci5o
IgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xh
eWVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IExheWVyVHJlZUNvb3JkaW5hdG9yKHdlYlBhZ2UpKTsKK30KKworTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6On5MYXllclRyZWVDb29yZGluYXRvcigpCit7CisgICAgLy8gUHJldmVudCBzZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KDApIC0+IGRldGFjaExheWVyKCkgZnJvbSBtb2RpZnlpbmcgdGhl
IHNldCB3aGlsZSB3ZSBpdGVyYXRlIGl0LgorICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7CisgICAgcmVnaXN0ZXJlZExheWVycy5zd2FwKG1f
cmVnaXN0ZXJlZExheWVycyk7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHJlZ2lzdGVy
ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+c2V0V2Vi
R3JhcGhpY3NMYXllckNsaWVudCgwKTsKK30KKworTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVy
VHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCisgICAgOiBMYXllclRyZWVIb3N0KHdl
YlBhZ2UpCisgICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKKyAg
ICAsIG1faXNWYWxpZCh0cnVlKQorICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCisg
ICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAg
LCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQorICAgICwgbV9zaG91bGRT
eW5jRnJhbWUoZmFsc2UpCisgICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKKyAgICAs
IG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVz
aFRpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQor
eworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgV2ViR3JhcGhpY3NMYXllciogd2ViUm9vdExheWVy
ID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICB3ZWJSb290TGF5
ZXItPnNldFJvb3RMYXllcih0cnVlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXIt
PnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5hdG9yIHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAg
IG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5z
ZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5
ZXJJRCA9IHRvV2ViR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwor
ICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFdlYkdyYXBoaWNz
TGF5ZXJDbGllbnQodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3Igbm9uLWNvbXBvc2l0ZWQg
Y29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRT
aXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworCisgICAgaWYgKG1fd2ViUGFnZS0+aGFz
UGFnZU92ZXJsYXkoKSkKKyAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworCisgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQor
eworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5n
RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKKworICAgIGlmIChtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZCkgeworICAgICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYg
KCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1c2hU
aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4
dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gp
Cit7CisgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2g7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFJv
b3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIp
Cit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigp
OworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFxdWUobV93
ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZCgpKTsKKworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBo
aWVyYXJjaHkuCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmludmFsaWRhdGUoKQoreworICAgIGNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCk7CisKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX3Jvb3RMYXllciA9IG51bGxw
dHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAg
ICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9s
bFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBzZXRO
b25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShzY3JvbGxSZWN0KTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3Jvb3RMYXllci0+
c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVyLT5z
ZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJl
YXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVl
ZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXpl
IG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3
U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9
IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgo
KSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUu
aGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWln
aHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQo
KSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSgpCit7
CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRVbmluc3RhbGxQYWdlT3Zlcmxh
eSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlO
ZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQo
bV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0IHZhbHVlKQor
eworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK2Jv
b2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit7Cisg
ICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmll
dygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1f
cm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBy
ZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVy
U3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGlm
IChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgeworICAgICAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRpZENoYW5nZVNjcm9s
bFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7CisgICAgICAgIG1f
c2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7CisgICAgfQorICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykp
OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJM
YXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwg
Y2hpbGRyZW4pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0NhbnZhcyhX
ZWJMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGlj
c1N1cmZhY2VUb2tlbikKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTeW5jQ2Fu
dmFzKGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOworfQorCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVyRmls
dGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQorewor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJz
KGlkLCBmaWx0ZXJzKSk7Cit9CisjZW5kaWYKKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
YXR0YWNoTGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgQVNTRVJUKCFtX3Jl
Z2lzdGVyZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMu
YWRkKGxheWVyKTsKKworICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2Fs
ZSk7CisgICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmRldGFjaExheWVyKFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAg
IG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXIpOworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKK30KKworc3Rh
dGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVu
ZGVyTGF5ZXIpCit7CisgICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25k
aXRpb25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBv
c2l0aW9uLgorICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5i
YWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBp
ZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5k
ZXJlcigpLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5k
ZXJWaWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3Rh
Y2tpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXll
cigpKTsKKyAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVy
KiByZW5kZXJMYXllcikKK3sKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJl
bmRlckxheWVyKTsKKworICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAg
ICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGls
ZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVwZGF0
ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsK
K30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkKK3sKKyAg
ICBpZiAoIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3Np
dGlvbkVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3dlYlBhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPmhhc0ZpeGVkT2JqZWN0cygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUo
KS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7Cisg
ICAgQVNTRVJUKHJvb3RSZW5kZXJMYXllcik7CisgICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmly
c3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290
UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAgICBpZiAobV9pc1N1c3BlbmRl
ZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2Vi
UGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOworICAgIGZsdXNoUGVuZGlu
Z0xheWVyQ2hhbmdlcygpOworICAgIGlmICghbV9zaG91bGRTeW5jRnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRSb290Q29t
cG9zaXRpbmdMYXllcih0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgp
KSk7CisgICAgICAgIG1fc2hvdWxkU3luY1Jvb3RMYXllciA9IGZhbHNlOworICAgIH0KKworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlk
UmVuZGVyRnJhbWUoKSk7CisgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKKworICAg
IGlmICghbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIExldCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25lIGEgZmx1
c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMuCisgICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBs
Kj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsK
KyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRy
ZWVDb29yZGluYXRvcj4qKQoreworICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQor
eworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKworICAgIG1fcGFnZU92ZXJsYXlM
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
bV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBwYWdlIG92
ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlM
YXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VPdmVybGF5
TGF5ZXIgPSBudWxscHRyOworfQorCitpbnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9w
dEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAg
ICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBpbnQ2NF90IGtleSA9IDA7CisK
KyNpZiBQTEFURk9STShRVCkKKyAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIGlmICghcGl4bWFwKQorICAgICAgICByZXR1cm4g
SW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7CisjZW5k
aWYKKworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKworICAgIGlmIChpdCAhPSBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7CisgICAgICAgICsrKGl0LT5z
ZWNvbmQpOworICAgICAgICByZXR1cm4ga2V5OworICAgIH0KKworICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdl
LT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1h
cDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKKyAgICB7CisgICAgICAgIE93blB0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3ND
b250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxl
KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSwgaGFuZGxlKSk7CisgICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKKyAgICByZXR1cm4g
a2V5OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW1hZ2VCYWNraW5n
U3RvcmUoaW50NjRfdCBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybjsKKyAg
ICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGl0LT5z
ZWNvbmQtLTsKKworICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZXN0cm95RGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5KSk7Cit9CisKKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlm
eVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBo
aWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlmIChncmFwaGljc0xheWVyID09IG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0
KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7CisgICAgICAgIC8v
IE92ZXJsYXlzIGNvbnRhaW4gdHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRo
ZSBjb250ZXh0IGFzIHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgor
ICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgbV93
ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNob3dE
ZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVnQm9yZGVy
cygpOworfQorCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaG93UmVwYWludENvdW50ZXIo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Cit9CisK
K2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRl
VGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQorewor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklE
LCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB0YXJnZXRSZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlVwZGF0ZVRp
bGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3Zl
VGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOworfQorCitXZWJDb3JlOjpJbnRSZWN0IExh
eWVyVHJlZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNj
YWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGJvb2wgY29u
dGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1JlY3Q7CisgICAg
Ym9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUgIT0gbV9jb250ZW50c1NjYWxlOwor
CisgICAgaWYgKHRyYWplY3RvcnlWZWN0b3IgIT0gRmxvYXRQb2ludDo6emVybygpKQorICAgICAg
ICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsK
KworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2FsZURpZENoYW5n
ZSkgeworICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgICAgICBtX2Nv
bnRlbnRzU2NhbGUgPSBzY2FsZTsKKworICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAg
ICAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBp
dCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hhbmdlKQorICAgICAgICAgICAgICAgICgqaXQp
LT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICAgICAgICAgIGlmIChjb250ZW50c1JlY3RE
aWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPmFkanVzdFZpc2libGVSZWN0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBpZiAobV93
ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKQorICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlz
aWJsZUNvbnRlbnRSZWN0KHJlY3QpOworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpCisg
ICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBtX3dhaXRp
bmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3YXBCdWZmZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFtX2lzU3VzcGVuZGVkICYmICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgSGFz
aFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0
ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIEFT
U0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOworICAgIG1f
dXBkYXRlQXRsYXNlcy5jbGVhcigpOworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFy
ZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkK
K3sKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldOworICAgICAg
ICBpZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxs
IHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25BdmFpbGFibGVC
dWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29u
dGV4dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRp
bWVuc2lvbiA9IDIwMDA7CisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRhdGVBdGxhcyhT
Y3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpOworICAgIHJldHVybiBtX3VwZGF0ZUF0bGFz
ZXMubGFzdCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9m
ZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iYzQ0OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5h
dG9yLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JfaAorI2RlZmluZSBMYXllclRyZWVDb29yZGluYXRvcl9oCisKKyNp
bmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNpbmNsdWRlICJX
ZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIExheWVyVHJlZUNvb3JkaW5h
dG9yIDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkdyYXBoaWNzTGF5ZXJDbGll
bnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJlZUNvb3JkaW5hdG9y
PiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZUNvb3JkaW5hdG9yKCk7
CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKwor
ICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsg
cmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hl
ZHVsZWRMYXllckZsdXNoKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRp
bmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9s
bE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1YWwgdm9p
ZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxs
UGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXko
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHko
ZmxvYXQpOworICAgIHZpcnR1YWwgYm9vbCBwYWdlT3ZlcmxheVNob3VsZEFwcGx5RmFkZVdoZW5Q
YWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGF1
c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lk
IHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVy
Rmx1c2goKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgp
IHsgfQorICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6
OkltYWdlKik7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2
NF90KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdT
dG9yZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJ
RCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxk
cmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpOworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52
YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopOworICAg
IHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKKworICAgIHZpcnR1YWwgUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6
SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0
IExheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICAvLyBHcmFw
aGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgY29uc3Q7CisKKyAgICAvLyBMYXllclRyZWVDb29yZGluYXRvcgor
ICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgZGVzdHJveVBhZ2VP
dmVybGF5TGF5ZXIoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAg
IHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKCk7CisgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOworCisgICAgT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgLy8gVGhlIGxheWVy
IHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisKKyAg
ICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBw
YWdlIG92ZXJsYXkuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92
ZXJsYXlMYXllcjsKKworICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+IG1f
cmVnaXN0ZXJlZExheWVyczsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKKyAgICBWZWN0b3I8VXBkYXRlQXRsYXM+IG1fdXBkYXRl
QXRsYXNlczsKKworICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Cisg
ICAgYm9vbCBtX2lzVmFsaWQ7CisKKyAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKKyAg
ICBib29sIG1faXNTdXNwZW5kZWQ7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250
ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIGJvb2wgbV9zaG91bGRT
ZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CisKKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJU
cmVlQ29udGV4dDsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAgIGJvb2wgbV9zaG91
bGRTeW5jUm9vdExheWVyOworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7CisgICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJU
cmVlQ29vcmRpbmF0b3I+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIGJvb2wgbV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXllclRyZWVDb29yZGlu
YXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYWZmNmY5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5tZXNz
YWdlcy5pbgpAQCAtMCwwICsxLDI3IEBACisjCisjICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyMKKyMgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
IyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIwor
CisKKyNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKK21lc3NhZ2VzIC0+IExheWVyVHJlZUNv
b3JkaW5hdG9yIHsKKyAgICBTZXRWaXNpYmxlQ29udGVudHNSZWN0KFdlYkNvcmU6OkludFJlY3Qg
dmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgdHJh
amVjdG9yeVZlY3RvcnkpCisgICAgUmVuZGVyTmV4dEZyYW1lKCkKKyAgICBQdXJnZUJhY2tpbmdT
dG9yZXMoKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3Jh
cGhpY3NMYXllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmNzJk
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcApAQCAtMCwwICsxLDc0NiBA
QAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIldlYkdyYXBo
aWNzTGF5ZXIuaCIKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkZsb2F0
UXVhZC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2lu
Y2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUg
IlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFw
aGljc0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCit7CisgICAgc3RhdGljIEhhc2hNYXA8V2ViTGF5
ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKKyAgICByZXR1cm4gZ2xvYmFsTWFw
OworfQorCitXZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2Vi
S2l0OjpXZWJMYXllcklEIGlkKQoreworICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhp
Y3NMYXllcio+JiB0YWJsZSA9IGxheWVyQnlJRE1hcCgpOworICAgIEhhc2hNYXA8V2ViTGF5ZXJJ
RCwgV2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZpbmQoaWQpOworICAg
IGlmIChpdCA9PSB0YWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGl0
LT5zZWNvbmQ7Cit9CisKK3N0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xh
eWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5
ZXIpLT5pZCgpIDogMDsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VMYXll
clN0YXRlKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKKyAgICBpZiAo
Y2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4oKQoreworICAgIG1f
c2hvdWxkU3luY0NoaWxkcmVuID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNs
aWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRlcnMoKQoreworICAg
IG1fc2hvdWxkU3luY0ZpbHRlcnMgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAg
Y2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKyNlbmRpZgorCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKK3sKKyAgICBpZiAo
IXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxk
VXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hp
bGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKGNoaWxkcmVu
KClbaV0pLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworICAgIGlmIChyZXBsaWNhTGF5
ZXIoKSkKKyAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKS0+c2V0U2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRD
aGFuZ2VHZW9tZXRyeSgpCit7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHNldFNo
b3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Cit9CisKK1dlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBo
aWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorICAgIDogR3JhcGhpY3NMYXll
cihjbGllbnQpCisgICAgLCBtX21hc2tUYXJnZXQoMCkKKyAgICAsIG1faW5VcGRhdGVNb2RlKGZh
bHNlKQorICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQorICAgICwgbV9zaG91
bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQorICAgICwgbV9zaG91bGRTeW5jQ2hpbGRyZW4odHJ1ZSkK
KyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQorICAgICwgbV9jYW52YXNOZWVkc0Rpc3Bs
YXkoZmFsc2UpCisgICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkKKyAgICAsIG1fY29u
dGVudHNTY2FsZSgxKQorICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCit7CisgICAgc3Rh
dGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOworICAgIG1faWQgPSBuZXh0TGF5ZXJJRCsr
OworICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsKK30KKworV2ViR3JhcGhpY3NM
YXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQoreworICAgIGxheWVyQnlJRE1hcCgpLnJlbW92ZShp
ZCgpKTsKKworICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKKyAgICAgICAgcHVy
Z2VCYWNraW5nU3RvcmVzKCk7CisgICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+ZGV0
YWNoTGF5ZXIodGhpcyk7CisgICAgfQorICAgIHdpbGxCZURlc3Ryb3llZCgpOworfQorCit2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgR3JhcGhpY3NMYXll
cjo6d2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7CisgICAgYm9v
bCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICBpZiAoIW9r
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJl
bi5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBjaGlsZCA9IHRvV2Vi
R3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7CisgICAgICAgIGNoaWxkLT5zZXRXZWJHcmFwaGlj
c0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgICAgIGNoaWxkLT5k
aWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgfQorICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIp
OworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGll
bnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5
ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciog
bGF5ZXIsIGludCBpbmRleCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgo
bGF5ZXIsIGluZGV4KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFw
aGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9XZWJHcmFw
aGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIGRpZENoYW5nZUNo
aWxkcmVuKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFw
aGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGlj
c0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dlYkdyYXBoaWNz
TGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciog
c2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJs
aW5nKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVy
Q2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVy
KGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7
Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIq
IG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBib29sIG9rID0gR3Jh
cGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7CisgICAgaWYgKCFv
aykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAg
dG9XZWJHcmFwaGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAg
IHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQo
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobmV3Q2hp
bGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgaWYgKFdlYkdyYXBo
aWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAg
ICAgICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXll
cjo6cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHAp
Cit7CisgICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50
M0QmIHApCit7CisgICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7CisgICAgZGlkQ2hhbmdlR2Vv
bWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7CisgICAgc2V0TmVlZHNE
aXNwbGF5KCk7CisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICBtYXNrTGF5ZXIoKS0+c2V0
U2l6ZShzaXplKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sK
KyAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKGNoaWxkcmVuVHJhbnNmb3JtKCkgPT0gdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zv
cm0odCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCit7CisgICAgaWYgKHByZXNlcnZlczNEKCkgPT0g
YikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0Qo
Yik7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKK3sKKyAgICBpZiAobWFza3NUb0JvdW5kcygpID09
IGIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRz
KGIpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0g
YikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChi
KTsKKworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRzT3BhcXVl
KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCisg
ICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghYik7CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShi
b29sIGIpCit7CisgICAgaWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShiKTsKKyAg
ICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
T3BhY2l0eShmbG9hdCBvcGFjaXR5KQoreworICAgIGlmICh0aGlzLT5vcGFjaXR5KCkgPT0gb3Bh
Y2l0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eShv
cGFjaXR5KTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKGNv
bnRlbnRzUmVjdCgpID09IHIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzUmVjdChyKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3Zv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQoreworICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlOworICAgIHNldENvbnRlbnRzVG9JbWFnZSgwKTsK
KyAgICBzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOworICAgIG1fY2FudmFzTmVlZHNE
aXNwbGF5ID0gdHJ1ZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
Q2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9jYW52YXNQbGF0
Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKKyAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IHRy
dWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVp
cmVkKHRoaXMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorYm9vbCBXZWJHcmFwaGlj
c0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG5ld0ZpbHRlcnMpCit7
CisgICAgaWYgKGZpbHRlcnMoKSA9PSBuZXdGaWx0ZXJzKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkaWRDaGFuZ2VGaWx0ZXJzKCk7CisgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldEZp
bHRlcnMobmV3RmlsdGVycyk7Cit9CisjZW5kaWYKKworCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKGltYWdlID09IG1f
aW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQ2NF90IG5ld0lEID0gMDsKKyAgICBpZiAo
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7CisgICAgICAgIC8vIFdlIGFkb3B0IGZpcnN0LCBp
biBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBhdm9pZCBkZXN0cm95
aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KKyAgICAgICAgbmV3SUQgPSBtX3dlYkdyYXBo
aWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoaW1hZ2UpOworICAgICAgICBt
X3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCAmJiBuZXdJRCA9
PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCBpcyBu
b3Qgc2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBzdG9yZSBJRC4KKyAgICAgICAg
QVNTRVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOworICAgIH0KKworICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQgPSBuZXdJRDsKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IG1h
c2tMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNr
TGF5ZXIobGF5ZXIpOworCisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
bGF5ZXItPnNldFNpemUoc2l6ZSgpKTsKKyAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJHcmFwaGlj
c0xheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKKyAgICB3ZWJHcmFwaGljc0xheWVy
LT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Cisg
ICAgd2ViR3JhcGhpY3NMYXllci0+c2V0TWFza1RhcmdldCh0aGlzKTsKKyAgICB3ZWJHcmFwaGlj
c0xheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworCit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IHJlcGxpY2FMYXllcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGF5ZXIpCisgICAgICAgIHRvV2ViR3JhcGhpY3NM
YXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVy
Q2xpZW50KTsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVy
KTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpKSk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQor
ICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0KSk7Cisg
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCitXZWJMYXllcklEIFdlYkdyYXBoaWNzTGF5
ZXI6OmlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsKK30KKwordm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobWFza0xh
eWVyKCkpKQorICAgICAgICBtYXNrLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKworICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiByZXBsaWNhID0gdG9XZWJHcmFwaGlj
c0xheWVyKHJlcGxpY2FMYXllcigpKSkKKyAgICAgICAgcmVwbGljYS0+c3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQt
PnN5bmNGaXhlZExheWVycygpOworCisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCisgICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3Qp
OworfQorCitXZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkdyYXBoaWNzTGF5ZXIqPihs
YXllcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkKK3sKKyAg
ICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91
bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gY2hpbGRJRHM7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAg
ICAgICBjaGlsZElEcy5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKKworICAg
IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJ
RHMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzeW5jRmlsdGVycygpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQorICAgICAg
ICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOworICAgIG1fd2ViR3Jh
cGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkpOworfQor
I2VuZGlmCisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQorIHsKKyAg
ICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3No
b3VsZFN5bmNMYXllclN0YXRlID0gZmFsc2U7CisgICAgbV9sYXllckluZm8uZml4ZWRUb1ZpZXdw
b3J0ID0gZml4ZWRUb1ZpZXdwb3J0KCk7CisKKyAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9
IGFuY2hvclBvaW50KCk7CisgICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2Zh
Y2VWaXNpYmlsaXR5KCk7CisgICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGls
ZHJlblRyYW5zZm9ybSgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVu
dHNPcGFxdWUoKTsKKyAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3Qo
KTsKKyAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKyAgICBt
X2xheWVySW5mby5tYXNrID0gdG9XZWJMYXllcklEKG1hc2tMYXllcigpKTsKKyAgICBtX2xheWVy
SW5mby5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOworICAgIG1fbGF5ZXJJbmZvLm9w
YWNpdHkgPSBvcGFjaXR5KCk7CisgICAgbV9sYXllckluZm8ucGFyZW50ID0gdG9XZWJMYXllcklE
KHBhcmVudCgpKTsKKyAgICBtX2xheWVySW5mby5wb3MgPSBwb3NpdGlvbigpOworICAgIG1fbGF5
ZXJJbmZvLnByZXNlcnZlczNEID0gcHJlc2VydmVzM0QoKTsKKyAgICBtX2xheWVySW5mby5yZXBs
aWNhID0gdG9XZWJMYXllcklEKHJlcGxpY2FMYXllcigpKTsKKyAgICBtX2xheWVySW5mby5zaXpl
ID0gc2l6ZSgpOworICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworICAg
IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllcklu
Zm8pOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQoreworICAgIGlm
ICghbV9jYW52YXNOZWVkc0Rpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9j
YW52YXNQbGF0Zm9ybUxheWVyKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKKyAgICB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbiA9IG1fY2FudmFzUGxh
dGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7CisgICAgbV93ZWJHcmFwaGljc0xh
eWVyQ2xpZW50LT5zeW5jQ2FudmFzKG1faWQsIEludFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUo
KS5oZWlnaHQoKSksIGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKKyNlbmRpZgorICAgIG1fY2FudmFz
TmVlZHNEaXNwbGF5ID0gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZW5zdXJl
SW1hZ2VCYWNraW5nU3RvcmUoKQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkKKyAgICAgICAgbV9s
YXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+
YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShtX2ltYWdlLmdldCgpKTsKK30KKwordm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQoreworICAg
IC8vIFRoZSByZW1vdGUgaW1hZ2UgbWlnaHQgaGF2ZSBiZWVuIHJlbGVhc2VkIGJ5IHB1cmdlQmFj
a2luZ1N0b3Jlcy4KKyAgICBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOworICAgIGNvbXB1dGVU
cmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CisgICAgc3luY0NoaWxkcmVuKCk7CisgICAgc3luY0xh
eWVyU3RhdGUoKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgc3luY0ZpbHRlcnMoKTsK
KyNlbmRpZgorICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CisgICAgc3luY0NhbnZhcygpOwor
fQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigp
Cit7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVyKGJvb2wgaXNSb290
KQoreworICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290OworICAgIGRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxlQ29u
dGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0
b3IpCit7CisgICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9tYWluQmFja2lu
Z1N0b3JlLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKHRyYWplY3RvcnlWZWN0b3IpOworfQorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCit7Cisg
ICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOwor
fQorCitmbG9hdCBXZWJHcmFwaGljc0xheWVyOjplZmZlY3RpdmVDb250ZW50c1NjYWxlKCkKK3sK
KyAgICByZXR1cm4gc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKSA/IG1fY29udGVudHNTY2Fs
ZSA6IDE7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSgp
Cit7CisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX21haW5CYWNraW5nU3RvcmUgfHwgbV9tYWluQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxl
KCkgPT0gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBuZXcgYmFja2luZyBzdG9yZSBhbmQgcGFpbnRpbmcgdGhl
IGNvbnRlbnQsCisgICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZHJvcCB0aGUgcHJldmlvdXMgb25l
IGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluCisgICAgLy8gYnJpZWZseSBzZWVpbmcgZmxpY2tlcmlu
ZyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBkcm9wcGVkIGJlZm9yZQorICAgIC8vIHNvbWV0aGlu
ZyByZXBsYWNlcyB0aGVtLgorICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUgPSBtX21haW5CYWNr
aW5nU3RvcmUucmVsZWFzZSgpOworCisgICAgLy8gTm8gcmVhc29uIHRvIHNhdmUgdGhlIHByZXZp
b3VzIGJhY2tpbmcgc3RvcmUgZm9yIG5vbi12aXNpYmxlIGFyZWFzLgorICAgIG1fcHJldmlvdXNC
YWNraW5nU3RvcmUtPnJlbW92ZUFsbE5vblZpc2libGVUaWxlcygpOworCisgICAgY3JlYXRlQmFj
a2luZ1N0b3JlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0
b3JlKCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihuZXcgVGlsZWRCYWNr
aW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZDo6Y3JlYXRl
KHRoaXMpKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFjb250
ZW50c09wYXF1ZSgpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUo
ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp0
aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgcmVjdCk7Cit9CisKK3Zv
aWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0
b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKK3sKK30KKworYm9vbCBXZWJHcmFwaGljc0xheWVy
Ojp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
aW5VcGRhdGVNb2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fd2ViR3Jh
cGhpY3NMYXllckNsaWVudC0+bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCk7Cit9CisKK0lu
dFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQor
eworICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpOworfQorCitib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNob3VsZFVzZVRpbGVkQmFja2luZ1N0
b3JlKCkKK3sKKyAgICByZXR1cm4gIXNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9y
bXMoKTsKK30KKworSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVZp
c2libGVSZWN0KCkKK3sKKyAgICBpZiAoIXNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCkpCisg
ICAgICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpOworCisgICAgLy8g
Tm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4KKyAgICBpZiAoIW1fbGF5ZXJU
cmFuc2Zvcm0uY29tYmluZWQoKS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QoKTsKKworICAgIC8vIFJldHVybiBhIHByb2plY3Rpb24gb2YgdGhlIHZpc2libGUgcmVjdCAo
c3VyZmFjZSBjb29yZGluYXRlcykgb250byB0aGUgbGF5ZXIncyBwbGFuZSAobGF5ZXIgY29vcmRp
bmF0ZXMpLgorICAgIC8vIFRoZSByZXN1bHRpbmcgcXVhZCBtaWdodCBiZSBzcXVld2VkIGFuZCB0
aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBxdWFkLAorICAgIC8v
IHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJlYWwgdmlzaWJsZSBhcmVhIChh
bmQgdGhlbiBldmVuIG1vcmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3ZlciByZWN0IG11bHRpcGxpZXIp
LgorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQo
KS5pbnZlcnNlKCkuY2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChGbG9hdFF1YWQoRmxvYXRS
ZWN0KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dmlzaWJsZUNvbnRlbnRzUmVjdCgpKSkpKTsK
K30KKworQ29sb3IgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBjb250ZW50c09wYXF1ZSgpID8gQ29sb3I6Ondo
aXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4gV2ViR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBX
ZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIHJldHVybiBtX3dlYkdyYXBoaWNzTGF5
ZXJDbGllbnQtPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09wYXF1ZSgpID8gMCA6
IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSwgaGFuZGxlLCBvZmZzZXQpOworfQorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCit7Cisg
ICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBk
YXRlSW5mbywgdGFyZ2V0UmVjdCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRl
VGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQt
PnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKK30KKwor
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGludCB0aWxlSUQpCit7CisgICAgbV93
ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7Cit9CisKK3Zv
aWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQoreworICAgIGlmICgh
ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLmNsZWFyKCk7Cisg
ICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1faW5VcGRhdGVNb2RlID0gdHJ1ZTsKKyAgICAvLyBUaGlzIGlzIHRoZSBv
bmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1haW4gdGlsZWQgYmFja2luZyBzdG9yZSwgb25j
ZSB3ZQorICAgIC8vIGhhdmUgYSByZW1vdGUgY2xpZW50IGFuZCB3ZSBhcmUgcmVhZHkgdG8gc2Vu
ZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4KKyAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9y
ZSkKKyAgICAgICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7CisgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT51cGRhdGVUaWxlQnVmZmVycygpOworICAgIG1faW5VcGRhdGVNb2RlID0gZmFsc2U7CisKKyAg
ICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBpcyBrZXB0IGFyb3VuZCB0byBhdm9pZCBm
bGlja2VyaW5nIGJldHdlZW4KKyAgICAvLyByZW1vdmluZyB0aGUgZXhpc3RpbmcgdGlsZXMgYW5k
IHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB0aGUgdmlzaWJs
ZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9y
ZS4KKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlLT52aXNpYmxlQXJlYUlzQ292ZXJlZCgpKQor
ICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBtX21haW5CYWNraW5nU3Rv
cmUuY2xlYXIoKTsKKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7CisKKyAgICBp
ZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkgeworICAgICAgICBtX3dlYkdyYXBo
aWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVySW5mby5pbWFn
ZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCA9IDA7CisgICAgfQorCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIGRpZENoYW5n
ZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0V2ViR3JhcGhpY3NM
YXllckNsaWVudChXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAg
ICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50ID09IGNsaWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0b1dlYkdyYXBoaWNzTGF5
ZXIocmVwbGljYUxheWVyKCkpKQorICAgICAgICByZXBsaWNhLT5zZXRXZWJHcmFwaGljc0xheWVy
Q2xpZW50KGNsaWVudCk7CisgICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b1dlYkdy
YXBoaWNzTGF5ZXIobWFza0xheWVyKCkpKQorICAgICAgICBtYXNrLT5zZXRXZWJHcmFwaGljc0xh
eWVyQ2xpZW50KGNsaWVudCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigp
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJH
cmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0pOworICAgICAgICBsYXllci0+c2V0V2Vi
R3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOworICAgIH0KKworICAgIC8vIFdlIGhhdmUgdG8g
cmVsZWFzZSByZXNvdXJjZXMgb24gdGhlIFVJIHByb2Nlc3MgaGVyZSBpZiB0aGUgcmVtb3RlIGNs
aWVudCBoYXMgY2hhbmdlZCBvciBpcyByZW1vdmVkLgorICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5
ZXJDbGllbnQpIHsKKyAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgICAgIG1fd2Vi
R3JhcGhpY3NMYXllckNsaWVudC0+ZGV0YWNoTGF5ZXIodGhpcyk7CisgICAgfQorICAgIG1fd2Vi
R3JhcGhpY3NMYXllckNsaWVudCA9IGNsaWVudDsKKyAgICBpZiAoY2xpZW50KQorICAgICAgICBj
bGllbnQtPmF0dGFjaExheWVyKHRoaXMpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFk
anVzdFZpc2libGVSZWN0KCkKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAg
ICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQoKTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpCit7Cisg
ICAgaWYgKCFtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0KQorICAgICAgICByZXR1cm47CisgICAg
bV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IGZhbHNlOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0u
c2V0TG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtKCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0
UG9zaXRpb24ocG9zaXRpb24oKSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRBbmNob3JQb2lu
dChhbmNob3JQb2ludCgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldFNpemUoc2l6ZSgpKTsK
KyAgICBtX2xheWVyVHJhbnNmb3JtLnNldEZsYXR0ZW5pbmcoIXByZXNlcnZlczNEKCkpOworICAg
IG1fbGF5ZXJUcmFuc2Zvcm0uc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY2hpbGRyZW5UcmFuc2Zvcm0o
KSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5jb21iaW5lVHJhbnNmb3JtcyhwYXJlbnQoKSA/IHRv
V2ViR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPm1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWRGb3JD
aGlsZHJlbigpIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisKKyAgICAvLyBUaGUgY29tYmlu
ZWQgdHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0
LgorICAgIGFkanVzdFZpc2libGVSZWN0KCk7CisgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOwor
fQorCitzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGljc0xh
eWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6aW5pdEZhY3RvcnkoKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEdyYXBoaWNzTGF5ZXJG
YWN0b3J5KGNyZWF0ZVdlYkdyYXBoaWNzTGF5ZXIpOworfQorCitib29sIFdlYkdyYXBoaWNzTGF5
ZXI6OnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKQoreworICAgIGlmICgh
bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlzQWZmaW5lKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJH
cmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmNkZDc4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5o
CkBAIC0wLDAgKzEsMjA4IEBACisgICAgLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKworI2lmbmRlZiBXZWJHcmFwaGljc0xheWVyX2gKKyNkZWZpbmUgV2ViR3JhcGhpY3NM
YXllcl9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xh
eWVyLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNs
dWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCisjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisjaW5j
bHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CisKKyNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIFdlYkdyYXBoaWNzTGF5ZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBUaWxlZEJhY2tpbmdTdG9y
ZVJlbW90ZVRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxl
SUQpID0gMDsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNS
ZWN0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0Fs
bG93ZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5n
U3RvcmUoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFn
ZUJhY2tpbmdTdG9yZShpbnQ2NF90KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0
YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+
JikgPSAwOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xh
eWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJikg
PSAwOworI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52
YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMy
X3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pID0gMDsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpI
YW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKK307Cit9CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyCisgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFRpbGVkQmFja2luZ1N0b3Jl
Q2xpZW50CisgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYktpdDo6VGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Cit7CitwdWJsaWM6CisgICAgV2ViR3JhcGhpY3NMYXll
cihHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigp
OworCisgICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBHcmFwaGljc0xheWVyLmguCisgICAg
Ym9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAgdm9p
ZCBhZGRDaGlsZChHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3Jh
cGhpY3NMYXllciosIGludCk7CisgICAgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIq
LCBHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIq
LCBHcmFwaGljc0xheWVyKik7CisgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllcios
IEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2b2lk
IHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHNldEFuY2hvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQzRCYpOworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUm
KTsKKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwor
ICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKKyAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOworICAgIHZvaWQgc2V0TWFza3NUb0Jv
dW5kcyhib29sKTsKKyAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2b2lkIHNl
dENvbnRlbnRzT3BhcXVlKGJvb2wpOworICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJv
b2wpOworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgdm9pZCBzZXRDb250ZW50c1Jl
Y3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7
CisgICAgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2b2lk
IHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlM
YXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2
b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHNl
dENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0
KTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3Qg
RmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJvb2wgc2V0Rmls
dGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKworICAgIHZvaWQgc2V0Um9v
dExheWVyKGJvb2wpOworCisgICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7CisgICAg
c3RhdGljIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQpOwor
ICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKKyAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBt
X2ltYWdlLmdldCgpOyB9CisKKyAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0
dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9CisgICAgdm9pZCBzZXRGaXhlZFRvVmlld3BvcnQoYm9v
bCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsgfQorCisgICAgR3JhcGhp
Y3NMYXllciogbWFza1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RhcmdldDsgfQorICAg
IHZvaWQgc2V0TWFza1RhcmdldChHcmFwaGljc0xheWVyKiBsYXllcikgeyBtX21hc2tUYXJnZXQg
PSBsYXllcjsgfQorCisgICAgc3RhdGljIHZvaWQgaW5pdEZhY3RvcnkoKTsKKworICAgIC8vIFRp
bGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRCZWdpbigpOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRC
YWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsK
KyAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0
OworICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpOwor
ICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCk7CisgICAg
dmlydHVhbCBDb2xvciB0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Owor
CisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50CisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5m
byYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGls
ZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQp
OworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViS2l0OjpTaGFyZWFibGVT
dXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgdm9pZCBzZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVudCopOworICAg
IHZvaWQgc3luY0NoaWxkcmVuKCk7CisgICAgdm9pZCBzeW5jTGF5ZXJTdGF0ZSgpOworI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIHN5bmNGaWx0ZXJzKCk7CisjZW5kaWYKKyAgICB2
b2lkIHN5bmNDYW52YXMoKTsKKyAgICB2b2lkIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7CisK
KyAgICB2b2lkIGFkanVzdFZpc2libGVSZWN0KCk7CisgICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1
ZmZlclN3YXAoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CisgICAg
dm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbEJlRGVzdHJveWVkKCk7CisgICAgV2ViS2l0OjpXZWJMYXllcklEIG1faWQ7CisgICAgV2Vi
S2l0OjpXZWJMYXllckluZm8gbV9sYXllckluZm87CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdl
OworICAgIEdyYXBoaWNzTGF5ZXIqIG1fbWFza1RhcmdldDsKKyAgICBGbG9hdFJlY3QgbV9uZWVk
c0Rpc3BsYXlSZWN0OworICAgIExheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07CisgICAg
Ym9vbCBtX2luVXBkYXRlTW9kZSA6IDE7CisgICAgYm9vbCBtX3Nob3VsZFVwZGF0ZVZpc2libGVS
ZWN0OiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsKKyAgICBib29sIG1f
c2hvdWxkU3luY0NoaWxkcmVuOiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5jRmlsdGVyczogMTsK
KyAgICBib29sIG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsKKyAgICBib29sIG1fY2FudmFzTmVlZHNE
aXNwbGF5IDogMTsKKworICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7CisgICAgdm9pZCBkaWRDaGFu
Z2VHZW9tZXRyeSgpOworICAgIHZvaWQgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHZvaWQg
ZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBk
aWRDaGFuZ2VGaWx0ZXJzKCk7CisjZW5kaWYKKworICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3Jl
KCk7CisKKyAgICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsK
KyAgICBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCk7CisgICAgdm9pZCBhZGp1c3RD
b250ZW50c1NjYWxlKCk7CisgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgp
OworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycygpOworICAgIHZvaWQgc2V0U2hvdWxkVXBk
YXRlVmlzaWJsZVJlY3QoKTsKKyAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCk7CisK
KyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqIG1fd2ViR3JhcGhpY3NMYXllckNs
aWVudDsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFpbkJhY2tp
bmdTdG9yZTsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fcHJldmlv
dXNCYWNraW5nU3RvcmU7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIFBsYXRmb3Jt
TGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKK307CisKK1dlYkdyYXBoaWNzTGF5ZXIqIHRv
V2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CisKK30KKyNlbmRpZgorCisjZW5kaWYg
Ly8gV2ViR3JhcGhpY3NMYXllcl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNWE5YjhiNC4uYmYwMTFlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNw
cApAQCAtMzUsNyArMzUsNyBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRl
ICJxdC9MYXllclRyZWVIb3N0UXQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvci5o
IgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkK
QEAgLTUzLDcgKzUzLDcgQEAgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0PiBMYXllclRyZWVIb3N0
OjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgSEFWRShX
S1FDQSkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBV2luOjpjcmVhdGUod2ViUGFnZSk7CiAj
ZWxpZiBQTEFURk9STShRVCkKLSAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUod2Vi
UGFnZSk7CisgICAgcmV0dXJuIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGUod2ViUGFnZSk7
CiAjZWxpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICByZXR1
cm4gTGF5ZXJUcmVlSG9zdEd0azo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vsc2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGU1MDNj
MjMuLmI0OWNjOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QuaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqKSA9IDA7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMu
aW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MjBkZTIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMu
aW4KKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jCi0jICAgIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSMKLSMg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotIwotCi0KLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLW1lc3NhZ2VzIC0+IExh
eWVyVHJlZUhvc3QgewotICAgIFNldFZpc2libGVDb250ZW50c1JlY3QoV2ViQ29yZTo6SW50UmVj
dCB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCB0
cmFqZWN0b3J5VmVjdG9yeSkKLSAgICBSZW5kZXJOZXh0RnJhbWUoKQotICAgIFB1cmdlQmFja2lu
Z1N0b3JlcygpCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAppbmRleCA5NTNlOWIwNDYuLmI0ZTE5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTI2MDUsOSArMjYwNSw5IEBA
IHZvaWQgV2ViUGFnZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29u
bmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnCiAgICAgfQogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobWVzc2FnZUlE
LmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3Q+KCkpIHsKKyAgICBpZiAobWVz
c2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUNvb3JkaW5hdG9yPigpKSB7
CiAgICAgICAgIGlmIChtX2RyYXdpbmdBcmVhKQotICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+
ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJn
dW1lbnRzKTsKKyAgICAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVD
b29yZGluYXRvck1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxZmE5MWFjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNTczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFF0LmgiCi0KLSNpbmNsdWRlICJEcmF3aW5n
QXJlYUltcGwuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJMYXll
clRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1
ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCi0jaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxh
eWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlckxheWVyQ29tcG9zaXRvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVu
ZGVyVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1QYXNzUmVmUHRyPExheWVyVHJl
ZUhvc3RRdD4gTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVHJlZUhvc3RRdCh3ZWJQYWdlKSk7Ci19Ci0KLUxh
eWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCgpCi17Ci0gICAgLy8gUHJldmVudCBzZXRX
ZWJHcmFwaGljc0xheWVyQ2xpZW50KDApIC0+IGRldGFjaExheWVyKCkgZnJvbSBtb2RpZnlpbmcg
dGhlIHNldCB3aGlsZSB3ZSBpdGVyYXRlIGl0LgotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7Ci0gICAgcmVnaXN0ZXJlZExheWVycy5zd2Fw
KG1fcmVnaXN0ZXJlZExheWVycyk7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3Ig
KEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHJlZ2lz
dGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+c2V0
V2ViR3JhcGhpY3NMYXllckNsaWVudCgwKTsKLX0KLQotTGF5ZXJUcmVlSG9zdFF0OjpMYXllclRy
ZWVIb3N0UXQoV2ViUGFnZSogd2ViUGFnZSkKLSAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkK
LSAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQotICAgICwgbV9p
c1ZhbGlkKHRydWUpCi0gICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKLSAgICAsIG1f
aXNTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKLSAgICAsIG1fc2hv
dWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFt
ZShmYWxzZSkKLSAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0cnVlKQotICAgICwgbV9sYXll
ckZsdXNoVGltZXIodGhpcywgJkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQp
Ci0gICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQotewotICAgIC8vIENy
ZWF0ZSBhIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVh
dGUodGhpcyk7Ci0gICAgV2ViR3JhcGhpY3NMYXllciogd2ViUm9vdExheWVyID0gdG9XZWJHcmFw
aGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKLSAgICB3ZWJSb290TGF5ZXItPnNldFJvb3RM
YXllcih0cnVlKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxh
eWVyVHJlZUhvc3RRdCByb290IGxheWVyIik7Ci0jZW5kaWYKLSAgICBtX3Jvb3RMYXllci0+c2V0
RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Ut
PnNpemUoKSk7Ci0gICAgbV9sYXllclRyZWVDb250ZXh0LndlYkxheWVySUQgPSB0b1dlYkdyYXBo
aWNzTGF5ZXIod2ViUm9vdExheWVyKS0+aWQoKTsKLQotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICB0b1dlYkdyYXBoaWNz
TGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KHRoaXMp
OwotI2lmbmRlZiBOREVCVUcKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5h
bWUoIkxheWVyVHJlZUhvc3RRdCBub24tY29tcG9zaXRlZCBjb250ZW50Iik7Ci0jZW5kaWYKLSAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkp
OwotCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci5nZXQoKSk7Ci0KLSAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQotICAgICAg
ICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQotewotICAgIGlmIChtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxl
ZDsKLQotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgewotICAgICAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbmNl
bFBlbmRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY2hlZHVs
ZUxheWVyRmx1c2goKQotewotICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQotewotICAgIG1fbGF5
ZXJGbHVzaFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFNob3Vs
ZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVk
dWxlZExheWVyRmx1c2gpCi17Ci0gICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gg
PSBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyKQotewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxs
Q2hpbGRyZW4oKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRz
T3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+ZHJhd3NU
cmFuc3BhcmVudEJhY2tncm91bmQoKSk7Ci0KLSAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxh
eWVyIHRyZWUgaGllcmFyY2h5LgotICAgIGlmIChncmFwaGljc0xheWVyKQotICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3RRdDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgY2FuY2VsUGVuZGluZ0xh
eWVyRmx1c2goKTsKLQotICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1fcm9vdExheWVyID0g
bnVsbHB0cjsKLSAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0
UXQ6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3QpCi17Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAg
ICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0KLSAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNjcm9s
bE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpCi17Ci0gICAgc2V0Tm9uQ29t
cG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQoKQotewotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwot
fQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBuZXdTaXplKQotewotICAgIGlmIChtX3Jvb3RMYXllci0+c2l6ZSgpID09IG5ld1Np
emUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUp
OwotCi0gICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1j
b21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCi0gICAgLy8gZm9y
IHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCi0gICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7Ci0KLSAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4g
b2xkU2l6ZS53aWR0aCgpKSB7Ci0gICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRp
Y19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZs
b2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lk
dGgoKSwgaGVpZ2h0KSk7Ci0gICAgfQotCi0gICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRT
aXplLmhlaWdodCgpKQotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53
aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgaWYg
KG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXpl
KG5ld1NpemUpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKQotewotICAgIGNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UXQ6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKLXsKLSAgICBkZXN0cm95UGFnZU92
ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RRdDo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKLSAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5
T3BhY2l0eShmbG9hdCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsK
LSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE9wYWNpdHkodmFsdWUpOwotICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOwotfQotCi1ib29sIExheWVyVHJlZUhvc3RRdDo6Zmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzKCkKLXsKLSAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJh
bWVzKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAg
ICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOwotCi0gICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOwotICAgIHJldHVybiBkaWRTeW5jOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RR
dDo6c3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZv
KQotewotICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgewotICAgICAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCkpKTsKLSAgICAg
ICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKLSAgICB9Ci0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8pKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQg
aWQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
SG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzeW5jQ2FudmFzKFdlYkxheWVySUQgaWQsIGNvbnN0
IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKQotewot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U3luY0NhbnZhcyhpZCwgY2FudmFzU2l6ZSwgZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4pKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpzeW5jTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21w
b3NpdGluZ0xheWVyRmlsdGVycyhpZCwgZmlsdGVycykpOwotfQotI2VuZGlmCi0KLXZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjphdHRhY2hMYXllcihXZWJHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAg
ICBBU1NFUlQoIW1fcmVnaXN0ZXJlZExheWVycy5jb250YWlucyhsYXllcikpOwotICAgIG1fcmVn
aXN0ZXJlZExheWVycy5hZGQobGF5ZXIpOwotCi0gICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUo
bV9jb250ZW50c1NjYWxlKTsKLSAgICBsYXllci0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmRldGFjaExheWVyKFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVy
KQotewotICAgIG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXIpOwotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihsYXllci0+aWQoKSkpOwotfQotCi1z
dGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJlbmRlckxheWVyKiBy
ZW5kZXJMYXllcikKLXsKLSAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3QgbWF0Y2ggdGhlIGNv
bmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9y
UG9zaXRpb24uCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXIt
PmJhY2tpbmcoKTsKLSAgICBpZiAoIWJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOwotICAg
IGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPnJl
bmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1Jl
bmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJMYXllci0+aXNT
dGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xh
eWVyKCkpOwotICAgIGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKLX0K
LQotc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5
ZXIqIHJlbmRlckxheWVyKQotewotICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYo
cmVuZGVyTGF5ZXIpOwotCi0gICAgaWYgKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCi0gICAg
ICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5maXJzdENo
aWxkKCkpOwotICAgIGlmIChyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgdXBk
YXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c3luY0ZpeGVkTGF5ZXJzKCkKLXsKLSAgICBp
ZiAoIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5G
cmFtZSgpLT52aWV3KCktPmhhc0ZpeGVkT2JqZWN0cygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+
Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7Ci0gICAg
QVNTRVJUKHJvb3RSZW5kZXJMYXllcik7Ci0gICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RD
aGlsZCgpKQotICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVu
ZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwZXJm
b3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV93
YWl0aW5nRm9yVUlQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dlYlBhZ2UtPmxh
eW91dElmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIW1faXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKLSAgICBmbHVzaFBlbmRpbmdMYXllckNo
YW5nZXMoKTsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0ZyYW1lKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9zaG91bGRTeW5jUm9vdExheWVyKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0
b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7Ci0gICAgICAgIG1f
c2hvdWxkU3luY1Jvb3RMYXllciA9IGZhbHNlOwotICAgIH0KLQotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRSZW5kZXJGcmFtZSgpKTsKLSAgICBt
X3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwotCi0gICAgaWYgKCFtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGV0IHRoZSBkcmF3
aW5nIGFyZWEga25vdyB0aGF0IHdlJ3ZlIGRvbmUgYSBmbHVzaCBvZiB0aGUgbGF5ZXIgY2hhbmdl
cy4KLSAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdB
cmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwotICAgIG1fbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpsYXll
ckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVIb3N0UXQ+KikKLXsKLSAgICBwZXJmb3Jt
U2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRl
UGFnZU92ZXJsYXlMYXllcigpCi17Ci0gICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5ZXIpOwot
Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwot
I2lmbmRlZiBOREVCVUcKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkxheWVyVHJl
ZUhvc3RRdCBwYWdlIG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxk
KG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpk
ZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXll
cik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgbV9w
YWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKLX0KLQotaW50NjRfdCBMYXllclRyZWVIb3N0UXQ6
OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQotewotICAgIGlmICghaW1hZ2Up
Ci0gICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKLSAgICBRUGl4bWFwKiBwaXhtYXAg
PSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLQotICAgIGlmICghcGl4bWFw
KQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBpbnQ2NF90IGtleSA9
IHBpeG1hcC0+Y2FjaGVLZXkoKTsKLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9y
IGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0KLSAg
ICBpZiAoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkgewot
ICAgICAgICArKyhpdC0+c2Vjb25kKTsKLSAgICAgICAgcmV0dXJuIGtleTsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCAoaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkg
PyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKSk7Ci0gICAgewotICAgICAgICBP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAt
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJ
bWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQ6Onplcm8oKSk7Ci0gICAg
fQotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwotICAgIGJpdG1hcC0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0UHJveHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSwgaGFuZGxlKSk7
Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKLSAg
ICByZXR1cm4ga2V5OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cmVsZWFzZUltYWdlQmFj
a2luZ1N0b3JlKGludDY0X3Qga2V5KQotewotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47
Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
dC0+c2Vjb25kLS07Ci0KLSAgICBpZiAoaXQtPnNlY29uZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUoaXQpOwotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95RGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2Uoa2V5KSk7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6Om5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJs
ZSB0aW1lKQotewotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6bm90aWZ5U3luY1JlcXVpcmVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIExheWVyVHJlZUhv
c3RRdDo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNs
aXBSZWN0KQotewotICAgIGlmIChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllcikgewotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwg
Y2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdyYXBoaWNzTGF5
ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7Ci0gICAgICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4g
dHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQg
b2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgotICAgICAgICBncmFwaGljc0Nv
bnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92
ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKTsKLX0KLQotYm9vbCBMYXllclRy
ZWVIb3N0UXQ6OnNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KikgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygp
LT5zaG93UmVwYWludENvdW50ZXIoKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGls
ZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbykpOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RRdDo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6VXBk
YXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbykp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9y
TGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KLVdlYkNvcmU6OkludFJlY3QgTGF5ZXJUcmVl
SG9zdFF0Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aXNp
YmxlQ29udGVudHNSZWN0OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQ
b2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBib29sIGNvbnRlbnRzUmVjdERpZENoYW5n
ZSA9IHJlY3QgIT0gbV92aXNpYmxlQ29udGVudHNSZWN0OwotICAgIGJvb2wgY29udGVudHNTY2Fs
ZURpZENoYW5nZSA9IHNjYWxlICE9IG1fY29udGVudHNTY2FsZTsKLQotICAgIGlmICh0cmFqZWN0
b3J5VmVjdG9yICE9IEZsb2F0UG9pbnQ6Onplcm8oKSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xh
eWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50
UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Ci0KLSAgICBpZiAoY29udGVu
dHNSZWN0RGlkQ2hhbmdlIHx8IGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpIHsKLSAgICAgICAgbV92
aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKLSAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2Nh
bGU7Ci0KLSAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJh
dG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0
PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRM
YXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoY29udGVu
dHNTY2FsZURpZENoYW5nZSkKLSAgICAgICAgICAgICAgICAoKml0KS0+c2V0Q29udGVudHNTY2Fs
ZShzY2FsZSk7Ci0gICAgICAgICAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAgICAg
ICAgICAgICAgICgqaXQpLT5hZGp1c3RWaXNpYmxlUmVjdCgpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRM
YXlvdXQoKSkKLSAgICAgICAgbV93ZWJQYWdlLT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChy
ZWN0KTsKLSAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAgICAgICBtX3Nob3VsZFNl
bmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IHRydWU7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpyZW5kZXJOZXh0RnJhbWUoKQotewotICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNl
OwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91
cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKQotICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0uZGlk
U3dhcEJ1ZmZlcnMoKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0UXQ6OmxheWVyVHJlZVRpbGVV
cGRhdGVzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2lzU3VzcGVuZGVkICYmICFt
X3dhaXRpbmdGb3JVSVByb2Nlc3M7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwdXJnZUJh
Y2tpbmdTdG9yZXMoKQotewotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+
OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNo
U2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVy
ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+cHVyZ2VC
YWNraW5nU3RvcmVzKCk7Ci0KLSAgICBBU1NFUlQoIW1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHMuc2l6ZSgpKTsKLSAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKLX0KLQotUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IExheWVyVHJlZUhvc3RRdDo6YmVnaW5D
b250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1h
cDo6RmxhZ3MgZmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3Jl
OjpJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+IGdyYXBoaWNzQ29udGV4dDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRs
YXNlcy5zaXplKCk7ICsraSkgewotICAgICAgICBVcGRhdGVBdGxhcyYgYXRsYXMgPSBtX3VwZGF0
ZUF0bGFzZXNbaV07Ci0gICAgICAgIGlmIChhdGxhcy5mbGFncygpID09IGZsYWdzKSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxl
IGJ1ZmZlciBzcGFjZS4KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLmJlZ2lu
UGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICAgICAgICAgIHJldHVybiBncmFwaGlj
c0NvbnRleHQucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0
IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMjAwMDsKLSAgICBtX3VwZGF0ZUF0bGFzZXMu
YXBwZW5kKFVwZGF0ZUF0bGFzKFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSk7Ci0gICAg
cmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCkuYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVm
ZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVl
SG9zdFF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVl
SG9zdFF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ODUzYWQuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RR
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpZm5kZWYgTGF5ZXJUcmVlSG9zdFF0X2gKLSNkZWZpbmUgTGF5ZXJUcmVlSG9zdFF0X2gKLQot
I2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0Lmgi
Ci0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgotI2luY2x1ZGUg
IldlYkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGll
bnQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBVcGRhdGVJbmZvOwotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgTGF5ZXJUcmVlSG9zdFF0
IDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKLSAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJHcmFwaGljc0xheWVyQ2xpZW50Ci17Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdFF0PiBjcmVhdGUoV2Vi
UGFnZSopOwotICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RRdCgpOwotCi0gICAgc3RhdGljIGJv
b2wgc3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0
IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSB7IHJldHVybiBtX2xheWVyVHJl
ZUNvbnRleHQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChi
b29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29u
dGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCk7
Ci0gICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
bmV3U2l6ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0KTsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFnZU92ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBt
X2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmco
KSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFs
IGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopOwotICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGls
ZShXZWJMYXllcklELCBpbnQgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0
RnJhbWUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgdmly
dHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBm
bG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdl
YkxheWVySUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnMmKTsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFj
ZVRva2VuKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygp
OwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVn
aW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6
OkZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsKLQot
cHJpdmF0ZToKLSAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJs
ZSB0aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50
Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7Ci0KLSAgICAvLyBM
YXllclRyZWVIb3N0UXQKLSAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICB2
b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgYm9vbCBmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXMoKTsKLSAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0gICAgdm9p
ZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgc2VuZExheWVyc1RvVUko
KTsKLQotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKLQot
ICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVu
dC4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyOwotCi0gICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxs
IGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBp
bnQ+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHM7Ci0gICAgVmVjdG9yPFVwZGF0
ZUF0bGFzPiBtX3VwZGF0ZUF0bGFzZXM7Ci0KLSAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoOwotICAgIGJvb2wgbV9pc1ZhbGlkOwotCi0gICAgYm9vbCBtX3dhaXRpbmdG
b3JVSVByb2Nlc3M7Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkOwotICAgIFdlYkNvcmU6OkludFJl
Y3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwotICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKLSAg
ICBib29sIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlOwotCi0gICAgTGF5ZXJUcmVl
Q29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsK
LSAgICBib29sIG1fc2hvdWxkU3luY1Jvb3RMYXllcjsKLSAgICB2b2lkIGxheWVyRmx1c2hUaW1l
ckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RRdD4qKTsKLSAgICBXZWJDb3JlOjpU
aW1lcjxMYXllclRyZWVIb3N0UXQ+IG1fbGF5ZXJGbHVzaFRpbWVyOwotICAgIGJvb2wgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMYXllclRyZWVI
b3N0UXRfaAo=
</data>
<flag name="commit-queue"
          id="157248"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149276</attachid>
            <date>2012-06-25 04:49:06 -0700</date>
            <delta_ts>2012-06-25 05:34:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>Extract-common-code-from-LayerTreeHostQt2.diff</filename>
            <type>text/plain</type>
            <size>178017</size>
            <attacher name="YoungTaeck Song">youngtaeck.song</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjMGZkOWQxLi5jNGFkNzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMz
IEBACisyMDEyLTA2LTI1ICBZb3VuZ1RhZWNrIFNvbmcgIDx5b3VuZ3RhZWNrLnNvbmdAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bUXRdW0VGTF0gRXh0cmFjdCBjb21tb24gY29kZSBmcm9t
IExheWVyVHJlZUhvc3RRdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODk4MzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFeHRyYWN0IGNvbW1vbiBjb2RlIGZyb20gTGF5ZXJUcmVlSG9zdFF0IHRvIGJlIHVz
ZWQgYnkgYm90aCBRdCBhbmQgRWZsLgorICAgICAgICBJIHJlbmFtZWQgTGF5ZXJUcmVlSG9zdCB0
byBMYXllclRyZWVDb29yZGluYXRvciwgYW5kIHRoZXNlIGFyZSBtb3ZlZCB1bmRlciBXZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuCisgICAgICAgIEkgTW9kaWZpZWQgTGF5
ZXJUcmVlSG9zdFByb3h5IHRvIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgdG9vLCBCZWNhdXNl
IExheWVyVHJlZUhvc3RQcm94eSBhbmQgTGF5ZXJUcmVlSG9zdCB3ZXJlIHBhaXIuCisgICAgICAg
IEFsc28gV2ViR3JhcGhpY3NMYXllciBtb3ZlZCB1bmRlciB0aGF0IGRpcmVjdG9yeS4KKworICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL01l
c3NhZ2VJRC5oOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjpw
YWludCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUpOgorICAgICAg
ICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94
eTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6
CisgICAgICAgIChEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1w
bDo6RHJhd2luZ0FyZWFQcm94eUltcGwpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoRHJhd2luZ0FyZWFQcm94eUlt
cGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHku
Y3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGluYXRvclByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVmlld3Bv
cnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaXNwYXRj
aFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmNy
ZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENv
bXBvc2l0aW5nTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVuZGVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50
c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW5k
ZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmguCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OmxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4u
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGV0YWNoKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJMYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYktpdDIucHJpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAoRHJhd2luZ0FyZWEpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2Up
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaDoKKyAgICAg
ICAgKERyYXdpbmdBcmVhSW1wbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp+TGF5ZXJU
cmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRTaG91bGROb3RpZnlBZnRlck5l
eHRTY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRl
bnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNlUmVwYWlu
dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZEluc3RhbGxQYWdl
T3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRVbmlu
c3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVyRmlsdGVycyk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphdHRhY2hMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXRhY2hMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYpOgorICAgICAgICAoV2ViS2l0Ojp1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb29yZGluYXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0cm95UGFnZU92
ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9w
dEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZSk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVw
ZGF0ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1
cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyVHJlZUNvbnRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6cGFnZU92ZXJsYXlTaG91bGRBcHBseUZh
ZGVXaGVuUGFpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6
cGF1c2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6
cmVzdW1lUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW46
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpsYXllckJ5SURNYXApOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvV2ViTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpk
aWRDaGFuZ2VMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OmRpZENoYW5nZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OmRpZENoYW5nZUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6ZGlkQ2hhbmdlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJv
dmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXI6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNl
dE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjppZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0VHJhamVjdG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250
ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2hvdWxkVXNl
VGlsZWRCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXI6OnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6YWRqdXN0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlV2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjppbml0RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjpzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NM
YXllci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHcmFwaGljc0xheWVyLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6aW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjptYXNrVGFyZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tUYXJnZXQpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRS
ZWNlaXZlTWVzc2FnZSk6CisKIDIwMTItMDYtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFRlc3QgL3dlYmtpdDIvV2ViS2l0V2Vi
Vmlldy9wZXJtaXNzaW9uLXJlcXVlc3RzIGZhaWxzIGR1ZSB0byBhIHJ1bnRpbWUgd2FybmluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1dl
YktpdDIvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4IDBhNTBjN2QuLjMxOWJmN2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9EZXJpdmVkU291cmNlcy5wcmkKQEAgLTYzLDcgKzYzLDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMg
PSBcCiAgICAgRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgRHJhd2luZ0FyZWFQcm94
eS5tZXNzYWdlcy5pbiBcCiAgICAgRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluIFwKLSAgICBM
YXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gXAorICAgIExheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkubWVzc2FnZXMuaW4gXAogICAgIFBsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5p
biBcCiAgICAgUGx1Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4gXApAQCAtOTAsNyArOTAsNyBAQCBNRVNTQUdFX1JFQ0VJVkVS
UyA9IFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBcCiAgICAgV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9EcmF3aW5nQXJl
YS5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIFwK
KyAgICBXZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1l
c3NhZ2VzLmluIFwKICAgICBXZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBcCiAgICAg
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdl
SUQuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKaW5kZXgg
NWYzOThhYS4uZDkyM2ExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9NZXNzYWdlSUQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01l
c3NhZ2VJRC5oCkBAIC0zOCw3ICszOCw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsKICAgICBNZXNz
YWdlQ2xhc3NBdXRoZW50aWNhdGlvbk1hbmFnZXIsCiAgICAgTWVzc2FnZUNsYXNzRHJhd2luZ0Fy
ZWEsCiAgICAgTWVzc2FnZUNsYXNzSW5qZWN0ZWRCdW5kbGUsCi0gICAgTWVzc2FnZUNsYXNzTGF5
ZXJUcmVlSG9zdCwKKyAgICBNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvciwKICAgICBN
ZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NX
ZWJDb29raWVNYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc1dlYkRhdGFiYXNlTWFuYWdlciwKQEAg
LTYwLDcgKzYwLDcgQEAgZW51bSBNZXNzYWdlQ2xhc3MgewogICAgIC8vIE1lc3NhZ2VzIHNlbnQg
YnkgdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBVSSBwcm9jZXNzLgogICAgIE1lc3NhZ2VDbGFzc0Rv
d25sb2FkUHJveHksCiAgICAgTWVzc2FnZUNsYXNzRHJhd2luZ0FyZWFQcm94eSwKLSAgICBNZXNz
YWdlQ2xhc3NMYXllclRyZWVIb3N0UHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdl
clByb3h5LAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvbnRleHQsCiAgICAgTWVzc2FnZUNsYXNzV2Vi
Q29udGV4dExlZ2FjeSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDdiOWFiOTkuLmY1ZjM4MDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaQpAQCAtMjE0LDcgKzIxNCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9HZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVy
L1Byb2Nlc3NMYXVuY2hlci5oIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNo
ZXIuaCBcCi0gICAgVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIFwKKyAgICBVSVByb2Nl
c3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0
aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIFwKICAgICBVSVByb2Nlc3MvTm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIFwK
ICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb24uaCBcCkBAIC0zNTUs
NyArMzU1LDYgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFcnJvcnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9u
Q2xpZW50LmggXAotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5o
IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xp
ZW50LmggXApAQCAtMzY3LDYgKzM2Niw4IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBc
CisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRv
ci9XZWJHcmFwaGljc0xheWVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGln
aHRDb250cm9sbGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBcCkBAIC0zNzcsNyArMzc4LDYg
QEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmggXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJVbmRvU3RlcC5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJU
cmVlSG9zdFF0LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0QnVp
bHRpbkJ1bmRsZS5oIFwKQEAgLTU2Niw3ICs1NjYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVBy
b2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNo
ZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQv
VGhyZWFkTGF1bmNoZXJRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHku
Y3BwIFwKKyAgICBVSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgXAogICAg
IFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNw
cCBcCiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb24uY3BwIFwKQEAgLTcyMiw3ICs3MjIsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgXAogICAgIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcCBcCi0gICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwIFwKQEAg
LTc0MCw2ICs3MzksOCBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRW5j
b2RlckFkYXB0ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCisgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5h
dG9yLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dl
YkdyYXBoaWNzTGF5ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0
Q29udHJvbGxlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBcCkBAIC03NTQsNyAr
NzU1LDYgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91
cFByb3h5LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmNwcCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYkluc3BlY3RvclF0LmNwcCBcCi0gICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9xdC9XZWJQYWdlUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvbm5lY3Rpb25Ub1VJ
UHJvY2Vzcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXggZTBk
NjAxMi4uZTFmNjc1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0
UHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVk
ZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlU0dOb2RlLmgi
CiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTcyLDkgKzcyLDkgQEAgdm9p
ZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIpCiAgICAgaWYg
KCF3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExh
eWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5ID0gd2ViUGFnZVByb3h5LT5kcmF3
aW5nQXJlYSgpLT5sYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICBpZiAobGF5ZXJUcmVlSG9zdFBy
b3h5LT5sYXllclRyZWVSZW5kZXJlcigpKQotICAgICAgICBsYXllclRyZWVIb3N0UHJveHktPmxh
eWVyVHJlZVJlbmRlcmVyKCktPnBhaW50VG9HcmFwaGljc0NvbnRleHQocGFpbnRlcik7CisgICAg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IHdl
YlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpOwor
ICAgIGlmIChsYXllclRyZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpKQor
ICAgICAgICBsYXllclRyZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpLT5w
YWludFRvR3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwogfQogCiBRU0dOb2RlKiBRUXVpY2tXZWJQ
YWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0
YSopCkBAIC04Miw4ICs4Miw4IEBAIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50
Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKICAgICBpZiAoIWQt
PndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIG9sZE5vZGU7CiAK
LSAgICBMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSA9IGQtPndlYlBhZ2VQ
cm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAgV2ViTGF5ZXJU
cmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gbGF5ZXJUcmVlSG9zdFByb3h5LT5sYXllclRyZWVSZW5k
ZXJlcigpOworICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkgPSBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkoKTsKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBsYXll
clRyZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOwogCiAgICAgUXRXZWJQ
YWdlU0dOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8UXRXZWJQYWdlU0dOb2RlKj4ob2xkTm9kZSk7
CiAgICAgaWYgKCFub2RlKQpAQCAtMTU5LDggKzE1OSw4IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVBy
aXZhdGU6OnVwZGF0ZVNpemUoKQogICAgIFFTaXplRiBzY2FsZWRTaXplID0gY29udGVudHNTaXpl
ICogY29udGVudHNTY2FsZTsKIAogICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0g
d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmIChkcmF3aW5nQXJlYSAmJiBkcmF3
aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkpCi0gICAgICAgIGRyYXdpbmdBcmVhLT5sYXll
clRyZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKGNvbnRlbnRzU2l6ZSk7CisgICAgaWYg
KGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCkp
CisgICAgICAgIGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCktPnNldENv
bnRlbnRzU2l6ZShjb250ZW50c1NpemUpOwogCiAgICAgcS0+c2V0U2l6ZShzY2FsZWRTaXplKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4
IDA4YjIyNTcuLjVmN2IxMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3RQcm94eS5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNs
dWRlIDxDb3JlSVBDL01lc3NhZ2VJRC5oPgogI2VuZGlmCiAKQEAgLTY5LDcgKzY5LDcgQEAgV2Vi
Q29yZTo6SW50UmVjdCBEcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3QoKSBjb25zdAogICAg
IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZVByb3h5LT52aWV3U2l6
ZSgpKTsKIH0KIAotdm9pZCBEcmF3aW5nQXJlYVByb3h5OjpkaWRSZWNlaXZlTGF5ZXJUcmVlSG9z
dFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1l
c3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit2b2lkIERyYXdp
bmdBcmVhUHJveHk6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDlmMTcwNWQuLjQyNmZlYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApAQCAtNTQs
NyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgTGF5ZXJUcmVlQ29udGV4dDsKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKK2NsYXNzIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CiBjbGFzcyBVcGRhdGVJbmZvOwogY2xhc3MgV2ViTGF5
ZXJUcmVlSW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKQEAgLTkzLDEyICs5MywxMiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdwb3J0VmlzaWJsZVJl
Y3QoKSBjb25zdCB7IHJldHVybiBjb250ZW50c1JlY3QoKTsgfQogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNCYWNr
aW5nU3RvcmVSZWFkeSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICBMYXllclRyZWVIb3N0
UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9z
dFByb3h5LmdldCgpOyB9CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5nZXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uID0gV2ViQ29yZTo6
RmxvYXRQb2ludCgpKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKGlu
dCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlE
LCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqKTsKIAogICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFn
ZVByb3h5OyB9CiAjZW5kaWYKQEAgLTExMiw3ICsxMTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2Vi
Q29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lU
SU5HKQotICAgIE93blB0cjxMYXllclRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9zdFByb3h5
OworICAgIE93blB0cjxMYXllclRyZWVDb29yZGluYXRvclByb3h5PiBtX2xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDE1NjI2NzEuLjBiYjc0NDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmNwcApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKICNp
ZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHku
aCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjZW5kaWYKIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02MSw3ICs2MSw3IEBAIERyYXdpbmdBcmVhUHJveHlJ
bXBsOjpEcmF3aW5nQXJlYVByb3h5SW1wbChXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKICNp
ZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKICAgICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVh
cmx5IHRvIGFsbG93IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxl
IEFDIGlzIGVudGVyZWQgdGhlcmUuCiAgICAgaWYgKHdlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCkt
PnByZWZlcmVuY2VzKCktPmZvcmNlQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5KHRoaXMpKTsKICNlbmRpZgogfQogCkBAIC0zNTQsMjIgKzM1NCwy
MiBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleAogICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxh
eWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJ
TkcpCi0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVI
b3N0UHJveHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKKyAgICBp
ZiAoIW1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVDb29y
ZGluYXRvclByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkodGhp
cykpOwogI2VuZGlmCiB9CiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLXZvaWQgRHJh
d2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdl
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQordm9pZCBEcmF3aW5nQXJl
YVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdl
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIGlmIChtX2xh
eWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPmRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1l
bnRzKTsKKyAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclBy
b3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiB9CiAKIHZvaWQg
RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRpb24pCiB7Ci0gICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdFByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZlY3Rvciwg
YWNjdXJhdGVWaXNpYmxlQ29udGVudHNQb3NpdGlvbik7CisgICAgaWYgKG1fbGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5zZXRW
aXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1JlY3QsIHNjYWxlLCB0cmFqZWN0b3J5
VmVjdG9yLCBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKTsKIH0KIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4
IDM0NmYzNTQuLjRjNGFjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKK2NsYXNzIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk7CiAKIGNsYXNzIERyYXdpbmdBcmVhUHJveHlJbXBsIDogcHVi
bGljIERyYXdpbmdBcmVhUHJveHkgewogcHVibGljOgpAQCAtODMsNyArODMsNyBAQCBwcml2YXRl
OgogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRz
UmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3Rvcnks
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRp
b24gPSBXZWJDb3JlOjpGbG9hdFBvaW50KCkpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJl
ZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAjZW5kaWYKICNlbHNlCiAg
ICAgYm9vbCBpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNi
MDIxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5H
KQorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKKworI2luY2x1ZGUgIkxh
eWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVl
SW5mby5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3
aW5nQXJlYVByb3h5KQorICAgIDogbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkp
CisgICAgLCBtX3JlbmRlcmVyKGFkb3B0UmVmKG5ldyBXZWJMYXllclRyZWVSZW5kZXJlcih0aGlz
KSkpCit7Cit9CisKK0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGlu
YXRvclByb3h5KCkKK3sKKyAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKK30KKwordm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQoreworICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1
cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXll
cklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVUaWxlRm9y
TGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6
U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgUmVmUHRyPFNoYXJlYWJsZVN1
cmZhY2U+IHN1cmZhY2U7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdWludDMyX3Qg
dG9rZW4gPSB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUuZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsK
KyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPjo6aXRlcmF0
b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodG9rZW4pOworICAgIGlmIChpdCA9PSBtX3N1cmZhY2Vz
LmVuZCgpKSB7CisgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBk
YXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKKyAgICAgICAgbV9zdXJmYWNlcy5hZGQodG9rZW4sIHN1
cmZhY2UpOworICAgIH0gZWxzZQorICAgICAgICBzdXJmYWNlID0gaXQtPnNlY29uZDsKKyNlbHNl
CisgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZh
Y2VIYW5kbGUpOworI2VuZGlmCisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwg
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0
YXJnZXRSZWN0LCBzdXJmYWNlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXll
cklELCBpbnQgdGlsZUlEKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQp
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZWxldGVDb21wb3NpdGlu
Z0xheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworICAg
IHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVy
ZXIuZ2V0KCksIGlkKSk7CisgICAgdXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCBp
ZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgaW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBv
c2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJ
RD4mIGNoaWxkcmVuKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRMYXllckNoaWxkcmVuLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2hpbGRyZW4p
KTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZX
ZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgZmlsdGVycykpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6ZGlkUmVuZGVyRnJhbWUoKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5kZXJlci5nZXQoKSkpOworICAg
IHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0IFdlYktpdDo6
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZSwgbV9y
ZW5kZXJlci5nZXQoKSwga2V5LCBiaXRtYXApKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCit7
CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJ
bWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXpl
KQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRD
b250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNvbnRlbnRzU2l6ZSkpOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlW
ZWN0b3IsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRz
UG9zaXRpb24pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QsIG1fcmVuZGVyZXIuZ2V0KCksIHJlY3QsIHNjYWxl
LCBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKSk7CisgICAgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OlNldFZpc2libGVDb250ZW50c1JlY3QocmVjdCwgc2NhbGUsIHRyYWplY3RvcnlWZWN0b3Ip
LCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cGFnZUlEKCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRp
b24sIG1fcmVuZGVyZXIuZ2V0KCksIHBvc2l0aW9uKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCit7CisgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIu
Z2V0KCksIGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit9CisjZW5kaWYgLy8gVVNFKFVJX1NJREVfQ09N
UE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGU3
YjdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuaApAQCAtMCwwICsxLDkwIEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaWZuZGVmIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlfaAorI2RlZmluZSBMYXllclRyZWVD
b29yZGluYXRvclByb3h5X2gKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2lu
Y2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworY2xhc3MgUVNHTm9k
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdl
YkxheWVyVHJlZVJlbmRlcmVyOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOworCitjbGFzcyBM
YXllclRyZWVDb29yZGluYXRvclByb3h5IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICB2aXJ0dWFsIH5MYXllclRyZWVDb29y
ZGluYXRvclByb3h5KCk7CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5
ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVy
Q2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7CisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2Vi
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisgICAg
dm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOworICAgIHZvaWQgc2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKKyAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNl
dENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5LCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKTsKKyAgICB2b2lkIGRpZFJl
bmRlckZyYW1lKCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlE
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAg
ICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CisgICAg
dm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7CisgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UoaW50NjRfdCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgp
OworICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOworICAgIHZvaWQgc3lu
Y0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwg
dWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3Rv
cmVzKCk7CisgICAgV2ViTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVyKCkgY29u
c3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
aXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICBEcmF3aW5nQXJl
YVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisgICAgUmVmUHRyPFdlYkxheWVyVHJlZVJlbmRl
cmVyPiBtX3JlbmRlcmVyOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIEhhc2hNYXA8
dWludDMyX3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+IG1fc3VyZmFjZXM7CisjZW5kaWYK
K307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBMYXllclRyZWVDb29yZGluYXRvclByb3h5
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzI4NGI5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzgg
QEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisj
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMgLT4gTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CisgICAgU2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVp
bnQzMl90IGlkLCBXZWJLaXQ6OldlYkxheWVySW5mbyBsYXllckluZm8pCisgICAgU2V0Q29tcG9z
aXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVu
KQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVy
cyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQorI2VuZGlm
CisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCisgICAgRGVsZXRlQ29t
cG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMy
X3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJL
aXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgVXBkYXRlVGlsZUZvckxheWVy
KHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVj
dCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFJlbW92ZVRpbGVG
b3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlEKQorICAgIENyZWF0ZURpcmVjdGx5
Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlIGhhbmRsZSkKKyAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBr
ZXkpCisgICAgRGlkUmVuZGVyRnJhbWUoKQorICAgIERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdl
YkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQorICAgIFN5bmNDYW52YXModWludDMyX3QgaWQsIFdl
YkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4p
Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRy
ZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQ
cm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4N2YwNzIuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0KLSNpbmNsdWRlICJMYXllclRyZWVIb3N0TWVzc2FnZXMu
aCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgIldlYkxheWVy
VHJlZVJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKLSAgICA6IG1fZHJhd2luZ0FyZWFQcm94eShk
cmF3aW5nQXJlYVByb3h5KQotICAgICwgbV9yZW5kZXJlcihhZG9wdFJlZihuZXcgV2ViTGF5ZXJU
cmVlUmVuZGVyZXIodGhpcykpKQotewotfQotCi1MYXllclRyZWVIb3N0UHJveHk6On5MYXllclRy
ZWVIb3N0UHJveHkoKQotewotICAgIG1fcmVuZGVyZXItPmRldGFjaCgpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQotewotICAgIG1fZHJhd2luZ0FyZWFQ
cm94eS0+dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRp
c3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIG1f
cmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRl
SW5mby5zY2FsZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxl
SUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlOwotI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQotICAgIHVpbnQzMl90IHRva2VuID0gdXBkYXRlSW5mby5zdXJmYWNl
SGFuZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVm
UHRyPFNoYXJlYWJsZVN1cmZhY2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHRv
a2VuKTsKLSAgICBpZiAoaXQgPT0gbV9zdXJmYWNlcy5lbmQoKSkgewotICAgICAgICBzdXJmYWNl
ID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7Ci0g
ICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2VuLCBzdXJmYWNlKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgc3VyZmFjZSA9IGl0LT5zZWNvbmQ7Ci0jZWxzZQotICAgIHN1cmZhY2UgPSBTaGFyZWFibGVT
dXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSNlbmRpZgotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3Jl
bmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpUaWxl
VXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgc3VyZmFjZSwgdXBkYXRl
SW5mby5zdXJmYWNlT2Zmc2V0KSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVt
b3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVy
LmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fcmVuZGVyZXIu
Z2V0KCksIGlkKSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQgaWQpCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklE
LCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJ
RCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdldCgp
LCBpZCwgaW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRp
bmdMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYg
Y2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldExheWVyQ2hpbGRyZW4sIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjaGlsZHJlbikpOwot
fQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNl
dENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldExheWVyRmlsdGVycywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGZpbHRlcnMp
KTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUo
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVz
aExheWVyQ2hhbmdlcywgbV9yZW5kZXJlci5nZXQoKSkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYg
aGFuZGxlKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXksIGJpdG1h
cCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9z
aXRlZEltYWdlKGludDY0X3Qga2V5KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxh
eWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSkpOwot
fQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgY29udGVudHNTaXplKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNvbnRlbnRz
U2l6ZSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRz
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYg
dHJhamVjdG9yeVZlY3RvciwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYWNjdXJhdGVWaXNp
YmxlQ29udGVudHNQb3NpdGlvbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXll
clRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9yZW5kZXJlci5nZXQoKSwg
cmVjdCwgc2NhbGUsIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRpb24pKTsKLSAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlLCB0cmFqZWN0b3J5VmVj
dG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgbV9kcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6
UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihj
b25zdCBJbnRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uLCBtX3JlbmRlcmVyLmdl
dCgpLCBwb3NpdGlvbikpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY0NhbnZh
cyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjYW52YXNTaXplLCBn
cmFwaGljc1N1cmZhY2VUb2tlbikpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cHVy
Z2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMo
KSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotfQotI2VuZGlm
IC8vIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTU4
YTVhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKLSNkZWZpbmUgTGF5ZXJUcmVlSG9zdFBy
b3h5X2gKLQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiQmFja2lu
Z1N0b3JlLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIlJlZ2lv
bi5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29w
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotY2xhc3MgUVNHTm9kZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkxheWVySW5mbzsKLWNsYXNzIFdlYkxheWVyVHJlZVJl
bmRlcmVyOwotY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwotCi1jbGFzcyBMYXllclRyZWVIb3N0
UHJveHkgewotcHVibGljOgotICAgIExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5
Kik7Ci0gICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAgdm9pZCBzZXRDb21w
b3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0gICAg
dm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9y
PFdlYkxheWVySUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29t
cG9zaXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYpOwotI2VuZGlmCi0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxh
eWVySUQpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0g
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHB1cmdlR0xS
ZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmKTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0
b3J5LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bv
c2l0aW9uKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxl
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVy
KGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5
ZXJJRCwgaW50IHRpbGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7Ci0gICAg
dm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7Ci0gICAgdm9pZCBk
aWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwg
Q29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lk
IHVwZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2b2lk
IGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlv
bik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7Ci0gICAgdm9p
ZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJlciogbGF5ZXJU
cmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsK
LQotICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKLSAgICBSZWZQdHI8
V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9z
dXJmYWNlczsKLSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIExheWVyVHJl
ZUhvc3RQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTg4YjQ0Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
SG9zdFByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIwot
IyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSMgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi1tZXNzYWdlcyAtPiBMYXllclRyZWVI
b3N0UHJveHkgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwgV2Vi
S2l0OjpXZWJMYXllckluZm8gbGF5ZXJJbmZvKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJDaGls
ZHJlbih1aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnModWludDMyX3QgaWQs
IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVycykKLSNlbmRpZgotICAgIFNldFJvb3RD
b21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIo
dWludDMyX3QgaWQpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGlu
dCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXll
cklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3Vy
ZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMy
X3QgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLSAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCi0g
ICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQotICAgIERpZFJl
bmRlckZyYW1lKCkKLSAgICBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2lu
dCBwb3NpdGlvbikKLSAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJbnRTaXpl
IGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKQotfQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcApp
bmRleCAzODUwZTUzLi5iODVlMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJCYWNraW5nU3Rv
cmUuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCiAjaW5jbHVkZSAi
U2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgpAQCAtODUsOSAr
ODUsOSBAQCBzdGF0aWMgSW50UG9pbnQgYm91bmRlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50UgogICAgIHJldHVybiBJbnRQb2ludChzY3Jv
bGxQb3NpdGlvblgsIHNjcm9sbFBvc2l0aW9uWSk7CiB9CiAKLVdlYkxheWVyVHJlZVJlbmRlcmVy
OjpXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQ
cm94eSkKK1dlYkxheWVyVHJlZVJlbmRlcmVyOjpXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRy
ZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5KQogICAgIDogbV9j
b250ZW50c1NjYWxlKDEpCi0gICAgLCBtX2xheWVyVHJlZUhvc3RQcm94eShsYXllclRyZWVIb3N0
UHJveHkpCisgICAgLCBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkobGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSkKICAgICAsIG1fcm9vdExheWVySUQoSW52YWxpZFdlYkxheWVySUQpCiAgICAg
LCBtX2lzQWN0aXZlKGZhbHNlKQogewpAQCAtMTc1LDggKzE3NSw4IEBAIHZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwg
ZmxvYXQgc2NhCiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KCkK
IHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9z
dFByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+dXBkYXRlVmlld3Bv
cnQoKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JG
aXhlZExheWVycygpCkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6Zmx1c2hMYXllckNoYW5nZXMoKQogCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW5k
ZXJOZXh0RnJhbWUoKQogewotICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0UHJveHktPnJlbmRlck5leHRGcmFtZSgpOworICAgIGlmIChtX2xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS0+cmVuZGVyTmV4dEZyYW1lKCk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmVu
c3VyZVJvb3RMYXllcigpCkBAIC00NjUsMTMgKzQ2NSwxMyBAQCB2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkKIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0g
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICBp
ZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCiB2b2lkIFdlYkxheWVyVHJl
ZVJlbmRlcmVyOjpkZXRhY2goKQogewotICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5ID0gMDsKKyAg
ICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgPSAwOwogfQogCiB2b2lkIFdlYkxheWVyVHJl
ZVJlbmRlcmVyOjphcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVy
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCmlu
ZGV4IGQ2NmIxOWQuLjJhNGJhYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJMYXllclRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJMYXllclRyZWVSZW5kZXJlci5oCkBAIC00MCw3ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgTGF5ZXJCYWNraW5nU3RvcmU7Ci1jbGFzcyBMYXllclRyZWVIb3N0UHJveHk7
CitjbGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5OwogY2xhc3MgV2ViTGF5ZXJJbmZvOwog
Y2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgfTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJlcihMYXll
clRyZWVIb3N0UHJveHkqKTsKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVDb29y
ZGluYXRvclByb3h5Kik7CiAgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlUmVuZGVyZXIoKTsKICAg
ICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgPSAw
KTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCk7CiAgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKIAotICAgIExheWVyVHJlZUhvc3RQ
cm94eSogbV9sYXllclRyZWVIb3N0UHJveHk7CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eSogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5OwogICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNU
b0RlbGV0ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRl
eCA2MjdlZTUyLi5iNTA0NmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcApAQCAtOTQsNyArOTQsNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoVUlfU0lERV9DT01Q
T1NJVElORykKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShRVCkKQEAgLTE3MzcsOCArMTczNyw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRS
ZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpN
CiAgICAgfQogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1lc3NhZ2VJ
RC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0UHJveHk+KCkpIHsKLSAgICAg
ICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoY29u
bmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOworICAgIGlmIChtZXNzYWdlSUQuaXM8Q29y
ZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eT4oKSkgeworICAgICAg
ICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3Nh
Z2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSBiL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDI0Y2M1YTIuLjc5MjgyZDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIucHJpCkBAIC01NSw2ICs1NSw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9E
SVIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvcXQgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBh
Z2UgXAorICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL3F0IFwKICAgICAkJFNPVVJDRV9E
SVIvUGx1Z2luUHJvY2VzcwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggODhkNjRlYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNzQ2ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykK
LSNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0KLSNpbmNsdWRlICJCYWNraW5nU3RvcmUu
aCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
IgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgotI2luY2x1ZGUgIldl
YlBhZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFzaE1hcDxXZWJMYXll
cklELCBXZWJHcmFwaGljc0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCi17Ci0gICAgc3RhdGljIEhh
c2hNYXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKLSAgICByZXR1
cm4gZ2xvYmFsTWFwOwotfQotCi1XZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjps
YXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQotewotICAgIEhhc2hNYXA8V2ViTGF5ZXJJ
RCwgV2ViR3JhcGhpY3NMYXllcio+JiB0YWJsZSA9IGxheWVyQnlJRE1hcCgpOwotICAgIEhhc2hN
YXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZp
bmQoaWQpOwotICAgIGlmIChpdCA9PSB0YWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLXN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJ
RChHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBo
aWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpk
aWRDaGFuZ2VMYXllclN0YXRlKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1
ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWly
ZWQodGhpcyk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4o
KQotewotICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkp
Ci0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0KLSNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRl
cnMoKQotewotICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSB0cnVlOwotICAgIGlmIChjbGllbnQo
KSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLSNlbmRp
ZgotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkK
LXsKLSAgICBpZiAoIXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xh
eWVyKGNoaWxkcmVuKClbaV0pLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwotICAgIGlm
IChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXll
cigpKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpkaWRDaGFuZ2VHZW9tZXRyeSgpCi17Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OwotICAgIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci19Ci0KLVdlYkdyYXBoaWNzTGF5
ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotICAgIDog
R3JhcGhpY3NMYXllcihjbGllbnQpCi0gICAgLCBtX21hc2tUYXJnZXQoMCkKLSAgICAsIG1faW5V
cGRhdGVNb2RlKGZhbHNlKQotICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQot
ICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQ2hp
bGRyZW4odHJ1ZSkKLSAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQotICAgICwgbV9jYW52
YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkK
LSAgICAsIG1fY29udGVudHNTY2FsZSgxKQotICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDAp
Ci17Ci0gICAgc3RhdGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOwotICAgIG1faWQgPSBu
ZXh0TGF5ZXJJRCsrOwotICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsKLX0KLQot
V2ViR3JhcGhpY3NMYXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQotewotICAgIGxheWVyQnlJRE1h
cCgpLnJlbW92ZShpZCgpKTsKLQotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsK
LSAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudC0+ZGV0YWNoTGF5ZXIodGhpcyk7Ci0gICAgfQotICAgIHdpbGxCZURlc3Ryb3llZCgp
OwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCi17Ci0gICAg
R3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NM
YXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4p
Ci17Ci0gICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsK
LSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBj
aGlsZCA9IHRvV2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7Ci0gICAgICAgIGNoaWxkLT5z
ZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAg
ICAgIGNoaWxkLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgfQotICAgIGRpZENoYW5nZUNo
aWxkcmVuKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGQobGF5ZXIpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBo
aWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBo
aWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hp
bGRyZW4oKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRD
aGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIp
LT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0g
ICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAg
IGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKLXsK
LSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKLSAgICB0
b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2Vi
R3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3Jh
cGhpY3NMYXllciogc2libGluZykKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93
KGxheWVyLCBzaWJsaW5nKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgdG9XZWJH
cmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRpZENoYW5n
ZUNoaWxkcmVuKCk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdy
YXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKLXsKLSAgICBi
b29sIG9rID0gR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7
Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRpZENoYW5nZUNoaWxk
cmVuKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPnNldFdlYkdyYXBoaWNz
TGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNz
TGF5ZXIobmV3Q2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCi17Ci0gICAg
aWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHBh
cmVudCgpKSkKLSAgICAgICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAg
R3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHApCi17Ci0gICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7Ci0gICAgZGlkQ2hhbmdlR2Vv
bWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHApCi17Ci0gICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7Ci0gICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7Ci0g
ICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgaWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNr
TGF5ZXIoKS0+c2V0U2l6ZShzaXplKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdCkKLXsKLSAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOwotICAgIGRpZENoYW5nZUdlb21l
dHJ5KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCi17Ci0gICAgaWYgKGNoaWxkcmVuVHJhbnNm
b3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0odCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCi17Ci0gICAgaWYgKHByZXNl
cnZlczNEKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0
UHJlc2VydmVzM0QoYik7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKLXsKLSAgICBpZiAobWFza3NU
b0JvdW5kcygpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRN
YXNrc1RvQm91bmRzKGIpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKLXsKLSAgICBpZiAoZHJhd3ND
b250ZW50KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldERy
YXdzQ29udGVudChiKTsKLQotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCi17Ci0gICAgaWYgKGNv
bnRlbnRzT3BhcXVlKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX21haW5CYWNr
aW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSgh
Yik7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7Ci0gICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNl
VmlzaWJpbGl0eShib29sIGIpCi17Ci0gICAgaWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJp
bGl0eShiKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQotewotICAgIGlmICh0aGlzLT5vcGFj
aXR5KCkgPT0gb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6
c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgaWYgKGNvbnRlbnRzUmVjdCgpID09IHIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXko
KQotewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlOwotICAgIHNldENvbnRlbnRz
VG9JbWFnZSgwKTsKLSAgICBzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOwotICAgIG1f
Y2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCi17Ci0gICAg
bV9jYW52YXNQbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKLSAgICBtX2NhbnZhc05lZWRz
RGlzcGxheSA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90
aWZ5U3luY1JlcXVpcmVkKHRoaXMpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotYm9v
bCBXZWJHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG5l
d0ZpbHRlcnMpCi17Ci0gICAgaWYgKGZpbHRlcnMoKSA9PSBuZXdGaWx0ZXJzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkaWRDaGFuZ2VGaWx0ZXJzKCk7Ci0gICAgcmV0dXJuIEdyYXBoaWNz
TGF5ZXI6OnNldEZpbHRlcnMobmV3RmlsdGVycyk7Ci19Ci0jZW5kaWYKLQotCi12b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYg
KGltYWdlID09IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQ2NF90IG5ld0lEID0g
MDsKLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7Ci0gICAgICAgIC8vIFdlIGFk
b3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBh
dm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KLSAgICAgICAgbmV3SUQg
PSBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoaW1hZ2Up
OwotICAgICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdT
dG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCAmJiBuZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudCBpcyBub3Qgc2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBzdG9yZSBJ
RC4KLSAgICAgICAgQVNTRVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAg
ICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIH0KLQotICAgIG1fbGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKLSAgICBtX2ltYWdlID0gaW1hZ2U7Ci0gICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgaWYg
KGxheWVyID09IG1hc2tMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xh
eWVyOjpzZXRNYXNrTGF5ZXIobGF5ZXIpOwotCi0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbGF5ZXItPnNldFNpemUoc2l6ZSgpKTsKLSAgICBXZWJHcmFwaGljc0xheWVy
KiB3ZWJHcmFwaGljc0xheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKLSAgICB3ZWJH
cmFwaGljc0xheWVyLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudCk7Ci0gICAgd2ViR3JhcGhpY3NMYXllci0+c2V0TWFza1RhcmdldCh0aGlzKTsKLSAg
ICB3ZWJHcmFwaGljc0xheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotCi19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRl
ZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKGxheWVyID09IHJlcGxp
Y2FMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIHRv
V2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJH
cmFwaGljc0xheWVyQ2xpZW50KTsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRC
eUxheWVyKGxheWVyKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpKSk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAobV9tYWluQmFj
a2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVj
dChyZWN0KSk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi1XZWJMYXllcklEIFdl
YkdyYXBoaWNzTGF5ZXI6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pZDsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b1dlYkdyYXBoaWNz
TGF5ZXIobWFza0xheWVyKCkpKQotICAgICAgICBtYXNrLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKLQotICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiByZXBsaWNhID0g
dG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKLSAgICAgICAgcmVwbGljYS0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBtX3dlYkdyYXBoaWNz
TGF5ZXJDbGllbnQtPnN5bmNGaXhlZExheWVycygpOwotCi0gICAgc3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxk
cmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKHJlY3QpOwotfQotCi1XZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkdyYXBo
aWNzTGF5ZXIqPihsYXllcik7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NoaWxk
cmVuKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICBWZWN0b3I8V2ViTGF5ZXJJ
RD4gY2hpbGRJRHM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUo
KTsgKytpKQotICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClb
aV0pKTsKLQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyQ2hpbGRyZW4o
bV9pZCwgY2hpbGRJRHMpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jRmlsdGVycygpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0
ZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOwot
ICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0
ZXJzKCkpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3Rh
dGUoKQotIHsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gZmFsc2U7Ci0gICAgbV9sYXllckluZm8u
Zml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1ZpZXdwb3J0KCk7Ci0KLSAgICBtX2xheWVySW5mby5h
bmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7Ci0gICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNp
YmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFu
c2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3Bh
cXVlID0gY29udGVudHNPcGFxdWUoKTsKLSAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBj
b250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRl
bnQoKTsKLSAgICBtX2xheWVySW5mby5tYXNrID0gdG9XZWJMYXllcklEKG1hc2tMYXllcigpKTsK
LSAgICBtX2xheWVySW5mby5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOwotICAgIG1f
bGF5ZXJJbmZvLm9wYWNpdHkgPSBvcGFjaXR5KCk7Ci0gICAgbV9sYXllckluZm8ucGFyZW50ID0g
dG9XZWJMYXllcklEKHBhcmVudCgpKTsKLSAgICBtX2xheWVySW5mby5wb3MgPSBwb3NpdGlvbigp
OwotICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJlc2VydmVzM0QoKTsKLSAgICBtX2xh
eWVySW5mby5yZXBsaWNhID0gdG9XZWJMYXllcklEKHJlcGxpY2FMYXllcigpKTsKLSAgICBtX2xh
eWVySW5mby5zaXplID0gc2l6ZSgpOwotICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5z
Zm9ybSgpOwotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyU3RhdGUobV9p
ZCwgbV9sYXllckluZm8pOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMo
KQotewotICAgIGlmICghbV9jYW52YXNOZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9jYW52YXNQbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbiA9
IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93
ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jQ2FudmFzKG1faWQsIEludFNpemUoc2l6ZSgpLndp
ZHRoKCksIHNpemUoKS5oZWlnaHQoKSksIGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKLSNlbmRpZgot
ICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKQotewotICAgIGlmICghbV9pbWFnZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkK
LSAgICAgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG1fd2ViR3JhcGhpY3NM
YXllckNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShtX2ltYWdlLmdldCgpKTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKQotewotICAgIC8vIFRoZSByZW1vdGUgaW1hZ2UgbWlnaHQgaGF2ZSBiZWVuIHJlbGVhc2Vk
IGJ5IHB1cmdlQmFja2luZ1N0b3Jlcy4KLSAgICBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOwot
ICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7Ci0gICAgc3luY0NoaWxkcmVuKCk7
Ci0gICAgc3luY0xheWVyU3RhdGUoKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgc3lu
Y0ZpbHRlcnMoKTsKLSNlbmRpZgotICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7Ci0gICAgc3lu
Y0NhbnZhcygpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRCZWdpbigpCi17Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVy
KGJvb2wgaXNSb290KQotewotICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290Owot
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpCi17Ci0gICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKLSAgICAgICAg
bV9tYWluQmFja2luZ1N0b3JlLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKHRyYWplY3RvcnlWZWN0
b3IpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQg
c2NhbGUpCi17Ci0gICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7Ci0gICAgYWRqdXN0Q29udGVu
dHNTY2FsZSgpOwotfQotCi1mbG9hdCBXZWJHcmFwaGljc0xheWVyOjplZmZlY3RpdmVDb250ZW50
c1NjYWxlKCkKLXsKLSAgICByZXR1cm4gc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKSA/IG1f
Y29udGVudHNTY2FsZSA6IDE7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRqdXN0Q29u
dGVudHNTY2FsZSgpCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUgfHwgbV9tYWluQmFja2luZ1N0b3JlLT5j
b250ZW50c1NjYWxlKCkgPT0gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBuZXcgYmFja2luZyBzdG9yZSBhbmQg
cGFpbnRpbmcgdGhlIGNvbnRlbnQsCi0gICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZHJvcCB0aGUg
cHJldmlvdXMgb25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluCi0gICAgLy8gYnJpZWZseSBzZWVp
bmcgZmxpY2tlcmluZyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBkcm9wcGVkIGJlZm9yZQotICAg
IC8vIHNvbWV0aGluZyByZXBsYWNlcyB0aGVtLgotICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUg
PSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOwotCi0gICAgLy8gTm8gcmVhc29uIHRvIHNh
dmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9yIG5vbi12aXNpYmxlIGFyZWFzLgotICAg
IG1fcHJldmlvdXNCYWNraW5nU3RvcmUtPnJlbW92ZUFsbE5vblZpc2libGVUaWxlcygpOwotCi0g
ICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlQmFja2luZ1N0b3JlKCkKLXsKLSAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihu
ZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFj
a2VuZDo6Y3JlYXRlKHRoaXMpKSk7Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0
c0FscGhhKCFjb250ZW50c09wYXF1ZSgpKTsKLSAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENv
bnRlbnRzU2NhbGUoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgcmVj
dCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVu
ZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKLXsKLX0KLQotYm9vbCBXZWJH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1faW5VcGRhdGVNb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0
dXJuIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2Vk
KCk7Ci19Ci0KLUludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250
ZW50c1JlY3QoKQotewotICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpOwotfQotCi1ib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNob3VsZFVzZVRp
bGVkQmFja2luZ1N0b3JlKCkKLXsKLSAgICByZXR1cm4gIXNlbGZPckFuY2VzdG9ySGF2ZU5vbkFm
ZmluZVRyYW5zZm9ybXMoKTsKLX0KLQotSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJh
Y2tpbmdTdG9yZVZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAoIXNob3VsZFVzZVRpbGVkQmFja2lu
Z1N0b3JlKCkpCi0gICAgICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgp
OwotCi0gICAgLy8gTm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4KLSAgICBp
ZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0ludmVydGlibGUoKSkKLSAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFJldHVybiBhIHByb2plY3Rpb24gb2YgdGhlIHZp
c2libGUgcmVjdCAoc3VyZmFjZSBjb29yZGluYXRlcykgb250byB0aGUgbGF5ZXIncyBwbGFuZSAo
bGF5ZXIgY29vcmRpbmF0ZXMpLgotICAgIC8vIFRoZSByZXN1bHRpbmcgcXVhZCBtaWdodCBiZSBz
cXVld2VkIGFuZCB0aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBx
dWFkLAotICAgIC8vIHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJlYWwgdmlz
aWJsZSBhcmVhIChhbmQgdGhlbiBldmVuIG1vcmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3ZlciByZWN0
IG11bHRpcGxpZXIpLgotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fbGF5ZXJUcmFuc2Zv
cm0uY29tYmluZWQoKS5pbnZlcnNlKCkuY2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChGbG9h
dFF1YWQoRmxvYXRSZWN0KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dmlzaWJsZUNvbnRlbnRz
UmVjdCgpKSkpKTsKLX0KLQotQ29sb3IgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBjb250ZW50c09wYXF1ZSgp
ID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OwotfQotCi1QYXNzT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gV2ViR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBk
YXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRs
ZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIHJldHVybiBtX3dl
YkdyYXBoaWNzTGF5ZXJDbGllbnQtPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09w
YXF1ZSgpID8gMCA6IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSwgaGFuZGxlLCBvZmZz
ZXQpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QpCi17Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5jcmVhdGVUaWxlKGlkKCks
IHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBk
YXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3dlYkdyYXBoaWNz
TGF5ZXJDbGllbnQtPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRS
ZWN0KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGludCB0aWxlSUQp
Ci17Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJ
RCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQot
ewotICAgIGlmICghZHJhd3NDb250ZW50KCkpIHsKLSAgICAgICAgbV9tYWluQmFja2luZ1N0b3Jl
LmNsZWFyKCk7Ci0gICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1faW5VcGRhdGVNb2RlID0gdHJ1ZTsKLSAgICAvLyBU
aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1haW4gdGlsZWQgYmFja2lu
ZyBzdG9yZSwgb25jZSB3ZQotICAgIC8vIGhhdmUgYSByZW1vdGUgY2xpZW50IGFuZCB3ZSBhcmUg
cmVhZHkgdG8gc2VuZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4KLSAgICBpZiAoIW1fbWFp
bkJhY2tpbmdTdG9yZSkKLSAgICAgICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgbV9tYWlu
QmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOwotICAgIG1faW5VcGRhdGVNb2RlID0g
ZmFsc2U7Ci0KLSAgICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBpcyBrZXB0IGFyb3Vu
ZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdlZW4KLSAgICAvLyByZW1vdmluZyB0aGUgZXhpc3Rp
bmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZpcnN0IHRpbWUKLSAgICAv
LyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92ZSB0aGUgcHJldmlvdXMg
YmFja2luZyBzdG9yZS4KLSAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlLT52aXNpYmxlQXJlYUlz
Q292ZXJlZCgpKQotICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci19Ci0K
LXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBtX21h
aW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFy
KCk7Ci0KLSAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkgewotICAgICAg
ICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xh
eWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgbV9sYXllckluZm8uaW1hZ2VC
YWNraW5nU3RvcmVJRCA9IDA7Ci0gICAgfQotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwot
ICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
V2ViR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqIGNs
aWVudCkKLXsKLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50ID09IGNsaWVudCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0b1dl
YkdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpKQotICAgICAgICByZXBsaWNhLT5zZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7Ci0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1h
c2sgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobWFza0xheWVyKCkpKQotICAgICAgICBtYXNrLT5zZXRX
ZWJHcmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0pOwotICAgICAgICBs
YXllci0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOwotICAgIH0KLQotICAgIC8v
IFdlIGhhdmUgdG8gcmVsZWFzZSByZXNvdXJjZXMgb24gdGhlIFVJIHByb2Nlc3MgaGVyZSBpZiB0
aGUgcmVtb3RlIGNsaWVudCBoYXMgY2hhbmdlZCBvciBpcyByZW1vdmVkLgotICAgIGlmIChtX3dl
YkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKLSAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0g
ICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+ZGV0YWNoTGF5ZXIodGhpcyk7Ci0gICAg
fQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCA9IGNsaWVudDsKLSAgICBpZiAoY2xpZW50
KQotICAgICAgICBjbGllbnQtPmF0dGFjaExheWVyKHRoaXMpOwotfQotCi12b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OmFkanVzdFZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAobV9tYWluQmFja2luZ1N0
b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQo
KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxl
UmVjdCgpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0KQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IGZhbHNlOwotICAgIG1fbGF5
ZXJUcmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtKCkpOwotICAgIG1fbGF5ZXJU
cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24oKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5z
ZXRBbmNob3JQb2ludChhbmNob3JQb2ludCgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldFNp
emUoc2l6ZSgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldEZsYXR0ZW5pbmcoIXByZXNlcnZl
czNEKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY2hpbGRy
ZW5UcmFuc2Zvcm0oKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5jb21iaW5lVHJhbnNmb3Jtcyhw
YXJlbnQoKSA/IHRvV2ViR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPm1fbGF5ZXJUcmFuc2Zvcm0u
Y29tYmluZWRGb3JDaGlsZHJlbigpIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAgICAv
LyBUaGUgY29tYmluZWQgdHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxlZEJhY2tpbmdTdG9y
ZVZpc2libGVSZWN0LgotICAgIGFkanVzdFZpc2libGVSZWN0KCk7Ci0gICAgYWRqdXN0Q29udGVu
dHNTY2FsZSgpOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVX
ZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6aW5pdEZhY3RvcnkoKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEdy
YXBoaWNzTGF5ZXJGYWN0b3J5KGNyZWF0ZVdlYkdyYXBoaWNzTGF5ZXIpOwotfQotCi1ib29sIFdl
YkdyYXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKQot
ewotICAgIGlmICghbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlzQWZmaW5lKCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZDc4MDYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotICAgIC8q
Ci0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgV2ViR3JhcGhp
Y3NMYXllcl9oCi0jZGVmaW5lIFdlYkdyYXBoaWNzTGF5ZXJfaAotCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkltYWdlLmgi
Ci0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxheWVyVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIK
LSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2luY2x1ZGUgIlRpbGVkQmFj
a2luZ1N0b3JlUmVtb3RlVGlsZS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
Ci0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIK
LSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9T
SVRJTkcpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBXZWJHcmFwaGljc0xheWVyOwotfQot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViR3JhcGhpY3NMYXllckNsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJM
YXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxh
eWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpID0gMDsKLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFBMQVRGT1JN
KFFUKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKSA9
IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJz
KCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0
bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQm
KSA9IDA7Ci19OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdlYkdyYXBoaWNz
TGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgotICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAot
ewotcHVibGljOgotICAgIFdlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopOwot
ICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzTGF5ZXIoKTsKLQotICAgIC8vIFJlaW1wbGVtZW50YXRp
b25zIGZyb20gR3JhcGhpY3NMYXllci5oLgotICAgIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVj
dG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwotICAgIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciop
OwotICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQpOwotICAgIHZv
aWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOwotICAgIHZv
aWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOwotICAgIGJv
b2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7Ci0gICAgdm9p
ZCByZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50Jik7Ci0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKLSAg
ICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCBzZXRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2b2lkIHNldENoaWxkcmVuVHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBzZXRQcmVzZXJ2ZXMz
RChib29sKTsKLSAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7Ci0gICAgdm9pZCBzZXRE
cmF3c0NvbnRlbnQoYm9vbCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c09wYXF1ZShib29sKTsKLSAg
ICB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKTsKLSAgICB2b2lkIHNldE9wYWNpdHko
ZmxvYXQpOwotICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwotICAgIHZvaWQgc2V0Q29udGVudHNUb0Nh
bnZhcyhQbGF0Zm9ybUxheWVyKik7Ci0gICAgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXll
ciopOwotICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOwotICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwot
ICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRWaXNpYmxlQ29u
dGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLSAgICBib29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFJvb3RMYXllcihib29sKTsKLQotICAgIFdlYktp
dDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0OwotICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBs
YXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsKLSAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7
Ci0gICAgSW1hZ2UqIGltYWdlKCkgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQotCi0gICAgYm9v
bCBmaXhlZFRvVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9ydDsgfQot
ICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wgaXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3
cG9ydCA9IGlzRml4ZWQ7IH0KLQotICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX21hc2tUYXJnZXQ7IH0KLSAgICB2b2lkIHNldE1hc2tUYXJnZXQoR3JhcGhp
Y3NMYXllciogbGF5ZXIpIHsgbV9tYXNrVGFyZ2V0ID0gbGF5ZXI7IH0KLQotICAgIHN0YXRpYyB2
b2lkIGluaXRGYWN0b3J5KCk7Ci0KLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAg
IHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKLSAgICB2aXJ0dWFs
IHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3Qg
VmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7Ci0gICAgdmlydHVhbCBib29sIHRpbGVkQmFj
a2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGls
ZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRC
YWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOwotICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5n
U3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQs
IGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0
OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6
SW50UG9pbnQmKTsKLQotICAgIHZvaWQgc2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6
OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKLSAgICB2b2lkIHN5bmNDaGlsZHJlbigpOwotICAg
IHZvaWQgc3luY0xheWVyU3RhdGUoKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9p
ZCBzeW5jRmlsdGVycygpOwotI2VuZGlmCi0gICAgdm9pZCBzeW5jQ2FudmFzKCk7Ci0gICAgdm9p
ZCBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgdm9pZCBhZGp1c3RWaXNpYmxlUmVj
dCgpOwotICAgIGJvb2wgaXNSZWFkeUZvclRpbGVCdWZmZXJTd2FwKCkgY29uc3Q7Ci0gICAgdm9p
ZCB1cGRhdGVDb250ZW50QnVmZmVycygpOwotICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7
Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwotICAgIFdl
YktpdDo6V2ViTGF5ZXJJRCBtX2lkOwotICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJ
bmZvOwotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKLSAgICBHcmFwaGljc0xheWVyKiBtX21h
c2tUYXJnZXQ7Ci0gICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBMYXllclRy
YW5zZm9ybSBtX2xheWVyVHJhbnNmb3JtOwotICAgIGJvb2wgbV9pblVwZGF0ZU1vZGUgOiAxOwot
ICAgIGJvb2wgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdDogMTsKLSAgICBib29sIG1fc2hvdWxk
U3luY0xheWVyU3RhdGU6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNDaGlsZHJlbjogMTsKLSAg
ICBib29sIG1fc2hvdWxkU3luY0ZpbHRlcnM6IDE7Ci0gICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9y
dCA6IDE7Ci0gICAgYm9vbCBtX2NhbnZhc05lZWRzRGlzcGxheSA6IDE7Ci0KLSAgICB2b2lkIG5v
dGlmeUNoYW5nZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLSAgICB2b2lkIGRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICB2b2lkIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci0jaWYg
RU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgZGlkQ2hhbmdlRmlsdGVycygpOwotI2VuZGlm
Ci0KLSAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgYm9vbCBzZWxmT3JBbmNl
c3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Ci0gICAgYm9vbCBzaG91bGRVc2VUaWxlZEJh
Y2tpbmdTdG9yZSgpOwotICAgIHZvaWQgYWRqdXN0Q29udGVudHNTY2FsZSgpOwotICAgIHZvaWQg
Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKLSAgICB2b2lkIHN5bmNMYXllclBhcmFt
ZXRlcnMoKTsKLSAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci0gICAgZmxv
YXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOwotCi0gICAgV2ViS2l0OjpXZWJHcmFwaGljc0xh
eWVyQ2xpZW50KiBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQ7Ci0gICAgT3duUHRyPFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7Ci0gICAgT3duUHRyPFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwotICAgIGZsb2F0
IG1fY29udGVudHNTY2FsZTsKLSAgICBQbGF0Zm9ybUxheWVyKiBtX2NhbnZhc1BsYXRmb3JtTGF5
ZXI7Ci19OwotCi1XZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NM
YXllciopOwotCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8vIFdlYkdyYXBoaWNzTGF5ZXJfSApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCA2
ODVjYjgzLi43MWFhNjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWEuaApAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lm
IFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5
ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBD
b3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopID0gMDsKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAppbmRleCBkZGFkY2IxLi41ZTZkNWVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmNwcApAQCAtNjg5LDEwICs2ODksMTAgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRp
c3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIH0KIAogI2lmIFVTRShVSV9TSURFX0NPTVBP
U0lUSU5HKQotdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQg
bWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKK3ZvaWQgRHJh
d2luZ0FyZWFJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewogICAgIGlmIChtX2xheWVy
VHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjZWl2ZUxheWVyVHJlZUhv
c3RNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKGNvbm5l
Y3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKaW5kZXggMzlk
MDUxNS4uMmNlYmJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuaApAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
LCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogI2VuZGlm
CiAKICAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mM2U4NzM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvci5o
IgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xh
eWVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IExheWVyVHJlZUNvb3JkaW5hdG9yKHdlYlBhZ2UpKTsKK30KKworTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6On5MYXllclRyZWVDb29yZGluYXRvcigpCit7CisgICAgLy8gUHJldmVudCBzZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KDApIC0+IGRldGFjaExheWVyKCkgZnJvbSBtb2RpZnlpbmcgdGhl
IHNldCB3aGlsZSB3ZSBpdGVyYXRlIGl0LgorICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7CisgICAgcmVnaXN0ZXJlZExheWVycy5zd2FwKG1f
cmVnaXN0ZXJlZExheWVycyk7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHJlZ2lzdGVy
ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+c2V0V2Vi
R3JhcGhpY3NMYXllckNsaWVudCgwKTsKK30KKworTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVy
VHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCisgICAgOiBMYXllclRyZWVIb3N0KHdl
YlBhZ2UpCisgICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKKyAg
ICAsIG1faXNWYWxpZCh0cnVlKQorICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCisg
ICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAg
LCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQorICAgICwgbV9zaG91bGRT
eW5jRnJhbWUoZmFsc2UpCisgICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKKyAgICAs
IG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVz
aFRpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQor
eworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgV2ViR3JhcGhpY3NMYXllciogd2ViUm9vdExheWVy
ID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICB3ZWJSb290TGF5
ZXItPnNldFJvb3RMYXllcih0cnVlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290TGF5ZXIt
PnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5hdG9yIHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAg
IG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5z
ZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5
ZXJJRCA9IHRvV2ViR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwor
ICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFdlYkdyYXBoaWNz
TGF5ZXJDbGllbnQodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3Igbm9uLWNvbXBvc2l0ZWQg
Y29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRT
aXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworCisgICAgaWYgKG1fd2ViUGFnZS0+aGFz
UGFnZU92ZXJsYXkoKSkKKyAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworCisgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQor
eworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5n
RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKKworICAgIGlmIChtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZCkgeworICAgICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYg
KCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1c2hU
aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4
dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gp
Cit7CisgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2g7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFJv
b3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIp
Cit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigp
OworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFxdWUobV93
ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZCgpKTsKKworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBo
aWVyYXJjaHkuCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmludmFsaWRhdGUoKQoreworICAgIGNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCk7CisKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX3Jvb3RMYXllciA9IG51bGxw
dHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAg
ICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9s
bFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBzZXRO
b25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShzY3JvbGxSZWN0KTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2l6ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3Jvb3RMYXllci0+
c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVyLT5z
ZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJl
YXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVl
ZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXpl
IG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3
U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9
IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgo
KSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUu
aGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWln
aHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQo
KSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSgpCit7
CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRVbmluc3RhbGxQYWdlT3Zlcmxh
eSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlO
ZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQo
bV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0IHZhbHVlKQor
eworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK2Jv
b2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit7Cisg
ICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmll
dygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1f
cm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBy
ZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVy
U3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGlm
IChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgeworICAgICAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRpZENoYW5nZVNjcm9s
bFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7CisgICAgICAgIG1f
c2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7CisgICAgfQorICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykp
OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJM
YXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwg
Y2hpbGRyZW4pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0NhbnZhcyhX
ZWJMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGlj
c1N1cmZhY2VUb2tlbikKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTeW5jQ2Fu
dmFzKGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOworfQorCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVyRmls
dGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQorewor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJz
KGlkLCBmaWx0ZXJzKSk7Cit9CisjZW5kaWYKKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
YXR0YWNoTGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgQVNTRVJUKCFtX3Jl
Z2lzdGVyZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMu
YWRkKGxheWVyKTsKKworICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2Fs
ZSk7CisgICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmRldGFjaExheWVyKFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAg
IG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXIpOworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKK30KKworc3Rh
dGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVu
ZGVyTGF5ZXIpCit7CisgICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25k
aXRpb25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBv
c2l0aW9uLgorICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5i
YWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICBp
ZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5k
ZXJlcigpLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5k
ZXJWaWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3Rh
Y2tpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXll
cigpKTsKKyAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVy
KiByZW5kZXJMYXllcikKK3sKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJl
bmRlckxheWVyKTsKKworICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAg
ICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGls
ZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVwZGF0
ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsK
K30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkKK3sKKyAg
ICBpZiAoIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3Np
dGlvbkVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3dlYlBhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPmhhc0ZpeGVkT2JqZWN0cygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUo
KS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7Cisg
ICAgQVNTRVJUKHJvb3RSZW5kZXJMYXllcik7CisgICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmly
c3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290
UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAgICBpZiAobV9pc1N1c3BlbmRl
ZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2Vi
UGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOworICAgIGZsdXNoUGVuZGlu
Z0xheWVyQ2hhbmdlcygpOworICAgIGlmICghbV9zaG91bGRTeW5jRnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRSb290Q29t
cG9zaXRpbmdMYXllcih0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgp
KSk7CisgICAgICAgIG1fc2hvdWxkU3luY1Jvb3RMYXllciA9IGZhbHNlOworICAgIH0KKworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlk
UmVuZGVyRnJhbWUoKSk7CisgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKKworICAg
IGlmICghbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIExldCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25lIGEgZmx1
c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMuCisgICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBs
Kj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsK
KyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRy
ZWVDb29yZGluYXRvcj4qKQoreworICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQor
eworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKworICAgIG1fcGFnZU92ZXJsYXlM
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
bV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBwYWdlIG92
ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlM
YXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VPdmVybGF5
TGF5ZXIgPSBudWxscHRyOworfQorCitpbnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9w
dEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAg
ICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBpbnQ2NF90IGtleSA9IDA7CisK
KyNpZiBQTEFURk9STShRVCkKKyAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIGlmICghcGl4bWFwKQorICAgICAgICByZXR1cm4g
SW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7CisjZW5k
aWYKKworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKworICAgIGlmIChpdCAhPSBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7CisgICAgICAgICsrKGl0LT5z
ZWNvbmQpOworICAgICAgICByZXR1cm4ga2V5OworICAgIH0KKworICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdl
LT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1h
cDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKKyAgICB7CisgICAgICAgIE93blB0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3ND
b250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxl
KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSwgaGFuZGxlKSk7CisgICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKKyAgICByZXR1cm4g
a2V5OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW1hZ2VCYWNraW5n
U3RvcmUoaW50NjRfdCBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybjsKKyAg
ICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGl0LT5z
ZWNvbmQtLTsKKworICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZXN0cm95RGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5KSk7Cit9CisKKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlm
eVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBo
aWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlmIChncmFwaGljc0xheWVyID09IG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0
KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7CisgICAgICAgIC8v
IE92ZXJsYXlzIGNvbnRhaW4gdHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRo
ZSBjb250ZXh0IGFzIHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgor
ICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKKyAgICAgICAgbV93
ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNob3dE
ZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVnQm9yZGVy
cygpOworfQorCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaG93UmVwYWludENvdW50ZXIo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Cit9CisK
K2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRl
VGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQorewor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklE
LCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB0YXJnZXRSZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlVwZGF0ZVRp
bGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3Zl
VGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOworfQorCitXZWJDb3JlOjpJbnRSZWN0IExh
eWVyVHJlZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNj
YWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGJvb2wgY29u
dGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1JlY3Q7CisgICAg
Ym9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUgIT0gbV9jb250ZW50c1NjYWxlOwor
CisgICAgaWYgKHRyYWplY3RvcnlWZWN0b3IgIT0gRmxvYXRQb2ludDo6emVybygpKQorICAgICAg
ICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsK
KworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2FsZURpZENoYW5n
ZSkgeworICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgICAgICBtX2Nv
bnRlbnRzU2NhbGUgPSBzY2FsZTsKKworICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAg
ICAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBp
dCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hhbmdlKQorICAgICAgICAgICAgICAgICgqaXQp
LT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICAgICAgICAgIGlmIChjb250ZW50c1JlY3RE
aWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPmFkanVzdFZpc2libGVSZWN0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBpZiAobV93
ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKQorICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlz
aWJsZUNvbnRlbnRSZWN0KHJlY3QpOworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpCisg
ICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBtX3dhaXRp
bmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3YXBCdWZmZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFtX2lzU3VzcGVuZGVkICYmICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgSGFz
aFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0
ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIEFT
U0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOworICAgIG1f
dXBkYXRlQXRsYXNlcy5jbGVhcigpOworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFy
ZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkK
K3sKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldOworICAgICAg
ICBpZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxs
IHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25BdmFpbGFibGVC
dWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29u
dGV4dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRp
bWVuc2lvbiA9IDIwMDA7CisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRhdGVBdGxhcyhT
Y3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpOworICAgIHJldHVybiBtX3VwZGF0ZUF0bGFz
ZXMubGFzdCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9m
ZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iYzQ0OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5h
dG9yLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JfaAorI2RlZmluZSBMYXllclRyZWVDb29yZGluYXRvcl9oCisKKyNp
bmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNpbmNsdWRlICJX
ZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIExheWVyVHJlZUNvb3JkaW5h
dG9yIDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkdyYXBoaWNzTGF5ZXJDbGll
bnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJlZUNvb3JkaW5hdG9y
PiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZUNvb3JkaW5hdG9yKCk7
CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKwor
ICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsg
cmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hl
ZHVsZWRMYXllckZsdXNoKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRp
bmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9s
bE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1YWwgdm9p
ZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxs
UGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXko
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHko
ZmxvYXQpOworICAgIHZpcnR1YWwgYm9vbCBwYWdlT3ZlcmxheVNob3VsZEFwcGx5RmFkZVdoZW5Q
YWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGF1
c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lk
IHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVy
Rmx1c2goKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgp
IHsgfQorICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6
OkltYWdlKik7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2
NF90KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdT
dG9yZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJ
RCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxk
cmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpOworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52
YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopOworICAg
IHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKKworICAgIHZpcnR1YWwgUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6
SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0
IExheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICAvLyBHcmFw
aGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgY29uc3Q7CisKKyAgICAvLyBMYXllclRyZWVDb29yZGluYXRvcgor
ICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgZGVzdHJveVBhZ2VP
dmVybGF5TGF5ZXIoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAg
IHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKCk7CisgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOworCisgICAgT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgLy8gVGhlIGxheWVy
IHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisKKyAg
ICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBw
YWdlIG92ZXJsYXkuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92
ZXJsYXlMYXllcjsKKworICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+IG1f
cmVnaXN0ZXJlZExheWVyczsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKKyAgICBWZWN0b3I8VXBkYXRlQXRsYXM+IG1fdXBkYXRl
QXRsYXNlczsKKworICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Cisg
ICAgYm9vbCBtX2lzVmFsaWQ7CisKKyAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKKyAg
ICBib29sIG1faXNTdXNwZW5kZWQ7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250
ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIGJvb2wgbV9zaG91bGRT
ZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CisKKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJU
cmVlQ29udGV4dDsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAgIGJvb2wgbV9zaG91
bGRTeW5jUm9vdExheWVyOworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7CisgICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJU
cmVlQ29vcmRpbmF0b3I+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIGJvb2wgbV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXllclRyZWVDb29yZGlu
YXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYWZmNmY5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5tZXNz
YWdlcy5pbgpAQCAtMCwwICsxLDI3IEBACisjCisjICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyMKKyMgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
IyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIwor
CisKKyNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKK21lc3NhZ2VzIC0+IExheWVyVHJlZUNv
b3JkaW5hdG9yIHsKKyAgICBTZXRWaXNpYmxlQ29udGVudHNSZWN0KFdlYkNvcmU6OkludFJlY3Qg
dmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgdHJh
amVjdG9yeVZlY3RvcnkpCisgICAgUmVuZGVyTmV4dEZyYW1lKCkKKyAgICBQdXJnZUJhY2tpbmdT
dG9yZXMoKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3Jh
cGhpY3NMYXllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxNDkx
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcApAQCAtMCwwICsxLDc0NiBA
QAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIldlYkdyYXBo
aWNzTGF5ZXIuaCIKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkZsb2F0
UXVhZC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2lu
Y2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUg
IlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFw
aGljc0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCit7CisgICAgc3RhdGljIEhhc2hNYXA8V2ViTGF5
ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKKyAgICByZXR1cm4gZ2xvYmFsTWFw
OworfQorCitXZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2Vi
S2l0OjpXZWJMYXllcklEIGlkKQoreworICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhp
Y3NMYXllcio+JiB0YWJsZSA9IGxheWVyQnlJRE1hcCgpOworICAgIEhhc2hNYXA8V2ViTGF5ZXJJ
RCwgV2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZpbmQoaWQpOworICAg
IGlmIChpdCA9PSB0YWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGl0
LT5zZWNvbmQ7Cit9CisKK3N0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xh
eWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5
ZXIpLT5pZCgpIDogMDsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VMYXll
clN0YXRlKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKKyAgICBpZiAo
Y2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4oKQoreworICAgIG1f
c2hvdWxkU3luY0NoaWxkcmVuID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNs
aWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRlcnMoKQoreworICAg
IG1fc2hvdWxkU3luY0ZpbHRlcnMgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAg
Y2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKyNlbmRpZgorCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKK3sKKyAgICBpZiAo
IXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxk
VXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hp
bGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKGNoaWxkcmVu
KClbaV0pLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworICAgIGlmIChyZXBsaWNhTGF5
ZXIoKSkKKyAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKS0+c2V0U2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRD
aGFuZ2VHZW9tZXRyeSgpCit7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHNldFNo
b3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Cit9CisKK1dlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBo
aWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorICAgIDogR3JhcGhpY3NMYXll
cihjbGllbnQpCisgICAgLCBtX21hc2tUYXJnZXQoMCkKKyAgICAsIG1faW5VcGRhdGVNb2RlKGZh
bHNlKQorICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQorICAgICwgbV9zaG91
bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQorICAgICwgbV9zaG91bGRTeW5jQ2hpbGRyZW4odHJ1ZSkK
KyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQorICAgICwgbV9jYW52YXNOZWVkc0Rpc3Bs
YXkoZmFsc2UpCisgICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkKKyAgICAsIG1fY29u
dGVudHNTY2FsZSgxKQorICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCit7CisgICAgc3Rh
dGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOworICAgIG1faWQgPSBuZXh0TGF5ZXJJRCsr
OworICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsKK30KKworV2ViR3JhcGhpY3NM
YXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQoreworICAgIGxheWVyQnlJRE1hcCgpLnJlbW92ZShp
ZCgpKTsKKworICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKKyAgICAgICAgcHVy
Z2VCYWNraW5nU3RvcmVzKCk7CisgICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+ZGV0
YWNoTGF5ZXIodGhpcyk7CisgICAgfQorICAgIHdpbGxCZURlc3Ryb3llZCgpOworfQorCit2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgR3JhcGhpY3NMYXll
cjo6d2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7CisgICAgYm9v
bCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICBpZiAoIW9r
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJl
bi5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBjaGlsZCA9IHRvV2Vi
R3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7CisgICAgICAgIGNoaWxkLT5zZXRXZWJHcmFwaGlj
c0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgICAgIGNoaWxkLT5k
aWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgfQorICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIp
OworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGll
bnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5
ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciog
bGF5ZXIsIGludCBpbmRleCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgo
bGF5ZXIsIGluZGV4KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFw
aGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9XZWJHcmFw
aGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIGRpZENoYW5nZUNo
aWxkcmVuKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFw
aGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGlj
c0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dlYkdyYXBoaWNz
TGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciog
c2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJs
aW5nKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVy
Q2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVy
KGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7
Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIq
IG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBib29sIG9rID0gR3Jh
cGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7CisgICAgaWYgKCFv
aykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAg
dG9XZWJHcmFwaGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAg
IHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQo
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobmV3Q2hp
bGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgaWYgKFdlYkdyYXBo
aWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAg
ICAgICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXll
cjo6cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHAp
Cit7CisgICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50
M0QmIHApCit7CisgICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7CisgICAgZGlkQ2hhbmdlR2Vv
bWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7CisgICAgc2V0TmVlZHNE
aXNwbGF5KCk7CisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICBtYXNrTGF5ZXIoKS0+c2V0
U2l6ZShzaXplKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sK
KyAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKGNoaWxkcmVuVHJhbnNmb3JtKCkgPT0gdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zv
cm0odCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCit7CisgICAgaWYgKHByZXNlcnZlczNEKCkgPT0g
YikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0Qo
Yik7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKK3sKKyAgICBpZiAobWFza3NUb0JvdW5kcygpID09
IGIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRz
KGIpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0g
YikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChi
KTsKKworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRzT3BhcXVl
KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCisg
ICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghYik7CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShi
b29sIGIpCit7CisgICAgaWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShiKTsKKyAg
ICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
T3BhY2l0eShmbG9hdCBvcGFjaXR5KQoreworICAgIGlmICh0aGlzLT5vcGFjaXR5KCkgPT0gb3Bh
Y2l0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eShv
cGFjaXR5KTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKGNv
bnRlbnRzUmVjdCgpID09IHIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzUmVjdChyKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3Zv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQoreworICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlOworICAgIHNldENvbnRlbnRzVG9JbWFnZSgwKTsK
KyAgICBzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOworICAgIG1fY2FudmFzTmVlZHNE
aXNwbGF5ID0gdHJ1ZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
Q2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9jYW52YXNQbGF0
Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKKyAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IHRy
dWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVp
cmVkKHRoaXMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorYm9vbCBXZWJHcmFwaGlj
c0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG5ld0ZpbHRlcnMpCit7
CisgICAgaWYgKGZpbHRlcnMoKSA9PSBuZXdGaWx0ZXJzKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkaWRDaGFuZ2VGaWx0ZXJzKCk7CisgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldEZp
bHRlcnMobmV3RmlsdGVycyk7Cit9CisjZW5kaWYKKworCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKGltYWdlID09IG1f
aW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQ2NF90IG5ld0lEID0gMDsKKyAgICBpZiAo
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7CisgICAgICAgIC8vIFdlIGFkb3B0IGZpcnN0LCBp
biBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBhdm9pZCBkZXN0cm95
aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KKyAgICAgICAgbmV3SUQgPSBtX3dlYkdyYXBo
aWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoaW1hZ2UpOworICAgICAgICBt
X3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCAmJiBuZXdJRCA9
PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCBpcyBu
b3Qgc2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBzdG9yZSBJRC4KKyAgICAgICAg
QVNTRVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOworICAgIH0KKworICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQgPSBuZXdJRDsKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IG1h
c2tMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNr
TGF5ZXIobGF5ZXIpOworCisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
bGF5ZXItPnNldFNpemUoc2l6ZSgpKTsKKyAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJHcmFwaGlj
c0xheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKKyAgICB3ZWJHcmFwaGljc0xheWVy
LT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Cisg
ICAgd2ViR3JhcGhpY3NMYXllci0+c2V0TWFza1RhcmdldCh0aGlzKTsKKyAgICB3ZWJHcmFwaGlj
c0xheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworCit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IHJlcGxpY2FMYXllcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGF5ZXIpCisgICAgICAgIHRvV2ViR3JhcGhpY3NM
YXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVy
Q2xpZW50KTsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVy
KTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpKSk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQor
ICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0KSk7Cisg
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCitXZWJMYXllcklEIFdlYkdyYXBoaWNzTGF5
ZXI6OmlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsKK30KKwordm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobWFza0xh
eWVyKCkpKQorICAgICAgICBtYXNrLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKworICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiByZXBsaWNhID0gdG9XZWJHcmFwaGlj
c0xheWVyKHJlcGxpY2FMYXllcigpKSkKKyAgICAgICAgcmVwbGljYS0+c3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQt
PnN5bmNGaXhlZExheWVycygpOworCisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCisgICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3Qp
OworfQorCitXZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkdyYXBoaWNzTGF5ZXIqPihs
YXllcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkKK3sKKyAg
ICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91
bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gY2hpbGRJRHM7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAg
ICAgICBjaGlsZElEcy5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKKworICAg
IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJ
RHMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzeW5jRmlsdGVycygpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQorICAgICAg
ICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOworICAgIG1fd2ViR3Jh
cGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkpOworfQor
I2VuZGlmCisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQoreworICAg
IGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hv
dWxkU3luY0xheWVyU3RhdGUgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5maXhlZFRvVmlld3Bv
cnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKKworICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBvaW50ID0g
YW5jaG9yUG9pbnQoKTsKKyAgICBtX2xheWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBiYWNrZmFj
ZVZpc2liaWxpdHkoKTsKKyAgICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxk
cmVuVHJhbnNmb3JtKCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBjb250ZW50
c09wYXF1ZSgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgp
OworICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOworICAgIG1f
bGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xheWVyKCkpOworICAgIG1fbGF5ZXJJ
bmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CisgICAgbV9sYXllckluZm8ub3Bh
Y2l0eSA9IG9wYWNpdHkoKTsKKyAgICBtX2xheWVySW5mby5wYXJlbnQgPSB0b1dlYkxheWVySUQo
cGFyZW50KCkpOworICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7CisgICAgbV9sYXll
ckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOworICAgIG1fbGF5ZXJJbmZvLnJlcGxp
Y2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOworICAgIG1fbGF5ZXJJbmZvLnNpemUg
PSBzaXplKCk7CisgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CisgICAg
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5m
byk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcygpCit7CisgICAgaWYg
KCFtX2NhbnZhc05lZWRzRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQorICAgIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuID0gbV9jYW52YXNQbGF0
Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKKyAgICBtX3dlYkdyYXBoaWNzTGF5
ZXJDbGllbnQtPnN5bmNDYW52YXMobV9pZCwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgp
LmhlaWdodCgpKSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworI2VuZGlmCisgICAgbV9jYW52YXNO
ZWVkc0Rpc3BsYXkgPSBmYWxzZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjplbnN1cmVJ
bWFnZUJhY2tpbmdTdG9yZSgpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgICAgICBtX2xh
eWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5h
ZG9wdEltYWdlQmFja2luZ1N0b3JlKG1faW1hZ2UuZ2V0KCkpOworfQorCit2b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAg
Ly8gVGhlIHJlbW90ZSBpbWFnZSBtaWdodCBoYXZlIGJlZW4gcmVsZWFzZWQgYnkgcHVyZ2VCYWNr
aW5nU3RvcmVzLgorICAgIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7CisgICAgY29tcHV0ZVRy
YW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKKyAgICBzeW5jQ2hpbGRyZW4oKTsKKyAgICBzeW5jTGF5
ZXJTdGF0ZSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBzeW5jRmlsdGVycygpOwor
I2VuZGlmCisgICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICBzeW5jQ2FudmFzKCk7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkK
K3sKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3Qp
Cit7CisgICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7CisgICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rv
cikKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5n
U3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQodHJhamVjdG9yeVZlY3Rvcik7Cit9CisKK3Zv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKK3sKKyAg
ICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKyAgICBhZGp1c3RDb250ZW50c1NjYWxlKCk7Cit9
CisKK2Zsb2F0IFdlYkdyYXBoaWNzTGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKQorewor
ICAgIHJldHVybiBzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpID8gbV9jb250ZW50c1NjYWxl
IDogMTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGp1c3RDb250ZW50c1NjYWxlKCkK
K3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fbWFpbkJhY2tpbmdTdG9yZSB8fCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUo
KSA9PSBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGluZyB0aGUg
Y29udGVudCwKKyAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2aW91cyBvbmUg
YXMgdGhhdCBtaWdodCByZXN1bHQgaW4KKyAgICAvLyBicmllZmx5IHNlZWluZyBmbGlja2VyaW5n
IGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQgYmVmb3JlCisgICAgLy8gc29tZXRoaW5n
IHJlcGxhY2VzIHRoZW0uCisgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFpbkJhY2tp
bmdTdG9yZS5yZWxlYXNlKCk7CisKKyAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUgcHJldmlv
dXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMuCisgICAgbV9wcmV2aW91c0Jh
Y2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCk7CisKKyAgICBjcmVhdGVCYWNr
aW5nU3RvcmUoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3Rv
cmUoKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tp
bmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUo
dGhpcykpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWNvbnRl
bnRzT3BhcXVlKCkpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZShl
ZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRp
bGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3Rv
cjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQoreworfQorCitib29sIFdlYkdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIGlmICghbV9p
blVwZGF0ZU1vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV93ZWJHcmFw
aGljc0xheWVyQ2xpZW50LT5sYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsKK30KKworSW50
UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCit7
CisgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQo
KSk7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2hvdWxkVXNlVGlsZWRCYWNraW5nU3Rv
cmUoKQoreworICAgIHJldHVybiAhc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3Jt
cygpOworfQorCitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlz
aWJsZVJlY3QoKQoreworICAgIGlmICghc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKSkKKyAg
ICAgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCk7CisKKyAgICAvLyBO
b24taW52ZXJ0aWJsZSBsYXllcnMgYXJlIG5vdCB2aXNpYmxlLgorICAgIGlmICghbV9sYXllclRy
YW5zZm9ybS5jb21iaW5lZCgpLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gSW50UmVj
dCgpOworCisgICAgLy8gUmV0dXJuIGEgcHJvamVjdGlvbiBvZiB0aGUgdmlzaWJsZSByZWN0IChz
dXJmYWNlIGNvb3JkaW5hdGVzKSBvbnRvIHRoZSBsYXllcidzIHBsYW5lIChsYXllciBjb29yZGlu
YXRlcykuCisgICAgLy8gVGhlIHJlc3VsdGluZyBxdWFkIG1pZ2h0IGJlIHNxdWV3ZWQgYW5kIHRo
ZSB2aXNpYmxlIHJlY3QgaXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGlzIHF1YWQsCisgICAgLy8g
c28gaXQgbWlnaHQgc3ByZWFkIGZ1cnRoZXIgdGhhbiB0aGUgcmVhbCB2aXNpYmxlIGFyZWEgKGFu
ZCB0aGVuIGV2ZW4gbW9yZSBhbXBsaWZpZWQgYnkgdGhlIGNvdmVyIHJlY3QgbXVsdGlwbGllciku
CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgp
LmludmVyc2UoKS5jbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKEZsb2F0UXVhZChGbG9hdFJl
Y3QobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT52aXNpYmxlQ29udGVudHNSZWN0KCkpKSkpOwor
fQorCitDb2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRD
b2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hp
dGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdl
YkNvcmU6OkludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJuIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyAwIDog
U2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhLCBoYW5kbGUsIG9mZnNldCk7Cit9CisKK3Zv
aWQgV2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAg
ICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRh
dGVJbmZvLCB0YXJnZXRSZWN0KTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVU
aWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+
dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3QpOworfQorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAgICBtX3dl
YkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCit7CisgICAgaWYgKCFk
cmF3c0NvbnRlbnQoKSkgeworICAgICAgICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAg
ICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9pblVwZGF0ZU1vZGUgPSB0cnVlOworICAgIC8vIFRoaXMgaXMgdGhlIG9u
bHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0aGUgbWFpbiB0aWxlZCBiYWNraW5nIHN0b3JlLCBvbmNl
IHdlCisgICAgLy8gaGF2ZSBhIHJlbW90ZSBjbGllbnQgYW5kIHdlIGFyZSByZWFkeSB0byBzZW5k
IG91ciBkYXRhIHRvIHRoZSBVSSBwcm9jZXNzLgorICAgIGlmICghbV9tYWluQmFja2luZ1N0b3Jl
KQorICAgICAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUt
PnVwZGF0ZVRpbGVCdWZmZXJzKCk7CisgICAgbV9pblVwZGF0ZU1vZGUgPSBmYWxzZTsKKworICAg
IC8vIFRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGlzIGtlcHQgYXJvdW5kIHRvIGF2b2lkIGZs
aWNrZXJpbmcgYmV0d2VlbgorICAgIC8vIHJlbW92aW5nIHRoZSBleGlzdGluZyB0aWxlcyBhbmQg
cGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBUaGUgZmlyc3QgdGltZQorICAgIC8vIHRoZSB2aXNpYmxl
UmVjdCBpcyBmdWxsIHBhaW50ZWQgd2UgcmVtb3ZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3Jl
LgorICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUtPnZpc2libGVBcmVhSXNDb3ZlcmVkKCkpCisg
ICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKK30KKwordm9pZCBXZWJHcmFw
aGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS5jbGVhcigpOworICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKKworICAgIGlm
IChtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKSB7CisgICAgICAgIG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQpOworICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlE
ID0gMDsKKyAgICB9CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdl
Q2hpbGRyZW4oKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRXZWJHcmFwaGljc0xh
eWVyQ2xpZW50KFdlYktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAg
IGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQgPT0gY2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvV2ViR3JhcGhpY3NMYXll
cihyZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgIHJlcGxpY2EtPnNldFdlYkdyYXBoaWNzTGF5ZXJD
bGllbnQoY2xpZW50KTsKKyAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogbWFzayA9IHRvV2ViR3Jh
cGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCisgICAgICAgIG1hc2stPnNldFdlYkdyYXBoaWNzTGF5
ZXJDbGllbnQoY2xpZW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdy
YXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7CisgICAgICAgIGxheWVyLT5zZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7CisgICAgfQorCisgICAgLy8gV2UgaGF2ZSB0byBy
ZWxlYXNlIHJlc291cmNlcyBvbiB0aGUgVUkgcHJvY2VzcyBoZXJlIGlmIHRoZSByZW1vdGUgY2xp
ZW50IGhhcyBjaGFuZ2VkIG9yIGlzIHJlbW92ZWQuCisgICAgaWYgKG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudCkgeworICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICAgICAgbV93ZWJH
cmFwaGljc0xheWVyQ2xpZW50LT5kZXRhY2hMYXllcih0aGlzKTsKKyAgICB9CisgICAgbV93ZWJH
cmFwaGljc0xheWVyQ2xpZW50ID0gY2xpZW50OworICAgIGlmIChjbGllbnQpCisgICAgICAgIGNs
aWVudC0+YXR0YWNoTGF5ZXIodGhpcyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRq
dXN0VmlzaWJsZVJlY3QoKQoreworICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAg
IG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOworfQorCit2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCkKK3sKKyAg
ICBpZiAoIW1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpCisgICAgICAgIHJldHVybjsKKyAgICBt
X3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFsc2U7CisgICAgbV9sYXllclRyYW5zZm9ybS5z
ZXRMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0oKSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRQ
b3NpdGlvbihwb3NpdGlvbigpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldEFuY2hvclBvaW50
KGFuY2hvclBvaW50KCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0U2l6ZShzaXplKCkpOwor
ICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0RmxhdHRlbmluZyghcHJlc2VydmVzM0QoKSk7CisgICAg
bV9sYXllclRyYW5zZm9ybS5zZXRDaGlsZHJlblRyYW5zZm9ybShjaGlsZHJlblRyYW5zZm9ybSgp
KTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVUcmFuc2Zvcm1zKHBhcmVudCgpID8gdG9X
ZWJHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZEZvckNo
aWxkcmVuKCkgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKworICAgIC8vIFRoZSBjb21iaW5l
ZCB0cmFuc2Zvcm0gd2lsbCBiZSB1c2VkIGluIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3Qu
CisgICAgYWRqdXN0VmlzaWJsZVJlY3QoKTsKKyAgICBhZGp1c3RDb250ZW50c1NjYWxlKCk7Cit9
CisKK3N0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZVdlYkdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgV2ViR3JhcGhpY3NMYXllcihjbGllbnQpKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
Ojppbml0RmFjdG9yeSgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0R3JhcGhpY3NMYXllckZh
Y3RvcnkoY3JlYXRlV2ViR3JhcGhpY3NMYXllcik7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXll
cjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpCit7CisgICAgaWYgKCFt
X2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdy
YXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNjQ5YzlhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmgK
QEAgLTAsMCArMSwyMDcgQEAKKyAgICAvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworCisjaWZuZGVmIFdlYkdyYXBoaWNzTGF5ZXJfaAorI2RlZmluZSBXZWJHcmFwaGljc0xh
eWVyX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJMYXllclRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1
ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGll
bnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNs
dWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
KworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgV2ViR3JhcGhpY3NMYXllcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJ
RCkgPSAwOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxs
b3dlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdT
dG9yZShXZWJDb3JlOjpJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdl
QmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3Rh
dGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4m
KSA9IDA7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5
ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSA9
IDA7CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZh
cyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJf
dCBncmFwaGljc1N1cmZhY2VUb2tlbikgPSAwOworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGF0
dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6Okhh
bmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOworfTsKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXZWJHcmFwaGljc0xheWVyIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgVGlsZWRCYWNraW5nU3RvcmVD
bGllbnQKKyAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViS2l0OjpUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGVDbGllbnQgeworcHVibGljOgorICAgIFdlYkdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzTGF5ZXIoKTsK
KworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgorICAgIGJv
b2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOworICAgIHZvaWQg
YWRkQ2hpbGQoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBo
aWNzTGF5ZXIqLCBpbnQpOworICAgIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NMYXllciopOworICAgIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBH
cmFwaGljc0xheWVyKik7CisgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdm9pZCBz
ZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzZXRBbmNob3JQb2ludChj
b25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7
CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAg
ICB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKKyAgICB2b2lkIHNldE1hc2tzVG9Cb3Vu
ZHMoYm9vbCk7CisgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7CisgICAgdm9pZCBzZXRD
b250ZW50c09wYXF1ZShib29sKTsKKyAgICB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29s
KTsKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0
KGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwor
ICAgIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CisgICAgdm9pZCBz
ZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5
ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBzZXRD
b250ZW50c05lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7
CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZs
b2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3Qg
RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIHNldEZpbHRl
cnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFJvb3RM
YXllcihib29sKTsKKworICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0OworICAgIHN0
YXRpYyBXZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsKKyAg
ICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CisgICAgSW1hZ2UqIGltYWdlKCkgeyByZXR1cm4gbV9p
bWFnZS5nZXQoKTsgfQorCisgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQoKSBjb25zdCB7IHJldHVy
biBtX2ZpeGVkVG9WaWV3cG9ydDsgfQorICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wg
aXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7IH0KKworICAgIEdyYXBoaWNz
TGF5ZXIqIG1hc2tUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX21hc2tUYXJnZXQ7IH0KKyAgICB2
b2lkIHNldE1hc2tUYXJnZXQoR3JhcGhpY3NMYXllciogbGF5ZXIpIHsgbV9tYXNrVGFyZ2V0ID0g
bGF5ZXI7IH0KKworICAgIHN0YXRpYyB2b2lkIGluaXRGYWN0b3J5KCk7CisKKyAgICAvLyBUaWxl
ZEJhY2tpbmdTdG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBh
aW50QmVnaW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFj
a2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7Cisg
ICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKKyAg
ICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIHZp
cnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKwor
ICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUo
aW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsK
KyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNv
bnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYktpdDo6U2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKworICAgIHZvaWQgc2V0V2ViR3Jh
cGhpY3NMYXllckNsaWVudChXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2
b2lkIHN5bmNDaGlsZHJlbigpOworICAgIHZvaWQgc3luY0xheWVyU3RhdGUoKTsKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzeW5jRmlsdGVycygpOworI2VuZGlmCisgICAgdm9p
ZCBzeW5jQ2FudmFzKCk7CisgICAgdm9pZCBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOworCisg
ICAgdm9pZCBhZGp1c3RWaXNpYmxlUmVjdCgpOworICAgIGJvb2wgaXNSZWFkeUZvclRpbGVCdWZm
ZXJTd2FwKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVDb250ZW50QnVmZmVycygpOworICAgIHZv
aWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHdp
bGxCZURlc3Ryb3llZCgpOworICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBtX2lkOworICAgIFdlYktp
dDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsK
KyAgICBHcmFwaGljc0xheWVyKiBtX21hc2tUYXJnZXQ7CisgICAgRmxvYXRSZWN0IG1fbmVlZHNE
aXNwbGF5UmVjdDsKKyAgICBMYXllclRyYW5zZm9ybSBtX2xheWVyVHJhbnNmb3JtOworICAgIGJv
b2wgbV9pblVwZGF0ZU1vZGUgOiAxOworICAgIGJvb2wgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVj
dDogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0xheWVyU3RhdGU6IDE7CisgICAgYm9vbCBtX3No
b3VsZFN5bmNDaGlsZHJlbjogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZpbHRlcnM6IDE7Cisg
ICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydCA6IDE7CisgICAgYm9vbCBtX2NhbnZhc05lZWRzRGlz
cGxheSA6IDE7CisKKyAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOworICAgIHZvaWQgZGlkQ2hhbmdl
R2VvbWV0cnkoKTsKKyAgICB2b2lkIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICB2b2lkIGRp
ZENoYW5nZUNoaWxkcmVuKCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgZGlk
Q2hhbmdlRmlsdGVycygpOworI2VuZGlmCisKKyAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgp
OworCisgICAgYm9vbCBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Cisg
ICAgYm9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpOworICAgIHZvaWQgYWRqdXN0Q29u
dGVudHNTY2FsZSgpOworICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsK
KyAgICB2b2lkIHN5bmNMYXllclBhcmFtZXRlcnMoKTsKKyAgICB2b2lkIHNldFNob3VsZFVwZGF0
ZVZpc2libGVSZWN0KCk7CisgICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOworCisg
ICAgV2ViS2l0OjpXZWJHcmFwaGljc0xheWVyQ2xpZW50KiBtX3dlYkdyYXBoaWNzTGF5ZXJDbGll
bnQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5n
U3RvcmU7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3Vz
QmFja2luZ1N0b3JlOworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyAgICBQbGF0Zm9ybUxh
eWVyKiBtX2NhbnZhc1BsYXRmb3JtTGF5ZXI7Cit9OworCitXZWJHcmFwaGljc0xheWVyKiB0b1dl
YkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOworCit9CisjZW5kaWYKKworI2VuZGlmIC8v
IFdlYkdyYXBoaWNzTGF5ZXJfSApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDVhOWI4YjQuLmJmMDExZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAK
QEAgLTM1LDcgKzM1LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAi
cXQvTGF5ZXJUcmVlSG9zdFF0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCIK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCkBA
IC01Myw3ICs1Myw3IEBAIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdD4gTGF5ZXJUcmVlSG9zdDo6
Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCiAjZWxpZiBQTEFURk9STShXSU4pICYmIEhBVkUoV0tR
Q0EpCiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQVdpbjo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgcmV0dXJuIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKHdlYlBh
Z2UpOworICAgIHJldHVybiBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlKHdlYlBhZ2UpOwog
I2VsaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAgcmV0dXJu
IExheWVyVHJlZUhvc3RHdGs6OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAppbmRleCBlNTAzYzIz
Li5iNDljYzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbios
IENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
KikgPSAwOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmlu
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTIwZGUyLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmlu
CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIwotIyAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0jCi0jICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSMgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSMgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0j
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0jICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSMKLQotCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi1tZXNzYWdlcyAtPiBMYXll
clRyZWVIb3N0IHsKLSAgICBTZXRWaXNpYmxlQ29udGVudHNSZWN0KFdlYkNvcmU6OkludFJlY3Qg
dmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgdHJh
amVjdG9yeVZlY3RvcnkpCi0gICAgUmVuZGVyTmV4dEZyYW1lKCkKLSAgICBQdXJnZUJhY2tpbmdT
dG9yZXMoKQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKaW5kZXggOTUzZTliMDQ2Li5iNGUxOWJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0yNjA1LDkgKzI2MDUsOSBAQCB2
b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIENvcmVJUEM6Ok1lc3NhZwogICAgIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1lc3NhZ2VJRC5p
czxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0PigpKSB7CisgICAgaWYgKG1lc3Nh
Z2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvcj4oKSkgewog
ICAgICAgICBpZiAobV9kcmF3aW5nQXJlYSkKLSAgICAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRp
ZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29v
cmRpbmF0b3JNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWZhOTFhYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDU3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RRdC5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0Fy
ZWFJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJU
cmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRl
ICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5o
IgotI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXll
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRl
clZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFzc1JlZlB0cjxMYXllclRyZWVI
b3N0UXQ+IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOwotfQotCi1MYXll
clRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQoKQotewotICAgIC8vIFByZXZlbnQgc2V0V2Vi
R3JhcGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20gbW9kaWZ5aW5nIHRo
ZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOwotICAgIHJlZ2lzdGVyZWRMYXllcnMuc3dhcCht
X3JlZ2lzdGVyZWRMYXllcnMpOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChI
YXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSByZWdpc3Rl
cmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnNldFdl
YkdyYXBoaWNzTGF5ZXJDbGllbnQoMCk7Ci19Ci0KLUxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVl
SG9zdFF0KFdlYlBhZ2UqIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0g
ICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAsIG1faXNW
YWxpZCh0cnVlKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCi0gICAgLCBtX2lz
U3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBtX3Nob3Vs
ZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUo
ZmFsc2UpCi0gICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKLSAgICAsIG1fbGF5ZXJG
bHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVkKQot
ICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKLXsKLSAgICAvLyBDcmVh
dGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KHRoaXMpOwotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYlJvb3RMYXllciA9IHRvV2ViR3JhcGhp
Y3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAgd2ViUm9vdExheWVyLT5zZXRSb290TGF5
ZXIodHJ1ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJMYXll
clRyZWVIb3N0UXQgcm9vdCBsYXllciIpOwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXItPnNldERy
YXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5z
aXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9XZWJHcmFwaGlj
c0xheWVyKHdlYlJvb3RMYXllciktPmlkKCk7Ci0KLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0gICAgdG9XZWJHcmFwaGljc0xh
eWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCh0aGlzKTsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1l
KCJMYXllclRyZWVIb3N0UXQgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOwotI2VuZGlmCi0gICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsK
LQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIu
Z2V0KCkpOwotCi0gICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAgICAgICAg
Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
Ym9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7
Ci0KLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2NoZWR1bGVM
YXllckZsdXNoKCkKLXsKLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBtX2xheWVy
Rmx1c2hUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRTaG91bGRO
b3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoKQotewotICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0g
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RR
dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhp
Y3NMYXllcikKLXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENo
aWxkcmVuKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09w
YXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJh
bnNwYXJlbnRCYWNrZ3JvdW5kKCkpOwotCi0gICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXll
ciB0cmVlIGhpZXJhcmNoeS4KLSAgICBpZiAoZ3JhcGhpY3NMYXllcikKLSAgICAgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVIb3N0UXQ6OmludmFsaWRhdGUoKQotewotICAgIGNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCk7Ci0KLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXllciA9IG51
bGxwdHI7Ci0gICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQotewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3QpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotCi0gICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY3JvbGxO
b25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIHNldE5vbkNvbXBv
c2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOwotfQotCi12b2lkIExheWVyVHJl
ZUhvc3RRdDo6Zm9yY2VSZXBhaW50KCkKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0K
LQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXpl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsK
LQotICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29t
cG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAotICAgIC8vIGZvciB0
aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXRTaXplKG5ld1NpemUpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9s
ZFNpemUud2lkdGgoKSkgewotICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNf
Y2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9h
dFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRo
KCksIGhlaWdodCkpOwotICAgIH0KLQotICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6
ZS5oZWlnaHQoKSkKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lk
dGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKLQotICAgIGlmICht
X3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShu
ZXdTaXplKTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJl
ZUhvc3RRdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKLXsKLSAgICBjcmVhdGVQYWdlT3Zlcmxh
eUxheWVyKCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpCi17Ci0gICAgZGVzdHJveVBhZ2VPdmVy
bGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU9w
YWNpdHkoZmxvYXQgdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0g
ICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRPcGFjaXR5KHZhbHVlKTsKLSAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0UXQ6OmZsdXNoUGVuZGluZ0xheWVy
Q2hhbmdlcygpCi17Ci0gICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5t
YWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1l
cygpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAg
ICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKLQotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXll
ck9ubHkoKTsKLSAgICByZXR1cm4gZGlkU3luYzsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6
OnN5bmNMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykK
LXsKLSAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKLSAgICAgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAg
IG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlk
LCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhv
c3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGlsZHJlbikpOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RRdDo6c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBJ
bnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKLXsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVIb3N0UHJveHk6OlN5bmNDYW52YXMoaWQsIGNhbnZhc1NpemUsIGdyYXBoaWNz
U3VyZmFjZVRva2VuKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIExheWVy
VHJlZUhvc3RRdDo6c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9z
aXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVy
VHJlZUhvc3RRdDo6YXR0YWNoTGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAg
QVNTRVJUKCFtX3JlZ2lzdGVyZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKLSAgICBtX3JlZ2lz
dGVyZWRMYXllcnMuYWRkKGxheWVyKTsKLQotICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1f
Y29udGVudHNTY2FsZSk7Ci0gICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlSG9zdFF0OjpkZXRhY2hMYXllcihXZWJHcmFwaGljc0xheWVyKiBsYXllcikK
LXsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyKTsKLSAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKLX0KLQotc3Rh
dGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVu
ZGVyTGF5ZXIpCi17Ci0gICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25k
aXRpb25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBv
c2l0aW9uLgotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5i
YWNraW5nKCk7Ci0gICAgaWYgKCFiYWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBp
ZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5k
ZXJlcigpLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5k
ZXJWaWV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3Rh
Y2tpbmdDb250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXll
cigpKTsKLSAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVy
KiByZW5kZXJMYXllcikKLXsKLSAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJl
bmRlckxheWVyKTsKLQotICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAgICAg
ICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGls
ZCgpKTsKLSAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHVwZGF0
ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnN5bmNGaXhlZExheWVycygpCi17Ci0gICAgaWYg
KCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25F
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV93ZWJQYWdlLT5tYWluRnJh
bWUoKS0+dmlldygpLT5oYXNGaXhlZE9iamVjdHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXllciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmNv
bnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCktPnJvb3RSZW5kZXJMYXllcigpOwotICAgIEFT
U0VSVChyb290UmVuZGVyTGF5ZXIpOwotICAgIGlmIChyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hp
bGQoKSkKLSAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9vdFJlbmRl
ckxheWVyLT5maXJzdENoaWxkKCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9y
bVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2Fp
dGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJQYWdlLT5sYXlv
dXRJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0gICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCk7Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RMYXllcikgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9X
ZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOwotICAgICAgICBtX3No
b3VsZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGlkUmVuZGVyRnJhbWUoKSk7Ci0gICAgbV93
YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKLQotICAgIGlmICghbV9ub3RpZnlBZnRlclNjaGVk
dWxlZExheWVyRmx1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExldCB0aGUgZHJhd2lu
ZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25lIGEgZmx1c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMu
Ci0gICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJl
YSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKLSAgICBtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJG
bHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopCi17Ci0gICAgcGVyZm9ybVNj
aGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKLQot
ICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVI
b3N0UXQgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5z
ZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZCht
X3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6ZGVz
dHJveVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIp
OwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fcGFn
ZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Ci19Ci0KLWludDY0X3QgTGF5ZXJUcmVlSG9zdFF0Ojph
ZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoIWltYWdlKQot
ICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0gICAgUVBpeG1hcCogcGl4bWFwID0g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0KLSAgICBpZiAoIXBpeG1hcCkK
LSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAgaW50NjRfdCBrZXkgPSBw
aXhtYXAtPmNhY2hlS2V5KCk7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBp
dCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwotCi0gICAg
aWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAg
ICAgICAgKysoaXQtPnNlY29uZCk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVT
aGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8g
U2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwotICAgIHsKLSAgICAgICAgT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5j
cmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1h
Z2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwotICAgIH0K
LQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBiaXRtYXAtPmNyZWF0
ZUhhbmRsZShoYW5kbGUpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
SG9zdFByb3h5OjpDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRsZSkpOwot
ICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7Ci0gICAg
cmV0dXJuIGtleTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFnZUJhY2tp
bmdTdG9yZShpbnQ2NF90IGtleSkKLXsKLSAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXQt
PnNlY29uZC0tOwotCi0gICAgaWYgKGl0LT5zZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveURpcmVjdGx5
Q29tcG9zaXRlZEltYWdlKGtleSkpOwotfQotCi0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUg
dGltZSkKLXsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZChj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0
UXQ6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlw
UmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNs
aXBSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChncmFwaGljc0xheWVy
ID09IG1fcGFnZU92ZXJsYXlMYXllcikgewotICAgICAgICAvLyBPdmVybGF5cyBjb250YWluIHRy
YW5zcGFyZW50IGNvbnRlbnRzIGFuZCB3b24ndCBjbGVhciB0aGUgY29udGV4dCBhcyBwYXJ0IG9m
IHRoZWlyIHJlbmRlcmluZywgc28gd2UgZG8gaXQgaGVyZS4KLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LmNsZWFyUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVy
bGF5KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
fQotCi1ib29sIExheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVl
SG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+
c2hvd1JlcGFpbnRDb3VudGVyKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UXQ6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVG
b3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UXQ6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0
ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklE
LCBpbnQgdGlsZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGlsZUZvckxh
eWVyKGxheWVySUQsIHRpbGVJRCkpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IExheWVyVHJlZUhv
c3RRdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdDsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250
ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2Ug
PSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBib29sIGNvbnRlbnRzU2NhbGVE
aWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICBpZiAodHJhamVjdG9y
eVZlY3RvciAhPSBGbG9hdFBvaW50Ojp6ZXJvKCkpCi0gICAgICAgIHRvV2ViR3JhcGhpY3NMYXll
cihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJl
Y3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwotCi0gICAgaWYgKGNvbnRlbnRz
UmVjdERpZENoYW5nZSB8fCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlKSB7Ci0gICAgICAgIG1fdmlz
aWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0gICAgICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxl
OwotCi0gICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRv
ciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGNvbnRlbnRz
U2NhbGVEaWRDaGFuZ2UpCi0gICAgICAgICAgICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUo
c2NhbGUpOwotICAgICAgICAgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKLSAgICAgICAg
ICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5
b3V0KCkpCi0gICAgICAgIG1fd2ViUGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QocmVj
dCk7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKLSAgICAgICAgbV9zaG91bGRTZW5k
U2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6
cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsK
LSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBk
YXRlQXRsYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3
YXBCdWZmZXJzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVUaWxlVXBk
YXRlc0FsbG93ZWQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93
YWl0aW5nRm9yVUlQcm9jZXNzOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cHVyZ2VCYWNr
aW5nU3RvcmVzKCkKLXsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6
aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNl
dDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVk
TGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnB1cmdlQmFj
a2luZ1N0b3JlcygpOwotCi0gICAgQVNTRVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVm
Q291bnRzLnNpemUoKSk7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Ci19Ci0KLVBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBMYXllclRyZWVIb3N0UXQ6OmJlZ2luQ29u
dGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6
OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6
SW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PiBncmFwaGljc0NvbnRleHQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFz
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91cGRhdGVB
dGxhc2VzW2ldOwotICAgICAgICBpZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgewotICAgICAg
ICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBi
dWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBh
aW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOwotICAgICAgICAg
ICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3ND
b250ZXh0LnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBp
bnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDIwMDA7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmFw
cGVuZChVcGRhdGVBdGxhcyhTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpOwotICAgIHJl
dHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZl
cihoYW5kbGUsIHNpemUsIG9mZnNldCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhv
c3RRdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhv
c3RRdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTg1M2FkLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0j
aWZuZGVmIExheWVyVHJlZUhvc3RRdF9oCi0jZGVmaW5lIExheWVyVHJlZUhvc3RRdF9oCi0KLSNp
bmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgot
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKLSNpbmNsdWRlICJX
ZWJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50
Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgVXBkYXRlSW5mbzsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExheWVyVHJlZUhvc3RRdCA6
IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViR3JhcGhpY3NMYXllckNsaWVudAotewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RRdD4gY3JlYXRlKFdlYlBh
Z2UqKTsKLSAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UXQoKTsKLQotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwotCi0gICAgdmlydHVhbCBjb25zdCBM
YXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVD
b250ZXh0OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9v
bCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdmly
dHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNjcm9sbE9mZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOwot
ICAgIHZpcnR1YWwgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5l
d1NpemUpOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7Ci0gICAgdmlydHVh
bCBib29sIHBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9p
c1N1c3BlbmRlZCA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkg
eyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmlydHVhbCBp
bnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpOwotCi0gICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUo
V2ViTGF5ZXJJRCwgaW50IHRpbGVJRCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZp
c2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZy
YW1lKCk7Ci0gICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIHZpcnR1
YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxv
YXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0gICAgdmly
dHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJM
YXllcklEPiYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
Jik7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VU
b2tlbikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsK
LQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpG
bGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKLQot
cHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7Ci0KLXBy
aXZhdGU6Ci0gICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUg
dGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
bGlwUmVjdCk7Ci0gICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENv
dW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwotCi0gICAgLy8gTGF5
ZXJUcmVlSG9zdFF0Ci0gICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgdm9p
ZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJD
aGFuZ2VzKCk7Ci0gICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQg
cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lkIHNlbmRMYXllcnNUb1VJKCk7
Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Ci0KLSAg
ICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQu
Ci0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllcjsKLQotICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBp
ZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50
PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOwotICAgIFZlY3RvcjxVcGRhdGVB
dGxhcz4gbV91cGRhdGVBdGxhc2VzOwotCi0gICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLQotICAgIGJvb2wgbV93YWl0aW5nRm9y
VUlQcm9jZXNzOwotICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0
IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Ci0gICAg
Ym9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKLQotICAgIExheWVyVHJlZUNv
bnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7Ci0g
ICAgYm9vbCBtX3Nob3VsZFN5bmNSb290TGF5ZXI7Ci0gICAgdm9pZCBsYXllckZsdXNoVGltZXJG
aXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0UXQ+Kik7Ci0gICAgV2ViQ29yZTo6VGlt
ZXI8TGF5ZXJUcmVlSG9zdFF0PiBtX2xheWVyRmx1c2hUaW1lcjsKLSAgICBib29sIG1fbGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlSG9z
dFF0X2gK
</data>
<flag name="commit-queue"
          id="157250"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149277</attachid>
            <date>2012-06-25 05:34:17 -0700</date>
            <delta_ts>2012-06-25 18:28:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>Extract-common-code-from-LayerTreeHostQt3.diff</filename>
            <type>text/plain</type>
            <size>180189</size>
            <attacher name="YoungTaeck Song">youngtaeck.song</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggNTFmN2VjMS4uZDQwYmE4NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTIwOSw3ICsyMDksNyBAQCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9j
ZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCiAgICAgVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RQcm94eS5jcHAKLSAgICBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNw
cAorICAgIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAogICAgIFVJUHJv
Y2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcAogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1By
b3ZpZGVyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5
LmNwcApAQCAtNDA5LDcgKzQwOSw2IEBAIFNFVChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwCkBAIC00MjMsNiArNDIyLDcgQEAgU0VU
KFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRhcHRlci5j
cHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92
ZXJsYXkuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIu
Y3BwCkBAIC00NDUsNyArNDQ1LDcgQEAgU0VUKFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKICAg
ICBTaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5tZXNzYWdlcy5pbgogCiAg
ICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KLSAgICBVSVByb2Nlc3Mv
TGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCisgICAgVUlQcm9jZXNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRpb25D
YWNoZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJDb250ZXh0Lm1l
c3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYkNvb2tpZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bgpAQCAtNDk1LDcgKzQ5NSw3IEBAIFNFVChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjMGZkOWQx
Li4zNTM4YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjM0IEBACisyMDEyLTA2LTI1ICBZb3Vu
Z1RhZWNrIFNvbmcgIDx5b3VuZ3RhZWNrLnNvbmdAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW1dL
Ml1bUXRdW0VGTF0gRXh0cmFjdCBjb21tb24gY29kZSBmcm9tIExheWVyVHJlZUhvc3RRdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4MzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRyYWN0IGNvbW1v
biBjb2RlIGZyb20gTGF5ZXJUcmVlSG9zdFF0IHRvIGJlIHVzZWQgYnkgYm90aCBRdCBhbmQgRWZs
LgorICAgICAgICBJIHJlbmFtZWQgTGF5ZXJUcmVlSG9zdCB0byBMYXllclRyZWVDb29yZGluYXRv
ciwgYW5kIHRoZXNlIGFyZSBtb3ZlZCB1bmRlciBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuCisgICAgICAgIEkgTW9kaWZpZWQgTGF5ZXJUcmVlSG9zdFByb3h5IHRvIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgdG9vLCBCZWNhdXNlIExheWVyVHJlZUhvc3RQcm94eSBh
bmQgTGF5ZXJUcmVlSG9zdCB3ZXJlIHBhaXIuCisgICAgICAgIEFsc28gV2ViR3JhcGhpY3NMYXll
ciBtb3ZlZCB1bmRlciB0aGF0IGRpcmVjdG9yeS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLnByaToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3Jl
SVBDL01lc3NhZ2VJRC5oOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2
YXRlOjpwYWludCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUpOgor
ICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6bGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eSk6CisgICAgICAgIChEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6RHJhd2luZ0FyZWFQcm94eUltcGwpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5n
QXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1w
bDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHlJbXBsLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoRHJhd2luZ0FyZWFQ
cm94eUltcGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuY3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGluYXRvclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRl
Vmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpk
aXNwYXRjaFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRSb290Q29tcG9z
aXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVu
ZGVyRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpj
cmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVD
b250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmguCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2Fn
ZXMuaW4uCisgICAgICAgICogVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFt
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdT
dG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGV0YWNoKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJMYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYktpdDIucHJpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAoRHJhd2luZ0FyZWEpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1l
c3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaDoK
KyAgICAgICAgKERyYXdpbmdBcmVhSW1wbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQu
Y3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp+
TGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6TGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRTaG91bGROb3RpZnlB
ZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb29yZGluYXRvcjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2Nyb2xsTm9uQ29tcG9zaXRl
ZENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNl
UmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzaXplRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZEluc3Rh
bGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpk
aWRVbmluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVyRmlsdGVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphdHRhY2hMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXRhY2hMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYpOgorICAgICAgICAoV2Vi
S2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJs
YXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0cm95
UGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGUp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50c1JlY3QpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRz
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVl
VGlsZVVwZGF0ZXNBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5o
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyVHJlZUNvbnRleHQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6cGFnZU92ZXJsYXlTaG91bGRB
cHBseUZhZGVXaGVuUGFpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6cGF1c2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2Fn
ZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3Bw
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpsYXllckJ5SURNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvV2ViTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyOjpkaWRDaGFuZ2VMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXI6OmRpZENoYW5nZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXI6OmRpZENoYW5nZUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGRBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENo
aWxkQWJvdmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRC
ZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29t
cG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYkdyYXBoaWNzTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRSb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNv
bnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2hv
dWxkVXNlVGlsZWRCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRqdXN0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHcmFwaGljc0xheWVyOjppbml0RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3Jh
cGhpY3NMYXllci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAg
KFdlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdw
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3
cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjptYXNrVGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tUYXJnZXQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisKIDIwMTItMDYtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFRlc3QgL3dlYmtpdDIvV2Vi
S2l0V2ViVmlldy9wZXJtaXNzaW9uLXJlcXVlc3RzIGZhaWxzIGR1ZSB0byBhIHJ1bnRpbWUgd2Fy
bmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpIGIvU291
cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4IDBhNTBjN2QuLjMxOWJmN2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcmkKQEAgLTYzLDcgKzYzLDcgQEAgTUVTU0FHRV9SRUNF
SVZFUlMgPSBcCiAgICAgRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgRHJhd2luZ0Fy
ZWFQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluIFwK
LSAgICBMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gXAorICAgIExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFBsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNz
YWdlcy5pbiBcCiAgICAgUGx1Z2luUHJvY2Vzcy5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luUHJv
Y2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gXApAQCAtOTAsNyArOTAsNyBAQCBNRVNTQUdFX1JF
Q0VJVkVSUyA9IFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBcCiAgICAg
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9EcmF3
aW5nQXJlYS5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2Vz
LmluIFwKKyAgICBXZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5h
dG9yLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBc
CiAgICAgV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4gXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9N
ZXNzYWdlSUQuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgK
aW5kZXggNWYzOThhYS4uZDkyM2ExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9NZXNzYWdlSUQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL01lc3NhZ2VJRC5oCkBAIC0zOCw3ICszOCw3IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsKICAg
ICBNZXNzYWdlQ2xhc3NBdXRoZW50aWNhdGlvbk1hbmFnZXIsCiAgICAgTWVzc2FnZUNsYXNzRHJh
d2luZ0FyZWEsCiAgICAgTWVzc2FnZUNsYXNzSW5qZWN0ZWRCdW5kbGUsCi0gICAgTWVzc2FnZUNs
YXNzTGF5ZXJUcmVlSG9zdCwKKyAgICBNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvciwK
ICAgICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwKICAgICBNZXNzYWdl
Q2xhc3NXZWJDb29raWVNYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc1dlYkRhdGFiYXNlTWFuYWdl
ciwKQEAgLTYwLDcgKzYwLDcgQEAgZW51bSBNZXNzYWdlQ2xhc3MgewogICAgIC8vIE1lc3NhZ2Vz
IHNlbnQgYnkgdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBVSSBwcm9jZXNzLgogICAgIE1lc3NhZ2VD
bGFzc0Rvd25sb2FkUHJveHksCiAgICAgTWVzc2FnZUNsYXNzRHJhd2luZ0FyZWFQcm94eSwKLSAg
ICBNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0UHJveHksCisgICAgTWVzc2FnZUNsYXNzTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlclByb3h5LAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvbnRleHQsCiAgICAgTWVzc2FnZUNs
YXNzV2ViQ29udGV4dExlZ2FjeSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDdiOWFiOTkuLmY1ZjM4MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQpAQCAtMjE0LDcgKzIxNCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vz
cy9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL0xh
dW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFk
TGF1bmNoZXIuaCBcCi0gICAgVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIFwKKyAgICBV
SVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvTm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIFwKICAgICBVSVByb2Nl
c3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5oIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb24uaCBcCkBA
IC0zNTUsNyArMzU1LDYgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFcnJvcnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xv
Y2F0aW9uQ2xpZW50LmggXAotICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhp
Y3NMYXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0
aW9uQ2xpZW50LmggXApAQCAtMzY3LDYgKzM2Niw4IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0V2ZW50RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVy
VHJlZUNvb3JkaW5hdG9yLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29y
ZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBI
aWdobGlnaHRDb250cm9sbGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zlcmxh
eS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBcCkBAIC0zNzcsNyAr
Mzc4LDYgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmggXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQv
TGF5ZXJUcmVlSG9zdFF0LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlvblRvVUlQcm9j
ZXNzLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwKICAgICBXZWJQcm9jZXNzL3F0
L1F0QnVpbHRpbkJ1bmRsZS5oIFwKQEAgLTU2Niw3ICs1NjYsNyBAQCBTT1VSQ0VTICs9IFwKICAg
ICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNo
ZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0
UHJveHkuY3BwIFwKKyAgICBVSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAg
XAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0LmNwcCBcCiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9u
cy9XZWJOb3RpZmljYXRpb24uY3BwIFwKQEAgLTcyMiw3ICs3MjIsNiBAQCBTT1VSQ0VTICs9IFwK
ICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcCBcCi0g
ICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3Bw
IFwKQEAgLTc0MCw2ICs3MzksOCBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvRW5jb2RlckFkYXB0ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNw
YXRjaGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBc
CisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5h
dG9yL1dlYkdyYXBoaWNzTGF5ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGln
aGxpZ2h0Q29udHJvbGxlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBcCkBAIC03
NTQsNyArNzU1LDYgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2VHcm91cFByb3h5LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYkluc3BlY3RvclF0LmNwcCBcCi0gICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvbm5lY3Rp
b25Ub1VJUHJvY2Vzcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5k
ZXggZTBkNjAxMi4uZTFmNjc1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAKLSNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAj
aW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlU0dO
b2RlLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTcyLDkgKzcyLDkg
QEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIpCiAg
ICAgaWYgKCF3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5ID0gd2ViUGFnZVByb3h5
LT5kcmF3aW5nQXJlYSgpLT5sYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICBpZiAobGF5ZXJUcmVl
SG9zdFByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpKQotICAgICAgICBsYXllclRyZWVIb3N0UHJv
eHktPmxheWVyVHJlZVJlbmRlcmVyKCktPnBhaW50VG9HcmFwaGljc0NvbnRleHQocGFpbnRlcik7
CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eSgpOworICAgIGlmIChsYXllclRyZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJl
cigpKQorICAgICAgICBsYXllclRyZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJl
cigpLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwogfQogCiBRU0dOb2RlKiBRUXVp
Y2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnRO
b2RlRGF0YSopCkBAIC04Miw4ICs4Miw4IEBAIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0
ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKICAgICBp
ZiAoIWQtPndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIG9sZE5v
ZGU7CiAKLSAgICBMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSA9IGQtPndl
YlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gbGF5ZXJUcmVlSG9zdFByb3h5LT5sYXllclRy
ZWVSZW5kZXJlcigpOworICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkgPSBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkoKTsKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIg
PSBsYXllclRyZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOwogCiAgICAg
UXRXZWJQYWdlU0dOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8UXRXZWJQYWdlU0dOb2RlKj4ob2xk
Tm9kZSk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTU5LDggKzE1OSw4IEBAIHZvaWQgUVF1aWNrV2Vi
UGFnZVByaXZhdGU6OnVwZGF0ZVNpemUoKQogICAgIFFTaXplRiBzY2FsZWRTaXplID0gY29udGVu
dHNTaXplICogY29udGVudHNTY2FsZTsKIAogICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdB
cmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmIChkcmF3aW5nQXJlYSAm
JiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkpCi0gICAgICAgIGRyYXdpbmdBcmVh
LT5sYXllclRyZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKGNvbnRlbnRzU2l6ZSk7Cisg
ICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGluYXRvclBy
b3h5KCkpCisgICAgICAgIGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCkt
PnNldENvbnRlbnRzU2l6ZShjb250ZW50c1NpemUpOwogCiAgICAgcS0+c2V0U2l6ZShzY2FsZWRT
aXplKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
CmluZGV4IDA4YjIyNTcuLjVmN2IxMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkxheWVy
VHJlZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIK
ICNpbmNsdWRlIDxDb3JlSVBDL01lc3NhZ2VJRC5oPgogI2VuZGlmCiAKQEAgLTY5LDcgKzY5LDcg
QEAgV2ViQ29yZTo6SW50UmVjdCBEcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3QoKSBjb25z
dAogICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZVByb3h5LT52
aWV3U2l6ZSgpKTsKIH0KIAotdm9pZCBEcmF3aW5nQXJlYVByb3h5OjpkaWRSZWNlaXZlTGF5ZXJU
cmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2Fn
ZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCit2b2lk
IERyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwg
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CiB9CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDlmMTcwNWQuLjQy
NmZlYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApA
QCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgTGF5ZXJUcmVlQ29udGV4dDsKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKK2Ns
YXNzIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CiBjbGFzcyBVcGRhdGVJbmZvOwogY2xhc3Mg
V2ViTGF5ZXJUcmVlSW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKQEAgLTkzLDEyICs5
MywxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdwb3J0Vmlz
aWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBjb250ZW50c1JlY3QoKTsgfQogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNCYWNraW5nU3RvcmVSZWFkeSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICBMYXllclRy
ZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdFByb3h5LmdldCgpOyB9CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5nZXQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNS
ZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNj
YWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uID0gV2Vi
Q29yZTo6RmxvYXRQb2ludCgpKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZvckxh
eWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqKTsKIAogICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1f
d2ViUGFnZVByb3h5OyB9CiAjZW5kaWYKQEAgLTExMiw3ICsxMTIsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAogI2lmIFVTRShVSV9TSURFX0NP
TVBPU0lUSU5HKQotICAgIE93blB0cjxMYXllclRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9z
dFByb3h5OworICAgIE93blB0cjxMYXllclRyZWVDb29yZGluYXRvclByb3h5PiBtX2xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDE1NjI2NzEuLjBi
Yjc0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmNwcApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+
CiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0
UHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjZW5kaWYK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC02MSw3ICs2MSw3IEBAIERyYXdpbmdBcmVh
UHJveHlJbXBsOjpEcmF3aW5nQXJlYVByb3h5SW1wbChXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94
eSkKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKICAgICAvLyBDb25zdHJ1Y3QgdGhlIHBy
b3h5IGVhcmx5IHRvIGFsbG93IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNz
IHdoaWxlIEFDIGlzIGVudGVyZWQgdGhlcmUuCiAgICAgaWYgKHdlYlBhZ2VQcm94eS0+cGFnZUdy
b3VwKCktPnByZWZlcmVuY2VzKCktPmZvcmNlQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlz
KSk7CisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGFkb3B0UHRyKG5ldyBM
YXllclRyZWVDb29yZGluYXRvclByb3h5KHRoaXMpKTsKICNlbmRpZgogfQogCkBAIC0zNTQsMjIg
KzM1NCwyMiBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleAogICAgIG1fbGF5ZXJUcmVlQ29udGV4
dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CiAjaWYgVVNFKFVJX1NJREVfQ09N
UE9TSVRJTkcpCi0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXll
clRyZWVIb3N0UHJveHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsK
KyAgICBpZiAoIW1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRy
ZWVDb29yZGluYXRvclByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkodGhpcykpOwogI2VuZGlmCiB9CiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLXZv
aWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBt
ZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQordm9pZCBEcmF3
aW5nQXJlYVByb3h5SW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBt
ZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIGlm
IChtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPmRp
ZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwg
YXJndW1lbnRzKTsKKyAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAg
ICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGlu
YXRvclByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiB9CiAK
IHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRpb24pCiB7Ci0gICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+c2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZl
Y3RvciwgYWNjdXJhdGVWaXNpYmxlQ29udGVudHNQb3NpdGlvbik7CisgICAgaWYgKG1fbGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5
LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1JlY3QsIHNjYWxlLCB0cmFq
ZWN0b3J5VmVjdG9yLCBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKTsKIH0KIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5o
CmluZGV4IDM0NmYzNTQuLjRjNGFjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFJlZ2lvbjsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKK2NsYXNz
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CiAKIGNsYXNzIERyYXdpbmdBcmVhUHJveHlJbXBs
IDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgewogcHVibGljOgpAQCAtODMsNyArODMsNyBAQCBw
cml2YXRlOgogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lk
IHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNv
bnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWpl
Y3RvcnksIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRz
UG9zaXRpb24gPSBXZWJDb3JlOjpGbG9hdFBvaW50KCkpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUxh
eWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1l
c3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBkaWRSZWNlaXZl
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENv
cmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAjZW5kaWYKICNl
bHNlCiAgICAgYm9vbCBpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjNiMDIxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShVSV9TSURFX0NPTVBP
U0lUSU5HKQorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKKworI2luY2x1
ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZv
LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViTGF5
ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCisjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eShEcmF3aW5nQXJlYVByb3h5
KiBkcmF3aW5nQXJlYVByb3h5KQorICAgIDogbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVh
UHJveHkpCisgICAgLCBtX3JlbmRlcmVyKGFkb3B0UmVmKG5ldyBXZWJMYXllclRyZWVSZW5kZXJl
cih0aGlzKSkpCit7Cit9CisKK0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVD
b29yZGluYXRvclByb3h5KCkKK3sKKyAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAgbV9k
cmF3aW5nQXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uKQoreworICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBs
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJL
aXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgp
LCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVU
aWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50
IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdl
YktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgUmVmUHRyPFNoYXJl
YWJsZVN1cmZhY2U+IHN1cmZhY2U7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdWlu
dDMyX3QgdG9rZW4gPSB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUuZ3JhcGhpY3NTdXJmYWNlVG9r
ZW4oKTsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPjo6
aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodG9rZW4pOworICAgIGlmIChpdCA9PSBtX3N1
cmZhY2VzLmVuZCgpKSB7CisgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVh
dGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKKyAgICAgICAgbV9zdXJmYWNlcy5hZGQodG9r
ZW4sIHN1cmZhY2UpOworICAgIH0gZWxzZQorICAgICAgICBzdXJmYWNlID0gaXQtPnNlY29uZDsK
KyNlbHNlCisgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZv
LnN1cmZhY2VIYW5kbGUpOworI2VuZGlmCisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRp
bGVJRCwgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVS
ZWN0LCB0YXJnZXRSZWN0LCBzdXJmYWNlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGlu
dCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxh
eWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0
aWxlSUQpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZWxldGVDb21w
b3NpdGluZ0xheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkp
OworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQsIG1f
cmVuZGVyZXIuZ2V0KCksIGlkKSk7CisgICAgdXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5
ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdl
dCgpLCBpZCwgaW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNl
dENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2Vi
TGF5ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjpzZXRMYXllckNoaWxkcmVuLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2hp
bGRyZW4pKTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdl
dCgpLCBpZCwgZmlsdGVycykpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUoKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldl
YkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5kZXJlci5nZXQoKSkp
OworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0IFdl
YktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOwor
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFn
ZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5LCBiaXRtYXApKTsKK30KKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBr
ZXkpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRl
c3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVu
dHNTaXplKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVy
OjpzZXRDb250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNvbnRlbnRzU2l6ZSkpOworfQor
Cit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWpl
Y3RvcnlWZWN0b3IsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFjY3VyYXRlVmlzaWJsZUNv
bnRlbnRzUG9zaXRpb24pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QsIG1fcmVuZGVyZXIuZ2V0KCksIHJlY3Qs
IHNjYWxlLCBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKSk7CisgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OlNldFZpc2libGVDb250ZW50c1JlY3QocmVjdCwgc2NhbGUsIHRyYWplY3RvcnlW
ZWN0b3IpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV9k
cmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBh
Z2UoKS0+cGFnZUlEKCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24sIG1fcmVuZGVyZXIuZ2V0KCksIHBvc2l0aW9uKSk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6
ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCit7CisgICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMsIG1fcmVu
ZGVyZXIuZ2V0KCksIGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOworfQor
Cit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7
CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit9CisjZW5kaWYgLy8gVVNFKFVJX1NJ
REVfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iNGU3YjdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaApAQCAtMCwwICsxLDkwIEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlfaAorI2RlZmluZSBMYXll
clRyZWVDb29yZGluYXRvclByb3h5X2gKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQor
CisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5o
IgorI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisj
aW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworY2xhc3Mg
UVNHTm9kZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkxheWVySW5mbzsKK2Ns
YXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOworCitj
bGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVD
b29yZGluYXRvclByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICB2aXJ0dWFsIH5MYXllclRy
ZWVDb29yZGluYXRvclByb3h5KCk7CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUo
V2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBzZXRDb21wb3NpdGlu
Z0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7Cisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRl
cnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlm
CisgICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOworICAgIHZvaWQg
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2
b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKyAgICB2b2lk
IHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNj
YWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5LCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKTsKKyAgICB2b2lk
IGRpZFJlbmRlckZyYW1lKCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
KTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7
CisgICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7CisgICAgdm9pZCBkZXN0cm95RGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1l
c3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCB1cGRhdGVWaWV3
cG9ydCgpOworICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOworICAgIHZv
aWQgc3luY0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFz
U2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHZvaWQgcHVyZ2VCYWNr
aW5nU3RvcmVzKCk7CisgICAgV2ViTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICBEcmF3
aW5nQXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisgICAgUmVmUHRyPFdlYkxheWVyVHJl
ZVJlbmRlcmVyPiBtX3JlbmRlcmVyOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIEhh
c2hNYXA8dWludDMyX3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+IG1fc3VyZmFjZXM7Cisj
ZW5kaWYKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBMYXllclRyZWVDb29yZGluYXRv
clByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVD
b29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzI4NGI5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAg
KzEsMzggQEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorIyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorIyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyMKKyMgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisjICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorbWVzc2FnZXMg
LT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CisgICAgU2V0Q29tcG9zaXRpbmdMYXllclN0
YXRlKHVpbnQzMl90IGlkLCBXZWJLaXQ6OldlYkxheWVySW5mbyBsYXllckluZm8pCisgICAgU2V0
Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNo
aWxkcmVuKQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBTZXRDb21wb3NpdGluZ0xheWVy
RmlsdGVycyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQor
I2VuZGlmCisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCisgICAgRGVs
ZXRlQ29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBDcmVhdGVUaWxlRm9yTGF5ZXIo
dWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0
LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgVXBkYXRlVGlsZUZv
ckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFy
Z2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFJlbW92
ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlEKQorICAgIENyZWF0ZURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlIGhhbmRsZSkKKyAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50
NjRfdCBrZXkpCisgICAgRGlkUmVuZGVyRnJhbWUoKQorICAgIERpZENoYW5nZVNjcm9sbFBvc2l0
aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQorICAgIFN5bmNDYW52YXModWludDMyX3Qg
aWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNl
VG9rZW4pCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUhvc3RQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4N2YwNzIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0jaW5j
bHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0KLSNpbmNsdWRlICJMYXllclRyZWVIb3N0TWVz
c2FnZXMuaCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgIldl
YkxheWVyVHJlZVJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHko
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKLSAgICA6IG1fZHJhd2luZ0FyZWFQ
cm94eShkcmF3aW5nQXJlYVByb3h5KQotICAgICwgbV9yZW5kZXJlcihhZG9wdFJlZihuZXcgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIodGhpcykpKQotewotfQotCi1MYXllclRyZWVIb3N0UHJveHk6On5M
YXllclRyZWVIb3N0UHJveHkoKQotewotICAgIG1fcmVuZGVyZXItPmRldGFjaCgpOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQotewotICAgIG1fZHJhd2lu
Z0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewot
ICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwg
dXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklE
LCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlOwotI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHVpbnQzMl90IHRva2VuID0gdXBkYXRlSW5mby5z
dXJmYWNlSGFuZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgSGFzaE1hcDx1aW50MzJf
dCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5m
aW5kKHRva2VuKTsKLSAgICBpZiAoaXQgPT0gbV9zdXJmYWNlcy5lbmQoKSkgewotICAgICAgICBz
dXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRs
ZSk7Ci0gICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2VuLCBzdXJmYWNlKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgc3VyZmFjZSA9IGl0LT5zZWNvbmQ7Ci0jZWxzZQotICAgIHN1cmZhY2UgPSBTaGFy
ZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSNlbmRpZgot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxl
LCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIFdlYkxheWVyVHJlZVJlbmRlcmVy
OjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgc3VyZmFjZSwg
dXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3Jl
bmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fcmVu
ZGVyZXIuZ2V0KCksIGlkKSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQgaWQpCi17
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RM
YXllcklELCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2Vi
TGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVy
LmdldCgpLCBpZCwgaW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29t
cG9zaXRpbmdMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxXZWJMYXll
cklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4sIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjaGlsZHJl
bikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVycywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGZp
bHRlcnMpKTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVy
RnJhbWUoKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVy
OjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5kZXJlci5nZXQoKSkpOwotICAgIHVwZGF0ZVZpZXdw
b3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYgaGFuZGxlKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXks
IGJpdG1hcCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5
Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtl
eSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgY29udGVudHNTaXplKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldl
YkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNv
bnRlbnRzU2l6ZSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQ
b2ludCYgdHJhamVjdG9yeVZlY3RvciwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYWNjdXJh
dGVWaXNpYmxlQ29udGVudHNQb3NpdGlvbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZX
ZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9yZW5kZXJlci5n
ZXQoKSwgcmVjdCwgc2NhbGUsIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRpb24pKTsKLSAg
ICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlLCB0cmFqZWN0
b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
SG9zdDo6UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdl
SUQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRDaGFuZ2VTY3JvbGxQb3Np
dGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uLCBtX3JlbmRl
cmVyLmdldCgpLCBwb3NpdGlvbikpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3lu
Y0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3Qg
Z3JhcGhpY3NTdXJmYWNlVG9rZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjYW52YXNT
aXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2Uo
KS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdT
dG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotfQot
I2VuZGlmIC8vIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3OTU4YTVhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRy
ZWVIb3N0UHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSovCi0KLSNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKLSNkZWZpbmUgTGF5ZXJUcmVl
SG9zdFByb3h5X2gKLQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAi
QmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUg
IlJlZ2lvbi5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2Vi
TGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9S
dW5Mb29wLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotY2xhc3MgUVNHTm9kZTsKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkxheWVySW5mbzsKLWNsYXNzIFdlYkxheWVy
VHJlZVJlbmRlcmVyOwotY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwotCi1jbGFzcyBMYXllclRy
ZWVIb3N0UHJveHkgewotcHVibGljOgotICAgIExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJl
YVByb3h5Kik7Ci0gICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAgdm9pZCBz
ZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7
Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3Qg
VmVjdG9yPFdlYkxheWVySUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQg
c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Rmls
dGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVy
KFdlYkxheWVySUQpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJ
RCk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29y
ZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHB1
cmdlR0xSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmKTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0
cmFqZWN0b3J5LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBhY2N1cmF0ZVZpc2libGVDb250
ZW50c1Bvc2l0aW9uKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCBjcmVh
dGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZv
ckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihp
bnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7
Ci0gICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7Ci0gICAg
dm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAg
ICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAg
ICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b3NpdGlvbik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7Ci0g
ICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJlciog
bGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mKTsKLQotICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKLSAgICBS
ZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7Ci0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+
ID4gbV9zdXJmYWNlczsKLSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIExh
eWVyVHJlZUhvc3RQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTg4YjQ0Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5
ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBA
QAotIwotIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0jICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSMg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi1tZXNzYWdlcyAtPiBMYXll
clRyZWVIb3N0UHJveHkgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBp
ZCwgV2ViS2l0OjpXZWJMYXllckluZm8gbGF5ZXJJbmZvKQotICAgIFNldENvbXBvc2l0aW5nTGF5
ZXJDaGlsZHJlbih1aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKLSNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnModWludDMy
X3QgaWQsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVycykKLSNlbmRpZgotICAgIFNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIERlbGV0ZUNvbXBvc2l0aW5n
TGF5ZXIodWludDMyX3QgaWQpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVy
SUQsIGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJm
YWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJf
dCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktp
dDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIo
dWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLSAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5k
bGUpCi0gICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQotICAg
IERpZFJlbmRlckZyYW1lKCkKLSAgICBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJ
bnRQb2ludCBwb3NpdGlvbikKLSAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJ
bnRTaXplIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKQotfQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVy
LmNwcAppbmRleCAzODUwZTUzLi5iODVlMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJCYWNr
aW5nU3RvcmUuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlICJM
YXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCiAjaW5j
bHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgpAQCAt
ODUsOSArODUsOSBAQCBzdGF0aWMgSW50UG9pbnQgYm91bmRlZFNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50UgogICAgIHJldHVybiBJbnRQb2lu
dChzY3JvbGxQb3NpdGlvblgsIHNjcm9sbFBvc2l0aW9uWSk7CiB9CiAKLVdlYkxheWVyVHJlZVJl
bmRlcmVyOjpXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJl
ZUhvc3RQcm94eSkKK1dlYkxheWVyVHJlZVJlbmRlcmVyOjpXZWJMYXllclRyZWVSZW5kZXJlcihM
YXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5KQogICAg
IDogbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBtX2xheWVyVHJlZUhvc3RQcm94eShsYXllclRy
ZWVIb3N0UHJveHkpCisgICAgLCBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkobGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eSkKICAgICAsIG1fcm9vdExheWVySUQoSW52YWxpZFdlYkxheWVySUQp
CiAgICAgLCBtX2lzQWN0aXZlKGZhbHNlKQogewpAQCAtMTc1LDggKzE3NSw4IEBAIHZvaWQgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCwgZmxvYXQgc2NhCiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdw
b3J0KCkKIHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdFByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworICAgIGlmIChtX2xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+dXBkYXRl
Vmlld3BvcnQoKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRp
b25Gb3JGaXhlZExheWVycygpCkBAIC00MDYsOCArNDA2LDggQEAgdm9pZCBXZWJMYXllclRyZWVS
ZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQogCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVy
OjpyZW5kZXJOZXh0RnJhbWUoKQogewotICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAg
ICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnJlbmRlck5leHRGcmFtZSgpOworICAgIGlmICht
X2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS0+cmVuZGVyTmV4dEZyYW1lKCk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OmVuc3VyZVJvb3RMYXllcigpCkBAIC00NjUsMTMgKzQ2NSwxMyBAQCB2b2lkIFdlYkxheWVy
VHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkKIAogdm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJv
eHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsK
KyAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCiB2b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjpkZXRhY2goKQogewotICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5ID0g
MDsKKyAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgPSAwOwogfQogCiB2b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjphcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVl
UmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJl
ci5oCmluZGV4IGQ2NmIxOWQuLjJhNGJhYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCkBAIC00MCw3ICs0MCw3IEBACiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJCYWNraW5nU3RvcmU7Ci1jbGFzcyBMYXllclRyZWVIb3N0
UHJveHk7CitjbGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5OwogY2xhc3MgV2ViTGF5ZXJJ
bmZvOwogY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogCkBAIC01OSw3ICs1OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgewogICAgICAgICB9CiAgICAgfTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJl
cihMYXllclRyZWVIb3N0UHJveHkqKTsKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRy
ZWVDb29yZGluYXRvclByb3h5Kik7CiAgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlUmVuZGVyZXIo
KTsKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2b2lkIHBhaW50VG9DdXJyZW50
R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OlBhaW50Rmxh
Z3MgPSAwKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVuZGVyTmV4
dEZyYW1lKCk7CiAgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKIAotICAgIExheWVyVHJl
ZUhvc3RQcm94eSogbV9sYXllclRyZWVIb3N0UHJveHk7CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eSogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5OwogICAgIE93blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9s
YXllcnNUb0RlbGV0ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAppbmRleCA2MjdlZTUyLi5iNTA0NmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtOTQsNyArOTQsNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoVUlfU0lE
RV9DT01QT1NJVElORykKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShRVCkKQEAgLTE3MzcsOCArMTczNyw4IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3Jl
SVBDOjpNCiAgICAgfQogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1l
c3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0UHJveHk+KCkpIHsK
LSAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3Nh
Z2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOworICAgIGlmIChtZXNzYWdlSUQu
aXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eT4oKSkgewor
ICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBy
aSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDI0Y2M1YTIuLjc5MjgyZDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIucHJpCkBAIC01NSw2ICs1NSw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNP
VVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydCBcCiAgICAgJCRTT1VSQ0VfRElSL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNz
L1dlYlBhZ2UgXAorICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL3F0IFwKICAgICAkJFNP
VVJDRV9ESVIvUGx1Z2luUHJvY2VzcwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhkNjRlYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzQ2ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJ
VElORykKLSNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0KLSNpbmNsdWRlICJCYWNraW5n
U3RvcmUuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
cy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgotI2luY2x1
ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFzaE1hcDxX
ZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCi17Ci0gICAgc3Rh
dGljIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKLSAg
ICByZXR1cm4gZ2xvYmFsTWFwOwotfQotCi1XZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGljc0xh
eWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQotewotICAgIEhhc2hNYXA8V2Vi
TGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+JiB0YWJsZSA9IGxheWVyQnlJRE1hcCgpOwotICAg
IEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRh
YmxlLmZpbmQoaWQpOwotICAgIGlmIChpdCA9PSB0YWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLXN0YXRpYyBXZWJMYXllcklEIHRvV2Vi
TGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gbGF5ZXIgPyB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpkaWRDaGFuZ2VMYXllclN0YXRlKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRl
ID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5j
UmVxdWlyZWQodGhpcyk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hp
bGRyZW4oKQotewotICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gdHJ1ZTsKLSAgICBpZiAoY2xp
ZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0K
LSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5n
ZUZpbHRlcnMoKQotewotICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSB0cnVlOwotICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0K
LSNlbmRpZgotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVS
ZWN0KCkKLXsKLSAgICBpZiAoIXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgdG9XZWJHcmFw
aGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwot
ICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKHJlcGxp
Y2FMYXllcigpKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpkaWRDaGFuZ2VHZW9tZXRyeSgpCi17Ci0gICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwotICAgIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci19Ci0KLVdlYkdyYXBo
aWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQot
ICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCi0gICAgLCBtX21hc2tUYXJnZXQoMCkKLSAgICAs
IG1faW5VcGRhdGVNb2RlKGZhbHNlKQotICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0
cnVlKQotICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRT
eW5jQ2hpbGRyZW4odHJ1ZSkKLSAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQotICAgICwg
bV9jYW52YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGll
bnQoMCkKLSAgICAsIG1fY29udGVudHNTY2FsZSgxKQotICAgICwgbV9jYW52YXNQbGF0Zm9ybUxh
eWVyKDApCi17Ci0gICAgc3RhdGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOwotICAgIG1f
aWQgPSBuZXh0TGF5ZXJJRCsrOwotICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsK
LX0KLQotV2ViR3JhcGhpY3NMYXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQotewotICAgIGxheWVy
QnlJRE1hcCgpLnJlbW92ZShpZCgpKTsKLQotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGll
bnQpIHsKLSAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgICAgIG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudC0+ZGV0YWNoTGF5ZXIodGhpcyk7Ci0gICAgfQotICAgIHdpbGxCZURlc3Ry
b3llZCgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCi17
Ci0gICAgR3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLWJvb2wgV2ViR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hp
bGRyZW4pCi17Ci0gICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxk
cmVuKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJHcmFwaGljc0xh
eWVyKiBjaGlsZCA9IHRvV2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7Ci0gICAgICAgIGNo
aWxkLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7
Ci0gICAgICAgIGNoaWxkLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgfQotICAgIGRpZENo
YW5nZUNoaWxkcmVuKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGQobGF5ZXIpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdl
YkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hh
bmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5k
ZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleCkKLXsKLSAgICBHcmFwaGljc0xheWVy
OjphZGRDaGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIo
bGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVu
dCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGlu
ZykKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsK
LSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50
KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVy
KS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0K
LXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXll
ciwgR3JhcGhpY3NMYXllciogc2libGluZykKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGls
ZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5z
ZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAg
dG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRp
ZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNo
aWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKLXsK
LSAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdD
aGlsZCk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRpZENoYW5n
ZUNoaWxkcmVuKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPnNldFdlYkdy
YXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdy
YXBoaWNzTGF5ZXIobmV3Q2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCi17
Ci0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xh
eWVyKHBhcmVudCgpKSkKLSAgICAgICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7
Ci0gICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwotCi0gICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIHApCi17Ci0gICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7Ci0gICAgZGlkQ2hh
bmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2lu
dChjb25zdCBGbG9hdFBvaW50M0QmIHApCi17Ci0gICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7
Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAodGhpcy0+c2l6ZSgpID09
IHNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6
ZSk7Ci0gICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgaWYgKG1hc2tMYXllcigpKQotICAgICAg
ICBtYXNrTGF5ZXIoKS0+c2V0U2l6ZShzaXplKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwot
fQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdCkKLXsKLSAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOwotICAgIGRpZENoYW5n
ZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCi17Ci0gICAgaWYgKGNoaWxkcmVu
VHJhbnNmb3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCi17Ci0gICAgaWYg
KHByZXNlcnZlczNEKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXll
cjo6c2V0UHJlc2VydmVzM0QoYik7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKLXsKLSAgICBpZiAo
bWFza3NUb0JvdW5kcygpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0xheWVy
OjpzZXRNYXNrc1RvQm91bmRzKGIpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKLXsKLSAgICBpZiAo
ZHJhd3NDb250ZW50KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6
OnNldERyYXdzQ29udGVudChiKTsKLQotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCi17Ci0gICAg
aWYgKGNvbnRlbnRzT3BhcXVlKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX21h
aW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNB
bHBoYSghYik7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7Ci0gICAg
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEJh
Y2tmYWNlVmlzaWJpbGl0eShib29sIGIpCi17Ci0gICAgaWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgp
ID09IGIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNl
VmlzaWJpbGl0eShiKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQotewotICAgIGlmICh0aGlz
LT5vcGFjaXR5KCkgPT0gb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NM
YXllcjo6c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19
Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgaWYgKGNvbnRlbnRzUmVjdCgpID09IHIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKLSAgICBkaWRDaGFuZ2VMYXll
clN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rp
c3BsYXkoKQotewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlOwotICAgIHNldENv
bnRlbnRzVG9JbWFnZSgwKTsKLSAgICBzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOwot
ICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCi17
Ci0gICAgbV9jYW52YXNQbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKLSAgICBtX2NhbnZh
c05lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQo
KS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJT
KQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIG5ld0ZpbHRlcnMpCi17Ci0gICAgaWYgKGZpbHRlcnMoKSA9PSBuZXdGaWx0ZXJzKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkaWRDaGFuZ2VGaWx0ZXJzKCk7Ci0gICAgcmV0dXJuIEdy
YXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMobmV3RmlsdGVycyk7Ci19Ci0jZW5kaWYKLQotCi12b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0g
ICAgaWYgKGltYWdlID09IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQ2NF90IG5l
d0lEID0gMDsKLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7Ci0gICAgICAgIC8v
IFdlIGFkb3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdh
eSB3ZSBhdm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KLSAgICAgICAg
bmV3SUQgPSBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUo
aW1hZ2UpOwotICAgICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJh
Y2tpbmdTdG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5n
U3RvcmVJRCAmJiBuZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudCBpcyBub3Qgc2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBz
dG9yZSBJRC4KLSAgICAgICAgQVNTRVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlE
KTsKLSAgICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIH0KLQotICAgIG1fbGF5ZXJJ
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKLSAgICBtX2ltYWdlID0gaW1hZ2U7Ci0g
ICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0g
ICAgaWYgKGxheWVyID09IG1hc2tMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFw
aGljc0xheWVyOjpzZXRNYXNrTGF5ZXIobGF5ZXIpOwotCi0gICAgaWYgKCFsYXllcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldFNpemUoc2l6ZSgpKTsKLSAgICBXZWJHcmFwaGlj
c0xheWVyKiB3ZWJHcmFwaGljc0xheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKLSAg
ICB3ZWJHcmFwaGljc0xheWVyLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudCk7Ci0gICAgd2ViR3JhcGhpY3NMYXllci0+c2V0TWFza1RhcmdldCh0aGlz
KTsKLSAgICB3ZWJHcmFwaGljc0xheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwotCi19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UmVw
bGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKGxheWVyID09
IHJlcGxpY2FMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobGF5ZXIpCi0gICAg
ICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQo
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxp
Y2F0ZWRCeUxheWVyKGxheWVyKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAobV9t
YWluQmFja2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUo
SW50UmVjdChyZWN0KSk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi1XZWJMYXll
cklEIFdlYkdyYXBoaWNzTGF5ZXI6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pZDsKLX0K
LQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b1dlYkdy
YXBoaWNzTGF5ZXIobWFza0xheWVyKCkpKQotICAgICAgICBtYXNrLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiByZXBs
aWNhID0gdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKLSAgICAgICAgcmVwbGlj
YS0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBtX3dlYkdy
YXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNGaXhlZExheWVycygpOwotCi0gICAgc3luY0NvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21w
b3NpdGluZ1N0YXRlKHJlY3QpOwotfQotCi1XZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YkdyYXBoaWNzTGF5ZXIqPihsYXllcik7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3lu
Y0NoaWxkcmVuKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICBWZWN0b3I8V2Vi
TGF5ZXJJRD4gY2hpbGRJRHM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigp
LnNpemUoKTsgKytpKQotICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxk
cmVuKClbaV0pKTsKLQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyQ2hp
bGRyZW4obV9pZCwgY2hpbGRJRHMpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycygpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5
bmNGaWx0ZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZh
bHNlOwotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyRmlsdGVycyhtX2lk
LCBmaWx0ZXJzKCkpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0xh
eWVyU3RhdGUoKQotIHsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gZmFsc2U7Ci0gICAgbV9sYXll
ckluZm8uZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1ZpZXdwb3J0KCk7Ci0KLSAgICBtX2xheWVy
SW5mby5hbmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7Ci0gICAgbV9sYXllckluZm8uYmFja2Zh
Y2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgbV9sYXllckluZm8uY2hpbGRy
ZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRl
bnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKLSAgICBtX2xheWVySW5mby5jb250ZW50c1Jl
Y3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3
c0NvbnRlbnQoKTsKLSAgICBtX2xheWVySW5mby5tYXNrID0gdG9XZWJMYXllcklEKG1hc2tMYXll
cigpKTsKLSAgICBtX2xheWVySW5mby5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOwot
ICAgIG1fbGF5ZXJJbmZvLm9wYWNpdHkgPSBvcGFjaXR5KCk7Ci0gICAgbV9sYXllckluZm8ucGFy
ZW50ID0gdG9XZWJMYXllcklEKHBhcmVudCgpKTsKLSAgICBtX2xheWVySW5mby5wb3MgPSBwb3Np
dGlvbigpOwotICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJlc2VydmVzM0QoKTsKLSAg
ICBtX2xheWVySW5mby5yZXBsaWNhID0gdG9XZWJMYXllcklEKHJlcGxpY2FMYXllcigpKTsKLSAg
ICBtX2xheWVySW5mby5zaXplID0gc2l6ZSgpOwotICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9
IHRyYW5zZm9ybSgpOwotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyU3Rh
dGUobV9pZCwgbV9sYXllckluZm8pOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmND
YW52YXMoKQotewotICAgIGlmICghbV9jYW52YXNOZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV9jYW52YXNQbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VU
b2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0g
ICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jQ2FudmFzKG1faWQsIEludFNpemUoc2l6
ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSksIGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKLSNl
bmRpZgotICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKQotewotICAgIGlmICghbV9pbWFn
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCkKLSAgICAgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG1fd2ViR3Jh
cGhpY3NMYXllckNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShtX2ltYWdlLmdldCgpKTsK
LX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKQotewotICAgIC8vIFRoZSByZW1vdGUgaW1hZ2UgbWlnaHQgaGF2ZSBiZWVuIHJl
bGVhc2VkIGJ5IHB1cmdlQmFja2luZ1N0b3Jlcy4KLSAgICBlbnN1cmVJbWFnZUJhY2tpbmdTdG9y
ZSgpOwotICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7Ci0gICAgc3luY0NoaWxk
cmVuKCk7Ci0gICAgc3luY0xheWVyU3RhdGUoKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0g
ICAgc3luY0ZpbHRlcnMoKTsKLSNlbmRpZgotICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7Ci0g
ICAgc3luY0NhbnZhcygpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRCZWdpbigpCi17Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Um9v
dExheWVyKGJvb2wgaXNSb290KQotewotICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNS
b290OwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKLSAg
ICAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKHRyYWplY3Rv
cnlWZWN0b3IpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUo
ZmxvYXQgc2NhbGUpCi17Ci0gICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7Ci0gICAgYWRqdXN0
Q29udGVudHNTY2FsZSgpOwotfQotCi1mbG9hdCBXZWJHcmFwaGljc0xheWVyOjplZmZlY3RpdmVD
b250ZW50c1NjYWxlKCkKLXsKLSAgICByZXR1cm4gc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUo
KSA/IG1fY29udGVudHNTY2FsZSA6IDE7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRq
dXN0Q29udGVudHNTY2FsZSgpCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUgfHwgbV9tYWluQmFja2luZ1N0
b3JlLT5jb250ZW50c1NjYWxlKCkgPT0gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBuZXcgYmFja2luZyBzdG9y
ZSBhbmQgcGFpbnRpbmcgdGhlIGNvbnRlbnQsCi0gICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZHJv
cCB0aGUgcHJldmlvdXMgb25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluCi0gICAgLy8gYnJpZWZs
eSBzZWVpbmcgZmxpY2tlcmluZyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBkcm9wcGVkIGJlZm9y
ZQotICAgIC8vIHNvbWV0aGluZyByZXBsYWNlcyB0aGVtLgotICAgIG1fcHJldmlvdXNCYWNraW5n
U3RvcmUgPSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOwotCi0gICAgLy8gTm8gcmVhc29u
IHRvIHNhdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9yIG5vbi12aXNpYmxlIGFyZWFz
LgotICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUtPnJlbW92ZUFsbE5vblZpc2libGVUaWxlcygp
OwotCi0gICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6Y3JlYXRlQmFja2luZ1N0b3JlKCkKLXsKLSAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9w
dFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVU
aWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKSk7Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRT
dXBwb3J0c0FscGhhKCFjb250ZW50c09wYXF1ZSgpKTsKLSAgICBtX21haW5CYWNraW5nU3RvcmUt
PnNldENvbnRlbnRzU2NhbGUoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4
dCwgcmVjdCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQ
YWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKLXsKLX0KLQotYm9v
bCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1faW5VcGRhdGVNb2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+bGF5ZXJUcmVlVGlsZVVwZGF0ZXNB
bGxvd2VkKCk7Ci19Ci0KLUludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVDb250ZW50c1JlY3QoKQotewotICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwotfQotCi1ib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNob3Vs
ZFVzZVRpbGVkQmFja2luZ1N0b3JlKCkKLXsKLSAgICByZXR1cm4gIXNlbGZPckFuY2VzdG9ySGF2
ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKLX0KLQotSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0
aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAoIXNob3VsZFVzZVRpbGVk
QmFja2luZ1N0b3JlKCkpCi0gICAgICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRz
UmVjdCgpOwotCi0gICAgLy8gTm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4K
LSAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0ludmVydGlibGUoKSkKLSAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFJldHVybiBhIHByb2plY3Rpb24gb2Yg
dGhlIHZpc2libGUgcmVjdCAoc3VyZmFjZSBjb29yZGluYXRlcykgb250byB0aGUgbGF5ZXIncyBw
bGFuZSAobGF5ZXIgY29vcmRpbmF0ZXMpLgotICAgIC8vIFRoZSByZXN1bHRpbmcgcXVhZCBtaWdo
dCBiZSBzcXVld2VkIGFuZCB0aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBib3VuZGluZyBib3ggb2Yg
dGhpcyBxdWFkLAotICAgIC8vIHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJl
YWwgdmlzaWJsZSBhcmVhIChhbmQgdGhlbiBldmVuIG1vcmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3Zl
ciByZWN0IG11bHRpcGxpZXIpLgotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fbGF5ZXJU
cmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCkuY2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVh
ZChGbG9hdFF1YWQoRmxvYXRSZWN0KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dmlzaWJsZUNv
bnRlbnRzUmVjdCgpKSkpKTsKLX0KLQotQ29sb3IgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBjb250ZW50c09w
YXF1ZSgpID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OwotfQotCi1QYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gV2ViR3JhcGhpY3NMYXllcjo6YmVnaW5Db250
ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZVN1cmZhY2U6
OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIHJldHVy
biBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250
ZW50c09wYXF1ZSgpID8gMCA6IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSwgaGFuZGxl
LCBvZmZzZXQpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUoaW50IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QpCi17Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5jcmVhdGVUaWxl
KGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7Ci19Ci0KLXZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3dlYkdy
YXBoaWNzTGF5ZXJDbGllbnQtPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0
YXJnZXRSZWN0KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGludCB0
aWxlSUQpCi17Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5yZW1vdmVUaWxlKGlkKCks
IHRpbGVJRCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZl
cnMoKQotewotICAgIGlmICghZHJhd3NDb250ZW50KCkpIHsKLSAgICAgICAgbV9tYWluQmFja2lu
Z1N0b3JlLmNsZWFyKCk7Ci0gICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1faW5VcGRhdGVNb2RlID0gdHJ1ZTsKLSAg
ICAvLyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1haW4gdGlsZWQg
YmFja2luZyBzdG9yZSwgb25jZSB3ZQotICAgIC8vIGhhdmUgYSByZW1vdGUgY2xpZW50IGFuZCB3
ZSBhcmUgcmVhZHkgdG8gc2VuZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4KLSAgICBpZiAo
IW1fbWFpbkJhY2tpbmdTdG9yZSkKLSAgICAgICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAg
bV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOwotICAgIG1faW5VcGRhdGVN
b2RlID0gZmFsc2U7Ci0KLSAgICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBpcyBrZXB0
IGFyb3VuZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdlZW4KLSAgICAvLyByZW1vdmluZyB0aGUg
ZXhpc3RpbmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZpcnN0IHRpbWUK
LSAgICAvLyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92ZSB0aGUgcHJl
dmlvdXMgYmFja2luZyBzdG9yZS4KLSAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlLT52aXNpYmxl
QXJlYUlzQ292ZXJlZCgpKQotICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7
Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAg
ICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3Jl
LmNsZWFyKCk7Ci0KLSAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkgewot
ICAgICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9y
ZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgbV9sYXllckluZm8u
aW1hZ2VCYWNraW5nU3RvcmVJRCA9IDA7Ci0gICAgfQotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKLXsKLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50ID09IGNsaWVu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHJlcGxpY2Eg
PSB0b1dlYkdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpKQotICAgICAgICByZXBsaWNhLT5z
ZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7Ci0gICAgaWYgKFdlYkdyYXBoaWNzTGF5
ZXIqIG1hc2sgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobWFza0xheWVyKCkpKQotICAgICAgICBtYXNr
LT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHRoaXMtPmNoaWxkcmVuKClbaV0pOwotICAg
ICAgICBsYXllci0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOwotICAgIH0KLQot
ICAgIC8vIFdlIGhhdmUgdG8gcmVsZWFzZSByZXNvdXJjZXMgb24gdGhlIFVJIHByb2Nlc3MgaGVy
ZSBpZiB0aGUgcmVtb3RlIGNsaWVudCBoYXMgY2hhbmdlZCBvciBpcyByZW1vdmVkLgotICAgIGlm
IChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKLSAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVz
KCk7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+ZGV0YWNoTGF5ZXIodGhpcyk7
Ci0gICAgfQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCA9IGNsaWVudDsKLSAgICBpZiAo
Y2xpZW50KQotICAgICAgICBjbGllbnQtPmF0dGFjaExheWVyKHRoaXMpOwotfQotCi12b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OmFkanVzdFZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAobV9tYWluQmFj
a2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZO
ZWVkZWQoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNmb3JtZWRW
aXNpYmxlUmVjdCgpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0KQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IGZhbHNlOwotICAg
IG1fbGF5ZXJUcmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtKCkpOwotICAgIG1f
bGF5ZXJUcmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24oKSk7Ci0gICAgbV9sYXllclRyYW5z
Zm9ybS5zZXRBbmNob3JQb2ludChhbmNob3JQb2ludCgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3Jt
LnNldFNpemUoc2l6ZSgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldEZsYXR0ZW5pbmcoIXBy
ZXNlcnZlczNEKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
Y2hpbGRyZW5UcmFuc2Zvcm0oKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5jb21iaW5lVHJhbnNm
b3JtcyhwYXJlbnQoKSA/IHRvV2ViR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPm1fbGF5ZXJUcmFu
c2Zvcm0uY29tYmluZWRGb3JDaGlsZHJlbigpIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0K
LSAgICAvLyBUaGUgY29tYmluZWQgdHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxlZEJhY2tp
bmdTdG9yZVZpc2libGVSZWN0LgotICAgIGFkanVzdFZpc2libGVSZWN0KCk7Ci0gICAgYWRqdXN0
Q29udGVudHNTY2FsZSgpOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBj
cmVhdGVXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7Ci19Ci0KLXZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6aW5pdEZhY3RvcnkoKQotewotICAgIEdyYXBoaWNzTGF5ZXI6
OnNldEdyYXBoaWNzTGF5ZXJGYWN0b3J5KGNyZWF0ZVdlYkdyYXBoaWNzTGF5ZXIpOwotfQotCi1i
b29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9y
bXMoKQotewotICAgIGlmICghbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlzQWZmaW5lKCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHcmFwaGljc0xheWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNk
ZDc4MDYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHcmFwaGljc0xheWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAot
ICAgIC8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgV2Vi
R3JhcGhpY3NMYXllcl9oCi0jZGVmaW5lIFdlYkdyYXBoaWNzTGF5ZXJfaAotCi0jaW5jbHVkZSAi
RmxvYXRQb2ludDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIklt
YWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxheWVyVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3Rv
cmUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2luY2x1ZGUgIlRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZUlu
Zm8uaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29w
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgVVNFKFVJX1NJREVf
Q09NUE9TSVRJTkcpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBXZWJHcmFwaGljc0xheWVy
OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViR3JhcGhpY3NMYXllckNsaWVu
dCB7Ci1wdWJsaWM6Ci0gICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0g
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdl
KikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRf
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25z
dCBXZWJMYXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVu
KFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpID0gMDsKLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFBM
QVRGT1JNKFFUKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRv
a2VuKSA9IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVk
TGF5ZXJzKCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVh
YmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50
UG9pbnQmKSA9IDA7Ci19OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdlYkdy
YXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgotICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNs
aWVudAotewotcHVibGljOgotICAgIFdlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVu
dCopOwotICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzTGF5ZXIoKTsKLQotICAgIC8vIFJlaW1wbGVt
ZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgotICAgIGJvb2wgc2V0Q2hpbGRyZW4oY29u
c3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwotICAgIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NM
YXllciopOwotICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQpOwot
ICAgIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOwot
ICAgIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOwot
ICAgIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7Ci0g
ICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50Jik7Ci0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0Qm
KTsKLSAgICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCBzZXRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2b2lkIHNldENoaWxkcmVu
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBzZXRQcmVz
ZXJ2ZXMzRChib29sKTsKLSAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7Ci0gICAgdm9p
ZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c09wYXF1ZShib29s
KTsKLSAgICB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKTsKLSAgICB2b2lkIHNldE9w
YWNpdHkoZmxvYXQpOwotICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsK
LSAgICB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwotICAgIHZvaWQgc2V0Q29udGVu
dHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7Ci0gICAgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhp
Y3NMYXllciopOwotICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciop
OwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxh
eSgpOwotICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRWaXNp
YmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAg
dmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBib29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFJvb3RMYXllcihib29sKTsKLQotICAg
IFdlYktpdDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0OwotICAgIHN0YXRpYyBXZWJHcmFwaGljc0xh
eWVyKiBsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsKLSAgICB2b2lkIGRpZFN5bmNocm9u
aXplKCk7Ci0gICAgSW1hZ2UqIGltYWdlKCkgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQotCi0g
ICAgYm9vbCBmaXhlZFRvVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9y
dDsgfQotICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wgaXNGaXhlZCkgeyBtX2ZpeGVk
VG9WaWV3cG9ydCA9IGlzRml4ZWQ7IH0KLQotICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tUYXJnZXQo
KSBjb25zdCB7IHJldHVybiBtX21hc2tUYXJnZXQ7IH0KLSAgICB2b2lkIHNldE1hc2tUYXJnZXQo
R3JhcGhpY3NMYXllciogbGF5ZXIpIHsgbV9tYXNrVGFyZ2V0ID0gbGF5ZXI7IH0KLQotICAgIHN0
YXRpYyB2b2lkIGluaXRGYWN0b3J5KCk7Ci0KLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVu
dAotICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKLSAgICB2
aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQo
Y29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7Ci0gICAgdmlydHVhbCBib29sIHRp
bGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJl
Y3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKLSAgICB2aXJ0dWFsIEludFJlY3Qg
dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOwotICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRC
YWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLQotICAgIC8vIFRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0
aWxlSUQsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3Qg
V2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2Vi
Q29yZTo6SW50UG9pbnQmKTsKLQotICAgIHZvaWQgc2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChX
ZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKLSAgICB2b2lkIHN5bmNDaGlsZHJlbigp
OwotICAgIHZvaWQgc3luY0xheWVyU3RhdGUoKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0g
ICAgdm9pZCBzeW5jRmlsdGVycygpOwotI2VuZGlmCi0gICAgdm9pZCBzeW5jQ2FudmFzKCk7Ci0g
ICAgdm9pZCBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgdm9pZCBhZGp1c3RWaXNp
YmxlUmVjdCgpOwotICAgIGJvb2wgaXNSZWFkeUZvclRpbGVCdWZmZXJTd2FwKCkgY29uc3Q7Ci0g
ICAgdm9pZCB1cGRhdGVDb250ZW50QnVmZmVycygpOwotICAgIHZvaWQgcHVyZ2VCYWNraW5nU3Rv
cmVzKCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwot
ICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBtX2lkOwotICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1f
bGF5ZXJJbmZvOwotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKLSAgICBHcmFwaGljc0xheWVy
KiBtX21hc2tUYXJnZXQ7Ci0gICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBM
YXllclRyYW5zZm9ybSBtX2xheWVyVHJhbnNmb3JtOwotICAgIGJvb2wgbV9pblVwZGF0ZU1vZGUg
OiAxOwotICAgIGJvb2wgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdDogMTsKLSAgICBib29sIG1f
c2hvdWxkU3luY0xheWVyU3RhdGU6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNDaGlsZHJlbjog
MTsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZpbHRlcnM6IDE7Ci0gICAgYm9vbCBtX2ZpeGVkVG9W
aWV3cG9ydCA6IDE7Ci0gICAgYm9vbCBtX2NhbnZhc05lZWRzRGlzcGxheSA6IDE7Ci0KLSAgICB2
b2lkIG5vdGlmeUNoYW5nZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLSAgICB2
b2lkIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICB2b2lkIGRpZENoYW5nZUNoaWxkcmVuKCk7
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgZGlkQ2hhbmdlRmlsdGVycygpOwot
I2VuZGlmCi0KLSAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgYm9vbCBzZWxm
T3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Ci0gICAgYm9vbCBzaG91bGRVc2VU
aWxlZEJhY2tpbmdTdG9yZSgpOwotICAgIHZvaWQgYWRqdXN0Q29udGVudHNTY2FsZSgpOwotICAg
IHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKLSAgICB2b2lkIHN5bmNMYXll
clBhcmFtZXRlcnMoKTsKLSAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci0g
ICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOwotCi0gICAgV2ViS2l0OjpXZWJHcmFw
aGljc0xheWVyQ2xpZW50KiBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQ7Ci0gICAgT3duUHRyPFdl
YkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7Ci0gICAgT3duUHRy
PFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwotICAg
IGZsb2F0IG1fY29udGVudHNTY2FsZTsKLSAgICBQbGF0Zm9ybUxheWVyKiBtX2NhbnZhc1BsYXRm
b3JtTGF5ZXI7Ci19OwotCi1XZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3Jh
cGhpY3NMYXllciopOwotCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8vIFdlYkdyYXBoaWNzTGF5ZXJf
SApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApp
bmRleCA2ODVjYjgzLi43MWFhNjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1l
c3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rp
b24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopID0gMDsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAppbmRleCBkZGFkY2IxLi41ZTZk
NWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWFJbXBsLmNwcApAQCAtNjg5LDEwICs2ODksMTAgQEAgdm9pZCBEcmF3aW5nQXJlYUlt
cGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIH0KIAogI2lmIFVTRShVSV9TSURF
X0NPTVBPU0lUSU5HKQotdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVI
b3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNz
YWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKK3Zv
aWQgRHJhd2luZ0FyZWFJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNz
YWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewogICAgIGlmICht
X2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdl
KGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKaW5k
ZXggMzlkMDUxNS4uMmNlYmJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaApAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRlOgog
I2VuZGlmCiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwog
I2VuZGlmCiAKICAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U4NzM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVy
VHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGlu
YXRvci5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8u
aCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJHcmFw
aGljc0xheWVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1JlbmRlckxheWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IExheWVyVHJlZUNvb3JkaW5hdG9yKHdlYlBhZ2UpKTsKK30KKworTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6On5MYXllclRyZWVDb29yZGluYXRvcigpCit7CisgICAgLy8gUHJldmVudCBz
ZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KDApIC0+IGRldGFjaExheWVyKCkgZnJvbSBtb2RpZnlp
bmcgdGhlIHNldCB3aGlsZSB3ZSBpdGVyYXRlIGl0LgorICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7CisgICAgcmVnaXN0ZXJlZExheWVycy5z
d2FwKG1fcmVnaXN0ZXJlZExheWVycyk7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBm
b3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHJl
Z2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+
c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCgwKTsKK30KKworTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OkxheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCisgICAgOiBMYXllclRyZWVI
b3N0KHdlYlBhZ2UpCisgICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxz
ZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQorICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRy
dWUpCisgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9jb250ZW50c1NjYWxlKDEp
CisgICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQorICAgICwgbV9z
aG91bGRTeW5jRnJhbWUoZmFsc2UpCisgICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkK
KyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVDb29yZGluYXRvcjo6bGF5
ZXJGbHVzaFRpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0
cnVlKQoreworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5ZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgV2ViR3JhcGhpY3NMYXllciogd2ViUm9v
dExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICB3ZWJS
b290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9yb290
TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5hdG9yIHJvb3QgbGF5ZXIiKTsKKyNlbmRp
ZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExh
eWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRleHQu
d2ViTGF5ZXJJRCA9IHRvV2ViR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRo
aXMpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFdlYkdy
YXBoaWNzTGF5ZXJDbGllbnQodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3Igbm9uLWNvbXBv
c2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGls
ZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworCisgICAgaWYgKG1fd2ViUGFn
ZS0+aGFzUGFnZU92ZXJsYXkoKSkKKyAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwor
CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFi
bGVkKQoreworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZs
dXNoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKKworICAgIGlmIChtX2xheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZCkgeworICAgICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7Cisg
ICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVy
Rmx1c2hUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5z
dG9wKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFNob3VsZE5vdGlmeUFm
dGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVy
Rmx1c2gpCit7CisgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlB
ZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGls
ZHJlbigpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFx
dWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5z
cGFyZW50QmFja2dyb3VuZCgpKTsKKworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIg
dHJlZSBoaWVyYXJjaHkuCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmludmFsaWRhdGUoKQoreworICAgIGNhbmNlbFBlbmRpbmdM
YXllckZsdXNoKCk7CisKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX3Jvb3RMYXllciA9
IG51bGxwdHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikK
KyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7
CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAg
ICBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShzY3JvbGxSZWN0KTsKK30KKwor
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2l6ZURpZENo
YW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3Jvb3RM
YXllci0+c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExh
eWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBu
ZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkg
aXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxv
YXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBp
ZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhl
aWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xk
U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUu
d2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5l
d1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6
ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5o
ZWlnaHQoKSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZEluc3RhbGxQYWdlT3Zlcmxh
eSgpCit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRVbmluc3RhbGxQYWdl
T3ZlcmxheSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92
ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBB
U1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwor
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0IHZh
bHVlKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJs
YXlMYXllci0+c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9
CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygp
Cit7CisgICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUo
KS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKwor
ICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsK
KyAgICByZXR1cm4gZGlkU3luYzsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3lu
Y0xheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQorewor
ICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgeworICAgICAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7CisgICAg
ICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7CisgICAgfQorICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwg
aW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJDaGlsZHJl
bihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQorewor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJl
bihpZCwgY2hpbGRyZW4pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0Nh
bnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBn
cmFwaGljc1N1cmZhY2VUb2tlbikKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Cisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpT
eW5jQ2FudmFzKGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOworfQorCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xh
eWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJG
aWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Cit9CisjZW5kaWYKKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6YXR0YWNoTGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgQVNTRVJU
KCFtX3JlZ2lzdGVyZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKKyAgICBtX3JlZ2lzdGVyZWRM
YXllcnMuYWRkKGxheWVyKTsKKworICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVu
dHNTY2FsZSk7CisgICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyKQor
eworICAgIG1fcmVnaXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXIpOworICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKK30K
Kworc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXll
ciogcmVuZGVyTGF5ZXIpCit7CisgICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRo
ZSBjb25kaXRpb25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclBvc2l0aW9uLgorICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxh
eWVyLT5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsK
KyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVy
LT5yZW5kZXJlcigpLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+
aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXIt
PmlzU3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhp
Y3NMYXllcigpKTsKKyAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRl
ckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JT
ZWxmKHJlbmRlckxheWVyKTsKKworICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQor
ICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmly
c3RDaGlsZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCisgICAgICAg
IHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGlu
ZygpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkK
K3sKKyAgICBpZiAoIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4
ZWRQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3dlYlBh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmhhc0ZpeGVkT2JqZWN0cygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWlu
RnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVy
KCk7CisgICAgQVNTRVJUKHJvb3RSZW5kZXJMYXllcik7CisgICAgaWYgKHJvb3RSZW5kZXJMYXll
ci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXll
cihyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAgICBpZiAobV9pc1N1
c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgIGlmICghbV9pc1ZhbGlkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOworICAgIGZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIGlmICghbV9zaG91bGRTeW5jRnJhbWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKKyAgICAgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRS
b290Q29tcG9zaXRpbmdMYXllcih0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkp
LT5pZCgpKSk7CisgICAgICAgIG1fc2hvdWxkU3luY1Jvb3RMYXllciA9IGZhbHNlOworICAgIH0K
KworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6RGlkUmVuZGVyRnJhbWUoKSk7CisgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsK
KworICAgIGlmICghbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIExldCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25l
IGEgZmx1c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMuCisgICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0Fy
ZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXll
cnMoKTsKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworfQor
Cit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxM
YXllclRyZWVDb29yZGluYXRvcj4qKQoreworICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNo
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5
ZXIoKQoreworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKworICAgIG1fcGFnZU92
ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVH
CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBw
YWdlIG92ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUo
bV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92
ZXJsYXlMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ry
b3lQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsK
KyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VP
dmVybGF5TGF5ZXIgPSBudWxscHRyOworfQorCitpbnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9y
OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBpbnQ2NF90IGtleSA9
IDA7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBRUGl4bWFwKiBwaXhtYXAgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIGlmICghcGl4bWFwKQorICAgICAgICBy
ZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7
CisjZW5kaWYKKworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKworICAgIGlmIChpdCAh
PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7CisgICAgICAgICsr
KGl0LT5zZWNvbmQpOworICAgICAgICByZXR1cm4ga2V5OworICAgIH0KKworICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxl
KGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJs
ZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKKyAgICB7CisgICAgICAgIE93blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdl
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAgICBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUo
aGFuZGxlKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSwgaGFuZGxlKSk7Cisg
ICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKKyAgICBy
ZXR1cm4ga2V5OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW1hZ2VC
YWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVy
bjsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGl0LT5zZWNvbmQtLTsKKworICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZXN0
cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5KSk7Cit9CisKKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlmIChncmFwaGljc0xheWVy
ID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRy
YXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7CisgICAg
ICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNs
ZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBo
ZXJlLgorICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKKyAgICAg
ICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVn
Qm9yZGVycygpOworfQorCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaG93UmVwYWludENv
dW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7
Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0
KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihs
YXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlVw
ZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8p
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZShXZWJMYXllcklE
IGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwor
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOworfQorCitXZWJDb3JlOjpJbnRS
ZWN0IExheWVyVHJlZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZs
b2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGJv
b2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1JlY3Q7
CisgICAgYm9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUgIT0gbV9jb250ZW50c1Nj
YWxlOworCisgICAgaWYgKHRyYWplY3RvcnlWZWN0b3IgIT0gRmxvYXRQb2ludDo6emVybygpKQor
ICAgICAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdl
dCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVj
dG9yKTsKKworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2FsZURp
ZENoYW5nZSkgeworICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgICAg
ICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKworICAgICAgICBIYXNoU2V0PFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgp
OworICAgICAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVy
YXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hhbmdlKQorICAgICAgICAgICAgICAg
ICgqaXQpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICAgICAgICAgIGlmIChjb250ZW50
c1JlY3REaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPmFkanVzdFZpc2libGVSZWN0
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBp
ZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKQorICAgICAgICBtX3dlYlBhZ2UtPnNldEZp
eGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFu
Z2UpCisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBt
X3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3YXBCdWZmZXJzKCk7Cit9CisKK2Jvb2wgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFtX2lzU3VzcGVuZGVkICYmICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7Cisg
ICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1f
cmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKwor
ICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOwor
ICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdz
LCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0Nv
bnRleHQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldOwor
ICAgICAgICBpZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgeworICAgICAgICAgICAgLy8gVGhp
cyB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2Uu
CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25BdmFp
bGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKGdyYXBo
aWNzQ29udGV4dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVh
c2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1
ZmZlckRpbWVuc2lvbiA9IDIwMDA7CisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRhdGVB
dGxhcyhTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpOworICAgIHJldHVybiBtX3VwZGF0
ZUF0bGFzZXMubGFzdCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNp
emUsIG9mZnNldCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVy
VHJlZUNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iYzQ0OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5k
ZWYgTGF5ZXJUcmVlQ29vcmRpbmF0b3JfaAorI2RlZmluZSBMYXllclRyZWVDb29yZGluYXRvcl9o
CisKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9z
dC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNpbmNs
dWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
Q2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIExheWVyVHJlZUNv
b3JkaW5hdG9yIDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bGllbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkdyYXBoaWNzTGF5
ZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJlZUNvb3Jk
aW5hdG9yPiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZUNvb3JkaW5h
dG9yKCk7CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmco
KTsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4
dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5l
eHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29t
cG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVu
dHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3Jv
bGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1
YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRJ
bnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92
ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9w
YWNpdHkoZmxvYXQpOworICAgIHZpcnR1YWwgYm9vbCBwYWdlT3ZlcmxheVNob3VsZEFwcGx5RmFk
ZVdoZW5QYWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CisgICAgdmlydHVh
bCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVs
ZUxheWVyRmx1c2goKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENo
YW5nZSgpIHsgfQorICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdl
YkNvcmU6OkltYWdlKik7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9y
ZShpbnQ2NF90KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJh
Y2tpbmdTdG9yZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxv
d2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50Jik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2Vi
TGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXll
ckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpOworI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJM
YXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyAgICB2
aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciop
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKKworICAgIHZpcnR1YWwgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKworcHJvdGVjdGVkOgorICAgIGV4
cGxpY2l0IExheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICAv
LyBHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKKyAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NM
YXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7CisKKyAgICAvLyBMYXllclRyZWVDb29yZGlu
YXRvcgorICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgZGVzdHJv
eVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygp
OworICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHBlcmZvcm1T
Y2hlZHVsZWRMYXllckZsdXNoKCk7CisgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOworCisgICAg
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgLy8gVGhl
IGxheWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93
blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7
CisKKyAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUn
cyBubyBwYWdlIG92ZXJsYXkuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1f
cGFnZU92ZXJsYXlMYXllcjsKKworICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
cio+IG1fcmVnaXN0ZXJlZExheWVyczsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKKyAgICBWZWN0b3I8VXBkYXRlQXRsYXM+IG1f
dXBkYXRlQXRsYXNlczsKKworICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1
c2g7CisgICAgYm9vbCBtX2lzVmFsaWQ7CisKKyAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2Vz
czsKKyAgICBib29sIG1faXNTdXNwZW5kZWQ7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2li
bGVDb250ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIGJvb2wgbV9z
aG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CisKKyAgICBMYXllclRyZWVDb250ZXh0IG1f
bGF5ZXJUcmVlQ29udGV4dDsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAgIGJvb2wg
bV9zaG91bGRTeW5jUm9vdExheWVyOworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7CisgICAgV2ViQ29yZTo6VGltZXI8
TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIGJvb2wgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXllclRyZWVD
b29yZGluYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYWZmNmY5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI3IEBACisjCisjICAgIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyMKKyMgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorIworCisKKyNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKK21lc3NhZ2VzIC0+IExheWVy
VHJlZUNvb3JkaW5hdG9yIHsKKyAgICBTZXRWaXNpYmxlQ29udGVudHNSZWN0KFdlYkNvcmU6Oklu
dFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9p
bnQgdHJhamVjdG9yeVZlY3RvcnkpCisgICAgUmVuZGVyTmV4dEZyYW1lKCkKKyAgICBQdXJnZUJh
Y2tpbmdTdG9yZXMoKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iv
V2ViR3JhcGhpY3NMYXllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NTgxNDkxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcApAQCAtMCwwICsx
LDc0NiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIldl
YkdyYXBoaWNzTGF5ZXIuaCIKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgorI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgSGFzaE1hcDxXZWJMYXllcklELCBX
ZWJHcmFwaGljc0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCit7CisgICAgc3RhdGljIEhhc2hNYXA8
V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKKyAgICByZXR1cm4gZ2xv
YmFsTWFwOworfQorCitXZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5
SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQoreworICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2Vi
R3JhcGhpY3NMYXllcio+JiB0YWJsZSA9IGxheWVyQnlJRE1hcCgpOworICAgIEhhc2hNYXA8V2Vi
TGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZpbmQoaWQp
OworICAgIGlmIChpdCA9PSB0YWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7Cit9CisKK3N0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFw
aGljc0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5
ZXIobGF5ZXIpLT5pZCgpIDogMDsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRDaGFu
Z2VMYXllclN0YXRlKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKKyAg
ICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhp
cyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4oKQorewor
ICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAg
ICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9CisKKyNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRlcnMoKQor
eworICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAg
ICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKyNlbmRpZgorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKK3sKKyAg
ICBpZiAoIXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKGNo
aWxkcmVuKClbaV0pLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworICAgIGlmIChyZXBs
aWNhTGF5ZXIoKSkKKyAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKS0+
c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpkaWRDaGFuZ2VHZW9tZXRyeSgpCit7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAg
IHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Cit9CisKK1dlYkdyYXBoaWNzTGF5ZXI6Oldl
YkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorICAgIDogR3JhcGhp
Y3NMYXllcihjbGllbnQpCisgICAgLCBtX21hc2tUYXJnZXQoMCkKKyAgICAsIG1faW5VcGRhdGVN
b2RlKGZhbHNlKQorICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQorICAgICwg
bV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQorICAgICwgbV9zaG91bGRTeW5jQ2hpbGRyZW4o
dHJ1ZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQorICAgICwgbV9jYW52YXNOZWVk
c0Rpc3BsYXkoZmFsc2UpCisgICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkKKyAgICAs
IG1fY29udGVudHNTY2FsZSgxKQorICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCit7Cisg
ICAgc3RhdGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOworICAgIG1faWQgPSBuZXh0TGF5
ZXJJRCsrOworICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsKK30KKworV2ViR3Jh
cGhpY3NMYXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQoreworICAgIGxheWVyQnlJRE1hcCgpLnJl
bW92ZShpZCgpKTsKKworICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKKyAgICAg
ICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVu
dC0+ZGV0YWNoTGF5ZXIodGhpcyk7CisgICAgfQorICAgIHdpbGxCZURlc3Ryb3llZCgpOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgR3JhcGhp
Y3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7Cisg
ICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICBp
ZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
aGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBjaGlsZCA9
IHRvV2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7CisgICAgICAgIGNoaWxkLT5zZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgICAgIGNo
aWxkLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgfQorICAgIGRpZENoYW5nZUNoaWxkcmVu
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQo
bGF5ZXIpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5
ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5
ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4o
KTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NM
YXllciogbGF5ZXIsIGludCBpbmRleCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0
SW5kZXgobGF5ZXIsIGluZGV4KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRX
ZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9X
ZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIGRpZENo
YW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92
ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBH
cmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b1dlYkdy
YXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NM
YXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVy
LCBzaWJsaW5nKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGlj
c0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9XZWJHcmFwaGlj
c0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIGRpZENoYW5nZUNoaWxk
cmVuKCk7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNz
TGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBib29sIG9r
ID0gR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7CisgICAg
aWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7
CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPnNldFdlYkdyYXBoaWNzTGF5ZXJD
bGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIo
bmV3Q2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgaWYgKFdl
YkdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVudCgp
KSkKKyAgICAgICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgR3JhcGhp
Y3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHApCit7CisgICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnko
KTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9h
dFBvaW50M0QmIHApCit7CisgICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7CisgICAgZGlkQ2hh
bmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7CisgICAgc2V0
TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICBtYXNrTGF5ZXIo
KS0+c2V0U2l6ZShzaXplKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dCkKK3sKKyAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7
Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKGNoaWxkcmVuVHJhbnNmb3JtKCkg
PT0gdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5U
cmFuc2Zvcm0odCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCit7CisgICAgaWYgKHByZXNlcnZlczNE
KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2Vy
dmVzM0QoYik7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKK3sKKyAgICBpZiAobWFza3NUb0JvdW5k
cygpID09IGIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1Rv
Qm91bmRzKGIpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50
KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29u
dGVudChiKTsKKworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRz
T3BhcXVlKCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX21haW5CYWNraW5nU3Rv
cmUpCisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghYik7Cisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7CisgICAgZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJp
bGl0eShib29sIGIpCit7CisgICAgaWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShi
KTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQoreworICAgIGlmICh0aGlzLT5vcGFjaXR5KCkg
PT0gb3BhY2l0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
aWYgKGNvbnRlbnRzUmVjdCgpID09IHIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQorewor
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlOworICAgIHNldENvbnRlbnRzVG9JbWFn
ZSgwKTsKKyAgICBzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOworICAgIG1fY2FudmFz
TmVlZHNEaXNwbGF5ID0gdHJ1ZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9jYW52
YXNQbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKKyAgICBtX2NhbnZhc05lZWRzRGlzcGxh
eSA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3lu
Y1JlcXVpcmVkKHRoaXMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorYm9vbCBXZWJH
cmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG5ld0ZpbHRl
cnMpCit7CisgICAgaWYgKGZpbHRlcnMoKSA9PSBuZXdGaWx0ZXJzKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkaWRDaGFuZ2VGaWx0ZXJzKCk7CisgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6
OnNldEZpbHRlcnMobmV3RmlsdGVycyk7Cit9CisjZW5kaWYKKworCit2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKGltYWdl
ID09IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQ2NF90IG5ld0lEID0gMDsKKyAg
ICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7CisgICAgICAgIC8vIFdlIGFkb3B0IGZp
cnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBhdm9pZCBk
ZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KKyAgICAgICAgbmV3SUQgPSBtX3dl
YkdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoaW1hZ2UpOworICAg
ICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSht
X2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOworICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCAmJiBu
ZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG1fd2ViR3JhcGhpY3NMYXllckNsaWVu
dCBpcyBub3Qgc2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBzdG9yZSBJRC4KKyAg
ICAgICAgQVNTRVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAg
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIH0KKworICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFj
a2luZ1N0b3JlSUQgPSBuZXdJRDsKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVy
ID09IG1hc2tMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpz
ZXRNYXNrTGF5ZXIobGF5ZXIpOworCisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbGF5ZXItPnNldFNpemUoc2l6ZSgpKTsKKyAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJH
cmFwaGljc0xheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKKyAgICB3ZWJHcmFwaGlj
c0xheWVyLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVu
dCk7CisgICAgd2ViR3JhcGhpY3NMYXllci0+c2V0TWFza1RhcmdldCh0aGlzKTsKKyAgICB3ZWJH
cmFwaGljc0xheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOworCit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IHJlcGxpY2FMYXll
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobGF5ZXIpCisgICAgICAgIHRvV2ViR3Jh
cGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGlj
c0xheWVyQ2xpZW50KTsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVy
KGxheWVyKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCku
aGVpZ2h0KCkpKSk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0
b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0
KSk7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCitXZWJMYXllcklEIFdlYkdyYXBo
aWNzTGF5ZXI6OmlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZDsKK30KKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b1dlYkdyYXBoaWNzTGF5ZXIo
bWFza0xheWVyKCkpKQorICAgICAgICBtYXNrLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKKworICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiByZXBsaWNhID0gdG9XZWJH
cmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKKyAgICAgICAgcmVwbGljYS0+c3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBtX3dlYkdyYXBoaWNzTGF5ZXJD
bGllbnQtPnN5bmNGaXhlZExheWVycygpOworCisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpCisgICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRl
KHJlY3QpOworfQorCitXZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhp
Y3NMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkdyYXBoaWNzTGF5
ZXIqPihsYXllcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkK
K3sKKyAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQorICAgICAgICByZXR1cm47CisgICAg
bV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gY2hp
bGRJRHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytp
KQorICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsK
KworICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwg
Y2hpbGRJRHMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzeW5jRmlsdGVycygpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOworICAgIG1f
d2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkp
OworfQorI2VuZGlmCisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQor
eworICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5maXhlZFRv
Vmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKKworICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBv
aW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICBtX2xheWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBi
YWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9
IGNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBj
b250ZW50c09wYXF1ZSgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRz
UmVjdCgpOworICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOwor
ICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xheWVyKCkpOworICAgIG1f
bGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CisgICAgbV9sYXllcklu
Zm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKKyAgICBtX2xheWVySW5mby5wYXJlbnQgPSB0b1dlYkxh
eWVySUQocGFyZW50KCkpOworICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7CisgICAg
bV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOworICAgIG1fbGF5ZXJJbmZv
LnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOworICAgIG1fbGF5ZXJJbmZv
LnNpemUgPSBzaXplKCk7CisgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7
CisgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xh
eWVySW5mbyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcygpCit7Cisg
ICAgaWYgKCFtX2NhbnZhc05lZWRzRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuID0gbV9jYW52
YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKKyAgICBtX3dlYkdyYXBo
aWNzTGF5ZXJDbGllbnQtPnN5bmNDYW52YXMobV9pZCwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwg
c2l6ZSgpLmhlaWdodCgpKSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworI2VuZGlmCisgICAgbV9j
YW52YXNOZWVkc0Rpc3BsYXkgPSBmYWxzZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpl
bnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgICAg
ICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gbV93ZWJHcmFwaGljc0xheWVyQ2xp
ZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKG1faW1hZ2UuZ2V0KCkpOworfQorCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7
CisgICAgLy8gVGhlIHJlbW90ZSBpbWFnZSBtaWdodCBoYXZlIGJlZW4gcmVsZWFzZWQgYnkgcHVy
Z2VCYWNraW5nU3RvcmVzLgorICAgIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7CisgICAgY29t
cHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKKyAgICBzeW5jQ2hpbGRyZW4oKTsKKyAgICBz
eW5jTGF5ZXJTdGF0ZSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBzeW5jRmlsdGVy
cygpOworI2VuZGlmCisgICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICBzeW5jQ2FudmFz
KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJl
Z2luKCkKK3sKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBp
c1Jvb3QpCit7CisgICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7CisgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2li
bGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9y
eVZlY3RvcikKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5C
YWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQodHJhamVjdG9yeVZlY3Rvcik7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkK
K3sKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKKyAgICBhZGp1c3RDb250ZW50c1NjYWxl
KCk7Cit9CisKK2Zsb2F0IFdlYkdyYXBoaWNzTGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUo
KQoreworICAgIHJldHVybiBzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpID8gbV9jb250ZW50
c1NjYWxlIDogMTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGp1c3RDb250ZW50c1Nj
YWxlKCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSB8fCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRz
U2NhbGUoKSA9PSBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGlu
ZyB0aGUgY29udGVudCwKKyAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2aW91
cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQgaW4KKyAgICAvLyBicmllZmx5IHNlZWluZyBmbGlj
a2VyaW5nIGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQgYmVmb3JlCisgICAgLy8gc29t
ZXRoaW5nIHJlcGxhY2VzIHRoZW0uCisgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFp
bkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisKKyAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUg
cHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMuCisgICAgbV9wcmV2
aW91c0JhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCk7CisKKyAgICBjcmVh
dGVCYWNraW5nU3RvcmUoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNr
aW5nU3RvcmUoKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxl
ZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpj
cmVhdGUodGhpcykpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEo
IWNvbnRlbnRzT3BhcXVlKCkpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNT
Y2FsZShlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQoreworfQorCitib29sIFdlYkdyYXBoaWNz
TGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIGlm
ICghbV9pblVwZGF0ZU1vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV93
ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5sYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsKK30K
KworSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVj
dCgpCit7CisgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5o
ZWlnaHQoKSk7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2hvdWxkVXNlVGlsZWRCYWNr
aW5nU3RvcmUoKQoreworICAgIHJldHVybiAhc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJh
bnNmb3JtcygpOworfQorCitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0
b3JlVmlzaWJsZVJlY3QoKQoreworICAgIGlmICghc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUo
KSkKKyAgICAgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCk7CisKKyAg
ICAvLyBOb24taW52ZXJ0aWJsZSBsYXllcnMgYXJlIG5vdCB2aXNpYmxlLgorICAgIGlmICghbV9s
YXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworCisgICAgLy8gUmV0dXJuIGEgcHJvamVjdGlvbiBvZiB0aGUgdmlzaWJsZSBy
ZWN0IChzdXJmYWNlIGNvb3JkaW5hdGVzKSBvbnRvIHRoZSBsYXllcidzIHBsYW5lIChsYXllciBj
b29yZGluYXRlcykuCisgICAgLy8gVGhlIHJlc3VsdGluZyBxdWFkIG1pZ2h0IGJlIHNxdWV3ZWQg
YW5kIHRoZSB2aXNpYmxlIHJlY3QgaXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGlzIHF1YWQsCisg
ICAgLy8gc28gaXQgbWlnaHQgc3ByZWFkIGZ1cnRoZXIgdGhhbiB0aGUgcmVhbCB2aXNpYmxlIGFy
ZWEgKGFuZCB0aGVuIGV2ZW4gbW9yZSBhbXBsaWZpZWQgYnkgdGhlIGNvdmVyIHJlY3QgbXVsdGlw
bGllcikuCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9sYXllclRyYW5zZm9ybS5jb21i
aW5lZCgpLmludmVyc2UoKS5jbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKEZsb2F0UXVhZChG
bG9hdFJlY3QobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT52aXNpYmxlQ29udGVudHNSZWN0KCkp
KSkpOworfQorCitDb2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tn
cm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xv
cjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5k
bGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJuIG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkg
PyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhLCBoYW5kbGUsIG9mZnNldCk7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBT
dXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkK
K3sKKyAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlE
LCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp1
cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fd2ViR3JhcGhpY3NMYXllckNs
aWVudC0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3QpOwor
fQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAg
ICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCit7CisgICAg
aWYgKCFkcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIo
KTsKKyAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9pblVwZGF0ZU1vZGUgPSB0cnVlOworICAgIC8vIFRoaXMgaXMg
dGhlIG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0aGUgbWFpbiB0aWxlZCBiYWNraW5nIHN0b3Jl
LCBvbmNlIHdlCisgICAgLy8gaGF2ZSBhIHJlbW90ZSBjbGllbnQgYW5kIHdlIGFyZSByZWFkeSB0
byBzZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBwcm9jZXNzLgorICAgIGlmICghbV9tYWluQmFja2lu
Z1N0b3JlKQorICAgICAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBtX21haW5CYWNraW5n
U3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7CisgICAgbV9pblVwZGF0ZU1vZGUgPSBmYWxzZTsK
KworICAgIC8vIFRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGlzIGtlcHQgYXJvdW5kIHRvIGF2
b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgorICAgIC8vIHJlbW92aW5nIHRoZSBleGlzdGluZyB0aWxl
cyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBUaGUgZmlyc3QgdGltZQorICAgIC8vIHRoZSB2
aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQgd2UgcmVtb3ZlIHRoZSBwcmV2aW91cyBiYWNraW5n
IHN0b3JlLgorICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUtPnZpc2libGVBcmVhSXNDb3ZlcmVk
KCkpCisgICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKK30KKwordm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQoreworICAgIG1fbWFpbkJhY2tp
bmdTdG9yZS5jbGVhcigpOworICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKKwor
ICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKSB7CisgICAgICAgIG1fd2Vi
R3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZv
LmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEID0gMDsKKyAgICB9CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlk
Q2hhbmdlQ2hpbGRyZW4oKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRXZWJHcmFw
aGljc0xheWVyQ2xpZW50KFdlYktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQor
eworICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQgPT0gY2xpZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvV2ViR3JhcGhp
Y3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgIHJlcGxpY2EtPnNldFdlYkdyYXBoaWNz
TGF5ZXJDbGllbnQoY2xpZW50KTsKKyAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogbWFzayA9IHRv
V2ViR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCisgICAgICAgIG1hc2stPnNldFdlYkdyYXBo
aWNzTGF5ZXJDbGllbnQoY2xpZW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxk
cmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0
b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7CisgICAgICAgIGxheWVyLT5z
ZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7CisgICAgfQorCisgICAgLy8gV2UgaGF2
ZSB0byByZWxlYXNlIHJlc291cmNlcyBvbiB0aGUgVUkgcHJvY2VzcyBoZXJlIGlmIHRoZSByZW1v
dGUgY2xpZW50IGhhcyBjaGFuZ2VkIG9yIGlzIHJlbW92ZWQuCisgICAgaWYgKG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudCkgeworICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICAgICAg
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5kZXRhY2hMYXllcih0aGlzKTsKKyAgICB9CisgICAg
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50ID0gY2xpZW50OworICAgIGlmIChjbGllbnQpCisgICAg
ICAgIGNsaWVudC0+YXR0YWNoTGF5ZXIodGhpcyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6YWRqdXN0VmlzaWJsZVJlY3QoKQoreworICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCisg
ICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCkK
K3sKKyAgICBpZiAoIW1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFsc2U7CisgICAgbV9sYXllclRyYW5z
Zm9ybS5zZXRMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0oKSk7CisgICAgbV9sYXllclRyYW5zZm9y
bS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldEFuY2hv
clBvaW50KGFuY2hvclBvaW50KCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0U2l6ZShzaXpl
KCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0RmxhdHRlbmluZyghcHJlc2VydmVzM0QoKSk7
CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRDaGlsZHJlblRyYW5zZm9ybShjaGlsZHJlblRyYW5z
Zm9ybSgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVUcmFuc2Zvcm1zKHBhcmVudCgp
ID8gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+bV9sYXllclRyYW5zZm9ybS5jb21iaW5l
ZEZvckNoaWxkcmVuKCkgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKworICAgIC8vIFRoZSBj
b21iaW5lZCB0cmFuc2Zvcm0gd2lsbCBiZSB1c2VkIGluIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJs
ZVJlY3QuCisgICAgYWRqdXN0VmlzaWJsZVJlY3QoKTsKKyAgICBhZGp1c3RDb250ZW50c1NjYWxl
KCk7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZVdlYkdyYXBo
aWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgV2ViR3JhcGhpY3NMYXllcihjbGllbnQpKTsKK30KKwordm9pZCBXZWJHcmFwaGlj
c0xheWVyOjppbml0RmFjdG9yeSgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0R3JhcGhpY3NM
YXllckZhY3RvcnkoY3JlYXRlV2ViR3JhcGhpY3NMYXllcik7Cit9CisKK2Jvb2wgV2ViR3JhcGhp
Y3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpCit7CisgICAg
aWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9y
L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjQ5YzlhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xh
eWVyLmgKQEAgLTAsMCArMSwyMDcgQEAKKyAgICAvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworCisjaWZuZGVmIFdlYkdyYXBoaWNzTGF5ZXJfaAorI2RlZmluZSBXZWJHcmFw
aGljc0xheWVyX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJMYXllclRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgor
I2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3Rv
cmVDbGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKKyNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIK
KyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgV2ViR3JhcGhpY3NMYXllcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIC8vIFRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50
IHRpbGVJRCkgPSAwOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250
ZW50c1JlY3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRh
dGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJh
Y2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xh
eWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5
ZXJJRD4mKSA9IDA7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnMmKSA9IDA7CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1
aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikgPSAwOworI2VuZGlmCisgICAgdmlydHVhbCB2
b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZh
Y2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOworfTsKK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBXZWJHcmFwaGljc0xheWVyIDogcHVibGljIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgVGlsZWRCYWNraW5n
U3RvcmVDbGllbnQKKyAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViS2l0OjpUaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQgeworcHVibGljOgorICAgIFdlYkdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzTGF5
ZXIoKTsKKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgor
ICAgIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOworICAg
IHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4
KEdyYXBoaWNzTGF5ZXIqLCBpbnQpOworICAgIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xh
eWVyKiwgR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xh
eWVyKiwgR3JhcGhpY3NMYXllciopOworICAgIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5
ZXIqLCBHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAg
dm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzZXRBbmNob3JQ
b2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRT
aXplJik7CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKKyAgICB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKKyAgICB2b2lkIHNldE1hc2tz
VG9Cb3VuZHMoYm9vbCk7CisgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7CisgICAgdm9p
ZCBzZXRDb250ZW50c09wYXF1ZShib29sKTsKKyAgICB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0
eShib29sKTsKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZvaWQgc2V0Q29udGVu
dHNSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFn
ZSopOworICAgIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CisgICAg
dm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0UmVwbGljYXRl
ZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9p
ZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShm
bG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNv
bnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUo
Y29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIHNl
dEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisKKyAgICB2b2lkIHNl
dFJvb3RMYXllcihib29sKTsKKworICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0Owor
ICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklE
KTsKKyAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CisgICAgSW1hZ2UqIGltYWdlKCkgeyByZXR1
cm4gbV9pbWFnZS5nZXQoKTsgfQorCisgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQoKSBjb25zdCB7
IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9ydDsgfQorICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0
KGJvb2wgaXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7IH0KKworICAgIEdy
YXBoaWNzTGF5ZXIqIG1hc2tUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX21hc2tUYXJnZXQ7IH0K
KyAgICB2b2lkIHNldE1hc2tUYXJnZXQoR3JhcGhpY3NMYXllciogbGF5ZXIpIHsgbV9tYXNrVGFy
Z2V0ID0gbGF5ZXI7IH0KKworICAgIHN0YXRpYyB2b2lkIGluaXRGYWN0b3J5KCk7CisKKyAgICAv
LyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdT
dG9yZVBhaW50QmVnaW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWlu
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRp
bGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJl
YSk7CisgICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3Qo
KTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOwor
ICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKKworICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAorICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0
ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGls
ZUlEKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBi
ZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYktpdDo6U2hhcmVh
YmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKKworICAgIHZvaWQgc2V0
V2ViR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqKTsK
KyAgICB2b2lkIHN5bmNDaGlsZHJlbigpOworICAgIHZvaWQgc3luY0xheWVyU3RhdGUoKTsKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzeW5jRmlsdGVycygpOworI2VuZGlmCisg
ICAgdm9pZCBzeW5jQ2FudmFzKCk7CisgICAgdm9pZCBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgp
OworCisgICAgdm9pZCBhZGp1c3RWaXNpYmxlUmVjdCgpOworICAgIGJvb2wgaXNSZWFkeUZvclRp
bGVCdWZmZXJTd2FwKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVDb250ZW50QnVmZmVycygpOwor
ICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2
b2lkIHdpbGxCZURlc3Ryb3llZCgpOworICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBtX2lkOworICAg
IFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOworICAgIFJlZlB0cjxJbWFnZT4gbV9p
bWFnZTsKKyAgICBHcmFwaGljc0xheWVyKiBtX21hc2tUYXJnZXQ7CisgICAgRmxvYXRSZWN0IG1f
bmVlZHNEaXNwbGF5UmVjdDsKKyAgICBMYXllclRyYW5zZm9ybSBtX2xheWVyVHJhbnNmb3JtOwor
ICAgIGJvb2wgbV9pblVwZGF0ZU1vZGUgOiAxOworICAgIGJvb2wgbV9zaG91bGRVcGRhdGVWaXNp
YmxlUmVjdDogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0xheWVyU3RhdGU6IDE7CisgICAgYm9v
bCBtX3Nob3VsZFN5bmNDaGlsZHJlbjogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZpbHRlcnM6
IDE7CisgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydCA6IDE7CisgICAgYm9vbCBtX2NhbnZhc05l
ZWRzRGlzcGxheSA6IDE7CisKKyAgICB2b2lkIG5vdGlmeUNoYW5nZSgpOworICAgIHZvaWQgZGlk
Q2hhbmdlR2VvbWV0cnkoKTsKKyAgICB2b2lkIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICB2
b2lkIGRpZENoYW5nZUNoaWxkcmVuKCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZv
aWQgZGlkQ2hhbmdlRmlsdGVycygpOworI2VuZGlmCisKKyAgICB2b2lkIGNyZWF0ZUJhY2tpbmdT
dG9yZSgpOworCisgICAgYm9vbCBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1z
KCk7CisgICAgYm9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpOworICAgIHZvaWQgYWRq
dXN0Q29udGVudHNTY2FsZSgpOworICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJl
Y3QoKTsKKyAgICB2b2lkIHN5bmNMYXllclBhcmFtZXRlcnMoKTsKKyAgICB2b2lkIHNldFNob3Vs
ZFVwZGF0ZVZpc2libGVSZWN0KCk7CisgICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgp
OworCisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0xheWVyQ2xpZW50KiBtX3dlYkdyYXBoaWNzTGF5
ZXJDbGllbnQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5C
YWNraW5nU3RvcmU7CisgICAgT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3By
ZXZpb3VzQmFja2luZ1N0b3JlOworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyAgICBQbGF0
Zm9ybUxheWVyKiBtX2NhbnZhc1BsYXRmb3JtTGF5ZXI7Cit9OworCitXZWJHcmFwaGljc0xheWVy
KiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOworCit9CisjZW5kaWYKKworI2Vu
ZGlmIC8vIFdlYkdyYXBoaWNzTGF5ZXJfSApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDVhOWI4YjQuLmJmMDExZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCi0jaW5j
bHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCkBAIC01Myw3ICs1Myw3IEBAIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdD4gTGF5ZXJUcmVl
SG9zdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCiAjZWxpZiBQTEFURk9STShXSU4pICYmIEhB
VkUoV0tRQ0EpCiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQVdpbjo6Y3JlYXRlKHdlYlBhZ2Up
OwogI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgcmV0dXJuIExheWVyVHJlZUhvc3RRdDo6Y3JlYXRl
KHdlYlBhZ2UpOworICAgIHJldHVybiBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlKHdlYlBh
Z2UpOwogI2VsaWYgUExBVEZPUk0oR1RLKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAg
cmV0dXJuIExheWVyVHJlZUhvc3RHdGs6OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbHNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAppbmRleCBl
NTAzYzIzLi5iNDljYzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVIb3N0LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKikgPSAwOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3Nh
Z2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTIwZGUyLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3Nh
Z2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIwotIyAgICBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0j
Ci0jICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSMgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0jICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0jICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0j
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSMgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSMKLQotCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi1tZXNzYWdlcyAt
PiBMYXllclRyZWVIb3N0IHsKLSAgICBTZXRWaXNpYmxlQ29udGVudHNSZWN0KFdlYkNvcmU6Oklu
dFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9p
bnQgdHJhamVjdG9yeVZlY3RvcnkpCi0gICAgUmVuZGVyTmV4dEZyYW1lKCkKLSAgICBQdXJnZUJh
Y2tpbmdTdG9yZXMoKQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOTUzZTliMDQ2Li5iNGUxOWJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0yNjA1LDkgKzI2MDUs
OSBAQCB2b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZwogICAgIH0KIAogI2lmIFVTRShUSUxFRF9CQUNL
SU5HX1NUT1JFKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1lc3Nh
Z2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0PigpKSB7CisgICAgaWYg
KG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvcj4o
KSkgewogICAgICAgICBpZiAobV9kcmF3aW5nQXJlYSkKLSAgICAgICAgICAgIG1fZHJhd2luZ0Fy
ZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQs
IGFyZ3VtZW50cyk7CisgICAgICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJU
cmVlQ29vcmRpbmF0b3JNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMWZhOTFhYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDU3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RRdC5oIgotCi0jaW5jbHVkZSAiRHJh
d2luZ0FyZWFJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNp
bmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgotI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdl
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlclZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFzc1JlZlB0cjxMYXll
clRyZWVIb3N0UXQ+IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOwotfQot
Ci1MYXllclRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQoKQotewotICAgIC8vIFByZXZlbnQg
c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20gbW9kaWZ5
aW5nIHRoZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KLSAgICBIYXNoU2V0PFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOwotICAgIHJlZ2lzdGVyZWRMYXllcnMu
c3dhcChtX3JlZ2lzdGVyZWRMYXllcnMpOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IHJlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBy
ZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCkt
PnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCk7Ci19Ci0KLUxheWVyVHJlZUhvc3RRdDo6TGF5
ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBh
Z2UpCi0gICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAs
IG1faXNWYWxpZCh0cnVlKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCi0gICAg
LCBtX2lzU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBt
X3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5j
RnJhbWUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKLSAgICAsIG1f
bGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1lckZp
cmVkKQotICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKLXsKLSAgICAv
LyBDcmVhdGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKHRoaXMpOwotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYlJvb3RMYXllciA9IHRvV2Vi
R3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAgd2ViUm9vdExheWVyLT5zZXRS
b290TGF5ZXIodHJ1ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcm9vdExheWVyLT5zZXROYW1l
KCJMYXllclRyZWVIb3N0UXQgcm9vdCBsYXllciIpOwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXIt
PnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9XZWJH
cmFwaGljc0xheWVyKHdlYlJvb3RMYXllciktPmlkKCk7Ci0KLSAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0gICAgdG9XZWJHcmFw
aGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCh0
aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROYW1lKCJMYXllclRyZWVIb3N0UXQgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOwotI2VuZGlm
Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6
ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAg
ICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0Vu
YWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
YW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2No
ZWR1bGVMYXllckZsdXNoKCkKLXsKLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBt
X2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRT
aG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoKQotewotICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwotfQotCi12b2lkIExheWVyVHJl
ZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllcikKLXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92
ZUFsbENoaWxkcmVuKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250
ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRy
YXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOwotCi0gICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRl
ZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KLSAgICBpZiAoZ3JhcGhpY3NMYXllcikKLSAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKLX0K
LQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmludmFsaWRhdGUoKQotewotICAgIGNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCk7Ci0KLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXll
ciA9IG51bGxwdHI7Ci0gICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQotewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0g
ICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwot
Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpz
Y3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xs
UmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIHNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBhaW50KCkKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBu
ZXdTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdT
aXplKTsKLQotICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBu
b24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAotICAgIC8v
IGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0g
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7Ci0gICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgo
KSA+IG9sZFNpemUud2lkdGgoKSkgewotICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihz
dGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwot
ICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXpl
LndpZHRoKCksIGhlaWdodCkpOwotICAgIH0KLQotICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4g
b2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1Np
emUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKLQotICAg
IGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0
U2l6ZShuZXdTaXplKTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RRdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKLXsKLSAgICBjcmVhdGVQYWdl
T3ZlcmxheUxheWVyKCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpCi17Ci0gICAgZGVzdHJveVBh
Z2VPdmVybGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAg
bV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3Zl
cmxheU9wYWNpdHkoZmxvYXQgdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXll
cik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRPcGFjaXR5KHZhbHVlKTsKLSAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0UXQ6OmZsdXNoUGVuZGlu
Z0xheWVyQ2hhbmdlcygpCi17Ci0gICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1
YmZyYW1lcygpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikK
LSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKLQotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRo
aXNMYXllck9ubHkoKTsKLSAgICByZXR1cm4gZGlkU3luYzsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0UXQ6OnN5bmNMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYg
aW5mbykKLXsKLSAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKLSAg
ICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0g
ICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZv
KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXll
cklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGlsZHJlbikp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBj
b25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikK
LXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlN5bmNDYW52YXMoaWQsIGNhbnZhc1NpemUsIGdy
YXBoaWNzU3VyZmFjZVRva2VuKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lk
IExheWVyVHJlZUhvc3RRdDo6c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0
Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi12b2lk
IExheWVyVHJlZUhvc3RRdDo6YXR0YWNoTGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCi17
Ci0gICAgQVNTRVJUKCFtX3JlZ2lzdGVyZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKLSAgICBt
X3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyKTsKLQotICAgIGxheWVyLT5zZXRDb250ZW50c1Nj
YWxlKG1fY29udGVudHNTY2FsZSk7Ci0gICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkZXRhY2hMYXllcihXZWJHcmFwaGljc0xheWVyKiBs
YXllcikKLXsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyKTsKLSAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKLX0K
LQotc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXll
ciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRo
ZSBjb25kaXRpb25zIGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclBvc2l0aW9uLgotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxh
eWVyLT5iYWNraW5nKCk7Ci0gICAgaWYgKCFiYWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsK
LSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVy
LT5yZW5kZXJlcigpLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+
aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXIt
PmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhp
Y3NMYXllcigpKTsKLSAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRl
ckxheWVyKiByZW5kZXJMYXllcikKLXsKLSAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JT
ZWxmKHJlbmRlckxheWVyKTsKLQotICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQot
ICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmly
c3RDaGlsZCgpKTsKLSAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAg
IHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGlu
ZygpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnN5bmNGaXhlZExheWVycygpCi17Ci0g
ICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+
Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV93ZWJQYWdlLT5t
YWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9iamVjdHMoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJMYXllciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1l
KCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCktPnJvb3RSZW5kZXJMYXllcigpOwot
ICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOwotICAgIGlmIChyb290UmVuZGVyTGF5ZXItPmZp
cnN0Q2hpbGQoKSkKLSAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9v
dFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6
cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8
IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJQYWdl
LT5sYXlvdXRJZk5lZWRlZCgpOwotCi0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0gICAgZmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzKCk7Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNGcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RMYXllcikgewotICAgICAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIodG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOwotICAgICAg
ICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGlkUmVuZGVyRnJhbWUoKSk7Ci0g
ICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKLQotICAgIGlmICghbV9ub3RpZnlBZnRl
clNjaGVkdWxlZExheWVyRmx1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExldCB0aGUg
ZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25lIGEgZmx1c2ggb2YgdGhlIGxheWVyIGNo
YW5nZXMuCi0gICAgc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3
aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKLSAgICBtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6
bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopCi17Ci0gICAgcGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNy
ZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVy
KTsKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlz
KTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXll
clRyZWVIb3N0UXQgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRD
aGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RR
dDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5
TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAg
IG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Ci19Ci0KLWludDY0X3QgTGF5ZXJUcmVlSG9z
dFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0gICAgUVBpeG1hcCogcGl4
bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0KLSAgICBpZiAoIXBp
eG1hcCkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAgaW50NjRfdCBr
ZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVy
YXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwot
Ci0gICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkp
IHsKLSAgICAgICAgKysoaXQtPnNlY29uZCk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBo
YSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwotICAgIHsKLSAgICAg
ICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0
bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwot
ICAgIH0KLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBiaXRtYXAt
PmNyZWF0ZUhhbmRsZShoYW5kbGUpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRs
ZSkpOwotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7
Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFn
ZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKLXsKLSAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQgPT0gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaXQtPnNlY29uZC0tOwotCi0gICAgaWYgKGl0LT5zZWNvbmQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSkpOwotfQotCi0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0
Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBk
b3VibGUgdGltZSkKLXsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1
aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UXQ6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBjbGlwUmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXIpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRl
eHQsIGNsaXBSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChncmFwaGlj
c0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgewotICAgICAgICAvLyBPdmVybGF5cyBjb250
YWluIHRyYW5zcGFyZW50IGNvbnRlbnRzIGFuZCB3b24ndCBjbGVhciB0aGUgY29udGV4dCBhcyBw
YXJ0IG9mIHRoZWlyIHJlbmRlcmluZywgc28gd2UgZG8gaXQgaGVyZS4KLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LmNsZWFyUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1Bh
Z2VPdmVybGF5KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi1ib29sIExheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Ci19Ci0KLWJvb2wgTGF5
ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGlu
Z3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdDo6c3Vw
cG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0
ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6
OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUlu
Zm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBs
YXllcklELCBpbnQgdGlsZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGls
ZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IExheWVy
VHJlZUhvc3RRdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
dmlzaWJsZUNvbnRlbnRzUmVjdDsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZs
b2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgYm9vbCBjb250ZW50c1JlY3REaWRD
aGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBib29sIGNvbnRlbnRz
U2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICBpZiAodHJh
amVjdG9yeVZlY3RvciAhPSBGbG9hdFBvaW50Ojp6ZXJvKCkpCi0gICAgICAgIHRvV2ViR3JhcGhp
Y3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29u
dGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOwotCi0gICAgaWYgKGNv
bnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlKSB7Ci0gICAgICAg
IG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0gICAgICAgIG1fY29udGVudHNTY2FsZSA9
IHNjYWxlOwotCi0gICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+Ojpp
dGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFz
aFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3Rl
cmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGNv
bnRlbnRzU2NhbGVEaWRDaGFuZ2UpCi0gICAgICAgICAgICAgICAgKCppdCktPnNldENvbnRlbnRz
U2NhbGUoc2NhbGUpOwotICAgICAgICAgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKLSAg
ICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZp
eGVkTGF5b3V0KCkpCi0gICAgICAgIG1fd2ViUGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJl
Y3QocmVjdCk7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKLSAgICAgICAgbV9zaG91
bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJlZUhv
c3RRdDo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBm
YWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ld
LmRpZFN3YXBCdWZmZXJzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVU
aWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAm
JiAhbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cHVy
Z2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAo
SGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdp
c3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnB1
cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgQVNTRVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlUmVmQ291bnRzLnNpemUoKSk7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Ci19Ci0K
LVBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBMYXllclRyZWVIb3N0UXQ6OmJl
Z2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVC
aXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2Vi
Q29yZTo6SW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBncmFwaGljc0NvbnRleHQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0
ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91
cGRhdGVBdGxhc2VzW2ldOwotICAgICAgICBpZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgewot
ICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWls
YWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5i
ZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOwotICAg
ICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3Jh
cGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDIwMDA7Ci0gICAgbV91cGRhdGVBdGxh
c2VzLmFwcGVuZChVcGRhdGVBdGxhcyhTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpOwot
ICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJs
ZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTg1M2FkLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0q
LwotCi0jaWZuZGVmIExheWVyVHJlZUhvc3RRdF9oCi0jZGVmaW5lIExheWVyVHJlZUhvc3RRdF9o
Ci0KLSNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9z
dC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKLSNpbmNs
dWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
Q2xpZW50Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgVXBkYXRlSW5mbzsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExheWVyVHJlZUhv
c3RRdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50
Ci0gICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViR3JhcGhpY3NMYXllckNsaWVudAot
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RRdD4gY3JlYXRl
KFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UXQoKTsKLQotICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwotCi0gICAgdmlydHVhbCBj
b25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXll
clRyZWVDb250ZXh0OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1
c2goYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRl
ZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWlu
dCgpOwotICAgIHZpcnR1YWwgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIG5ld1NpemUpOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgp
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7Ci0gICAg
dmlydHVhbCBib29sIHBhZ2VPdmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygp
IHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVy
aW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmly
dHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpOwotCi0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRS
ZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
TmV4dEZyYW1lKCk7Ci0gICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAg
IHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3Rv
cjxXZWJMYXllcklEPiYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJik7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1
cmZhY2VUb2tlbikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNv
cmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXll
cnMoKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0
bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQm
KTsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7
Ci0KLXByaXZhdGU6Ci0gICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBk
b3VibGUgdGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVw
YWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwotCi0gICAg
Ly8gTGF5ZXJUcmVlSG9zdFF0Ci0gICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0g
ICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIGJvb2wgZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotICAg
IHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lkIHNlbmRMYXllcnNU
b1VJKCk7Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7
Ci0KLSAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNv
bnRlbnQuCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllcjsKLQotICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUg
bnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwotICAgIEhhc2hNYXA8aW50NjRf
dCwgaW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOwotICAgIFZlY3RvcjxV
cGRhdGVBdGxhcz4gbV91cGRhdGVBdGxhc2VzOwotCi0gICAgYm9vbCBtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLQotICAgIGJvb2wgbV93YWl0
aW5nRm9yVUlQcm9jZXNzOwotICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7
Ci0gICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKLQotICAgIExheWVy
VHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJh
bWU7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNSb290TGF5ZXI7Ci0gICAgdm9pZCBsYXllckZsdXNo
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0UXQ+Kik7Ci0gICAgV2ViQ29y
ZTo6VGltZXI8TGF5ZXJUcmVlSG9zdFF0PiBtX2xheWVyRmx1c2hUaW1lcjsKLSAgICBib29sIG1f
bGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTGF5ZXJU
cmVlSG9zdFF0X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149417</attachid>
            <date>2012-06-25 18:28:15 -0700</date>
            <delta_ts>2012-06-25 20:41:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89837-20120626102814.patch</filename>
            <type>text/plain</type>
            <size>183531</size>
            <attacher name="YoungTaeck Song">youngtaeck.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODRkZTMzOTI5Y2RkNTBj
ZDY3ZGZiOTBhYWMwZDE4N2IwODk0N2JjNy4uNGQ4MjJhYzc5OGJiNGE3Nzg5M2Q0NTRhZWRmMTE5
MjczNzBiOGMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzNSBAQAorMjAxMi0wNi0yNSAgWW91
bmdUYWVjayBTb25nICA8eW91bmd0YWVjay5zb25nQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtX
SzJdW1F0XVtFRkxdIEV4dHJhY3QgY29tbW9uIGNvZGUgZnJvbSBMYXllclRyZWVIb3N0UXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODM3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0cmFjdCBjb21t
b24gY29kZSBmcm9tIExheWVyVHJlZUhvc3RRdCB0byBiZSB1c2VkIGJ5IGJvdGggUXQgYW5kIEVm
bC4KKyAgICAgICAgSSByZW5hbWVkIExheWVyVHJlZUhvc3QgdG8gTGF5ZXJUcmVlQ29vcmRpbmF0
b3IsIGFuZCB0aGVzZSBhcmUgbW92ZWQgdW5kZXIgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUNvb3JkaW5hdG9yLgorICAgICAgICBJIE1vZGlmaWVkIExheWVyVHJlZUhvc3RQcm94eSB0byBM
YXllclRyZWVDb29yZGluYXRvclByb3h5IHRvbywgQmVjYXVzZSBMYXllclRyZWVIb3N0UHJveHkg
YW5kIExheWVyVHJlZUhvc3Qgd2VyZSBwYWlyLgorICAgICAgICBBbHNvIFdlYkdyYXBoaWNzTGF5
ZXIgbW92ZWQgdW5kZXIgdGhhdCBkaXJlY3RvcnkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oOgorICAgICAg
ICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdl
LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludCk6CisgICAgICAgIChR
UXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVBy
aXZhdGU6OnVwZGF0ZVNpemUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVjZWl2ZUxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgIChEcmF3aW5n
QXJlYVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6RHJhd2luZ0FyZWFQcm94
eUltcGwpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHlJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmg6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoRHJhd2luZ0FyZWFQcm94eUltcGwpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuY3BwLgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6On5MYXllclRyZWVDb29yZGluYXRvclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVmlld3BvcnQpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaXNwYXRjaFVwZGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVG
b3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJl
bW92ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBv
c2l0aW5nTGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlc3Ry
b3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW5kZXJOZXh0RnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnN5
bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpw
dXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5LmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OmxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4uCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGV0YWNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJMYXll
clRyZWVSZW5kZXJlcik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAg
ICAqIFdlYktpdDIucHJpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5oOgorICAgICAgICAoRHJhd2luZ0FyZWEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6
OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaDoKKyAgICAgICAgKERyYXdpbmdBcmVhSW1w
bCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp+TGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0TGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvb3JkaW5hdG9yOjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZs
dXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFJvb3RDb21w
b3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6Omlu
dmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6c2V0Tm9u
Q29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVDb29yZGluYXRvcjo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQ
YWdlT3ZlcmxheU9wYWNpdHkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRv
cjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6c3luY0xheWVyRmlsdGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjphdHRhY2hMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNv
b3JkaW5hdG9yOjpkZXRhY2hMYXllcik6CisgICAgICAgIChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZy
b21WaWV3cG9ydEZvclNlbGYpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVPZmZzZXRGcm9tVmll
d3BvcnRGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpz
eW5jRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6
cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3I6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OnNob3dEZWJ1Z0JvcmRlcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29y
ZGluYXRvcjo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3Jlcyk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbnRlbnRVcGRh
dGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9M
YXllclRyZWVDb29yZGluYXRvci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKExheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVDb29yZGluYXRvcjo6cGFnZU92ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6cGF1c2VSZW5kZXJpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6cmVzdW1lUmVuZGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRldmljZVNjYWxlRmFjdG9y
RGlkQ2hhbmdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbi4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3Jh
cGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpsYXllckJ5SURNYXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcjo6bGF5ZXJCeUlEKToKKyAgICAgICAgKFdlYkNvcmU6OnRvV2ViTGF5ZXJJRCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VMYXllclN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUNoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0U2hvdWxkVXBkYXRlVmlz
aWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdl
R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhp
Y3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp+V2ViR3JhcGhp
Y3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp3aWxsQmVEZXN0
cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldFRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJl
blRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRQcmVz
ZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRNYXNrc1Rv
Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZp
c2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0
eSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rp
c3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNU
b0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjppZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjp0b1dlYkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNz
TGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6
OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnN5
bmNDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6ZW5zdXJlSW1h
Z2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1NjYWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRz
U2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6YWRqdXN0Q29udGVu
dHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxl
ZEJhY2tpbmdTdG9yZVBhaW50RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVW
aXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJh
Y2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGlj
c0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnJlbW92
ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVu
dEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNr
aW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnNldFdlYkdy
YXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
YWRqdXN0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6
Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
V2ViR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpp
bml0RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyOjpzZWxmT3JB
bmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKFdlYkdyYXBoaWNzTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyOjptYXNrVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdy
YXBoaWNzTGF5ZXI6OnNldE1hc2tUYXJnZXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oOgorICAg
ICAgICAoTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisK
IDIwMTItMDYtMjUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbTGlvbiBXSzJdIGZhc3QvbG9hZGVyL3JlbG9hZC16ZXJvLWJ5dGUtcGx1Z2luLmh0bWwg
aGl0cyBhc3NlcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggNTFmN2VjMWQ3MDJjMmI3M2E5ODJj
YjY3Y2MyNTM2MWJhY2IwMjhjZS4uZDQwYmE4NDhhZjdjNjZmODdjNDYzMWMwMzc3OTc1YTRhMGNk
OWQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTIwOSw3ICsyMDksNyBAQCBTRVQoV2ViS2l0
Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCiAgICAgVUlQcm9jZXNz
L0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCiAgICAgVUlQcm9j
ZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAKLSAgICBVSVByb2Nlc3Mv
TGF5ZXJUcmVlSG9zdFByb3h5LmNwcAorICAgIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRv
clByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcAogICAgIFVJ
UHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlclByb3h5LmNwcApAQCAtNDA5LDcgKzQwOSw2IEBAIFNFVChXZWJLaXQy
X1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5j
cHAKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuY3Bw
Ci0gICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAogICAg
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAogICAgIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwCkBA
IC00MjMsNiArNDIyLDcgQEAgU0VUKFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9FbmNvZGVyQWRhcHRlci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNw
YXRjaGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKyAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXll
ci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Rh
cEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwCkBAIC00NDUsNyArNDQ1LDcgQEAgU0VUKFdlYktpdDJf
TUVTU0FHRVNfSU5fRklMRVMKICAgICBTaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNl
aXZlci5tZXNzYWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2Fn
ZXMuaW4KLSAgICBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCisgICAg
VUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVBy
b2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJ
UHJvY2Vzcy9XZWJDb250ZXh0Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYkNvb2tpZU1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtNDk1LDcgKzQ5NSw3IEBAIFNFVChXZWJLaXQyX01F
U1NBR0VTX0lOX0ZJTEVTCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVz
c2FnZXMuaW4KICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2Vz
LmluCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KKyAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IubWVzc2FnZXMuaW4KICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLm1l
c3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KICkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9X
ZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnByaQppbmRleCAwYTUwYzdkYWRmMmYzYjcxMDcyZDU2YTgw
Y2IwOTQ5YTFkNWEzMDBlLi4zMTliZjdlMTRlN2RlYzJkZGEzNjQ4NDA4MjI2ZGJjNDI3MTc1YjJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcmkKKysrIGIvU291
cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpCkBAIC02Myw3ICs2Myw3IEBAIE1FU1NBR0Vf
UkVDRUlWRVJTID0gXAogICAgIERvd25sb2FkUHJveHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdp
bmdBcmVhUHJveHkubWVzc2FnZXMuaW4gXAogICAgIEV2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5p
biBcCi0gICAgTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIFwKKyAgICBMYXllclRyZWVD
b29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Db250cm9sbGVyUHJveHku
bWVzc2FnZXMuaW4gXAogICAgIFBsdWdpblByb2Nlc3MubWVzc2FnZXMuaW4gXAogICAgIFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIFwKQEAgLTkwLDcgKzkwLDcgQEAgTUVTU0FH
RV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gXAog
ICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2Uv
RHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAotICAgIFdlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5tZXNz
YWdlcy5pbiBcCisgICAgV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29y
ZGluYXRvci5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMu
aW4gXAogICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGE2YmM3MGQ4
NDI3YWYxODkzNzU4MzMxY2NiYWNhMWU5ZGM3ZDMxYzkuLjgzNmRhZDYwMWQwMzA2OGZhYzhlZTI0
NTFjY2UwY2E2NzUzODlmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTMz
LDggKzEzMyw4IEBAIHdlYmtpdDJfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9EcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9FdmVudERpc3BhdGNoZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKIAlEZXJpdmVkU291cmNl
cy9XZWJLaXQyL0V2ZW50RGlzcGF0Y2hlck1lc3NhZ2VzLmggXAotCURlcml2ZWRTb3VyY2VzL1dl
YktpdDIvTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCi0JRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9MYXllclRyZWVIb3N0UHJveHlNZXNzYWdlcy5oIFwKKwlEZXJpdmVkU291
cmNlcy9XZWJLaXQyL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
IFwKKwlEZXJpdmVkU291cmNlcy9XZWJLaXQyL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNz
YWdlcy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVy
TWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9OUE9iamVjdE1l
c3NhZ2VSZWNlaXZlck1lc3NhZ2VzLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2lu
Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaAppbmRleCA1ZjM5OGFhOGQ4MGMxNGM5ZjBiNmNhZmUy
ZmVhMzUxNmU3NTcxM2E1Li5kOTIzYTFiZTI2M2JmYjdiZGU5NTg1MTg0MmNmOWIxZmI3ZTUzODky
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKQEAgLTM4
LDcgKzM4LDcgQEAgZW51bSBNZXNzYWdlQ2xhc3MgewogICAgIE1lc3NhZ2VDbGFzc0F1dGhlbnRp
Y2F0aW9uTWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NEcmF3aW5nQXJlYSwKICAgICBNZXNzYWdl
Q2xhc3NJbmplY3RlZEJ1bmRsZSwKLSAgICBNZXNzYWdlQ2xhc3NMYXllclRyZWVIb3N0LAorICAg
IE1lc3NhZ2VDbGFzc0xheWVyVHJlZUNvb3JkaW5hdG9yLAogICAgIE1lc3NhZ2VDbGFzc1dlYkFw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvb2tpZU1hbmFnZXIs
CiAgICAgTWVzc2FnZUNsYXNzV2ViRGF0YWJhc2VNYW5hZ2VyLApAQCAtNjAsNyArNjAsNyBAQCBl
bnVtIE1lc3NhZ2VDbGFzcyB7CiAgICAgLy8gTWVzc2FnZXMgc2VudCBieSB0aGUgd2ViIHByb2Nl
c3MgdG8gdGhlIFVJIHByb2Nlc3MuCiAgICAgTWVzc2FnZUNsYXNzRG93bmxvYWRQcm94eSwKICAg
ICBNZXNzYWdlQ2xhc3NEcmF3aW5nQXJlYVByb3h5LAotICAgIE1lc3NhZ2VDbGFzc0xheWVyVHJl
ZUhvc3RQcm94eSwKKyAgICBNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvclByb3h5LAog
ICAgIE1lc3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHksCiAgICAgTWVz
c2FnZUNsYXNzV2ViQ29udGV4dCwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb250ZXh0TGVnYWN5LApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1Rh
cmdldC5wcmkKaW5kZXggMDkxM2U2OTYyZmYzNjA3ZDA0NmMwMmI1MjIzNDRjOWE4ZDY5OTQwYi4u
Mzc5OWQ4NWZlY2Y4MDcyMTIxYjdhMzY0NThkMDg5ZTM3OTcwMDFmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBA
IC0yMTQsNyArMjE0LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0dlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vz
c0xhdW5jaGVyLmggXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oIFwK
LSAgICBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggXAorICAgIFVJUHJvY2Vzcy9MYXll
clRyZWVDb29yZGluYXRvclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmggXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRp
b25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggXAogICAgIFVJ
UHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbi5oIFwKQEAgLTM1NSw3ICszNTUs
NiBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVycm9y
cy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQu
aCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmggXAog
ICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggXAogICAg
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuaCBc
CkBAIC0zNjcsNiArMzY2LDggQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhSW1wbC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRj
aGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKKyAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdy
YXBoaWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRy
b2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmggXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIFwKQEAgLTM3Nyw3ICszNzgsNiBAQCBIRUFE
RVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlVuZG9TdGVwLmggXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0
UXQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MuaCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVu
ZGxlLmggXApAQCAtNTY2LDcgKzU2Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9M
YXVuY2hlci9UaHJlYWRMYXVuY2hlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Q
cm9jZXNzTGF1bmNoZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRM
YXVuY2hlclF0LmNwcCBcCi0gICAgVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAgXAor
ICAgIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcCBcCiAgICAgVUlQcm9j
ZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwIFwKICAg
ICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvbi5jcHAgXApAQCAtNzIyLDcgKzcyMiw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwIFwKLSAgICBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgXApAQCAtNzQwLDYg
KzczOSw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRh
cHRlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKKyAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3Bw
IFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhp
Y3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250cm9s
bGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwIFwKQEAgLTc1NCw3ICs3NTUsNiBA
QCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHku
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvcXQvV2ViSW5zcGVjdG9yUXQuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3F0
L1dlYlBhZ2VRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlvblRvVUlQcm9jZXNz
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAppbmRleCBlMGQ2MDEyZDI2
YmEyMDJjN2U2MTMyNzNjMWE3OTQxMjY2ODU4OWUxLi5lMWY2NzU5YWMwZWYyNzczY2JlZDRjZGM5
ZDM4NzE4YWEwNGI5Y2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2VicGFnZS5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKIAotI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3RQcm94eS5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNs
dWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VTR05vZGUu
aCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgpAQCAtNzIsOSArNzIsOSBAQCB2
b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludChRUGFpbnRlciogcGFpbnRlcikKICAgICBp
ZiAoIXdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
TGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkgPSB3ZWJQYWdlUHJveHktPmRy
YXdpbmdBcmVhKCktPmxheWVyVHJlZUhvc3RQcm94eSgpOwotICAgIGlmIChsYXllclRyZWVIb3N0
UHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3RQcm94eS0+
bGF5ZXJUcmVlUmVuZGVyZXIoKS0+cGFpbnRUb0dyYXBoaWNzQ29udGV4dChwYWludGVyKTsKKyAg
ICBMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5ID0g
d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCk7
CisgICAgaWYgKGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCkp
CisgICAgICAgIGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCkt
PnBhaW50VG9HcmFwaGljc0NvbnRleHQocGFpbnRlcik7CiB9CiAKIFFTR05vZGUqIFFRdWlja1dl
YlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVE
YXRhKikKQEAgLTgyLDggKzgyLDggQEAgUVNHTm9kZSogUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFp
bnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0ZVBhaW50Tm9kZURhdGEqKQogICAgIGlmICgh
ZC0+d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKQogICAgICAgICByZXR1cm4gb2xkTm9kZTsK
IAotICAgIExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5ID0gZC0+d2ViUGFn
ZVByb3h5LT5kcmF3aW5nQXJlYSgpLT5sYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICBXZWJMYXll
clRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBsYXllclRyZWVIb3N0UHJveHktPmxheWVyVHJlZVJl
bmRlcmVyKCk7CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSA9IGQtPndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSgpOworICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCk7CiAKICAgICBRdFdl
YlBhZ2VTR05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxRdFdlYlBhZ2VTR05vZGUqPihvbGROb2Rl
KTsKICAgICBpZiAoIW5vZGUpCkBAIC0xNTksOCArMTU5LDggQEAgdm9pZCBRUXVpY2tXZWJQYWdl
UHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiAgICAgUVNpemVGIHNjYWxlZFNpemUgPSBjb250ZW50c1Np
emUgKiBjb250ZW50c1NjYWxlOwogCiAgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEg
PSB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7Ci0gICAgaWYgKGRyYXdpbmdBcmVhICYmIGRy
YXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKSkKLSAgICAgICAgZHJhd2luZ0FyZWEtPmxh
eWVyVHJlZUhvc3RQcm94eSgpLT5zZXRDb250ZW50c1NpemUoY29udGVudHNTaXplKTsKKyAgICBp
ZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHko
KSkKKyAgICAgICAgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKS0+c2V0
Q29udGVudHNTaXplKGNvbnRlbnRzU2l6ZSk7CiAKICAgICBxLT5zZXRTaXplKHNjYWxlZFNpemUp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKaW5k
ZXggMDhiMjI1NzQzMmQzZjc0ZTRiOTVmNThlYWQ3Yzc0ODg0NzUwZGZlNy4uNWY3YjEwNjU0NzE0
Nzc3NjY3NzQyMmU3YWI2ZmNlMTBiNGQ3NTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5oIgogI2luY2x1ZGUgPENvcmVJUEMvTWVzc2FnZUlELmg+CiAjZW5kaWYKIApAQCAtNjksNyAr
NjksNyBAQCBXZWJDb3JlOjpJbnRSZWN0IERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzUmVjdCgp
IGNvbnN0CiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlUHJv
eHktPnZpZXdTaXplKCkpOwogfQogCi12b2lkIERyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2VpdmVM
YXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykK
K3ZvaWQgRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2Fn
ZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggOWYxNzA1
ZGQ3ZTU5ZmE3ZWYxMGFkNWM5YTRiNjZiOTY1NDY5NjMwNC4uNDI2ZmVhMTRhZTM2ZmQ5NDRjODk5
NzUwOWVhZTAwNmMyNzU0YWY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBMYXllclRyZWVDb250ZXh0OwotY2xhc3MgTGF5ZXJUcmVl
SG9zdFByb3h5OworY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTsKIGNsYXNzIFVwZGF0
ZUluZm87CiBjbGFzcyBXZWJMYXllclRyZWVJbmZvOwogY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZv
OwpAQCAtOTMsMTIgKzkzLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJl
Y3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzUmVjdCgpOyB9
CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc0JhY2tpbmdTdG9yZVJlYWR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllclRyZWVIb3N0UHJveHkuZ2V0KCk7IH0KKyAgICBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9s
YXllclRyZWVDb29yZGluYXRvclByb3h5LmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRz
UmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlW
ZWN0b3IsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRz
UG9zaXRpb24gPSBXZWJDb3JlOjpGbG9hdFBvaW50KCkpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6
VXBkYXRlSW5mbyYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50
IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdl
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogCiAgICAgV2ViUGFnZVByb3h5KiBwYWdl
KCkgeyByZXR1cm4gbV93ZWJQYWdlUHJveHk7IH0KICNlbmRpZgpAQCAtMTEyLDcgKzExMiw3IEBA
IHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCiAjaWYg
VVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0gICAgT3duUHRyPExheWVyVHJlZUhvc3RQcm94eT4g
bV9sYXllclRyZWVIb3N0UHJveHk7CisgICAgT3duUHRyPExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk+IG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5k
ZXggMTU2MjY3MTY0NGE0MDFlMjllNGZiNjBmOTg4ODYwZGUzMjc4OWYxYi4uMGJiNzQ0ODRlMzEy
NDNkNTAwYTEzNmUyZjNmZTZkMmJmZmM4N2RjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQot
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTYx
LDcgKzYxLDcgQEAgRHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdBcmVhUHJveHlJbXBsKFdl
YlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQog
ICAgIC8vIENvbnN0cnVjdCB0aGUgcHJveHkgZWFybHkgdG8gYWxsb3cgbWVzc2FnZXMgdG8gYmUg
c2VudCB0byB0aGUgd2ViIHByb2Nlc3Mgd2hpbGUgQUMgaXMgZW50ZXJlZCB0aGVyZS4KICAgICBp
ZiAod2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+Zm9yY2VDb21wb3Np
dGluZ01vZGUoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFB0cihuZXcg
TGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKKyAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRv
clByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkodGhpcykpOwog
I2VuZGlmCiB9CiAKQEAgLTM1NCwyMiArMzU0LDIyIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUlt
cGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4
CiAgICAgbV9sYXllclRyZWVDb250ZXh0ID0gbGF5ZXJUcmVlQ29udGV4dDsKICAgICBtX3dlYlBh
Z2VQcm94eS0+ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0
KTsKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9z
dFByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXll
clRyZWVIb3N0UHJveHkodGhpcykpOworICAgIGlmICghbV9sYXllclRyZWVDb29yZGluYXRvclBy
b3h5KQorICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgPSBhZG9wdFB0cihuZXcg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSh0aGlzKSk7CiAjZW5kaWYKIH0KIAogI2lmIFVTRShV
SV9TSURFX0NPTVBPU0lUSU5HKQotdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlkUmVjZWl2
ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
KiBhcmd1bWVudHMpCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRSZWNlaXZlTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
KiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICBt
X2xheWVyVHJlZUhvc3RQcm94eS0+ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2Uo
Y29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOworICAgIGlmIChtX2xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+ZGlk
UmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3Nh
Z2VJRCwgYXJndW1lbnRzKTsKIH0KIAogdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNS
ZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZl
Y3RvciwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYWNjdXJhdGVWaXNpYmxlQ29udGVudHNQ
b3NpdGlvbikKIHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5
ZXJUcmVlSG9zdFByb3h5LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1Jl
Y3QsIHNjYWxlLCB0cmFqZWN0b3J5VmVjdG9yLCBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0
aW9uKTsKKyAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnNldFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZUNv
bnRlbnRzUmVjdCwgc2NhbGUsIHRyYWplY3RvcnlWZWN0b3IsIGFjY3VyYXRlVmlzaWJsZUNvbnRl
bnRzUG9zaXRpb24pOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKaW5kZXggMzQ2ZjM1NDZkZmQ2NzU2MGEzNGE3Nzk5Nzky
ZmFkYTY0N2I3MTcxYy4uNGM0YWM1OTM5ZTkwNDlmMWMzZTA1ZmM5NzdmMTYzYmMyNmNhMDUzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgK
QEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgUmVnaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
Y2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5OworY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTsKIAogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94
eSB7CiBwdWJsaWM6CkBAIC04Myw3ICs4Myw3IEBAIHByaXZhdGU6CiAKICNpZiBVU0UoVUlfU0lE
RV9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeSwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgYWNjdXJhdGVWaXNpYmxlQ29udGVudHNQb3NpdGlvbiA9IFdlYkNvcmU6OkZsb2F0
UG9pbnQoKSk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBD
OjpBcmd1bWVudERlY29kZXIqKTsKICNlbmRpZgogI2Vsc2UKICAgICBib29sIGlzSW5BY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2IwMjE0MzQ0NmJkYWE0MTUxNjc0ZjUyNDkxOGQ0YTE1MjljNzUyNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmNwcApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaW5jbHVk
ZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29v
cmRpbmF0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisj
aW5jbHVkZSAiV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJv
eHkpCisgICAgOiBtX2RyYXdpbmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKKyAgICAsIG1f
cmVuZGVyZXIoYWRvcHRSZWYobmV3IFdlYkxheWVyVHJlZVJlbmRlcmVyKHRoaXMpKSkKK3sKK30K
KworTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6fkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHko
KQoreworICAgIG1fcmVuZGVyZXItPmRldGFjaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAg
bV9yZW5kZXJlci0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKK30KKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0
ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJ
RCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOworICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXll
cklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gc3Vy
ZmFjZTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB1aW50MzJfdCB0b2tlbiA9IHVw
ZGF0ZUluZm8uc3VyZmFjZUhhbmRsZS5ncmFwaGljc1N1cmZhY2VUb2tlbigpOworICAgIEhhc2hN
YXA8dWludDMyX3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+OjppdGVyYXRvciBpdCA9IG1f
c3VyZmFjZXMuZmluZCh0b2tlbik7CisgICAgaWYgKGl0ID09IG1fc3VyZmFjZXMuZW5kKCkpIHsK
KyAgICAgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1
cmZhY2VIYW5kbGUpOworICAgICAgICBtX3N1cmZhY2VzLmFkZCh0b2tlbiwgc3VyZmFjZSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHN1cmZhY2UgPSBpdC0+c2Vjb25kOworI2Vsc2UKKyAgICBzdXJm
YWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7
CisjZW5kaWYKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6
dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRhcmdldFJlY3Qs
IHN1cmZhY2UsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0
aWxlSUQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnJlbW92ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOworfQorCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2Vi
TGF5ZXJJRCBpZCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5k
ZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7CisgICAgdXBkYXRlVmll
d3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRCwgbV9yZW5kZXJlci5nZXQoKSwg
aWQpKTsKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBX
ZWJMYXllckluZm8mIGluZm8pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBpbmZvKSk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXll
ckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYgY2hpbGRy
ZW4pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dExheWVyQ2hpbGRyZW4sIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjaGlsZHJlbikpOworfQorCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpz
ZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBmaWx0ZXJz
KSk7Cit9CisjZW5kaWYKKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaWRSZW5k
ZXJGcmFtZSgpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3JlbmRlcmVyLmdldCgpKSk7CisgICAgdXBkYXRlVmll
d3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgaGFuZGxlKQoreworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJp
dG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CisgICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlLCBtX3JlbmRlcmVyLmdl
dCgpLCBrZXksIGJpdG1hcCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKK3sKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlLCBtX3Jl
bmRlcmVyLmdldCgpLCBrZXkpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUpCit7CisgICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6
ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvciwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYWNjdXJhdGVWaXNpYmxlQ29udGVudHNQb3NpdGlvbikK
K3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdCwgbV9yZW5kZXJlci5nZXQoKSwgcmVjdCwgc2NhbGUsIGFjY3VyYXRl
VmlzaWJsZUNvbnRlbnRzUG9zaXRpb24pKTsKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2Uo
KS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6U2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChyZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6
UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9z
aXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5k
ZXJlci5nZXQoKSwgcG9zaXRpb24pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1
aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQs
IGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29y
ZGluYXRvcjo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgp
LT5wYWdlSUQoKSk7Cit9CisKK30KKyNlbmRpZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJVElORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRv
clByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI0ZTdiN2NlMjc3NTA2ZTc4Y2UzN2E3MWU5ZjM1MThiYTg4Yzc1
YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCisjZGVmaW5lIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHlfaAorCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5j
bHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRl
ICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCitjbGFzcyBRU0dOb2Rl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI7CitjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CisKK2NsYXNzIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgeworcHVibGljOgorICAgIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkoRHJhd2luZ0FyZWFQcm94eSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkoKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJMYXll
cklELCBjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJD
aGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKTsKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhXZWJM
YXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyAgICB2
b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290
Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOworICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOworICAgIHZvaWQgc2V0
Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnksIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRpb24pOworICAgIHZvaWQgZGlkUmVu
ZGVyRnJhbWUoKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
Jik7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOworICAg
IHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2
b2lkIGNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmKTsKKyAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZShpbnQ2NF90KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGlu
YXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlE
LCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7
CisgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbik7CisgICAgdm9pZCBzeW5j
Q2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1
aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9y
ZXMoKTsKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGRp
c3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKworICAgIERyYXdpbmdBcmVh
UHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKKyAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVy
ZXI+IG1fcmVuZGVyZXI7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgSGFzaE1hcDx1
aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9zdXJmYWNlczsKKyNlbmRpZgor
fTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMjg0YjkxNWJkODZmNTY1
YzFjYjZmYWMwMjBhOTM2OGI5MTliZGJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KQEAgLTAs
MCArMSwzOCBAQAorIworIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisjICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisjICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorIworIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCittZXNzYWdl
cyAtPiBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKKyAgICBTZXRDb21wb3NpdGluZ0xheWVy
U3RhdGUodWludDMyX3QgaWQsIFdlYktpdDo6V2ViTGF5ZXJJbmZvIGxheWVySW5mbykKKyAgICBT
ZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3QgaWQsIFZlY3Rvcjx1aW50MzJfdD4g
Y2hpbGRyZW4pCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIFNldENvbXBvc2l0aW5nTGF5
ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMp
CisjZW5kaWYKKyAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBE
ZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAgIENyZWF0ZVRpbGVGb3JMYXll
cih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJl
Y3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxl
Rm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0
YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgUmVt
b3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCisgICAgQ3JlYXRl
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUgaGFuZGxlKQorICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShp
bnQ2NF90IGtleSkKKyAgICBEaWRSZW5kZXJGcmFtZSgpCisgICAgRGlkQ2hhbmdlU2Nyb2xsUG9z
aXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24pCisgICAgU3luY0NhbnZhcyh1aW50MzJf
dCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZh
Y2VUb2tlbikKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg3ZjA3MmY2
YzEwNGM0N2JhNDI1MGUwNmViY2Q0YmMwMjA2NDA1ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
SG9zdFByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJ
VElORykKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKLQotI2luY2x1ZGUgIkxheWVy
VHJlZUhvc3RNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCi0j
aW5jbHVkZSAiV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1MYXllclRyZWVIb3N0UHJveHk6OkxheWVyVHJl
ZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KQotICAgIDogbV9k
cmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkpCi0gICAgLCBtX3JlbmRlcmVyKGFkb3B0
UmVmKG5ldyBXZWJMYXllclRyZWVSZW5kZXJlcih0aGlzKSkpCi17Ci19Ci0KLUxheWVyVHJlZUhv
c3RQcm94eTo6fkxheWVyVHJlZUhvc3RQcm94eSgpCi17Ci0gICAgbV9yZW5kZXJlci0+ZGV0YWNo
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCi17Ci0g
ICAgbV9kcmF3aW5nQXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCi17Ci0gICAgbV9yZW5kZXJlci0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwg
aW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJm
YWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZX
ZWJMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJ
RCwgdGlsZUlELCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7Ci0gICAgdXBkYXRlVGlsZUZvckxh
eWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbyk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1
cmZhY2U7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdWludDMyX3QgdG9rZW4gPSB1
cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUuZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAgICBIYXNo
TWFwPHVpbnQzMl90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPjo6aXRlcmF0b3IgaXQgPSBt
X3N1cmZhY2VzLmZpbmQodG9rZW4pOwotICAgIGlmIChpdCA9PSBtX3N1cmZhY2VzLmVuZCgpKSB7
Ci0gICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5z
dXJmYWNlSGFuZGxlKTsKLSAgICAgICAgbV9zdXJmYWNlcy5hZGQodG9rZW4sIHN1cmZhY2UpOwot
ICAgIH0gZWxzZQotICAgICAgICBzdXJmYWNlID0gaXQtPnNlY29uZDsKLSNlbHNlCi0gICAgc3Vy
ZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUp
OwotI2VuZGlmCi0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRSZWN0
LCBzdXJmYWNlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQp
Ci17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92
ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVM
YXllciwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLSAgICB1cGRhdGVWaWV3cG9ydCgpOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5
ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJl
cjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Ci0gICAgdXBkYXRlVmll
d3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5
ZXJTdGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGluZm8pCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUs
IG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVj
dG9yPFdlYkxheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZX
ZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbiwgbV9yZW5kZXJlci5nZXQoKSwg
aWQsIGNoaWxkcmVuKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdl
dCgpLCBpZCwgZmlsdGVycykpOwotfQotI2VuZGlmCi0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpkaWRSZW5kZXJGcmFtZSgpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3JlbmRlcmVyLmdldCgpKSk7Ci0gICAg
dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
Yml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKLSAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UsIG1fcmVuZGVyZXIu
Z2V0KCksIGtleSwgYml0bWFwKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0
cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZSwgbV9yZW5kZXJl
ci5nZXQoKSwga2V5KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50
c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJl
ci5nZXQoKSwgY29udGVudHNTaXplKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBj
b25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBhY2N1cmF0ZVZpc2libGVDb250ZW50c1Bvc2l0aW9uKQotewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0LCBt
X3JlbmRlcmVyLmdldCgpLCByZWN0LCBzY2FsZSwgYWNjdXJhdGVWaXNpYmxlQ29udGVudHNQb3Np
dGlvbikpOwotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50c1JlY3QocmVjdCwgc2Nh
bGUsIHRyYWplY3RvcnlWZWN0b3IpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlE
KCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVuZGVyTmV4dEZyYW1lKCkKLXsK
LSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5w
YWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRp
b24sIG1fcmVuZGVyZXIuZ2V0KCksIHBvc2l0aW9uKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXpl
LCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwg
aWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQotewotICAgIG1fZHJhd2luZ0FyZWFQ
cm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlB1
cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkp
OwotfQotCi19Ci0jZW5kaWYgLy8gVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDc5NThhNWE1ZDUxYmI2MTE1ZmExNjdmNzBmYWIwOTA3Yzg4MjNlOWQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBMYXllclRyZWVIb3N0UHJveHlf
aAotI2RlZmluZSBMYXllclRyZWVIb3N0UHJveHlfaAotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9T
SVRJTkcpCi0KLSNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJEcmF3aW5nQXJl
YVByb3h5LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUlu
Zm8uaCIKLSNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+
Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgot
Ci1jbGFzcyBRU0dOb2RlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViTGF5ZXJJ
bmZvOwotY2xhc3MgV2ViTGF5ZXJUcmVlUmVuZGVyZXI7Ci1jbGFzcyBXZWJMYXllclVwZGF0ZUlu
Zm87Ci0KLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eSB7Ci1wdWJsaWM6Ci0gICAgTGF5ZXJUcmVl
SG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKLSAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0
UHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJMYXllcklELCBj
b25zdCBXZWJMYXllckluZm8mKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJl
bihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKTsKLSNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhXZWJMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSAgICB2b2lkIGRl
bGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9z
aXRpbmdMYXllcihXZWJMYXllcklEKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOwotICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOwotICAgIHZvaWQgc2V0Q29udGVu
dHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnksIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IGFjY3VyYXRlVmlzaWJsZUNvbnRlbnRzUG9zaXRpb24pOwotICAgIHZvaWQgZGlkUmVuZGVyRnJh
bWUoKTsKLSAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7Ci0g
ICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQg
cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKLSAgICB2b2lkIGNy
ZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmKTsKLSAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZShpbnQ2NF90KTsKLSAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFy
Z3VtZW50RGVjb2RlciopOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKLSAgICB2b2lkIHJl
bmRlck5leHRGcmFtZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0aW9uKTsKLSAgICB2b2lkIHN5bmNDYW52YXModWludDMy
X3QgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBo
aWNzU3VyZmFjZVRva2VuKTsKLSAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIFdl
YkxheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
cmVuZGVyZXIuZ2V0KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgZGlzcGF0Y2hVcGRhdGUo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotCi0gICAgRHJhd2luZ0FyZWFQcm94eSogbV9kcmF3
aW5nQXJlYVByb3h5OwotICAgIFJlZlB0cjxXZWJMYXllclRyZWVSZW5kZXJlcj4gbV9yZW5kZXJl
cjsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQ
dHI8U2hhcmVhYmxlU3VyZmFjZT4gPiBtX3N1cmZhY2VzOwotI2VuZGlmCi19OwotCi19Ci0KLSNl
bmRpZgotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODhiNDRmZDg2NTI4ZWM1YjkwY2E0OTM5ZDM3NmM2
MWIzMGQxNGNjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4K
KysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jCi0jICAgIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSMKLSMgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotIwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVElMRURfQkFD
S0lOR19TVE9SRSkKLW1lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3RQcm94eSB7Ci0gICAgU2V0Q29t
cG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJLaXQ6OldlYkxheWVySW5mbyBsYXll
ckluZm8pCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0
b3I8dWludDMyX3Q+IGNoaWxkcmVuKQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBTZXRD
b21wb3NpdGluZ0xheWVyRmlsdGVycyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyBmaWx0ZXJzKQotI2VuZGlmCi0gICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMy
X3QgaWQpCi0gICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKLSAgICBDcmVh
dGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50
UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0g
ICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNv
cmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJ
bmZvKQotICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlE
KQotICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKLSAgICBEZXN0cm95RGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCi0gICAgRGlkUmVuZGVyRnJhbWUoKQotICAgIERpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQotICAgIFN5bmND
YW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgdWludDMyX3Qg
Z3JhcGhpY3NTdXJmYWNlVG9rZW4pCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IDM4NTBlNTNjYTA0NzJkYTFj
Y2Q1ZjI3MWM0NGUxOWZiMDMzYWY5NzcuLmI4NWUwMTM4MzVmNGEzMGEyMTY4ZTE3MWE2OTQ4NzE2
MjMyN2ZhYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRy
ZWVSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJl
ZVJlbmRlcmVyLmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgotI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRt
YXAuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCkBAIC04NSw5ICs4NSw5IEBAIHN0YXRp
YyBJbnRQb2ludCBib3VuZGVkU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBv
c2l0aW9uLCBjb25zdCBJbnRSCiAgICAgcmV0dXJuIEludFBvaW50KHNjcm9sbFBvc2l0aW9uWCwg
c2Nyb2xsUG9zaXRpb25ZKTsKIH0KIAotV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJl
ZVJlbmRlcmVyKExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KQorV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVyKExheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkqIGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCiAgICAgOiBtX2NvbnRlbnRzU2NhbGUo
MSkKLSAgICAsIG1fbGF5ZXJUcmVlSG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKKyAgICAs
IG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eShsYXllclRyZWVDb29yZGluYXRvclByb3h5KQog
ICAgICwgbV9yb290TGF5ZXJJRChJbnZhbGlkV2ViTGF5ZXJJRCkKICAgICAsIG1faXNBY3RpdmUo
ZmFsc2UpCiB7CkBAIC0xNzUsOCArMTc1LDggQEAgdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2EKIAog
dm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQoKQogewotICAgIGlmICht
X2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0
ZVZpZXdwb3J0KCk7CisgICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKKyAgICAg
ICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwogfQogCiB2
b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkK
QEAgLTQwNiw4ICs0MDYsOCBAQCB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVy
Q2hhbmdlcygpCiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSgp
CiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUhv
c3RQcm94eS0+cmVuZGVyTmV4dEZyYW1lKCk7CisgICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5yZW5kZXJOZXh0
RnJhbWUoKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVy
KCkKQEAgLTQ2NSwxMyArNDY1LDEzIEBAIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdl
R0xSZXNvdXJjZXMoKQogCiB2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdT
dG9yZXMoKQogewotICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXll
clRyZWVIb3N0UHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIGlmIChtX2xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+
cHVyZ2VCYWNraW5nU3RvcmVzKCk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRl
dGFjaCgpCiB7Ci0gICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSAwOworICAgIG1fbGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eSA9IDA7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFw
cGVuZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKaW5kZXggZDY2YjE5ZDYz
NTQ4NmZkN2JhMWFmYTQzNWQwYzlhNjhjZDE1Y2QwYS4uMmE0YmFiNTM2Y2U0Y2U2ZDkyMWViZDhk
MTVlOGY5YTIzZThlNGIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxh
eWVyVHJlZVJlbmRlcmVyLmgKQEAgLTQwLDcgKzQwLDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBMYXllckJhY2tpbmdTdG9yZTsKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKK2Ns
YXNzIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CiBjbGFzcyBXZWJMYXllckluZm87CiBjbGFz
cyBXZWJMYXllclVwZGF0ZUluZm87CiAKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgICAg
ICB7CiAgICAgICAgIH0KICAgICB9OwotICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKExheWVyVHJl
ZUhvc3RQcm94eSopOworICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkqKTsKICAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVSZW5kZXJlcigpOwogICAgIHZv
aWQgcHVyZ2VHTFJlc291cmNlcygpOwogICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQo
Y29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyA9IDApOwpA
QCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsK
ICAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwogCi0gICAgTGF5ZXJUcmVlSG9zdFByb3h5
KiBtX2xheWVyVHJlZUhvc3RQcm94eTsKKyAgICBMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBt
X2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fcm9vdExheWVyOwogICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVs
ZXRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDYy
N2VlNTIwN2YyZDA1MjlkZDhjZWJiN2VmMDBmNWQ1YzFjNWEyNjQuLmI1MDQ2YjI5OWM5ODkzODNm
MWY1YjQ1ZmQ1Yjc0NDFkMTA3NzA1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCkBAIC05NCw3ICs5NCw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShVSV9TSURF
X0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKFFUKQpAQCAtMTczNyw4ICsxNzM3LDggQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJ
UEM6Ok0KICAgICB9CiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLSAgICBpZiAobWVz
c2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUhvc3RQcm94eT4oKSkgewot
ICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2Fn
ZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CisgICAgaWYgKG1lc3NhZ2VJRC5p
czxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvclByb3h5PigpKSB7Cisg
ICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5
TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJp
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5kZXggNGE1ZmQ5ZjYwZTA4ODNmNmMyMzcw
ZmRkZmFkMTJlNmZjZmVjYjA5NS4uNGZmOGU1Y2I3MDdkNzIxY2UxZjQ3OWZiZjYwYWI0MWQ0M2Vj
OWFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTU2LDYgKzU2LDcgQEAgSU5DTFVERVBBVEggKz0gXAog
ICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0IFwKICAgICAkJFNPVVJD
RV9ESVIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdCBcCiAgICAgJCRTT1VSQ0VfRElSL1dl
YlByb2Nlc3MvV2ViUGFnZSBcCisgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVDb29yZGluYXRvciBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvcXQgXAog
ICAgICQkU09VUkNFX0RJUi9QbHVnaW5Qcm9jZXNzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGQ2NGViMDExMzI4Yjk3MjdjMGE4ZTA5
NGFlMThkMzVmMmRhMWZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhp
Y3NMYXllci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NDYgKzAsMCBAQAotLyoKLSBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVT
RShVSV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKLQot
I2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkxheWVyVHJl
ZUhvc3RQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPiYgbGF5ZXJCeUlE
TWFwKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVy
Kj4gZ2xvYmFsTWFwOwotICAgIHJldHVybiBnbG9iYWxNYXA7Ci19Ci0KLVdlYkdyYXBoaWNzTGF5
ZXIqIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQgaWQpCi17
Ci0gICAgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj4mIHRhYmxlID0gbGF5
ZXJCeUlETWFwKCk7Ci0gICAgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj46
Oml0ZXJhdG9yIGl0ID0gdGFibGUuZmluZChpZCk7Ci0gICAgaWYgKGl0ID09IHRhYmxlLmVuZCgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKLX0KLQotc3RhdGlj
IFdlYkxheWVySUQgdG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIHJl
dHVybiBsYXllciA/IHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPmlkKCkgOiAwOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUoKQotewotICAgIG1fc2hv
dWxkU3luY0xheWVyU3RhdGUgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xp
ZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpkaWRDaGFuZ2VDaGlsZHJlbigpCi17Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSB0
cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1
aXJlZCh0aGlzKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6ZGlkQ2hhbmdlRmlsdGVycygpCi17Ci0gICAgbV9zaG91bGRTeW5jRmlsdGVycyA9
IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1Jl
cXVpcmVkKHRoaXMpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0U2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3QoKQotewotICAgIGlmICghdHJhbnNmb3JtKCkuaXNBZmZpbmUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IHRy
dWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQot
ICAgICAgICB0b1dlYkdyYXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSktPnNldFNob3VsZFVwZGF0
ZVZpc2libGVSZWN0KCk7Ci0gICAgaWYgKHJlcGxpY2FMYXllcigpKQotICAgICAgICB0b1dlYkdy
YXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgp
OwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUdlb21ldHJ5KCkKLXsKLSAg
ICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Qo
KTsKLX0KLQotV2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVy
Q2xpZW50KiBjbGllbnQpCi0gICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKLSAgICAsIG1fbWFz
a1RhcmdldCgwKQotICAgICwgbV9pblVwZGF0ZU1vZGUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFVw
ZGF0ZVZpc2libGVSZWN0KHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNMYXllclN0YXRlKHRydWUp
Ci0gICAgLCBtX3Nob3VsZFN5bmNDaGlsZHJlbih0cnVlKQotICAgICwgbV9maXhlZFRvVmlld3Bv
cnQoZmFsc2UpCi0gICAgLCBtX2NhbnZhc05lZWRzRGlzcGxheShmYWxzZSkKLSAgICAsIG1fd2Vi
R3JhcGhpY3NMYXllckNsaWVudCgwKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBt
X2NhbnZhc1BsYXRmb3JtTGF5ZXIoMCkKLXsKLSAgICBzdGF0aWMgV2ViTGF5ZXJJRCBuZXh0TGF5
ZXJJRCA9IDE7Ci0gICAgbV9pZCA9IG5leHRMYXllcklEKys7Ci0gICAgbGF5ZXJCeUlETWFwKCku
YWRkKGlkKCksIHRoaXMpOwotfQotCi1XZWJHcmFwaGljc0xheWVyOjp+V2ViR3JhcGhpY3NMYXll
cigpCi17Ci0gICAgbGF5ZXJCeUlETWFwKCkucmVtb3ZlKGlkKCkpOwotCi0gICAgaWYgKG1fd2Vi
R3JhcGhpY3NMYXllckNsaWVudCkgewotICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAg
ICAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5kZXRhY2hMYXllcih0aGlzKTsKLSAgICB9
Ci0gICAgd2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6d2ls
bEJlRGVzdHJveWVkKCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQoKTsK
LX0KLQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3Jh
cGhpY3NMYXllcio+JiBjaGlsZHJlbikKLXsKLSAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gdG9XZWJHcmFwaGljc0xheWVyKGNoaWxkcmVu
W2ldKTsKLSAgICAgICAgY2hpbGQtPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFw
aGljc0xheWVyQ2xpZW50KTsKLSAgICAgICAgY2hpbGQtPmRpZENoYW5nZUxheWVyU3RhdGUoKTsK
LSAgICB9Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKLXsK
LSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7Ci0gICAgdG9XZWJHcmFwaGljc0xh
eWVyKGxheWVyKS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJD
bGllbnQpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPmRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKLSAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQotewot
ICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOwotICAgIHRv
V2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJH
cmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRD
aGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFw
aGljc0xheWVyKiBzaWJsaW5nKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUo
bGF5ZXIsIHNpYmxpbmcpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdy
YXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdy
YXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdl
Q2hpbGRyZW4oKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQotewotICAgIEdyYXBo
aWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwotICAgIHRvV2ViR3JhcGhp
Y3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xh
eWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXll
clN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotYm9vbCBXZWJHcmFwaGlj
c0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5
ZXIqIG5ld0NoaWxkKQotewotICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hp
bGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIob2xk
Q2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG5l
d0NoaWxkKS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJDbGll
bnQpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPmRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1v
dmVGcm9tUGFyZW50KCkKLXsKLSAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcGFyZW50TGF5ZXIg
PSB0b1dlYkdyYXBoaWNzTGF5ZXIocGFyZW50KCkpKQotICAgICAgICBwYXJlbnRMYXllci0+ZGlk
Q2hhbmdlQ2hpbGRyZW4oKTsKLSAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7
Ci0KLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBpZiAocG9zaXRpb24o
KSA9PSBwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlv
bihwKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKLXsKLSAgICBpZiAoYW5j
aG9yUG9pbnQoKSA9PSBwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpz
ZXRBbmNob3JQb2ludChwKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlm
ICh0aGlzLT5zaXplKCkgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NM
YXllcjo6c2V0U2l6ZShzaXplKTsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBpZiAobWFz
a0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zZXRTaXplKHNpemUpOwotICAgIGRpZENo
YW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQotewotICAgIGlmICh0cmFuc2Zvcm0oKSA9
PSB0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0o
dCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKLXsK
LSAgICBpZiAoY2hpbGRyZW5UcmFuc2Zvcm0oKSA9PSB0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSh0KTsKLSAgICBkaWRDaGFuZ2VH
ZW9tZXRyeSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGJv
b2wgYikKLXsKLSAgICBpZiAocHJlc2VydmVzM0QoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsKLSAgICBkaWRDaGFuZ2VHZW9t
ZXRyeSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9v
bCBiKQotewotICAgIGlmIChtYXNrc1RvQm91bmRzKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwot
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYik7Ci0gICAgZGlkQ2hhbmdlR2Vv
bWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9v
bCBiKQotewotICAgIGlmIChkcmF3c0NvbnRlbnQoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0g
ICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGIpOwotCi0gICAgZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVl
KGJvb2wgYikKLXsKLSAgICBpZiAoY29udGVudHNPcGFxdWUoKSA9PSBiKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9tYWluQmFja2luZ1N0
b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFiKTsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c09wYXF1ZShiKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKLXsKLSAgICBpZiAoYmFj
a2ZhY2VWaXNpYmlsaXR5KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NM
YXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
Ci17Ci0gICAgaWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgIGRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Jl
Y3QoY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBpZiAoY29udGVudHNSZWN0KCkgPT0gcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHIpOwot
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c05lZWRzRGlzcGxheSgpCi17Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1f
aW1hZ2U7Ci0gICAgc2V0Q29udGVudHNUb0ltYWdlKDApOwotICAgIHNldENvbnRlbnRzVG9JbWFn
ZShpbWFnZS5nZXQoKSk7Ci0gICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSB0cnVlOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcikKLXsKLSAgICBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPSBwbGF0Zm9ybUxh
eWVyOwotICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkp
Ci0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0KLSNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi1ib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKLXsKLSAgICBpZiAoZmlsdGVycygpID09
IG5ld0ZpbHRlcnMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRpZENoYW5nZUZpbHRlcnMo
KTsKLSAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsKLX0K
LSNlbmRpZgotCi0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKElt
YWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGludDY0X3QgbmV3SUQgPSAwOwotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGll
bnQpIHsKLSAgICAgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGluIGNhc2UgdGhpcyBpcyB0aGUgc2Ft
ZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lpbmcgYW5kIHJlY3JlYXRpbmcgdGhl
IGltYWdlLgotICAgICAgICBuZXdJRCA9IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+YWRvcHRJ
bWFnZUJhY2tpbmdTdG9yZShpbWFnZSk7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVu
dC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3Jl
SUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgICAgIGlmIChtX2xheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEICYmIG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdlQmFj
a2luZ1N0b3JlSUQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gSWYgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50IGlzIG5vdCBzZXQgeWV0IHRoZXJlIHNob3Vs
ZCBiZSBubyBiYWNraW5nIHN0b3JlIElELgotICAgICAgICBBU1NFUlQoIW1fbGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAg
fQotCi0gICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG5ld0lEOwotICAgIG1f
aW1hZ2UgPSBpbWFnZTsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1h
Z2UpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xh
eWVyKiBsYXllcikKLXsKLSAgICBpZiAobGF5ZXIgPT0gbWFza0xheWVyKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7Ci0KLSAgICBp
ZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0U2l6ZShzaXplKCkp
OwotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYkdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNz
TGF5ZXIobGF5ZXIpOwotICAgIHdlYkdyYXBoaWNzTGF5ZXItPnNldFdlYkdyYXBoaWNzTGF5ZXJD
bGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB3ZWJHcmFwaGljc0xheWVyLT5z
ZXRNYXNrVGFyZ2V0KHRoaXMpOwotICAgIHdlYkdyYXBoaWNzTGF5ZXItPmRpZENoYW5nZUxheWVy
U3RhdGUoKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0KLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKLXsK
LSAgICBpZiAobGF5ZXIgPT0gcmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChsYXllcikKLSAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+c2V0V2ViR3Jh
cGhpY3NMYXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOwotCi0gICAgR3JhcGhp
Y3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOwotICAgIGRpZENoYW5nZUxheWVy
U3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQot
ewotICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIElu
dFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpKTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS0+aW52YWxpZGF0ZShJbnRSZWN0KHJlY3QpKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7Ci19Ci0KLVdlYkxheWVySUQgV2ViR3JhcGhpY3NMYXllcjo6aWQoKSBjb25zdAotewotICAg
IHJldHVybiBtX2lkOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGlu
Z1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoV2ViR3JhcGhpY3NMYXll
ciogbWFzayA9IHRvV2ViR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCi0gICAgICAgIG1hc2st
PnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgaWYgKFdlYkdy
YXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkp
KQotICAgICAgICByZXBsaWNhLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KTsKLQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0ZpeGVkTGF5ZXJzKCk7Ci0K
LSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgY2hpbGRy
ZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7Ci19Ci0KLVdlYkdyYXBoaWNzTGF5
ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVyKTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4oKQotewotICAgIGlmICghbV9zaG91bGRTeW5jQ2hp
bGRyZW4pCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IGZhbHNl
OwotICAgIFZlY3RvcjxXZWJMYXllcklEPiBjaGlsZElEczsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkSURzLmFwcGVuZCh0
b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkpOwotCi0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xp
ZW50LT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7Ci19Ci0KLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKLXsKLSAg
ICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Nob3Vs
ZFN5bmNGaWx0ZXJzID0gZmFsc2U7Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5j
TGF5ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSgpCi0gewotICAgIGlmICghbV9zaG91bGRTeW5jTGF5
ZXJTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSBm
YWxzZTsKLSAgICBtX2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQo
KTsKLQotICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKLSAgICBt
X2xheWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKLSAgICBt
X2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7Ci0gICAg
bV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOwotICAgIG1fbGF5
ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOwotICAgIG1fbGF5ZXJJbmZvLmRy
YXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dl
YkxheWVySUQobWFza0xheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBt
YXNrc1RvQm91bmRzKCk7Ci0gICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKLSAg
ICBtX2xheWVySW5mby5wYXJlbnQgPSB0b1dlYkxheWVySUQocGFyZW50KCkpOwotICAgIG1fbGF5
ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7Ci0gICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBw
cmVzZXJ2ZXMzRCgpOwotICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVw
bGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7Ci0gICAgbV9sYXll
ckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xp
ZW50LT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7Ci19Ci0KLXZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6c3luY0NhbnZhcygpCi17Ci0gICAgaWYgKCFtX2NhbnZhc05lZWRzRGlzcGxh
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpCi0g
ICAgICAgIHJldHVybjsKLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHVpbnQzMl90
IGdyYXBoaWNzU3VyZmFjZVRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFw
aGljc1N1cmZhY2UoKTsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNDYW52YXMo
bV9pZCwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4pOwotI2VuZGlmCi0gICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSBmYWxzZTsK
LX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjplbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpCi17
Ci0gICAgaWYgKCFtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2xheWVySW5m
by5pbWFnZUJhY2tpbmdTdG9yZUlEKQotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEID0gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3Jl
KG1faW1hZ2UuZ2V0KCkpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCi17Ci0gICAgLy8gVGhlIHJlbW90ZSBpbWFnZSBt
aWdodCBoYXZlIGJlZW4gcmVsZWFzZWQgYnkgcHVyZ2VCYWNraW5nU3RvcmVzLgotICAgIGVuc3Vy
ZUltYWdlQmFja2luZ1N0b3JlKCk7Ci0gICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3Qo
KTsKLSAgICBzeW5jQ2hpbGRyZW4oKTsKLSAgICBzeW5jTGF5ZXJTdGF0ZSgpOwotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLSAgICBzeW5jRmlsdGVycygpOwotI2VuZGlmCi0gICAgdXBkYXRlQ29u
dGVudEJ1ZmZlcnMoKTsKLSAgICBzeW5jQ2FudmFzKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKLXsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCi17Ci0gICAgbV9sYXllckluZm8u
aXNSb290TGF5ZXIgPSBpc1Jvb3Q7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0
b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBpZiAobV9tYWlu
QmFja2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVz
SWZOZWVkZWQodHJhamVjdG9yeVZlY3Rvcik7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKLXsKLSAgICBtX2NvbnRlbnRzU2NhbGUgPSBz
Y2FsZTsKLSAgICBhZGp1c3RDb250ZW50c1NjYWxlKCk7Ci19Ci0KLWZsb2F0IFdlYkdyYXBoaWNz
TGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKQotewotICAgIHJldHVybiBzaG91bGRVc2VU
aWxlZEJhY2tpbmdTdG9yZSgpID8gbV9jb250ZW50c1NjYWxlIDogMTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjphZGp1c3RDb250ZW50c1NjYWxlKCkKLXsKLSAgICBpZiAoIWRyYXdzQ29u
dGVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSB8
fCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSA9PSBlZmZlY3RpdmVDb250ZW50
c1NjYWxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhl
IG5ldyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGluZyB0aGUgY29udGVudCwKLSAgICAvLyB3ZSBk
byBub3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2aW91cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQg
aW4KLSAgICAvLyBicmllZmx5IHNlZWluZyBmbGlja2VyaW5nIGFzIHRoZSBvbGQgdGlsZXMgbWF5
IGJlIGRyb3BwZWQgYmVmb3JlCi0gICAgLy8gc29tZXRoaW5nIHJlcGxhY2VzIHRoZW0uCi0gICAg
bV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0K
LSAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Ig
bm9uLXZpc2libGUgYXJlYXMuCi0gICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS0+cmVtb3ZlQWxs
Tm9uVmlzaWJsZVRpbGVzKCk7Ci0KLSAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUoKQotewotICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKLSAgICBtX21haW5C
YWNraW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWNvbnRlbnRzT3BhcXVlKCkpOwotICAgIG1f
bWFpbkJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZShlZmZlY3RpdmVDb250ZW50c1NjYWxl
KCkpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlm
IChyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBhaW50R3JhcGhpY3NMYXll
ckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjp0
aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJl
Y3RzKQotewotfQotCi1ib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBk
YXRlc0FsbG93ZWQoKSBjb25zdAotewotICAgIGlmICghbV9pblVwZGF0ZU1vZGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5sYXll
clRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsKLX0KLQotSW50UmVjdCBXZWJHcmFwaGljc0xheWVy
Ojp0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCi17Ci0gICAgcmV0dXJuIEludFJlY3Qo
MCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Ci19Ci0KLWJvb2wgV2ViR3Jh
cGhpY3NMYXllcjo6c2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKQotewotICAgIHJldHVybiAh
c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwotfQotCi1JbnRSZWN0IFdl
YkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQotewotICAgIGlm
ICghc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KCk7Ci0KLSAgICAvLyBOb24taW52ZXJ0aWJsZSBsYXllcnMg
YXJlIG5vdCB2aXNpYmxlLgotICAgIGlmICghbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlz
SW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgLy8gUmV0dXJu
IGEgcHJvamVjdGlvbiBvZiB0aGUgdmlzaWJsZSByZWN0IChzdXJmYWNlIGNvb3JkaW5hdGVzKSBv
bnRvIHRoZSBsYXllcidzIHBsYW5lIChsYXllciBjb29yZGluYXRlcykuCi0gICAgLy8gVGhlIHJl
c3VsdGluZyBxdWFkIG1pZ2h0IGJlIHNxdWV3ZWQgYW5kIHRoZSB2aXNpYmxlIHJlY3QgaXMgdGhl
IGJvdW5kaW5nIGJveCBvZiB0aGlzIHF1YWQsCi0gICAgLy8gc28gaXQgbWlnaHQgc3ByZWFkIGZ1
cnRoZXIgdGhhbiB0aGUgcmVhbCB2aXNpYmxlIGFyZWEgKGFuZCB0aGVuIGV2ZW4gbW9yZSBhbXBs
aWZpZWQgYnkgdGhlIGNvdmVyIHJlY3QgbXVsdGlwbGllcikuCi0gICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QobV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKS5jbGFtcGVkQm91
bmRzT2ZQcm9qZWN0ZWRRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobV93ZWJHcmFwaGljc0xheWVy
Q2xpZW50LT52aXNpYmxlQ29udGVudHNSZWN0KCkpKSkpOwotfQotCi1Db2xvciBXZWJHcmFwaGlj
c0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJl
bnQ7Ci19Ci0KLVBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBXZWJHcmFwaGlj
c0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwg
U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZz
ZXQpCi17Ci0gICAgcmV0dXJuIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50
VXBkYXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBw
b3J0c0FscGhhLCBoYW5kbGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bywgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJD
bGllbnQtPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsK
LX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0
IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
KQotewotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dXBkYXRlVGlsZShpZCgpLCB0aWxl
SUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3QpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKLXsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQt
PnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjp1
cGRhdGVDb250ZW50QnVmZmVycygpCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkgewotICAg
ICAgICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICAgICAgbV9wcmV2aW91c0JhY2tp
bmdTdG9yZS5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9pblVwZGF0
ZU1vZGUgPSB0cnVlOwotICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0
ZSB0aGUgbWFpbiB0aWxlZCBiYWNraW5nIHN0b3JlLCBvbmNlIHdlCi0gICAgLy8gaGF2ZSBhIHJl
bW90ZSBjbGllbnQgYW5kIHdlIGFyZSByZWFkeSB0byBzZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBw
cm9jZXNzLgotICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlKQotICAgICAgICBjcmVhdGVCYWNr
aW5nU3RvcmUoKTsKLSAgICBtX21haW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7
Ci0gICAgbV9pblVwZGF0ZU1vZGUgPSBmYWxzZTsKLQotICAgIC8vIFRoZSBwcmV2aW91cyBiYWNr
aW5nIHN0b3JlIGlzIGtlcHQgYXJvdW5kIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgotICAg
IC8vIHJlbW92aW5nIHRoZSBleGlzdGluZyB0aWxlcyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVz
LiBUaGUgZmlyc3QgdGltZQotICAgIC8vIHRoZSB2aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQg
d2UgcmVtb3ZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlLgotICAgIGlmIChtX21haW5CYWNr
aW5nU3RvcmUtPnZpc2libGVBcmVhSXNDb3ZlcmVkKCkpCi0gICAgICAgIG1fcHJldmlvdXNCYWNr
aW5nU3RvcmUuY2xlYXIoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tp
bmdTdG9yZXMoKQotewotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fcHJl
dmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKLQotICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJh
Y2tpbmdTdG9yZUlEKSB7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFz
ZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAg
ICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gMDsKLSAgICB9Ci0KLSAgICBk
aWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6V2Vi
R3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotewotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5
ZXJDbGllbnQgPT0gY2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV2ViR3JhcGhp
Y3NMYXllciogcmVwbGljYSA9IHRvV2ViR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCi0g
ICAgICAgIHJlcGxpY2EtPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoY2xpZW50KTsKLSAgICBp
ZiAoV2ViR3JhcGhpY3NMYXllciogbWFzayA9IHRvV2ViR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIo
KSkpCi0gICAgICAgIG1hc2stPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoY2xpZW50KTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hp
bGRyZW4oKVtpXSk7Ci0gICAgICAgIGxheWVyLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KGNs
aWVudCk7Ci0gICAgfQotCi0gICAgLy8gV2UgaGF2ZSB0byByZWxlYXNlIHJlc291cmNlcyBvbiB0
aGUgVUkgcHJvY2VzcyBoZXJlIGlmIHRoZSByZW1vdGUgY2xpZW50IGhhcyBjaGFuZ2VkIG9yIGlz
IHJlbW92ZWQuCi0gICAgaWYgKG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCkgewotICAgICAgICBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5k
ZXRhY2hMYXllcih0aGlzKTsKLSAgICB9Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50ID0g
Y2xpZW50OwotICAgIGlmIChjbGllbnQpCi0gICAgICAgIGNsaWVudC0+YXR0YWNoTGF5ZXIodGhp
cyk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRqdXN0VmlzaWJsZVJlY3QoKQotewot
ICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+
Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNv
bXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkVXBkYXRl
VmlzaWJsZVJlY3QpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVS
ZWN0ID0gZmFsc2U7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybSh0cmFu
c2Zvcm0oKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsK
LSAgICBtX2xheWVyVHJhbnNmb3JtLnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KCkpOwotICAg
IG1fbGF5ZXJUcmFuc2Zvcm0uc2V0U2l6ZShzaXplKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0u
c2V0RmxhdHRlbmluZyghcHJlc2VydmVzM0QoKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRD
aGlsZHJlblRyYW5zZm9ybShjaGlsZHJlblRyYW5zZm9ybSgpKTsKLSAgICBtX2xheWVyVHJhbnNm
b3JtLmNvbWJpbmVUcmFuc2Zvcm1zKHBhcmVudCgpID8gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVu
dCgpKS0+bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZEZvckNoaWxkcmVuKCkgOiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpKTsKLQotICAgIC8vIFRoZSBjb21iaW5lZCB0cmFuc2Zvcm0gd2lsbCBiZSB1
c2VkIGluIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QuCi0gICAgYWRqdXN0VmlzaWJsZVJl
Y3QoKTsKLSAgICBhZGp1c3RDb250ZW50c1NjYWxlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRy
PEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZVdlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVu
dCogY2xpZW50KQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViR3JhcGhpY3NMYXllcihj
bGllbnQpKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjppbml0RmFjdG9yeSgpCi17Ci0g
ICAgR3JhcGhpY3NMYXllcjo6c2V0R3JhcGhpY3NMYXllckZhY3RvcnkoY3JlYXRlV2ViR3JhcGhp
Y3NMYXllcik7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXZl
Tm9uQWZmaW5lVHJhbnNmb3JtcygpCi17Ci0gICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJp
bmVkKCkuaXNBZmZpbmUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2RkNzgwNjE1ZjM1OTNhZTFiMDRmNjRkZWRmNzIzYjliOWRjODVmYS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0gICAgLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLQotI2lmbmRlZiBXZWJHcmFwaGljc0xheWVyX2gKLSNkZWZpbmUgV2ViR3Jh
cGhpY3NMYXllcl9oCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0xheWVyLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0j
aW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIK
LSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCi0j
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgi
Ci0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+Ci0KLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIFdlYkdyYXBoaWNzTGF5ZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICAvLyBUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJM
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGlu
dCB0aWxlSUQpID0gMDsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29u
dGVudHNSZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBk
YXRlc0FsbG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VC
YWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVh
c2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxh
eWVySUQ+JikgPSAwOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zJikgPSAwOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgdmlydHVhbCB2b2lkIHN5
bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwg
dWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pID0gMDsKLSNlbmRpZgotICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNz
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBTaGFyZWFibGVTdXJm
YWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKLX07Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpH
cmFwaGljc0xheWVyCi0gICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFRpbGVkQmFja2lu
Z1N0b3JlQ2xpZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYktpdDo6VGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci17Ci1wdWJsaWM6Ci0gICAgV2ViR3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+V2ViR3JhcGhpY3NM
YXllcigpOwotCi0gICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBHcmFwaGljc0xheWVyLmgu
Ci0gICAgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7Ci0g
ICAgdm9pZCBhZGRDaGlsZChHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBhZGRDaGlsZEF0SW5k
ZXgoR3JhcGhpY3NMYXllciosIGludCk7Ci0gICAgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0xheWVyKik7Ci0gICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NM
YXllciosIEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKLSAg
ICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpOwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9h
dFNpemUmKTsKLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYpOwotICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKLSAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwotICAgIHZvaWQgc2V0TWFz
a3NUb0JvdW5kcyhib29sKTsKLSAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKLSAgICB2
b2lkIHNldENvbnRlbnRzT3BhcXVlKGJvb2wpOwotICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmls
aXR5KGJvb2wpOwotICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7Ci0gICAgdm9pZCBzZXRDb250
ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKElt
YWdlKik7Ci0gICAgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKLSAg
ICB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBzZXRSZXBsaWNh
dGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsK
LSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2
b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c1NjYWxl
KGZsb2F0KTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3Io
Y29uc3QgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0
ZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGJvb2wg
c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLQotICAgIHZvaWQg
c2V0Um9vdExheWVyKGJvb2wpOwotCi0gICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7
Ci0gICAgc3RhdGljIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVy
SUQpOwotICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKLSAgICBJbWFnZSogaW1hZ2UoKSB7IHJl
dHVybiBtX2ltYWdlLmdldCgpOyB9Ci0KLSAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0
IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9Ci0gICAgdm9pZCBzZXRGaXhlZFRvVmlld3Bv
cnQoYm9vbCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsgfQotCi0gICAg
R3JhcGhpY3NMYXllciogbWFza1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RhcmdldDsg
fQotICAgIHZvaWQgc2V0TWFza1RhcmdldChHcmFwaGljc0xheWVyKiBsYXllcikgeyBtX21hc2tU
YXJnZXQgPSBsYXllcjsgfQotCi0gICAgc3RhdGljIHZvaWQgaW5pdEZhY3RvcnkoKTsKLQotICAg
IC8vIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRCZWdpbigpOwotICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRB
cmVhKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVj
dCgpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCk7
Ci0gICAgdmlydHVhbCBDb2xvciB0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNv
bnN0OwotCi0gICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0
aWxlSUQpOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViS2l0OjpTaGFy
ZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOwotCi0gICAgdm9pZCBz
ZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVudCop
OwotICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7Ci0gICAgdm9pZCBzeW5jTGF5ZXJTdGF0ZSgpOwot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHN5bmNGaWx0ZXJzKCk7Ci0jZW5kaWYK
LSAgICB2b2lkIHN5bmNDYW52YXMoKTsKLSAgICB2b2lkIGVuc3VyZUltYWdlQmFja2luZ1N0b3Jl
KCk7Ci0KLSAgICB2b2lkIGFkanVzdFZpc2libGVSZWN0KCk7Ci0gICAgYm9vbCBpc1JlYWR5Rm9y
VGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7
Ci0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7Ci0gICAgV2ViS2l0OjpXZWJMYXllcklEIG1faWQ7Ci0g
ICAgV2ViS2l0OjpXZWJMYXllckluZm8gbV9sYXllckluZm87Ci0gICAgUmVmUHRyPEltYWdlPiBt
X2ltYWdlOwotICAgIEdyYXBoaWNzTGF5ZXIqIG1fbWFza1RhcmdldDsKLSAgICBGbG9hdFJlY3Qg
bV9uZWVkc0Rpc3BsYXlSZWN0OwotICAgIExheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07
Ci0gICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFVwZGF0ZVZp
c2libGVSZWN0OiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsKLSAgICBi
b29sIG1fc2hvdWxkU3luY0NoaWxkcmVuOiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jRmlsdGVy
czogMTsKLSAgICBib29sIG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsKLSAgICBib29sIG1fY2FudmFz
TmVlZHNEaXNwbGF5IDogMTsKLQotICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgdm9pZCBk
aWRDaGFuZ2VHZW9tZXRyeSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAg
IHZvaWQgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAg
dm9pZCBkaWRDaGFuZ2VGaWx0ZXJzKCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgY3JlYXRlQmFja2lu
Z1N0b3JlKCk7Ci0KLSAgICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9y
bXMoKTsKLSAgICBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCk7Ci0gICAgdm9pZCBh
ZGp1c3RDb250ZW50c1NjYWxlKCk7Ci0gICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxl
UmVjdCgpOwotICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycygpOwotICAgIHZvaWQgc2V0U2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKLSAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50c1NjYWxl
KCk7Ci0KLSAgICBXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqIG1fd2ViR3JhcGhpY3NM
YXllckNsaWVudDsKLSAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFp
bkJhY2tpbmdTdG9yZTsKLSAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1f
cHJldmlvdXNCYWNraW5nU3RvcmU7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotICAgIFBs
YXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKLX07Ci0KLVdlYkdyYXBoaWNzTGF5
ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7Ci0KLX0KLSNlbmRpZgotCi0j
ZW5kaWYgLy8gV2ViR3JhcGhpY3NMYXllcl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IDY4NWNiODNkODE5OWY1YTI0MzEyMDRjODMz
NjI4NTVmMmFiZGRlZGIuLjcxYWE2MDdjYjVlOGY3NDhlMmJmZTEzNjY5MThmNjljY2VhNjFjMGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5o
CkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKFVJX1NJREVfQ09N
UE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVD
b29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikgPSAwOwogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShXSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWFJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYUltcGwuY3BwCmluZGV4IGRkYWRjYjE1ZjY3MDc5Mjg2NjE2ZGFmOThiMjEyNjcyZDc5
YjU0ZTIuLjVlNmQ1ZWMwYTA3YzhmNjYzZDQ5ZDM4MGE1YzcwZmQxNmE3ZDgzNmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwu
Y3BwCkBAIC02ODksMTAgKzY4OSwxMCBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheShV
cGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogfQogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcp
Ci12b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdl
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQordm9pZCBEcmF3aW5nQXJl
YUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3Nh
Z2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVudHMpOworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoY29ubmVjdGlvbiwg
bWVzc2FnZUlELCBhcmd1bWVudHMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCAzOWQwNTE1YjUz
MDRkODdiMjBjNzFkNzgxYjkzZjQzYWVhNzg0ZDg3Li4yY2ViYmQ1YzRjZjQxZDI2OTZjODk0ZjE3
YzcyYjQzMGM1OGY1ZGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBAIC03OCw3ICs3OCw3IEBAIHByaXZhdGU6CiAjZW5k
aWYKIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAjZW5k
aWYKIAogICAgIC8vIENvcmVJUEMgbWVzc2FnZSBoYW5kbGVycy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRy
ZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYz
ZTg3MzVlNWMxYjY1MDNhNzIwNDE2OTdiZDVkMjg2NDc4NDA4MmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC0wLDAgKzEsNTc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxheWVyVHJlZUNv
b3JkaW5hdG9yLmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRl
SW5mby5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldl
YkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRyZWVDb29yZGluYXRvcj4gTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTGF5ZXJUcmVlQ29vcmRpbmF0b3Iod2ViUGFnZSkpOworfQorCitMYXll
clRyZWVDb29yZGluYXRvcjo6fkxheWVyVHJlZUNvb3JkaW5hdG9yKCkKK3sKKyAgICAvLyBQcmV2
ZW50IHNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkgLT4gZGV0YWNoTGF5ZXIoKSBmcm9tIG1v
ZGlmeWluZyB0aGUgc2V0IHdoaWxlIHdlIGl0ZXJhdGUgaXQuCisgICAgSGFzaFNldDxXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyKj4gcmVnaXN0ZXJlZExheWVyczsKKyAgICByZWdpc3RlcmVkTGF5
ZXJzLnN3YXAobV9yZWdpc3RlcmVkTGF5ZXJzKTsKKworICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSByZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwor
ICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0
ID0gcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgq
aXQpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KDApOworfQorCitMYXllclRyZWVDb29yZGlu
YXRvcjo6TGF5ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVy
VHJlZUhvc3Qod2ViUGFnZSkKKyAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
KGZhbHNlKQorICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3ModHJ1ZSkKKyAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCisgICAgLCBtX2NvbnRlbnRzU2Nh
bGUoMSkKKyAgICAsIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRydWUpCisgICAg
LCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0
cnVlKQorICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpsYXllckZsdXNoVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKHRydWUpCit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXll
ciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBXZWJHcmFwaGljc0xheWVyKiB3
ZWJSb290TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAg
IHdlYlJvb3RMYXllci0+c2V0Um9vdExheWVyKHRydWUpOworI2lmbmRlZiBOREVCVUcKKyAgICBt
X3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3Igcm9vdCBsYXllciIpOwor
I2VuZGlmCisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9y
b290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworICAgIG1fbGF5ZXJUcmVlQ29u
dGV4dC53ZWJMYXllcklEID0gdG9XZWJHcmFwaGljc0xheWVyKHdlYlJvb3RMYXllciktPmlkKCk7
CisKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVh
dGUodGhpcyk7CisgICAgdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0
V2ViR3JhcGhpY3NMYXllckNsaWVudCh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBub24t
Y29tcG9zaXRlZCBjb250ZW50Iik7CisjZW5kaWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFk
ZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBpZiAobV93
ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVy
KCk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGlu
Z0VuYWJsZWQpCit7CisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxh
eWVyRmx1c2hpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hT
Y2hlZHVsaW5nRW5hYmxlZCA9IGxheWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5
ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKSB7CisgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2go
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKCkK
K3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1f
bGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFRp
bWVyLnN0b3AoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0U2hvdWxkTm90
aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaCkKK3sKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5v
dGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFs
bENoaWxkcmVuKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50
c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOworCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBs
YXllciB0cmVlIGhpZXJhcmNoeS4KKyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKK30KKwor
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6aW52YWxpZGF0ZSgpCit7CisgICAgY2FuY2VsUGVu
ZGluZ0xheWVyRmx1c2goKTsKKworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9vdExh
eWVyID0gbnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxh
eWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQor
eworICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOwor
fQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQoKQoreworICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaXpl
RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKG1f
cm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9y
b290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBv
c2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlz
cGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KKyAg
ICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgp
OworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKwor
ICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKKyAgICAgICAgZmxv
YXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkp
LCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3
U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBp
ZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBv
bGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRT
aXplLmhlaWdodCgpKSk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkSW5zdGFsbFBhZ2VP
dmVybGF5KCkKK3sKKyAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZFVuaW5zdGFs
bFBhZ2VPdmVybGF5KCkKK3sKKyAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQ
YWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQorewor
ICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwor
fQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxv
YXQgdmFsdWUpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXRPcGFjaXR5KHZhbHVlKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKK30KKworYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCkKK3sKKyAgICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5G
cmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OworCisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOworICAgIHJldHVybiBkaWRTeW5jOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGluZm8p
Cit7CisgICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7CisgICAgICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlk
Q2hhbmdlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCkpKTsK
KyAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAgICB9
CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRl
KGlkLCBpbmZvKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNo
aWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYgY2hpbGRyZW4p
Cit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNo
aWxkcmVuKGlkLCBjaGlsZHJlbikpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpz
eW5jQ2FudmFzKFdlYkxheWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQz
Ml90IGdyYXBoaWNzU3VyZmFjZVRva2VuKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OlN5bmNDYW52YXMoaWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7Cit9
CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpz
eW5jTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdM
YXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKK30KKyNlbmRpZgorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjphdHRhY2hMYXllcihXZWJHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBB
U1NFUlQoIW1fcmVnaXN0ZXJlZExheWVycy5jb250YWlucyhsYXllcikpOworICAgIG1fcmVnaXN0
ZXJlZExheWVycy5hZGQobGF5ZXIpOworCisgICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUobV9j
b250ZW50c1NjYWxlKTsKKyAgICBsYXllci0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5
ZXIpCit7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllcik7CisgICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihsYXllci0+aWQoKSkp
OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJlbmRl
ckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3QgbWF0
Y2ggdGhlIGNvbmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBv
c2l0aW5nRm9yUG9zaXRpb24uCisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVu
ZGVyTGF5ZXItPmJhY2tpbmcoKTsKKyAgICBpZiAoIWJhY2tpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHls
ZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVy
TGF5ZXItPnJlbmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHJlbmRlckxheWVy
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmNvbnRhaW5l
cigpLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJM
YXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViR3Jh
cGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihiYWNraW5nLT5n
cmFwaGljc0xheWVyKCkpOworICAgIGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0
cnVlKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIo
UmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9y
dEZvclNlbGYocmVuZGVyTGF5ZXIpOworCisgICAgaWYgKHJlbmRlckxheWVyLT5maXJzdENoaWxk
KCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVy
LT5maXJzdENoaWxkKCkpOworICAgIGlmIChyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSkKKyAg
ICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPm5leHRT
aWJsaW5nKCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXll
cnMoKQoreworICAgIGlmICghbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpIHx8ICFt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdG
b3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
d2ViUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+aGFzRml4ZWRPYmplY3RzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlbmRlckxheWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2Ut
Pm1haW5GcmFtZSgpLT5jb250ZW50UmVuZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVy
TGF5ZXIoKTsKKyAgICBBU1NFUlQocm9vdFJlbmRlckxheWVyKTsKKyAgICBpZiAocm9vdFJlbmRl
ckxheWVyLT5maXJzdENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZv
ckxheWVyKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQoreworICAgIGlmICht
X2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgaWYgKCFtX2lzVmFsaWQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAg
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNGcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RMYXllcikgeworICAg
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5n
ZXQoKSktPmlkKCkpKTsKKyAgICAgICAgbV9zaG91bGRTeW5jUm9vdExheWVyID0gZmFsc2U7Cisg
ICAgfQorCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpEaWRSZW5kZXJGcmFtZSgpKTsKKyAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0
cnVlOworCisgICAgaWYgKCFtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gTGV0IHRoZSBkcmF3aW5nIGFyZWEga25vdyB0aGF0IHdlJ3Zl
IGRvbmUgYSBmbHVzaCBvZiB0aGUgbGF5ZXIgY2hhbmdlcy4KKyAgICBzdGF0aWNfY2FzdDxEcmF3
aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVz
aExheWVycygpOworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRp
bWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopCit7CisgICAgcGVyZm9ybVNjaGVkdWxlZExheWVy
Rmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlUGFnZU92ZXJs
YXlMYXllcigpCit7CisgICAgQVNTRVJUKCFtX3BhZ2VPdmVybGF5TGF5ZXIpOworCisgICAgbV9w
YWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lmbmRlZiBO
REVCVUcKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5h
dG9yIHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0
U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9w
YWdlT3ZlcmxheUxheWVyLmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5
ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1f
cGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Cit9CisKK2ludDY0X3QgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQoreworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKKworICAgIGludDY0X3Qg
a2V5ID0gMDsKKworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFQaXhtYXAqIHBpeG1hcCA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworCisgICAgaWYgKCFwaXhtYXApCisgICAg
ICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKKworICAgIGtleSA9IHBpeG1hcC0+Y2FjaGVL
ZXkoKTsKKyNlbmRpZgorCisgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOworCisgICAgaWYg
KGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKKyAgICAg
ICAgKysoaXQtPnNlY29uZCk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfQorCisgICAgUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFy
ZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hh
cmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOworICAgIHsKKyAgICAgICAgT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVh
dGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2Uo
aW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOworICAgIH0KKwor
ICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBiaXRtYXAtPmNyZWF0ZUhh
bmRsZShoYW5kbGUpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUp
KTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFkZChrZXksIDEpOwor
ICAgIHJldHVybiBrZXk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJ
bWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKK3sKKyAgICBpZiAoIWtleSkKKyAgICAgICAg
cmV0dXJuOworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0gbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaXQtPnNlY29uZC0tOworCisgICAgaWYgKGl0LT5zZWNvbmQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXkpKTsKK30KKworCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQor
eworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFz
ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgaWYgKGdyYXBoaWNz
TGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7CisgICAgICAgIG1fd2ViUGFn
ZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsK
KyAgICAgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250ZW50cyBhbmQgd29u
J3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJpbmcsIHNvIHdlIGRv
IGl0IGhlcmUuCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclJlY3QoY2xpcFJlY3QpOwor
ICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRleHQsIGNsaXBS
ZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBMYXllclRyZWVDb29yZGlu
YXRvcjo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29u
c3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93
RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNob3dSZXBh
aW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93UmVwYWludENvdW50
ZXIoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdl
dFJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlVGlsZUZvckxh
eWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbykpOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRl
SW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKFdlYkxh
eWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Cit9CisKK1dlYkNvcmU6
OkludFJlY3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25z
dAoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7Cisg
ICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRz
UmVjdDsKKyAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRl
bnRzU2NhbGU7CisKKyAgICBpZiAodHJhamVjdG9yeVZlY3RvciAhPSBGbG9hdFBvaW50Ojp6ZXJv
KCkpCisgICAgICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3Rv
cnlWZWN0b3IpOworCisgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50c1Nj
YWxlRGlkQ2hhbmdlKSB7CisgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Cisg
ICAgICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOworCisgICAgICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMu
ZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46
Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpCisgICAgICAgICAg
ICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworICAgICAgICAgICAgaWYgKGNv
bnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJs
ZVJlY3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwor
ICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpCisgICAgICAgIG1fd2ViUGFnZS0+
c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7CisgICAgaWYgKGNvbnRlbnRzUmVjdERp
ZENoYW5nZSkKKyAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVl
OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUoKQorewor
ICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytp
KQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0uZGlkU3dhcEJ1ZmZlcnMoKTsKK30KKworYm9v
bCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1faXNTdXNwZW5kZWQgJiYgIW1fd2FpdGluZ0ZvclVJUHJvY2Vz
czsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkK
K3sKKyAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5k
ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnB1cmdlQmFja2luZ1N0b3Jlcygp
OworCisgICAgQVNTRVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnNpemUo
KSk7CisgICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0PiBMYXllclRyZWVDb29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBk
YXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3Mg
ZmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2lu
dCYgb2Zmc2V0KQoreworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBVcGRhdGVBdGxhcyYgYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNb
aV07CisgICAgICAgIGlmIChhdGxhcy5mbGFncygpID09IGZsYWdzKSB7CisgICAgICAgICAgICAv
LyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBz
cGFjZS4KKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLmJlZ2luUGFpbnRpbmdP
bkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAo
Z3JhcGhpY3NDb250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQu
cmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3Jh
dGNoQnVmZmVyRGltZW5zaW9uID0gMjAwMDsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKFVw
ZGF0ZUF0bGFzKFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSk7CisgICAgcmV0dXJuIG1f
dXBkYXRlQXRsYXNlcy5sYXN0KCkuYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGhhbmRs
ZSwgc2l6ZSwgb2Zmc2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJjNDQ5ZjQ2YTI4MmIyZWZhOTg5YWNjZjNmYjk0ZGI3MjU1MjhmMDMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2lmbmRlZiBMYXllclRyZWVDb29yZGluYXRvcl9oCisjZGVmaW5lIExheWVyVHJl
ZUNvb3JkaW5hdG9yX2gKKworI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRl
ICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVcGRhdGVB
dGxhcy5oIgorI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBVcGRhdGVJbmZvOworY2xhc3MgV2ViUGFnZTsKKworY2xh
c3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3IgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMg
V2ViR3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IGNyZWF0ZShXZWJQYWdlKik7CisgICAgdmlydHVhbCB+TGF5
ZXJUcmVlQ29vcmRpbmF0b3IoKTsKKworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZygpOworCisgICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBs
YXllclRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9CisgICAgdmly
dHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3Vs
ZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5vbkNv
bXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNl
dCk7CisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBz
aXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpOworCisgICAgdmly
dHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRV
bmluc3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNl
dFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7CisgICAgdmlydHVhbCBib29sIHBhZ2VPdmVybGF5
U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0g
ZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRldmljZVNj
YWxlRmFjdG9yRGlkQ2hhbmdlKCkgeyB9CisgICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VC
YWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUlt
YWdlQmFja2luZ1N0b3JlKGludDY0X3QpOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUo
V2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRp
bGVJRCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdmlydHVh
bCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVU
aWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJl
ZUNvb3JkaW5hdG9yTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2Fn
ZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKKworICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVy
SUQ+Jik7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5
ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsK
KyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVySUQsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2Vu
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOworCisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250
ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdz
LCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworCitwcm90
ZWN0ZWQ6CisgICAgZXhwbGljaXQgTGF5ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSopOworCitw
cml2YXRlOgorICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91Ymxl
IHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
Y2xpcFJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRD
b3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKKworICAgIC8vIExh
eWVyVHJlZUNvb3JkaW5hdG9yCisgICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Cisg
ICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIGJvb2wgZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAg
IHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIHNlbmRMYXllcnNU
b1VJKCk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7
CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNv
bnRlbnQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUg
bnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgSGFzaFNldDxXZWJDb3JlOjpX
ZWJHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOworICAgIEhhc2hNYXA8aW50NjRf
dCwgaW50PiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOworICAgIFZlY3RvcjxV
cGRhdGVBdGxhcz4gbV91cGRhdGVBdGxhc2VzOworCisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaDsKKyAgICBib29sIG1faXNWYWxpZDsKKworICAgIGJvb2wgbV93YWl0
aW5nRm9yVUlQcm9jZXNzOworICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7
CisgICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKKworICAgIExheWVy
VHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworICAgIGJvb2wgbV9zaG91bGRTeW5jRnJh
bWU7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNSb290TGF5ZXI7CisgICAgdm9pZCBsYXllckZsdXNo
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKTsKKyAgICBX
ZWJDb3JlOjpUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4gbV9sYXllckZsdXNoVGltZXI7Cisg
ICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZDsKK307CisKK30KKworI2VuZGlm
IC8vIExheWVyVHJlZUNvb3JkaW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hZmY2Zjk2YWRiNmE1MWZiNTNhMjdhNTE2ZWMxZmUwZTVkMzhmMjBiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5h
dG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjcgQEAKKyMK
KyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lU
SU5HKQorbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3IgeworICAgIFNldFZpc2libGVD
b250ZW50c1JlY3QoV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBz
Y2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCB0cmFqZWN0b3J5VmVjdG9yeSkKKyAgICBSZW5kZXJO
ZXh0RnJhbWUoKQorICAgIFB1cmdlQmFja2luZ1N0b3JlcygpCit9CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRv
ci9XZWJHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
ODE0OTEyNDU1ZWZiYTQ3MzI3MjUxMThhY2ZlZGI0ZjhhMjM5YzY1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9y
L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0wLDAgKzEsNzQ2IEBACisvKgorIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFVJ
X1NJREVfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgorCisjaW5j
bHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPiYgbGF5ZXJC
eUlETWFwKCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xh
eWVyKj4gZ2xvYmFsTWFwOworICAgIHJldHVybiBnbG9iYWxNYXA7Cit9CisKK1dlYkdyYXBoaWNz
TGF5ZXIqIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQgaWQp
Cit7CisgICAgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj4mIHRhYmxlID0g
bGF5ZXJCeUlETWFwKCk7CisgICAgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVy
Kj46Oml0ZXJhdG9yIGl0ID0gdGFibGUuZmluZChpZCk7CisgICAgaWYgKGl0ID09IHRhYmxlLmVu
ZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKworc3Rh
dGljIFdlYkxheWVySUQgdG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAg
IHJldHVybiBsYXllciA/IHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPmlkKCkgOiAwOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUoKQoreworICAgIG1f
c2hvdWxkU3luY0xheWVyU3RhdGUgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAg
Y2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpkaWRDaGFuZ2VDaGlsZHJlbigpCit7CisgICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4g
PSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNS
ZXF1aXJlZCh0aGlzKTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6ZGlkQ2hhbmdlRmlsdGVycygpCit7CisgICAgbV9zaG91bGRTeW5jRmlsdGVy
cyA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3lu
Y1JlcXVpcmVkKHRoaXMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKQoreworICAgIGlmICghdHJhbnNmb3JtKCkuaXNBZmZp
bmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9
IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytp
KQorICAgICAgICB0b1dlYkdyYXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSktPnNldFNob3VsZFVw
ZGF0ZVZpc2libGVSZWN0KCk7CisgICAgaWYgKHJlcGxpY2FMYXllcigpKQorICAgICAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVj
dCgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUdlb21ldHJ5KCkKK3sK
KyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJl
Y3QoKTsKK30KKworV2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKKyAgICAsIG1f
bWFza1RhcmdldCgwKQorICAgICwgbV9pblVwZGF0ZU1vZGUoZmFsc2UpCisgICAgLCBtX3Nob3Vs
ZFVwZGF0ZVZpc2libGVSZWN0KHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNMYXllclN0YXRlKHRy
dWUpCisgICAgLCBtX3Nob3VsZFN5bmNDaGlsZHJlbih0cnVlKQorICAgICwgbV9maXhlZFRvVmll
d3BvcnQoZmFsc2UpCisgICAgLCBtX2NhbnZhc05lZWRzRGlzcGxheShmYWxzZSkKKyAgICAsIG1f
d2ViR3JhcGhpY3NMYXllckNsaWVudCgwKQorICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAg
LCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIoMCkKK3sKKyAgICBzdGF0aWMgV2ViTGF5ZXJJRCBuZXh0
TGF5ZXJJRCA9IDE7CisgICAgbV9pZCA9IG5leHRMYXllcklEKys7CisgICAgbGF5ZXJCeUlETWFw
KCkuYWRkKGlkKCksIHRoaXMpOworfQorCitXZWJHcmFwaGljc0xheWVyOjp+V2ViR3JhcGhpY3NM
YXllcigpCit7CisgICAgbGF5ZXJCeUlETWFwKCkucmVtb3ZlKGlkKCkpOworCisgICAgaWYgKG1f
d2ViR3JhcGhpY3NMYXllckNsaWVudCkgeworICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsK
KyAgICAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5kZXRhY2hMYXllcih0aGlzKTsKKyAg
ICB9CisgICAgd2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
d2lsbEJlRGVzdHJveWVkKCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQo
KTsKK30KKworYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8
R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKK3sKKyAgICBib29sIG9rID0gR3JhcGhpY3NMYXll
cjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gdG9XZWJHcmFwaGljc0xheWVyKGNoaWxk
cmVuW2ldKTsKKyAgICAgICAgY2hpbGQtPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJH
cmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICAgICAgY2hpbGQtPmRpZENoYW5nZUxheWVyU3RhdGUo
KTsKKyAgICB9CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikK
K3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7CisgICAgdG9XZWJHcmFwaGlj
c0xheWVyKGxheWVyKS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5
ZXJDbGllbnQpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPmRpZENoYW5nZUxheWVy
U3RhdGUoKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQor
eworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOworICAg
IHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93
ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5k
aWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBH
cmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJv
dmUobGF5ZXIsIHNpYmxpbmcpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdl
YkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hh
bmdlQ2hpbGRyZW4oKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93
KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdy
YXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOworICAgIHRvV2ViR3Jh
cGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGlj
c0xheWVyQ2xpZW50KTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VM
YXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30KKworYm9vbCBXZWJHcmFw
aGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNz
TGF5ZXIqIG5ld0NoaWxkKQoreworICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpyZXBsYWNl
Q2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICB0b1dlYkdyYXBoaWNzTGF5ZXIo
b2xkQ2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgdG9XZWJHcmFwaGljc0xheWVy
KG5ld0NoaWxkKS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJD
bGllbnQpOworICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPmRpZENoYW5nZUxheWVy
U3RhdGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpy
ZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcGFyZW50TGF5
ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocGFyZW50KCkpKQorICAgICAgICBwYXJlbnRMYXllci0+
ZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50
KCk7CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBpZiAocG9zaXRp
b24oKSA9PSBwKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3Np
dGlvbihwKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKK3sKKyAgICBpZiAo
YW5jaG9yUG9pbnQoKSA9PSBwKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVy
OjpzZXRBbmNob3JQb2ludChwKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAg
IGlmICh0aGlzLT5zaXplKCkgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0U2l6ZShzaXplKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBpZiAo
bWFza0xheWVyKCkpCisgICAgICAgIG1hc2tMYXllcigpLT5zZXRTaXplKHNpemUpOworICAgIGRp
ZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIGlmICh0cmFuc2Zvcm0o
KSA9PSB0KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zv
cm0odCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkK
K3sKKyAgICBpZiAoY2hpbGRyZW5UcmFuc2Zvcm0oKSA9PSB0KQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSh0KTsKKyAgICBkaWRDaGFu
Z2VHZW9tZXRyeSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNE
KGJvb2wgYikKK3sKKyAgICBpZiAocHJlc2VydmVzM0QoKSA9PSBiKQorICAgICAgICByZXR1cm47
CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsKKyAgICBkaWRDaGFuZ2VH
ZW9tZXRyeSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMo
Ym9vbCBiKQoreworICAgIGlmIChtYXNrc1RvQm91bmRzKCkgPT0gYikKKyAgICAgICAgcmV0dXJu
OworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYik7CisgICAgZGlkQ2hhbmdl
R2VvbWV0cnkoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQo
Ym9vbCBiKQoreworICAgIGlmIChkcmF3c0NvbnRlbnQoKSA9PSBiKQorICAgICAgICByZXR1cm47
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGIpOworCisgICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3Bh
cXVlKGJvb2wgYikKK3sKKyAgICBpZiAoY29udGVudHNPcGFxdWUoKSA9PSBiKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9tYWluQmFja2lu
Z1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFiKTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c09wYXF1ZShiKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKK3sKKyAgICBpZiAo
YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOworICAgIGRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNp
dHkpCit7CisgICAgaWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5KQorICAgICAgICByZXR1
cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c1JlY3QoY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBpZiAoY29udGVudHNSZWN0KCkgPT0gcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHIp
OworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCit7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IG1faW1hZ2U7CisgICAgc2V0Q29udGVudHNUb0ltYWdlKDApOworICAgIHNldENvbnRlbnRzVG9J
bWFnZShpbWFnZS5nZXQoKSk7CisgICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSB0cnVlOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcikKK3sKKyAgICBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPSBwbGF0Zm9y
bUxheWVyOworICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50
KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9CisKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCitib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKK3sKKyAgICBpZiAoZmlsdGVycygp
ID09IG5ld0ZpbHRlcnMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRpZENoYW5nZUZpbHRl
cnMoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsK
K30KKyNlbmRpZgorCisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKKyAgICAgICAgcmV0
dXJuOworICAgIGludDY0X3QgbmV3SUQgPSAwOworICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJD
bGllbnQpIHsKKyAgICAgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGluIGNhc2UgdGhpcyBpcyB0aGUg
c2FtZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lpbmcgYW5kIHJlY3JlYXRpbmcg
dGhlIGltYWdlLgorICAgICAgICBuZXdJRCA9IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+YWRv
cHRJbWFnZUJhY2tpbmdTdG9yZShpbWFnZSk7CisgICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNs
aWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQpOworICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgICAgIGlmIChtX2xh
eWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEICYmIG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gSWYgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50IGlzIG5vdCBzZXQgeWV0IHRoZXJlIHNo
b3VsZCBiZSBubyBiYWNraW5nIHN0b3JlIElELgorICAgICAgICBBU1NFUlQoIW1fbGF5ZXJJbmZv
LmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cisg
ICAgfQorCisgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG5ld0lEOworICAg
IG1faW1hZ2UgPSBpbWFnZTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2Uo
aW1hZ2UpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGlj
c0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIgPT0gbWFza0xheWVyKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7CisKKyAg
ICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+c2V0U2l6ZShzaXpl
KCkpOworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYkdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBo
aWNzTGF5ZXIobGF5ZXIpOworICAgIHdlYkdyYXBoaWNzTGF5ZXItPnNldFdlYkdyYXBoaWNzTGF5
ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB3ZWJHcmFwaGljc0xheWVy
LT5zZXRNYXNrVGFyZ2V0KHRoaXMpOworICAgIHdlYkdyYXBoaWNzTGF5ZXItPmRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisKK30KKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikK
K3sKKyAgICBpZiAobGF5ZXIgPT0gcmVwbGljYUxheWVyKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChsYXllcikKKyAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+c2V0V2Vi
R3JhcGhpY3NMYXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOworCisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOworICAgIGRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXko
KQoreworICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IEludFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpKTsKK30KKwordm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJhY2tp
bmdTdG9yZS0+aW52YWxpZGF0ZShJbnRSZWN0KHJlY3QpKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0
YXRlKCk7Cit9CisKK1dlYkxheWVySUQgV2ViR3JhcGhpY3NMYXllcjo6aWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2lkOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3Np
dGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoV2ViR3JhcGhpY3NM
YXllciogbWFzayA9IHRvV2ViR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCisgICAgICAgIG1h
c2stPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgaWYgKFdl
YkdyYXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVy
KCkpKQorICAgICAgICByZXBsaWNhLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKworICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0ZpeGVkTGF5ZXJzKCk7
CisKKyAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hp
bGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7Cit9CisKK1dlYkdyYXBoaWNz
TGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVyKTsKK30KKwordm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4oKQoreworICAgIGlmICghbV9zaG91bGRTeW5j
Q2hpbGRyZW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IGZh
bHNlOworICAgIFZlY3RvcjxXZWJMYXllcklEPiBjaGlsZElEczsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoaWxkSURzLmFwcGVu
ZCh0b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkpOworCisgICAgbV93ZWJHcmFwaGljc0xheWVy
Q2xpZW50LT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7Cit9CisKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKK3sK
KyAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMpCisgICAgICAgIHJldHVybjsKKyAgICBtX3No
b3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7CisgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5z
eW5jTGF5ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSgpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNM
YXllclN0YXRlKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9
IGZhbHNlOworICAgIG1fbGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9y
dCgpOworCisgICAgbV9sYXllckluZm8uYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludCgpOworICAg
IG1fbGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAg
IG1fbGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsKKyAg
ICBtX2xheWVySW5mby5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7CisgICAgbV9s
YXllckluZm8uY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7CisgICAgbV9sYXllckluZm8u
ZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCk7CisgICAgbV9sYXllckluZm8ubWFzayA9IHRv
V2ViTGF5ZXJJRChtYXNrTGF5ZXIoKSk7CisgICAgbV9sYXllckluZm8ubWFza3NUb0JvdW5kcyA9
IG1hc2tzVG9Cb3VuZHMoKTsKKyAgICBtX2xheWVySW5mby5vcGFjaXR5ID0gb3BhY2l0eSgpOwor
ICAgIG1fbGF5ZXJJbmZvLnBhcmVudCA9IHRvV2ViTGF5ZXJJRChwYXJlbnQoKSk7CisgICAgbV9s
YXllckluZm8ucG9zID0gcG9zaXRpb24oKTsKKyAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9
IHByZXNlcnZlczNEKCk7CisgICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvV2ViTGF5ZXJJRChy
ZXBsaWNhTGF5ZXIoKSk7CisgICAgbV9sYXllckluZm8uc2l6ZSA9IHNpemUoKTsKKyAgICBtX2xh
eWVySW5mby50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKKyAgICBtX3dlYkdyYXBoaWNzTGF5ZXJD
bGllbnQtPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKK30KKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKK3sKKyAgICBpZiAoIW1fY2FudmFzTmVlZHNEaXNw
bGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fY2FudmFzUGxhdGZvcm1MYXllcikK
KyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdWludDMy
X3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dy
YXBoaWNzU3VyZmFjZSgpOworICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0NhbnZh
cyhtX2lkLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpLCBncmFwaGlj
c1N1cmZhY2VUb2tlbik7CisjZW5kaWYKKyAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IGZhbHNl
OworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCkK
K3sKKyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fbGF5ZXJJ
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpCisgICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQgPSBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3Rv
cmUobV9pbWFnZS5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKK3sKKyAgICAvLyBUaGUgcmVtb3RlIGltYWdl
IG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBieSBwdXJnZUJhY2tpbmdTdG9yZXMuCisgICAgZW5z
dXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKKyAgICBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVj
dCgpOworICAgIHN5bmNDaGlsZHJlbigpOworICAgIHN5bmNMYXllclN0YXRlKCk7CisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorICAgIHN5bmNGaWx0ZXJzKCk7CisjZW5kaWYKKyAgICB1cGRhdGVD
b250ZW50QnVmZmVycygpOworICAgIHN5bmNDYW52YXMoKTsKK30KKwordm9pZCBXZWJHcmFwaGlj
c0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQoreworfQorCit2b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKK3sKKyAgICBtX2xheWVySW5m
by5pc1Jvb3RMYXllciA9IGlzUm9vdDsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZl
Y3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmIChtX21h
aW5CYWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGls
ZXNJZk5lZWRlZCh0cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQoreworICAgIG1fY29udGVudHNTY2FsZSA9
IHNjYWxlOworICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKK30KKworZmxvYXQgV2ViR3JhcGhp
Y3NMYXllcjo6ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpCit7CisgICAgcmV0dXJuIHNob3VsZFVz
ZVRpbGVkQmFja2luZ1N0b3JlKCkgPyBtX2NvbnRlbnRzU2NhbGUgOiAxOworfQorCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUoKQoreworICAgIGlmICghZHJhd3ND
b250ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9tYWluQmFja2luZ1N0b3Jl
IHx8IG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpID09IGVmZmVjdGl2ZUNvbnRl
bnRzU2NhbGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQmV0d2VlbiBjcmVhdGluZyB0
aGUgbmV3IGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nIHRoZSBjb250ZW50LAorICAgIC8vIHdl
IGRvIG5vdCB3YW50IHRvIGRyb3AgdGhlIHByZXZpb3VzIG9uZSBhcyB0aGF0IG1pZ2h0IHJlc3Vs
dCBpbgorICAgIC8vIGJyaWVmbHkgc2VlaW5nIGZsaWNrZXJpbmcgYXMgdGhlIG9sZCB0aWxlcyBt
YXkgYmUgZHJvcHBlZCBiZWZvcmUKKyAgICAvLyBzb21ldGhpbmcgcmVwbGFjZXMgdGhlbS4KKyAg
ICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlID0gbV9tYWluQmFja2luZ1N0b3JlLnJlbGVhc2UoKTsK
KworICAgIC8vIE5vIHJlYXNvbiB0byBzYXZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGZv
ciBub24tdmlzaWJsZSBhcmVhcy4KKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLT5yZW1vdmVB
bGxOb25WaXNpYmxlVGlsZXMoKTsKKworICAgIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOworfQorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZSgpCit7CisgICAgbV9tYWlu
QmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRpbGVk
QmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpOworICAgIG1fbWFp
bkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghY29udGVudHNPcGFxdWUoKSk7CisgICAg
bV9tYWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKGVmZmVjdGl2ZUNvbnRlbnRzU2Nh
bGUoKSk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWlu
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgcGFpbnRHcmFwaGljc0xh
eWVyQ29udGVudHMoKmNvbnRleHQsIHJlY3QpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVk
UmVjdHMpCit7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVV
cGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2luVXBkYXRlTW9kZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmxh
eWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpOworfQorCitJbnRSZWN0IFdlYkdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkKK3sKKyAgICByZXR1cm4gSW50UmVj
dCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKK30KKworYm9vbCBXZWJH
cmFwaGljc0xheWVyOjpzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpCit7CisgICAgcmV0dXJu
ICFzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Cit9CisKK0ludFJlY3Qg
V2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpCit7CisgICAg
aWYgKCFzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpKQorICAgICAgICByZXR1cm4gdGlsZWRC
YWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKKworICAgIC8vIE5vbi1pbnZlcnRpYmxlIGxheWVy
cyBhcmUgbm90IHZpc2libGUuCisgICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCku
aXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICAvLyBSZXR1
cm4gYSBwcm9qZWN0aW9uIG9mIHRoZSB2aXNpYmxlIHJlY3QgKHN1cmZhY2UgY29vcmRpbmF0ZXMp
IG9udG8gdGhlIGxheWVyJ3MgcGxhbmUgKGxheWVyIGNvb3JkaW5hdGVzKS4KKyAgICAvLyBUaGUg
cmVzdWx0aW5nIHF1YWQgbWlnaHQgYmUgc3F1ZXdlZCBhbmQgdGhlIHZpc2libGUgcmVjdCBpcyB0
aGUgYm91bmRpbmcgYm94IG9mIHRoaXMgcXVhZCwKKyAgICAvLyBzbyBpdCBtaWdodCBzcHJlYWQg
ZnVydGhlciB0aGFuIHRoZSByZWFsIHZpc2libGUgYXJlYSAoYW5kIHRoZW4gZXZlbiBtb3JlIGFt
cGxpZmllZCBieSB0aGUgY292ZXIgcmVjdCBtdWx0aXBsaWVyKS4KKyAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaW52ZXJzZSgpLmNsYW1wZWRC
b3VuZHNPZlByb2plY3RlZFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChtX3dlYkdyYXBoaWNzTGF5
ZXJDbGllbnQtPnZpc2libGVDb250ZW50c1JlY3QoKSkpKSk7Cit9CisKK0NvbG9yIFdlYkdyYXBo
aWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3Bh
cmVudDsKK30KKworUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IFdlYkdyYXBo
aWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXpl
LCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICByZXR1cm4gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5iZWdpbkNvbnRl
bnRVcGRhdGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFibGVCaXRtYXA6OlN1
cHBvcnRzQWxwaGEsIGhhbmRsZSwgb2Zmc2V0KTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudC0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3Qp
OworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QpCit7CisgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT51cGRhdGVUaWxlKGlkKCksIHRp
bGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6cmVtb3ZlVGlsZShpbnQgdGlsZUlEKQoreworICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVu
dC0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKSB7Cisg
ICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOworICAgICAgICBtX3ByZXZpb3VzQmFj
a2luZ1N0b3JlLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luVXBk
YXRlTW9kZSA9IHRydWU7CisgICAgLy8gVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3ZSAocmUpY3Jl
YXRlIHRoZSBtYWluIHRpbGVkIGJhY2tpbmcgc3RvcmUsIG9uY2Ugd2UKKyAgICAvLyBoYXZlIGEg
cmVtb3RlIGNsaWVudCBhbmQgd2UgYXJlIHJlYWR5IHRvIHNlbmQgb3VyIGRhdGEgdG8gdGhlIFVJ
IHByb2Nlc3MuCisgICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIGNyZWF0ZUJh
Y2tpbmdTdG9yZSgpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1ZmZlcnMo
KTsKKyAgICBtX2luVXBkYXRlTW9kZSA9IGZhbHNlOworCisgICAgLy8gVGhlIHByZXZpb3VzIGJh
Y2tpbmcgc3RvcmUgaXMga2VwdCBhcm91bmQgdG8gYXZvaWQgZmxpY2tlcmluZyBiZXR3ZWVuCisg
ICAgLy8gcmVtb3ZpbmcgdGhlIGV4aXN0aW5nIHRpbGVzIGFuZCBwYWludGluZyB0aGUgbmV3IG9u
ZXMuIFRoZSBmaXJzdCB0aW1lCisgICAgLy8gdGhlIHZpc2libGVSZWN0IGlzIGZ1bGwgcGFpbnRl
ZCB3ZSByZW1vdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUuCisgICAgaWYgKG1fbWFpbkJh
Y2tpbmdTdG9yZS0+dmlzaWJsZUFyZWFJc0NvdmVyZWQoKSkKKyAgICAgICAgbV9wcmV2aW91c0Jh
Y2tpbmdTdG9yZS5jbGVhcigpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnB1cmdlQmFj
a2luZ1N0b3JlcygpCit7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLmNsZWFyKCk7CisgICAgbV9w
cmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOworCisgICAgaWYgKG1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQpIHsKKyAgICAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5yZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Cisg
ICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSAwOworICAgIH0KKworICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoV2ViS2l0OjpX
ZWJHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgaWYgKG1fd2ViR3JhcGhpY3NM
YXllckNsaWVudCA9PSBjbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChXZWJHcmFw
aGljc0xheWVyKiByZXBsaWNhID0gdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkK
KyAgICAgICAgcmVwbGljYS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOworICAg
IGlmIChXZWJHcmFwaGljc0xheWVyKiBtYXNrID0gdG9XZWJHcmFwaGljc0xheWVyKG1hc2tMYXll
cigpKSkKKyAgICAgICAgbWFzay0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAg
ICAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcih0aGlzLT5j
aGlsZHJlbigpW2ldKTsKKyAgICAgICAgbGF5ZXItPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQo
Y2xpZW50KTsKKyAgICB9CisKKyAgICAvLyBXZSBoYXZlIHRvIHJlbGVhc2UgcmVzb3VyY2VzIG9u
IHRoZSBVSSBwcm9jZXNzIGhlcmUgaWYgdGhlIHJlbW90ZSBjbGllbnQgaGFzIGNoYW5nZWQgb3Ig
aXMgcmVtb3ZlZC4KKyAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7CisgICAgICAg
IHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQt
PmRldGFjaExheWVyKHRoaXMpOworICAgIH0KKyAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQg
PSBjbGllbnQ7CisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgY2xpZW50LT5hdHRhY2hMYXllcih0
aGlzKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGp1c3RWaXNpYmxlUmVjdCgpCit7
CisgICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKQoreworICAgIGlmICghbV9zaG91bGRVcGRh
dGVWaXNpYmxlUmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJs
ZVJlY3QgPSBmYWxzZTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKHRy
YW5zZm9ybSgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uKCkp
OworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQoKSk7Cisg
ICAgbV9sYXllclRyYW5zZm9ybS5zZXRTaXplKHNpemUoKSk7CisgICAgbV9sYXllclRyYW5zZm9y
bS5zZXRGbGF0dGVuaW5nKCFwcmVzZXJ2ZXMzRCgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNl
dENoaWxkcmVuVHJhbnNmb3JtKGNoaWxkcmVuVHJhbnNmb3JtKCkpOworICAgIG1fbGF5ZXJUcmFu
c2Zvcm0uY29tYmluZVRyYW5zZm9ybXMocGFyZW50KCkgPyB0b1dlYkdyYXBoaWNzTGF5ZXIocGFy
ZW50KCkpLT5tX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkRm9yQ2hpbGRyZW4oKSA6IFRyYW5zZm9y
bWF0aW9uTWF0cml4KCkpOworCisgICAgLy8gVGhlIGNvbWJpbmVkIHRyYW5zZm9ybSB3aWxsIGJl
IHVzZWQgaW4gdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdC4KKyAgICBhZGp1c3RWaXNpYmxl
UmVjdCgpOworICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKK30KKworc3RhdGljIFBhc3NPd25Q
dHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xp
ZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJHcmFwaGljc0xheWVy
KGNsaWVudCkpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmluaXRGYWN0b3J5KCkKK3sK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRHcmFwaGljc0xheWVyRmFjdG9yeShjcmVhdGVXZWJHcmFw
aGljc0xheWVyKTsKK30KKworYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNlc3Rvckhh
dmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29t
YmluZWQoKS5pc0FmZmluZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdy
YXBoaWNzTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDljOWE5NTBjN2MxMzgwZDI0MWZiMjVlOWJiMTkz
YTRmZmQ2ZDRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIuaApAQCAtMCwwICsx
LDIwNyBAQAorICAgIC8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisKKyNp
Zm5kZWYgV2ViR3JhcGhpY3NMYXllcl9oCisjZGVmaW5lIFdlYkdyYXBoaWNzTGF5ZXJfaAorCisj
aW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxheWVyVHJh
bnNmb3JtLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGlsZWRC
YWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgorI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkxh
eWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYgVVNF
KFVJX1NJREVfQ09NUE9TSVRJTkcpCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBXZWJHcmFw
aGljc0xheWVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViR3JhcGhpY3NM
YXllckNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJ
RCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7CisK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNv
cmU6OkltYWdlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3Rv
cmUoaW50NjRfdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXll
cklELCBjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXll
ckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpID0gMDsKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMo
V2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKKyNlbmRp
ZgorI2lmIFBMQVRGT1JNKFFUKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNz
U3VyZmFjZVRva2VuKSA9IDA7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIo
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
TGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c3luY0ZpeGVkTGF5ZXJzKCkgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2Vi
Q29yZTo6SW50UG9pbnQmKSA9IDA7Cit9OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgorICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZUNsaWVudCB7CitwdWJsaWM6CisgICAgV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigpOworCisgICAgLy8g
UmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBHcmFwaGljc0xheWVyLmguCisgICAgYm9vbCBzZXRDaGls
ZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAgdm9pZCBhZGRDaGlsZChH
cmFwaGljc0xheWVyKik7CisgICAgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllcios
IGludCk7CisgICAgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xh
eWVyKik7CisgICAgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xh
eWVyKik7CisgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5
ZXIqKTsKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2b2lkIHNldFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0
UG9pbnQzRCYpOworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lk
IHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0
Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lk
IHNldFByZXNlcnZlczNEKGJvb2wpOworICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsK
KyAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2b2lkIHNldENvbnRlbnRzT3Bh
cXVlKGJvb2wpOworICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpOworICAgIHZv
aWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50
UmVjdCYpOworICAgIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CisgICAgdm9pZCBz
ZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2b2lkIHNldE1hc2tMYXll
cihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGlj
c0xheWVyKik7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2b2lkIHNldE5lZWRz
RGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKKyAgICB2b2lk
IHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJvb2wgc2V0RmlsdGVycyhjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKworICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wp
OworCisgICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7CisgICAgc3RhdGljIFdlYkdy
YXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQpOworICAgIHZvaWQgZGlk
U3luY2hyb25pemUoKTsKKyAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlLmdldCgp
OyB9CisKKyAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRU
b1ZpZXdwb3J0OyB9CisgICAgdm9pZCBzZXRGaXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7
IG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsgfQorCisgICAgR3JhcGhpY3NMYXllciogbWFz
a1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RhcmdldDsgfQorICAgIHZvaWQgc2V0TWFz
a1RhcmdldChHcmFwaGljc0xheWVyKiBsYXllcikgeyBtX21hc2tUYXJnZXQgPSBsYXllcjsgfQor
CisgICAgc3RhdGljIHZvaWQgaW5pdEZhY3RvcnkoKTsKKworICAgIC8vIFRpbGVkQmFja2luZ1N0
b3JlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigp
OworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQ
YWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsKKyAgICB2aXJ0dWFs
IGJvb2wgdGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0OworICAgIHZpcnR1
YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpOworICAgIHZpcnR1YWwg
SW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCk7CisgICAgdmlydHVhbCBDb2xv
ciB0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0OworCisgICAgLy8gVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRp
bGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlE
LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOworICAgIHZpcnR1
YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5k
bGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgdm9pZCBzZXRXZWJHcmFwaGljc0xheWVy
Q2xpZW50KFdlYktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVudCopOworICAgIHZvaWQgc3luY0No
aWxkcmVuKCk7CisgICAgdm9pZCBzeW5jTGF5ZXJTdGF0ZSgpOworI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKKyAgICB2b2lkIHN5bmNGaWx0ZXJzKCk7CisjZW5kaWYKKyAgICB2b2lkIHN5bmNDYW52
YXMoKTsKKyAgICB2b2lkIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7CisKKyAgICB2b2lkIGFk
anVzdFZpc2libGVSZWN0KCk7CisgICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBj
b25zdDsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CisgICAgdm9pZCBwdXJnZUJh
Y2tpbmdTdG9yZXMoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJv
eWVkKCk7CisgICAgV2ViS2l0OjpXZWJMYXllcklEIG1faWQ7CisgICAgV2ViS2l0OjpXZWJMYXll
ckluZm8gbV9sYXllckluZm87CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIEdyYXBo
aWNzTGF5ZXIqIG1fbWFza1RhcmdldDsKKyAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0
OworICAgIExheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07CisgICAgYm9vbCBtX2luVXBk
YXRlTW9kZSA6IDE7CisgICAgYm9vbCBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0OiAxOworICAg
IGJvb2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0No
aWxkcmVuOiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5jRmlsdGVyczogMTsKKyAgICBib29sIG1f
Zml4ZWRUb1ZpZXdwb3J0IDogMTsKKyAgICBib29sIG1fY2FudmFzTmVlZHNEaXNwbGF5IDogMTsK
KworICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VHZW9tZXRyeSgp
OworICAgIHZvaWQgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlQ2hp
bGRyZW4oKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBkaWRDaGFuZ2VGaWx0
ZXJzKCk7CisjZW5kaWYKKworICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICBi
b29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKKyAgICBib29sIHNo
b3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCk7CisgICAgdm9pZCBhZGp1c3RDb250ZW50c1NjYWxl
KCk7CisgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOworICAgIHZvaWQg
c3luY0xheWVyUGFyYW1ldGVycygpOworICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJl
Y3QoKTsKKyAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCk7CisKKyAgICBXZWJLaXQ6
OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudDsKKyAgICBP
d25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFpbkJhY2tpbmdTdG9yZTsKKyAg
ICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fcHJldmlvdXNCYWNraW5nU3Rv
cmU7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2Fu
dmFzUGxhdGZvcm1MYXllcjsKK307CisKK1dlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyKik7CisKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gV2ViR3JhcGhp
Y3NMYXllcl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5jcHAKaW5kZXggNWE5YjhiNDBmMjdmNWRmODA3MWFiMGI1MzM2ODJmNDc4YmYx
YTM5OS4uYmYwMTFlMDg1YTZlMjBhNTVlZjJlMDk3YzAzNjIzMmJjNDcxZmIwOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcApA
QCAtMzUsNyArMzUsNyBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlICJx
dC9MYXllclRyZWVIb3N0UXQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvci5oIgog
I2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAg
LTUzLDcgKzUzLDcgQEAgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0PiBMYXllclRyZWVIb3N0Ojpj
cmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgSEFWRShXS1FD
QSkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBV2luOjpjcmVhdGUod2ViUGFnZSk7CiAjZWxp
ZiBQTEFURk9STShRVCkKLSAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUod2ViUGFn
ZSk7CisgICAgcmV0dXJuIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGUod2ViUGFnZSk7CiAj
ZWxpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICByZXR1cm4g
TGF5ZXJUcmVlSG9zdEd0azo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGU1MDNjMjM3
MTZlZDg5N2ZhZmI1YmNiMDQxZTQ4YmQ3NDM1Yjg4MzMuLmI0OWNjOTBiZGVhZWNjZTU4NTVkNDAy
MTQzMTk0NWQ0NDY1Zjk2MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JMYXllcihpbnQgbGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJh
bWUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVu
dERlY29kZXIqKSA9IDA7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QubWVz
c2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MjBkZTI3ZjI4YjkyOWUx
NTdlZjRhY2MzMTk2YzNkOTQ4ZTQ4YzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jCi0jICAg
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
IwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIyAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotIwotCi0KLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
LW1lc3NhZ2VzIC0+IExheWVyVHJlZUhvc3QgewotICAgIFNldFZpc2libGVDb250ZW50c1JlY3Qo
V2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSwgV2ViQ29y
ZTo6RmxvYXRQb2ludCB0cmFqZWN0b3J5VmVjdG9yeSkKLSAgICBSZW5kZXJOZXh0RnJhbWUoKQot
ICAgIFB1cmdlQmFja2luZ1N0b3JlcygpCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5NTNlOWIwNDZkOGNkNmEwZTAxY2Y0
MmY5MDAyMzlkOGM4YzE5OWY5Li5iNGUxOWJmZTcyYjYzMjE0NGU0OTg4YTA3MmY0NzlmOGUyMjc0
NzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CkBAIC0yNjA1LDkgKzI2MDUsOSBAQCB2b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZwogICAgIH0KIAog
I2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVI
b3N0PigpKSB7CisgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXll
clRyZWVDb29yZGluYXRvcj4oKSkgewogICAgICAgICBpZiAobV9kcmF3aW5nQXJlYSkKLSAgICAg
ICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVIb3N0TWVzc2FnZShjb25u
ZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICBtX2RyYXdpbmdBcmVh
LT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3Nh
Z2VJRCwgYXJndW1lbnRzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9z
dFF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZhOTFhYzNmZDliMWMyZGE3
MjhiNTU1MTlmYjcxYjk4YmE3ZjA0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJU
cmVlSG9zdFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkxheWVyVHJl
ZUhvc3RRdC5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIK
LSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgot
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYkdyYXBoaWNz
TGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBv
c2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1NldHRpbmdzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IExheWVyVHJlZUhvc3RRdDo6
Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXll
clRyZWVIb3N0UXQod2ViUGFnZSkpOwotfQotCi1MYXllclRyZWVIb3N0UXQ6On5MYXllclRyZWVI
b3N0UXQoKQotewotICAgIC8vIFByZXZlbnQgc2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCgwKSAt
PiBkZXRhY2hMYXllcigpIGZyb20gbW9kaWZ5aW5nIHRoZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBp
dC4KLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPiByZWdpc3RlcmVkTGF5
ZXJzOwotICAgIHJlZ2lzdGVyZWRMYXllcnMuc3dhcChtX3JlZ2lzdGVyZWRMYXllcnMpOwotCi0g
ICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IHJl
Z2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBo
aWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCk7
Ci19Ci0KLUxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqIHdlYlBhZ2Up
Ci0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotICAgICwgbV93YWl0
aW5nRm9yVUlQcm9jZXNzKHRydWUpCi0gICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQotICAgICwg
bV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0
ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFN5
bmNSb290TGF5ZXIodHJ1ZSkKLSAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRy
ZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVkKQotICAgICwgbV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQodHJ1ZSkKLXsKLSAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgotICAgIG1f
cm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwotICAgIFdlYkdyYXBoaWNz
TGF5ZXIqIHdlYlJvb3RMYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQo
KSk7Ci0gICAgd2ViUm9vdExheWVyLT5zZXRSb290TGF5ZXIodHJ1ZSk7Ci0jaWZuZGVmIE5ERUJV
RwotICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgcm9vdCBsYXllciIp
OwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAg
bV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVl
Q29udGV4dC53ZWJMYXllcklEID0gdG9XZWJHcmFwaGljc0xheWVyKHdlYlJvb3RMYXllciktPmlk
KCk7Ci0KLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpj
cmVhdGUodGhpcyk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCh0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgbm9uLWNv
bXBvc2l0ZWQgY29udGVudCIpOwotI2VuZGlmCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRD
aGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fd2Vi
UGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigp
OwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxl
ZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVz
aGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RRdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKLXsKLSAgICBpZiAo
IW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVzaFRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRM
YXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQotewotICAgIG1f
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXll
ckZsdXNoOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7Ci0gICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFj
a2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOwot
Ci0gICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KLSAgICBp
ZiAoZ3JhcGhpY3NMYXllcikKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5h
ZGRDaGlsZChncmFwaGljc0xheWVyKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmludmFs
aWRhdGUoKQotewotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBBU1NFUlQo
bV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Ci0gICAgbV9pc1ZhbGlkID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVu
dHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAg
IGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2Nyb2xsT2Zmc2V0KQotewotICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5
KHNjcm9sbFJlY3QpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBhaW50KCkK
LXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6
OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBp
ZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIC8vIElmIHRoZSBuZXdTaXpl
IGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVl
ZHNEaXNwbGF5IGlzIG5lZWRlZAotICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFz
LgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
aXplKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUp
OwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgewotICAgICAg
ICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWln
aHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAw
LCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOwotICAgIH0KLQot
ICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0
KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAt
IG9sZFNpemUuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAg
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkSW5zdGFsbFBhZ2VP
dmVybGF5KCkKLXsKLSAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRVbmluc3RhbGxQYWdl
T3ZlcmxheSgpCi17Ci0gICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5
TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJU
KG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQgdmFsdWUpCi17Ci0g
ICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5z
ZXRPcGFjaXR5KHZhbHVlKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotYm9vbCBM
YXllclRyZWVIb3N0UXQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCi17Ci0gICAgYm9vbCBk
aWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0g
ICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIG1fcm9vdExheWVy
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICByZXR1cm4gZGlk
U3luYzsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnN5bmNMYXllclN0YXRlKFdlYkxheWVy
SUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykKLXsKLSAgICBpZiAobV9zaG91bGRTZW5k
U2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVIb3N0UHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNv
bnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0
aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29t
cG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJ
RD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdM
YXllckNoaWxkcmVuKGlkLCBjaGlsZHJlbikpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6
c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50
MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlN5
bmNDYW52YXMoaWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7Ci19Ci0KLSNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIExheWVyVHJlZUhvc3RRdDo6c3luY0xheWVyRmls
dGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZp
bHRlcnMpKTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6YXR0YWNoTGF5ZXIo
V2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgQVNTRVJUKCFtX3JlZ2lzdGVyZWRMYXll
cnMuY29udGFpbnMobGF5ZXIpKTsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyKTsK
LQotICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7Ci0gICAgbGF5
ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkZXRh
Y2hMYXllcihXZWJHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBtX3JlZ2lzdGVyZWRMYXll
cnMucmVtb3ZlKGxheWVyKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0
aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJv
bVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgLy8gVGhl
c2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgotICAgIFJlbmRlckxheWVy
QmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7Ci0gICAgaWYgKCFiYWNr
aW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJM
YXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24oKSAh
PSBGaXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVy
LT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdy
YXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKLSAgICBncmFwaGljc0xheWVy
LT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZU9mZnNl
dEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKLXsKLSAgICB1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVyKTsKLQotICAgIGlmIChy
ZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3Bv
cnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKLSAgICBpZiAocmVuZGVyTGF5
ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxh
eWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0
UXQ6OnN5bmNGaXhlZExheWVycygpCi17Ci0gICAgaWYgKCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
PnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT5oYXNGaXhlZE9i
amVjdHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyTGF5ZXIqIHJvb3RSZW5kZXJM
YXllciA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3Np
dG9yKCktPnJvb3RSZW5kZXJMYXllcigpOwotICAgIEFTU0VSVChyb290UmVuZGVyTGF5ZXIpOwot
ICAgIGlmIChyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgdXBkYXRlT2Zm
c2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOwot
fQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQot
ewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotCi0gICAgaWYg
KCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
ZmFsc2U7Ci0gICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgaWYgKCFtX3Nob3Vs
ZFN5bmNGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RM
YXllcikgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQ
cm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExh
eWVyLmdldCgpKS0+aWQoKSkpOwotICAgICAgICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3RQ
cm94eTo6RGlkUmVuZGVyRnJhbWUoKSk7Ci0gICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1
ZTsKLQotICAgIGlmICghbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIExldCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBk
b25lIGEgZmx1c2ggb2YgdGhlIGxheWVyIGNoYW5nZXMuCi0gICAgc3RhdGljX2Nhc3Q8RHJhd2lu
Z0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hM
YXllcnMoKTsKLSAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwot
fQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5
ZXJUcmVlSG9zdFF0PiopCi17Ci0gICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0K
LQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAg
IEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKLQotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgcGFnZSBvdmVybGF5IGNvbnRl
bnQiKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQo
dHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgp
KTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQot
ewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7
Ci19Ci0KLWludDY0X3QgTGF5ZXJUcmVlSG9zdFF0OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKElt
YWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdl
YkxheWVySUQ7Ci0gICAgUVBpeG1hcCogcGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7Ci0KLSAgICBpZiAoIXBpeG1hcCkKLSAgICAgICAgcmV0dXJuIEludmFsaWRX
ZWJMYXllcklEOwotCi0gICAgaW50NjRfdCBrZXkgPSBwaXhtYXAtPmNhY2hlS2V5KCk7Ci0gICAg
SGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwotCi0gICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAgICAgICAgKysoaXQtPnNlY29uZCk7Ci0g
ICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
Yml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwg
KGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0
c0FscGhhIDogMCkpOwotICAgIHsKLSAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsK
LSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwotICAgIH0KLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlIGhhbmRsZTsKLSAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVEaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRsZSkpOwotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UXQ6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKLXsK
LSAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50
Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQo
a2V5KTsKLSAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXQtPnNlY29uZC0tOwotCi0gICAgaWYgKGl0
LT5zZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSkpOwot
fQotCi0KLXZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKLXsKLX0KLQotdm9pZCBMYXll
clRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikKLXsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBpZiAoZ3JhcGhp
Y3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsKLSAgICAgICAgbV93ZWJQ
YWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChncmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikg
ewotICAgICAgICAvLyBPdmVybGF5cyBjb250YWluIHRyYW5zcGFyZW50IGNvbnRlbnRzIGFuZCB3
b24ndCBjbGVhciB0aGUgY29udGV4dCBhcyBwYXJ0IG9mIHRoZWlyIHJlbmRlcmluZywgc28gd2Ug
ZG8gaXQgaGVyZS4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChjbGlwUmVjdCk7
Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdyYXBoaWNzQ29udGV4dCwgY2xp
cFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1ib29sIExheWVyVHJlZUhvc3RR
dDo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QK
LXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVi
dWdCb3JkZXJzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50
ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Ci19
Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVRp
bGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQs
IHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UXQ6OnVw
ZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkK
LXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0
aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0
UXQ6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwot
fQotCi1XZWJDb3JlOjpJbnRSZWN0IExheWVyVHJlZUhvc3RRdDo6dmlzaWJsZUNvbnRlbnRzUmVj
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLX0KLQotdm9p
ZCBMYXllclRyZWVIb3N0UXQ6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17
Ci0gICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRl
bnRzUmVjdDsKLSAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2Nv
bnRlbnRzU2NhbGU7Ci0KLSAgICBpZiAodHJhamVjdG9yeVZlY3RvciAhPSBGbG9hdFBvaW50Ojp6
ZXJvKCkpCi0gICAgICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWpl
Y3RvcnlWZWN0b3IpOwotCi0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50
c1NjYWxlRGlkQ2hhbmdlKSB7Ci0gICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7
Ci0gICAgICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwotCi0gICAgICAgIEhhc2hTZXQ8V2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXll
cnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVy
Kj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpCi0gICAgICAg
ICAgICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOwotICAgICAgICAgICAgaWYg
KGNvbnRlbnRzUmVjdERpZENoYW5nZSkKLSAgICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0Vmlz
aWJsZVJlY3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OwotICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpCi0gICAgICAgIG1fd2ViUGFn
ZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7Ci0gICAgaWYgKGNvbnRlbnRzUmVj
dERpZENoYW5nZSkKLSAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0
cnVlOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RRdDo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAg
ICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3YXBCdWZmZXJzKCk7Ci19Ci0KLWJvb2wg
TGF5ZXJUcmVlSG9zdFF0OjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAotewot
ICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RRdDo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBIYXNo
U2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3Rl
cmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgKCppdCktPnB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgQVNT
RVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnNpemUoKSk7Ci0gICAgbV91
cGRhdGVBdGxhc2VzLmNsZWFyKCk7Ci19Ci0KLVBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBMYXllclRyZWVIb3N0UXQ6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVT
dXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKLXsKLSAg
ICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldOwotICAgICAgICBpZiAo
YXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgewotICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVy
biBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
aGFuZGxlLCBzaXplLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lv
biA9IDIwMDA7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRhdGVBdGxhcyhTY3JhdGNo
QnVmZmVyRGltZW5zaW9uLCBmbGFncykpOwotICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFz
dCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlNTg1M2FkMDM4OWJhZjZhZTFlMDIyY2U3Y2VjNGE3ZjFjNjExYzA2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDEzOSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIExheWVyVHJl
ZUhvc3RRdF9oCi0jZGVmaW5lIExheWVyVHJlZUhvc3RRdF9oCi0KLSNpbmNsdWRlICJMYXllclRy
ZWVDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgIlRpbWVy
LmgiCi0jaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKLSNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVy
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgVXBkYXRlSW5mbzsK
LWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExheWVyVHJlZUhvc3RRdCA6IHB1YmxpYyBMYXllclRy
ZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgICAgICAgICAgICAgICAg
ICAgLCBwdWJsaWMgV2ViR3JhcGhpY3NMYXllckNsaWVudAotewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RRdD4gY3JlYXRlKFdlYlBhZ2UqKTsKLSAgICB2aXJ0
dWFsIH5MYXllclRyZWVIb3N0UXQoKTsKLQotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpOwotCi0gICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0
JiBsYXllclRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNo
b3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9m
ZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOwotICAgIHZpcnR1YWwgdm9p
ZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpOwotCi0gICAg
dmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3Zlcmxh
eU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7Ci0gICAgdmlydHVhbCBib29sIHBhZ2VPdmVy
bGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRy
dWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVk
ID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRldmlj
ZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1h
Z2VCYWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpOwotCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRp
bGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5
ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50
IHRpbGVJRCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIHZpcnR1YWwgYm9vbCBsYXllclRy
ZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUo
V2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpOwotI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhX
ZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSAg
ICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
ciopOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKLQotICAgIHZpcnR1YWwg
UGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxl
U3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKLQotcHJvdGVjdGVkOgotICAg
IGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7Ci0KLXByaXZhdGU6Ci0gICAgLy8g
R3JhcGhpY3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFy
dGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7Ci0gICAgdmly
dHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Kik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAg
dmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwotCi0gICAgLy8gTGF5ZXJUcmVlSG9zdFF0Ci0g
ICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgdm9pZCBkZXN0cm95UGFnZU92
ZXJsYXlMYXllcigpOwotICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAg
dm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKTsKLSAgICB2b2lkIHNlbmRMYXllcnNUb1VJKCk7Ci0KLSAgICBPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Ci0KLSAgICAvLyBUaGUgbGF5ZXIg
d2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0gICAgT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKLQotICAg
IC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBh
Z2Ugb3ZlcmxheS4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3Zl
cmxheUxheWVyOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj4gbV9y
ZWdpc3RlcmVkTGF5ZXJzOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVmQ291bnRzOwotICAgIFZlY3RvcjxVcGRhdGVBdGxhcz4gbV91cGRhdGVB
dGxhc2VzOwotCi0gICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKLSAg
ICBib29sIG1faXNWYWxpZDsKLQotICAgIGJvb2wgbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotICAg
IGJvb2wgbV9pc1N1c3BlbmRlZDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJsZUNvbnRl
bnRzUmVjdDsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Ci0gICAgYm9vbCBtX3Nob3VsZFNl
bmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKLQotICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRy
ZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7Ci0gICAgYm9vbCBtX3Nob3Vs
ZFN5bmNSb290TGF5ZXI7Ci0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpU
aW1lcjxMYXllclRyZWVIb3N0UXQ+Kik7Ci0gICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlSG9z
dFF0PiBtX2xheWVyRmx1c2hUaW1lcjsKLSAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFF0X2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>