<?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>232705</bug_id>
          
          <creation_ts>2021-11-04 02:40:13 -0700</creation_ts>
          <short_desc>[GPU Process] [Filters 17/23] Make FilterEffect calculate the primitive subregion only when needed</short_desc>
          <delta_ts>2021-12-06 16:37:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>231253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>heycam</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1811806</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-04 02:40:13 -0700</bug_when>
    <thetext>FilterEffect should be able to calculate and hold only two rectangles:

1) primitiveSubRegion which is defined here https://www.w3.org/TR/filter-effects-1/#FilterPrimitiveSubRegion
2) imageRect which is the rectangle of the result FilterImage.

And to simplify the calculation we can keep these two rectangles as FloatRects and they will be in filter coordinates. But

1) Only when drawing to a FilterImage, we should convert from filter coordinates to absolute coordinates. 
2) And when getting pixels from or putting pixels in a FilterImage, we will convert the FloatRect to a IntRect.

And since the plan is to remove the result FilterImage from the FilterEffect, we are going to keep these rectangles in FilterImage. The conversion from filter coordinates to absolute coordinates will happen through the Filter class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811810</commentid>
    <comment_count>1</comment_count>
      <attachid>443290</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-04 03:04:15 -0700</bug_when>
    <thetext>Created attachment 443290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812471</commentid>
    <comment_count>2</comment_count>
      <attachid>443503</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-07 02:16:19 -0800</bug_when>
    <thetext>Created attachment 443503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812472</commentid>
    <comment_count>3</comment_count>
      <attachid>443504</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-07 02:20:46 -0800</bug_when>
    <thetext>Created attachment 443504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812473</commentid>
    <comment_count>4</comment_count>
      <attachid>443505</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-07 02:58:14 -0800</bug_when>
    <thetext>Created attachment 443505
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812500</commentid>
    <comment_count>5</comment_count>
      <attachid>443516</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-07 11:58:14 -0800</bug_when>
    <thetext>Created attachment 443516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812501</commentid>
    <comment_count>6</comment_count>
      <attachid>443517</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-07 12:17:53 -0800</bug_when>
    <thetext>Created attachment 443517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812979</commentid>
    <comment_count>7</comment_count>
      <attachid>443652</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-08 20:37:34 -0800</bug_when>
    <thetext>Created attachment 443652
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813950</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-11 01:41:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/85290142&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820444</commentid>
    <comment_count>9</comment_count>
      <attachid>445965</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-04 01:49:41 -0800</bug_when>
    <thetext>Created attachment 445965
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820673</commentid>
    <comment_count>10</comment_count>
      <attachid>446055</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-06 11:02:09 -0800</bug_when>
    <thetext>Created attachment 446055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820676</commentid>
    <comment_count>11</comment_count>
      <attachid>446057</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-06 11:03:36 -0800</bug_when>
    <thetext>Created attachment 446057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820742</commentid>
    <comment_count>12</comment_count>
      <attachid>446074</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-06 13:19:35 -0800</bug_when>
    <thetext>Created attachment 446074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820788</commentid>
    <comment_count>13</comment_count>
      <attachid>446074</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-06 15:35:26 -0800</bug_when>
    <thetext>Comment on attachment 446074
Patch

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

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:52
&gt; +        for (auto&amp; input : inputs)
&gt; +            primitiveSubregion.unite(input-&gt;primitiveSubregion());

I guess we&apos;re guaranteed that input&apos;s primitive subregion has already been calculated at this point, because of the ordering of the filter effects in the overall expression?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820791</commentid>
    <comment_count>14</comment_count>
      <attachid>446074</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-06 15:50:45 -0800</bug_when>
    <thetext>Comment on attachment 446074
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:52
&gt;&gt; +            primitiveSubregion.unite(input-&gt;primitiveSubregion());
&gt; 
&gt; I guess we&apos;re guaranteed that input&apos;s primitive subregion has already been calculated at this point, because of the ordering of the filter effects in the overall expression?

Yes this correct. In SVGFilter we apply the effects from the SVGFilterExpression which is the post-fix notation of the filter. For CSSFilter we apply the effects from left to right since every effect is the input to the next effect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1820808</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-06 16:37:04 -0800</bug_when>
    <thetext>Committed r286578 (?): &lt;https://commits.webkit.org/r286578&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 446074.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443290</attachid>
            <date>2021-11-04 03:04:15 -0700</date>
            <delta_ts>2021-11-07 02:16:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211104030414.patch</filename>
            <type>text/plain</type>
            <size>402564</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNTM4ODU1ZTZmNTRh
NTJkN2Q2MzI5NDBlMTk1NjUzMmVhMWExNS4uYjYwMjg4ZDQwYTg0NDFjOWFjMjhlOTNiMDI3NWU4
MDdiMTI3NjY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5MiBAQAorMjAyMS0xMS0wNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFtGaWx0ZXJzIDYvXSBTaW1wbGlmeSBGaWx0ZXJFZmZlY3QgZ2VvbWV0cnkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjcwNQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmls
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
aW1hZ2VGb3JTb3VyY2VHcmFwaGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdCBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTik6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6
aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6Om5v
cm1hbGl6ZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUZsb29kOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVy
Z2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9y
cGhvbG9neSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6aXNBbHBoYUlt
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojppc0FscGhhSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUaWxlOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1
bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpjbGlwT3BlcmF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6Om1heFByaW1pdGl2ZVN1YnJlZ2lvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmNsaXBUb01heFByaW1pdGl2ZVN1YnJl
Z2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpyZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZpbHRlckJvdW5k
YXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp4IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUFic29sdXRlSW1hZ2VS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJGaWx0ZXJJ
bWFnZXNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNs
aXBBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6Om1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRv
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4
ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omlu
cHV0RWZmZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
ckltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Qm91bmRh
cnlTZXQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvcGVyYXRpbmdDb2xvclNw
YWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0T3BlcmF0aW5n
Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQ29sb3JTcGFj
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnBsYXRmb3JtQXBwbHlD
b3JlSW1hZ2UgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6bnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRJc0FscGhhSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphYnNvbHV0ZVBhaW50UmVjdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEFic29sdXRlUGFp
bnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF4RWZm
ZWN0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldE1heEVmZmVjdFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJFZmZlY3RUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1ggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNYKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1kpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpoYXNXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1dpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6aGFzSGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZWZm
ZWN0Qm91bmRhcmllcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnNldEVmZmVjdEJvdW5kYXJpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlwZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsaXBzVG9Cb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRDbGlwc1Rv
Qm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0
Q29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdo
dFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6
U291cmNlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdl
UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRT
b3VyY2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1
bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpv
dXRwdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0
ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzZXRTdGFuZGFyZEF0dHJpYnV0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6
OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5o
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OlNWR0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxlZFNpemVC
eUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6YXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEVmZmVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6dG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJCdWlsZGVyOjpjbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVk
LgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKwor
MjAyMS0xMS0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAg
ICBbR1BVIFByb2Nlc3NdIFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMg
aW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBzdG9yYWdlIGFuZCB0aGUgbG9n
aWMgZm9yIG1hbmFnaW5nIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIEZpbHRl
ckVmZmVjdCB0byBpdHMgaW5wdXRzIHRvIGEgbmV3IGNhbGxzIG5hbWVkICdGaWx0ZXJSZXN1bHQn
LiBUaGlzIHdpbGwKKyAgICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIEZpbHRl
ckVmZmVjdC4gSXQgd2lsbCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAgIHRoZSBDb3Jl
SW1hZ2Ugc2VhbWxlc3NseSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNhbGN1bGF0aW9u
LgorCisgICAgICAgIEluc3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3JlYXRlIHRoZSBy
ZXN1bHQgb2YgYSBGaWx0ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUgb25lIHdheSB3
aGljaCBpcyBieSBjYWxsaW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBjYWxsIHdpbGwK
KyAgICAgICAgbm90IGNyZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVlc3RpbmcgdGhl
IEltYWdlQnVmZmVyIG9yIGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0ZXJJbWFnZSB3
aWxsIG1ha2UgdGhpcyBjcmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAg
ICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAg
ICByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIGlzIHJlcGxhY2VkIGJ5IHRoZSBv
cHBvc2l0ZSAKKyAgICAgICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCku
IENvcnJlY3RpbmcgdGhlIHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9u
ZSBieSBGaWx0ZXJFZmZlY3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1
cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToK
KyAgICAgICAgQ2xlYXJpbmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBieSBudWxsaWZ5aW5nIGEg
c2luZ2xlIHBvaW50ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bnByZW11bHRp
cGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBs
aWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0UHJlbXVs
dGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbnBy
ZW11bHRpcGxpZWRSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxw
aGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBo
YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhl
bEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGlu
YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29u
dmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNl
Q29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVu
Y3Rpb25zIHdhcyBtb3ZlZCB0byBGaWx0ZXJJbWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpzZXRNYXhFZmZlY3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
bWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1
bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZp
bHRlckVmZmVjdFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVs
dGlwbHlpbmdBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0Fs
cGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVk
UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpsb2dpY2FsU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29sb3JTcGFjZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKwor
MjAyMS0xMS0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAg
ICBbR1BVIFByb2Nlc3NdIFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRl
ckVmZmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMyNTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW5zdGVhZCBvZiBoYXZpbmcgYSByZWZlcmVuY2UgdG8gdGhlIEZpbHRlciBpbiB0aGUgRmlsdGVy
RWZmZWN0LCB3ZSBhcmUKKyAgICAgICAgZ29pbmcgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUg
RmlsdGVyIHRvIHRoZSBGaWx0ZXJFZmZlY3QgZnVuY3Rpb25zCisgICAgICAgIG9ubHkgd2hlbiBu
ZWVkZWQuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbG9yTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25l
bnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVN
YXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
dzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9w
U2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFTWVyZ2U6OkZFTWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3Jw
aG9sb2d5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zm
c2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9m
ZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxh
ckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1
cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphcHBseUZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBo
YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3Jh
cGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFw
aGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdy
YXBoaWMpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNl
R3JhcGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUJyaWdodG5lc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQ29udHJhc3RFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0Vm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmF5U2NhbGVFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlSHVlUm90YXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUludmVydEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGFjaXR5RWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVNlcGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0Zp
bHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
bGFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFy
SW50ZXJtZWRpYXRlUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5
RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZFJlZmVy
ZW5jZUZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVs
ZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29u
c3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lF
bGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUlt
YWdlOjpGRUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmg6CisKKzIwMjEtMTAtMzAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fp
ZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xk
cyBhIGxpc3Qgb2YgRmlsdGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB0aGUgQ1NTIHJlZmVyZW5jZSBmaWx0
ZXIgaXMgYnVpbHQgYXMgYW4gU1ZHRmlsdGVyIGFuZCBpdAorICAgICAgICBpcyBrZXB0IGFzIGEg
RmlsdGVyRnVuY3Rpb24gaW4gdGhlIENTU0ZpbHRlciBmdW5jdGlvbnMnIGxpc3QuIFRoZSBGaWx0
ZXIgCisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmlsdGVyRWZmZWN0cyBvZiB0aGUgcmVm
ZXJlbmNlZCBmaWx0ZXIgd2lsbCBiZSBhbgorICAgICAgICBTVkdGaWx0ZXIgaW5zdGVhZCBvZiBo
YXZpbmcgYSBDU1NGaWx0ZXIuIFRoaXMgd2lsbCBhbGxvdyBoYXZpbmcgY29sb3IKKyAgICAgICAg
c3BhY2luZyBmb3IgdGhlIHJlZmVyZW5jZWQgZmlsdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgY29s
b3Igc3BhY2luZyBvZgorICAgICAgICBDU1NGaWx0ZXIuIAorCisgICAgICAgIEFsc28gdGhpcyBw
YXRjaCBtYWtlcyBhIHNpbmdsZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHByaW1pdGl2ZXMg
b2YKKyAgICAgICAgdGhlIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyB0d28gZnVuY3Rpb25z
LgorCisgICAgICAgIFRvIGFsbG93IG9wZXJhdGluZyB0aHJvdWdoIHRoZSBTVkdGaWx0ZXIgYXMg
YSBGaWx0ZXJGdW5jdGlvbiBvd25lZCBieQorICAgICAgICBDU1NGaWx0ZXIsIHRoZSBTVkdGaWx0
ZXIgd2lsbCBoYXZlIGEgcG9pbnRlciB0byBpdHMgbGFzdEVmZmVjdC4KKworICAgICAgICAqIGNz
cy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcklt
YWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZl
Y3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3V0c2V0cyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5j
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91dHNldHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmNsZWFyUmVzdWx0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZm
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRw
dXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZp
bHRlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmls
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
Y29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTEwLTI4ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFr
ZSBTVkdGaWx0ZXIgYW5kIENTU0ZpbHRlciB3b3JrIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIHN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMy
NDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3Vy
cmVudGx5IFNWR0ZpbHRlciBzZXRzIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiBGaWx0ZXIKKwor
ICAgICAgICAxLiBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTogdGhpcyBpcyB0
aGUgc2NhbGluZyBwYXJ0IGZyb20gdGhlCisgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uIGZyb20g
dGhlIHRhcmdldCBlbGVtZW50IHRvIHRoZSBvdXRlcm1vc3QgY29vcmRpbmF0ZSBzeXN0ZW0KKyAg
ICAgICAgMi4gRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjogdGhpcyBpcyB0aGUgY2xhbXBp
bmcgc2NhbGUgaWYgdGhlIHNpemUKKyAgICAgICAgICAgb2YgdGhlIHJlc3VsdCBJbWFnZUJ1ZmZl
cnMgZXhjZWVkcyBNYXhDbGFtcGVkQXJlYQorCisgICAgICAgIEFuZCB0aGUgQ1NTRmlsdGVyIHNl
dHMgdGhlIGZvbGxvd2luZyBtZW1iZXIgb2YgRmlsdGVyOgorCisgICAgICAgIDEuIGZsb2F0IG1f
ZmlsdGVyU2NhbGU6IHRoaXMgaXMgdGhlIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKQor
CisgICAgICAgIFRoZSBkaXNjcmVwYW5jeSBoYXBwZW5zIGFsc28gd2hlbiBjcmVhdGluZyB0aGUg
cmVzdWx0IEltYWdlQnVmZmVycy4gRm9yIAorICAgICAgICBTVkdGaWx0ZXIsIHdlIGNyZWF0ZSB0
aGVtIHdpdGggc2NhbGVGYWN0b3I9MS4gVGhpcyBtZWFucyB0aGUgbG9naWNhbFNpemUKKyAgICAg
ICAgPT0gYmFja2VuZFNpemUuIEJ1dCBmb3IgQ1NTRmlsdGVyIHdlIGNyZWF0ZSB0aGVtIHdpdGgg
c2NhbGVGYWN0b3IKKyAgICAgICAgPSBtX2ZpbHRlclNjYWxlLiBUaGlzIG1lYW5zIHRoZSBsb2dp
Y2FsU2l6ZSAhPSBiYWNrZW5kU2l6ZSBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgV2UgbmVlZCB0
byB1bmlmeSB0aGUgY29vcmRpbmF0ZXMgc3lzdGVtIGZvciBib3RoIGZpbHRlcnMuIFdlIG5lZWQg
YWxzbyB0bworICAgICAgICByZXBsYWNlIHRoZSB0aHJlZSBtZW1iZXJzIGJ5IGEgc2luZ2xlIEZs
b2F0U2l6ZSBjYWxsZWQgIm1fZmlsdGVyU2NhbGUiLgorCisgICAgICAgICogY3NzL0NTU0ZpbHRl
ckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6
aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZp
bHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyU2Nh
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpmaWx0ZXJSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2Fs
ZWRCeUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphYnNvbHV0ZVRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29s
dXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1
ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZl
clRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0Zp
bHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6
OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
c2NhbGVkQnlGaWx0ZXJTY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmg6CisKKzIwMjEtMTAtMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBJbnRyb2R1Y2UgRmlsdGVyRnVuY3Rpb24g
YW5kIG1ha2UgaXQgdGhlIGJhc2UgY2xhc3Mgb2YgRmlsdGVyIGFuZCBGaWx0ZXJFZmZlY3QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQxMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWxsb3dz
IENTU0ZpbHRlciB0byBob2xkIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMuIFRoZSBGaWx0ZXIg
aW4KKyAgICAgICAgdGhpcyBjYXNlIHdpbGwgYWN0IGxpa2UgYSBjb21wb3NpdGUgcGF0dGVybiBv
ZiB0aGUgRmlsdGVyRWZmZWN0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbworICAgICAgICAx
LiBSZW1vdmVzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGZpbHRlck5hbWUoKSBmcm9tIGFsbCB0aGUg
RmlsdGVyRWZmZWN0CisgICAgICAgICAgIGNsYXNzZXMuIEl0IHJlcGxhY2VzIGl0IHdpdGggYSBz
dGF0aWMgZnVuY3Rpb24gaW4gRmlsdGVyRnVuY3Rpb24uCisgICAgICAgIDIuIFJlbW92ZXMgdGhl
IHZpcnR1YWwgZnVuY3Rpb24gZmlsdGVyRWZmZWN0VHlwZSgpIGFuZCB0aGUgZnVuY3Rpb24KKyAg
ICAgICAgICAgRmlsdGVyRWZmZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBzaW5jZSB0aGV5
IGNhbiBib3RoIGJlIHJlcGxhY2VkCisgICAgICAgICAgIGJ5IEZpbHRlckZ1bmN0aW9uOjpmaWx0
ZXJUeXBlKCkuCisgICAgICAgIDMuIEFkZHMgdHJhaXQgbWFjcm9zIGZvciBhbGwgRmlsdGVyRWZm
ZWN0cyBhbmQgdGhlIFNWR0ZpbHRlcnMgY2xhc3MuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1
cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVu
ZDo6RkVCbGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
Lmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4
OjpGRUNvbG9yTWF0cml4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaDoKKyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgor
ICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpG
RUNvbXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZl
TWF0cml4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1
c2VMaWdodGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1
c2VMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZF
RGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpGRURyb3BT
aGFkb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93
Lmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpGRUZsb29kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zm
c2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6Cisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdo
dGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OkZpbHRlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZmlsdGVyRWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlwZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OmZpbHRlclR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OmlzQ1NTRmlsdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
Ojppc1NWR0ZpbHRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
aXNGaWx0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmls
dGVyRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3Vy
Y2VBbHBoYU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUdy
YXBoaWNOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1l
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAg
ICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUltYWdlOjpGRUltYWdlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoKKwogMjAyMS0xMS0wMSAgRG9uIE9s
bXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBGaXggLVdy
ZW9yZGVyLWN0b3IgaW4gQ3VybFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOGRhMjRiNzhkYTU3
ZGMzYmQyY2VkMTE4NGMyZWRkZmYwYjhkZTI0Ni4uOGYzMGUzM2Y4MmI3MjI1N2IwYTllYWYyMDg4
MTFjOGNiY2M5YjE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNjIsNiArMjA2Miw4IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDI1NzU1YmMzMzhlNzZkODc5MGQwYjQzYzA3ZDJkMmFiZjA2MGU3ODUuLjExYTU0
MjgzYWVjZDZiN2EyODJmZTk3YWI0YzY1MDljOGZhYWIyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTgsNiArMjI5OCw3
IEBACiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4
QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgw
RDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5
U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0
RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJG
QjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1h
Z2UuaCAqLzsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUx
MjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8q
IE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0
MDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNTYxLDYgKzEwNTYyLDggQEAKIAkJNzI0RUU1
NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2Vy
dmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFu
Z2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENB
REMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZl
SW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQx
MDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2
QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAw
ODMzOTc1IC8qIFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNjZGMDE0MjI0MUJGQjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9y
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUg
LyogU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmlt
aXRpdmVQcm9wZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDU3MSw2ICsxMDU3NCw5IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmlt
YXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
aW9uQWRkaXRpdmVMaXN0RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNjZGMDI5MjI0MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RG
dW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5
NzUgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjky
NzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI2QkUwMkIyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNkJFMDM5MjczMzRCNDIwMDczOEZGRCAvKiBGaWx0ZXJCb3VuZGFyeVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODY0NCwxMSArMTg2NTAsMTEgQEAKIAkJMUE1NjlDQzQwRDdFMkI2MDAw
N0MzOTgzIC8qIGJyaWRnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCi0JCQkJNTlCNTk3NzExMTA4NjU1NjAwNzE1OUU4IC8qIGpzYyAqLywKIAkJCQkxQTU2OUNF
MjBEN0UyQjgyMDA3QzM5ODMgLyogb2JqYyAqLywKIAkJCQk1OTlFNzU4RjExMDU1QTFGMDBEOTA0
RkEgLyogQnJpZGdlLmggKi8sCiAJCQkJMUE3MUQ1NzkwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50
aWZpZXJSZXAuY3BwICovLAogCQkJCTFBNzFENTdBMEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlm
aWVyUmVwLmggKi8sCisJCQkJNTlCNTk3NzExMTA4NjU1NjAwNzE1OUU4IC8qIGpzYyAqLywKIAkJ
CQkxQTU2OUNFRjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5jcHAgKi8sCiAJCQkJ
MUE1NjlDRjAwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXkuaCAqLywKIAkJCQkxQTU2
OUNGMTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9tZXRob2QuY3BwICovLApAQCAtMjUyODcs
MTAgKzI1MjkzLDE1IEBACiAJCQkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVs
ZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5j
ZS5oICovLAogCQkJCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJ
CQk3MjZCRTAzOTI3MzM0QjQyMDA3MzhGRkQgLyogRmlsdGVyQm91bmRhcnlTZXQuaCAqLywKIAkJ
CQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmNwcCAqLywKIAkJCQkw
OEM5MjUxODBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggKi8sCiAJCQkJMkM4NTY1
MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKIAkJCQky
Qzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywKKwkJ
CQk3MjYyRDc1NzI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uY3BwICovLAorCQkJ
CTcyNjJENzU2MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAorCQkJCTcy
NkJFMDI5MjcyRkIxNzEwMDczOEZGRCAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8sCisJCQkJNzI2QkUw
MkIyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8sCiAJCQkJNDlFQ0VCNjMxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VCNjQxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1MTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKQEAgLTMyNzgzLDYgKzMyNzk0
LDcgQEAKIAkJCQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkyQzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJDQUE0QTNBMjRCRTE4QjcwMDlERUU3MCAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2
QkUwMkQyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUVDRUI2RTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OUVDRUI3MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRp
b25zLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
aWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcAppbmRleCBjNjdhMzViMDcxNWI3MjFlZDg5OTJkZWNkNDlmYThkMGI4MDY0NzcwLi5j
ZjZhNmU3ODk0ZGE2MDkzNWNmOTE5ZTcyNzllZWVhODM4YTMzNjY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0xMTYsMjAgKzExNiwyMiBAQCBSZWZQ
dHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIEltYWdlIGludG8gSW1hZ2VC
dWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUg
dW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAo
IXRleHR1cmUpCisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsKKyAgICBhdXRvIHNvdXJjZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQogICAgICAgICByZXR1cm4gJklt
YWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9
LCBzaXplIH07Ci0gICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdl
UmVjdCk7CisgICAgYXV0byBzb3VyY2VJbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUg
fTsKKyAgICBzb3VyY2VJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIHNvdXJjZUlt
YWdlUmVjdCk7CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0g
ICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NG
aWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0
RmlsdGVyUmVnaW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRl
cmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikp
CisgICAgYXV0byBjc3NGaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShtX2ZpbHRlck9wZXJhdGlv
bnMsIHJlbmRlcmluZ01vZGUpOworICAgIAorICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VS
ZWN0KHNvdXJjZUltYWdlUmVjdCk7CisgICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVy
LCBtX2ZpbHRlck9wZXJhdGlvbnMpKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2Uo
KTsKLSAgICBjc3NGaWx0ZXItPmFwcGx5KCk7CisKKyAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUlt
YWdlKFdURk1vdmUoc291cmNlSW1hZ2UpKTsKKyAgICBjc3NGaWx0ZXItPmFwcGx5RmlsdGVyKCk7
CiAKICAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwogICAgIGlmICghb3V0
cHV0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWlt
YWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApp
bmRleCBlNmM4ZGY0ZDU1YjQ1NjEzNTQ5ZTNhZjQ5MTkyYTI2ZTJjMDQ0YWY3Li43Y2QxNmEyODVm
ZTllMDliYTFhZTQ3MjYxMGU5ODYwYzcyZmJjNzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApAQCAtNDcsMjAgKzQ3LDIwIEBAIGNsYXNzIEZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlIDogcHVibGljIEZpbHRlckVmZmVjdFJlbmRlcmVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVyRWZmZWN0Jik7CiAgICAgUmV0YWluUHRyPENJ
Q29udGV4dD4gc2hhcmVkQ0lDb250ZXh0KCk7Ci0gICAgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVy
RWZmZWN0JikgZmluYWw7CisgICAgdm9pZCBhcHBseUVmZmVjdHMoY29uc3QgRmlsdGVyJiwgRmls
dGVyRWZmZWN0JikgZmluYWw7CiAgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX291dHB1dEltYWdlOyB9CiAgICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0IGZp
bmFsOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCBm
aW5hbDsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0JikgY29uc3QgZmluYWw7CiAgICAgdm9pZCBjbGVhclJlc3VsdCgpIGZpbmFsOwogICAg
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7CiAgICAgCiBwcml2YXRlOgotICAgIFJl
dGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIHZv
aWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKKyAgICBSZXRhaW5Q
dHI8Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVycyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3Qm
KTsKKyAgICB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoY29uc3QgRmlsdGVyJiwgRmlsdGVyRWZm
ZWN0JikgZmluYWw7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmco
RmlsdGVyRWZmZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMo
RmlsdGVyRWZmZWN0Jik7CiAgICAgCi0gICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yU291
cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7CisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdl
Rm9yU291cmNlR3JhcGhpYyhjb25zdCBGaWx0ZXImKTsKICAgICBSZXRhaW5QdHI8Q0lJbWFnZT4g
aW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0IEZFQ29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8
UmV0YWluUHRyPENJSW1hZ2U+PiYpOwogICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZF
Q29tcG9uZW50VHJhbnNmZXIoY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRh
aW5QdHI8Q0lJbWFnZT4+Jik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW0KaW5kZXggOTdlMTEzN2IyOWQ3MWMyYjU0NDE1NzMwNjcyNDAw
YjgyNDI4YjM2MS4uYmRkNTFmNTVhMzI4MmQ0OWFmMDY4OWM5MGQ1ODhjZDVkZjk3NWQ0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQpAQCAt
NzIsMTEgKzcyLDExIEBAIHN0YXRpYyBib29sIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiBlCiBib29sIEZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZl
Y3QmIGVmZmVjdCkKIHsKICAgICAvLyBGSVhNRTogY2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVl
IG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZl
Y3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlclR5cGUoKSkgewogICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1h
dHJpeDogeworICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbG9yTWF0cml4OiB7CiAg
ICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVDb2xvck1hdHJpeD4oZWZmZWN0KS50eXBlKCkpIHsK
ICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgY2FzZSBG
RUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKQEAgLTg4LDkwICs4OCw1NSBAQCBi
b29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRl
cmluZyhGaWx0ZXJFZmZlY3QmIGVmZgogICAgICAgICB9CiAgICAgfQogCi0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgogICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5l
YXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+
KGVmZmVjdCkpOwogCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZm
dXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1h
cDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Okdh
dXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpU
aWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKKyAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYgbGFzdEVm
ZmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhj
b25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQogewotICAgIG1f
b3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGxhc3RFZmZlY3QpOworICAgIG1fb3V0cHV0
SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwgbGFzdEVmZmVjdCk7CiAgICAgaWYgKCFt
X291dHB1dEltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihs
YXN0RWZmZWN0KTsKKyAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGZpbHRlciwgbGFzdEVmZmVjdCk7
CiB9CiAKLVJldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKK1JldGFpblB0cjxDSUltYWdl
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhjb25zdCBG
aWx0ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiB7CiAgICAgVmVjdG9yPFJldGFp
blB0cjxDSUltYWdlPj4gaW5wdXRJbWFnZXM7CiAgICAgCiAgICAgZm9yIChhdXRvIGluIDogZWZm
ZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAgIGF1dG8gaW5wdXRJbWFnZSA9IGNvbm5lY3RD
SUZpbHRlcnMoKmluKTsKKyAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVy
cyhmaWx0ZXIsICppbik7CiAgICAgICAgIGlmICghaW5wdXRJbWFnZSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICBpbnB1dEltYWdlcy5hcHBlbmQoaW5wdXRJbWFnZSk7CiAg
ICAgfQotICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIGVmZmVj
dC5zZXRSZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAg
IAotICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSkpCisKKyAgICBhdXRvIGFic29sdXRlSW1hZ2VSZWN0ID0gZWZmZWN0LmNhbGN1bGF0ZUFic29s
dXRlSW1hZ2VSZWN0KGZpbHRlcik7CisgICAgaWYgKGFic29sdXRlSW1hZ2VSZWN0LmlzRW1wdHko
KSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6
ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgc3dpdGNoIChlZmZlY3Qu
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJUeXBl
KCkpIHsKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAg
ICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3JhcGhpYyhkb3duY2FzdDxTb3VyY2VHcmFwaGljPihl
ZmZlY3QpKTsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6CisgICAg
ICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZmlsdGVyKTsKKyAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeDoKICAgICAgICAgcmV0dXJuIGltYWdlRm9yRkVD
b2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLCBpbnB1dEltYWdlcyk7
Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5zZmVyOgorICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgogICAgICAgICByZXR1
cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNm
ZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKIAotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhv
c2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEg
dmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlm
ZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRN
YXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpH
YXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkltYWdlOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VHVyYnVsZW5jZToKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1SZXRhaW5Q
dHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNl
R3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3QpCitSZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhjb25zdCBGaWx0
ZXImIGZpbHRlcikKIHsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBlZmZlY3QuZmls
dGVyKCkuc291cmNlSW1hZ2UoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0
ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXNvdXJjZUltYWdlKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAKQEAgLTI3MywyMiArMjM4LDIyIEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6b3V0cHV0KCkgY29uc3QKICAgICByZXR1cm4gbV9vdXRw
dXRJbWFnZUJ1ZmZlci5nZXQoKTsKIH0KICAgICAKLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQor
dm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihj
b25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQogewotICAgIEZs
b2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShsYXN0RWZmZWN0
LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX291dHB1dEltYWdlQnVmZmVyID0g
SU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbGFzdEVmZmVjdC5maWx0
ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KTsKKyAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5jYWxjdWxh
dGVBYnNvbHV0ZUltYWdlUmVjdChmaWx0ZXIpLnNpemUoKTsKKyAgICBGbG9hdFNpemUgY2xhbXBl
ZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdFNpemUpOworICAgIG1fb3V0cHV0
SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAx
LCBsYXN0RWZmZWN0LmltYWdlQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAg
IGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewogICAgICAgICBjbGVhclJlc3VsdCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRl
cjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZlci0+
c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFj
ZTpsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07Cisg
ICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0
b0lPU3VyZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZlci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3Vu
ZHM6ZGVzdFJlY3QoZmlsdGVyLCBsYXN0RWZmZWN0KSBjb2xvclNwYWNlOmxhc3RFZmZlY3QuaW1h
Z2VDb2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNwYWNlKCldOwogfQogICAgIAotRmxvYXRSZWN0
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZl
Y3QmIGxhc3RFZmZlY3QpIGNvbnN0CitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3Qm
IGxhc3RFZmZlY3QpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVj
dC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKKyAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVm
ZmVjdC5jYWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVjdChmaWx0ZXIpLnNpemUoKTsKICAgICBGbG9h
dFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0U2l6ZSk7CiAgICAg
cmV0dXJuIGRlc3RSZWN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAppbmRleCAyNjEx
MGNkZmIwYmI2Y2Y0OTA0NTgzODc3ODdhYzEwZmExNzFjZjE4Li5kYWYzMGRlZWU5MGJkYTJkMjRk
YzE2YzZkZGE5MWUyMDIyMWY3NWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaApAQCAt
MjUsOCArMjUsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZFQmxlbmRORU9O
X2gKLSNkZWZpbmUgRkVCbGVuZE5FT05faAorI3ByYWdtYSBvbmNlCiAKICNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCiAKQEAgLTEwNyw0MyArMTA2LDcgQEAgcHVibGljOgogICAgIH0KIH07
CiAKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1
dEVmZmVjdCgxKTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgIEludFJlY3QgZWZmZWN0QURy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlBID0gaW4tPnByZW11bHRp
cGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKLQotICAgIEludFJlY3QgZWZmZWN0QkRy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5QiA9IGluMi0+cHJlbXVs
dGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOwotCi0gICAgdW5zaWduZWQgc291cmNl
UGl4ZWxBcnJheUxlbmd0aCA9IHNvdXJjZVBpeGVsQXJyYXlBLT5sZW5ndGgoKTsKLSAgICBBU1NF
UlQocGl4ZWxBcnJheUxlbmd0aCA9PSBzb3VyY2VQaXhlbEFycmF5Qi0+bGVuZ3RoKCkpOwotCi0g
ICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPj0gOCkgewotICAgICAgICBwbGF0Zm9ybUFw
cGx5TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0
YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3Ro
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJZiB0aGVyZSBpcyBqdXN0IG9uZSBw
aXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgotICAgIEFTU0VSVChzb3VyY2VQaXhlbEFycmF5TGVu
Z3RoID4gMCk7Ci0gICAgdWludDMyX3Qgc291cmNlQVsyXSA9IHswLCAwfTsKLSAgICB1aW50MzJf
dCBzb3VyY2VCQW5kRGVzdFsyXSA9IHswLCAwfTsKLQotICAgIHNvdXJjZUFbMF0gPSByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oc291cmNlUGl4ZWxBcnJheUEtPmRhdGEoKSlbMF07Ci0gICAg
c291cmNlQkFuZERlc3RbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc291cmNlUGl4
ZWxBcnJheUItPmRhdGEoKSlbMF07Ci0gICAgcGxhdGZvcm1BcHBseU5FT04ocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJj
ZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCA4
KTsKLSAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdGluYXRpb25QaXhlbEFycmF5
LmRhdGEoKSlbMF0gPSBzb3VyY2VCQW5kRGVzdFswXTsKLX0KLQotdm9pZCBGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hh
ciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpCit2b2lk
IEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlB
LCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxB
cnJheSwgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCkKIHsKICAgICB1aW50OF90KiBzb3VyY2VQ
aXhlbEEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzcmNQaXhlbEFycmF5QSk7CiAgICAg
dWludDhfdCogc291cmNlUGl4ZWxCID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc3JjUGl4
ZWxBcnJheUIpOwpAQCAtMjAyLDggKzE2NSw0NiBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcgog
ICAgIH0KIH0KIAorYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCit7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRl
ckltYWdlKCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFn
ZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworCisgICAgYXV0byYgb3Vw
dXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXB1dFBpeGVsQnVm
ZmVyLT5kYXRhKCk7CisKKyAgICBJbnRSZWN0IGlucHV0SW1hZ2VSZWN0ID0gZmlsdGVyLnJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbnB1dC0+aW1hZ2VSZWN0KCksIG91dHB1dC0+
aW1hZ2VSZWN0KCkpOworICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJl
Y3QpOworCisgICAgSW50UmVjdCBpbnB1dEltYWdlUmVjdDIgPSBmaWx0ZXIucmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlucHV0Mi0+aW1hZ2VSZWN0KCksIG91dHB1dC0+aW1hZ2VS
ZWN0KCkpOworICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5MiA9IGlucHV0Mi5nZXRQaXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdDIp
OworCisgICAgdW5zaWduZWQgaW5wdXRQaXhlbEFycmF5TGVuZ3RoID0gaW5wdXRQaXhlbEFycmF5
LT5sZW5ndGgoKTsKKyAgICBBU1NFUlQoaW5wdXRQaXhlbEFycmF5TGVuZ3RoID09IGlucHV0UGl4
ZWxBcnJheTItPmxlbmd0aCgpKTsKKworICAgIGlmIChpbnB1dFBpeGVsQXJyYXlMZW5ndGggPj0g
OCkgeworICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihpbnB1dFBpeGVsQXJyYXktPmRhdGEoKSwg
aW5wdXRQaXhlbEFycmF5Mi0+ZGF0YSgpLCBvdXRwdXRQaXhlbEFycmF5LmRhdGEoKSwgaW5wdXRQ
aXhlbEFycmF5TGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8g
SWYgdGhlcmUgaXMganVzdCBvbmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KKyAgICBBU1NF
UlQoaW5wdXRQaXhlbEFycmF5TGVuZ3RoID4gMCk7CisgICAgdWludDMyX3Qgc291cmNlQVsyXSA9
IHsgMCwgMCB9OworICAgIHVpbnQzMl90IHNvdXJjZUJBbmREZXN0WzJdID0geyAwLCAwIH07CisK
KyAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGlucHV0UGl4ZWxB
cnJheS0+ZGF0YSgpKVswXTsKKyAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihpbnB1dFBpeGVsQXJyYXkyLT5kYXRhKCkpWzBdOworCisgICAgcGxhdGZv
cm1BcHBseU5FT04ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oc291cmNlQkFuZERlc3QpLCA4KTsKKyAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4ob3V0cHV0UGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERlc3RbMF07CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
SEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotCi0jZW5kaWYgLy8gRkVCbGVuZE5FT05faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50
TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkM2ViMDdmNDhlZTFkMDJi
YmZmY2M2YjA0NDFmODkuLjFmYjAzN2ZlMTFmNjY5MWVkMDM5NGE0NGVhY2NkMDI3OWJiNmQwYjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlz
dGFudExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3Zv
aWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewogICAgIGZs
b2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXppbXV0aCk7CiAgICAgZmxvYXQgZWxldmF0aW9uID0g
ZGVnMnJhZChtX2VsZXZhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCBjMWUz
MGVkZTc1OTgzNzI4YTYzMmJjY2ZmYjA5OTczYTNhNGU3MmZkLi4wMDNmZTE5Y2QxMjYyMzk5Njdi
MWIyMjI2ZmQ3OTA1NTQyYmViZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAgLTQx
LDcgKzQxLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRl
OworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0
YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGlu
dCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
CmluZGV4IDVhYzdmNDkwZDRjZGE1MzNhNDFmNWMzZDg1NDUzMmMxOGFkY2RiNjYuLjc5MTczNTRj
ZmY2ZjUxNTljZDJlNDliNjM2Mjk4MTJhZjk5MmRhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMzQsMTUgKzM0
LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVCbGVuZDo6RkVCbGVuZChGaWx0ZXIm
IGZpbHRlciwgQmxlbmRNb2RlIG1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpCbGVuZCkKK0ZFQmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUJsZW5kKQogICAgICwgbV9tb2RlKG1vZGUpCiB7
CiB9CiAKLVJlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5k
TW9kZSBtb2RlKQorUmVmPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShCbGVuZE1vZGUgbW9kZSkK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKGZpbHRlciwgbW9kZSkpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCiBib29sIEZFQmxlbmQ6
OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKQEAgLTU0LDIzICs1NCwyOSBAQCBib29sIEZF
QmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKIH0KIAogI2lmICFIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiti
b29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
IHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVj
dCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSAqaW5wdXRFZmZlY3QoMSkt
PmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRl
eHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW5w
dXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbnB1dEltYWdlMiA9IGlu
cHV0Mi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSB8fCAhaW5wdXRJbWFnZTIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQu
aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBmaWx0ZXIuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0MiA9IGZpbHRlci5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
cHV0Mi5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVjdCgpKTsKIAotICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsg
Q29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICBHcmFwaGljc0Nv
bnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworCisgICAgb3V0
cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UyLCBpbnB1dEltYWdlUmVjdDIp
OworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dElt
YWdlUmVjdCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIHJldHVybiB0cnVlOwogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmgKaW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4NTE3YjUwNzllNzk2Ni4u
MzM2OTNjMTk5N2JiYTdiYmRlODg5MDU4N2IxNTZlZWUzMzc2YzVjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKQEAgLTIzLDIy
ICsyMywyMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQot
I2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUJsZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoRmlsdGVyJiwgQmxlbmRNb2Rl
KTsKKyAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShCbGVuZE1vZGUpOwogCiAgICAgQmxl
bmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgc2V0
QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJsZW5kIjsgfQorICAgIEZFQmxlbmQoQmxl
bmRNb2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5
QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVs
QXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVu
Z3RoKTsKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVs
QXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0
UGl4ZWxBcnJheSwKQEAgLTQ2LDEwICs0NSw5IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50
YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQoRmlsdGVyJiwgQmxlbmRN
b2RlKTsKLQogICAgIEJsZW5kTW9kZSBtX21vZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUJsZW5kKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKaW5kZXggMTY0MjJkNmRjNWI1N2VjNmY3NDdhNDIxMGMyODU0MzMyYmEx
ZDNlNS4uNWNlZWNjYmUzZGIyOTQwZjNjZjU0NTRjMjE0MjJhNzQzMjQwMjYwYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCkBAIC0zNSwxNiArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJp
eFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6IEZpbHRlckVmZmVjdChm
aWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQorRkVDb2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChD
b2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKKyAgICA6IEZpbHRl
ckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29sb3JNYXRyaXgpCiAgICAgLCBtX3R5cGUo
dHlwZSkKICAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkKIHsKIH0KIAotUmVmPEZFQ29s
b3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRy
aXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCitSZWY8RkVDb2xvck1hdHJpeD4g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKENvbG9yTWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+
JiYgdmFsdWVzKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29sb3JNYXRyaXgoZmls
dGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RUNvbG9yTWF0cml4KHR5cGUsIFdURk1vdmUodmFsdWVzKSkpOwogfQogCiBib29sIEZFQ29sb3JN
YXRyaXg6OnNldFR5cGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUpCkBAIC0yNzMsMjMgKzI3MywzOSBA
QCB2b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHZhbHVlcywgSW50UwogICAgIH0KIH0KIAotdm9pZCBGRUNvbG9yTWF0cml4
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1h
Z2UoKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAg
ICByZXR1cm4gbV90eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOwor
fQogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CitWZWN0b3I8Zmxv
YXQ+IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYg
dmFsdWVzKQoreworICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6
ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwor
ICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOworfQorCitib29sIEZFQ29sb3JNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBhdXRvJiBp
bnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQg
PSAqZmlsdGVySW1hZ2UoKTsKKyAgICAKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0Lmlt
YWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgaWYgKGluQnVmZmVyKQotICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKKyAgICBhdXRvIGlucHV0QnVmZmVyID0gaW5wdXQuaW1hZ2VCdWZm
ZXIoKTsKKyAgICBpZiAoaW5wdXRCdWZmZXIpIHsKKyAgICAgICAgYXV0byBhYnNvbHV0ZUltYWdl
UmVjdCA9IGZpbHRlci5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlucHV0LmltYWdlUmVjdCgp
LCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgICAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcigqaW5wdXRCdWZmZXIsIGFic29sdXRlSW1hZ2VSZWN0KTsKKyAgICB9CiAK
LSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07
Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRl
ZExvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0
UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZv
cm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3Jt
YXQ6OlJHQkE4LCBvdXRwdXQuY29sb3JTcGFjZSgpIH07CisgICAgSW50UmVjdCBpbWFnZVJlY3Qo
SW50UG9pbnQoKSwgb3V0cHV0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpOworICAgIGF1
dG8gcGl4ZWxCdWZmZXIgPSBvdXRwdXRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFn
ZVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRh
KCk7CiAgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7
CkBAIC0zMTAsMTEgKzMyNiwxMSBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xV
TUlOQU5DRVRPQUxQSEE6CiAgICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xV
TUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMp
OwotICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVj
dCk7CisgICAgb3V0cHV0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VS
ZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmgKaW5kZXggMjllNDFhOGFlZDFlNGYwYjUzOTcwM2FjNGRiNTUyNGVmYTRjMTIzZi4uYzNm
OGJkMGJjNGE4NTg1ZmIxMzYzMWNjN2RmZjFiZTRmMzg0MjMyOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgK
QEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM2LDcgQEAgZW51bSBDb2xvck1hdHJpeFR5cGUg
ewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgQ29sb3JNYXRy
aXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4g
Y3JlYXRlKENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKIAogICAgIENvbG9yTWF0
cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgYm9vbCBzZXRUeXBl
KENvbG9yTWF0cml4VHlwZSk7CkBAIC00OCwxMyArNDYsMTQgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9u
ZW50cywgZmxvYXQgdmFsdWUpOwogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVIdWVS
b3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0KKyAgICBz
dGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcyk7CisgICAgCiBwcml2YXRlOgotICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29s
b3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JN
YXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQorICAgIGJvb2wgaXNB
bHBoYUltYWdlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CiAKQEAgLTkzLDcgKzkyLDQgQEAgaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OkZFQ29sb3JNYXRyaXgpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZp
bHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBl
KCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDsgfQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQotCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9F
RkZFQ1QoRkVDb2xvck1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4
IDg0N2VhNThmNWY5YjAzODY2ZDllYWM1N2YxMGNjZjU3NDAyZjllNjMuLmNjNWEzYTI0OGNlODVh
MDllZWRkZDc1MDdiNzdlMDQ4OTg0MTI1N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmNwcApAQCAtMzMsOSArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9u
ZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAotICAgIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvbmVu
dFRyYW5zZmVyKQorRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcihjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBh
bHBoYUZ1bmN0aW9uKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVD
b21wb25lbnRUcmFuc2ZlcikKICAgICAsIG1fcmVkRnVuY3Rpb24ocmVkRnVuY3Rpb24pCiAgICAg
LCBtX2dyZWVuRnVuY3Rpb24oZ3JlZW5GdW5jdGlvbikKICAgICAsIG1fYmx1ZUZ1bmN0aW9uKGJs
dWVGdW5jdGlvbikKQEAgLTQzLDEwICs0MiwxMCBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNv
bXBvbmVudFRyYW5zZmVyKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2Zlcgog
ewogfQogCi1SZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3Jl
YXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRG
dW5jdGlvbiwKK1JlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
cmVhdGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCiAgICAg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFQ29tcG9uZW50VHJhbnNmZXIoZmlsdGVyLCByZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwg
Ymx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVDb21wb25lbnRUcmFuc2ZlcihyZWRGdW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0
aW9uLCBhbHBoYUZ1bmN0aW9uKSk7CiB9CiAKIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29t
cHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJikKQEAgLTEwNCwxMyArMTAzLDE0IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50CiAg
ICAgfQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7Cisg
ICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRv
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgp
OwogCkBAIC0xMjAsOCArMTIwLDkgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7CiAgICAgY29tcHV0
ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxl
KTsKIAotICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5tdWx0aXBs
aWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBmaWx0ZXIucmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlucHV0LmltYWdlUmVjdCgpLCBvdXRwdXQuaW1hZ2VSZWN0
KCkpOworICAgIGlucHV0LmNvcHlQaXhlbEJ1ZmZlcihkZXN0aW5hdGlvblBpeGVsQXJyYXksIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOworCiAgICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVu
Z3RoID0gZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOwogICAgIHVpbnQ4X3QqIGRhdGEg
PSBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxP
ZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4
ZWxPZmZzZXQgKz0gNCkgewpAQCAtMTMwLDYgKzEzMSw4IEBAIHZvaWQgRkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCAr
IDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CiAgICAgICAgIGRhdGFbcGl4
ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKICAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVu
VGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAppbmRleCAyYjU4NmRlZjdmYjQyYTM3YjJlMTIzZWRh
ODcxMTljNGViMzQ4YTUxLi42YWRhOWMwYWJiZTVjMmY5ZDY1YmQ5MTlmZmVjNGYxNzNkMDAzNDE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaApAQCAtMjIsOCArMjIsNiBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5o
IgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMs
OCArNTEsNyBAQCBzdHJ1Y3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB7CiAKIGNsYXNzIEZF
Q29tcG9uZW50VHJhbnNmZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CisgICAgc3RhdGljIFJlZjxGRUNv
bXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
cmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gcmVkRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZEZ1bmN0aW9uOyB9CiAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9n
cmVlbkZ1bmN0aW9uOyB9CkBAIC02MiwxMCArNTksNyBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1
bmN0aW9uOyB9CiAKIHByaXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVD
b21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBhbHBoYUZ1bmMpOwogCiAgICAgdXNpbmcgTG9va3VwVGFibGUgPSBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj47CiAKQEAgLTc3LDcgKzcxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBn
cmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJs
ZSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJv
b2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTg5LDYgKzgzLDQgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXIpCi0gICAgc3RhdGljIGJvb2wg
aXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZl
Y3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBl
OjpDb21wb25lbnRUcmFuc2ZlcjsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29tcG9uZW50VHJhbnNmZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwCmluZGV4IDgzMzUzMDkwODFhMjZiYTJjMzFjM2JkYWM4ODg2NjllMjhlMzQ1
NmQuLjZmN2ZhMzRjMmZmZGRkNTg0MjJmNTZlZDc1OTlhOWQ1NTU5NmRiNmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3Np
dGUuY3BwCkBAIC0zMiw4ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21w
b3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRp
b25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLSAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbXBvc2l0ZSkKK0ZFQ29tcG9zaXRlOjpG
RUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFQ29tcG9zaXRlKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX2sx
KGsxKQogICAgICwgbV9rMihrMikKQEAgLTQyLDkgKzQyLDkgQEAgRkVDb21wb3NpdGU6OkZFQ29t
cG9zaXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBl
LCBmbG8KIHsKIH0KIAotUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3Np
dGU6OmNyZWF0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwg
ZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUNvbXBvc2l0ZShmaWx0ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVDb21wb3NpdGUodHlwZSwgazEsIGsyLCBrMywgazQpKTsKIH0KIAog
Ym9vbCBGRUNvbXBvc2l0ZTo6c2V0T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgdHlw
ZSkKQEAgLTg3LDE0ICs4Nyw2IEBAIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVz
dWx0SWZOZWVkZWQoKQotewotICAgIGlmIChtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1Jf
QVJJVEhNRVRJQykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yY2VWYWxpZFByZU11bHRpcGxp
ZWRQaXhlbHMoKTsKLX0KLSAgICAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQg
YykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oYyksIDI1NSwgMCB9OwpAQCAtMjAxLDEwMCArMTkzLDEyMSBAQCBpbmxpbmUgdm9pZCBG
RUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdQogI2VuZGlmCiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRUNvbXBvc2l0ZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0
KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfSU46Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDogewogICAgICAgICAvLyBGb3IgSW4gYW5kIEF0
b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgogICAgICAg
ICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJl
Y3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJl
Y3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBjbGlwQWJz
b2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiBpbnB1dDIg
PSAqaW5wdXRFZmZlY3QoMSktPmZpbHRlckltYWdlKCk7CisgICAgICAgIHJldHVybiBmaWx0ZXIu
Y2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0Mi5pbWFnZVJlY3QoKSwgcHJpbWl0aXZl
U3VicmVnaW9uKTsKKyAgICB9CisKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRI
TUVUSUM6CiAgICAgICAgIC8vIEFyaXRobWV0aWMgbWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZp
bHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4ndAogICAgICAgICAvLyBvcHRpbWl6ZSB0
aGUgcGFpbnQgcmVnaW9uIGhlcmUuCi0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsK
KwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQg
ZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3Q6OmNhbGN1
bGF0ZUltYWdlUmVjdChmaWx0ZXIsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiAgICAgfQogfQogCi12
b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUNvbXBvc2l0
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9
IGlucHV0RWZmZWN0KDEpOwotCisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZp
bHRlckltYWdlKCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJ
bWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIAogICAgIGlm
IChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgaWYg
KCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJl
cXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgaWYg
KCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEludFJl
Y3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxp
ZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRw
dXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3
YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIs
IG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIEludFJlY3QgaW5wdXRJbWFn
ZVJlY3QgPSBmaWx0ZXIucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlucHV0Lmlt
YWdlUmVjdCgpLCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgICAgICBhdXRvIGlucHV0UGl4ZWxB
cnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAg
ICBpZiAoIWlucHV0UGl4ZWxBcnJheSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIEludFJlY3QgaW5wdXRJbWFnZVJlY3QyID0gZmlsdGVyLnJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbnB1dDIuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJl
Y3QoKSk7CisgICAgICAgIGlucHV0Mi5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxBcnJheSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QyLCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICAKKyAgICAgICAgcGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoKmlucHV0UGl4ZWxBcnJheSwgb3V0cHV0UGl4ZWxBcnJheSwgbV9rMSwgbV9r
MiwgbV9rMywgbV9rNCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYg
KCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmls
dGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAgSW1hZ2VCdWZmZXIqIG91
dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250
ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdl
QnVmZmVyID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIyID0gaW5wdXQyLmltYWdlQnVmZmVyKCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1h
Z2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBmaWx0ZXIuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKyAgICBhdXRvIGFic29s
dXRlSW1hZ2VSZWN0MiA9IGZpbHRlci5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlucHV0Mi5p
bWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlw
ZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGFic29sdXRlSW1hZ2VSZWN0Mik7CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWJzb2x1dGVJbWFnZVJl
Y3QpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7
CiAgICAgICAgIC8vIEFwcGxpZXMgb25seSB0byB0aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgotICAg
ICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwot
ICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoYWJzb2x1dGVQYWludFJlY3Qo
KSk7CisgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgICAg
IGF1dG8gaW1hZ2VSZWN0MiA9IGlucHV0Mi5pbWFnZVJlY3QoKTsKKyAgICAgICAgYXV0byBvdXRw
dXRJbWFnZVJlY3QgPSBvdXRwdXQuaW1hZ2VSZWN0KCk7CisKKyAgICAgICAgYXV0byBkZXN0aW5h
dGlvblJlY3QgPSBpbWFnZVJlY3Q7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3Qo
aW1hZ2VSZWN0Mik7CisgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3Qob3V0cHV0SW1h
Z2VSZWN0KTsKICAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRl
c3RpbmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAg
SW50UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0
aW9uUmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRq
dXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRq
dXN0ZWREZXN0aW5hdGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRl
T3BlcmF0b3I6OlNvdXJjZUluIH0pOworCisgICAgICAgIGF1dG8gYWRqdXN0ZWREZXN0aW5hdGlv
blJlY3QgPSBkZXN0aW5hdGlvblJlY3Q7CisgICAgICAgIGFkanVzdGVkRGVzdGluYXRpb25SZWN0
Lm1vdmVCeSgtb3V0cHV0SW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICBhZGp1c3RlZERl
c3RpbmF0aW9uUmVjdCA9IGZpbHRlci5zY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShhZGp1c3RlZERl
c3RpbmF0aW9uUmVjdCk7CisKKyAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25S
ZWN0OworICAgICAgICBzb3VyY2VSZWN0Lm1vdmVCeSgtaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOwor
ICAgICAgICBzb3VyY2VSZWN0ID0gZmlsdGVyLnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKHNvdXJj
ZVJlY3QpOworCisgICAgICAgIGF1dG8gc291cmNlUmVjdDIgPSBkZXN0aW5hdGlvblJlY3Q7Cisg
ICAgICAgIHNvdXJjZVJlY3QyLm1vdmVCeSgtaW1hZ2VSZWN0Mi5sb2NhdGlvbigpKTsKKyAgICAg
ICAgc291cmNlUmVjdDIgPSBmaWx0ZXIuc2NhbGVkUmVjdEJ5RmlsdGVyU2NhbGUoc291cmNlUmVj
dDIpOworCisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0Mik7CisgICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWRqdXN0ZWREZXN0aW5hdGlv
blJlY3QsIHNvdXJjZVJlY3QsIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZl
cjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsK
KyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBhYnNv
bHV0ZUltYWdlUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlcjIsIGFic29sdXRlSW1hZ2VSZWN0MiwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9n
aWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CisgICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGFic29sdXRlSW1hZ2VSZWN0
Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
YWJzb2x1dGVJbWFnZVJlY3QsIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBD
b21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRl
T3BlcmF0b3I6OlhPUik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlcjIsIGFic29sdXRlSW1hZ2VSZWN0Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWJzb2x1dGVJbWFnZVJlY3QsIHsgeyB9LCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgotICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXIt
PmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgYWJzb2x1dGVJ
bWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBhYnNvbHV0ZUltYWdlUmVjdCwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHJldHVybiB0cnVlOwog
fQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Q29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEw
N2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi42YjA3YmExZjliMDA3MTljMGQ3OWI1Zjdl
Y2RjZjNiM2RiMzIzNDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC0yMiw4ICsyMiw2IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQxLDcgKzM5LDcgQEAgZW51bSBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHsKIAogY2xhc3Mg
RkVDb21wb3NpdGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29t
cG9zaXRlPiBjcmVhdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0KTsKIAogICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgYm9vbCBzZXRPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSk7CkBAIC01OCwxOCArNTYsMTIgQEAgcHVibGljOgogICAgIGZsb2F0
IGs0KCkgY29uc3QgeyByZXR1cm4gbV9rNDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1w
cm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElD
OyB9Ci0KIHByaXZhdGU6Ci0gICAgRkVDb21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRl
T3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKLQotICAgIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9
CisgICAgRkVDb21wb3NpdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKIAotICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92
ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50
YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXJp
dGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpOwpAQCAtOTAsMyArODIsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBvc2l0ZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDNiYmU3ODM1OThkNzA5MzVhOTVjNmYxNTZl
YzI5MzNjMGU5OWYwNTAuLmI5NzdiNTU4YzRkZWFmZjYxMWU0MGI3OGE5MTE3YmRmNWNkNjUwZTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMzIsMTAgKzMyLDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3Is
IGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHBy
ZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbnZvbHZlTWF0cml4KQorRkVDb252b2x2ZU1hdHJp
eDo6RkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZp
c29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5
cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJl
c2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQorICAgIDogRmls
dGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCkKICAgICAsIG1f
a2VybmVsU2l6ZShrZXJuZWxTaXplKQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCiAgICAgLCBt
X2JpYXMoYmlhcykKQEAgLTQ5LDExICs0Nyw5IEBAIEZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9s
dmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCiAgICAg
QVNTRVJUKG1fa2VybmVsU2l6ZS5oZWlnaHQoKSA+IDApOwogfQogCi1SZWY8RkVDb252b2x2ZU1h
dHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRT
aXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IElu
dFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBG
bG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZv
bHZlTWF0cml4OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNv
ciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNl
cnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZvbHZlTWF0cml4KGZpbHRlciwga2VybmVsU2l6ZSwgZGl2
aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlz
b3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCiAgICAg
ICAgIHByZXNlcnZlQWxwaGEsIGtlcm5lbE1hdHJpeCkpOwogfQogCkBAIC0zNjcsMzYgKzM2Myw0
MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsCiAgICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxm
YWxzZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7CiB9CiAKLXZvaWQgRkVDb252b2x2
ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRUNvbnZvbHZlTWF0
cml4OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKKyAgICByZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lv
bihwcmltaXRpdmVTdWJyZWdpb24pOworfQogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkg
OiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIGF1dG8mIGlu
cHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9
ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIg
PSBvdXRwdXQucGl4ZWxCdWZmZXIobV9wcmVzZXJ2ZUFscGhhID8gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkIDogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byYgb3V0cHV0
UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7CisgICAgYXV0byBvdXRwdXRJbWFnZVJl
Y3QgPSBmaWx0ZXIucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlucHV0LmltYWdl
UmVjdCgpLCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gaW5wdXRQaXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAg
ICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBpbnB1dFBpeGVsQXJyYXkg
PSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIG91dHB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBlbHNl
Ci0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBp
eGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZp
bHRlclNjYWxlKCkpOworICAgICAgICBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBvdXRwdXRJbWFnZVJl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAKKyAgICBpZiAoIWlucHV0UGl4ZWxBcnJheSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEludFNpemUgcGFpbnRTaXplID0gSW50
U2l6ZShvdXRwdXQubG9naWNhbFNpemUoKSk7CisgICAgCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50
aW5nRGF0YSA9IHsKLSAgICAgICAgKnNvdXJjZVBpeGVsQXJyYXksCi0gICAgICAgIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwKKyAgICAgICAgKmlucHV0UGl4ZWxBcnJheSwKKyAgICAgICAgb3V0cHV0
UGl4ZWxBcnJheSwKICAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6
ZS5oZWlnaHQoKSwKICAgICAgICAgbV9iaWFzICogMjU1LAotICAgICAgICBub3JtYWxpemVkRmxv
YXRzKG1fa2VybmVsTWF0cml4KQorICAgICAgICBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxv
YXRzKG1fa2VybmVsTWF0cml4KQogICAgIH07CiAKICAgICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVy
ZWQgcGl4ZWxzCkBAIC00MDYsMTAgKzQwOCwxMCBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRv
bSA8IDApIHsKICAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBz
cGVlZAogICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6
ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChpbnQgaXRlcmF0aW9ucyA9IChhYnNvbHV0
ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpKSAvIHNf
bWluaW1hbFJlY3REaW1lbnNpb24pIHsKKyAgICBpZiAoaW50IGl0ZXJhdGlvbnMgPSAocGFpbnRT
aXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lv
bikgewogICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7CiAgICAg
ICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsK
IApAQCAtNDMyLDYgKzQzNCw4IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3Rh
cmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CiAgICAgaWYg
KGNsaXBSaWdodCA8IHBhaW50U2l6ZS53aWR0aCgpKQogICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lk
dGgoKSwgY2xpcEJvdHRvbSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlw
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFiODk1YTZl
MWU1MDA1NGUxM2RiYS4uYjlhODE4M2ExYjhmZmNlYzM1NTc4ZDNjZTA1YzYyOTY1MzQ5MjMyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGaWx0ZXIu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4
LDkgKzM3LDcgQEAgZW51bSBFZGdlTW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZvbHZlTWF0cml4
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbnZv
bHZlTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAgICAgICBm
bG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBv
aW50JiwKLSAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAgICBzdGF0
aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXpl
LCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0
LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wg
cHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAg
IEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsgfQogICAg
IHZvaWQgc2V0S2VybmVsU2l6ZShjb25zdCBJbnRTaXplJik7CkBAIC03NywxNCArNzQsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7CiAgICAgfTsKIAot
ICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9h
dCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9h
dFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgIEZFQ29udm9sdmVNYXRy
aXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIkZFQ29udm9sdmVNYXRyaXgiOyB9CisgICAgRmxvYXRSZWN0IGNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CiAKQEAgLTExNSwzICsxMDksNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbnZvbHZlTWF0cml4
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCBlZWIxNzI4ZGIzNWU4YWMzMDJiMjdl
NGMzZmYzNGNiODg1NWI5ZDA5Li5mNzZjZTJjZTk2NDNlZmRmNmNlMjU2ZTk1NDczNzhhNDA3ZDEz
NDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMjcsMTggKzI3LDE2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0
aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNl
KQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xv
ciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhY
LCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VM
aWdodGluZykKK0ZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQorICAgIDogRkVMaWdodGluZyhEaWZmdXNlTGln
aHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAw
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3Vy
Y2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQogewogfQogCi1SZWY8
RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0
IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitSZWY8RkVEaWZmdXNl
TGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5n
Q29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJj
ZT4mJiBsaWdodFNvdXJjZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VM
aWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0
YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcobGln
aHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVE
aWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1c2VMaWdodGluZygpID0gZGVmYXVsdDsKLQogYm9vbCBG
RURpZmZ1c2VMaWdodGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCkKIHsKICAgICBpZiAobV9kaWZmdXNlQ29uc3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1
c2VMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpZmZ1c2VMaWdodGluZy5oCmluZGV4IGRmNjExNGQwZmI4ZTJmM2UxMTI4Yjg0MjYxNWU0NzUx
M2EwZGRkYzMuLjhhMTBhZWM4N2M4ZjE4OWY5ZjA1N2NiOTQ0M2VhYWVkZDUzOGY2OTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNl
TGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlmZnVzZUxpZ2h0aW5nLmgKQEAgLTI5LDggKzI5LDcgQEAgY2xhc3MgTGlnaHRTb3VyY2U7
CiAKIGNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBjb25z
dCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYp
OwotICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRURp
ZmZ1c2VMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAg
ZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7
IH0KICAgICBib29sIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7CkBAIC0zOCw4ICszNyw5IEBA
IHB1YmxpYzoKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJp
dmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIEZFRGlmZnVz
ZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUs
IGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaWZm
dXNlTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0NzQ5MzM5MmJi
MjgxNDZkOGIxNjliYTBhN2MzMmIxNmM1NjNmYTEuLmFkODFjMWExODQzNTJkODRmNWY3ZjUwNWY0
MGQyYzIzY2VmYTVlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0zMSwxOCAr
MzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNlbWVudE1hcDo6RkVE
aXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBz
Y2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3BsYWNlbWVudE1hcCkK
K0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvciwg
ZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURp
c3BsYWNlbWVudE1hcCkKICAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNlbGVjdG9y
KQogICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCiAgICAgLCBtX3Nj
YWxlKHNjYWxlKQogewogfQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50
TWFwOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxT
ZWxlY3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0
IHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRl
KENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRURpc3BsYWNlbWVudE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVs
U2VsZWN0b3IsIHNjYWxlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1l
bnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKIH0KIAog
Ym9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVs
U2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCkBAIC02OSwyMCArNjgsMTQgQEAgYm9vbCBG
RURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJikKK2NvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgRkVE
aXNwbGFjZW1lbnRNYXA6OmltYWdlQ29sb3JTcGFjZSgpIGNvbnN0CiB7CiAgICAgLy8gU3BlYzog
VGhlICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnIHByb3BlcnR5IG9ubHkgYXBwbGllcyB0
byB0aGUgJ2luMicgc291cmNlIGltYWdlCiAgICAgLy8gYW5kIGRvZXMgbm90IGFwcGx5IHRvIHRo
ZSAnaW4nIHNvdXJjZSBpbWFnZS4gVGhlICdpbicgc291cmNlIGltYWdlIG11c3QgcmVtYWluIGlu
IGl0cwogICAgIC8vIGN1cnJlbnQgY29sb3Igc3BhY2UuCiAgICAgLy8gVGhlIHJlc3VsdCBpcyBp
biB0aGF0IHNtYWUgY29sb3Igc3BhY2UgYmVjYXVzZSBpdCBpcyBhIGRpc3BsYWNlbWVudCBvZiB0
aGUgJ2luJyBpbWFnZS4KLSAgICBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoaW5w
dXRFZmZlY3QoMCktPnJlc3VsdENvbG9yU3BhY2UoKSk7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1l
bnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3Qg
aW50IGluZGV4KQotewotICAgIC8vIERvIG5vdCB0cmFuc2Zvcm0gdGhlIGZpcnN0IHByaW1pdGl2
ZSBpbnB1dCwgYXMgcGVyIHRoZSBzcGVjLgotICAgIGlmIChpbmRleCkKLSAgICAgICAgaW4tPnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRv
JiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICByZXR1cm4gaW5w
dXQuY29sb3JTcGFjZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRP
ZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQpAQCAtOTEs
MzcgKzg0LDQxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5z
aWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0CiAgICAgcmV0dXJuIHggKiBieXRl
c1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRGlzcGxhY2VtZW50TWFwOjpjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIHJl
dHVybiBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9
CiAKK2Jvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKK3sKICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5O
RUxfVU5LTk9XTik7CiAgICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VO
S05PV04pOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0
ZXJJbWFnZSgpOworICAgIGF1dG8mIGlucHV0MiA9ICppbnB1dEVmZmVjdCgxKS0+ZmlsdGVySW1h
Z2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKIAotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAg
ICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBv
dXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVm
ZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgSW50UmVjdCBpbnB1dEltYWdlUmVjdCA9IGZpbHRlci5y
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW5wdXQuaW1hZ2VSZWN0KCksIG91dHB1
dC5pbWFnZVJlY3QoKSk7CisgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0gaW5wdXQuZ2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFn
ZVJlY3QpOwogCi0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBU
aGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJl
IHBlcmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0
byBkaXNwbGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3
aW5nUmVjdCk7CisgICAgSW50UmVjdCBpbnB1dEltYWdlUmVjdDIgPSBmaWx0ZXIucmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlucHV0Mi5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdl
UmVjdCgpKTsKKyAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMg
ZnJvbSAnaW4yJyBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZh
bHVlcy4KKyAgICBhdXRvIGlucHV0UGl4ZWxCdWZmZXIyID0gaW5wdXQyLmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3Qy
KTsKICAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVudEltYWdlKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFpbnB1dFBpeGVsQnVmZmVyIHx8ICFpbnB1dFBpeGVsQnVm
ZmVyMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxl
bmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGlucHV0
UGl4ZWxCdWZmZXItPmxlbmd0aCgpID09IGlucHV0UGl4ZWxCdWZmZXIyLT5sZW5ndGgoKSk7CiAK
LSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIEludFNpemUgcGFpbnRT
aXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZp
bHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICBhdXRvIHBhaW50U2l6ZSA9IGV4cGFuZGVkSW50U2l6
ZShvdXRwdXQubG9naWNhbFNpemUoKSk7CiAKLSAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKKyAgICBGbG9h
dFNpemUgc2NhbGUgPSBmaWx0ZXIuc2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUoeyBtX3NjYWxlLCBt
X3NjYWxlIH0pOwogICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1
NS4wOwogICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsK
ICAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKQEAg
LTEzNiwyMCArMTMzLDIyIEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCiAgICAgICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7CiAK
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0g
ICAgICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0
OworICAgICAgICAgICAgaW50IG91dHB1dEluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGlu
dD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbklu
ZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7Ci0gICAgICAgICAg
ICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogZGlzcGxh
Y2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZ
KSArIHNjYWxlZE9mZnNldFkpOworICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nh
c3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGlucHV0UGl4ZWxCdWZmZXIyLT5pdGVtKG91dHB1dElu
ZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7CisgICAgICAgICAg
ICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogaW5wdXRQ
aXhlbEJ1ZmZlcjItPml0ZW0ob3V0cHV0SW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBz
Y2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9uUGl4ZWxQ
dHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFycmF5LmRh
dGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOworICAgICAgICAgICAgdW5zaWduZWQqIG91dHB1dFBp
eGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG91dHB1dFBpeGVsQXJyYXkuZGF0
YSgpICsgb3V0cHV0SW5kZXgpOwogICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0g
cGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0
KCkpIHsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7CisgICAgICAg
ICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gMDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0SW1hZ2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRP
ZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7CisgICAgICAgICAgICAqb3V0cHV0UGl4ZWxQ
dHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0UGl4ZWxCdWZmZXItPmRhdGEo
KSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7CiAgICAgICAgIH0K
ICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2
NzUxNjIzYTNhMi4uZTA2MmJiZmI3NmIxYzllNTA1MmZkMTIzYWVmOTI1YjVhZGU3YzRkZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMjIsNyArMjIsNiBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyAr
MzYsNyBAQCBlbnVtIENoYW5uZWxTZWxlY3RvclR5cGUgewogCiBjbGFzcyBGRURpc3BsYWNlbWVu
dE1hcCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVE
aXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShGaWx0ZXImLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFu
bmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQg
c2NhbGUpOworICAgIHN0YXRpYyBSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVs
U2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5u
ZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOwogCiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yOyB9CiAgICAg
Ym9vbCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUpOwpAQCAt
NDgsMjAgKzQ3LDE3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2NhbGU7IH0KICAgICBib29sIHNldFNjYWxlKGZsb2F0KTsKIAotICAgIHZvaWQgc2V0UmVz
dWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50
KSBvdmVycmlkZTsKLQogcHJpdmF0ZToKLSAgICBGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImLCBD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUg
eUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOworICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxT
ZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5l
bFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQorICAgIGludCB4Q2hh
bm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAg
IGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0g
MTsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGltYWdlQ29sb3JTcGFjZSgpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsg
fQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW50
IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9
Ci0gICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0
b3IgLSAxOyB9CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikg
b3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApA
QCAtNzIsMyArNjgsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURpc3BsYWNlbWVudE1hcCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAppbmRleCAzNWZiYWI0MWU4MDkyMTZlNGIyMjQzNTExODYyM2UyOGZmZDYx
ZWZhLi45ODQ3MmU3YTA2MGRlZWRjMTM1MDEyYzYyNzQyODNkOTlmY2MxZWNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCkBAIC0zMSw4ICszMSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAK
LUZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBm
bG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwg
ZmxvYXQgc2hhZG93T3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRy
b3BTaGFkb3cpCitGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBz
dGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQg
c2hhZG93T3BhY2l0eSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
RHJvcFNoYWRvdykKICAgICAsIG1fc3RkWChzdGRYKQogICAgICwgbV9zdGRZKHN0ZFkpCiAgICAg
LCBtX2R4KGR4KQpAQCAtNDIsOTAgKzQyLDg1IEBAIEZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93
KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvCiB7
CiB9CiAKLVJlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKEZpbHRlciYgZmls
dGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKK1JlZjxGRURyb3BTaGFkb3c+
IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBm
bG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRHJvcFNoYWRvdyhmaWx0ZXIsIHN0ZFgsIHN0
ZFksIGR4LCBkeSwgc2hhZG93Q29sb3IsIHNoYWRvd09wYWNpdHkpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRURyb3BTaGFkb3coc3RkWCwgc3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwg
c2hhZG93T3BhY2l0eSkpOwogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKQorSW50T3V0c2V0cyBGRURyb3BTaGFkb3c6Om91dHNldHMoKSBjb25zdAog
ewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgSW50U2l6ZSBvdXRz
ZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1f
c3RkWSB9KTsKKyAgICByZXR1cm4geworICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNp
emUuaGVpZ2h0KCkgLSBtX2R5KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXpl
LndpZHRoKCkgKyBtX2R4KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhl
aWdodCgpICsgbV9keSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0
aCgpIC0gbV9keCkKKyAgICB9OworfQorCitGbG9hdFJlY3QgRkVEcm9wU2hhZG93OjpjYWxjdWxh
dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDAp
LT5maWx0ZXJJbWFnZSgpOwogCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5w
dXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRl
T2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAgICBhYnNvbHV0ZU9mZnNldFBh
aW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5
IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNvbHV0ZU9mZnNldFBhaW50UmVj
dCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBhdXRvIGlt
YWdlUmVjdFdpdGhPZmZzZXQoaW1hZ2VSZWN0KTsKKyAgICBpbWFnZVJlY3RXaXRoT2Zmc2V0Lm1v
dmUoeyBtX2R4LCBtX2R5IH0pOworICAgIGltYWdlUmVjdC51bml0ZShpbWFnZVJlY3RXaXRoT2Zm
c2V0KTsKIAotICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBhdXRvIGtlcm5l
bFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9z
dGRYLCBtX3N0ZFkgfSk7CiAKICAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFu
ZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0
aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0
aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNp
emUuaGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAg
IGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UK
LSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBp
bWFnZVJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOworICAgIGlt
YWdlUmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOwogCi0gICAg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkp
OworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVj
dCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCitib29sIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2Uo
KTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKyAgICAKKyAgICBhdXRvIGlu
cHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICBy
ZXR1cm47CisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAg
IGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgCi0gICAgRmxvYXRTaXplIGJsdXJSYWRpdXMg
PSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc3RkWCwgbV9zdGRZIH0p
OwotICAgIGJsdXJSYWRpdXMuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0
U2l6ZSBvZmZzZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9k
eSB9KTsKKyAgICBhdXRvIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZFNpemVCeUZpbHRl
clNjYWxlKHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgYXV0byBvZmZzZXQgPSBmaWx0ZXIuc2Nh
bGVkU2l6ZUJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pOwogCi0gICAgRmxvYXRSZWN0IGRy
YXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1Jl
Z2lvbik7Ci0gICAgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQubW92ZShvZmZzZXQpOworICAgIGF1
dG8gaW5wdXRJbWFnZVJlY3QgPSBmaWx0ZXIuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbnB1
dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVjdCgpKTsKIAotICAgIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghc291cmNlSW1h
Z2UpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCA9
IGlucHV0SW1hZ2VSZWN0OworICAgIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldC5tb3ZlKG9mZnNl
dCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5KTsK
LSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdS
ZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOworICAgIGF1
dG8mIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIG91dHB1dENv
bnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5KTsKKyAgICBvdXRwdXRDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0KTsKKyAgICBv
dXRwdXRDb250ZXh0LnNldEFscGhhKDEpOwogCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CiAKLSAgICBQaXhlbEJ1ZmZlckZv
cm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhl
bEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3Qgc2hhZG93
QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSk7Ci0g
ICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQs
IHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAg
ICBhdXRvIGZvcm1hdCA9IFBpeGVsQnVmZmVyRm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBvdXRwdXQuY29sb3JTcGFjZSgp
IH07CisgICAgYXV0byBzaGFkb3dBcmVhID0gSW50UmVjdCB7IEludFBvaW50KCksIG91dHB1dElt
YWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpIH07CisgICAgYXV0byBzaGFkb3dQaXhlbEJ1ZmZl
ciA9IG91dHB1dEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEpOworICAg
IGlmICghc2hhZG93UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
YXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4
dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZm
ZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCi0gICAg
cmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7Cisg
ICAgYXV0byYgc2hhZG93UGl4ZWxBcnJheSA9IHNoYWRvd1BpeGVsQnVmZmVyLT5kYXRhKCk7Cisg
ICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzaGFkb3dQaXhlbEFycmF5LmRhdGEoKSwg
c2hhZG93UGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXplKCku
d2lkdGgoKSk7CiAKLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRv
d0NvbG9yKTsKLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKyAgICBvdXRwdXRJbWFnZS0+cHV0UGl4ZWxC
dWZmZXIoKnNoYWRvd1BpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsKIAotICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7
Ci19CisgICAgb3V0cHV0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZUluKTsKKyAgICBvdXRwdXRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIG91dHB1dC5sb2dpY2FsU2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CisgICAg
b3V0cHV0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRl
c3RpbmF0aW9uT3Zlcik7CiAKLUludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29u
c3QKLXsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7Ci0gICAgICAgIHN0
ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpLAotICAgICAgICBzdGQ6
Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAotICAgICAgICBzdGQ6Om1h
eDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8
aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4KQotICAgIH07CisgICAgb3V0cHV0Q29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVEcm9wU2hhZG93OjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRp
b24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCBiNGUwYTIwMTJmZWRiN2I3N2JmM2UwNTczNGVl
ODhhMjllZmYzODRjLi5iMjU2ODg4YWQyNWQ3ZGY5Njg3MTU0OTJiOGZjZDIzZTc2MDU4ZTcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmgKQEAgLTIwLDE0ICsyMCwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRURyb3BTaGFkb3cgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRv
dz4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xv
ciYsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKGZsb2F0IHN0
ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0Nv
bG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBj
b25zdCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQg
c3RkWCkgeyBtX3N0ZFggPSBzdGRYOyB9CkBAIC00OCwxNSArNDcsMTMgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFjaXR5KSB7IG1fc2hhZG93T3Bh
Y2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KIAogcHJpdmF0ZToKLSAgICBGRURyb3BTaGFkb3coRmls
dGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwor
ICAgIEZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSk7CiAKLSAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRHJvcFNo
YWRvdyI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0
ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBv
dmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBA
IC03MCwzICs2Nyw0IEBAIHByaXZhdGU6CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURyb3BTaGFkb3cpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cAppbmRleCBiNDIzNTUzNGMzOGIxZWJhMjExZWU4NDg2MTc5OTIzODBmM2I2YjAxLi5hNzZhOWEy
M2M1NmFkZDJjMTc0YTAxODAzNzBkNmE4NWIzMjkzOTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTMwLDE2ICsz
MCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRmxvb2Q6OkZFRmxvb2QoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpGbG9vZCkKK0ZFRmxvb2Q6OkZFRmxvb2Qo
Y29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKKyAgICA6IEZpbHRl
ckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRmxvb2QpCiAgICAgLCBtX2Zsb29kQ29sb3Io
Zmxvb2RDb2xvcikKICAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKIHsKIH0KIAot
UmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK1JlZjxGRUZsb29kPiBGRUZsb29kOjpj
cmVhdGUoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGZpbHRlciwgZmxvb2RDb2xvciwgZmxvb2RP
cGFjaXR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVGbG9vZChmbG9vZENvbG9yLCBm
bG9vZE9wYWNpdHkpKTsKIH0KIAogYm9vbCBGRUZsb29kOjpzZXRGbG9vZENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKQEAgLTU4LDE0ICs1OCwyMSBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3Bh
Y2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRUZsb29kOjpjYWxjdWxh
dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAg
cmV0dXJuOworICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2
ZVN1YnJlZ2lvbik7Cit9CiAKLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KGZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKSwgY29sb3IpOworYm9vbCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikKK3sKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKyAg
ICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRw
dXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb2xvciA9IG1fZmxv
b2RDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShtX2Zsb29kT3BhY2l0eSk7CisgICAg
b3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdCh7IHsgfSwgb3V0cHV0SW1hZ2UtPmxvZ2lj
YWxTaXplKCkgfSwgY29sb3IpOworICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBG
RUZsb29kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCmluZGV4IGI3MDRkYzk2OWM2ZDc1ODhi
Y2ViMGFkOGIyNDY4MmZhMDYxNzM0OGUuLjlmYjE4OWU3YWRmMDczOTAzMWFjMmMwNmUwMzQ4YzVm
MDE4ZDNlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5oCkBAIC0yMiwxNCArMjIsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUZsb29kIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVhdGUoRmls
dGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGljIFJlZjxGRUZsb29kPiBjcmVh
dGUoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSk7CiAKICAgICBj
b25zdCBDb2xvciYgZmxvb2RDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fZmxvb2RDb2xvcjsgfQog
ICAgIGJvb2wgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtNDAsMTggKzM5LDE1IEBA
IHB1YmxpYzoKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2QgZG9lcyBub3QgcGVyZm9ybSBj
b2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUgcmVzdWx0IGlzIGFsd2F5cyBp
biB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVl
IG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2b2lkIHNldE9wZXJhdGluZ0Nv
bG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyBGaWx0ZXJF
ZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JT
cGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KICNlbmRpZgog
CiBwcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7Cisg
ICAgRkVGbG9vZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KTsK
IAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVG
bG9vZCI7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50
YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNjEsMyArNTcsNCBAQCBwcml2YXRlOgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVS
X0VGRkVDVChGRUZsb29kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCAwZjZlZTg3Zjk1ZTc1
NzUxODYzZmQyZTVmNTQ5ZTc0ZDk3MjlkYjFmLi40ODU3NTE3MmQ0MTllOTk4OWFlODQ3Njk1MWM2
ZjMzNzJjZWUxNjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtNzksMTcgKzc5LDE3IEBA
IGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYg
cmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwKICAgICB9CiB9CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdh
dXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6R2F1c3NpYW5CbHVy
KQorRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFR2F1c3NpYW5CbHVyKQogICAgICwgbV9zdGRYKHgpCiAgICAgLCBtX3N0ZFkoeSkKICAgICAs
IG1fZWRnZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVz
c2lhbkJsdXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQorUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3Jl
YXRlKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cihmaWx0ZXIsIHgsIHksIGVkZ2VNb2RlKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoeCwgeSwgZWRnZU1vZGUp
KTsKIH0KIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQpA
QCAtNDY1LDExICs0NjUsMTIgQEAgc3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0
IHZhbHVlKQogewogICAgIC8vIExpbWl0IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2Vy
IHJhZGl1cyB3b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1hZ2Ug
YnV0CiAgICAgLy8gaW5mbGF0ZXMgdGhlIGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2guIFRo
aXMgaXMgY29tcGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJlaGF2aW9yLgorICAgIHN0YXRpYyBjb25z
dCBpbnQgZ01heEtlcm5lbFNpemUgPSA1MDA7CiAgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWF4
PHVuc2lnbmVkPigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3JmKHZhbHVlICogZ2F1c3Np
YW5LZXJuZWxGYWN0b3IoKSArIDAuNWYpKSk7CiAgICAgcmV0dXJuIGNsYW1wVG88aW50PihzdGQ6
Om1pbihzaXplLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ01heEtlcm5lbFNpemUpKSk7CiB9CiAg
ICAgCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUo
RmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0
ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAg
ICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0
KCkgPj0gMCk7CiAgICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAtNDgzLDEyICs0ODQsMTIgQEAg
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0
U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIGtlcm5lbFNpemU7CiB9CiAKLUludFNpemUg
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFNpemUmIHN0ZERl
dmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSk7CisgICAgcmV0dXJuIGNh
bGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUo
c3RkRGV2aWF0aW9uKSk7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91
dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZU91dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAg
ICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlh
dGlvbik7CiAKQEAgLTQ5Niw2MiArNDk3LDYxIEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4geyAz
ICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07
CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkK
K0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsK
LSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7
IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5m
aWx0ZXJJbWFnZSgpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CiAK
LSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1
dGVQYWludFJlY3QoKTsKICAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5v
dCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9
IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpCisgICAgICAgIHJldHVybiBpbWFnZVJl
Y3Q7CiAKKyAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwg
eyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICAKICAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5l
bCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1
ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVs
U2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAq
IGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVgoMyAq
IGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOworICAgIGltYWdlUmVjdC5pbmZsYXRlWSgzICog
a2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOwogCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkK
LSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkp
OworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVj
dCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKK30KIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKK0ludE91dHNldHMgRkVHYXVzc2lh
bkJsdXI6Om91dHNldHMoKSBjb25zdAoreworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IGNhbGN1
bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICByZXR1cm4geyBvdXRzZXRT
aXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCksIG91dHNldFNpemUuaGVpZ2h0KCksIG91
dHNldFNpemUud2lkdGgoKSB9OwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQorYm9vbCBGRUdhdXNzaWFuQmx1cjo6aXNBbHBoYUltYWdlKCkgY29uc3QK
IHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgcmV0dXJuIGlu
cHV0RWZmZWN0KDApLT5pc0FscGhhSW1hZ2UoKTsKK30KIAotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKK2Jvb2wgRkVHYXVzc2lh
bkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAg
ICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRv
JiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIg
PSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Cisg
ICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGZpbHRlci5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW5wdXQuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CiAKLSAgICBJ
bnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRS
ZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxBcnJh
eSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEludFNpemUga2VybmVs
U2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0ZFkgfSk7
Ci0gICAga2VybmVsU2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKKyAgICBhdXRv
IGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKKyAgICBhdXRvIHBhaW50U2l6ZSA9IEludFNpemUob3V0cHV0LmxvZ2ljYWxTaXplKCkp
OwogCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsK
LSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAgICAgYXV0byB0
bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChw
YWludFNpemUuYXJlYSgpICogNCk7CiAgICAgaWYgKCF0bXBJbWFnZURhdGEpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1h
Z2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6
ZSk7Ci19CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1
cjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRl
T3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7IG91dHNldFNpemUu
aGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0
U2l6ZS53aWR0aCgpIH07CisgICAgcGxhdGZvcm1BcHBseShvdXRwdXRQaXhlbEFycmF5LCAqdG1w
SW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50
U2l6ZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZFR2F1c3NpYW5CbHVy
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5
cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggNWZiOTdmZmIw
NzBjMmRhZWI2ZWIyODNiZWFhYTE3NjQ3Y2JiMmQzZS4uNGQ5NTNhOGE2ZjgwZDVmMGM5Njg5ZWU1
ZjViNDk4YzljMDU0YjEyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtMjIsMTQgKzIyLDEzIEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKLSNpbmNsdWRl
ICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGRUdhdXNzaWFuQmx1ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0ZShGaWx0ZXImLCBmbG9h
dCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4g
Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSk7CiAKICAgICBmbG9hdCBzdGRE
ZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9CiAgICAgdm9pZCBzZXRTdGREZXZp
YXRpb25YKGZsb2F0KTsKQEAgLTQwLDE0ICszOSwxMiBAQCBwdWJsaWM6CiAgICAgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsgfQogICAgIHZvaWQgc2V0
RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtl
cm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRTaXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3Rh
dGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZp
YXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXpl
IHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShj
b25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGlj
IEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3Rk
RGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRzZXRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAgICBGRUdhdXNzaWFuQmx1
cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7Ci0KLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFR2F1c3NpYW5CbHVyIjsgfQor
ICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSk7CiAKICAg
ICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8v
IEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAKQEAgLTY0LDEyICs2MSwx
NCBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWTsKICAgICB9OwogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0
IG92ZXJyaWRlOwogCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwor
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMg
dm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7CkBAIC04
MywzICs4Miw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFR2F1c3NpYW5CbHVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAKaW5kZXggNjU5YjEwNTVmNjFlYWFiYzVmMjk5OTFkYTBkYTFhNTg1MDcxYWU5Mi4uY2RiYzli
OGZhOWIwMTllMTBkMmZjYjA0NjYwZTY1Yzk4OGZkMmRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0z
NSw4ICszNSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVMaWdodGluZzo6RkVMaWdo
dGluZyhGaWx0ZXImIGZpbHRlciwgTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29s
b3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNv
dXJjZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRl
ciwgdHlwZSkKK0ZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlw
ZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQg
ZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4
cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQorICAgIDogRmlsdGVy
RWZmZWN0KHR5cGUpCiAgICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCiAgICAgLCBt
X2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQogICAgICwgbV9saWdodGluZ0NvbG9y
KGxpZ2h0aW5nQ29sb3IpCkBAIC0zODgsMjYgKzM4OCwxNCBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0
aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRT
b3VyYwogI2VuZGlmCiB9CiAKLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK2Jvb2wgRkVMaWdodGlu
Zzo6ZHJhd0xpZ2h0aW5nKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBMaWdodGluZ0RhdGEm
IGRhdGEpCiB7CiAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0g
ICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdp
ZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBk
b2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0g
ICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGRhdGEucGl4ZWxzID0gJnBpeGVsczsKLSAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1f
c3VyZmFjZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgPSB3aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0g
d2lkdGggLSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwog
CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVu
dHNJbkNvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBwYWludGluZ0RhdGEu
aW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsK
IAotICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0
YSk7CisgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YShmaWx0ZXIsICp0aGlzLCBw
YWludGluZ0RhdGEpOwogCiAgICAgLy8gVG9wIGxlZnQuCiAgICAgaW50IG9mZnNldCA9IDA7CkBA
IC00MjIsMTAgKzQxMCwxMCBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENs
YW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgc2V0UGl4ZWwo
b2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUs
IGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0
KSk7CiAKICAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CisgICAgb2Zmc2V0ID0gKGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUgLSBjUGl4ZWxTaXplOwogICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUs
IGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNl
dCkpOwogCi0gICAgaWYgKHdpZHRoID49IDMpIHsKKyAgICBpZiAoZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lID49IDIpIHsKICAgICAgICAgLy8gVG9wIHJvdy4KICAgICAgICAgb2Zmc2V0ID0gY1Bp
eGVsU2l6ZTsKICAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCkBAIC00MzcsNyArNDI1LDcgQEAgYm9v
bCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludGluZ0RhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2Mywg
Y0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKICAgICB9CiAKLSAg
ICBpZiAoaGVpZ2h0ID49IDMpIHsKKyAgICBpZiAoZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA+
PSAyKSB7CiAgICAgICAgIC8vIExlZnQgY29sdW1uLgogICAgICAgICBvZmZzZXQgPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwogICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRh
dGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUpCkBAIC00NDksMTIgKzQzNywxMiBAQCBib29sIEZFTGlnaHRpbmc6OmRy
YXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0
YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKICAgICB9CiAKLSAgICBpZiAod2lkdGggPj0g
MyAmJiBoZWlnaHQgPj0gMykgeworICAgIGlmIChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPj0g
MiAmJiBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID49IDIpIHsKICAgICAgICAgLy8gSW50ZXJp
b3IgcGl4ZWxzLgogICAgICAgICBwbGF0Zm9ybUFwcGx5KGRhdGEsIHBhaW50aW5nRGF0YSk7CiAg
ICAgfQogCi0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgKiBoZWlnaHQ7CisgICAgaW50IGxhc3RQaXhlbCA9IChkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lICsgMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwogICAgIGlmIChtX2xp
Z2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGNB
bHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkKICAgICAg
ICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFscGhhKTsKQEAgLTQ3MSwyNyArNDU5
LDQ3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFTGlnaHRp
bmc6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbHRlci5tYXhQ
cmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKworYm9vbCBGRUxpZ2h0
aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0ID0gKmlu
cHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJ
bWFnZSgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYg
KCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYg
b3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7
CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGZpbHRlci5yZXF1ZXN0ZWRSZWdpb25PZklucHV0
UGl4ZWxCdWZmZXIoaW5wdXQuaW1hZ2VSZWN0KCksIG91dHB1dC5pbWFnZVJlY3QoKSk7CiAKLSAg
ICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOworICAgIGlucHV0LmNvcHlQaXhlbEJ1ZmZlcihvdXRw
dXRQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbnB1
dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5h
dGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEs
MSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCiAgICAgLy8gc3RhbmRhcmQgaGFzIG5v
IHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhh
cyBzdHJhbmdlCiAgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBh
bmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KICAgICAvLyBBbnl3YXksIGZlQ29u
dm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgogCi0gICAgSW50
U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAg
IGRyYXdMaWdodGluZyhkZXN0aW5hdGlvblBpeGVsQXJyYXksIGFic29sdXRlUGFpbnRTaXplLndp
ZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICBJbnRTaXplIHNpemUgPSBJ
bnRTaXplKG91dHB1dC5sb2dpY2FsU2l6ZSgpKTsKKworICAgIC8vIEZJWE1FOiBkbyBzb21ldGhp
bmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgorICAgIC8vIFRoZSBX
MyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0
dXJucy4KKyAgICBpZiAoc2l6ZS53aWR0aCgpIDw9IDIgfHwgc2l6ZS5oZWlnaHQoKSA8PSAyKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIExpZ2h0aW5nRGF0YSBkYXRhOworICAgIGRhdGEu
cGl4ZWxzID0gJm91dHB1dFBpeGVsQXJyYXk7CisgICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBtX3N1
cmZhY2VTY2FsZSAvIDI1NS4wZjsKKyAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ID0gc2l6ZS53aWR0aCgpICogY1BpeGVsU2l6ZTsKKyAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmUgPSBzaXplLndpZHRoKCkgLSAxOworICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBz
aXplLmhlaWdodCgpIC0gMTsKKworICAgIGRyYXdMaWdodGluZyhmaWx0ZXIsIGRhdGEpOworICAg
IHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4
IGIwYmI3MGExNGQxNzQ5NTA2NzM3ZTg4ZTA1MTRlZTc5NjgyMGE0NDkuLjBiNGQ4MDA0ZGI2OTY0
Zjk0OTA4Y2M2ZDI2MDU2NGJiMmI0YjAyMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0yNyw3ICsyNyw2IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+CkBAIC00MCw4ICszOSw2IEBAIHN0cnVj
dCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKIAogY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KLQogICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CiAgICAgYm9vbCBzZXRTdXJmYWNlU2NhbGUoZmxv
YXQpOwogCkBAIC0xMjgsMTYgKzEyNSwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQg
cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
Kik7CiAgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1Bh
aW50aW5nRGF0YUZvck5lb24qKTsKIAotICAgIEZFTGlnaHRpbmcoRmlsdGVyJiwgTGlnaHRpbmdU
eXBlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIFJlZjxMaWdodFNvdXJjZT4mJiwgVHlwZSk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJO
YW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFTGlnaHRpbmciOyB9CisgICAgRkVMaWdodGlu
ZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwogCi0gICAgYm9vbCBkcmF3
TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmLCBpbnQsIGludCk7CisgICAgYm9vbCBkcmF3TGln
aHRpbmcoY29uc3QgRmlsdGVyJiwgY29uc3QgTGlnaHRpbmdEYXRhJik7CiAKICAgICB2b2lkIHNl
dFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rv
clksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKICAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50
IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6
ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhhKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBj
b25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDBhMjAwMDFi
MTczYmQ4ZmRmNmJiYTYzNmNkMjNjZTQ3MDI2ZTdiM2YuLjllMTNlZTRmZWFhOTQ2ZjMxNTI4NjNk
MGEyOTQ1MzVhOTI1ODJkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtMjgsMzkgKzI4LDQzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRkVNZXJnZTo6RkVNZXJnZShGaWx0ZXImIGZpbHRlcikKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1lcmdlKQorRkVNZXJnZTo6RkVNZXJnZSgpCisg
ICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1lcmdlKQogewogfQogCi1S
ZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZFTWVyZ2U+
IEZFTWVyZ2U6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShm
aWx0ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKCkpOwogfQogCi12b2lk
IEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFTWVyZ2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICB1bnNpZ25lZCBzaXpl
ID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBBU1NFUlQoc2l6ZSA+IDApOworICAgIEFT
U0VSVCghaW5wdXRFZmZlY3RzKCkuaXNFbXB0eSgpKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmls
dGVySW1hZ2UoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91
dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBHcmFwaGljc0NvbnRleHQm
IG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdChpKTsKLSAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9
IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpKQotICAgICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKSk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBpbnB1dEVmZmVjdHMo
KSkgeworICAgICAgICBhdXRvJiBpbnB1dCA9ICplZmZlY3QtPmZpbHRlckltYWdlKCk7CisgICAg
ICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW5wdXQuaW1hZ2VCdWZmZXIoKSkgeworICAgICAg
ICAgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGZpbHRlci5kcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGlucHV0LmltYWdlUmVjdCgpLCBvdXRwdXQuaW1hZ2VSZWN0KCkpOworICAgICAgICAgICAg
b3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdlUmVj
dCk7CisgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVh
bSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8
PCAiW2ZlTWVyZ2UiOwogICAgIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0
cywgcmVwcmVzZW50YXRpb24pOwotICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElu
cHV0cygpOworICAgIHVuc2lnbmVkIHNpemUgPSBpbnB1dEVmZmVjdHMoKS5zaXplKCk7CiAgICAg
QVNTRVJUKHNpemUgPiAwKTsKICAgICB0cyA8PCAiIG1lcmdlTm9kZXM9XCIiIDw8IHNpemUgPDwg
IlwiXVxuIjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuaAppbmRleCA1Y2ZjNWNiNzk4MTljZWNlZDUwNzNlNTdiMDE5NGViY2YxOGYy
NjA3Li44ODdiYTBmZDMzZjg5MzJjYmY0MzM4MjY4ZTdhYWE0OGFmYTJmMDQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAt
MjIsMjMgKzIyLDIxIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZF
TWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZF
TWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSgp
OwogCiBwcml2YXRlOgotICAgIEZFTWVyZ2UoRmlsdGVyJik7CisgICAgRkVNZXJnZSgpOwogCi0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdl
IjsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBi
b29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVNZXJn
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCA2YWUzZDk4OTg2NjI2ZTA3YzA5NGM1ODZmMzE5OGM5
YzU4ZGFlZDZiLi42N2JiYjVmNWRiMGE0NWEwYzM3MWZjZTM0MmUzZTkzYTg3OWJiZWU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuY3BwCkBAIC0zNSwxNyArMzUsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShGaWx0ZXImIGZpbHRlciwgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhvbG9neSkKK0ZFTW9ycGhvbG9neTo6RkVN
b3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxv
YXQgcmFkaXVzWSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTW9y
cGhvbG9neSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9yYWRpdXNYKHJhZGl1c1gpCiAg
ICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKIHsKIH0KIAotUmVmPEZFTW9ycGhvbG9neT4gRkVNb3Jw
aG9sb2d5OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlw
ZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKK1JlZjxGRU1vcnBob2xvZ3k+IEZFTW9y
cGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1vcnBob2xv
Z3koZmlsdGVyLCB0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVNb3JwaG9sb2d5KHR5cGUsIHJhZGl1c1gsIHJhZGl1c1kpKTsKIH0KIAogYm9vbCBG
RU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCkBAIC03MiwxOCArNzIsNiBAQCBib29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShm
bG9hdCByYWRpdXNZKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIEZsb2F0UmVjdCBwYWludFJlY3Qg
PSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGaWx0ZXImIGZpbHRl
ciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5pbmZsYXRlKGZpbHRlci5zY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaWYgKGNs
aXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0
KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7
Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsK
LX0KLQogc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50
IHdpZHRoKQogewogICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0OwpAQCAtMjMzLDUyICsy
MjEsNjQgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEpCiBib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2Vu
ZXJhdGUoVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3QmIGlt
YWdlUmVjdCwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQogewogICAgIGlmIChyYWRpdXNYIDwg
MCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKKyAgICAgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdl
KCk7CisgICAgICAgIGlucHV0LmNvcHlQaXhlbEJ1ZmZlcihkc3RQaXhlbEFycmF5LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRS
ZWN0IEZFTW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRF
ZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IGlucHV0
LmltYWdlUmVjdCgpOworICAgIGltYWdlUmVjdC5pbmZsYXRlKHsgbV9yYWRpdXNYLCBtX3JhZGl1
c1kgfSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1h
Z2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworfQogCi0gICAgYXV0byYgZGVz
dGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworYm9v
bCBGRU1vcnBob2xvZ3k6OmlzQWxwaGFJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlucHV0
RWZmZWN0KDApLT5pc0FscGhhSW1hZ2UoKTsKK30KKworYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBhdXRvJiBpbnB1
dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAq
ZmlsdGVySW1hZ2UoKTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkp
OworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7CisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVy
LT5kYXRhKCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gZmlsdGVyLnJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbnB1dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVj
dCgpKTsKIAogICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1f
cmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53aWR0aCgpLCBy
YWRpdXMuaGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKG91dHB1dFBpeGVsQXJyYXksIGlucHV0SW1hZ2VSZWN0LCByYWRpdXMud2lkdGgo
KSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBGaWx0ZXIm
IGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGlu
LT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgaWYgKCFpbnB1dFBpeGVsQXJyYXkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJl
c29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBz
dGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwot
ICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAx
LCByYWRpdXMuaGVpZ2h0KCkpOworICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5z
Y2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICBp
bnQgcmFkaXVzWCA9IHN0ZDo6bWluKGlucHV0SW1hZ2VSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMu
d2lkdGgoKSk7CisgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihpbnB1dEltYWdlUmVjdC5oZWln
aHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2Vu
ZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwg
cmFkaXVzWSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRp
bmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJh
eS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBp
eGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1Jl
Y3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEuaGVp
Z2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYICogZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVz
WSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJh
dGUob3V0cHV0UGl4ZWxBcnJheSwgaW5wdXRJbWFnZVJlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Cisg
ICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBpbnB1dFBpeGVsQXJyYXkuZ2V0KCk7Cisg
ICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmb3V0cHV0UGl4ZWxBcnJheTsKKyAgICBw
YWludGluZ0RhdGEud2lkdGggPSBjZWlsZihpbnB1dEltYWdlUmVjdC53aWR0aCgpKTsKKyAgICBw
YWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoaW5wdXRJbWFnZVJlY3QuaGVpZ2h0KCkpOworICAg
IHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCk7CisgICAgcGFpbnRpbmdEYXRh
LnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZKTsKICAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0
YSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWExMS4u
MDQ3YTBjYWEyNTEyNTRjZDRjNTU3N2U1ODgyZmE5OGFkNjczNTZlYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
CkBAIC0yMiw3ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM0
LDcgKzMzLDcgQEAgZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKIAogY2xhc3MgRkVNb3Jw
aG9sb2d5IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RU1vcnBob2xvZ3k+IGNyZWF0ZShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9h
dCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9neT4g
Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1
c1kpOwogCiAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9sb2d5T3BlcmF0b3IoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldE1vcnBob2xvZ3lPcGVyYXRvcihN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKQEAgLTQ2LDEzICs0NSwxMyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBzZXRSYWRpdXNZKGZsb2F0KTsKIAogcHJpdmF0ZToKLSAgICBGRU1vcnBob2xvZ3koRmls
dGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSk7CisgICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBob2xvZ3kiOyB9CisgICAgYm9vbCBpc0FscGhhSW1hZ2Uo
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtODYsMyArODUsNCBAQCBwcml2
YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RklMVEVSX0VGRkVDVChGRU1vcnBob2xvZ3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDAyNzBkYjkyNDgxYTMz
OTJkM2Q1YTFlOTE3YzJkNjVhYTQxNDBmNjkuLjU1NmNlOWU0ZmNjM2U3NmJmMjZhN2ZiM2MyOGEx
YjVjNjU5MWZiNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0zMCwxNiArMzAsMTYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1GRU9mZnNldDo6RkVPZmZzZXQoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4
LCBmbG9hdCBkeSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok9mZnNldCkKK0ZF
T2Zmc2V0OjpGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpCisgICAgOiBGaWx0ZXJFZmZlY3Qo
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRU9mZnNldCkKICAgICAsIG1fZHgoZHgpCiAgICAgLCBtX2R5
KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmlsdGVyJiBmaWx0
ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShm
bG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQo
ZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChkeCwg
ZHkpKTsKIH0KIAogdm9pZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQgZHgpCkBAIC01MiwzMyArNTIs
MzggQEAgdm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkpCiAgICAgbV9keSA9IGR5OwogfQog
Ci12b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3Qg
RkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHBh
aW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZpbHRl
ciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGlmIChjbGlwc1Rv
Qm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsK
LSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAg
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CisgICAg
YXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byBp
bWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBpbWFnZVJlY3QubW92ZSh7IG1fZHgs
IG1fZHkgfSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24o
aW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworCit9CisKK2Jvb2wgRkVPZmZzZXQ6Omlz
QWxwaGFJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5pc0FscGhh
SW1hZ2UoKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jv
b2wgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
IHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgYXV0byYgaW5w
dXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0g
KmZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQotICAg
ICAgICByZXR1cm47CisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNldElz
QWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBv
dXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRlciYgZmlsdGVy
ID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29u
dGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOworICAgIGF1
dG8gaW5wdXRJbWFnZVJlY3QgPSBmaWx0ZXIuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbnB1
dC5pbWFnZVJlY3QoKSwgb3V0cHV0LmltYWdlUmVjdCgpKTsKKyAgICBpbnB1dEltYWdlUmVjdC5t
b3ZlKGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOworICAg
IAorICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdl
LCBpbnB1dEltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZF
T2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJm
ZTc2YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uYTEwYTE4OWIzMGUzYzJmZGE1MzMxMzRhMzcxNzdl
ZTEzNDU1ZGQ1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuaApAQCAtMjIsMTMgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4
LCBmbG9hdCBkeSk7CisgICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBm
bG9hdCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KICAgICB2
b2lkIHNldER4KGZsb2F0KTsKQEAgLTM3LDE0ICszNiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXREeShmbG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgs
IGZsb2F0IGR5KTsKKyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7IH0K
KyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKKyAgICAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIGZsb2F0IG1fZHg7CkBAIC01MywzICs1Miw0IEBAIHByaXZhdGU6CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJf
RUZGRUNUKEZFT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDU5OTcy
MzA2ODg2YTYzZmE0MTJiNWI3MTQxZjc0ZjljNDg3YTE0NGMuLjM4NzA3YjMwMWZkMTEwYmVjYmIw
NGUyNWNmYzk4MmEyMDVmZTY0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAg
LTI3LDE4ICsyNywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdo
dGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZF
TGlnaHRpbmcoZmlsdGVyLCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNl
U2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRM
ZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNw
ZWN1bGFyTGlnaHRpbmcpCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVj
dWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNv
dXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwg
c3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZykKIHsKIH0KIAotUmVmPEZFU3Bl
Y3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0
U291cmNlKQorUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVh
dGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQg
c3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGln
aHRTb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5n
KGZpbHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBz
cGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdU
Rk1vdmUobGlnaHRTb3VyY2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxh
ckxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwg
c3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBX
VEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1
bGFyTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KIGJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRT
cGVjdWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCiB7CiAgICAgaWYgKG1fc3Bl
Y3VsYXJDb25zdGFudCA9PSBzcGVjdWxhckNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5n
LmgKaW5kZXggZTk5OGE3NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4YmYzYjI0OTU4YS4uYWM0NTBk
YmRiNjBjZDY5N2NkOGRmYzNjNzkzMThkYmY2NGFkNTMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5oCkBAIC0yNyw4ICsyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVT
cGVjdWxhckxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0g
ICAgdmlydHVhbCB+RkVTcGVjdWxhckxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1
bGFyTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJik7CiAKICAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9CiAgICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50
KGZsb2F0KTsKQEAgLTM5LDggKzM4LDkgQEAgcHVibGljOgogICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhG
aWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
UmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVT
cGVjdWxhckxpZ2h0aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDM1YzUxY2JiMjI5ZGVlOTY0MmRjMWU3ZGNhMGM1
ZGIyZmNhYzIwYWQuLmQzMGEzMWI0Y2NmY2FiY2FlZTdhNWNlMmY2YjgyMWRjY2YyMGEzNzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5jcHAKQEAgLTI2LDY0ICsyNiw3NyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5j
bHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZp
bHRlcikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitGRVRpbGU6OkZF
VGlsZSgpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCiB7
CiB9CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZF
VGlsZT4gRkVUaWxlOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGls
ZShmaWx0ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLXZv
aWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRVRpbGU6OmlzQWxwaGFJ
bWFnZSgpIGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sg
dG8gd29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZp
b3Igb3RoZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQot
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8gU291cmNlIGlu
cHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJl
Z2lvbiBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdl
IGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9u
LgotICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxv
YXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKLSAgICBG
bG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7
Ci0gICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJj
ZUlucHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAg
ICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5z
Y2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNv
bHV0aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKLSAg
ICBpZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBpbnB1dEVmZmVj
dCgwKS0+aXNBbHBoYUltYWdlKCk7Cit9CisKK0Zsb2F0UmVjdCBGRVRpbGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdp
b24ocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKworYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1
dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1h
Z2UoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAg
aWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHcmFwaGljc0Nv
bnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxl
SW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVm
ZmVjdExvY2F0aW9uLnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmluQnVmZmVyLCBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICBhdXRv
IG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB0aWxlSW1hZ2VDb3B5ID0gSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2UpKTsKLSAgICBp
ZiAoIXRpbGVJbWFnZUNvcHkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlucHV0SW1hZ2VS
ZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgaW5wdXRJbWFnZVJlY3QgPSBmaWx0ZXIuc2Nh
bGVkUmVjdEJ5RmlsdGVyU2NhbGUoaW5wdXRJbWFnZVJlY3QpOworCisgICAgYXV0byB0aWxlUmVj
dCA9IGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXQucHJpbWl0aXZlU3VicmVnaW9u
KCkpOworICAgIHRpbGVSZWN0ID0gZmlsdGVyLnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKHRpbGVS
ZWN0KTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0gb3V0cHV0LmltYWdlUmVjdCgpOwor
ICAgIG91dHB1dEltYWdlUmVjdCA9IGZpbHRlci5zY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShvdXRw
dXRJbWFnZVJlY3QpOworCisgICAgYXV0byBtYXhPdXRwdXRSZWN0ID0gZmlsdGVyLm1heFByaW1p
dGl2ZVN1YnJlZ2lvbihvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIG1heE91dHB1
dFJlY3QgPSBmaWx0ZXIuc2NhbGVkUmVjdEJ5RmlsdGVyU2NhbGUobWF4T3V0cHV0UmVjdCk7CisK
KyAgICBhdXRvIHRpbGVJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGlsZVJlY3Qu
c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIXRpbGVJbWFnZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0JiB0aWxl
SW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgdGlsZUltYWdl
Q29udGV4dC50cmFuc2xhdGUoLXRpbGVSZWN0LmxvY2F0aW9uKCkpOworICAgIHRpbGVJbWFnZUNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdC5sb2NhdGlv
bigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZl
SW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBpZiAoIXRpbGVJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zv
cm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2NhdGlvbiAt
IG1heEVmZmVjdExvY2F0aW9uKTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZSh0aWxl
UmVjdC5sb2NhdGlvbigpIC0gbWF4T3V0cHV0UmVjdC5sb2NhdGlvbigpKTsKKworICAgIGF1dG8g
cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UucmVsZWFzZU5vbk51bGwoKSwgeyB0
cnVlLCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOwogCi0gICAgYXV0byBwYXR0ZXJuID0gUGF0
dGVybjo6Y3JlYXRlKHRpbGVJbWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0cnVlLCB0cnVl
LCBwYXR0ZXJuVHJhbnNmb3JtIH0pOworICAgIEdyYXBoaWNzQ29udGV4dCYgb3V0cHV0Q29udGV4
dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRGaWxsUGF0
dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29u
dGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5zZXRGaWxs
UGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAg
b3V0cHV0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRJbWFn
ZVJlY3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZFVGls
ZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5kZXggNDliZDk5ZjA5NDQ3ZGFlMWNmMDlhZjEy
MzU4YzZkZTg0MDY4NzcxNC4uZmJiMGExMDYyY2I5ZGY0MmVmMDIzMGU2MjQ2NzZhMTFlYTI3Mjc5
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5oCkBAIC0yMiwyNyArMjIsMjUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAKIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxGRVRp
bGU+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIEZFVGlsZShGaWx0ZXImKTsKKyAgICBGRVRp
bGUoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiRkVUaWxlIjsgfQorICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVGlsZTsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlk
ZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgp
KSk7IH0KKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9F
RkZFQ1QoRkVUaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IDc3NGU2ODJlM2I0ODU5YmI2ZTIw
NmExZDJiZmFlYjBjZWE5MTlmMGIuLmNkNWViMWNlZGQxMTJmNjYxNjZkYmU1YzgzM2U0ZTdlN2Ri
NjhjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTQ4LDggKzQ4LDggQEAgc3RhdGljIGNvbnN0
IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2Yg
bQogc3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQogc3RhdGljIGNv
bnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKIAotRkVUdXJidWxlbmNlOjpGRVR1cmJ1
bGVuY2UoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVx
dWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQs
IGJvb2wgc3RpdGNoVGlsZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpUdXJi
dWxlbmNlKQorRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUgdHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkZFVHVyYnVsZW5jZSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwg
bV9iYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVko
YmFzZUZyZXF1ZW5jeVkpCkBAIC01OSw5ICs1OSw5IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxl
bmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVl
CiB7CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZpbHRlciYg
ZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRp
bGVzKQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5
cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQg
bnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVlbmN5WCwg
YmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKIH0KIAogYm9vbCBG
RVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKQEAgLTM2NiwyMiArMzY2
LDIwIEBAIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0
ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0CiAgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xv
ckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAotdm9pZCBGRVR1cmJ1
bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFy
dFksIGludCBlbmRZKSBjb25zdAordm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3Qg
RmlsdGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBJbnRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0
Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdAogewogICAgIEFT
U0VSVChlbmRZID4gc3RhcnRZKTsKIAotICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1
dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2Nh
bGUoKSk7CiAgICAgRmxvYXRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZ
KTsKICAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24u
d2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZnJvbSA9IGZp
bHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5z
Zm9ybSgpKTsKKyAgICBGbG9hdFNpemUgaW52ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVyLmZpbHRl
clNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH07CiAK
ICAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CiAgICAgICAgIHBvaW50
LnNldFkocG9pbnQueSgpICsgMSk7CiAgICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngo
KSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsr
eCkgewogICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAgICAg
IEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGludmVyc2VUcmFuc2Zyb20ubWFwUG9pbnQocG9pbnQp
OworICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gcG9pbnQuc2NhbGVkKGludmVy
c2VTY2FsZS53aWR0aCgpLCBpbnZlcnNlU2NhbGUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgYXV0
byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEs
IHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwogICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5n
ZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOwogICAg
ICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwpAQCAtMzkxLDI2ICszODksMzIgQEAg
dm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJy
YXksIGNvbnN0IFBhaW50aW5nRGF0YSYKIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25X
b3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiB7Ci0gICAgcGFyYW1ldGVy
cy0+ZmlsdGVyLT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVy
cy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFy
dFksIHBhcmFtZXRlcnMtPmVuZFkpOworICAgIHBhcmFtZXRlcnMtPmVmZmVjdC0+ZmlsbFJlZ2lv
bigqcGFyYW1ldGVycy0+ZmlsdGVyLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgcGFyYW1ldGVy
cy0+ZmlsdGVyUmVnaW9uLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5z
dGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOwogfQogCi12
b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRVR1
cmJ1bGVuY2U6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJu
IGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKwor
Ym9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKK3sKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKworICAgIGF1dG8g
b3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJh
eSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRTaXplIHJlc3VsdFNpemUo
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUoZmlsdGVy
KCkuZmlsdGVyU2NhbGUoKSk7CisgICAgSW50U2l6ZSBvdXRwdXRTaXplKG91dHB1dC5sb2dpY2Fs
U2l6ZSgpKTsKIAotICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewotICAgICAgICBkZXN0
aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChv
dXRwdXRTaXplLmlzRW1wdHkoKSkgeworICAgICAgICBvdXRwdXRQaXhlbEFycmF5Lnplcm9GaWxs
KCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEludFNpemUgdGlsZVNpemUg
PSByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOworICAg
IEludFNpemUgdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShvdXRwdXQucHJpbWl0aXZlU3VicmVn
aW9uKCkuc2l6ZSgpKTsKIAogICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVl
bmN5WDsKICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7CkBAIC00
MTksMTQgKzQyMywxNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNpemUsIGJhc2VG
cmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7CiAgICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7
CiAKLSAgICBhdXRvIGFyZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKKyAgICBhdXRvIGFyZWEgPSBv
dXRwdXRTaXplLmFyZWEoKTsKICAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IGhlaWdodCA9IHJlc3Vs
dFNpemUuaGVpZ2h0KCk7CisgICAgaW50IGhlaWdodCA9IG91dHB1dFNpemUuaGVpZ2h0KCk7CiAK
ICAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKICAgICB1bnNpZ25lZCBv
cHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxS
ZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2VSZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChmaWx0ZXIuc2NhbGVkUmVjdEJ5RmlsdGVyU2NhbGUob3V0cHV0
LmltYWdlUmVjdCgpKSk7CisKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKICAg
ICAgICAgUGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldl
YkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJl
cik7CiAKQEAgLTQ0MCw4ICs0NDcsMTAgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1K
b2JzOyArK2kpIHsKICAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1z
ID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmls
dGVyID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZkZXN0aW5h
dGlvblBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9ICZmaWx0ZXI7
CisgICAgICAgICAgICAgICAgcGFyYW1zLmVmZmVjdCA9IHRoaXM7CisgICAgICAgICAgICAgICAg
cGFyYW1zLmZpbHRlclJlZ2lvbiA9IG91dHB1dEltYWdlUmVjdDsKKyAgICAgICAgICAgICAgICBw
YXJhbXMucGl4ZWxBcnJheSA9ICZvdXRwdXRQaXhlbEFycmF5OwogICAgICAgICAgICAgICAgIHBh
cmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFt
cy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZ
ID0gc3RhcnRZOwpAQCAtNDUyLDEyICs0NjEsMTMgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHBhcmFsbGVs
Sm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJl
YWRlZCBtb2RlIGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFp
bnQgYXJlYSBpcyB0b28gc21hbGwuCi0gICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJy
YXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBmaWxsUmVnaW9u
KGZpbHRlciwgb3V0cHV0UGl4ZWxBcnJheSwgb3V0cHV0SW1hZ2VSZWN0LCBwYWludGluZ0RhdGEs
IHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmgKaW5kZXggNGQ1MzZiMzdhODBhYWRmOTExZWJmY2U4OTc3NGNkM2NjZWNi
NWNmYi4uZjI2NDY2MjU3NmRhZjZiYTM1ODE1NGUyMzU1MzVhNGVkNmUwMjQwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zOCw3ICszNyw3IEBAIGVudW0gY2xhc3MgVHVyYnVsZW5jZVR5
cGUgewogCiBjbGFzcyBGRVR1cmJ1bGVuY2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3JlYXRlKEZpbHRlciYsIFR1cmJ1bGVu
Y2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOworICAgIHN0YXRpYyBSZWY8
RkVUdXJidWxlbmNlPiBjcmVhdGUoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lY
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wg
c3RpdGNoVGlsZXMpOwogCiAgICAgVHVyYnVsZW5jZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQogICAgIGJvb2wgc2V0VHlwZShUdXJidWxlbmNlVHlwZSk7CkBAIC05Niw3ICs5
NSw5IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSm9iczsKIAogICAgIHN0
cnVjdCBGaWxsUmVnaW9uUGFyYW1ldGVycyB7Ci0gICAgICAgIEZFVHVyYnVsZW5jZSogZmlsdGVy
OworICAgICAgICBjb25zdCBGaWx0ZXIqIGZpbHRlcjsKKyAgICAgICAgRkVUdXJidWxlbmNlKiBl
ZmZlY3Q7CisgICAgICAgIEludFJlY3QgZmlsdGVyUmVnaW9uOwogICAgICAgICBVaW50OENsYW1w
ZWRBcnJheSogcGl4ZWxBcnJheTsKICAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7
CiAgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKQEAgLTEwNiwxOSArMTA3LDE3IEBAIHBy
aXZhdGU6CiAKICAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJh
bWV0ZXJzKik7CiAKLSAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZs
b2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgRkVUdXJidWxlbmNlKFR1cmJ1bGVu
Y2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBu
dW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUdXJidWxlbmNlIjsgfQot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgRmxvYXRSZWN0IGNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKICAgICBT
dGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VG
cmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwogICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hE
YXRhJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0Rh
dGEmLCBTdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBmaWxs
UmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0OworICAgIHZvaWQgZmlsbFJlZ2lvbihjb25z
dCBGaWx0ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkp
IGNvbnN0OwogCiAgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7CiAKQEAg
LTEzMiwzICsxMzEsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRVR1cmJ1bGVuY2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCBh
MmQ5OTc5M2IwZGIyMjU4YmM0NzZkZGNjMjljMGNlMjYxMTBiYzFmLi41OGRkNTU5NjhiZjM3Zjg2
MjUyYzFlMTM0NWEzYjAxMWM2N2EwYzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjEsNTggKzIyLDExMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGaWx0ZXJFZmZl
Y3Q7CiAKLWNsYXNzIEZpbHRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlcj4geworY2xhc3Mg
RmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1YmxpYzoKLSAgICBGaWx0ZXIoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgZmxvYXQgZmlsdGVyU2NhbGUg
PSAxKQotICAgICAgICA6IG1fYWJzb2x1dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0pCi0g
ICAgICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKLSAgICB7IH0KLSAgICB2aXJ0dWFs
IH5GaWx0ZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3Vy
Y2VJbWFnZSk7IH0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UoKSB7IHJldHVybiBtX3Nv
dXJjZUltYWdlLmdldCgpOyB9CisgICAgZW51bSBjbGFzcyBDbGlwT3BlcmF0aW9uIHsgSW50ZXJz
ZWN0LCBVbml0ZSB9OwogCi0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRp
b24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlv
biA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGUoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9CisgICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShjb25z
dCBGbG9hdFNpemUmIGZpbHRlclNjYWxlKSB7IG1fZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsg
fQogCi0gICAgZmxvYXQgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxl
OyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShmbG9hdCBzY2FsZSkgeyBtX2ZpbHRlclNjYWxl
ID0gc2NhbGU7IH0KKyAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKyAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkgeyBtX3NvdXJjZUltYWdlUmVjdCA9IHNvdXJj
ZUltYWdlUmVjdDsgfQorICAgIAorICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0
IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9u
OyB9CiAKLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0U291cmNlSW1h
Z2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1hZ2UgPSBX
VEZNb3ZlKHNvdXJjZUltYWdlKTsgfQorICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KIAogICAgIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQogICAgIHZv
aWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpIHsgbV9yZW5k
ZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzU1ZHRmls
dGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIENsaXBPcGVyYXRpb24gY2xpcE9wZXJh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcE9wZXJhdGlvbjsgfQogCi0gICAgdmlydHVhbCBG
bG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25zdCB7
IHJldHVybiBzaXplICogbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgCi0gICAgdmlydHVhbCBG
bG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0
ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBz
Y2FsZWRTaXplQnlGaWx0ZXJTY2FsZShGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6
ZSAqIG1fZmlsdGVyU2NhbGU7IH0KKworICAgIEZsb2F0UmVjdCBzY2FsZWRSZWN0QnlGaWx0ZXJT
Y2FsZShjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1
dG8gc2NhbGVkSW1hZ2VSZWN0ID0gaW1hZ2VSZWN0OworICAgICAgICBzY2FsZWRJbWFnZVJlY3Qu
c2NhbGUobV9maWx0ZXJTY2FsZSk7CisgICAgICAgIHJldHVybiBzY2FsZWRJbWFnZVJlY3Q7Cisg
ICAgfQorCisgICAgRmxvYXRSZWN0IG1heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRl
cnNlY3Rpb24ocHJpbWl0aXZlU3VicmVnaW9uLCBtX2ZpbHRlclJlZ2lvbik7CisgICAgfQorCisg
ICAgRmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9jbGlwT3BlcmF0aW9uID09IENsaXBPcGVyYXRpb246OkludGVy
c2VjdCA/IGludGVyc2VjdGlvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbikgOiB1bmlv
blJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworICAgIH0KKworICAgIEZsb2F0
UmVjdCBjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIG1heFByaW1p
dGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pKTsKKyAgICB9CisKKyAgICBGbG9hdFJl
Y3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBGbG9hdFJlY3QmIGlucHV0SW1hZ2VS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIG91dHB1dEltYWdlUmVjdCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGF1dG8gbW92ZWRJbWFnZVJlY3QgPSBpbnB1dEltYWdlUmVjdDsKKyAgICAgICAgbW92ZWRJ
bWFnZVJlY3QubW92ZUJ5KC1vdXRwdXRJbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgIHJl
dHVybiBzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShtb3ZlZEltYWdlUmVjdCk7CisgICAgfQorCisg
ICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiBpbnB1dEltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBvdXRwdXRJbWFnZVJlY3QpIGNv
bnN0CisgICAgeworICAgICAgICBhdXRvIHNjYWxlZElucHV0SW1hZ2VSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShpbnB1dEltYWdlUmVjdCkpOworICAgICAg
ICBhdXRvIHNjYWxlZE91dHB1dEltYWdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc2NhbGVkUmVj
dEJ5RmlsdGVyU2NhbGUob3V0cHV0SW1hZ2VSZWN0KSk7CisgICAgICAgIAorICAgICAgICBhdXRv
IGxvY2F0aW9uID0gc2NhbGVkT3V0cHV0SW1hZ2VSZWN0LmxvY2F0aW9uKCk7CisgICAgICAgIGxv
Y2F0aW9uLm1vdmVCeSgtc2NhbGVkSW5wdXRJbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAg
IHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBzY2FsZWRPdXRwdXRJbWFnZVJlY3Quc2l6ZSgpKTsK
KyAgICB9CisKKyAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKGNv
bnN0IEZsb2F0UG9pbnQmIHVzZXJTcGFjZVBvaW50LCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CisgICAgeworICAg
ICAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQb2ludCh1c2VyU3BhY2VQb2ludCwg
cHJpbWl0aXZlU3VicmVnaW9uLCBzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShwcmltaXRpdmVTdWJy
ZWdpb24pKTsKKyAgICAgICAgRmxvYXRSZWN0IGFic29sdXRlSW1hZ2VSZWN0ID0gc2NhbGVkUmVj
dEJ5RmlsdGVyU2NhbGUoaW1hZ2VSZWN0KTsKKyAgICAgICAgYWJzb2x1dGVQb2ludC5tb3ZlQnko
LWFic29sdXRlSW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVQ
b2ludDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlGaWx0ZXIoKSB7IHJldHVybiBm
YWxzZTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgRmlsdGVyKGNvbnN0IEZsb2F0U2l6
ZSYgZmlsdGVyUmVzb2x1dGlvbikKLSAgICAgICAgOiBtX2ZpbHRlclJlc29sdXRpb24oZmlsdGVy
UmVzb2x1dGlvbikKKyAgICBGaWx0ZXIoRmlsdGVyOjpUeXBlIGZpbHRlclR5cGUsIGNvbnN0IEZs
b2F0U2l6ZSYgZmlsdGVyU2NhbGUsIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKKyAgICAg
ICAgOiBGaWx0ZXJGdW5jdGlvbihmaWx0ZXJUeXBlKQorICAgICAgICAsIG1fZmlsdGVyU2NhbGUo
ZmlsdGVyU2NhbGUpCisgICAgICAgICwgbV9jbGlwT3BlcmF0aW9uKGNsaXBPcGVyYXRpb24pCisg
ICAgeworICAgIH0KKworICAgIEZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgY29uc3Qg
RmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKQorICAgICAgICA6IEZpbHRlckZ1bmN0aW9u
KGZpbHRlclR5cGUpCisgICAgICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAg
ICAgLCBtX3NvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpCisgICAgICAgICwgbV9maWx0
ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6CisgICAgRmxv
YXRTaXplIG1fZmlsdGVyU2NhbGU7CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0Owor
ICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKwogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
bV9zb3VyY2VJbWFnZTsKLSAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwotICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwogICAgIFJlbmRlcmluZ01vZGUgbV9y
ZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwotICAgIGZsb2F0
IG1fZmlsdGVyU2NhbGUgeyAxIH07CisKKyAgICBDbGlwT3BlcmF0aW9uIG1fY2xpcE9wZXJhdGlv
biB7IENsaXBPcGVyYXRpb246OkludGVyc2VjdCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJCb3VuZGFyeVNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4ZGZiNTVhNDE4M2Y3YzQ2
MjQ0NzMyYTc0ZGJjOWMzOWNjYjYxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgKQEAgLTAsMCAr
MSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNl
dCB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBGbGFncyB7CisgICAgICAgIEhhc1ggICAgICA9
IDEgPDwgMCwKKyAgICAgICAgSGFzWSAgICAgID0gMSA8PCAxLAorICAgICAgICBIYXNXaWR0aCAg
PSAxIDw8IDIsCisgICAgICAgIEhhc0hlaWdodCA9IDEgPDwgMworICAgIH07CisKKyAgICBGaWx0
ZXJCb3VuZGFyeVNldCgpID0gZGVmYXVsdDsKKworICAgIEZpbHRlckJvdW5kYXJ5U2V0KGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRhcmllcywgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKKyAgICAgICAg
OiBtX2JvdW5kYXJpZXMoYm91bmRhcmllcykKKyAgICAgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAg
IHsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNYKSkKKyAgICAgICAgICAgIHJl
dHVybiBtX2JvdW5kYXJpZXMueCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHkoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1kpKQorICAgICAgICAgICAgcmV0dXJuIG1f
Ym91bmRhcmllcy55KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gd2lkdGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1dpZHRoKSkKKyAgICAgICAgICAgIHJldHVybiBt
X2JvdW5kYXJpZXMud2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBoZWlnaHQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc0hlaWdodCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9ib3VuZGFyaWVzLmhlaWdodCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGFyaWVzOworICAgIE9w
dGlvblNldDxGbGFncz4gbV9mbGFnczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRmYzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2Ri
MTA4Li45MjZjM2YzMWNlNmM0YzlhMTllNjg1ZjhkYTZmNTRkNTIyMTExNmExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCkBAIC0yNiwxMTggKzI2LDE0IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLSNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25lb24uaD4KLSNlbmRpZgotCi0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVj
dChGaWx0ZXImIGZpbHRlciwgVHlwZSB0eXBlKQotICAgIDogbV9maWx0ZXIoZmlsdGVyKQotICAg
ICwgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGUodHlwZSkKLXsKLX0KLQotRmlsdGVyRWZmZWN0Ojp+
RmlsdGVyRWZmZWN0KCkgPSBkZWZhdWx0OwotCi12b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIG1fYWJzb2x1dGVQYWludFJlY3QgPSBJbnRSZWN0
KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKLSAgICAgICAgbV9h
YnNvbHV0ZVBhaW50UmVjdC51bml0ZShlZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xpcEFi
c29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1p
dGl2ZSBzdWJyZWdpb24sIHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3Vu
ZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJl
Y3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRS
ZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0
UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBv
aW50IHVzZXJTcGFjZVBvaW50KSBjb25zdAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2lu
dCA9IG1hcFBvaW50KHVzZXJTcGFjZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwg
bV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnko
LW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9p
bnQ7Ci19Ci0KLUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2lu
dCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlv
bi5tb3ZlQnkoLWVmZmVjdFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9j
YXRpb24sIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRl
ckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0
KSBjb25zdAorRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlIHR5
cGUpCisgICAgOiBGaWx0ZXJGdW5jdGlvbih0eXBlKQogewotICAgIEFTU0VSVChoYXNSZXN1bHQo
KSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSkudHJhbnNsYXRlKC1tX2Fi
c29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiB0cmFuc2Zvcm0ubWFwUmVj
dChzcmNSZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUsIEZFVHVyYnVsZW5jZSwgRkVG
bG9vZCBkb24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGZpbHRlciByZWdpb24gYXMg
dW5pdGUgcmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwotICAgIGlmICh1bnNpZ25lZCBu
dW1iZXJPZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNpemUoKSkgewotICAgICAgICBz
dWJyZWdpb24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1iZXJPZklucHV0RWZm
ZWN0czsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJpbWl0aXZlU3VicmVnaW9uID0g
aW5wdXRFZmZlY3QoaSktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAg
ICAgICAgICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVnaW9uKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZQotICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdp
b25JblVzZXJTcGFjZSgpOwotCi0gICAgLy8gQWZ0ZXIgY2FsbGluZyBkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24gb24gdGhlIHRhcmdldCBlZmZlY3QsIHJlc2V0IHRoZSBzdWJyZWdp
b24gYWdhaW4gZm9yIDxmZVRpbGU+LgotICAgIGlmIChmaWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmls
dGVyRWZmZWN0VHlwZVRpbGUpCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJl
Z2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICBhdXRvIGJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFy
aWVzKCk7Ci0gICAgaWYgKGhhc1goKSkKLSAgICAgICAgc3VicmVnaW9uLnNldFgoYm91bmRhcmll
cy54KCkpOwotICAgIGlmIChoYXNZKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRZKGJvdW5kYXJp
ZXMueSgpKTsKLSAgICBpZiAoaGFzV2lkdGgoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldFdpZHRo
KGJvdW5kYXJpZXMud2lkdGgoKSk7Ci0gICAgaWYgKGhhc0hlaWdodCgpKQotICAgICAgICBzdWJy
ZWdpb24uc2V0SGVpZ2h0KGJvdW5kYXJpZXMuaGVpZ2h0KCkpOwotCi0gICAgc2V0RmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7Ci0KLSAgICBhdXRvIGFic29sdXRlU3VicmVnaW9u
ID0gbV9maWx0ZXIuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHN1YnJlZ2lvbik7Ci0gICAg
YXV0byBmaWx0ZXJSZXNvbHV0aW9uID0gbV9maWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpOwotICAg
IGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24pOwotICAgIC8vIFNhdmUg
dGhpcyBiZWZvcmUgY2xpcHBpbmcgc28gd2UgY2FuIHVzZSBpdCB0byBtYXAgbGlnaHRpbmcgcG9p
bnRzIGZyb20gdXNlciBzcGFjZSB0byBidWZmZXIgY29vcmRpbmF0ZXMuCi0gICAgc2V0VW5jbGlw
cGVkQWJzb2x1dGVTdWJyZWdpb24oYWJzb2x1dGVTdWJyZWdpb24pOwotCi0gICAgLy8gQ2xpcCBl
dmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIgcmVnaW9uLgotICAgIGF1dG8gYWJzb2x1
dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNv
bHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKLSAgICBhYnNv
bHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwotCi0g
ICAgc2V0TWF4RWZmZWN0UmVjdChhYnNvbHV0ZVN1YnJlZ2lvbik7Ci0gICAgcmV0dXJuIHN1YnJl
Z2lvbjsKIH0KIAogRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2ln
bmVkIG51bWJlcikgY29uc3QKQEAgLTE0Niw1MTQgKzQyLDk5IEBAIEZpbHRlckVmZmVjdCogRmls
dGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0CiAgICAgcmV0dXJu
IG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBj
b2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqZWZmZWN0LCBIYXNoU2V0PGNvbnN0IEZp
bHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFsbEVmZmVjdHMuYWRkKGVmZmVjdCk7
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwotICAgICAgICBjb2xsZWN0RWZmZWN0
cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVybiBhbGxFZmZlY3RzLnNpemUoKTsK
LX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkg
Y29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0g
ICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVmZmVjdHMpOwotfQotCi12b2lkIEZp
bHRlckVmZmVjdDo6YXBwbHkoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJp
bWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGlmICho
YXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0
RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7
Ci0gICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8g
dGhlIGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwot
Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIg
PDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBl
ZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVV
bmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJc
biAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4
RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8
IG1fZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1f
ZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVj
dC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlcXVpcmVzVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0RmlsdGVy
UmVzdWx0SWZOZWVkZWQoKTsKLSAgICB9CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRz
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9maWx0ZXItZWZmZWN0cy0xLyNGaWx0ZXJQcmltaXRpdmVT
dWJSZWdpb24uCisgICAgRmxvYXRSZWN0IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb247CiAgICAg
Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCBy
ZXR1cm4gZWFybGllci4KLSAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKLX0KLQotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKLXsKLSAgICAvLyBN
dXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5u
b3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFn
ZUFycmF5LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVu
Z3RoKCk7Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBj
b21wbGV0ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0j
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49
IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFy
cmF5TGVuZ3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1l
bnRzIHBpeGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4
ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFs
WzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNd
KTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBp
eGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5Q
aXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhl
bHMudmFsWzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVs
cyk7Ci0gICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVs
RGF0YSA8IGxhc3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwot
ICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0K
LSAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVz
dGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVs
cyA+PSAwKSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0g
ICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVh
Y2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpw
aXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAg
ICAgKytwaXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBo
YQotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpj
bGVhclJlc3VsdCgpCi17Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCi17Ci0gICAgLy8gQ2xlYXIgYWxsIHJlc3VsdHMsIHJl
Z2FyZGxlc3MgdGhhdCB0aGUgY3VycmVudCBlZmZlY3QgaGFzCi0gICAgLy8gYSByZXN1bHQuIENh
biBiZSB1c2VkIGlmIGFuIGVmZmVjdCBpcyBpbiBhbiBlcnJvbmVvdXMgc3RhdGUuCi0gICAgaWYg
KGhhc1Jlc3VsdCgpKQotICAgICAgICBjbGVhclJlc3VsdCgpOwotCi0gICAgdW5zaWduZWQgc2l6
ZSA9IG1faW5wdXRFZmZlY3RzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKS0+Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKCk7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVm
ZmVyUmVzdWx0KCkKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJG
aWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1
ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIWhhc1Jlc3VsdCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLQotICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBt
X2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0
Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJS
ZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIERvbid0IHVzZSB0aGUgaW5w
dXQncyBzdWJyZWdpb24gZm9yIDxmZVRpbGU+LgorICAgIGlmICghbV9pbnB1dEVmZmVjdHMuaXNF
bXB0eSgpICYmIGZpbHRlclR5cGUoKSAhPSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkgewor
ICAgICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQorICAgICAgICAgICAg
ZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi51bml0ZShlZmZlY3QtPmNhbGN1bGF0ZVByaW1pdGl2
ZVN1YnJlZ2lvbihmaWx0ZXIpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGVmYXVsdFByaW1pdGl2
ZVN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKIAotICAgIEludFJlY3QgZGVzdGlu
YXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBp
ZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1
bHQtPnB1dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRp
b25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVs
QnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAg
IHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQorICAgIEZsb2F0UmVjdCBwcmlt
aXRpdmVTdWJyZWdpb247CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0
Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRT
aXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92
ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRB
cnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhl
bEFycmF5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVz
dWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJh
eTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0WChtX2JvdW5kYXJ5U2V0LngoKS52YWx1ZV9v
cihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLngoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lv
bi5zZXRZKG1fYm91bmRhcnlTZXQueSgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdp
b24ueSgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFdpZHRoKG1fYm91bmRhcnlTZXQu
d2lkdGgoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLndpZHRoKCkpKTsKKyAg
ICBwcmltaXRpdmVTdWJyZWdpb24uc2V0SGVpZ2h0KG1fYm91bmRhcnlTZXQuaGVpZ2h0KCkudmFs
dWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi5oZWlnaHQoKSkpOworICAgIAorICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorRmxvYXRSZWN0
IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKSBjb25zdAogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7
Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkp
OwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0
byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0g
ICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXks
IHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OworICAgIGF1dG8gcHJp
bWl0aXZlU3VicmVnaW9uID0gY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7Cisg
ICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9u
KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNj
YWxlZFJlY3Quc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgSW50U2l6ZSBzY2Fs
ZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNjYWxlZFBhaW50
U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUg
dGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292
ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVk
UmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsK
KyAgICBpZiAobV9maWx0ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmlt
YWdlUmVjdCgpOwogCi0gICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGlu
dGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCi0gICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAg
fHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWlu
dFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0OwogCi0gICAgaW50
IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4
T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2lu
ID0gMDsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKSB7CisgICAgICAg
IGF1dG8mIGlucHV0ID0gKmVmZmVjdC0+ZmlsdGVySW1hZ2UoKTsKKyAgICAgICAgaW1hZ2VSZWN0
LnVuaXRlKGlucHV0LmltYWdlUmVjdCgpKTsKICAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRS
ZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAg
ICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9
IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAw
KSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAg
IH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQg
ZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNv
dXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVk
UmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlUGl4
ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkp
ICsgeE9yaWdpbikgKiA0OwogCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAg
IG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4
ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9CisgICAgcmV0
dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRp
dmVTdWJyZWdpb24pOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK0ludFJlY3QgRmlsdGVyRWZmZWN0Ojpj
YWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsK
LSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lk
dGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1
dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAg
IHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAg
ZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRT
aXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRh
dGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAg
dkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5k
YXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0
U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9u
ZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotCi0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8
IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMF0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMl0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNd
ID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgorICAgIGF1dG8gcHJpbWl0aXZlU3Vi
cmVnaW9uID0gY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CisgICAgaWYgKHBy
aW1pdGl2ZVN1YnJlZ2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0
byBpbWFnZVJlY3QgPSBjYWxjdWxhdGVJbWFnZVJlY3QoZmlsdGVyLCBwcmltaXRpdmVTdWJyZWdp
b24pOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci5zY2FsZWRSZWN0QnlGaWx0
ZXJTY2FsZShpbWFnZVJlY3QpKTsKIH0KIAotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3ZvaWQgRmlsdGVyRWZm
ZWN0OjpjbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2ZSgpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEUp
Ci0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdklt
YWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAg
c3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dC
eXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRh
KCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNp
emUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBk
ZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlE
YXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3Qg
dWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52
YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24u
ZGF0YSgpOwotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50
IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAg
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VD
b21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFs
cGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxp
bnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9
IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYg
cGl4ZWxCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBl
cmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBk
byBpdCBkaXJlY3RseS4KLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IHBpeGVsQnVmZmVyLnNpemUoKSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRl
IGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBi
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJp
bmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLSAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0
aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2Uo
dGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5m
b3JtYXQoKS5hbHBoYUZvcm1hdCk7CisgICAgLy8gQ2xlYXIgYWxsIHJlc3VsdHMsIHJlZ2FyZGxl
c3MgdGhhdCB0aGUgY3VycmVudCBlZmZlY3QgaGFzCisgICAgLy8gYSByZXN1bHQuIENhbiBiZSB1
c2VkIGlmIGFuIGVmZmVjdCBpcyBpbiBhbiBlcnJvbmVvdXMgc3RhdGUuCisgICAgY2xlYXJGaWx0
ZXJJbWFnZSgpOworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCisgICAg
ICAgIGVmZmVjdC0+Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoKTsKIH0KIAotc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBJbWFn
ZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQpCitib29sIEZpbHRlckVmZmVjdDo6YXBwbHkoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9y
ZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24uCisgICAgaWYgKG1fZmlsdGVy
SW1hZ2UpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXpl
ID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvIHByaW1p
dGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOworICAg
IGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBz
cGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAg
IGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwg
bV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRD
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghY29udmVydGVkQnVmZmVy
KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgLy8gQ29sb3Igc3BhY2UgY29u
dmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1
ZmZlciB0byBhbm90aGVyCi0gICAgY29udmVydGVkQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKGlucHV0QnVmZmVyLCByZWN0KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGNhbGN1bGF0
ZUltYWdlUmVjdChmaWx0ZXIsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgYXV0byBhYnNvbHV0
ZUltYWdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyLnNjYWxlZFJlY3RCeUZpbHRlclNj
YWxlKGltYWdlUmVjdCkpOwogICAgIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IG91
dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3BhY2UgfTsK
LSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3Qp
OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0
aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRh
IHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgot
ICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9y
U3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZl
cnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29u
dmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24o
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hp
Y2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252
ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNw
YWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRh
KCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9y
U3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKyAgICBpZiAoYWJzb2x1dGVJbWFn
ZVJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0
ZUltYWdlUmVjdC5zaXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVy
TmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlz
dGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk7Ci0KLSAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBB
U1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JT
cGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1
bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3Vs
dENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQ
aXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlm
ICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRT
aXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9y
U3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhl
bEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29w
eUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlv
biwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEFT
U0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFt
IDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBj
b3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24g
ZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkg
ewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5j
b2xvclNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9
KTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBp
bnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAg
ICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAgICAgICAg
IEFTU0VSVChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09
IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3Jt
YXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsK
LSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBj
b3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRl
ckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCAlZHglZCIsIGZpbHRlck5hbWUo
KSwgdGhpcywgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkud2lkdGgoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUg
aXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBpZiAobV9hYnNvbHV0
ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxv
YXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0g
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9u
ZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAg
IEFTU0VSVCghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0
ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRT
aXplKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9y
bWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsK
LX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVj
dCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRo
aXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NF
UlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1f
cmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFu
IGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEg
Y29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUg
aW5wdXQKLSAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVs
cwotICAgIHJldHVybiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgp
ICE9ICpkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0jZWxzZQotICAgIC8vIEFkZGl0aW9uYWwgY29s
b3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAgIFVOVVNFRF9Q
QVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
fQotCi12b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0Uo
Q0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5
LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBp
ZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9y
U3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhp
cyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGlu
ZwotICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1t
dWx0aXBsaWVkIGFycmF5cy4KLSAgICBpbWFnZUJ1ZmZlclJlc3VsdCgpLT50cmFuc2Zvcm1Ub0Nv
bG9yU3BhY2UoZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLQotICAgIG1fcmVzdWx0Q29sb3JTcGFj
ZSA9IGRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLQotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6
Om51bGxvcHQ7Ci0jZW5kaWYKKyAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHRoaXMtPmlzQWxwaGFJ
bWFnZSgpOworICAgIGF1dG8gaW1hZ2VDb2xvclNwYWNlID0gdGhpcy0+aW1hZ2VDb2xvclNwYWNl
KCk7CisgICAgCisgICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdlOjpjcmVhdGUocHJpbWl0
aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgYWJzb2x1dGVJbWFnZVJlY3Qu
c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBpbWFnZUNvbG9yU3BhY2Up
OworICAgIGlmICghbV9maWx0ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKToiCisgICAgICAg
IDw8ICJcbiAgcHJpbWl0aXZlU3VicmVnaW9uICIgPDwgcHJpbWl0aXZlU3VicmVnaW9uCisgICAg
ICAgIDw8ICJcbiAgbWF4UHJpbWl0aXZlU3VicmVnaW9uICIgPDwgZmlsdGVyLm1heFByaW1pdGl2
ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pCisgICAgICAgIDw8ICJcbiAgaW1hZ2VSZWN0
ICIgPDwgaW1hZ2VSZWN0CisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVJbWFnZWdSZWN0ICIgPDwg
YWJzb2x1dGVJbWFnZVJlY3QpOworICAgIAorICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBh
cHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCisgICAgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGZpbHRlcik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZp
bHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKQEAgLTY2Myw5ICsxNDQsNyBA
QCBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVAogICAgIAogICAgIGlmIChyZXByZXNlbnRhdGlvblR5
cGUgPT0gUmVwcmVzZW50YXRpb25UeXBlOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHko
ImFscGhhIGltYWdlIiwgbV9hbHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJv
cGVyYXRpbmcgY29sb3JzcGFjZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAgICAgIHRz
LmR1bXBQcm9wZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwog
ICAgICAgICB0cyA8PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmgKaW5kZXggMTJkZWQyNjVhNjU1YzM3ZTc3ZTJjZjA1YjUyNzczZjJiOTZiNDcxYy4u
NTBjY2IwYTZkYTYwZDMyMWUxNDBkZmFkNzQzZGIwOTljMzllMmJlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CkBAIC0yMiwxNyArMjIsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFscGhhUHJl
bXVsdGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50
UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIkZpbHRlckJvdW5kYXJ5U2V0LmgiCisjaW5jbHVkZSAi
RmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogCiBuYW1lc3BhY2Ug
V1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CkBAIC00MiwyMTcgKzM0LDY0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OwotY2xhc3MgSW1h
Z2VCdWZmZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJF
ZmZlY3RWZWN0b3I7CiAKLWVudW0gRmlsdGVyRWZmZWN0VHlwZSB7Ci0gICAgRmlsdGVyRWZmZWN0
VHlwZVVua25vd24sCi0gICAgRmlsdGVyRWZmZWN0VHlwZUltYWdlLAotICAgIEZpbHRlckVmZmVj
dFR5cGVUaWxlLAotICAgIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dAotfTsKLQotY2xhc3Mg
RmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBG
aWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgotICAgIGVudW0g
Y2xhc3MgVHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBCbGVuZCwKLSAgICAgICAgQ29sb3JNYXRy
aXgsCi0gICAgICAgIENvbXBvbmVudFRyYW5zZmVyLAotICAgICAgICBDb21wb3NpdGUsCi0gICAg
ICAgIENvbnZvbHZlTWF0cml4LAotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIERp
c3BsYWNlbWVudE1hcCwKLSAgICAgICAgRHJvcFNoYWRvdywKLSAgICAgICAgRmxvb2QsCi0gICAg
ICAgIEdhdXNzaWFuQmx1ciwKLSAgICAgICAgSW1hZ2UsCi0gICAgICAgIExpZ2h0aW5nLAotICAg
ICAgICBNZXJnZSwKLSAgICAgICAgTW9ycGhvbG9neSwKLSAgICAgICAgT2Zmc2V0LAotICAgICAg
ICBTcGVjdWxhckxpZ2h0aW5nLAotICAgICAgICBUaWxlLAotICAgICAgICBUdXJidWxlbmNlLAot
ICAgICAgICBTb3VyY2VBbHBoYSwKLSAgICAgICAgU291cmNlR3JhcGhpYwotICAgIH07Ci0gICAg
dmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7Ci0KLSAgICB2b2lkIGNsZWFyUmVzdWx0KCk7Ci0gICAg
dm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdW5tdWx0aXBsaWVk
UmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVs
dGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNv
bG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRSZXN1
bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lk
IGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0
ZDo6bnVsbG9wdCk7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJl
dHVybiBtX2lucHV0RWZmZWN0czsgfQotICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3QodW5z
aWduZWQpIGNvbnN0OwotICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Qg
eyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdG90YWxOdW1i
ZXJPZkVmZmVjdElucHV0cygpIGNvbnN0OwotICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3Vs
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3Jt
IHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkg
RmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAg
ICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIEludFJlY3QgcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICAK
LSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBk
aWZmZXJlbnQgYWxwaGEgdmFsdWVzLgotICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbHBoYUltYWdlOyB9Ci0gICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBo
YUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1hZ2U7IH0KKyAgICBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3Rz
OyB9CisgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0
OwogCi0gICAgSW50UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJz
b2x1dGVQYWludFJlY3Q7IH0KLSAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0IElu
dFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNvbHV0
ZVBhaW50UmVjdDsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24o
Y29uc3QgRmlsdGVyJikgY29uc3Q7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1heFByaW1pdGl2
ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0OworICAgIEludFJlY3QgY2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVyJikgY29uc3Q7CiAKLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0
UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0g
bWF4RWZmZWN0UmVjdDsgfSAKKyAgICBGaWx0ZXJJbWFnZSogZmlsdGVySW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlckltYWdlLmdldCgpOyB9CisgICAgdm9pZCBjbGVhckZpbHRlckltYWdl
KCkgb3ZlcnJpZGUgeyBtX2ZpbHRlckltYWdlID0gbnVsbHB0cjsgfQorICAgIHZvaWQgY2xlYXJG
aWx0ZXJJbWFnZXNSZWN1cnNpdmUoKTsKIAotICAgIHZvaWQgYXBwbHkoKTsKKyAgICB2b2lkIHNl
dEJvdW5kYXJ5U2V0KGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgeyBtX2Jv
dW5kYXJ5U2V0ID0gYm91bmRhcnlTZXQ7IH0KIAotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQg
cGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9u
LgotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVl
cyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhl
IGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVj
dGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9
CisgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xv
clNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIC8vIFNvbGlkIGJs
YWNrIGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4KKyAgICB2aXJ0dWFsIGJvb2wg
aXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1hZ2VDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4g
bV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAKLSAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUg
ZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3du
OyB9CisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSA9IDA7CiAKLSAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJu
IEludE91dHNldHMoKTsgfQorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlciYpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisjZW5kaWYKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAg
ICAgZW51bSBjbGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcg
fTsKICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6
OlRlc3RPdXRwdXQpIGNvbnN0OwogCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJl
IFNWRyBzcGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlLgotICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ1NjE0LgotICAgIGJvb2wgaGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWDsgfQot
ICAgIHZvaWQgc2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBi
b29sIGhhc1koKSBjb25zdCB7IHJldHVybiBtX2hhc1k7IH0KLSAgICB2b2lkIHNldEhhc1koYm9v
bCB2YWx1ZSkgeyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzV2lkdGg7IH0KLSAgICB2b2lkIHNldEhhc1dpZHRoKGJvb2wgdmFsdWUp
IHsgbV9oYXNXaWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkg
eyBtX2hhc0hlaWdodCA9IHZhbHVlOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0K
LSAgICB2b2lkIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotCi0gICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJp
ZXMoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICB2b2lkIHNldEVm
ZmVjdEJvdW5kYXJpZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZm
ZWN0Qm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICAKLSAgICB2b2lkIHNldFVu
Y2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2Fic29sdXRl
VW5jbGlwcGVkU3VicmVnaW9uID0gcjsgfQotICAgIAotICAgIEZsb2F0UG9pbnQgbWFwUG9pbnRG
cm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCkgY29uc3Q7Ci0gICAgCi0gICAgVHlwZSBm
aWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckVmZmVjdENsYXNz
VHlwZTsgfQotCi0gICAgRmlsdGVyJiBmaWx0ZXIoKSB7IHJldHVybiBtX2ZpbHRlcjsgfQotICAg
IGNvbnN0IEZpbHRlciYgZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXI7IH0KLQotICAg
IGJvb2wgY2xpcHNUb0JvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcHNUb0JvdW5kczsgfQot
ICAgIHZvaWQgc2V0Q2xpcHNUb0JvdW5kcyhib29sIHZhbHVlKSB7IG1fY2xpcHNUb0JvdW5kcyA9
IHZhbHVlOyB9Ci0KLSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0gY29sb3JTcGFjZTsg
fQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzdWx0Q29sb3JTcGFjZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRS
ZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkg
eyBtX3Jlc3VsdENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQpIHsg
aW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsgfQot
ICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKTsKLSAgICAKLSAgICBzdGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRz
KGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxmbG9h
dD4gbm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBub3JtYWxpemVkVmFs
dWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7Ci0gICAgICAgIHJldHVybiBub3Jt
YWxpemVkVmFsdWVzOwotICAgIH0KLQogcHJvdGVjdGVkOgotICAgIEZpbHRlckVmZmVjdChGaWx0
ZXImLCBUeXBlKTsKLSAgICAKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBj
b25zdCA9IDA7Ci0KLSAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdp
bGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAg
IC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBo
YV0uCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkg
eyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hl
Y2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAg
ICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci0KLSAgICB2b2lkIGNsaXBB
YnNvbHV0ZVBhaW50UmVjdCgpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSA9IDA7CisgICAgRmlsdGVyRWZmZWN0KFR5cGUpOwogCi0gICAgdm9p
ZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lk
IGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3Rp
bmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJU
b0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBj
b25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25h
bDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0gICAgCi0KLSAgICBGaWx0ZXImIG1f
ZmlsdGVyOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKLQotICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50UmVj
dCBtX2Fic29sdXRlUGFpbnRSZWN0OwotICAgIAotICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgb2Yg
YSBmaWx0ZXIgcHJpbWl0aXZlLiBJbiBTVkcgdGhpcyBpcyB0aGUgcHJpbWl0aXZlIHN1YnJlZ2lv
biBpbiBhYnNvbHV0ZSBjb29yZGluYXRlIHNwYWNlLgotICAgIC8vIFRoZSBhYnNvbHV0ZSBwYWlu
dCByZWN0IHNob3VsZCBuZXZlciBiZSBiaWdnZXIgdGhhbiBtX21heEVmZmVjdFJlY3QuCi0gICAg
RmxvYXRSZWN0IG1fbWF4RWZmZWN0UmVjdDsKICAgICAKLSAgICAvLyBUaGUgc3VicmVnaW9uIG9m
IGEgZmlsdGVyIHByaW1pdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIFNWRyBGaWx0ZXIgc3BlY2lmaWNh
dGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBUaGlzIGlzIFNWRyBzcGVjaWZpYyBh
bmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KLSAg
ICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247CisgICAgRmlsdGVyQm91bmRh
cnlTZXQgbV9ib3VuZGFyeVNldDsKIAotICAgIC8vIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgb2Yg
dGhlIGFjdHVhbCBTVkdGRSpFbGVtZW50LiBJcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJy
ZWdpb24gb2YgdGhlCi0gICAgLy8gZmlsdGVyIHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0ZXAuCi0g
ICAgRmxvYXRSZWN0IG1fZWZmZWN0Qm91bmRhcmllczsKLSAgICAKLSAgICAvLyBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24gbWFwcGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlw
cGluZy4KLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKKyAgICBS
ZWZQdHI8RmlsdGVySW1hZ2U+IG1fZmlsdGVySW1hZ2U7CiAKLSAgICBib29sIG1fYWxwaGFJbWFn
ZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNZ
IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzV2lkdGggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9o
YXNIZWlnaHQgeyBmYWxzZSB9OwotCi0gICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBp
dHMgcHJpbWl0aXZlIHJlZ2lvbiwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9u
IG9mIGl0cyBpbnB1dHMuCi0gICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07Ci0KLSNp
ZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgRGVzdGlu
YXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6TGluZWFyU1JHQigpIH07Ci0jZWxzZQogICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBt
X29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9Owot
I2VuZGlmCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Ci0gICAgCi0gICAgY29uc3QgVHlwZSBtX2Zp
bHRlckVmZmVjdENsYXNzVHlwZTsKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBGaWx0ZXJFZmZlY3QmKTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OkZpbHRlckVmZmVjdCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi5pc0ZpbHRlckVm
ZmVjdCgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNkZWZpbmUgU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKENsYXNzTmFtZSkgXAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVj
dC5maWx0ZXJUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDbGFzc05hbWU7
IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oCmluZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3NWE3NTczZTljYzQuLjgz
NzFhYTIwZjIwZjc0ZDBlZmFlMGI2NTY2OGY0ODExMGRjMTQ2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgKQEAgLTM2LDE3ICszNiwxNyBAQCBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5k
ZXJlciB7CiAgICAgCiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJF
ZmZlY3RSZW5kZXJlcj4gdHJ5Q3JlYXRlKGJvb2wsIEZpbHRlckVmZmVjdCYpOwotICAgIHZpcnR1
YWwgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseUVmZmVjdHMoY29uc3QgRmlsdGVyJiwgRmlsdGVyRWZmZWN0JikgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbWFnZUJ1ZmZl
ciogb3V0cHV0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNv
bnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXN0
UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyUmVzdWx0KCkgPSAwOwogICAgIAogICAgIHZpcnR1YWwgfkZpbHRl
ckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0OwogICAgIAogcHJvdGVjdGVkOgogICAgIEZpbHRl
ckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0OwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJUb0lt
YWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9J
bWFnZUJ1ZmZlcihjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSA9IDA7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmNWJi
MTU2MzgxZGVjMWUwYmFjMjJkOTExOWMyZTBlZDgwZTRhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNw
cApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5o
IgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbihUeXBlIGZpbHRlclR5
cGUpCisgICAgOiBtX2ZpbHRlclR5cGUoZmlsdGVyVHlwZSkKK3sKK30KKworc3RhdGljIGlubGlu
ZSBjb25zdCBhdXRvJiBmaWx0ZXJOYW1lcygpCit7CisgICAgdXNpbmcgRmlsdGVyTmFtZU1hcCA9
IEhhc2hNYXA8RmlsdGVyRnVuY3Rpb246OlR5cGUsIEF0b21TdHJpbmcsIFdURjo6SW50SGFzaDxG
aWx0ZXJGdW5jdGlvbjo6VHlwZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8RmlsdGVyRnVu
Y3Rpb246OlR5cGU+PjsKKworICAgIHN0YXRpYyBhdXRvIGZpbHRlck5hbWVzID0gbWFrZU5ldmVy
RGVzdHJveWVkKFtdIHsKKyAgICAgICAgRmlsdGVyTmFtZU1hcCBmaWx0ZXJOYW1lcyA9IHsKKyAg
ICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlciwgICAgICAgICAgICJD
U1NGaWx0ZXIiX3MgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpTVkdGaWx0ZXIsICAgICAgICAgICAiU1ZHRmlsdGVyIl9zICAgICAgICAgICB9LAorICAg
ICAgICAgICAgCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kLCAg
ICAgICAgICAgICAiRkVCbGVuZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb2xvck1hdHJpeCwgICAgICAgIkZFQ29sb3JNYXRyaXgiX3Mg
ICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50
VHJhbnNmZXIsICJGRUNvbXBvbmVudFRyYW5zZmVyIl9zIH0sCisgICAgICAgICAgICB7IEZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0ZSwgICAgICAgICAiRkVDb21wb3NpdGUiX3MgICAg
ICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1h
dHJpeCwgICAgIkZFQ29udm9sdmVNYXRyaXgiX3MgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLCAgICJGRURpZmZ1c2VMaWdodGluZyJf
cyAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVu
dE1hcCwgICAiRkVEaXNwbGFjZW1lbnRNYXAiX3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVEcm9wU2hhZG93LCAgICAgICAgIkZFRHJvcFNoYWRvdyJfcyAgICAg
ICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRmxvb2QsICAgICAg
ICAgICAgICJGRUZsb29kIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1ciwgICAgICAiRkVHYXVzc2lhbkJsdXIiX3MgICAg
ICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZSwgICAgICAg
ICAgICAgIkZFSW1hZ2UiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFTWVyZ2UsICAgICAgICAgICAgICJGRU1lcmdlIl9zICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3ksICAg
ICAgICAiRkVNb3JwaG9sb2d5Il9zICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVPZmZzZXQsICAgICAgICAgICAgIkZFT2Zmc2V0Il9zICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFU3BlY3VsYXJMaWdodGlu
ZywgICJGRVNwZWN1bGFyTGlnaHRpbmciX3MgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRVRpbGUsICAgICAgICAgICAgICAiRkVUaWxlIl9zICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLCAgICAg
ICAgIkZFVHVyYnVsZW5jZSJfcyAgICAgICAgfSwKKworICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6U291cmNlQWxwaGEsICAgICAgICAgIlNvdXJjZUFscGhhIl9zICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUdyYXBoaWMsICAg
ICAgICJTb3VyY2VHcmFwaGljIl9zICAgICAgIH0KKworICAgICAgICB9OworICAgICAgICByZXR1
cm4gZmlsdGVyTmFtZXM7CisgICAgfSgpKTsKKyAgICAKKyAgICByZXR1cm4gZmlsdGVyTmFtZXMu
Z2V0KCk7Cit9CisKK2NvbnN0IEF0b21TdHJpbmcmIEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1l
KFR5cGUgZmlsdGVyVHlwZSkKK3sKKyAgICBhdXRvIGl0ID0gZmlsdGVyTmFtZXMoKS5maW5kKGZp
bHRlclR5cGUpOworICAgIEFTU0VSVChpdCAhPSBmaWx0ZXJOYW1lcygpLmVuZCgpKTsKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjA2NThjYmEwOWNhMWYwYzdiNDc0NDc0OWU4MDE4MWU3YzE4NTQ4
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZpbHRlcjsKKworY2xhc3MgRmlsdGVyRnVuY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRl
ZDxGaWx0ZXJGdW5jdGlvbj4geworcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4
X3QgeworICAgICAgICBDU1NGaWx0ZXIsCisgICAgICAgIFNWR0ZpbHRlciwKKworICAgICAgICBG
RU1pbmltdW0sCisKKyAgICAgICAgRkVCbGVuZCA9IEZFTWluaW11bSwKKyAgICAgICAgRkVDb2xv
ck1hdHJpeCwKKyAgICAgICAgRkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgRkVDb21wb3Np
dGUsCisgICAgICAgIEZFQ29udm9sdmVNYXRyaXgsCisgICAgICAgIEZFRGlmZnVzZUxpZ2h0aW5n
LAorICAgICAgICBGRURpc3BsYWNlbWVudE1hcCwKKyAgICAgICAgRkVEcm9wU2hhZG93LAorICAg
ICAgICBGRUZsb29kLAorICAgICAgICBGRUdhdXNzaWFuQmx1ciwKKyAgICAgICAgRkVJbWFnZSwK
KyAgICAgICAgRkVNZXJnZSwKKyAgICAgICAgRkVNb3JwaG9sb2d5LAorICAgICAgICBGRU9mZnNl
dCwKKyAgICAgICAgRkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBGRVRpbGUsCisgICAgICAg
IEZFVHVyYnVsZW5jZSwKKyAgICAgICAgU291cmNlQWxwaGEsCisgICAgICAgIFNvdXJjZUdyYXBo
aWMsCisKKyAgICAgICAgRkVNYXhpbXVtID0gU291cmNlR3JhcGhpYworICAgIH07CisKKyAgICBG
aWx0ZXJGdW5jdGlvbihUeXBlKTsKKyAgICB2aXJ0dWFsIH5GaWx0ZXJGdW5jdGlvbigpID0gZGVm
YXVsdDsKKworICAgIFR5cGUgZmlsdGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlw
ZTsgfQorCisgICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlw
ZSA9PSBUeXBlOjpDU1NGaWx0ZXI7IH0KKyAgICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6OlNWR0ZpbHRlcjsgfQorICAgIGJvb2wgaXNGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGUgPT0gVHlwZTo6Q1NTRmlsdGVyIHx8IG1f
ZmlsdGVyVHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmlsdGVyRWZmZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID49IFR5cGU6OkZFTWluaW11bSAmJiBtX2Zp
bHRlclR5cGUgPD0gVHlwZTo6RkVNYXhpbXVtOyB9CisKKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgZmlsdGVyTmFtZShUeXBlKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgc291
cmNlQWxwaGFOYW1lKCkgeyByZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VBbHBoYSk7IH0K
KyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgc291cmNlR3JhcGhpY05hbWUoKSB7IHJldHVy
biBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUdyYXBoaWMpOyB9CisgICAgY29uc3QgQXRvbVN0cmlu
ZyYgZmlsdGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZpbHRlck5hbWUobV9maWx0ZXJUeXBlKTsg
fQorCisgICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07
IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJikgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGaWx0ZXJJbWFnZSgpIHsgfQorCitwcml2YXRlOgor
ICAgIFR5cGUgbV9maWx0ZXJUeXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Cisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpGRUZsb29kLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVH
YXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUlt
YWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTIwNmY5Mjc4OGI1NGRkYmNjMWJjODRm
ZjNmMDQ5OTNiOWYyY2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSw0MDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24u
aD4KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9B
Y2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8Rmls
dGVySW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29s
b3JTcGFjZSkKK3sKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhs
b2dpY2FsU2l6ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsdGVySW1hZ2UocHJpbWl0
aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgbG9naWNhbFNpemUsIHJlbmRl
cmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkpOworfQorCitGaWx0ZXJJbWFn
ZTo6RmlsdGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0
IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKKyAgICA6
IG1fcHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikKKyAgICAsIG1faW1hZ2VS
ZWN0KGltYWdlUmVjdCkKKyAgICAsIG1faXNBbHBoYUltYWdlKGlzQWxwaGFJbWFnZSkKKyAgICAs
IG1fbG9naWNhbFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVy
aW5nTW9kZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAs
IG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVySW1h
Z2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBtX3JlbmRlcmluZ01vZGUsIG1fcmVzb2x1dGlvblNj
YWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdl
QnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgcmVjdCB7IElu
dFBvaW50Ojp6ZXJvKCksIEludFNpemUobV9sb2dpY2FsU2l6ZSkgfTsKKworICAgIGlmIChwaXhl
bEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQor
ICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxz
ZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxC
dWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCBy
ZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCitzdGF0aWMgdm9p
ZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6
ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNp
emUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGgg
PSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgp
OworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBk
ZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwor
CisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNv
dXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlucHV0U2l6ZS5hcmVhKCkgKiA0KTsKKyAgICB1aW50OF90
KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxl
IChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29t
cG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAq
IGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19j
YXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0g
NDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30K
Kworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93
Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsK
KyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5w
dXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5k
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1h
Z2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAg
IGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSBy
b3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5h
dGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291
cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBz
b3VyY2VDb21wb25lbnQgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5wdXRTaXplLmFyZWEoKSAq
IDQpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0
YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFs
cGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhh
OworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFs
cGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4mIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxC
dWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZp
bHRlckltYWdlOjpwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0
KQoreworICAgIGF1dG8mIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZv
cm1hdCk7CisgICAgaWYgKHBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVy
LnZhbHVlKCk7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2NvbG9yU3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0g
aW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBJbnRTaXpl
KG1fbG9naWNhbFNpemUpIH0pOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsK
KyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzY2FsZWRTaXplKG1fbG9naWNhbFNpemUpOworICAg
IEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKKyAg
ICBzY2FsZWRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHBpeGVsQnVmZmVy
ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHNjYWxlZFNpemUpOworICAgIGlmICgh
cGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAg
ICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVVucHJl
bXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+
ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXV0byYgc291
cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBo
YShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRT
aXplKTsKKyAgICB9CisKKyAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNp
emUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOworICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxS
ZWNvcmRPdmVyZmxvdz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsK
KyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNv
cHlQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNl
KTsKKyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6OnJlcXVp
cmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8g
VGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBl
eHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNv
bG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlu
cHV0CisgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMK
KyAgICByZXR1cm4gY29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7Cisj
ZWxzZQorICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVl
ZGVkIG9uIG5vbi1DRworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3Qgc2NhbGVkUmVj
dChyZWN0KTsKKyAgICBzY2FsZWRSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAg
IEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fbG9naWNhbFNpemUpOworICAgIHNjYWxlZFBhaW50
U2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBk
ZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQg
YnkgdGhlIHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3Qu
eSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8
IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQorICAgICAgICBt
ZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAg
ICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhl
IHNvdXJjZS4KKyAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkgPD0gMCB8fCBzY2FsZWRSZWN0Lm1h
eFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8
IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKKyAgICBpbnQgeERlc3Qg
PSAwOworICAgIGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwor
ICAgICAgICB4T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSBzY2FsZWRSZWN0Lm1h
eFgoKTsKKyAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQorICAgICAgICB4
RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7CisKKyAgICBpbnQgeU9yaWdpbiA9IHNjYWxl
ZFJlY3QueSgpOworICAgIGludCB5RGVzdCA9IDA7CisgICAgaWYgKHlPcmlnaW4gPCAwKSB7Cisg
ICAgICAgIHlEZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlPcmlnaW4gPSAwOworICAgIH0KKyAg
ICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOworICAgIGlmICh5RW5kID4gc2NhbGVkUGFp
bnRTaXplLmhlaWdodCgpKQorICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgp
OworCisgICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAgICBpbnQgZGVzdGlu
YXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNvdXJjZVNj
YW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVkUmVjdC53
aWR0aCgpKSArIHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBz
b3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpICsgeE9y
aWdpbikgKiA0OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNw
eShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0
aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0g
c291cmNlU2NhbmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNl
KSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFt
cGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGgg
dGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb24KKyAgICBhdXRvIGNvbnZlcnRlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9y
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYg
KCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdp
bmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1
ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAg
UGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgY29sb3JTcGFjZSB9OworICAgIHJldHVybiBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4
ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4g
RmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xv
clNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCks
IHBpeGVsQnVmZmVyLnNpemUoKSk7CisgICAgcmVjdC5zY2FsZSgxIC8gbV9yZXNvbHV0aW9uU2Nh
bGUpOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6
ZShyZWN0LnNpemUoKSk7CisKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUg
aW5jb21pbmcgUGl4ZWxCdWZmZXIKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNv
bHV0aW9uU2NhbGUsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAo
IWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VC
dWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gZ2V0
Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29s
b3JTcGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xv
clNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZm
ZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1h
dCkudmFsdWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAg
IGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkp
IHsKKyAgICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2Ug
YnVmZmVyLgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklm
RXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVy
bygpLCBJbnRTaXplKG1fbG9naWNhbFNpemUpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
Y29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGFscGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAg
IGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9u
LCBzcmNSZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9y
bWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3Bh
Y2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVy
dGVkUGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQor
ICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwg
ZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29w
eUltYWdlQnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOwor
fQorCit2b2lkIEZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkK
K3sKKyAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIg
Zm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlw
bGllZFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJh
eSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAg
dWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJy
YXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZv
dXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4
ZWxBcnJheUxlbmd0aCAlIDQpKTsKKworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAg
ICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4
ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8g
eworICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCisgICAgICAgICAg
ICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAg
ICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFs
WzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZh
bFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFsz
XSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5Q
aXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICB2c3Q0cV91
OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOworICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0
OworICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBp
eGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKKyAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaW50IG51bVBpeGVscyA9
IHBpeGVsQXJyYXlMZW5ndGggLyA0OworCisgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWws
IGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3Nh
cnkKKyAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0
aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAorICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSAr
IDMpOworICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3Jl
bWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKKyAgICAgICAgICAgICAgICAq
cGl4ZWxEYXRhID0gYTsKKyAgICAgICAgICAgICsrcGl4ZWxEYXRhOworICAgICAgICB9CisgICAg
ICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKKyAgICAgICAgKytwaXhlbERhdGE7CisgICAgfQor
fQorCit2b2lkIEZpbHRlckltYWdlOjp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMg
Y29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29s
b3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xvclNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlh
bGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8g
Y29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQg
YXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkK
KyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb2xvclNwYWNlKTsK
KworICAgIG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZl
ciA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDc0YTI2OWVhNTgwZTczNGYwZmJhY2YxYzlkMDE1NDE2YWZl
NWM0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1
ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZpbHRlckltYWdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0
ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3Vi
cmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVTdWJyZWdpb247IH0KKyAgICBGbG9h
dFJlY3QgaW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZVJlY3Q7IH0KKyAgICBib29s
IGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbHBoYUltYWdlOyB9CisKKyAgICBG
bG9hdFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Cisg
ICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZl
cklmRXhpc3RzKCkgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBp
bWFnZUJ1ZmZlcigpOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVm
ZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxs
b3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZv
aWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3Jt
VG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmls
dGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgaW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9y
U3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPikgY29u
c3Q7CisgICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25z
dDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZl
cihJbWFnZUJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBt
X3ByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGbG9hdFJlY3QgbV9pbWFnZVJlY3Q7CisgICAgYm9v
bCBtX2lzQWxwaGFJbWFnZSB7IGZhbHNlIH07CisKKyAgICBGbG9hdFNpemUgbV9sb2dpY2FsU2l6
ZTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBmbG9hdCBtX3Jlc29s
dXRpb25TY2FsZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworCisg
ICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7CisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKaW5kZXggOTRkMTk1MDEzOWQ2ZDI0M2E4NjYx
ZTVlYTU1ZDIzNWE3Mzg5ZjVkNS4uZjE5MTcxZmY4NGU5MDQ5MjcyNjJlYWQxMWFjNDFlMDgzYzU4
ZWZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9MaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvTGlnaHRTb3VyY2UuaApAQCAtMzgsNiArMzgsNyBAQCBlbnVtIExpZ2h0VHlwZSB7CiAg
ICAgTFNfU1BPVAogfTsKIAorY2xhc3MgRmlsdGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OwogCiBj
bGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpZ2h0U291cmNlPiB7CkBAIC02
NSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBMaWdodFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSA9IDA7CiAgICAgLy8geiBpcyBhIGZsb2F0IG51
bWJlciwgc2luY2UgaXQgaXMgdGhlIGFscGhhIHZhbHVlIHNjYWxlZCBieSBhIHVzZXIKICAgICAv
LyBzcGVjaWZpZWQgInN1cmZhY2VTY2FsZSIgY29uc3RhbnQsIHdoaWNoIHR5cGUgaXMgPG51bWJl
cj4gaW4gdGhlIFNWRyBzdGFuZGFyZC4KICAgICAvLyB4IGFuZCB5IGFyZSBpbiB0aGUgY29vcmRp
bmF0ZXMgb2YgdGhlIEZpbHRlckVmZmVjdCdzIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2Uu
Y3BwCmluZGV4IDFhYjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIuLmU5YjNl
NTMxY2I1OTRlNTVhOGI5ZWYwNTMzZTQzNGY3NTk1NTJiODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcApAQCAtMzYsMTEgKzM2LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYg
ZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKQordm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZp
bHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKIHsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZ
KGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBv
c2l0aW9uLnh5KCkpKTsKKyAgICBhdXRvJiBpbWFnZSA9ICpmaWx0ZXJFZmZlY3QuZmlsdGVySW1h
Z2UoKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGltYWdlLmltYWdlUmVjdCgpOworICAgIGF1dG8g
cHJpbWl0aXZlU3VicmVnaW9uID0gaW1hZ2UucHJpbWl0aXZlU3VicmVnaW9uKCk7CisKKyAgICBt
X2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlci5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZl
cihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCksIGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9u
KSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3Bh
Y2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBl
ZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJT
cGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBv
c2l0aW9uLnkoKSB9KTsKKyAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXIubWFwUG9pbnRG
cm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNw
YWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9LCBpbWFnZVJlY3QsIHBy
aW1pdGl2ZVN1YnJlZ2lvbik7CiAgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgp
IC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCmluZGV4
IDY3YTNhMGJkMzlhOGE5Y2MxOTU0MzQ5ODU5NmQ3MTE1ZjRiYjk1YTUuLmFkZWJmOTZhYTMxMjdl
ZTQ1ZWZhODcwOTNkMzJkZWRjMWJhYzdhNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCkBAIC0z
OSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFkoZmxvYXQpIG92ZXJyaWRlOwogICAg
IGJvb2wgc2V0WihmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEo
Y29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAgdm9pZCBp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpIG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhl
bExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHop
IGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRl
eCA3NjQ5ZjA1OGFjODY5YjU1NGFmMGRjNTA3ZmZmOTA5MGFkNmNmM2EzLi4zN2QzOGIxODk4Zjk0
M2QyMmMxN2Y2NWM3MjlhMTZmOTk0MzVhYjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtMjMsMTAg
KzIzLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzUsMzIgKzMyLDM4IEBAIFJlZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6
OmNyZWF0ZShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3QpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYg
U291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQorU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRl
ckVmZmVjdCYgc291cmNlRWZmZWN0KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6
VHlwZTo6U291cmNlQWxwaGEpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUFscGhhIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CisgICAg
c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VFZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKKyAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQoJnNvdXJjZUVmZmVjdCk7CiB9CiAKLXZvaWQg
U291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBTb3Vy
Y2VBbHBoYTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVj
dCYpIGNvbnN0CiB7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMCktPmFic29sdXRl
UGFpbnRSZWN0KCkpOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJ
bWFnZSgpOworICAgIHJldHVybiBpbnB1dC5pbWFnZVJlY3QoKTsKIH0KIAotdm9pZCBTb3VyY2VB
bHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgU291cmNlQWxwaGE6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBJbWFnZUJ1ZmZlciog
cmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0
SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRl
eHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZm
ZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgp
OworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAo
IWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1h
Z2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gZmlsdGVyLnNjYWxl
ZFJlY3RCeUZpbHRlclNjYWxlKGlucHV0LmltYWdlUmVjdCgpKTsKIAotICAgIEltYWdlQnVmZmVy
KiBpbWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0KDApLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAg
IGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBvdXRwdXRJbWFnZS0+Y29u
dGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCB7IHsgfSwgaW5wdXRJbWFnZVJlY3Quc2l6ZSgpIH0s
IENvbG9yOjpibGFjayk7CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoKmlucHV0SW1hZ2UsIEludFBvaW50KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlv
bkluKTsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3Qs
IENvbG9yOjpibGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIFNvdXJjZUFscGhhOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CkBA
IC02OSwxMSArNzIsNCBAQCBUZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeQogICAgIHJldHVybiB0czsK
IH0KIAotU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0
KQotICAgIDogRmlsdGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0ZXIoKSwgVHlwZTo6U291cmNl
QWxwaGEpCi17Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VFZmZlY3Qub3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQoJnNvdXJjZUVmZmVj
dCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA2NjI5YTM2
N2ZkNDMyNDJkMWM0YWFkZTY0YzU2MWU4NjRhMzk0OTBmLi45NGZhNTZmNTJiODQ2ZTYzYWFkMjll
YTRkNmY1MTk4ZmJkMDAxODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0xNyw4ICsxNyw3IEBACiAgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUFscGhhX2gK
LSNkZWZpbmUgU291cmNlQWxwaGFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJF
ZmZlY3QuaCIKIApAQCAtMjgsMTkgKzI3LDE2IEBAIGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKICAgICBzdGF0aWMgUmVmPFNvdXJjZUFs
cGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmlu
ZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1l
KCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKTsgfQogCiBwcml2YXRl
OgogICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVm
ZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRl
ckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KLQotICAgIHZvaWQgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92
ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAog
fSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBTb3VyY2VBbHBoYV9oCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoU291cmNlQWxwaGEpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmNwcAppbmRleCA4OGEzNmE0MTAyNmJkM2E1ODU0NDc4MjAyNzRjMTEwN2Q3ODM5MmU5Li40NTJl
NjQ3NGZkY2VlYTkzMWRiYjk4ZmZiNWJiMDZhOWRkODNkY2NhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5j
cHAKQEAgLTIyLDQyICsyMiwzOSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1SZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhpYzo6Y3JlYXRlKEZpbHRlciYgZmls
dGVyKQorUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYyhmaWx0ZXIpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKCkpOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBT
b3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkKK1NvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMo
KQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OlNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUo
IlNvdXJjZUdyYXBoaWMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAg
cmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgU291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1h
Z2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAogewot
ICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50
UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBwYWludFJlY3Quc2NhbGUoZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigp
LmhlaWdodCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBh
aW50UmVjdCkpOworICAgIHJldHVybiBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCk7CiB9CiAKLXZv
aWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgU291cmNlR3Jh
cGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAg
IEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgYXV0byogb3V0cHV0ID0gZmls
dGVySW1hZ2UoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNv
dXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAg
ICAgIHJldHVybjsKKyAgICBhdXRvKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgp
OworICAgIGlmICghc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9p
bnQoKSk7CisgICAgYXV0byogb3V0cHV0SW1hZ2UgPSBvdXRwdXQtPmltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG91
dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9p
bnQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhl
ZjIxMDZiN2ZjYTViZi4uYjFjMTNiMWM5OGYyNzgyYzUzYmQ3ZjVhM2U4OWI1MzdjOTYwN2M5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmgKQEAgLTE4LDQxICsxOCwyNiBAQAogICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291
cmNlR3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgot
I2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJj
ZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0
YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8
U291cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYg
ZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkg
eyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VHcmFwaGljTmFtZSgpOyB9CiAKIHByaXZhdGU6
Ci0gICAgU291cmNlR3JhcGhpYyhGaWx0ZXImIGZpbHRlcikKLSAgICAgICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpTb3VyY2VHcmFwaGljKQotICAgIHsKLSAgICAgICAgc2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgfQorICAg
IFNvdXJjZUdyYXBoaWMoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7IH0KLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmls
dGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRl
OwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgRmlsdGVy
RWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmls
dGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0OyB9CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUK
IAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFwaGljKQot
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVj
dCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQotCi0KLSNlbmRpZiAvLyBTb3VyY2VHcmFwaGljX2gKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChTb3VyY2VHcmFwaGljKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3Bw
CmluZGV4IDcxNjA3YWIwMGZmOWQ2YTZkMDE2OTFkOWJiYjg1NTNkMWYzNDhkMDAuLjY1N2IxOGQ2
ODhlY2NiMTUyYmQwMjBhYTY2YTU5NzI0NTdhMDhkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5j
cHAKQEAgLTQxLDExICs0MSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBhY2NvcmRpbmcg
dG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cwogc3RhdGljIGNvbnN0IGZs
b2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOwogCi12b2lkIFNwb3RMaWdodFNvdXJjZTo6
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZl
Y3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewotICAgIG1fYnVmZmVyUG9zaXRpb24u
c2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNw
YWNlUG9zaXRpb24ueHkoKSkpOworICAgIGF1dG8mIGltYWdlID0gKmZpbHRlckVmZmVjdC5maWx0
ZXJJbWFnZSgpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW1hZ2UuaW1hZ2VSZWN0KCk7CisgICAg
YXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBpbWFnZS5wcmltaXRpdmVTdWJyZWdpb24oKTsKKyAg
ICAKKyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlci5tYXBQb2ludEZyb21Vc2VyU3Bh
Y2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCksIGltYWdlUmVjdCwgcHJpbWl0aXZl
U3VicmVnaW9uKSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20g
bV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBv
aW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
eyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKKyAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXIu
bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSAr
IG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9LCBpbWFn
ZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiAgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1h
cHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwogICAgIAogICAgIHBhaW50aW5nRGF0
YS5kaXJlY3Rpb25WZWN0b3IgPSBtX3VzZXJTcGFjZVBvaW50c0F0IC0gbV91c2VyU3BhY2VQb3Np
dGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmluZGV4IDM1MTUxNjM1MDc3ZWVmMGU3M2MyNmFlNDQy
YTVlYTUzNGZkMWYzYmYuLmZlM2YyZjNmYzliNTg4YWJmNDI4YmU5ZGU2ZjM2NzkxMzZiOTNiZDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9TcG90TGlnaHRTb3VyY2UuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNldExpbWl0
aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFp
bnRpbmdEYXRhJikgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgY29tcHV0ZVBp
eGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQg
eikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcAppbmRleCA5YWVhNWYxYzA3MmMw
OWJmMDYzZjQ5OTllMDNiMjE5ZTg1ZDdlMmQ5Li5kNjdiMjliNTFjNzkxZTUyMTVlYjk4OTc1ZmQ5
Y2ViNmFjNGZjMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VDb2NvYS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiTGliV2ViUlRDQXVkaW9Gb3JtYXQuaCIKKyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01v
ZHVsZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9u
L01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IDlkNmMyY2RkMDVmOTQ5YjYz
NGNhZmExN2FjMTdkYjVjMDJiNWI2MTEuLmJlNzFjNmI0MGYxNzRkMzAxNWY0ODEwM2Q0MDk2Yzgx
MTFmNjI4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0yNyw5
ICsyNyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAK
LSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3Vt
ZW50UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RkVDb2xvck1hdHJpeC5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNs
dWRlICJGRURyb3BTaGFkb3cuaCIKQEAgLTM4LDQ1ICszNSwxODIgQEAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3RSZW5kZXJlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZWZl
cmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5j
bHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1
ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNv
dXJjZUdyYXBoaWMuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLQotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0
ZSgpCitSZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxl
RmFjdG9yLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9
IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgYm9vbCBoYXNGaWx0
ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFz
RmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKKworICAgIGF1
dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBDU1NGaWx0ZXIoaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzLCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgc2Nh
bGVGYWN0b3IsIGNsaXBPcGVyYXRpb24pKTsKKworICAgIGZpbHRlci0+c2V0UmVuZGVyaW5nTW9k
ZShyZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1cm4gZmlsdGVyOwogfQogCi1DU1NGaWx0ZXI6OkNT
U0ZpbHRlcigpCi0gICAgOiBGaWx0ZXIoRmxvYXRTaXplIHsgMSwgMSB9KQotICAgICwgbV9zb3Vy
Y2VHcmFwaGljKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgqdGhpcykpCitDU1NGaWx0ZXI6OkNTU0Zp
bHRlcihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IsIENsaXBP
cGVyYXRpb24gY2xpcE9wZXJhdGlvbikKKyAgICA6IEZpbHRlcihGaWx0ZXI6OlR5cGU6OkNTU0Zp
bHRlciwgRmxvYXRTaXplIHsgc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yIH0sIGNsaXBPcGVyYXRp
b24pCisgICAgLCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyhoYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMpCisgICAgLCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5
T3JpZ2luKGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKQog
ewogfQogCi1DU1NGaWx0ZXI6On5DU1NGaWx0ZXIoKSA9IGRlZmF1bHQ7CitzdGF0aWMgUmVmUHRy
PEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVmZmVjdChjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9u
JiBibHVyT3BlcmF0aW9uLCBGaWx0ZXI6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKK3sK
KyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRp
b24uc3RkRGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRl
KHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjbGlwT3BlcmF0aW9uID09IEZpbHRlcjo6Q2xp
cE9wZXJhdGlvbjo6VW5pdGUgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsK
K30KIAotR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCgpCitzdGF0aWMg
UmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChjb25zdCBCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bikKIHsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0
KCkgOiBudWxscHRyOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5j
dGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2Zl
ckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxG
dW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFz
dEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFu
c2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJj
ZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZURyb3BT
aGFkb3dFZmZlY3QoY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09w
ZXJhdGlvbikKK3sKKyAgICBmbG9hdCBzdGQgPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlh
dGlvbigpOworICAgIHJldHVybiBGRURyb3BTaGFkb3c6OmNyZWF0ZShzdGQsIHN0ZCwgZHJvcFNo
YWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3Bl
cmF0aW9uLmNvbG9yKCksIDEpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlR3JheVNjYWxlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24m
IGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNs
YW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAg
ICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJz
L2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBv
biBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0g
MC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91
bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAw
LjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAu
OTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAg
ICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAg
IH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQ
RV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZs
b2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUo
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsK
K30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUludmVydEVmZmVjdChjb25z
dCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVu
Y3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQg
PSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
KyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVPcGFjaXR5RWZmZWN0KGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlv
bjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
TElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9u
ZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xv
cGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NT
RmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmls
dGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0
ZXJPcGVyYXRpb24pCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVF
ZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhP
cGVyYXRpb24pCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVyLmVuc3VyZVJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJlci5k
b2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJh
bWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhf
VFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBv
bmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgp
LCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jh
dy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFsZW50CisgICAgLy8gZm9y
IGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFy
YW1ldGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAq
IG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAt
IDAuNzY5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAs
CisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWlu
dXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQg
KiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjgg
LSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1p
bnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5
ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAs
CisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsK
KworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxTVkdG
aWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgUmVmZXJlbmNl
RmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KQoreworICAgIGF1dG8mIHJlZmVyZW5jZWRT
VkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7Cisg
ICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNl
ZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKwog
ICAgIGlmICghZmlsdGVyRWxlbWVudCkgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVy
cywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0
ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRlciByZW5kZXJlciwgYWRkaW5nIHBlbmRpbmcgcmVzb3Vy
Y2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSk7CisgICAgICAgIExPR19XSVRIX1NU
UkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRv
IGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNvdXJjZSAiIDw8IGZpbHRl
ck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKICAgICAgICAgLy8gQWx0aG91Z2ggd2UgZGlkIG5vdCBm
aW5kIHRoZSByZWZlcmVuY2VkIGZpbHRlciwgaXQgbWlnaHQgZXhpc3QgbGF0ZXIgaW4gdGhlIGRv
Y3VtZW50LgogICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBhbm9ueW1vdXMgUmVuZGVyT2Jq
ZWN0cy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTA4NT4KICAgICAgICAgLy8gRklYTUU6IFVu
Y2xlYXIgaWYgdGhpcyBkb2VzIGFueXRoaW5nLgpAQCAtODUsMjMxICsyMTksMTA5IEBAIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIEZpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oJnByZXZpb3VzRWZm
ZWN0KTsKLSAgICBtX3NvdXJjZUFscGhhID0gYnVpbGRlci0+Z2V0RWZmZWN0QnlJZChTb3VyY2VB
bHBoYTo6ZWZmZWN0TmFtZSgpKTsKLQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsK
LSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IHJlZmVyZW5jZUVmZmVjdHM7Ci0KLSAgICBm
b3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCpmaWx0ZXJFbGVtZW50KSkgewotICAgICAgICBlZmZlY3Qg
PSBlZmZlY3RFbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0KCksICp0aGlzKTsKLSAgICAgICAgaWYg
KCFlZmZlY3QpIHsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVk
IHRvIGJ1aWxkIGVmZmVjdCBmcm9tICIgPDwgZWZmZWN0RWxlbWVudCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3Rh
bmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50
LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFS
X1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0
RWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9u
RmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25D
b2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7
Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1
aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOwotICAgICAgICByZWZl
cmVuY2VFZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9lZmZlY3Rz
LmFwcGVuZFZlY3RvcihXVEZNb3ZlKHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAgICByZXR1cm4gZWZm
ZWN0OworICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICByZXR1cm4gU1ZHRmlsdGVy
OjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBm
aWx0ZXIuc291cmNlSW1hZ2VSZWN0KCksIGZpbHRlci5maWx0ZXJSZWdpb24oKSwgcHJldmlvdXNF
ZmZlY3QpOwogfQogCi1ib29sIENTU0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNv
bnN1bWVyKQorYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zKQogewotICAgIG1faGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAg
ICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3Bl
cmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigp
OwotCi0gICAgbV9lZmZlY3RzLmNsZWFyKCk7CisgICAgbV9mdW5jdGlvbnMuY2xlYXIoKTsKICAg
ICBtX291dHNldHMgPSB7IH07CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBwcmV2aW91c0Vm
ZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBw
cmV2aW91c0VmZmVjdCA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgIG1fZnVuY3Rpb25z
LmFwcGVuZCh7ICpwcmV2aW91c0VmZmVjdCB9KTsKKworICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZp
bHRlcjsKKwogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkpIHsKICAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgICAgICBhdXRv
JiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uOwotICAgICAgICBzd2l0Y2ggKGZpbHRlck9w
ZXJhdGlvbi50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5D
RTogewotICAgICAgICAgICAgYXV0byYgcmVmZXJlbmNlT3BlcmF0aW9uID0gZG93bmNhc3Q8UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZm
ZWN0ID0gYnVpbGRSZWZlcmVuY2VGaWx0ZXIocmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCwgcmVm
ZXJlbmNlT3BlcmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdI
VE5FU1M6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJU
X0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZ
U0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBodHRw
czovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNn
cmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFy
YW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0g
ICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwK
LQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAg
IH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywg
RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVy
YXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0gICAg
ICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBkb3Vi
bGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9y
Zy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFsZW50
Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAg
ICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4
OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4z
NDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41
MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9w
ZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJp
eE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVy
cyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkp
IH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZF
Q09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKwor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBlZmZl
Y3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAg
ICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9y
PGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1h
dHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3Zl
KGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFk
b3dFZmZlY3QoZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OklOVkVSVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAg
ICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAg
ICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2Zl
ckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rp
b24pOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NB
TEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExF
X0lOVkVSVF9MSUdIVE5FU1M6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
QVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRl
ci4KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFU
RToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAg
ICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAg
ICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9M
SU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
bnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJU
OgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRvd25jYXN0PEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklH
SFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9w
ZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0g
ICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAg
ICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNP
TlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlv
bjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhp
cywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgor
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2F0dXJhdGVFZmZlY3QoZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAg
ICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAg
ICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlh
dGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJv
cGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZl
Y3QgPSBjcmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1
dG8mIGRyb3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93
OjpjcmVhdGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BT
aGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRv
d09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0
aW9uLmNvbG9yKCksIDEpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVy
KCp0aGlzLCBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBy
ZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0KTsKKyAgICAgICAgICAgIGVmZmVjdCA9IG51bGxwdHI7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAgICAg
ICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVmZmVjdCgpOworICAgICAgICAgICAgZWZmZWN0
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsK
KyAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoZWZmZWN0KSB7
Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywg
ZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAgICAgICAgICAvLyBwcm9wZXJ0eSBh
cHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25z
LgotICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRl
ckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7CiAgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0ZXJPcGVy
YXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07Ci0gICAgICAgICAgICAgICAgbV9lZmZl
Y3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07CisgICAgICAgICAg
ICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogICAgICAgICAgICAgcHJldmlvdXNF
ZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBJZiB3
ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBub3QgdmFs
aWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnVuY3Rpb25zLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9lZmZlY3RzLnNocmlua1Rv
Rml0KCk7CisgICAgbV9mdW5jdGlvbnMuc2hyaW5rVG9GaXQoKTsKIAotICAgIHNldE1heEVmZmVj
dFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0gICAg
aWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVy
RWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFj
Y2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgpKTsK
LSNlbmRpZgorICAgIC8vIFRoaXMgd2lsbCBzZXQgdGhlIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
biBhbmQgbWF4RWZmZWN0UmVjdCBmb3IgdGhlIEZpbHRlckVmZmVjdCBjaGFpbi4KKyAgICBkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
R3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCgpCit7CisgICAgcmV0dXJu
IHNvdXJjZUltYWdlKCkgPyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0cjsKK30K
KwogYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWN0KQogewogICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQpAQCAtMzMxLDUzICsz
NDMsNzIgQEAgdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29u
c3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXgKICAgICBpZiAobV9ncmFwaGljc0J1ZmZl
ckF0dGFjaGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGxvZ2ljYWxTaXplID0gbV9z
b3VyY2VEcmF3aW5nUmVnaW9uLnNpemUoKTsKKyAgICBhdXRvIGxvZ2ljYWxTaXplID0gc291cmNl
SW1hZ2VSZWN0KCkuc2l6ZSgpICogZmlsdGVyU2NhbGUoKTsKKwogICAgIGlmICghc291cmNlSW1h
Z2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXplKSB7CiAj
aWYgVVNFKERJUkVDVDJEKQotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCBmaWx0ZXJT
Y2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KSk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNp
emUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIDEsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKICNlbHNlCiAgICAgICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgUmVuZGVyaW5nTW9kZSBtb2RlID0gbV9m
aWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5nTW9k
ZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxT
aXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVy
OjpjcmVhdGUobG9naWNhbFNpemUsIG1vZGUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKICNlbmRpZgorICAgICAgICBpZiAoYXV0byBjb250
ZXh0ID0gaW5wdXRDb250ZXh0KCkpCisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJT
Y2FsZSgpKTsKICAgICB9CisKICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOwog
fQogCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6Omxhc3RFZmZlY3QoKQoreworICAg
IGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byYgZnVuY3Rpb24gPSBtX2Z1bmN0aW9ucy5sYXN0KCk7CisgICAgaWYgKGZ1bmN0aW9u
LT5pc1NWR0ZpbHRlcigpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5j
dGlvbi5wdHIoKSktPmxhc3RFZmZlY3QoKTsKKworICAgIHJldHVybiBkb3duY2FzdDxGaWx0ZXJF
ZmZlY3Q+KGZ1bmN0aW9uLnB0cigpKTsKK30KKwogdm9pZCBDU1NGaWx0ZXI6OmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCiB7Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZm
ZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC5tYXhF
ZmZlY3RSZWN0KCk7CisgICAgYXV0byBsYXN0RWZmZWN0ID0gdGhpcy0+bGFzdEVmZmVjdCgpOwor
ICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5jYWxjdWxhdGVNYXhQcmltaXRp
dmVTdWJyZWdpb24oKnRoaXMpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBo
YXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0
aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAg
ICAgICAgc2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QuZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAgIEZsb2F0U2l6ZSBm
aWx0ZXJTY2FsZSB7IDEsIDEgfTsKKyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKHN1YlJlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKSkKKyAgICAgICAgc2V0RmlsdGVyU2Nh
bGUoZmlsdGVyU2NhbGUpOwogfQogCiB2b2lkIENTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKCkKIHsKLSAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVzdWx0KCk7Ci0gICAgaWYg
KG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291cmNlQWxwaGEtPmNsZWFyUmVzdWx0KCk7Ci0g
ICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVjdC0+Y2xlYXJS
ZXN1bHQoKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAg
IGZ1bmN0aW9uLT5jbGVhckZpbHRlckltYWdlKCk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjphcHBs
eSgpCitib29sIENTU0ZpbHRlcjo6YXBwbHlGaWx0ZXIoKQogewotICAgIGF1dG8mIGVmZmVjdCA9
IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIpIHsKLSAg
ICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVjdCk7Ci0gICAgICAgIGlm
IChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZWZmZWN0LnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVmZmVjdCgpOworCisg
ICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIpCisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5
RWZmZWN0cygqdGhpcywgKmVmZmVjdCk7CisKKyAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIgfHwg
IW1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgZnVu
Y3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAgICAgICAgaWYgKCFmdW5jdGlvbi0+YXBwbHko
KnRoaXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0K
LSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9
IGVmZmVjdC0+ZmlsdGVySW1hZ2UoKSkgeworICAgICAgICBpbWFnZS0+dHJhbnNmb3JtVG9Db2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBMYXlvdXRSZWN0IENTU0ZpbHRl
cjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0zOTAsMzUgKzQy
MSwyOCBAQCBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRp
cnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZQogICAgIHJldHVybiByZWN0Rm9yUmVwYWlu
dDsKIH0KIAotSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkgY29uc3QKK0ltYWdlQnVm
ZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpCiB7CiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYg
bV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBtX2ZpbHRlclJl
bmRlcmVyLT5vdXRwdXQoKTsKICAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoYXV0byBpbWFnZSA9IGxhc3RFZmZlY3QoKS0+Zmls
dGVySW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIGltYWdlLT5pbWFnZUJ1ZmZlcigpOworICAgIAor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiB2b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQogewotICAgIG1fc291cmNlRHJh
d2luZ1JlZ2lvbiA9IHNvdXJjZUltYWdlUmVjdDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3Vy
Y2VJbWFnZVJlY3QpOwotICAgIHNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOworICAg
IEZpbHRlcjo6c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7CisgICAgRmlsdGVyOjpz
ZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKICAgICBtX2dyYXBoaWNzQnVmZmVy
QXR0YWNoZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3Rz
KGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKK0ludFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRS
ZWN0KCkKIHsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZm
ZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOwotfQotCi1JbnRSZWN0IENTU0ZpbHRl
cjo6b3V0cHV0UmVjdCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0
cy5sYXN0KCkuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0KCkgfHwg
KG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQotICAg
ICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
SW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOwotICAgIAorICAgIGlmIChhdXRvIGltYWdlID0g
bGFzdEVmZmVjdCgpLT5maWx0ZXJJbWFnZSgpKQorICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShpbWFnZS0+aW1hZ2VSZWN0KCkpKTsKICAgICBy
ZXR1cm4geyB9OwogfQogCkBAIC00MzAsOCArNDU0LDkgQEAgSW50T3V0c2V0cyBDU1NGaWx0ZXI6
Om91dHNldHMoKSBjb25zdAogICAgIGlmICghbV9vdXRzZXRzLmlzWmVybygpKQogICAgICAgICBy
ZXR1cm4gbV9vdXRzZXRzOwogCi0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0g
ICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91dHNldHMoKTsKKyAgICBmb3IgKGF1dG8mIGZ1
bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0c2V0cyArPSBmdW5jdGlvbi0+b3V0
c2V0cygpOworCiAgICAgcmV0dXJuIG1fb3V0c2V0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oCmluZGV4IDAwYjkxOTE3YjgwNGM5MmQ5NDA4Yjc1OGUzNzVjMjUyZjI5ZGIw
YzUuLjRjZDEzOTQzMzgwMzI3ZmM1YjYzNjY0MmMwOGVmNzg1ZjA0ZDVhNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKQEAgLTM4LDY5ICszOCw0NyBAQCBjbGFzcyBGaWx0ZXJP
cGVyYXRpb25zOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uOwogY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFNvdXJjZUFscGhhOwogY2xh
c3MgU291cmNlR3JhcGhpYzsKIAotZW51bSBjbGFzcyBGaWx0ZXJDb25zdW1lciB7IEZpbHRlclBy
b3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwotCiBjbGFzcyBDU1NGaWx0ZXIgZmluYWwgOiBwdWJs
aWMgRmlsdGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBmcmllbmQgY2xh
c3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRmlsdGVy
PiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUmVmPENTU0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCBzY2FsZUZhY3RvciA9IDEsIENsaXBP
cGVyYXRpb24gPSBDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QpOwogCiAgICAgdm9pZCBzZXRTb3Vy
Y2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24o
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJS
ZWdpb247IH0KLQotICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsKLQotICAgIGJvb2wg
YnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25z
dW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFw
cGx5KCk7CiAKICAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0
dXJuIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzOyB9CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0
U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFz
RmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW47IH0KIAorICAgIGJv
b2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKICAgICB2
b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEludE91dHNldHMg
b3V0c2V0cygpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIENTU0ZpbHRlcigpOwotICAgIHZpcnR1
YWwgfkNTU0ZpbHRlcigpOwogCi0gICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3NvdXJjZURyYXdpbmdSZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBm
aWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAg
IEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fZmlsdGVyUmVnaW9uOyB9CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgp
OworICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgSW50T3V0c2V0cyBv
dXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0Vm
ZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJik7CisgICAgdm9pZCBjbGVhckludGVybWVk
aWF0ZVJlc3VsdHMoKTsKKyAgICBib29sIGFwcGx5RmlsdGVyKCkgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIHNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCk7CisgICAg
SW50UmVjdCBvdXRwdXRSZWN0KCk7CiAKICAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsKICAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBJbnRSZWN0IG91dHB1
dFJlY3QoKSBjb25zdDsKLQogICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZv
ckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkaXJ0eVJlY3QpOwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsK
LSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247Ci0KLSAgICBWZWN0b3I8UmVmPEZpbHRlckVm
ZmVjdD4+IG1fZWZmZWN0czsKLSAgICBSZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VHcmFwaGlj
OwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fc291cmNlQWxwaGE7Ci0KLSAgICBtdXRhYmxl
IEludE91dHNldHMgbV9vdXRzZXRzOworcHJpdmF0ZToKKyAgICBDU1NGaWx0ZXIoYm9vbCBoYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yLCBDbGlwT3BlcmF0aW9uKTsKIAog
ICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1f
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVy
VGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAgIAor
CisgICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOworCisgICAgbXV0
YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJF
ZmZlY3RSZW5kZXJlcj4gbV9maWx0ZXJSZW5kZXJlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDBjMjY2OTYyOTkxNzRiZDZmZDg5YzYyYjFhMDIy
OTZmYTg5ZTRiZDkuLmY3ZTczYjJmNTAxNDhjZDY2YzJiNjlkZWYxYjE0YTUzOTkyZjA0ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzIyNiw3ICszMjI2
LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKEdyYXBoaWNz
Q29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LAogCiAgICAgYXV0byByb290UmVsYXRpdmVCb3Vu
ZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRG
cm9tUm9vdCwgeyB9KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBh
aW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCBlbmNs
b3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVj
dCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVy
cy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigpLCBlbmNs
b3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRp
bmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVj
dCkpOwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5k
ZXggMjUwYTdkNWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uZWM1MTAxZmNhOTE3
Y2E5ZGM1M2MxNWVmN2IyOTU3NjJmMjNkZjM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTExOCwyMyArMTE4LDExIEBAIHZvaWQg
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKIAogdm9p
ZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBmbG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAg
IGlmICghbV9maWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgp
OwotICAgICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAg
ICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2Ug
aWYgKG1fZmlsdGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1f
ZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5j
bGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgZmlsdGVy
IGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwg
YXR0ZW1wdCB0bwotICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNv
bXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgogICAgIC8vIEZJWE1FOiB0aGlz
IHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5
bGUgZGlkbid0IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJlciwgcmVu
ZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkK
LSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpj
cmVhdGUocmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0
b3IsIEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUpOwogfQogCi1HcmFwaGljc0NvbnRleHQq
IFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVj
dCkKK0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVj
dChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBp
ZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0NSw2ICsxMzMsMTMg
QEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0
KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBib29sIGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3Jl
UmVjdChmaWx0ZXJTb3VyY2VSZWN0KTsKKyAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSB8
fCAhbV9maWx0ZXItPmxhc3RFZmZlY3QoKSkgeworICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZh
aWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0
ZW1wdCB0bworICAgICAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBj
b21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KKyAgICAgICAgaWYgKCFtX2Zp
bHRlci0+YnVpbGQocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmICghZmlsdGVyLmhhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscygpKQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGlydHlSZWN0
OwogICAgIGVsc2UgewpAQCAtMTU5LDggKzE1NCw2IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVy
TGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
CiAgICAgbV9wYWludE9mZnNldCA9IGZpbHRlclNvdXJjZVJlY3QubG9jYXRpb24oKTsKICAgICBy
ZXNldERpcnR5U291cmNlUmVjdCgpOwogCi0gICAgZmlsdGVyLmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpOwotCiAgICAgZmlsdGVyLmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVk
ZWQoZGVzdGluYXRpb25Db250ZXh0KTsKICAgICBhdXRvKiBzb3VyY2VHcmFwaGljc0NvbnRleHQg
PSBmaWx0ZXIuaW5wdXRDb250ZXh0KCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljc0NvbnRleHQg
fHwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoZmlsdGVyLmZpbHRlclJlZ2lvbigpLnNpemUoKSkpCkBAIC0xODQsMTQgKzE3
NywxNiBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpCiAgICAgYXV0byYgZmlsdGVyID0gKm1fZmls
dGVyOwogICAgIGZpbHRlci5pbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwogCi0gICAgZmlsdGVy
LmFwcGx5KCk7CisgICAgZmlsdGVyLmFwcGx5RmlsdGVyKCk7CiAKICAgICAvLyBHZXQgdGhlIGZp
bHRlcmVkIG91dHB1dCBhbmQgZHJhdyBpdCBpbiBwbGFjZS4KLSAgICBMYXlvdXRSZWN0IGRlc3RS
ZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKLSAgICBkZXN0UmVjdC5tb3ZlKG1fcGFpbnRPZmZz
ZXQueCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7CisgICAgYXV0byBkZXN0UmVjdCA9IGZpbHRlci5v
dXRwdXRSZWN0KCk7CiAKLSAgICBpZiAoYXV0byogb3V0cHV0QnVmZmVyID0gZmlsdGVyLm91dHB1
dCgpKQotICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpvdXRwdXRC
dWZmZXIsIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3QsIG1fbGF5ZXIucmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICBpZiAoYXV0byogb3V0cHV0
QnVmZmVyID0gZmlsdGVyLm91dHB1dCgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5z
Y2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRl
clNjYWxlKCkuaGVpZ2h0KCkgfSk7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgZGVzdFJlY3QpOworICAgICAgICBkZXN0aW5hdGlvbkNv
bnRleHQuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIH0KIAogICAgIGZpbHRlci5j
bGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4
NDRjOTE5NDViZjcuLjNhNzQ5OTVmMWY4NGJkOTczZWQyYjg4ZDMwNDM5N2I0YzQ0ZGEwMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTYz
LDcgKzYzLDcgQEAgcHVibGljOgogICAgIC8vIFBlciByZW5kZXIKICAgICBMYXlvdXRSZWN0IHJl
cGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogCi0gICAgR3JhcGhp
Y3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9u
Q29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKKyAgICBH
cmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGlu
YXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXll
clJlcGFpbnRSZWN0KTsKICAgICB2b2lkIGFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXgg
MTk1MDlkOTcxOGFmZjExMGY4NDFlYzQ5NzZmOTdmYjFhOTM0ZDhhNS4uNGNmNDMzMTRiNmEyNDk2
YmRlODkxYjZhY2EyOTJhNjUyMjcwYWVjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTgyLDQwICs4
Miw2IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlbW92ZUNsaWVudEZyb21DYWNo
ZShSZW5kZXJFbGVtZW50JiBjbGllbnQsIGJvb2wKICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0
aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJvdW5kYXJpZXNJbnZhbGlkYXRpb24g
OiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRl
ckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMoU1ZHRmls
dGVyJiBmaWx0ZXIpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50
Q2hpbGROb2RlcyA9IDIwMDsKLSAgICBpZiAoZmlsdGVyRWxlbWVudCgpLmNvdW50Q2hpbGROb2Rl
cygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgp
OwotCi0gICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKLSAgICBhdXRvIGJ1aWxkZXIg
PSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShmaWx0
ZXIpKTsKLSAgICBidWlsZGVyLT5zZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJFbGVtZW50KCkucHJp
bWl0aXZlVW5pdHMoKSk7Ci0gICAgYnVpbGRlci0+c2V0VGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0
Qm91bmRpbmdCb3gpOwotICAgIAotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxkcmVuT2ZU
eXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCgp
KSkgewotICAgICAgICBhdXRvIGVmZmVjdCA9IGVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwg
ZmlsdGVyKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIGJ1aWxkZXItPmNs
ZWFyRWZmZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC5jb3B5
UmVmKCksIGVsZW1lbnQucmVuZGVyZXIoKSk7Ci0gICAgICAgIGVsZW1lbnQuc2V0U3RhbmRhcmRB
dHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRh
cmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVV
bml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCkpOwotICAgICAgICBpZiAoZWxlbWVudC5yZW5kZXJl
cigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQot
ICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQucmVuZGVy
ZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBD
b2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGlu
ZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAg
ICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWxl
bWVudC5yZXN1bHQoKSwgV1RGTW92ZShlZmZlY3QpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxk
ZXI7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250ZXh0
KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2Rl
KQogewogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTEzNyw1MiArMTAzLDM4IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlCiAgICAgaWYgKGZpbHRlckRhdGEtPmJvdW5kYXJpZXMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgdHJh
bnNmb3JtYXRpb24gbWF0cml4IGZvciBmaWx0ZXIuIAotICAgIEFmZmluZVRyYW5zZm9ybSBhYnNv
bHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0
aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKLSAgICBpZiAoIWFic29s
dXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBFbGltaW5hdGUgc2hlYXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJp
eCwgdG8gYmUgYWJsZSB0byBwcm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxl
LgotICAgIGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJh
bnNmb3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9y
bS55U2NhbGUoKSwgMCwgMCk7Ci0KICAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgYm91bmRhcmll
cyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyByZWdpb24uCiAgICAgZmlsdGVyRGF0YS0+
ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgZmlsdGVy
RGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7Ci0g
ICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFyRnJl
ZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbik7Ci0K
LSAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCi0gICAgYm9vbCBwcmltaXRpdmVC
b3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdV
bml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0
YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1
dGVUcmFuc2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZp
bHRlckRhdGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7CiAKLSAgICAv
LyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVzLgotICAgIGZpbHRlckRhdGEt
PmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRlckRhdGEtPmZpbHRlcik7Ci0gICAgaWYg
KCFmaWx0ZXJEYXRhLT5idWlsZGVyKQorICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4KKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVU
cmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zvcm1hdGlvblRv
T3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7CisgICAgaWYgKCFhYnNvbHV0ZVRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8g
RGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1lZGlh
dGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6ZS4K
LSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0ZURyYXdpbmdSZWdpb247Ci0g
ICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKLSAgICB0ZW1wU291cmNlUmVjdC5z
Y2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CisgICAgLy8gRWxpbWluYXRlIHNo
ZWFyIG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIHRvIGJlIGFibGUgdG8g
cHJvZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFnZXMgZm9yIGZlVGlsZS4KKyAgICBGbG9hdFNpemUg
ZmlsdGVyU2NhbGUoYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIGFic29sdXRlVHJhbnNmb3Jt
LnlTY2FsZSgpKTsKIAotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgot
ICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7CisgICAg
Ly8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUgc2l6ZSBvZiBpbnRlcm1l
ZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhhbiBrTWF4RmlsdGVyU2l6
ZS4KKyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyRGF0YS0+ZHJhd2lu
Z1JlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKTsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzID0gMTAwOwotICAgIEZpbHRlckVmZmVjdCogbGFzdEVm
ZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKLSAgICBpZiAoIWxhc3RF
ZmZlY3QgfHwgbGFzdEVmZmVjdC0+dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpID4gbWF4VG90
YWxPZkVmZmVjdElucHV0cykKKyAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCisg
ICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oKTsK
KyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50
KCksICpmaWx0ZXJEYXRhLT5idWlsZGVyLCBmaWx0ZXJTY2FsZSwgZmlsdGVyRGF0YS0+ZHJhd2lu
Z1JlZ2lvbiwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAg
IGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgYXV0byBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwor
ICAgIEFTU0VSVChsYXN0RWZmZWN0KTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlXG4iIDw8ICpm
aWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCkpOwogCi0gICAgbGFzdEVmZmVjdC0+ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lv
biA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKKyAgICBGbG9hdFJlY3Qgc3ViUmVnaW9u
ID0gbGFzdEVmZmVjdC0+Y2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uKCpmaWx0ZXJEYXRh
LT5maWx0ZXIpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28g
YmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRo
IG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAgIGZpbHRlckRhdGEtPmZpbHRl
ci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3QtPmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KKyAgICBpZiAoSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKSkKKyAg
ICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSk7CiAK
ICAgICAvLyBJZiB0aGUgZHJhd2luZ1JlZ2lvbiBpcyBlbXB0eSwgd2UgaGF2ZSBzb21ldGhpbmcg
bGlrZSA8ZyBmaWx0ZXI9Ii4uIi8+LgogICAgIC8vIEV2ZW4gaWYgdGhlIHRhcmdldCBvYmplY3RC
b3VuZGluZ0JveCgpIGlzIGVtcHR5LCB3ZSBzdGlsbCBoYXZlIHRvIGRyYXcgdGhlIGxhc3QgZWZm
ZWN0IHJlc3VsdCBpbWFnZSBpbiBwb3N0QXBwbHlSZXNvdXJjZS4KQEAgLTE5NCw5ICsxNDYsNyBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIH0KIAogICAgIC8vIENoYW5nZSB0aGUgY29v
cmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJlZCBlbGVtZW50IHRv
IHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2Fs
ZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRp
cGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGZpbHRlclNjYWxl
LndpZHRoKCksIDAsIDAsIGZpbHRlclNjYWxlLmhlaWdodCgpLCAwLCAwKTsKIAogICAgIGF1dG8g
cmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5h
YmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JH
QikKQEAgLTI2OSwzMyArMjE5LDMzIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBv
c3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGZpbHRlckRh
dGEuYnVpbGRlci0+bGFzdEVmZmVjdCgpOworICAgIGF1dG8gbGFzdEVmZmVjdCA9IGZpbHRlckRh
dGEuZmlsdGVyLT5sYXN0RWZmZWN0KCk7CiAKLSAgICBpZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVy
RGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+ZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKGxhc3RFZmZlY3QgJiYgIWZpbHRlckRh
dGEuYm91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3QtPmNhbGN1bGF0ZVByaW1pdGl2
ZVN1YnJlZ2lvbigqZmlsdGVyRGF0YS5maWx0ZXIpLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBU
aGlzIGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0LiBJdCBqdXN0IG5lZWRzIHRv
IGJlIGNhbGxlZCBvbiB0aGUKICAgICAgICAgLy8gaW5pdGlhbCBmaWx0ZXJpbmcgcHJvY2Vzcy4g
V2UganVzdCB0YWtlIHRoZSBzdG9yZWQgZmlsdGVyIHJlc3VsdCBvbiBhCiAgICAgICAgIC8vIHNl
Y29uZCBkcmF3aW5nLgogICAgICAgICBpZiAoZmlsdGVyRGF0YS5zdGF0ZSAhPSBGaWx0ZXJEYXRh
OjpCdWlsdCkKICAgICAgICAgICAgIGZpbHRlckRhdGEuZmlsdGVyLT5zZXRTb3VyY2VJbWFnZShX
VEZNb3ZlKGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlcikpOwogCisgICAgICAgIGF1dG8g
aW1hZ2UgPSBsYXN0RWZmZWN0LT5maWx0ZXJJbWFnZSgpOworICAgIAogICAgICAgICAvLyBBbHdh
eXMgdHJ1ZSBpZiBmaWx0ZXJEYXRhIGlzIGp1c3QgYnVpbHQgKGZpbHRlckRhdGEtPnN0YXRlID09
IEZpbHRlckRhdGE6OkJ1aWx0KS4KLSAgICAgICAgaWYgKCFsYXN0RWZmZWN0LT5oYXNSZXN1bHQo
KSkgeworICAgICAgICBpZiAoIWltYWdlKSB7CiAgICAgICAgICAgICBmaWx0ZXJEYXRhLnN0YXRl
ID0gRmlsdGVyRGF0YTo6QXBwbHlpbmc7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgp
OwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7
Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICAgICAgICAgIGZpbHRlckRhdGEuZmlsdGVy
LT5hcHBseUZpbHRlcigpOworICAgICAgICAgICAgaW1hZ2UgPSBsYXN0RWZmZWN0LT5maWx0ZXJJ
bWFnZSgpOworICAgICAgICAgICAgaW1hZ2UtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAgICAgICAgIH0KKwogICAgICAgICBmaWx0ZXJEYXRh
LnN0YXRlID0gRmlsdGVyRGF0YTo6QnVpbHQ7CiAKLSAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gbGFzdEVmZmVjdC0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICAgICAgSW1hZ2VC
dWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2UgPyBpbWFnZS0+aW1hZ2VCdWZmZXIoKSA6IG51bGxw
dHI7CiAgICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewotICAgICAgICAgICAgY29udGV4dC0+Y29u
Y2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0uaW52ZXJzZSgpLnZh
bHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnNjYWxl
KEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53aWR0
aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSkp
OwotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKCpyZXN1bHRJbWFnZSwgbGFz
dEVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zY2Fs
ZShmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpKTsKLQotICAgICAgICAgICAg
Y29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0p
OworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZp
bHRlci0+ZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRl
clNjYWxlKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gZmlsdGVy
RGF0YS5maWx0ZXItPnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKGltYWdlLT5pbWFnZVJlY3QoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoKnJlc3VsdEltYWdlLCBpbWFn
ZVJlY3QpOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZp
bHRlclNjYWxlKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIGZpbHRlckRhdGEuc291cmNlR3Jh
cGhpY0J1ZmZlciA9IG51bGxwdHI7CkBAIC0zMjcsNyArMjc3LDggQEAgdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9i
amVjdCwgY28KICAgICAgICAgLy8gb3Igbm9uZSBvZiB0aGVtIHdpbGwgYmUgY2hhbmdlZC4KICAg
ICAgICAgaWYgKCFwcmltaXR2ZS0+c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKGVmZmVjdCwgYXR0
cmlidXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnVpbGRlci0+Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKGVmZmVjdCk7CisKKyAgICAgICAgYnVpbGRlci0+Y2xlYXJGaWx0ZXJJbWFn
ZXNSZWN1cnNpdmUoKmVmZmVjdCk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUgaW1hZ2Ugb24g
dGhlIHNjcmVlbi4KICAgICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbigqb2JqZWN0Rmls
dGVyRGF0YVBhaXIua2V5LCBSZXBhaW50SW52YWxpZGF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGM2NTAy
MWJlZTAzNTU2NWFhYjMxYzY3ZmI5MzE5Zjg4ZTYxODA3YzcuLjY0ZTNhYzVhZWFjODBhZGY5ZTI2
YWI0ZWY2Yjg1YTI3YzI1NDJkMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDMyLDExICs0MzIsMTMgQEAgdm9p
ZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJT
VkdSZXNvdXJjZUNvbnRhaW5lciYKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICAgICAgLy8gQ3Jl
YXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVy
LgogICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OwotICAgICAgICBhdXRvIGR1bW15RmlsdGVy
ID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlS
ZWN0LCBkdW1teVJlY3QsIHRydWUpOwotICAgICAgICBpZiAoYXV0byBidWlsZGVyID0gZmlsdGVy
LmJ1aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKKyAgICAgICAgRmxvYXRTaXpl
IGR1bW15U2NhbGUoMSwgMSk7CisgICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRlcjsKKyAg
ICAgICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlci5maWx0ZXJF
bGVtZW50KCksIGJ1aWxkZXIsIGR1bW15U2NhbGUsIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1t
eVJlY3QpOworICAgICAgICBpZiAoZHVtbXlGaWx0ZXIpIHsKICAgICAgICAgICAgIFRleHRTdHJl
YW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKIAotICAgICAgICAgICAgaWYgKEZpbHRl
ckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3QoKSkKKyAgICAgICAgICAg
IGlmIChhdXRvIGxhc3RFZmZlY3QgPSBkdW1teUZpbHRlci0+bGFzdEVmZmVjdCgpKQogICAgICAg
ICAgICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBDbGlwcGVyUmVz
b3VyY2VUeXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAppbmRl
eCA3YmNmMDQxODAwZjc5OWYxMTc0Y2ZlMDRiODIyZDZkMDY0MzFmNjg2Li4wNTQwYzhlNDQwODJk
NWM2MWYwMGY4ZmI3MzVjMzYxODJkMTBmYTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJs
ZW5kRWxlbWVudC5jcHAKQEAgLTEwMCwxOSArMTAwLDE2IEBAIHZvaWQgU1ZHRkVCbGVuZEVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAg
ICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVCbGVuZEVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVy
KSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9
IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOworICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGZp
bHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjIoKSk7CiAKICAgICBpZiAoIWlucHV0MSB8fCAh
aW5wdXQyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVC
bGVuZDo6Y3JlYXRlKGZpbHRlciwgbW9kZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlu
cHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJl
c2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAg
aW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKKyAgICBhdXRvIGVmZmVjdCA9IEZFQmxl
bmQ6OmNyZWF0ZShtb2RlKCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1v
dmUoaW5wdXQxKSwgV1RGTW92ZShpbnB1dDIpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3
ODhkOTIxNmUwYjk0MWZjOGIwNmRlYzY2Li5lYmE5YWJiNTgzMjhmNGRhYmYzNDI4YjZiMTdkYmY1
ODIzNzY4NDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaApAQCAtNjks
NyArNjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CiAKICAg
ICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCAwNTI0ODU3
OGMyNzRjOGZhMmIzZTFmMjQ0ZTQzNjc4NjhmNDJiYTljLi5jZGViZWYxOGExZmRjYmI4ZjNmYjM1
ZmI4MzhhYzYwNGM5YTIzZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5jcHAKQEAgLTEwMCw5ICsxMDAsOSBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAog
ewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwog
CiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTQxLDggKzE0
MSw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsCiAgICAgICAgIGZpbHRlclZhbHVlcy5zaHJp
bmtUb0ZpdCgpOwogICAgIH0KIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKGZpbHRlciwgZmlsdGVyVHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMpKTsKLSAgICBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXJUeXBlLCBXVEZNb3ZlKGZpbHRlclZhbHVlcykpOworICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVy
biBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmgKaW5kZXggN2FiNGFhNDE4MWU3YWIxOThiMTJlNzdiZTIwNmI5YzVjNDEwMjNmZC4uOTcw
MTFhMDQxZTQ5YTE3ZmI0OThhMWY4NDZmODgwZGJkZDY5NTI0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92
ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5n
OjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCmluZGV4IDkwYTU1YjdlZmZmN2EzZmU2MDZhOWUwNTc5
YTc2ZWRlOWY5NjgwMTEuLjI3ZDEyYjVkMDg4M2ViZjFlYWMwYWRhYjExMTJmZWVlYmIxMWY0NTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmNwcApAQCAtNjMsOSArNjMsOSBAQCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjbwogICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFt
ZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5z
ZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5z
ZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
ICAgICAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC04Niw4
ICs4Niw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0CiAgICAgICAgICAgICBhbHBoYSA9IGRv
d25jYXN0PFNWR0ZFRnVuY0FFbGVtZW50PihjaGlsZCkudHJhbnNmZXJGdW5jdGlvbigpOwogICAg
IH0KICAgICAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShm
aWx0ZXIsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0
cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaApp
bmRleCBiYjU4OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2ZThiOTkzYTRkZDU0ODYzLi42MDE3MTBmN2Qz
NTM1YTE0MWExNTc4ODU0YWYyYjAzNTExMjllOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBw
cml2YXRlOgogICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAg
dm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmlu
ZyYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAzY2E5
OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUyMDVhYzk4MjM1Li43ZmNlZDJlNjQ1NTQwZTNiOWRk
MDk2Y2JlNDk5MWY1ODQxNTUwNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmNwcApAQCAtMTMxLDE5ICsxMzEsMTYgQEAgdm9pZCBTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5h
bWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAg
IGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAg
YXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1
dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMigpKTsKICAgICAKICAg
ICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IGF1dG8gZWZmZWN0ID0gRkVDb21wb3NpdGU6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCks
IGsxKCksIGsyKCksIGszKCksIGs0KCkpOwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2
ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1
dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb3Np
dGU6OmNyZWF0ZShzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBrMygpLCBrNCgpKTsKKyAgICBl
ZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSksIFdURk1vdmUoaW5wdXQy
KSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4NjU3YTBmYTMwNDRkZjViN2M1YTA4MGQ2ZTc3
OTcyMmY2Li43NGQ4MTRjM2MyMGUwZmQzN2ViNmE4YjUzYWZmNTY5ZDhkMTFkY2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCkBAIC0xMDksNyArMTA5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1h
dGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCmluZGV4IGY3NTA1ODE1ZGVjYWJiNGVhMzRiNDM1
YjQ3ZWE1YTgwYzZhMjZkZjEuLjFhODEzNGE5YzhiN2ZjMGE1MDc1ZWRlODFhMGQzNjk3MGU5OGM0
N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50LmNwcApAQCAtMTkxLDkgKzE5MSw5IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJp
eEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYg
ZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAg
ICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDYsOCArMjQ2LDgg
QEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7
CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoZmls
dGVyLCBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlh
cygpLCBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZs
b2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSks
IHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0
cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNy
ZWF0ZShJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllWYWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlh
cygpLCBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZs
b2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSks
IHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0
cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCmluZGV4IDg1
YzAwMjY5OGM2Mjc3ZTA0MzcwZDM1OTgyYTk1YjhkOTA0OWIzMzkuLjFiNmJiZTQ4NzEyNzVjNDIx
YzhkZDQ0MDljMWI0ODk3Mjk1YWExMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVh
dGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudC5jcHAKaW5kZXggMTUyYzk4NWZkOGU5NWFlOTk1N2U2ZTIxZDZiZjJhMTBjNDU0
YmRkNS4uZGQzOTQ1OTVjZjcyNjQ4YTY3ZDUyOGExMzQxNTFkYTM2N2Y0YzY5OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKQEAg
LTE1MSw5ICsxNTEsOSBAQCB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRF
bGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1pdGl2ZUF0
dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWls
ZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0
QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5
SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpA
QCAtMTYyLDcgKzE2Miw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyCiAgICAgaWYgKCFsaWdo
dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIGF1dG8gbGlnaHRT
b3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKCpmaWx0ZXJCdWlsZGVyKTsKKyAgICBh
dXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZShmaWx0ZXJCdWlsZGVy
KTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAg
IGlmICghcmVuZGVyZXIpCkBAIC0xNzAsOCArMTcwLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0
ZXIKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5n
Q29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkp
OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwg
Y29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0
aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVE
aWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25z
dGFudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3Zl
KGxpZ2h0U291cmNlKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShp
bnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3
NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAuLmIyYWFjOGIwM2VkMjRkMjFkOThiNTE5ZmJhOGU1Zjk0
NWNhMzA4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBz
ZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0
eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1h
dGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAK
aW5kZXggMGM1ZTgyNWJjODI1NjBmMzZhMjY5ZWE2ZDcyMmRmZDA1MTczZDhjMi4uNjkwNzUxMzc1
MDdkNmM2NDc0OWExYzhiYzQxMmEwYWVlNTFhMWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKQEAgLTExNSwxOSArMTE1LDE2
IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVp
bGRlci5nZXRFZmZlY3RCeUlkKGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5w
dXQyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEaXNw
bGFjZW1lbnRNYXA6OmNyZWF0ZShmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxT
ZWxlY3RvcigpLCBzY2FsZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBh
Y2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZl
Y3RzLmFwcGVuZChpbnB1dDIpOyAgICAKKyAgICBhdXRvIGVmZmVjdCA9IEZFRGlzcGxhY2VtZW50
TWFwOjpjcmVhdGUoeENoYW5uZWxTZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxl
KCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSwgV1RG
TW92ZShpbnB1dDIpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2
Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4NjY1ZDMuLmYyYzZkMGIxOGY4NWM5NGYzODRmNWJkMWJl
ZmMzNTllZGU4MjNlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAg
ICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVh
dGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFk
b3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50
LmNwcAppbmRleCAyMmJjZTFkMzMzMTdjOTU3MWZlNWQ3OWY0YjMyNmE4OWJmYzViNjgxLi5iZDYx
YzI3NGUxNTM0ZmQ5MWFjMzk4MGM2NDU2Mjk4OTljZjYyMTVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQg
U1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0
ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxk
ZXIpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTExMSwxMiArMTExLDEyIEBAIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9w
YWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIGF1dG8gaW5wdXQxID0gZmls
dGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVh
dGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwg
Y29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OworICAgIGF1dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgp
LCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KTsKKyAgICBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZm
ZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaApp
bmRleCA5YjYyZDI0YjQ1NGJiN2QyNzU4ZTcxMmI2MjFiOGNiZTQyZjc0NTFkLi4zZTQwNWRlNDg5
YzY4MWE3NmM0NGY5YTgyOTczM2EyMDI2YjRkOGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURyb3BTaGFkb3dFbGVtZW50LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5n
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNW
R0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJk
NTY1ZDBlMTYzZmY4N2QwYjRiY2FiZDIyNDQ3NThmYzIuLmYzMjhjYzdjMTVlZTc5MWI0YWFiYTNh
OGU3MWE4MDRjODA5M2RjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZs
b29kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50
LmNwcApAQCAtNTgsNyArNTgsNyBAQCBib29sIFNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZlY3QsIGNvbnN0IFF1YQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAg
ICBpZiAoIXJlbmRlcmVyKQpAQCAtNjksNyArNjksNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVy
KQogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29s
b3JGaWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xvcigpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gc3Zn
U3R5bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAgICByZXR1cm4gRkVGbG9vZDo6Y3JlYXRlKGZpbHRl
ciwgY29sb3IsIG9wYWNpdHkpOworICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9w
YWNpdHkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9v
ZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCmluZGV4
IGI5NmE0M2FhMzEzZTc1ZTRhMzE2NzI0OGExYjZmNWNmNTFmZWU5MTEuLmFlZDY2OTE5MzNiZDAy
ZjMzMDFhOTIzOTdiNzQwNTlmZjZiZWM0YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUZsb29kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29k
RWxlbWVudC5oCkBAIC0zNiw3ICszNiw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU1ZHUHJvcGVy
dHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJv
cGVydHlSZWdpc3RyeTsgfQogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRleCA3YTk5ODIyNGM5MjE5NTU1MjQ0YTg2OWNhNzhh
ODMwZDU2M2M1OTlkLi5mMWU2YmY0OWE0ZGIzZGNhNzc1YzliN2VmYTVkYjlkYzg2OTg4NzJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcApA
QCAtOTUsMTcgKzk1LDE3IEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lCiAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29u
c3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0
MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQx
ID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8
fCBzdGREZXZpYXRpb25ZKCkgPCAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1
dG8gZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgo
KSwgc3RkRGV2aWF0aW9uWSgpLCBlZGdlTW9kZSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0
cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOworICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBl
ZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQuaAppbmRleCBkODllMWE3NDhmYjJjNTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi5mNDBl
YjMzNzc4YzQzZGY2MWVlNTg5NjNlZWNmOWVjZGJhNTQ5Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3Qg
QXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRl
eCBlMTQ2ODhhNWViMTc2ZjAyYTE2YzA1NTBmMDgxMTk1ZDNjMjdlYzRmLi40MmExY2UwZWE2YWUx
ZDQ5Y2I2YmI3ZWE5Njc0M2IzYmUwNWFmNDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5jcHAKQEAgLTE3NCwxNiArMTc0LDE2IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1l
bnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRy
aWNzCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJj
ZUludmFsaWRhdGlvbigqcGFyZW50UmVuZGVyZXIpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmls
dGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIGlmIChtX2NhY2hlZEltYWdlKQotICAg
ICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKGZpbHRlciwgbV9jYWNoZWRJbWFn
ZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsK
KyAgICAgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShtX2NhY2hlZEltYWdlLT5p
bWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogCiAg
ICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3Ry
aW5nKGhyZWYoKSwgdHJlZVNjb3BlKCkpOwogICAgIGlmIChpc0Rlc2NlbmRhbnRPclNoYWRvd0Rl
c2NlbmRhbnRPZih0YXJnZXQuZWxlbWVudC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoZmlsdGVyLCB0
cmVlU2NvcGUoKSwgaHJlZigpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgIHJldHVybiBG
RUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNl
cnZlQXNwZWN0UmF0aW8oKSk7CiB9CiAKIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmFkZFN1YnJl
c291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAppbmRleCBkOTNlMGQwZGI4Yjg4NjY1NDgwZjIx
MDE1YTI1NmJhZGExNTRjNWM3Li4yYTNlOWY2MGViZmMyN2QwMTM5YjJjMzc2ODVmMzM4YjFjOGI2
NzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaApAQCAtNTUsNyArNTUs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJp
ZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjbGVhclJlc291
cmNlUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCmluZGV4IGJlMmY2ZTAzMDdkYzU1MTYw
MDc5MGZkNWJmMTgyZjFkOTQ2MjNkZDYuLjFjMGQ1ODJkMDEzYjg3Y2YwZTNjMTEwOGI5NjJmMmQz
NjlkYzMwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAt
NDUsMTMgKzQ1LDEyIEBAIFJlZjxTVkdGRU1lcmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6
OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1
aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBlZmZlY3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVy
KTsKLSAgICBhdXRvJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0KKyAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3IgbWVyZ2VJbnB1dHM7CisgICAgCiAgICAgZm9yIChhdXRvJiBt
ZXJnZU5vZGUgOiBjaGlsZHJlbk9mVHlwZTxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+KCp0aGlzKSkg
ewotICAgICAgICBhdXRvIG1lcmdlRWZmZWN0ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChtZXJnZU5vZGUuaW4xKCkpOworICAgICAgICBhdXRvIG1lcmdlRWZmZWN0ID0gZmlsdGVyQnVp
bGRlci5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7CiAgICAgICAgIGlmICghbWVyZ2VF
ZmZlY3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgbWVyZ2VJbnB1dHMu
YXBwZW5kKFdURk1vdmUobWVyZ2VFZmZlY3QpKTsKQEAgLTYyLDYgKzYxLDggQEAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIsIEYKICAgICBpZiAobWVyZ2VJbnB1dHMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAorICAgIGF1dG8gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKCk7Cisg
ICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IFdURk1vdmUobWVyZ2VJbnB1dHMpOwogICAgIHJl
dHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5k
ZXggNzQ1MDg2ODE2ZjY5NzZjNjY5N2RjNTEwNzU4MDJkMjgzY2Y0ZTNjMi4uNDM3Y2Q3MjU2MzJj
NWY0YzUyNDg5NGNjMzI2Y2EwOWI0MTk4NTE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmgKQEAgLTM1LDcgKzM1LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0
eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlPd25lclJlZ2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3Bl
cnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3By
b3BlcnR5UmVnaXN0cnk7IH0KIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCmluZGV4IGQ2ZmI5NWM4
ZTM3NzZlNmQyMDkzYmVhY2UzNWUyZWQxNzk1ZDMyMWIuLjhiMDU2MGM0ZGE4MDAzOTcwMTQ4ZTFl
MTVlMmYzMDk3YjkxNTMxNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAKQEAgLTExNCwyMCArMTE0LDE5IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5
RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0
ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBo
b2xvZ3lFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAg
ICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOwotICAgIGZsb2F0IHlSYWRpdXMgPSByYWRpdXNZ
KCk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEo
KSk7CiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgZmxv
YXQgeFJhZGl1cyA9IHJhZGl1c1goKTsKKyAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVzWSgpOwog
ICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKGZpbHRlciwgc3Zn
T3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShz
dmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0
cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAppbmRleCAxYTkwODhiNzVj
ZjhkODVhZTM4ZjI5M2UxMTE5OGE2NmY2NmFhNjY5Li5iMjFiNmY1YzQ3Yjc4NWRmMjhmMDEzZWRl
NTQwMWM4NjZkNDBlOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lF
bGVtZW50LmgKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRG
aWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJl
Z2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVk
U3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXggMDM4MjY4Yjg5YjJmMTlm
OWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVlNy4uOWIwZDcwMmExZDI1ODU0MjA4Yjk3ZmY5ZDZhZGQx
ZjgyN2UyOWFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAK
QEAgLTgxLDE0ICs4MSwxNCBAQCB2b2lkIFNWR0ZFT2Zmc2V0RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
JiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVy
LmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRU9mZnNldDo6Y3JlYXRlKGZpbHRlciwg
ZHgoKSwgZHkoKSk7CisgICAgYXV0byBlZmZlY3QgPSBGRU9mZnNldDo6Y3JlYXRlKGR4KCksIGR5
KCkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OwogICAgIHJldHVy
biBlZmZlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXgg
NTc0NzNkY2M3MmRiNjdiMTI1ZWEyZWQ0NjVlMzViNTczNzA0OWJlZS4uODk5NmYyODJiMDFlOGQ5
Y2Q2NjdiZjIwYjVjZDk4OGE1OTlhZjg4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFT2Zmc2V0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNl
dEVsZW1lbnQuaApAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4
IDliN2NlNDBhYjk3MTZhZTRmMzM1ZjU0YjI0Y2RhNDU5YTg0MjlhNTkuLjU2M2I5ZjE3YjRhOTE2
YjdkMjY1MTI0MmQzN2QzZmMwYmQ3NTAyZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTE2MCw5ICsxNjAsOSBAQCB2
b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgU1ZHRkVMaWdodAogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAg
ICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNzEsNyArMTcxLDcg
QEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGUKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxl
bWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2Ug
PSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGZpbHRlckJ1aWxkZXIpOwogCiAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikK
QEAgLTE3OSw3ICsxNzksNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZQogICAgIAogICAgIENv
bG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIo
cmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0gICAgYXV0
byBlZmZlY3QgPSBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJm
YWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxhckV4cG9uZW50KCksIGtlcm5l
bFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2Up
KTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBz
dXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBzcGVjdWxhckV4cG9uZW50KCksIGtl
cm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3Vy
Y2UpKTsKICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKICAgICByZXR1
cm4gZWZmZWN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmgKaW5kZXggODk3YjhkZTE1NmQxYzc5YTFkM2ZkOGIzMTE4ZTJhYjYzYjQ3
YjE0Ni4uNGQxYjUzMWM0MmJlYjhjZGZhMjAxNTIxNjIxMTY1MTBkMDA5YmM2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCkBAIC01
OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEg
eyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVUaWxlRWxlbWVudC5jcHAKaW5kZXggMzliZGNjNzczNTk2NjUwMzZlMWFlNzQ3NjEyZWFkNmY5
YWMzNzM3MC4uMDAxZGQ1MDg5MjE0OTg5MTU2ZDcyNDY3YWMyMGY0ZmZmN2Q0ZGM1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcApAQCAtNzAsMTUgKzcwLDE1IEBAIHZv
aWQgU1ZHRkVUaWxlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
LCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAg
ICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVj
dCA9IEZFVGlsZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9
IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZSgpOworICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBl
ZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCmluZGV4IDQ1YjMy
NzE4NTFkN2ZjMGRjMmQzYmNjODc5YTIyZGM0MmEzM2E5MWYuLmNhYmFjZTZiZDAxYzJiMWQzNTY0
YTVjZWU1YzI3NWI2Njk2ZjlkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVRpbGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
aApAQCAtNDIsNyArNDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCmluZGV4IDExNTYxMTE5ZDgzZTNmYzc4OGE0
MmIxNDg2N2M2NTY0MTIzMzRhNGQuLjE1MWI3YjllOGUwOGE0M2U3Y2NjYjY4MDlhYTcyOTE0NmRi
YmYwZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5j
cHAKQEAgLTExNywxMSArMTE3LDExIEBAIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3QKIHsKICAgICBpZiAoYmFzZUZyZXF1ZW5jeVgoKSA8IDAgfHwgYmFzZUZyZXF1
ZW5jeVkoKSA8IDApCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBGRVR1cmJ1
bGVuY2U6OmNyZWF0ZShmaWx0ZXIsIHR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1
ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRD
SFRZUEVfU1RJVENIKTsKKyAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUodHlwZSgpLCBi
YXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwg
c3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAppbmRleCBiZjlkYTIyYWQ0MmU0
MTBhMTA0MzVlMGE0MGUzNDI2Nzc2OWUxOThhLi41MGFmOTEwZWI1OGUyYzkyMjQxYTkwZGE4Y2Jk
ZmRjNjgxNGY5MzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmgKQEAgLTExOSw3ICsxMTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZp
bHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFBy
b3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZH
QW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVggeyBTVkdBbmltYXRlZE51bWJlcjo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCmluZGV4IGZmNTIyMzA5NDY2YjA0MGJl
ZjA4OWQxNTdiMzg2ZGZmYmIwNWM2MTkuLjY3OGRmMDk5MDZiZTNiODQ2YTAzNmYyM2EzNGRmMWM1
MzI4Yjc3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCkBAIC05MywyMiArOTMsNiBAQCB2b2lk
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y2hpbGRyZW5DaGFuZ2VkKGNv
bnN0IENoaWxkQ2hhbmdlJiBjaAogICAgIGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0
ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZmlsdGVyRWZmZWN0
KTsKLSAgICBpZiAoIWZpbHRlckVmZmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhh
c1godHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQotICAgICAg
ICBmaWx0ZXJFZmZlY3QtPnNldEhhc1kodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdO
YW1lczo6d2lkdGhBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNXaWR0aCh0cnVl
KTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKLSAgICAgICAg
ZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWlnaHQodHJ1ZSk7Ci19Ci0KIFJlbmRlclB0cjxSZW5kZXJF
bGVtZW50PiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNyZWF0ZUVsZW1l
bnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24m
KQogewogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclBy
aW1pdGl2ZT4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCBj
OThiMTNlZDk2Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3NzJhY2E3Li44NzhkMTEyYzAyOTg3ZDFm
YmYxNjE0MWFjZTJiOGI4MWY1ZWIyOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0zNiw5ICsz
Niw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBjbGFzcyBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMpOwogcHVibGlj
OgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCopIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0ID0gMDsKICAgICAvLyBSZXR1cm5zIHRydWUs
IGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBvbmUuCiAgICAgdmly
dHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBR
dWFsaWZpZWROYW1lJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggMzg1YWYyOTA4NDhhM2QwYjgzZjEyYWM5NjE5ZTZi
Zjk2YzlmMjM5Ni4uYzkyNzVhYzUxMmRjMDAxYmNlMTFmNmE4OTlmMmVjNzdmZDAxNTk2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5j
cHAKQEAgLTM1LDQ2ICszNSw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFSW1hZ2U6
OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQorRkVJbWFnZTo6RkVJbWFnZShSZWZQdHI8SW1h
Z2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNw
ZWN0UmF0aW8pCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdl
KQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVy
LCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKK0ZFSW1hZ2U6OkZFSW1hZ2UoVHJlZVNjb3BlJiB0
cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVm
ZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAgICAsIG1fdHJlZVNjb3BlKCZ0cmVlU2NvcGUpCiAgICAg
LCBtX2hyZWYoaHJlZikKICAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVj
dFJhdGlvKQogewogfQogCi1SZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKEZp
bHRlciYgZmlsdGVyLCBSZWZQdHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6
Y3JlYXRlV2l0aEltYWdlKFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUltYWdlKGZpbHRlciwgaW1hZ2UsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGltYWdlLCBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KSk7CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZp
bHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCitS
ZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShUcmVlU2NvcGUmIHRy
ZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
VmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVJbWFnZShmaWx0ZXIsIHRyZWVTY29wZSwgaHJlZiwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UodHJlZVNjb3BlLCBocmVmLCBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLXZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKQorRmxvYXRSZWN0IEZFSW1hZ2U6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0
ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7
Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCku
bWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHNyY1Jl
Y3Q7CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKKwogICAg
IGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5zaXplKCkp
OwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJlY3Qs
IHNyY1JlY3QpOwotICAgIH0gZWxzZSBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZl
cmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJh
bnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KSk7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJz
ZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUo
bWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KHBhaW50UmVjdCkpOworICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCA9IHsgeyB9LCBtX2lt
YWdlLT5zaXplKCkgfTsKKyAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJl
Y3QoaW1hZ2VSZWN0LCBzcmNSZWN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmlsdGVyLmNsaXBU
b01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9
CiAKIFJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0CkBA
IC04NywzNyArODIsMzcgQEAgUmVuZGVyRWxlbWVudCogRkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRl
cmVyKCkgY29uc3QKICAgICByZXR1cm4gdGFyZ2V0LmVsZW1lbnQtPnJlbmRlcmVyKCk7CiB9CiAK
LXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVJbWFnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCk7CiAgICAgaWYgKCFtX2ltYWdl
ICYmICFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKQotICAgIHNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKICAgICBpZiAo
IXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFw
UmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0
ID0gb3V0cHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIGRlc3RSZWN0LnNjYWxlKGZpbHRl
ci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChyZW5k
ZXJlcikKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFw
UmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgZWxz
ZSB7CisgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgICAgIHNyY1JlY3QgPSByZW5kZXJlci0+cmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAgICAgICAgc3JjUmVjdC5zY2FsZShmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgc3JjUmVjdCA9IEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUoKSk7CiAgICAgICAgIG1fcHJlc2VydmVB
c3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKICAgICB9CiAKLSAg
ICBJbnRQb2ludCBwYWludExvY2F0aW9uID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigp
OworICAgIGF1dG8gcGFpbnRMb2NhdGlvbiA9IGZpbHRlci5zY2FsZWRSZWN0QnlGaWx0ZXJTY2Fs
ZShvdXRwdXQuaW1hZ2VSZWN0KCkpLmxvY2F0aW9uKCk7CiAgICAgZGVzdFJlY3QubW92ZSgtcGFp
bnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7CiAKICAgICBhdXRvJiBjb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAogICAgIGlmIChyZW5kZXJlcikgewotICAgICAg
ICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCkuYWJz
b2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVUcmFu
c2Zvcm0pOworICAgICAgICBjb250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAog
ICAgICAgICBSZWZQdHIgY29udGV4dE5vZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJl
ci0+ZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2ZUxlbmd0
aHMoKSkgewpAQCAtMTMyLDEwICsxMjcsMTEgQEAgdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQogCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRp
b247CiAgICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQo
Y29udGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGNvbnRleHQuZHJhd0ltYWdl
KCptX2ltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRl
eHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRleCBhYzE2MGVkY2U3
YzBlMGEwNjdiZGVmYmQ3MDdmMmFiZTU1OTA4MWI2Li4yZDRiMzM1MmU1ODNkZmQ4YzVmMzlkNTM1
ODBkMDc5ZDM5NTcxZGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zNCwyMiArMzQsMjIgQEAgY2xhc3MgVHJlZVNjb3BlOwog
CiBjbGFzcyBGRUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPElt
YWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgc3RhdGljIFJl
ZjxGRUltYWdlPiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHN0
YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5GRUlt
YWdlKCkgPSBkZWZhdWx0OwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBU
cmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUmKTsKKyAgICBGRUltYWdlKFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSYpOworICAgIEZFSW1hZ2UoVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFSW1hZ2UiOyB9CisgICAgUmVuZGVyRWxl
bWVudCogcmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3Q7CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBl
IGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBl
SW1hZ2U7IH0KKyAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KIAotICAgIFJlbmRlckVsZW1l
bnQqIHJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0OworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBm
aW5hbDsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmluYWw7CisgICAg
Ym9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgZmluYWw7CiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CiAKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1h
Z2U7CkBAIC02MSwzICs2MSw1IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUltYWdlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5k
ZXggOWE5NGE0NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5MmI3YmNlNy4uZDU0OGU5ODRiMGRi
YmZlNmFhNGRiOTVkMzBhYTVjMWUxYzAwNGQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yMiwyOSArMjIsMTE0IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJT
VkdGaWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3
aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9h
dFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihh
YnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbikKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6
Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXIm
IGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgRmlsdGVyRWZm
ZWN0JiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQs
IGJ1aWxkZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgZmls
dGVyUmVnaW9uLCAmcHJldmlvdXNFZmZlY3QpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdG
aWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJC
dWlsZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpCit7CisgICAgcmV0dXJuIGNyZWF0ZShm
aWx0ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0
ZXJSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBudWxscHRyKTsKK30KKworUmVmUHRyPFNWR0Zp
bHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwg
U1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3Qq
IHByZXZpb3VzRWZmZWN0KQoreworICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0g
ZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRf
VFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKKworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5l
dyBTVkdGaWx0ZXIoZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCB0
YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKSk7CisKKyAgICBpZiAo
IXByZXZpb3VzRWZmZWN0KQorICAgICAgICBidWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoU291
cmNlR3JhcGhpYzo6Y3JlYXRlKCkpOworICAgIGVsc2UKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1
aWx0aW5FZmZlY3RzKHsgKnByZXZpb3VzRWZmZWN0IH0pOworCisgICAgYnVpbGRlci5zZXRUYXJn
ZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgYnVpbGRlci5zZXRQcmltaXRp
dmVVbml0cyhmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpOworCisgICAgYXV0byBsYXN0
RWZmZWN0ID0gYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7CisgICAg
aWYgKCFsYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBmaWx0
ZXItPnNldExhc3RFZmZlY3QoV1RGTW92ZShsYXN0RWZmZWN0KSk7CisgICAgcmV0dXJuIGZpbHRl
cjsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2Fs
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBib29sIGVmZmVj
dEJCb3hNb2RlKQorICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6U1ZHRmlsdGVyLCBmaWx0ZXJT
Y2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24pCiAgICAgLCBtX3RhcmdldEJvdW5k
aW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVn
aW9uKQogICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKIHsKLSAgICBtX2Fi
c29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdp
b24pOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24o
RmxvYXRTaXplIHNpemUpIGNvbnN0CitGbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRTaXplQnlG
aWx0ZXJTY2FsZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKIHsKICAgICBpZiAobV9lZmZlY3RCQm94
TW9kZSkKICAgICAgICAgc2l6ZSA9IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKTsK
IAotICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzaXplKSAqIG1f
YWJzb2x1dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9maWx0ZXJSZWdpb24uc2l6ZSgpOworICAg
IHJldHVybiBGaWx0ZXI6OnNjYWxlZFNpemVCeUZpbHRlclNjYWxlKHNpemUpOworfQorCitib29s
IFNWR0ZpbHRlcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgc2V0U291cmNl
SW1hZ2UoeyBmaWx0ZXIuc291cmNlSW1hZ2UoKSB9KTsKKyAgICByZXR1cm4gYXBwbHlGaWx0ZXIo
KTsKK30KKworc3RhdGljIGJvb2wgYnVpbGRFeHByZXNzaW9uKGNvbnN0IFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIEZpbHRlckVmZmVjdFZl
Y3RvciYgZXhwcmVzc2lvbikKK3sKKyAgICAvLyBBIGN5Y2xlIGlzIGRldGVjdGVkLgorICAgIGlm
IChzdGFjay5jb250YWlucyhlZmZlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBl
eHByZXNzaW9uLmluc2VydCgwLCBlZmZlY3QpOworCisgICAgc3RhY2suYXBwZW5kKGVmZmVjdCk7
CisKKyAgICBmb3IgKGF1dG8mIGlucHV0RWZmZWN0IDogZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSkg
eworICAgICAgICBpZiAoIWJ1aWxkRXhwcmVzc2lvbihpbnB1dEVmZmVjdCwgc3RhY2ssIGV4cHJl
c3Npb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVCgh
c3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoc3RhY2subGFzdCgpID09IGVmZmVjdCk7CisK
KyAgICBzdGFjay5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi
b29sIGJ1aWxkRXhwcmVzc2lvbihjb25zdCBSZWZQdHI8RmlsdGVyRWZmZWN0PiYgZWZmZWN0LCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGV4cHJlc3Npb24pCit7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9y
IHN0YWNrOworICAgIHJldHVybiBidWlsZEV4cHJlc3Npb24oZWZmZWN0LCBzdGFjaywgZXhwcmVz
c2lvbik7Cit9CisKK2Jvb2wgU1ZHRmlsdGVyOjphcHBseUZpbHRlcigpCit7CisgICAgRmlsdGVy
RWZmZWN0VmVjdG9yIGV4cHJlc3Npb247CisgICAgaWYgKCFidWlsZEV4cHJlc3Npb24obV9sYXN0
RWZmZWN0LCBleHByZXNzaW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBleHByZXNzaW9uKSB7CisgICAgICAgIGlmICghZWZmZWN0LT5hcHBseSgq
dGhpcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0ludE91dHNldHMgU1ZHRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXN0RWZmZWN0LT5vdXRzZXRzKCk7CiB9CiAKLVJlZjxTVkdGaWx0ZXI+IFNWR0Zp
bHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9v
bCBlZmZlY3RCQm94TW9kZSkKK3ZvaWQgU1ZHRmlsdGVyOjpjbGVhckZpbHRlckltYWdlKCkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFi
c29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lv
biwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBtX2xhc3RFZmZlY3QtPmNsZWFyRmlsdGVySW1hZ2Vz
UmVjdXJzaXZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggODA5MzE0NmQ2NGFm
ODg4NWJjM2RhNDkzMDJmNWFlYTBmYjE3MDBjZi4uYWM5ZGJlODA0MjgxNTlkYjRkNWE2MDI3NWNj
YWI5OGYwZjBmY2RjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmgKQEAgLTIwLDQxICsyMCw0NiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CisKIGNs
YXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCk7Ci0KLSAg
ICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOyB9CisgICAgc3RhdGljIFJlZlB0
cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYs
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgRmlsdGVyRWZmZWN0JiBwcmV2
aW91c0VmZmVjdCk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0
ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2Nh
bGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgc3Rh
dGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVy
QnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCk7
CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSkgY29u
c3QgZmluYWw7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemVCeUZpbHRlclNjYWxlKEZsb2F0U2l6
ZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
KyAgICBib29sIGFwcGx5RmlsdGVyKCkgb3ZlcnJpZGU7CiAKLSAgICBGbG9hdFJlY3Qgc291cmNl
SW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdS
ZWdpb247IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKLSAgICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZl
Y3QoKSB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0KKyAgICB2b2lkIHNldExhc3RFZmZlY3QoUmVm
UHRyPEZpbHRlckVmZmVjdD4mJiBsYXN0RWZmZWN0KSB7IG1fbGFzdEVmZmVjdCA9IFdURk1vdmUo
bGFzdEVmZmVjdCk7IH0KIAogcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJj
ZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0
IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKyAgICBTVkdG
aWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKworICAgIEludE91
dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJGaWx0ZXJJbWFn
ZSgpIG92ZXJyaWRlOwogCi0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVn
aW9uOwogICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBt
X2Fic29sdXRlRmlsdGVyUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKICAg
ICBib29sIG1fZWZmZWN0QkJveE1vZGU7CisKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xh
c3RFZmZlY3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQogICAgIHN0YXRpYyBib29sIGlzVHlw
ZShjb25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLmlzU1ZHRmls
dGVyKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi5pc1NWR0ZpbHRlcigpOyB9CiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDk2ZjNhODA1MDQy
OTU1NTgxMDM0ZDk4YTRmZGFjNGVhZjMwODdiOTQuLmRjZDU4OWNjOTVlMjdkMDcwNTI4N2Q5MjE0
YzdiZDliODk4YTY2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0yMCwyMCArMjAsMTExIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogCi0jaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
U291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBFTkFCTEUoREVTVElOQVRJ
T05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVy
QnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQordm9pZCBTVkdGaWx0
ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdy
YXBoaWMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0
TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VB
bHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpzb3VyY2VHcmFwaGljKSk7
CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBz
b3VyY2VHcmFwaGljLnB0cigpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBo
YTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKHNvdXJjZUdyYXBoaWMpKTsKICAg
ICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9S
X1NQQUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50ZXJwb2xhdGlvbiBjb2xvckludGVy
cG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKGF1dG8g
cmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+
c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKTsKKworICAgIC8v
IFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20gdGhlIGNvbXB1dGVkIHN0
eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3RvcigmZWxlbWVu
dCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMpKSB7
CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIH0KKworICAg
IHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87Cit9CisjZW5kaWYKKworc3RhdGljIHVu
c2lnbmVkIGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCogZWZmZWN0LCBIYXNoU2V0
PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQoreworICAgIGFsbEVmZmVjdHMuYWRk
KGVmZmVjdCk7CisgICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZlY3QoaSk7CisgICAgICAgIGNvbGxl
Y3RFZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbEVmZmVjdHMu
c2l6ZSgpOworfQorCitzdGF0aWMgdW5zaWduZWQgdG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKGNv
bnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKK3sKKyAgICBIYXNoU2V0PGNvbnN0IEZpbHRl
ckVmZmVjdCo+IGFsbEVmZmVjdHM7CisgICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKCZsYXN0RWZm
ZWN0LCBhbGxFZmZlY3RzKTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVp
bGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQp
Cit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzID0g
MTAwOworCisgICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3Vu
dENoaWxkTm9kZXMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gZWZmZWN0OworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRy
ZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVt
ZW50KSkgeworICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKCp0aGlzKTsKKyAg
ICAgICAgaWYgKCFlZmZlY3QpIHsKKyAgICAgICAgICAgIGNsZWFyRWZmZWN0cygpOworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGVmZmVjdEJv
dW5kYXJpZXMgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5p
dHMsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAKKyAgICAgICAgT3B0aW9uU2V0PEZp
bHRlckJvdW5kYXJ5U2V0OjpGbGFncz4gZmxhZ3M7CisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50
Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZp
bHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWCk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1l
bnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQo
RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNZKTsKKworICAgICAgICBpZiAoZWZmZWN0RWxl
bWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCisgICAgICAgICAgICBmbGFn
cy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNXaWR0aCk7CisKKyAgICAgICAgaWYg
KGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKKyAgICAg
ICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc0hlaWdodCk7Cisg
ICAgICAgIAorICAgICAgICBlZmZlY3QtPnNldEJvdW5kYXJ5U2V0KHsgZWZmZWN0Qm91bmRhcmll
cywgZmxhZ3MgfSk7CisKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFS
X1NSR0IpCisgICAgICAgIGlmIChjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KGVmZmVjdEVs
ZW1lbnQpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCKQorICAgICAgICAgICAgZWZm
ZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFy
U1JHQigpKTsKKyNlbmRpZgorICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IGVmZmVjdEVsZW1l
bnQucmVuZGVyZXIoKSkKKyAgICAgICAgICAgIGFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNl
cyhlZmZlY3QuY29weVJlZigpLCByZW5kZXJlcik7CisKKyAgICAgICAgYWRkKGVmZmVjdEVsZW1l
bnQucmVzdWx0KCksIGVmZmVjdCk7CisgICAgfQorCisgICAgaWYgKCFlZmZlY3QgfHwgdG90YWxO
dW1iZXJGaWx0ZXJFZmZlY3RzKCplZmZlY3QpID4gbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3Rz
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBlZmZlY3Q7Cit9CisKIHZv
aWQgU1ZHRmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3QpCiB7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkgewpAQCAtOTIsMTUg
KzE4MywxNSBAQCB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyRWZmZWN0cygpCiAgICAgYWRk
QnVpbHRpbkVmZmVjdHMoKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJlc3Vs
dHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6
OmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCYgZWZmZWN0KQogewotICAg
IGlmICghZWZmZWN0LT5oYXNSZXN1bHQoKSkKKyAgICBpZiAoIWVmZmVjdC5maWx0ZXJJbWFnZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7CisgICAgZWZm
ZWN0LmNsZWFyRmlsdGVySW1hZ2UoKTsKIAotICAgIGZvciAoYXV0byYgcmVmZXJlbmNlIDogZWZm
ZWN0UmVmZXJlbmNlcyhlZmZlY3QpKQotICAgICAgICBjbGVhclJlc3VsdHNSZWN1cnNpdmUocmVm
ZXJlbmNlKTsKKyAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IGVmZmVjdFJlZmVyZW5jZXMoJmVm
ZmVjdCkpCisgICAgICAgIGNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKCpyZWZlcmVuY2UpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUwOGJhYzY1
YzNjMmNmYzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4uYTA3MzVmZjNjODVlYTM5MzBiMmNmYmE5MzJk
MGU1MDNhMjBiZTEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBTVkdG
aWx0ZXJCdWlsZGVyIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hTZXQ8RmlsdGVyRWZmZWN0
Kj4gRmlsdGVyRWZmZWN0U2V0OwogCi0gICAgU1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVy
RWZmZWN0PiBzb3VyY2VHcmFwaGljKTsKKyAgICBTVkdGaWx0ZXJCdWlsZGVyKCkgPSBkZWZhdWx0
OwogCiAgICAgdm9pZCBzZXRUYXJnZXRCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmIHIpIHsg
bV90YXJnZXRCb3VuZGluZ0JveCA9IHI7IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CkBAIC02Myw3ICs2Mywx
MCBAQCBwdWJsaWM6CiAgICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5kZXJlcihS
ZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQob2JqZWN0
KTsgfQogCiAgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0c1Jl
Y3Vyc2l2ZShGaWx0ZXJFZmZlY3QqKTsKKyAgICB2b2lkIGNsZWFyRmlsdGVySW1hZ2VzUmVjdXJz
aXZlKEZpbHRlckVmZmVjdCYpOworCisgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxG
aWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jik7CiAKIHByaXZhdGU6CiAgICAgaW5s
aW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGY2MmQ0ZWYyNDZiZDczOGE4MjVm
ZmEwZjdjZDZhNzkxYTJkOTQ2NDYuLjIyOTEyMGM5YWYxY2ExMjMzOTA4ZTNiY2E2OTA2MGI5N2U0
MmVhODEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0xMS0wMiAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIFJlZmFjdG9yIHRo
ZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmls
dGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTEtMDIgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBSZW1vdmUgdGhlIHJlZmVy
ZW5jZSB0byBGaWx0ZXIgZnJvbSBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjU1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0d28gZmFpbHVyZXMgcmVsYXRlZCB0byB0aGUg
Y29sb3Igc3BhY2UgdG8gVGVzdEV4cGVjdGF0aW9ucy4KKworICAgICAgICAqIFRlc3RFeHBlY3Rh
dGlvbnM6CisKKzIwMjEtMTAtMzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+
CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xkcyBhIGxpc3Qgb2Yg
RmlsdGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjEtMTEtMDEgIE1pY2hhZWwgU21pdGgg
IDxtaWtlQHczLm9yZz4KIAogICAgICAgICBbV2ViSW5zcGVjdG9yXVtDT1JTXSBTaG93IEhUVFAg
c3RhdHVzIGNvZGUgaW4gQ09SUyBtZXNzYWdlcy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443503</attachid>
            <date>2021-11-07 02:16:19 -0800</date>
            <delta_ts>2021-11-07 02:34:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211107021618.patch</filename>
            <type>text/plain</type>
            <size>403963</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNTM4ODU1ZTZmNTRh
NTJkN2Q2MzI5NDBlMTk1NjUzMmVhMWExNS4uZWY0Y2Y2M2VjMmQ0NGRhY2E1NTU5MzZjMWNkYzBk
NTZhZDY5ZmYyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5MiBAQAorMjAyMS0xMS0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFtGaWx0ZXJzIDYvXSBTaW1wbGlmeSBGaWx0ZXJFZmZlY3QgZ2VvbWV0cnkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjcwNQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmls
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
aW1hZ2VGb3JTb3VyY2VHcmFwaGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdCBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTik6CisgICAgICAgIChXZWJD
b3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6
aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6Om5v
cm1hbGl6ZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRl
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0
cml4OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUZsb29kOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVy
Z2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OkZFTW9y
cGhvbG9neSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6aXNBbHBoYUlt
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojppc0FscGhhSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUaWxlOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1
bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpjbGlwT3BlcmF0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6Om1heFByaW1pdGl2ZVN1YnJlZ2lvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmNsaXBUb01heFByaW1pdGl2ZVN1YnJl
Z2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpyZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpt
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OkZpbHRlckJvdW5k
YXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp4IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0Ojp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUFic29sdXRlSW1hZ2VS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJGaWx0ZXJJ
bWFnZXNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNs
aXBBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6Om1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNsZWFyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxwaGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRv
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNv
bnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4
ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omlu
cHV0RWZmZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRl
ckltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Qm91bmRh
cnlTZXQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvcGVyYXRpbmdDb2xvclNw
YWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0T3BlcmF0aW5n
Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmlzQWxwaGFJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQ29sb3JTcGFj
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnBsYXRmb3JtQXBwbHlD
b3JlSW1hZ2UgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6bnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRJc0FscGhhSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphYnNvbHV0ZVBhaW50UmVjdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEFic29sdXRlUGFp
bnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWF4RWZm
ZWN0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldE1heEVmZmVjdFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJFZmZlY3RUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1ggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNYKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzWSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1kpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpoYXNXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1dpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6aGFzSGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZWZm
ZWN0Qm91bmRhcmllcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnNldEVmZmVjdEJvdW5kYXJpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlwZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsaXBzVG9Cb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRDbGlwc1Rv
Qm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0
Q29sb3JTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OnNldFJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdo
dFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6
U291cmNlQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdl
UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRT
b3VyY2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1
bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpv
dXRwdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNlR3JhcGhpYyk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0
ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQp
OgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzZXRTdGFuZGFyZEF0dHJpYnV0ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6
OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5o
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OlNWR0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxlZFNpemVC
eUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6YXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1
aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEVmZmVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6dG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJCdWlsZGVyOjpjbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOiBEZWxldGVk
LgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKwor
MjAyMS0xMS0wNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAg
ICBbR1BVIFByb2Nlc3NdIFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMg
aW50byBhIG5ldyBjbGFzcyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBzdG9yYWdlIGFuZCB0aGUgbG9n
aWMgZm9yIG1hbmFnaW5nIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlCisgICAgICAgIEZpbHRl
ckVmZmVjdCB0byBpdHMgaW5wdXRzIHRvIGEgbmV3IGNhbGxzIG5hbWVkICdGaWx0ZXJSZXN1bHQn
LiBUaGlzIHdpbGwKKyAgICAgICAgc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIEZpbHRl
ckVmZmVjdC4gSXQgd2lsbCBhbHNvIGFsbG93IGludGVncmF0aW5nCisgICAgICAgIHRoZSBDb3Jl
SW1hZ2Ugc2VhbWxlc3NseSBhbmQgc2ltcGxpZnlpbmcgdGhlIGdlb21ldHJ5IGNhbGN1bGF0aW9u
LgorCisgICAgICAgIEluc3RlYWQgb2YgaGF2aW5nIHRocmVlIHdheXMgdG8gY3JlYXRlIHRoZSBy
ZXN1bHQgb2YgYSBGaWx0ZXJFZmZlY3QsIHRoZXJlCisgICAgICAgIHdpbGwgYmUgb25lIHdheSB3
aGljaCBpcyBieSBjYWxsaW5nIEZpbHRlckltYWdlOjpjcmVhdGUoKS4gVGhpcyBjYWxsIHdpbGwK
KyAgICAgICAgbm90IGNyZWF0ZSBhIGNvbmNyZXRlIHJlc3VsdC4gQnV0IHJlcXVlc3RpbmcgdGhl
IEltYWdlQnVmZmVyIG9yIGEgUGl4ZWxCdWZmZXIKKyAgICAgICAgZnJvbSBGaWx0ZXJJbWFnZSB3
aWxsIG1ha2UgdGhpcyBjcmVhdGlvbiBoYXBwZW5zLgorCisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAg
ICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAg
ICByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIGlzIHJlcGxhY2VkIGJ5IHRoZSBv
cHBvc2l0ZSAKKyAgICAgICAgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCku
IENvcnJlY3RpbmcgdGhlIHByZW11bHRpcGxpZWQKKyAgICAgICAgcmVzdWx0IHdpbGwgYmUgZG9u
ZSBieSBGaWx0ZXJFZmZlY3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1
cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToK
KyAgICAgICAgQ2xlYXJpbmcgdGhlIHJlc3VsdCBjYW4gYmUgZG9uZSBieSBudWxsaWZ5aW5nIGEg
c2luZ2xlIHBvaW50ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bnByZW11bHRp
cGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBs
aWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0VW5wcmVtdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Z2V0UHJlbXVs
dGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbnBy
ZW11bHRpcGxpZWRSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGx5aW5nQWxw
aGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbHlpbmdBbHBo
YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhl
bEJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGlu
YXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29u
dmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNl
Q29udmVyc2lvbik6IERlbGV0ZWQuCisgICAgICAgIEFsbCB0aGUgbG9naWMgb2YgdGhlc2UgZnVu
Y3Rpb25zIHdhcyBtb3ZlZCB0byBGaWx0ZXJJbWFnZS5jcHAuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpoYXNSZXN1bHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpzZXRNYXhFZmZlY3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
bWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RGaWx0ZXJSZXN1
bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZp
bHRlckVmZmVjdFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVs
dGlwbHlpbmdBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0Fs
cGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5UGl4ZWxCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVk
UGl4ZWxCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpsb2dpY2FsU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29sb3JTcGFjZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXJJZkV4aXN0cyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKwor
MjAyMS0xMS0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAg
ICBbR1BVIFByb2Nlc3NdIFJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRl
ckVmZmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMyNTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW5zdGVhZCBvZiBoYXZpbmcgYSByZWZlcmVuY2UgdG8gdGhlIEZpbHRlciBpbiB0aGUgRmlsdGVy
RWZmZWN0LCB3ZSBhcmUKKyAgICAgICAgZ29pbmcgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUg
RmlsdGVyIHRvIHRoZSBGaWx0ZXJFZmZlY3QgZnVuY3Rpb25zCisgICAgICAgIG9ubHkgd2hlbiBu
ZWVkZWQuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVy
Q29yZUltYWdlLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5o
OgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbG9yTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1h
dHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21w
b25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25l
bnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVN
YXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFRHJvcFNoYWRvdzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
dzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9w
U2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFTWVyZ2U6OkZFTWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3Jw
aG9sb2d5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpGRU9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zm
c2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9m
ZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxp
Z2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxh
ckxpZ2h0aW5nOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1
cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphcHBseUZpbHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlciBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rp
b24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJG
dW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBo
YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3Jh
cGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFw
aGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGlj
OjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdy
YXBoaWMpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1fc291cmNl
R3JhcGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUJyaWdodG5lc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQ29udHJhc3RFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0Vm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmF5U2NhbGVFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlSHVlUm90YXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUludmVydEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGFjaXR5RWZmZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVNlcGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0Zp
bHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxv
Y2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
bGFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFy
SW50ZXJtZWRpYXRlUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5
RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZFJlZmVy
ZW5jZUZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBz
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVs
ZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQgY29u
c3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBz
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToK
KyAgICAgICAgKiBzdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1vcnBob2xvZ3lF
bGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRVRpbGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZCBjb25z
dCk6CisgICAgICAgICogc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAgICAgICogc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUlt
YWdlOjpGRUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmg6CisKKzIwMjEtMTAtMzAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fp
ZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xk
cyBhIGxpc3Qgb2YgRmlsdGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB0aGUgQ1NTIHJlZmVyZW5jZSBmaWx0
ZXIgaXMgYnVpbHQgYXMgYW4gU1ZHRmlsdGVyIGFuZCBpdAorICAgICAgICBpcyBrZXB0IGFzIGEg
RmlsdGVyRnVuY3Rpb24gaW4gdGhlIENTU0ZpbHRlciBmdW5jdGlvbnMnIGxpc3QuIFRoZSBGaWx0
ZXIgCisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmlsdGVyRWZmZWN0cyBvZiB0aGUgcmVm
ZXJlbmNlZCBmaWx0ZXIgd2lsbCBiZSBhbgorICAgICAgICBTVkdGaWx0ZXIgaW5zdGVhZCBvZiBo
YXZpbmcgYSBDU1NGaWx0ZXIuIFRoaXMgd2lsbCBhbGxvdyBoYXZpbmcgY29sb3IKKyAgICAgICAg
c3BhY2luZyBmb3IgdGhlIHJlZmVyZW5jZWQgZmlsdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgY29s
b3Igc3BhY2luZyBvZgorICAgICAgICBDU1NGaWx0ZXIuIAorCisgICAgICAgIEFsc28gdGhpcyBw
YXRjaCBtYWtlcyBhIHNpbmdsZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHByaW1pdGl2ZXMg
b2YKKyAgICAgICAgdGhlIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyB0d28gZnVuY3Rpb25z
LgorCisgICAgICAgIFRvIGFsbG93IG9wZXJhdGluZyB0aHJvdWdoIHRoZSBTVkdGaWx0ZXIgYXMg
YSBGaWx0ZXJGdW5jdGlvbiBvd25lZCBieQorICAgICAgICBDU1NGaWx0ZXIsIHRoZSBTVkdGaWx0
ZXIgd2lsbCBoYXZlIGEgcG9pbnRlciB0byBpdHMgbGFzdEVmZmVjdC4KKworICAgICAgICAqIGNz
cy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcklt
YWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZl
Y3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3V0c2V0cyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5j
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246Om91dHNldHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmNsZWFyUmVzdWx0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZm
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRw
dXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZp
bHRlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAg
ICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmls
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
Y29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTEwLTI4ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFr
ZSBTVkdGaWx0ZXIgYW5kIENTU0ZpbHRlciB3b3JrIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIHN5
c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMy
NDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3Vy
cmVudGx5IFNWR0ZpbHRlciBzZXRzIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBvZiBGaWx0ZXIKKwor
ICAgICAgICAxLiBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTogdGhpcyBpcyB0
aGUgc2NhbGluZyBwYXJ0IGZyb20gdGhlCisgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uIGZyb20g
dGhlIHRhcmdldCBlbGVtZW50IHRvIHRoZSBvdXRlcm1vc3QgY29vcmRpbmF0ZSBzeXN0ZW0KKyAg
ICAgICAgMi4gRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjogdGhpcyBpcyB0aGUgY2xhbXBp
bmcgc2NhbGUgaWYgdGhlIHNpemUKKyAgICAgICAgICAgb2YgdGhlIHJlc3VsdCBJbWFnZUJ1ZmZl
cnMgZXhjZWVkcyBNYXhDbGFtcGVkQXJlYQorCisgICAgICAgIEFuZCB0aGUgQ1NTRmlsdGVyIHNl
dHMgdGhlIGZvbGxvd2luZyBtZW1iZXIgb2YgRmlsdGVyOgorCisgICAgICAgIDEuIGZsb2F0IG1f
ZmlsdGVyU2NhbGU6IHRoaXMgaXMgdGhlIGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKQor
CisgICAgICAgIFRoZSBkaXNjcmVwYW5jeSBoYXBwZW5zIGFsc28gd2hlbiBjcmVhdGluZyB0aGUg
cmVzdWx0IEltYWdlQnVmZmVycy4gRm9yIAorICAgICAgICBTVkdGaWx0ZXIsIHdlIGNyZWF0ZSB0
aGVtIHdpdGggc2NhbGVGYWN0b3I9MS4gVGhpcyBtZWFucyB0aGUgbG9naWNhbFNpemUKKyAgICAg
ICAgPT0gYmFja2VuZFNpemUuIEJ1dCBmb3IgQ1NTRmlsdGVyIHdlIGNyZWF0ZSB0aGVtIHdpdGgg
c2NhbGVGYWN0b3IKKyAgICAgICAgPSBtX2ZpbHRlclNjYWxlLiBUaGlzIG1lYW5zIHRoZSBsb2dp
Y2FsU2l6ZSAhPSBiYWNrZW5kU2l6ZSBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgV2UgbmVlZCB0
byB1bmlmeSB0aGUgY29vcmRpbmF0ZXMgc3lzdGVtIGZvciBib3RoIGZpbHRlcnMuIFdlIG5lZWQg
YWxzbyB0bworICAgICAgICByZXBsYWNlIHRoZSB0aHJlZSBtZW1iZXJzIGJ5IGEgc2luZ2xlIEZs
b2F0U2l6ZSBjYWxsZWQgIm1fZmlsdGVyU2NhbGUiLgorCisgICAgICAgICogY3NzL0NTU0ZpbHRl
ckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6
aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZp
bHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyU2Nh
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3VyY2VJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpmaWx0ZXJSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2Fs
ZWRCeUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlc29sdXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphYnNvbHV0ZVRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNDU1NGaWx0ZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29s
dXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1
ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVubXVsdGlwbGll
ZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZl
clRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJ
bWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0Zp
bHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6
OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
c2NhbGVkQnlGaWx0ZXJTY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmg6CisKKzIwMjEtMTAtMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBJbnRyb2R1Y2UgRmlsdGVyRnVuY3Rpb24g
YW5kIG1ha2UgaXQgdGhlIGJhc2UgY2xhc3Mgb2YgRmlsdGVyIGFuZCBGaWx0ZXJFZmZlY3QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQxMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWxsb3dz
IENTU0ZpbHRlciB0byBob2xkIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMuIFRoZSBGaWx0ZXIg
aW4KKyAgICAgICAgdGhpcyBjYXNlIHdpbGwgYWN0IGxpa2UgYSBjb21wb3NpdGUgcGF0dGVybiBv
ZiB0aGUgRmlsdGVyRWZmZWN0LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbworICAgICAgICAx
LiBSZW1vdmVzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGZpbHRlck5hbWUoKSBmcm9tIGFsbCB0aGUg
RmlsdGVyRWZmZWN0CisgICAgICAgICAgIGNsYXNzZXMuIEl0IHJlcGxhY2VzIGl0IHdpdGggYSBz
dGF0aWMgZnVuY3Rpb24gaW4gRmlsdGVyRnVuY3Rpb24uCisgICAgICAgIDIuIFJlbW92ZXMgdGhl
IHZpcnR1YWwgZnVuY3Rpb24gZmlsdGVyRWZmZWN0VHlwZSgpIGFuZCB0aGUgZnVuY3Rpb24KKyAg
ICAgICAgICAgRmlsdGVyRWZmZWN0OjpmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBzaW5jZSB0aGV5
IGNhbiBib3RoIGJlIHJlcGxhY2VkCisgICAgICAgICAgIGJ5IEZpbHRlckZ1bmN0aW9uOjpmaWx0
ZXJUeXBlKCkuCisgICAgICAgIDMuIEFkZHMgdHJhaXQgbWFjcm9zIGZvciBhbGwgRmlsdGVyRWZm
ZWN0cyBhbmQgdGhlIFNWR0ZpbHRlcnMgY2xhc3MuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1
cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVu
ZDo6RkVCbGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
Lmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4
OjpGRUNvbG9yTWF0cml4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaDoKKyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgor
ICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpG
RUNvbXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZl
TWF0cml4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1
c2VMaWdodGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1
c2VMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZF
RGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpGRURyb3BT
aGFkb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93
Lmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpGRUZsb29kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zm
c2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6Cisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdo
dGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OkZpbHRlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZmlsdGVyRWZmZWN0VHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlwZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OmZpbHRlclR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OmlzQ1NTRmlsdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
Ojppc1NWR0ZpbHRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
aXNGaWx0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzRmls
dGVyRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpzb3Vy
Y2VBbHBoYU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUdy
YXBoaWNOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1l
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAg
ICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUltYWdlOjpGRUltYWdlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoKKwogMjAyMS0xMS0wMSAgRG9uIE9s
bXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDdXJsXSBGaXggLVdy
ZW9yZGVyLWN0b3IgaW4gQ3VybFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOGRhMjRiNzhkYTU3
ZGMzYmQyY2VkMTE4NGMyZWRkZmYwYjhkZTI0Ni4uOGYzMGUzM2Y4MmI3MjI1N2IwYTllYWYyMDg4
MTFjOGNiY2M5YjE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNjIsNiArMjA2Miw4IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDI1NzU1YmMzMzhlNzZkODc5MGQwYjQzYzA3ZDJkMmFiZjA2MGU3ODUuLjdkOWI0
ZmVkZDhjNWIwOTFjMDJlM2JmZTE4ZDllMDllZDQxZGI1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTgsNiArMjI5OCw3
IEBACiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4
QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgw
RDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5
U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0
RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJG
QjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1h
Z2UuaCAqLzsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUx
MjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8q
IE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0
MDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNTYxLDYgKzEwNTYyLDggQEAKIAkJNzI0RUU1
NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2Vy
dmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFu
Z2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENB
REMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZl
SW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQx
MDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2
QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAw
ODMzOTc1IC8qIFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNjZGMDE0MjI0MUJGQjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9y
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUg
LyogU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmlt
aXRpdmVQcm9wZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDU3MSw2ICsxMDU3NCw5IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmlt
YXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
aW9uQWRkaXRpdmVMaXN0RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNjZGMDI5MjI0MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RG
dW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5
NzUgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjky
NzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI2QkUwMkIyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNkJFMDM5MjczMzRCNDIwMDczOEZGRCAvKiBGaWx0ZXJCb3VuZGFyeVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTI4NywxMCArMjUyOTMsMTUgQEAKIAkJCQk4NDczMEQ2RjEyNDhGMEIz
MDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3MDEyNDhGMEIzMDBE
M0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi8sCiAJCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5
IC8qIEZpbHRlci5oICovLAorCQkJCTcyNkJFMDM5MjczMzRCNDIwMDczOEZGRCAvKiBGaWx0ZXJC
b3VuZGFyeVNldC5oICovLAogCQkJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJF
ZmZlY3QuY3BwICovLAogCQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZl
Y3QuaCAqLywKIAkJCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwICovLAogCQkJCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlci5oICovLAorCQkJCTcyNjJENzU3MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJG
dW5jdGlvbi5jcHAgKi8sCisJCQkJNzI2MkQ3NTYyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1
bmN0aW9uLmggKi8sCisJCQkJNzI2QkUwMjkyNzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdl
LmNwcCAqLywKKwkJCQk3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAq
LywKIAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAq
LywKIAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8s
CiAJCQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICov
LApAQCAtMzI3ODMsNiArMzI3OTQsNyBAQAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAv
KiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJDODU2NTM0MjRDMEY3M0MwMEEz
NzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkNBQTRB
M0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjZCRTAyRDI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJP
cGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAv
KiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4
MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGM2N2EzNWIwNzE1YjcyMWVkODk5MmRl
Y2Q0OWZhOGQwYjgwNjQ3NzAuLjI5Yzc2ZjgzZTNlNWQ0YjQ3NjNkMWJiOGIwZjk2MTBjYjJlNzM4
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTEx
NiwyMCArMTE2LDIxIEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2Uo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zv
cm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBi
dWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBh
dXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOwotICAgIGlmICghdGV4dHVyZSkKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworICAgIGF1dG8gc291cmNlSW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIDEsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghc291cmNlSW1hZ2Up
CiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAgYXV0byBpbWFnZVJl
Y3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKLSAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJh
d0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBhdXRvIHNvdXJjZUltYWdlUmVjdCA9IEZs
b2F0UmVjdCB7IHsgfSwgc2l6ZSB9OworICAgIHNvdXJjZUltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlKCppbWFnZSwgc291cmNlSW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NT
RmlsdGVyOjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUo
dGV4dHVyZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7
Ci0gICAgY3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWNz
c0ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3Vt
ZXI6OkZpbHRlckZ1bmN0aW9uKSkKKyAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3Jl
YXRlKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUpOworICAgIGlm
ICghY3NzRmlsdGVyKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKLSAgICBj
c3NGaWx0ZXItPmFwcGx5KCk7CisKKyAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChz
b3VyY2VJbWFnZVJlY3QpOworICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2UoV1RGTW92ZShz
b3VyY2VJbWFnZSkpOworICAgIGNzc0ZpbHRlci0+YXBwbHlGaWx0ZXIoKTsKIAogICAgIGF1dG8q
IG91dHB1dCA9IGNzc0ZpbHRlci0+b3V0cHV0KCk7CiAgICAgaWYgKCFvdXRwdXQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggODhj
ZTk0MjQ5NzNmNzhiYmYxOWViM2YxYzM5NzgwNGVkMGU3M2ZmNi4uYjhlOThkN2E4MjllYjliZjI0
ZDU3MzVhYWE4ZDI1YWVhOTk5OWRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMTMzLDcgKzEzMyw3IEBAIGJvb2wgSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRTaXpl
JiBzY2FsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gVGhlIGFyZWEgb2Ygc2Nh
bGVkIHNpemUgaXMgYmlnZ2VyIHRoYW4gdGhlIHVwcGVyIGxpbWl0LCBhZGp1c3QgdGhlIHNjYWxl
IHRvIGZpdC4KLSAgICBzY2FsZS5zY2FsZShzcXJ0ZihNYXhDbGFtcGVkQXJlYSAvIChzY2FsZWRT
aXplLndpZHRoKCkgKiBzY2FsZWRTaXplLmhlaWdodCgpKSkpOworICAgIHNjYWxlLnNjYWxlKHNx
cnRmKE1heENsYW1wZWRBcmVhIC8gc2NhbGVkU2l6ZS5hcmVhKCkpKTsKICAgICBBU1NFUlQoIXNp
emVOZWVkc0NsYW1waW5nKHNpemUsIHNjYWxlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCmluZGV4IGU2Yzhk
ZjRkNTViNDU2MTM1NDllM2FmNDkxOTJhMjZlMmMwNDRhZjcuLjdjZDE2YTI4NWZlOWUwOWJhMWFl
NDcyNjEwZTk4NjBjNzJmYmM3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5oCkBAIC00NywyMCArNDcsMjAgQEAgY2xhc3MgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewogcHVibGlj
OgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKICAgICBSZXRhaW5QdHI8Q0lDb250ZXh0PiBz
aGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIGFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3Qm
KSBmaW5hbDsKICAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb3V0
cHV0SW1hZ2U7IH0KICAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgZmluYWw7Ci0gICAg
RmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0IGZpbmFsOworICAg
IEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmKSBj
b25zdCBmaW5hbDsKICAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7CiAgICAgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgUmV0YWluUHRyPENJ
SW1hZ2U+IGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9pZCByZW5kZXJU
b0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpIGZpbmFsOworICAgIFJldGFpblB0cjxDSUltYWdl
PiBjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYsIEZpbHRlckVmZmVjdCYpOworICAgIHZv
aWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSBmaW5h
bDsKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZl
Y3QmKTsKICAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZl
Y3QmKTsKICAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFwaGlj
KFNvdXJjZUdyYXBoaWMmKTsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VH
cmFwaGljKGNvbnN0IEZpbHRlciYpOwogICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZF
Q29sb3JNYXRyaXgoY29uc3QgRkVDb2xvck1hdHJpeCYsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8
Q0lJbWFnZT4+Jik7CiAgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb21wb25lbnRU
cmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiwgVmVjdG9yPFJldGFpblB0cjxDSUlt
YWdlPj4mKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5tbQppbmRleCA5N2UxMTM3YjI5ZDcxYzJiNTQ0MTU3MzA2NzI0MDBiODI0MjhiMzYx
Li5iZGQ1MWY1NWEzMjgyZDQ5YWYwNjg5YzkwZDU4OGNkNWRmOTc1ZDRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCkBAIC03MiwxMSArNzIs
MTEgQEAgc3RhdGljIGJvb2wgaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
KGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGUKIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZmZWN0
KQogewogICAgIC8vIEZJWE1FOiBjaGFuZ2UgcmV0dXJuIHZhbHVlIHRvIHRydWUgb25jZSB0aGV5
IGFyZSBpbXBsZW1lbnRlZAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlw
ZSgpKSB7CisgICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyVHlwZSgpKSB7CiAgICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OiB7Cisg
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29sb3JNYXRyaXg6IHsKICAgICAgICAgc3dp
dGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewogICAgICAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgpAQCAtODgsOTAgKzg4LDU1IEBAIGJvb2wgRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRl
ckVmZmVjdCYgZWZmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6CiAgICAgICAgIHJldHVybiBpc051bGxPckxpbmVhckNvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24oZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0KSk7
CiAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29u
dm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpZmZ1c2VMaWdodGlu
ZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50TWFwOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6R2F1c3NpYW5CbHVy
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok1lcmdl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5OgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNw
ZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQordm9p
ZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCiB7Ci0gICAgbV9vdXRwdXRJbWFn
ZSA9IGNvbm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7CisgICAgbV9vdXRwdXRJbWFnZSA9IGNv
bm5lY3RDSUZpbHRlcnMoZmlsdGVyLCBsYXN0RWZmZWN0KTsKICAgICBpZiAoIW1fb3V0cHV0SW1h
Z2UpCiAgICAgICAgIHJldHVybjsKLSAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGxhc3RFZmZlY3Qp
OworICAgIHJlbmRlclRvSW1hZ2VCdWZmZXIoZmlsdGVyLCBsYXN0RWZmZWN0KTsKIH0KIAotUmV0
YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lG
aWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYgZmls
dGVyLCBGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1h
Z2U+PiBpbnB1dEltYWdlczsKICAgICAKICAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRF
ZmZlY3RzKCkpIHsKLSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygq
aW4pOworICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwg
KmluKTsKICAgICAgICAgaWYgKCFpbnB1dEltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChpbnB1dEltYWdlKTsKICAgICB9Ci0gICAg
ZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZWZmZWN0LnNldFJlc3Vs
dENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgCi0gICAgaWYg
KGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSkKKworICAg
IGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBlZmZlY3QuY2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJl
Y3QoZmlsdGVyKTsKKyAgICBpZiAoYWJzb2x1dGVJbWFnZVJlY3QuaXNFbXB0eSgpIHx8IEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZl
Y3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlclR5cGUoKSkgewogICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICByZXR1cm4g
aW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVjdCkpOwot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKKyAgICAgICAgcmV0dXJu
IGltYWdlRm9yU291cmNlR3JhcGhpYyhmaWx0ZXIpOworICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUNvbG9yTWF0cml4OgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4
KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CiAgICAgICAgIHJldHVybiBpbWFnZUZv
ckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0
KSwgaW5wdXRJbWFnZXMpOwogCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0ZXJz
IHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBDSUlt
YWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNv
bnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRp
bmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1
cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJn
ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpT
cGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJldGFpblB0cjxDSUltYWdl
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNv
dXJjZUdyYXBoaWMmIGVmZmVjdCkKK1JldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogewotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGVmZmVjdC5maWx0ZXIoKS5zb3Vy
Y2VJbWFnZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJ
bWFnZSgpOwogICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIApAQCAtMjczLDIyICsyMzgsMjIgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAogICAgIHJldHVybiBtX291dHB1dEltYWdlQnVm
ZmVyLmdldCgpOwogfQogICAgIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCit2b2lkIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCiB7Ci0gICAgRmxvYXRTaXplIGNs
YW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRl
clNjYWxlKCksIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOworICAgIEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmNhbGN1bGF0ZUFic29sdXRl
SW1hZ2VSZWN0KGZpbHRlcikuc2l6ZSgpOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0U2l6ZSk7CisgICAgbV9vdXRwdXRJbWFnZUJ1ZmZl
ciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIDEsIGxhc3RFZmZl
Y3QuaW1hZ2VDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFtX291
dHB1dEltYWdlQnVmZmVyKSB7CiAgICAgICAgIGNsZWFyUmVzdWx0KCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBbc2hhcmVkQ0lDb250ZXh0KCkuZ2V0KCkgcmVuZGVyOiBtX291dHB1
dEltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBtX291dHB1dEltYWdlQnVmZmVyLT5zdXJmYWNlKCku
c3VyZmFjZSgpIGJvdW5kczpkZXN0UmVjdChsYXN0RWZmZWN0KSBjb2xvclNwYWNlOmxhc3RFZmZl
Y3QucmVzdWx0Q29sb3JTcGFjZSgpLnBsYXRmb3JtQ29sb3JTcGFjZSgpXTsKKyAgICBbc2hhcmVk
Q0lDb250ZXh0KCkuZ2V0KCkgcmVuZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNl
OiBtX291dHB1dEltYWdlQnVmZmVyLT5zdXJmYWNlKCkuc3VyZmFjZSgpIGJvdW5kczpkZXN0UmVj
dChmaWx0ZXIsIGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5pbWFnZUNvbG9yU3Bh
Y2UoKS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07CiB9CiAgICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVm
ZmVjdCkgY29uc3QKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZGVz
dFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVj
dCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigp
LmZpbHRlclNjYWxlKCkpOworICAgIEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmNhbGN1
bGF0ZUFic29sdXRlSW1hZ2VSZWN0KGZpbHRlcikuc2l6ZSgpOwogICAgIEZsb2F0UmVjdCBkZXN0
UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKICAgICByZXR1cm4gZGVz
dFJlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
cHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IDI2MTEwY2RmYjBiYjZj
ZjQ5MDQ1ODM4Nzc4N2FjMTBmYTE3MWNmMTguLmQzNzBmMDIyZWExMWFhYTAxYWMyNzBiYzQyN2I5
NzhmNTk3NjQ0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0yNSw4ICsyNSw3
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRkVCbGVuZE5FT05faAotI2RlZmlu
ZSBGRUJsZW5kTkVPTl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKIApAQCAtMTA3LDQzICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEp
OwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUEgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QpOwotCi0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlCID0gaW4yLT5wcmVtdWx0aXBsaWVkUmVz
dWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7Ci0KLSAgICB1bnNpZ25lZCBzb3VyY2VQaXhlbEFycmF5
TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOwotICAgIEFTU0VSVChwaXhlbEFy
cmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7Ci0KLSAgICBpZiAoc291
cmNlUGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7Ci0gICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNv
dXJjZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVsIHdlIGV4
cGFuZCBpdCB0byB0d28uCi0gICAgQVNTRVJUKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPiAwKTsK
LSAgICB1aW50MzJfdCBzb3VyY2VBWzJdID0gezAsIDB9OwotICAgIHVpbnQzMl90IHNvdXJjZUJB
bmREZXN0WzJdID0gezAsIDB9OwotCi0gICAgc291cmNlQVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpKVswXTsKLSAgICBzb3VyY2VCQW5k
RGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+
ZGF0YSgpKVswXTsKLSAgICBwbGF0Zm9ybUFwcGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3Qp
LCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIDgpOwotICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVsw
XSA9IHNvdXJjZUJBbmREZXN0WzBdOwotfQotCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlO
RU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhl
bEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCkKK3ZvaWQgRkVCbGVuZDo6
cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVk
IGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LCB1bnNp
Z25lZCBjb2xvckFycmF5TGVuZ3RoKQogewogICAgIHVpbnQ4X3QqIHNvdXJjZVBpeGVsQSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNyY1BpeGVsQXJyYXlBKTsKICAgICB1aW50OF90KiBz
b3VyY2VQaXhlbEIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzcmNQaXhlbEFycmF5Qik7
CkBAIC0yMDIsOCArMTY1LDQ2IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5z
aWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyCiAgICAgfQogfQog
Citib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorewor
ICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1
dG8mIGlucHV0MiA9ICppbnB1dEVmZmVjdCgxKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBv
dXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKworICAgIGF1dG8mIG91cHV0UGl4ZWxCdWZmZXIgPSBv
dXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CisgICAgaWYgKCFvdXB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3VwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisg
ICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0
KGlucHV0KTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0KTsK
KworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QyID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFn
ZVJlY3QoaW5wdXQyKTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheTIgPSBpbnB1dDIuZ2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFn
ZVJlY3QyKTsKKworICAgIHVuc2lnbmVkIGlucHV0UGl4ZWxBcnJheUxlbmd0aCA9IGlucHV0UGl4
ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgQVNTRVJUKGlucHV0UGl4ZWxBcnJheUxlbmd0aCA9PSBp
bnB1dFBpeGVsQXJyYXkyLT5sZW5ndGgoKSk7CisKKyAgICBpZiAoaW5wdXRQaXhlbEFycmF5TGVu
Z3RoID49IDgpIHsKKyAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oaW5wdXRQaXhlbEFycmF5LT5k
YXRhKCksIGlucHV0UGl4ZWxBcnJheTItPmRhdGEoKSwgb3V0cHV0UGl4ZWxBcnJheS5kYXRhKCks
IGlucHV0UGl4ZWxBcnJheUxlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVsIHdlIGV4cGFuZCBpdCB0byB0d28uCisg
ICAgQVNTRVJUKGlucHV0UGl4ZWxBcnJheUxlbmd0aCA+IDApOworICAgIHVpbnQzMl90IHNvdXJj
ZUFbMl0gPSB7IDAsIDAgfTsKKyAgICB1aW50MzJfdCBzb3VyY2VCQW5kRGVzdFsyXSA9IHsgMCwg
MCB9OworCisgICAgc291cmNlQVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihpbnB1
dFBpeGVsQXJyYXktPmRhdGEoKSlbMF07CisgICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oaW5wdXRQaXhlbEFycmF5Mi0+ZGF0YSgpKVswXTsKKworICAg
IHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUEpLCBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CisgICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdCo+KG91dHB1dFBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBd
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLQotI2VuZGlmIC8vIEZFQmxlbmRORU9O
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RGlzdGFudExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAppbmRleCBlNWZiMWZmNjY1ZDNlYjA3ZjQ4
ZWUxZDAyYmJmZmNjNmIwNDQxZjg5Li4xZmIwMzdmZTExZjY2OTFlZDAzOTRhNDRlYWNjZDAyNzli
YjZkMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCkBAIC0zNSw3ICszNSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQ
YWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEpCit2b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsK
ICAgICBmbG9hdCBhemltdXRoID0gZGVnMnJhZChtX2F6aW11dGgpOwogICAgIGZsb2F0IGVsZXZh
dGlvbiA9IGRlZzJyYWQobV9lbGV2YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKaW5k
ZXggYzFlMzBlZGU3NTk4MzcyOGE2MzJiY2NmZmIwOTk3M2EzYTRlNzJmZC4uMDAzZmUxOWNkMTI2
MjM5OTY3YjFiMjIyNmZkNzkwNTU0MmJlYmQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5o
CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldEF6aW11dGgoZmxvYXQpIG92
ZXJyaWRlOwogICAgIGJvb2wgc2V0RWxldmF0aW9uKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZv
aWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdo
dGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAppbmRleCA1YWM3ZjQ5MGQ0Y2RhNTMzYTQxZjVjM2Q4NTQ1MzJjMThhZGNkYjY2Li45
ODc2NTczY2ZmMjc0MTY1NGJiZDM1MmEyODBhZjMwOWE4NGZhNmMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAgLTM0
LDE1ICszNCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQo
RmlsdGVyJiBmaWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRl
ciwgVHlwZTo6QmxlbmQpCitGRUJsZW5kOjpGRUJsZW5kKEJsZW5kTW9kZSBtb2RlKQorICAgIDog
RmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVCbGVuZCkKICAgICAsIG1fbW9kZSht
b2RlKQogewogfQogCi1SZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
LCBCbGVuZE1vZGUgbW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxlbmRNb2Rl
IG1vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0ZXIsIG1vZGUp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKG1vZGUpKTsKIH0KIAogYm9vbCBG
RUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCkBAIC01NCwyMyArNTQsMjkgQEAg
Ym9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB9CiAKICNpZiAhSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikK
IHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVj
dCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSAqaW5wdXRFZmZlY3QoMSkt
PmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRl
eHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW5w
dXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbnB1dEltYWdlMiA9IGlu
cHV0Mi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSB8fCAhaW5wdXRJbWFnZTIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQu
aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3QoaW5wdXQucmVsYXRp
dmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0MiA9
IEZsb2F0UmVjdChpbnB1dDIucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKIAot
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dp
Y2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsK
KyAgICBHcmFwaGljc0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4
dCgpOworCisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UyLCBp
bnB1dEltYWdlUmVjdDIpOworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1
dEltYWdlLCBpbnB1dEltYWdlUmVjdCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkg
fSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIHJldHVy
biB0cnVlOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKaW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4
NTE3YjUwNzllNzk2Ni4uMzM2OTNjMTk5N2JiYTdiYmRlODg5MDU4N2IxNTZlZWUzMzc2YzVjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmgKQEAgLTIzLDIyICsyMywyMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUJsZW5kIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoRmls
dGVyJiwgQmxlbmRNb2RlKTsKKyAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShCbGVuZE1v
ZGUpOwogCiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQogICAgIGJvb2wgc2V0QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAKIHByaXZhdGU6Ci0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJsZW5kIjsgfQor
ICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNpZ25lZCBjaGFy
KiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVk
IGNoYXIqIGRzdFBpeGVsQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjb2xvckFycmF5TGVuZ3RoKTsKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVk
IGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5z
aWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKQEAgLTQ2LDEwICs0NSw5IEBAIHByaXZhdGU6CiAK
ICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQo
RmlsdGVyJiwgQmxlbmRNb2RlKTsKLQogICAgIEJsZW5kTW9kZSBtX21vZGU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVD
VChGRUJsZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMTY0MjJkNmRjNWI1N2VjNmY3NDdh
NDIxMGMyODU0MzMyYmExZDNlNS4uYTllNTIyYThlY2M3ZWFjODM1OWY5MjNmMGQ3OTM1Nzc3NTY0
YWRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zNSwxNiArMzUsMTYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmls
dGVyLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQorRkVDb2xvck1hdHJpeDo6
RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVl
cykKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29sb3JNYXRyaXgp
CiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkKIHsK
IH0KIAotUmVmPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZp
bHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCitSZWY8
RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKENvbG9yTWF0cml4VHlwZSB0eXBl
LCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
Q29sb3JNYXRyaXgoZmlsdGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRUNvbG9yTWF0cml4KHR5cGUsIFdURk1vdmUodmFsdWVzKSkpOwogfQog
CiBib29sIEZFQ29sb3JNYXRyaXg6OnNldFR5cGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUpCkBAIC0y
NzMsMjMgKzI3MywzOSBAQCB2b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
QXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50UwogICAgIH0KIH0KIAotdm9p
ZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUNvbG9yTWF0
cml4Ojppc0FscGhhSW1hZ2UoKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKKyAgICByZXR1cm4gbV90eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1J
TkFOQ0VUT0FMUEhBOworfQogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1
cm47CitWZWN0b3I8ZmxvYXQ+IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMoY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzKQoreworICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZh
bHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9h
dCh2YWx1ZXNbaV0pOworICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOworfQorCitib29sIEZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQoreworICAg
IGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8m
IG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIAorICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBv
dXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0
KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIGF1dG8gaW5wdXRCdWZmZXIgPSBpbnB1dC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmIChpbnB1dEJ1ZmZlcikgeworICAgICAgICBhdXRvIGFic29s
dXRlSW1hZ2VSZWN0ID0gRmxvYXRSZWN0KGlucHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3Qo
b3V0cHV0KSk7CisgICAgICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbnB1dEJ1ZmZlciwgYWJzb2x1dGVJbWFnZVJlY3QpOworICAgIH0KIAotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAgICBJbnRSZWN0
IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUo
KSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihm
b3JtYXQsIGltYWdlUmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG91
dHB1dC5jb2xvclNwYWNlKCkgfTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCBv
dXRwdXRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IG91dHB1dEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVjdCk7CiAgICAg
aWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICBhdXRv
IHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKQEAgLTMxMCwxMSAr
MzI2LDExIEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QToKICAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIHNl
dElzQWxwaGFJbWFnZSh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0
SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICBvdXRw
dXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworICAgIHJl
dHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAy
OWU0MWE4YWVkMWU0ZjBiNTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi5jM2Y4YmQwYmM0YTg1ODVm
YjEzNjMxY2M3ZGZmMWJlNGYzODQyMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMjIsOCArMjIs
NiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzgsNyArMzYsNyBAQCBlbnVtIENvbG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZF
Q29sb3JNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3Rv
cjxmbG9hdD4mJik7CisgICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JN
YXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoQ29sb3JNYXRyaXhU
eXBlKTsKQEAgLTQ4LDEzICs0NiwxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2
YWx1ZSk7CiAgICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVu
dHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLQorICAgIHN0YXRpYyBWZWN0b3I8
ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKTsKKyAg
ICAKIHByaXZhdGU6Ci0gICAgRkVDb2xvck1hdHJpeChGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUs
IFZlY3RvcjxmbG9hdD4mJik7CisgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZl
Y3RvcjxmbG9hdD4mJik7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIkZFQ29sb3JNYXRyaXgiOyB9CisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtOTMs
NyArOTIsNCBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVD
b21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb2xvck1hdHJp
eCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBl
ZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCi0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9y
TWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODQ3ZWE1OGY1Zjli
MDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uMmNkN2NmY2I1NWI2NWY3OGU5YTViZjQxMWI4
YjhiZWQyNTJmOTliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0zMyw5
ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1
ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9u
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitG
RUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
CisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyKQogICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5j
dGlvbihncmVlbkZ1bmN0aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpA
QCAtNDMsMTAgKzQyLDEwIEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNm
ZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9CiAKLVJlZjxG
RUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAorUmVm
PEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKICAgICBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGFscGhhRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRU
cmFuc2ZlcihmaWx0ZXIsIHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24s
IGFscGhhRnVuY3Rpb24pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVudFRy
YW5zZmVyKHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVu
Y3Rpb24pKTsKIH0KIAogdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlU
YWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQpAQCAt
MTA0LDEzICsxMDMsMTQgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFU
YWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9CiB9CiAKLXZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVD
b21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7
Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0
ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpm
aWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIApAQCAtMTIwLDggKzEyMCw5
IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwogICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFi
bGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CiAKLSAgICBJbnRSZWN0IGRy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGF1
dG8gaW5wdXRJbWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1
dCk7CisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICB1aW50OF90KiBk
YXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBp
eGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsT2Zmc2V0ICs9IDQpIHsKQEAgLTEzMCw2ICsxMzEsOCBAQCB2b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIGRhdGFbcGl4ZWxPZmZz
ZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwogICAgICAgICBkYXRh
W3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAzXV07CiAg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBn
cmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJs
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEy
M2VkYTg3MTE5YzRlYjM0OGE1MS4uNmFkYTljMGFiYmU1YzJmOWQ2NWJkOTE5ZmZlYzRmMTczZDAw
MzQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIyLDggKzIyLDYgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFz
cyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOworICAgIHN0YXRpYyBSZWY8
RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIHJlZEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWRGdW5jdGlvbjsgfQogICAg
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gZ3JlZW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZ3JlZW5GdW5jdGlvbjsgfQpAQCAtNjIsMTAgKzU5LDcgQEAgcHVibGljOgogICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gYWxwaGFGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxw
aGFGdW5jdGlvbjsgfQogCiBwcml2YXRlOgotICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVy
JiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7Ci0KLSAgICAgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvbmVudFRyYW5zZmVyIjsgfQorICAg
IEZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVk
RnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKIAogICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjph
cnJheTx1aW50OF90LCAyNTY+OwogCkBAIC03Nyw3ICs3MSw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJs
ZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhh
VGFibGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAg
ICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04OSw2ICs4Myw0
IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQotICAgIHN0YXRpYyBi
b29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4g
ZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBvbmVudFRyYW5zZmVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAppbmRleCA4MzM1MzA5MDgxYTI2YmEyYzMxYzNiZGFjODg4NjY5ZTI4
ZTM0NTZkLi4zNGJlOGE3NmMyNzBlZDdhOThlZDY4MmMwMWM3YWI1MTdlMzg5OThkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmNwcApAQCAtMzIsOCArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
Q29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCitGRUNvbXBvc2l0
ZTo6RkVDb21wb3NpdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmls
dGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvc2l0ZSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwg
bV9rMShrMSkKICAgICAsIG1fazIoazIpCkBAIC00Miw5ICs0Miw5IEBAIEZFQ29tcG9zaXRlOjpG
RUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYg
dHlwZSwgZmxvCiB7CiB9CiAKLVJlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCitSZWY8RkVDb21wb3NpdGU+IEZFQ29t
cG9zaXRlOjpjcmVhdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVDb21wb3NpdGUoZmlsdGVyLCB0eXBlLCBrMSwgazIsIGszLCBrNCkpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9zaXRlKHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7CiB9
CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBl
IHR5cGUpCkBAIC04NywxNCArODcsNiBAQCBib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBr
NCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRl
clJlc3VsdElmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0
aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUo
aW50IGMpCiB7CiAgICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKQEAgLTIwMSwxMDAgKzE5MywxMDcgQEAgaW5saW5lIHZv
aWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3UKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRkVDb21wb3NpdGU6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX0lOOgotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6IHsKICAgICAgICAgLy8gRm9yIEluIGFu
ZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKICAg
ICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0ZSBwYWlu
dCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCi0gICAgICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgY2xp
cEFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgaW5w
dXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFnZSgpOworICAgICAgICByZXR1cm4gZmls
dGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dDIuaW1hZ2VSZWN0KCksIHByaW1p
dGl2ZVN1YnJlZ2lvbik7CisgICAgfQorCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDOgogICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVs
ZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKICAgICAgICAgLy8gb3B0aW1p
emUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lv
bik7CisKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlu
cHV0IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gRmlsdGVyRWZmZWN0Ojpj
YWxjdWxhdGVJbWFnZVJlY3QoZmlsdGVyLCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIH0KIH0K
IAotdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVDb21w
b3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOwotCisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRl
ckltYWdlKCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFn
ZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIAogICAgIGlmICht
X3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgaWYgKCFv
dXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0g
ICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKKyAgICAgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVs
QnVmZmVyLT5kYXRhKCk7CiAKLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlm
ICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnRS
ZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1f
azMsIG1fazQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaW5wdXRJbWFnZVJlY3Qg
PSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dCk7CisgICAgICAgIGF1dG8g
aW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CisgICAgICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICAgICAgYXV0byBpbnB1dEltYWdlUmVjdDIgPSBvdXRwdXQucmVs
YXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dDIpOworICAgICAgICBpbnB1dDIuY29weVBpeGVs
QnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGlucHV0SW1hZ2VSZWN0Miwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAg
CisgICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCppbnB1dFBpeGVsQXJyYXksIG91
dHB1dFBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8mIGZp
bHRlckNvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworCisgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbnB1
dDIuaW1hZ2VCdWZmZXIoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYXV0byBpbnB1
dEltYWdlUmVjdCA9IEZsb2F0UmVjdChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91
dHB1dCkpOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QyID0gRmxvYXRSZWN0KGlucHV0Mi5yZWxh
dGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOworICAgIAogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW5wdXRJbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdlUmVjdCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKICAgICAg
ICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIElu
dFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAg
IGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAg
ICAgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBpbnB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpOwor
ICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGlucHV0Mi5hYnNvbHV0ZUltYWdlUmVj
dCgpKTsKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChvdXRwdXQuYWJzb2x1dGVJ
bWFnZVJlY3QoKSk7CiAgICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3Qg
PSBkZXN0aW5hdGlvblJlY3QgLSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAg
ICAgIEludFJlY3Qgc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0
aW5hdGlvblJlY3QgLSBpbjItPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0
KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0
KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYXV0byBhZGp1c3RlZERlc3RpbmF0
aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpLmxv
Y2F0aW9uKCk7CisgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGlu
cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkubG9jYXRpb24oKTsKKyAgICAgICAgYXV0byBzb3VyY2VS
ZWN0MiA9IGRlc3RpbmF0aW9uUmVjdCAtIGlucHV0Mi5hYnNvbHV0ZUltYWdlUmVjdCgpLmxvY2F0
aW9uKCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0Mik7CisgICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWRqdXN0ZWREZXN0aW5hdGlv
blJlY3QsIHNvdXJjZVJlY3QsIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZl
cjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsK
KyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1
dEltYWdlUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0MiwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNp
emUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUo
KSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CisgICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0Mik7CisgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFn
ZVJlY3QsIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVy
YXRvcjo6U291cmNlQXRvcCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7
IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlhP
Uik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGlucHV0SW1hZ2VSZWN0Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJlY3QsIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwg
Q29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW5wdXRJbWFnZVJlY3QyKTsKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdlUmVj
dCwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9y
OjpQbHVzTGlnaHRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYg
dHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2
YWVhMGMzLi42YjA3YmExZjliMDA3MTljMGQ3OWI1ZjdlY2RjZjNiM2RiMzIzNDJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oCkBAIC0yMiw4ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzM5LDcgQEAgZW51bSBD
b21wb3NpdGVPcGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3NpdGUgOiBwdWJsaWMgRmls
dGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUo
RmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoY29uc3QgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAogICAg
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CiAgICAgYm9vbCBzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSk7CkBAIC01
OCwxOCArNTYsMTIgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9r
NDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAh
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6Ci0gICAgRkVD
b21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CisgICAgRkVDb21wb3NpdGUoY29uc3Qg
Q29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAot
ICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
ZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwpAQCAtOTAsMyArODIsNCBA
QCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBvc2l0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CmluZGV4IDNiYmU3ODM1OThkNzA5MzVhOTVjNmYxNTZlYzI5MzNjMGU5OWYwNTAuLjI1ZjRiNDky
ZTNiODI1Njg3NDQ2OWRiZWNmOWZhOWQ4ZjY5M2M0MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcApAQCAtMzIsMTAgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbnZv
bHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXpl
JiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBv
aW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9h
dFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6
OkNvbnZvbHZlTWF0cml4KQorRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChjb25z
dCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJ
bnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0
UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYga2VybmVsTWF0cml4KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVDb252b2x2ZU1hdHJpeCkKICAgICAsIG1fa2VybmVsU2l6ZShrZXJuZWxTaXplKQog
ICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCiAgICAgLCBtX2JpYXMoYmlhcykKQEAgLTQ5LDExICs0
Nyw5IEBAIEZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCiAgICAgQVNTRVJUKG1fa2VybmVsU2l6ZS5oZWln
aHQoKSA+IDApOwogfQogCi1SZWY8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6
Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZs
b2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVu
Z3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJp
eCkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoY29uc3Qg
SW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50
UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbnZv
bHZlTWF0cml4KGZpbHRlciwga2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0
LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwg
ZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCiAgICAgICAgIHByZXNlcnZlQWxwaGEsIGtlcm5l
bE1hdHJpeCkpOwogfQogCkBAIC0zNjcsNDkgKzM2Myw1NSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsCiAgICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCB4MSwg
eTEsIHgyLCB5Mik7CiB9CiAKLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRUNvbnZvbHZlTWF0cml4OjpjYWxjdWxhdGVJbWFnZVJlY3Qo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBy
ZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwor
fQogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2VydmVBbHBoYSA/
IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJl
dHVybjsKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpCit7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlcklt
YWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Cisg
ICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihtX3ByZXNlcnZl
QWxwaGEgPyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgOiBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXIt
PmRhdGEoKTsKIAotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlUGl4ZWxBcnJh
eTsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFn
ZVJlY3QoaW5wdXQpOworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW5wdXRQ
aXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHNvdXJjZVBpeGVs
QXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOworICAgICAgICBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhl
bEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGlucHV0SW1h
Z2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGVsc2UKLSAgICAgICAgc291cmNl
UGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Cisg
ICAgICAgIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwogCisgICAgaWYgKCFpbnB1dFBpeGVsQXJyYXkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IG91dHB1dC5hYnNvbHV0ZUltYWdl
UmVjdCgpLnNpemUoKTsKKyAgICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewot
ICAgICAgICAqc291cmNlUGl4ZWxBcnJheSwKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5
LAotICAgICAgICBwYWludFNpemUud2lkdGgoKSwKLSAgICAgICAgcGFpbnRTaXplLmhlaWdodCgp
LAorICAgICAgICAqaW5wdXRQaXhlbEFycmF5LAorICAgICAgICBvdXRwdXRQaXhlbEFycmF5LAor
ICAgICAgICBpbWFnZVNpemUud2lkdGgoKSwKKyAgICAgICAgaW1hZ2VTaXplLmhlaWdodCgpLAog
ICAgICAgICBtX2JpYXMgKiAyNTUsCi0gICAgICAgIG5vcm1hbGl6ZWRGbG9hdHMobV9rZXJuZWxN
YXRyaXgpCisgICAgICAgIEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMobV9rZXJuZWxN
YXRyaXgpCiAgICAgfTsKIAogICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAg
ICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgo
KTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6
ZS5oZWlnaHQoKTsKKyAgICBpbnQgY2xpcFJpZ2h0ID0gaW1hZ2VTaXplLndpZHRoKCkgLSBtX2tl
cm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xpcEJvdHRvbSA9IGltYWdlU2l6ZS5oZWlnaHQo
KSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKIAogICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNs
aXBCb3R0b20gPCAwKSB7CiAgICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemll
ZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBw
YWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIGltYWdlU2l6ZS53aWR0
aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBpZiAoaW50IGl0ZXJhdGlvbnMgPSAoYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpICog
YWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSkgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uKSB7
CisgICAgaWYgKGludCBpdGVyYXRpb25zID0gKGltYWdlU2l6ZS53aWR0aCgpICogaW1hZ2VTaXpl
LmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKICAgICAgICAgaW50IHN0cmlk
ZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwogICAgICAgICBpbnQgY2h1bmtDb3VudCA9IChj
bGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7CiAKQEAgLTQyNSwxMyArNDI3LDE1IEBA
IHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBjbGlw
UmlnaHQgKz0gbV90YXJnZXRPZmZzZXQueCgpICsgMTsKICAgICBjbGlwQm90dG9tICs9IG1fdGFy
Z2V0T2Zmc2V0LnkoKSArIDE7CiAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LnkoKSA+IDApCi0gICAg
ICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCks
IG1fdGFyZ2V0T2Zmc2V0LnkoKSk7Ci0gICAgaWYgKGNsaXBCb3R0b20gPCBwYWludFNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRv
bSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHNldE91
dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIG1fdGFyZ2V0
T2Zmc2V0LnkoKSk7CisgICAgaWYgKGNsaXBCb3R0b20gPCBpbWFnZVNpemUuaGVpZ2h0KCkpCisg
ICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgaW1hZ2VT
aXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0
LngoKSA+IDApCiAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJn
ZXRPZmZzZXQueSgpLCBtX3RhcmdldE9mZnNldC54KCksIGNsaXBCb3R0b20pOwotICAgIGlmIChj
bGlwUmlnaHQgPCBwYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFp
bnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRTaXplLndpZHRo
KCksIGNsaXBCb3R0b20pOworICAgIGlmIChjbGlwUmlnaHQgPCBpbWFnZVNpemUud2lkdGgoKSkK
KyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1fdGFyZ2V0
T2Zmc2V0LnkoKSwgaW1hZ2VTaXplLndpZHRoKCksIGNsaXBCb3R0b20pOworCisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDY3
ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLmI5YTgxODNhMWI4ZmZjZWMz
NTU3OGQzY2UwNWM2Mjk2NTM0OTIzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC0yNCw3
ICsyNCw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszNyw3IEBAIGVudW0gRWRnZU1vZGVUeXBlIHsK
IAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0
IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVk
Z2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29sLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUo
Y29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29u
c3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50
JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29uc3QgSW50U2l6
ZSYpOwpAQCAtNzcsMTQgKzc0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3RvcjxmbG9hdD4g
a2VybmVsTWF0cml4OwogICAgIH07CiAKLSAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYsIGNv
bnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJbnRQb2ludCYs
IEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9h
dD4mKTsKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZs
b2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVk
Z2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVz
ZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbnZvbHZlTWF0
cml4IjsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xMTUsMyArMTA5LDQgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRF
Ul9FRkZFQ1QoRkVDb252b2x2ZU1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKaW5k
ZXggZWViMTcyOGRiMzVlOGFjMzAyYjI3ZTRjM2ZmMzRjYjg4NTViOWQwOS4uZjc2Y2UyY2U5NjQz
ZWZkZjZjZTI1NmU5NTQ3Mzc4YTQwN2QxMzQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5j
cHAKQEAgLTI3LDE4ICsyNywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVz
ZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZm
dXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50
LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGln
aHRTb3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitGRURpZmZ1c2VMaWdodGluZzo6RkVE
aWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKKyAg
ICA6IEZFTGlnaHRpbmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2Nh
bGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRM
ZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1
c2VMaWdodGluZykKIHsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdo
dGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwg
ZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxp
Z2h0U291cmNlKQorUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3Jl
YXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0
IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0NvbG9yLCBz
dXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVu
aXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVz
ZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUo
bGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGlnaHRp
bmcoKSA9IGRlZmF1bHQ7Ci0KIGJvb2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERpZmZ1c2VDb25z
dGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCiB7CiAgICAgaWYgKG1fZGlmZnVzZUNvbnN0YW50
ID09IGRpZmZ1c2VDb25zdGFudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAppbmRleCBkZjYxMTRk
MGZiOGUyZjNlMTEyOGI4NDI2MTVlNDc1MTNhMGRkZGMzLi44YTEwYWVjODdjOGYxODlmOWYwNTdj
Yjk0NDNlYWFlZGQ1MzhmNjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCkBAIC0yOSw4ICsy
OSw3IEBAIGNsYXNzIExpZ2h0U291cmNlOwogCiBjbGFzcyBGRURpZmZ1c2VMaWdodGluZyA6IHB1
YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlmZnVzZUxpZ2h0
aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRURpZmZ1c2VMaWdodGlu
ZygpOworICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmKTsKIAogICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CiAgICAgYm9vbCBzZXREaWZmdXNlQ29uc3RhbnQo
ZmxvYXQpOwpAQCAtMzgsOCArMzcsOSBAQCBwdWJsaWM6CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgRkVEaWZmdXNlTGlnaHRpbmcoRmls
dGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0
U291cmNlPiYmKTsKKyAgICBGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19GSUxURVJfRUZGRUNUKEZFRGlmZnVzZUxpZ2h0aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcAppbmRleCAwNDc0OTMzOTJiYjI4MTQ2ZDhiMTY5YmEwYTdjMzJiMTZjNTYzZmExLi4w
N2ZjODNjYTdjYjY3NTZlOGUzZTg1MmExOWJlNDBiMWM5YzYwZTVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcApAQCAtMzEsMTggKzMxLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYgZmlsdGVyLCBD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUg
eUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpEaXNwbGFjZW1lbnRNYXApCitGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1l
bnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorICAgIDogRmlsdGVyRWZmZWN0
KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXApCiAgICAgLCBtX3hDaGFubmVs
U2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKICAgICAsIG1feUNoYW5uZWxTZWxlY3Rvcih5Q2hh
bm5lbFNlbGVjdG9yKQogICAgICwgbV9zY2FsZShzY2FsZSkKIHsKIH0KIAotUmVmPEZFRGlzcGxh
Y2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKK1JlZjxGRURpc3BsYWNlbWVudE1hcD4g
RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAoZmlsdGVyLCB4
Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50TWFwKHhDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVs
U2VsZWN0b3IsIHNjYWxlKSk7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFhDaGFu
bmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKQpA
QCAtNjksMjAgKzY4LDE0IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0
IHNjYWxlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpCitjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjppbWFnZUNvbG9yU3BhY2Uo
KSBjb25zdAogewogICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJz
JyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8v
IGFuZCBkb2VzIG5vdCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNv
dXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNl
LgogICAgIC8vIFRoZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNlIGJlY2F1c2Ug
aXQgaXMgYSBkaXNwbGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmlsdGVyRWZmZWN0
OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCkp
OwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCBpbmRleCkKLXsKLSAgICAvLyBEbyBub3QgdHJh
bnNmb3JtIHRoZSBmaXJzdCBwcmltaXRpdmUgaW5wdXQsIGFzIHBlciB0aGUgc3BlYy4KLSAgICBp
ZiAoaW5kZXgpCi0gICAgICAgIGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRl
ckltYWdlKCk7CisgICAgcmV0dXJuIGlucHV0LmNvbG9yU3BhY2UoKTsKIH0KIAogc3RhdGljIGlu
bGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1
bnNpZ25lZCByb3dCeXRlcykKQEAgLTkxLDM3ICs4NCw0MSBAQCBzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJv
d0J5dAogICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRlczsKIH0KIAot
dm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVj
dCBGRURpc3BsYWNlbWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIg
PSBpbnB1dEVmZmVjdCgxKTsKKyAgICByZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lv
bihwcmltaXRpdmVTdWJyZWdpb24pOworfQogCitib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CiAgICAgQVNTRVJUKG1f
eENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lDaGFu
bmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBpbnB1
dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSAq
aW5wdXRFZmZlY3QoMSktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRl
ckltYWdlKCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1
dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAg
ICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAg
IEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIGlucHV0SW1hZ2UgPSBp
bi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOworICAgIEludFJlY3Qg
aW5wdXRJbWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dCk7
CisgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QpOwogCi0gICAg
SW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxC
dWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBUaGUgY2FsY3VsYXRpb25z
IHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1c2lu
ZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNwbGFjZW1lbnRJ
bWFnZSA9IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7CisgICAg
SW50UmVjdCBpbnB1dEltYWdlUmVjdDIgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVj
dChpbnB1dDIpOworICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZhbHVl
cyBmcm9tICdpbjInIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3Ig
dmFsdWVzLgorICAgIGF1dG8gaW5wdXRQaXhlbEJ1ZmZlcjIgPSBpbnB1dDIuZ2V0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVj
dDIpOwogICAgIAotICAgIGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50SW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIgfHwgIWlucHV0UGl4ZWxC
dWZmZXIyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoaW5wdXRJbWFnZS0+
bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoaW5w
dXRQaXhlbEJ1ZmZlci0+bGVuZ3RoKCkgPT0gaW5wdXRQaXhlbEJ1ZmZlcjItPmxlbmd0aCgpKTsK
IAotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUo
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIGF1dG8gaW1hZ2VTaXplID0gb3V0cHV0LmFic29s
dXRlSW1hZ2VSZWN0KCkuc2l6ZSgpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7CisgICAgRmxvYXRT
aXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZFNpemVCeUZpbHRlclNjYWxlKHsgbV9zY2FsZSwgbV9z
Y2FsZSB9KTsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUu
MDsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CiAg
ICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CkBAIC0x
MzAsMjYgKzEyNywyOCBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWCA9IHhDaGFubmVsSW5kZXgoKTsK
ICAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFkgPSB5Q2hhbm5lbEluZGV4KCk7CiAKLSAgICBp
bnQgcm93Qnl0ZXMgPSBwYWludFNpemUud2lkdGgoKSAqIDQ7CisgICAgaW50IHJvd0J5dGVzID0g
aW1hZ2VTaXplLndpZHRoKCkgKiA0OwogCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNp
emUuaGVpZ2h0KCk7ICsreSkgeworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VTaXplLmhl
aWdodCgpOyArK3kpIHsKICAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiByb3dCeXRl
czsKIAotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gp
IHsKLSAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsg
eCAqIDQ7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VTaXplLndpZHRoKCk7ICsr
eCkgeworICAgICAgICAgICAgaW50IG91dHB1dEluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAq
IDQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0
PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlv
bkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7Ci0gICAgICAg
ICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogZGlz
cGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5u
ZWxZKSArIHNjYWxlZE9mZnNldFkpOworICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGlucHV0UGl4ZWxCdWZmZXIyLT5pdGVtKG91dHB1
dEluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7CisgICAgICAg
ICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogaW5w
dXRQaXhlbEJ1ZmZlcjItPml0ZW0ob3V0cHV0SW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkg
KyBzY2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9uUGl4
ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFycmF5
LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8
IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNp
emUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7
CisgICAgICAgICAgICB1bnNpZ25lZCogb3V0cHV0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkKj4ob3V0cHV0UGl4ZWxBcnJheS5kYXRhKCkgKyBvdXRwdXRJbmRleCk7CisgICAg
ICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBpbWFnZVNpemUud2lkdGgoKSB8fCBzcmNZ
IDwgMCB8fCBzcmNZID49IGltYWdlU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICpv
dXRwdXRQaXhlbFB0ciA9IDA7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNY
LCBzcmNZLCByb3dCeXRlcykpOworICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCkgKyBieXRlT2Zm
c2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOwogICAgICAgICB9CiAgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5oCmluZGV4IGRkNzMyYTg4MTA3M2UyNjZiYzg0NmFmZTY4MTllNjc1MTYyM2EzYTIu
LmUwNjJiYmZiNzZiMWM5ZTUwNTJmZDEyM2FlZjkyNWI1YWRlN2M0ZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDcgKzM2LDcgQEAgZW51
bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXAgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50
TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9y
LCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKKyAg
ICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3Is
IGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvcjsgfQogICAgIGJvb2wgc2V0WENo
YW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKQEAgLTQ4LDIwICs0Nywx
NyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9
CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lkIHNldFJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNvbnN0IGludCkgb3ZlcnJpZGU7
Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBl
IHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvciwg
ZmxvYXQgc2NhbGUpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJGRURpc3BsYWNlbWVudE1hcCI7IH0KKyAgICBpbnQgeENoYW5uZWxJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBpbnQgeUNoYW5u
ZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBpbWFnZUNvbG9yU3BhY2UoKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4Q2hhbm5lbElu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQotICAgIGludCB5
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQor
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTcyLDMgKzY4
LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaXNwbGFjZW1lbnRNYXApCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKaW5kZXggMzVmYmFiNDFlODA5MjE2ZTRiMjI0MzUxMTg2MjNlMjhmZmQ2MWVmYS4uOTE5OTBm
ZTAyNWQ0NTBjZjQ1ZjI4NWFmM2YzZDI5N2Y4MTNhMTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApA
QCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1GRURyb3BTaGFk
b3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwg
ZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRv
d09wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpEcm9wU2hhZG93KQor
RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNp
dHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURyb3BTaGFkb3cp
CiAgICAgLCBtX3N0ZFgoc3RkWCkKICAgICAsIG1fc3RkWShzdGRZKQogICAgICwgbV9keChkeCkK
QEAgLTQyLDkwICs0Miw4NSBAQCBGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXImIGZp
bHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsbwogewogfQogCi1SZWY8
RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQg
c3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93
Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCitSZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFk
b3c6OmNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRURyb3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZLCBkeCwgZHks
IHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVEcm9wU2hhZG93KHN0ZFgsIHN0ZFksIGR4LCBkeSwgc2hhZG93Q29sb3IsIHNoYWRvd09wYWNp
dHkpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCkKK0ludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKIHsKLSAgICBGaWx0
ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZF
R2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Cisg
ICAgcmV0dXJuIHsKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgp
IC0gbV9keSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsg
bV9keCksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1f
ZHkpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgp
CisgICAgfTsKK30KKworRmxvYXRSZWN0IEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlSW1hZ2VSZWN0
KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3QKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1h
Z2UoKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDAp
LT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9mZnNldFBhaW50
UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QubW92
ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAg
YWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOworICAgIGF1
dG8gaW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgYXV0byBpbWFnZVJlY3RXaXRo
T2Zmc2V0KGltYWdlUmVjdCk7CisgICAgaW1hZ2VSZWN0V2l0aE9mZnNldC5tb3ZlKHsgbV9keCwg
bV9keSB9KTsKKyAgICBpbWFnZVJlY3QudW5pdGUoaW1hZ2VSZWN0V2l0aE9mZnNldCk7CiAKLSAg
ICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6
ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgYXV0byBrZXJuZWxTaXplID0gRkVH
YXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZ
IH0pOwogCiAgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkg
aXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAg
YWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYp
OwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgp
ICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBh
aW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFi
c29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7CisgICAgaW1hZ2VSZWN0Lmlu
ZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5m
bGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1
cm4gZmlsdGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2
ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorYm9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Cisg
ICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0
byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CisgICAgCisgICAgYXV0byBpbnB1dEltYWdlID0g
aW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1
dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRo
aXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBibHVy
UmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0
ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSk7CisgICAg
YXV0byBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1f
c3RkWCwgbV9zdGRZIH0pOworICAgIGF1dG8gb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZFNpemVCeUZp
bHRlclNjYWxlKHsgbV9keCwgbV9keSB9KTsKIAotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9u
ID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0g
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24pOwotICAg
IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKyAgICBhdXRvIGlucHV0SW1h
Z2VSZWN0ID0gRmxvYXRSZWN0KGlucHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3Qob3V0cHV0
KSk7CiAKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBp
bnB1dEltYWdlUmVjdFdpdGhPZmZzZXQgPSBpbnB1dEltYWdlUmVjdDsKKyAgICBpbnB1dEltYWdl
UmVjdFdpdGhPZmZzZXQubW92ZShvZmZzZXQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0JiByZXN1
bHRDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICByZXN1bHRDb250ZXh0LnNl
dEFscGhhKG1fc2hhZG93T3BhY2l0eSk7Ci0gICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldCk7Ci0gICAgcmVzdWx0Q29u
dGV4dC5zZXRBbHBoYSgxKTsKKyAgICBhdXRvJiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2Ut
PmNvbnRleHQoKTsKKyAgICBvdXRwdXRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0eSk7
CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1h
Z2VSZWN0V2l0aE9mZnNldCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRBbHBoYSgxKTsKIAogICAg
IFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29s
b3IpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNl
KCkgfTsKLSAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRy
dW5jYXRlZExvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFn
ZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKLSAgICBpZiAoIXBpeGVsQnVm
ZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBmb3JtYXQgPSBQaXhlbEJ1ZmZlckZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgb3V0cHV0LmNvbG9yU3BhY2UoKSB9OworICAgIGF1dG8gc2hhZG93QXJlYSA9IEludFJl
Y3QgeyBJbnRQb2ludCgpLCBvdXRwdXRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSB9Owor
ICAgIGF1dG8gc2hhZG93UGl4ZWxCdWZmZXIgPSBvdXRwdXRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIo
Zm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXNoYWRvd1BpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1
ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4
ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6
ZSgpLndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4
ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOworICAgIGF1dG8mIHNoYWRvd1BpeGVsQXJyYXkgPSBzaGFk
b3dQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uo
c2hhZG93UGl4ZWxBcnJheS5kYXRhKCksIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBz
aGFkb3dQaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0Q29udGV4dC5z
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICBy
ZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7Cisg
ICAgb3V0cHV0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpzaGFkb3dQaXhlbEJ1ZmZlciwgc2hhZG93
QXJlYSk7CiAKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291
cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24pOwotfQorICAgIG91dHB1dENvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CisgICAgb3V0cHV0Q29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXQuYWJzb2x1dGVJbWFn
ZVJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICBvdXRwdXRDb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKIAot
SW50T3V0c2V0cyBGRURyb3BTaGFkb3c6Om91dHNldHMoKSBjb25zdAotewotICAgIEludFNpemUg
b3V0c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRY
LCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRz
ZXRTaXplLmhlaWdodCgpIC0gbV9keSksCi0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0
U2l6ZS53aWR0aCgpICsgbV9keCksCi0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6
ZS5oZWlnaHQoKSArIG1fZHkpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUu
d2lkdGgoKSAtIG1fZHgpCi0gICAgfTsKKyAgICBvdXRwdXRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCiBU
ZXh0U3RyZWFtJiBGRURyb3BTaGFkb3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5oCmluZGV4IGI0ZTBhMjAxMmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmIyNTY4
ODhhZDI1ZDdkZjk2ODcxNTQ5MmI4ZmNkMjNlNzYwNThlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAt
MjAsMTQgKzIwLDEzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFRHJvcFNoYWRvdyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEcm9wU2hhZG93PiBjcmVhdGUoRmlsdGVyJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0
YXRpYyBSZWY8RkVEcm9wU2hhZG93PiBjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxv
YXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09w
YWNpdHkpOwogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rk
WDsgfQogICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCBzdGRYKSB7IG1fc3RkWCA9IHN0
ZFg7IH0KQEAgLTQ4LDE1ICs0NywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaGFkb3dPcGFj
aXR5KGZsb2F0IHNoYWRvd09wYWNpdHkpIHsgbV9zaGFkb3dPcGFjaXR5ID0gc2hhZG93T3BhY2l0
eTsgfQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhGaWx0ZXImLCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRkVEcm9wU2hhZG93KGZs
b2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRl
ck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQotCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBJbnRPdXRzZXRzIG91dHNl
dHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTcwLDMgKzY3LDQgQEAgcHJp
dmF0ZToKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19GSUxURVJfRUZGRUNUKEZFRHJvcFNoYWRvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGI0MjM1NTM0YzM4
YjFlYmEyMTFlZTg0ODYxNzk5MjM4MGYzYjZiMDEuLmE3NmE5YTIzYzU2YWRkMmMxNzRhMDE4MDM3
MGQ2YTg1YjMyOTM5MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMzAsMTYgKzMwLDE2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29s
b3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChm
aWx0ZXIsIFR5cGU6OkZsb29kKQorRkVGbG9vZDo6RkVGbG9vZChjb25zdCBDb2xvciYgZmxvb2RD
b2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVj
dDo6VHlwZTo6RkVGbG9vZCkKICAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQogICAgICwg
bV9mbG9vZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQogewogfQogCi1SZWY8RkVGbG9vZD4gRkVGbG9v
ZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQg
Zmxvb2RPcGFjaXR5KQorUmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShjb25zdCBDb2xvciYg
Zmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFRmxvb2QoZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGZsb29kQ29sb3IsIGZsb29kT3BhY2l0eSkpOwogfQog
CiBib29sIEZFRmxvb2Q6OnNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNTgs
MTQgKzU4LDIxIEBAIGJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3Bh
Y2l0eSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
CiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJu
IGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KIAot
ICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
Zmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7
Citib29sIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorewor
ICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIGF1dG8gb3V0cHV0SW1hZ2Ug
PSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGNvbG9yID0gbV9mbG9vZENvbG9yLmNvbG9yV2l0aEFs
cGhhTXVsdGlwbGllZEJ5KG1fZmxvb2RPcGFjaXR5KTsKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4
dCgpLmZpbGxSZWN0KHsgeyB9LCBvdXRwdXRJbWFnZS0+bG9naWNhbFNpemUoKSB9LCBjb2xvcik7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRh
dGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUZsb29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3
MzQ4ZS4uOWZiMTg5ZTdhZGYwNzM5MDMxYWMyYzA2ZTAzNDhjNWYwMThkM2VlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAg
LTIyLDE0ICsyMiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYs
IGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBDb2xvciYgZmxv
b2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9vZENv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9vZENv
bG9yKGNvbnN0IENvbG9yJik7CkBAIC00MCwxOCArMzksMTUgQEAgcHVibGljOgogI2lmICFVU0Uo
Q0cpCiAgICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVycG9sYXRpb24g
b2YgYW55IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJyZW50CiAgICAg
Ly8gY29sb3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3ItaW50ZXJwb2xh
dGlvbi1maWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSAgICB2b2lkIHNldFJl
c3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyBG
aWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOyB9CisgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgRkVG
bG9vZChGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRUZsb29kKGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZsb29kIjsgfQorICAgIEZsb2F0
UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
bWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92
ZXJyaWRlOwogCkBAIC02MSwzICs1Nyw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRmxvb2QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDBmNmVlODdmOTVlNzU3NTE4NjNmZDJlNWY1NDllNzRk
OTcyOWRiMWYuLjEwNzIxZmFhN2UwYmM5MDQ3YzRjYTI1NDI2YTcxZmNkODAxZGE4N2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwCkBAIC03OSwxNyArNzksMTcgQEAgaW5saW5lIHZvaWQga2VybmVs
UG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFM
ZWZ0LAogICAgIH0KIH0KIAotRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKEZpbHRlciYg
ZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpHYXVzc2lhbkJsdXIpCitGRUdhdXNzaWFuQmx1cjo6
RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQor
ICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVHYXVzc2lhbkJsdXIpCiAg
ICAgLCBtX3N0ZFgoeCkKICAgICAsIG1fc3RkWSh5KQogICAgICwgbV9lZGdlTW9kZShlZGdlTW9k
ZSkKIHsKIH0KIAotUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKEZp
bHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitS
ZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmxvYXQgeCwgZmxvYXQg
eSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
R2F1c3NpYW5CbHVyKGZpbHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUdhdXNzaWFuQmx1cih4LCB5LCBlZGdlTW9kZSkpOwogfQogCiB2b2lkIEZFR2F1
c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25YKGZsb2F0IHgpCkBAIC00NjUsMTEgKzQ2NSwxMiBA
QCBzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7CiAgICAgLy8g
TGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2Ug
YSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAvLyBpbmZsYXRl
cyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdp
dGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6
ZSA9IDUwMDsKICAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsg
MC41ZikpKTsKICAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKIH0KICAgICAKLUludFNpemUgRkVHYXVz
c2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0
aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIEFTU0VSVChzdGREZXZpYXRp
b24ud2lkdGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAwKTsKICAgICBJbnRT
aXplIGtlcm5lbFNpemU7CkBAIC00ODMsMTIgKzQ4NCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikK
ICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlh
dGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIHJl
dHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbihzdGREZXZpYXRpb24pKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZShzdGREZXZpYXRpb24pKTsKIH0K
IAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUg
c3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBhdXRvIGtlcm5lbFNpemUg
PSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKIApAQCAtNDk2LDYy
ICs0OTcsNjEgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShG
bG9hdFNpemUgc3RkRGV2aWF0aW9uKQogICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXplLndpZHRo
KCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKIH0KIAotdm9pZCBGRUdhdXNz
aWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEludFNpemUga2VybmVs
U2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0ZFkgfSk7
CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAg
YXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKIAotICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAg
IC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVj
dGVkIHBhaW50IHJlY3QuCi0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewot
ICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFp
bnRSZWN0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0g
RURHRU1PREVfTk9ORSkKKyAgICAgICAgcmV0dXJuIGltYWdlUmVjdDsKIAorICAgIGF1dG8ga2Vy
bmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0p
OworICAgIAogICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5
IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAg
IGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVm
KTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQo
KSAqIDAuNWYpOworICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgp
ICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgp
ICogMC41Zik7CiAKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBh
aW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFi
c29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7CisgICAgcmV0dXJuIGZpbHRl
ci5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdp
b24pOworfQogCi0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNv
bHV0ZVBhaW50UmVjdCkpOworSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNv
bnN0Cit7CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1f
c3RkWCwgbV9zdGRZIH0pOworICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNl
dFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07
CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29s
IEZFR2F1c3NpYW5CbHVyOjppc0FscGhhSW1hZ2UoKSBjb25zdAogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPmlzQWxw
aGFJbWFnZSgpOworfQogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOworYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIGF1dG8mIGlucHV0ID0gKmlu
cHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJ
bWFnZSgpOworCisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1
dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0
byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBz
ZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBhdXRvIGlucHV0SW1hZ2VS
ZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOwogCi0gICAgSW50
UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXks
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBJbnRTaXplIGtlcm5lbFNp
emUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwot
ICAgIGtlcm5lbFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CisgICAgYXV0byBr
ZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkg
fSk7CisgICAgYXV0byBpbWFnZVNpemUgPSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXpl
KCk7CiAKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRv
IHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKKyAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xh
bXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGltYWdlU2l6ZS5hcmVhKCkgKiA0KTsK
ICAgICBpZiAoIXRtcEltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1B
cHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lk
dGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKLX0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi1JbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKLXsK
LSAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBt
X3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53
aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCkgfTsKKyAgICBw
bGF0Zm9ybUFwcGx5KG91dHB1dFBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUu
d2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgaW1hZ2VTaXplKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVHYXVzc2lhbkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaAppbmRleCA1ZmI5N2ZmYjA3MGMyZGFlYjZlYjI4M2JlYWFhMTc2
NDdjYmIyZDNlLi40ZDk1M2E4YTZmODBkNWYwYzk2ODllZTVmNWI0OThjOWMwNTRiMTI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5oCkBAIC0yMiwxNCArMjIsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3Np
YW5CbHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBl
KTsKKyAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQgeCwgZmxvYXQg
eSwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJl
dHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOwpAQCAtNDAs
MTQgKzM5LDEyIEBAIHB1YmxpYzoKICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdCB7
IHJldHVybiBtX2VkZ2VNb2RlOyB9CiAgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUp
OwogCi0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXIm
LCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVV
bnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIElu
dFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKKyAgICBz
dGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZs
b2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNj
YWxlZEtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRp
YyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRp
b24pOwogCiBwcml2YXRlOgotICAgIEZFR2F1c3NpYW5CbHVyKEZpbHRlciYsIGZsb2F0LCBmbG9h
dCwgRWRnZU1vZGVUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVHYXVzc2lhbkJsdXIiOyB9CisgICAgRkVHYXVzc2lhbkJsdXIoZmxv
YXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgc19t
aW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQg
Zm9yIHBhcmFsbGVsIGpvYnMKIApAQCAtNjQsMTIgKzYxLDE0IEBAIHByaXZhdGU6CiAgICAgICAg
IHVuc2lnbmVkIGtlcm5lbFNpemVZOwogICAgIH07CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmls
dGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICBib29s
IGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisKICAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25U
eXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlXb3Jr
ZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKQEAgLTgzLDMgKzgyLDQgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRF
Ul9FRkZFQ1QoRkVHYXVzc2lhbkJsdXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCA2NTliMTA1NWY2MWVh
YWJjNWYyOTk5MWRhMGRhMWE1ODUwNzFhZTkyLi42N2Y4ZTI4ZThiMTgyZTU1NjE5YTVkNWE1MGNh
MmE3NjI2NDI2ZTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTM1LDggKzM1LDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBM
aWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlLCBU
eXBlIHR5cGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCB0eXBlKQorRkVMaWdodGluZzo6
RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0
IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxp
Z2h0U291cmNlLCBUeXBlIHR5cGUpCisgICAgOiBGaWx0ZXJFZmZlY3QodHlwZSkKICAgICAsIG1f
bGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlwZSkKICAgICAsIG1fbGlnaHRTb3VyY2UoV1RGTW92ZShs
aWdodFNvdXJjZSkpCiAgICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcikKQEAgLTM4
OCwyNiArMzg4LDE0IEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkoY29u
c3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjCiAjZW5kaWYKIH0KIAotYm9v
bCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQorYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKIHsKICAgICBMaWdodFNv
dXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdodGluZ0RhdGEgZGF0YTsK
LQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3Ro
KSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNh
c2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBo
ZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGF0YS5waXhlbHMgPSAm
cGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7
Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6
ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNv
bG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogCi0gICAgbV9saWdodFNvdXJjZS0+
aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKKyAgICBtX2xpZ2h0U291cmNl
LT5pbml0UGFpbnRpbmdEYXRhKGZpbHRlciwgKnRoaXMsIHBhaW50aW5nRGF0YSk7CiAKICAgICAv
LyBUb3AgbGVmdC4KICAgICBpbnQgb2Zmc2V0ID0gMDsKQEAgLTQyMiwxMCArNDEwLDEwIEBAIGJv
b2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgMCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9y
MmRpdjMsIGRhdGEuYm90dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKIAogICAgIC8vIEJvdHRvbSBy
aWdodC4KLSAgICBvZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplIC0gY1BpeGVsU2l6ZTsKKyAgICBvZmZzZXQgPSAoZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZSArIDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CiAg
ICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFz
ZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9y
MmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7CiAKLSAgICBpZiAod2lkdGgg
Pj0gMykgeworICAgIGlmIChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPj0gMikgewogICAgICAg
ICAvLyBUb3Agcm93LgogICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwogICAgICAgICBmb3Ig
KGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0g
Y1BpeGVsU2l6ZSkKQEAgLTQzNyw3ICs0MjUsNyBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdo
dGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAg
ICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90
dG9tUm93Tm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmIChoZWlnaHQgPj0gMykgewor
ICAgIGlmIChkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID49IDIpIHsKICAgICAgICAgLy8gTGVm
dCBjb2x1bW4uCiAgICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emU7CiAgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKQEAgLTQ0
OSwxMiArNDM3LDEyIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgICAgIHNldFBp
eGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUs
IHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9m
ZnNldCkpOwogICAgIH0KIAotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7Cisg
ICAgaWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyICYmIGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmUgPj0gMikgewogICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCiAgICAgICAgIHBs
YXRmb3JtQXBwbHkoZGF0YSwgcGFpbnRpbmdEYXRhKTsKICAgICB9CiAKLSAgICBpbnQgbGFzdFBp
eGVsID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKKyAgICBpbnQg
bGFzdFBpeGVsID0gKGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7CiAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VM
aWdodGluZykgewogICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8
IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQogICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNl
dChpLCBjT3BhcXVlQWxwaGEpOwpAQCAtNDcxLDI3ICs0NTksNDcgQEAgYm9vbCBGRUxpZ2h0aW5n
OjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVMaWdodGluZzo6Y2FsY3VsYXRlSW1hZ2VSZWN0
KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3QKK3sKKyAgICByZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmlt
aXRpdmVTdWJyZWdpb24pOworfQorCitib29sIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlcklt
YWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAg
YXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0
cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvIGlucHV0SW1hZ2VS
ZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOwogCi0gICAgc2V0
SXNBbHBoYUltYWdlKGZhbHNlKTsKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4
ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFn
ZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25Q
aXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAg
ICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBU
aGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0
IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3Ry
YW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkg
YW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBmZUNvbnZvbHZl
TWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAotICAgIEludFNpemUg
YWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkcmF3
TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgp
LCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBhYnNvbHV0ZUltYWdl
U2l6ZSA9IG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKTsKKworICAgIC8vIEZJWE1F
OiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgor
ICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmls
dGVyIGp1c3QgcmV0dXJucy4KKyAgICBpZiAoYWJzb2x1dGVJbWFnZVNpemUud2lkdGgoKSA8PSAy
IHx8IGFic29sdXRlSW1hZ2VTaXplLmhlaWdodCgpIDw9IDIpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgTGlnaHRpbmdEYXRhIGRhdGE7CisgICAgZGF0YS5waXhlbHMgPSAmb3V0cHV0UGl4
ZWxBcnJheTsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBm
OworICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSBhYnNvbHV0ZUltYWdlU2l6
ZS53aWR0aCgpICogY1BpeGVsU2l6ZTsKKyAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSBh
YnNvbHV0ZUltYWdlU2l6ZS53aWR0aCgpIC0gMTsKKyAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lID0gYWJzb2x1dGVJbWFnZVNpemUuaGVpZ2h0KCkgLSAxOworCisgICAgZHJhd0xpZ2h0aW5n
KGZpbHRlciwgZGF0YSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmgKaW5kZXggYjBiYjcwYTE0ZDE3NDk1MDY3MzdlODhlMDUxNGVlNzk2ODIw
YTQ0OS4uMGI0ZDgwMDRkYjY5NjRmOTQ5MDhjYzZkMjYwNTY0YmIyYjRiMDIwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmgKQEAgLTI3LDcgKzI3LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRl
ICJMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KQEAg
LTQwLDggKzM5LDYgQEAgc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uOwogCiBj
bGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotCiAgICAgZmxvYXQg
c3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KICAgICBib29s
IHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKQEAgLTEyOCwxNiArMTI1LDE2IEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFw
cGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKICAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5TmVv
bldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiopOwogCi0gICAgRkVMaWdodGlu
ZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBlKTsKLQotICAg
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVMaWdodGlu
ZyI7IH0KKyAgICBGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5n
Q29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiwgVHlw
ZSk7CiAKLSAgICBib29sIGRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYsIGludCwgaW50
KTsKKyAgICBib29sIGRyYXdMaWdodGluZyhjb25zdCBGaWx0ZXImLCBjb25zdCBMaWdodGluZ0Rh
dGEmKTsKIAogICAgIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQg
ZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IpOwogICAgIHZvaWQg
c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBM
aWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBm
bG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3RvciwgZmxvYXQgYWxwaGEpOwogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5jcHAKaW5kZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2IzZi4uNmY1
YjcxNGIzZDViYzRkNjgzZjM4MTc0ZDdiYWE2OTM2YzA3OTc3YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yOCwz
OSArMjgsNDMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1lcmdlKEZp
bHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVyZ2UpCitG
RU1lcmdlOjpGRU1lcmdlKCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFTWVyZ2UpCiB7CiB9CiAKLVJlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRU1lcmdlKGZpbHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
TWVyZ2UoKSk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jv
b2wgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7Ci0gICAg
dW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJUKHNpemUg
PiAwKTsKKyAgICBBU1NFUlQoIWlucHV0RWZmZWN0cygpLmlzRW1wdHkoKSk7CisgICAgYXV0byYg
b3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAg
ICAgIHJldHVybjsKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgR3Jh
cGhpY3NDb250ZXh0JiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJbWFnZUJ1ZmZl
ciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIGZvciAoYXV0byYgZWZmZWN0IDog
aW5wdXRFZmZlY3RzKCkpIHsKKyAgICAgICAgYXV0byYgaW5wdXQgPSAqZWZmZWN0LT5maWx0ZXJJ
bWFnZSgpOworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGlucHV0LmltYWdlQnVmZmVy
KCkpIHsKKyAgICAgICAgICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3QoaW5wdXQu
cmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICAgICAgICAgIG91dHB1dENv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJlY3QpOworICAg
ICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZFTWVy
Z2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU1l
cmdlIjsKICAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIHJlcHJl
c2VudGF0aW9uKTsKLSAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsK
KyAgICB1bnNpZ25lZCBzaXplID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpOwogICAgIEFTU0VSVChz
aXplID4gMCk7CiAgICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJcIl1cbiI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYwNy4uODg3
YmEwZmQzM2Y4OTMyY2JmNDMzODI2OGU3YWFhNDhhZmEyZjA0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIyLDIzICsy
MiwyMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU1lcmdlIDog
cHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU1lcmdlPiBj
cmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoKTsKIAogcHJp
dmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYpOworICAgIEZFTWVyZ2UoKTsKIAotICAgIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7IH0KLQot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTWVyZ2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5jcHAKaW5kZXggNmFlM2Q5ODk4NjYyNmUwN2MwOTRjNTg2ZjMxOThjOWM1OGRhZWQ2
Yi4uNzQwNzA0ZTI3ODEyNDlmNGI1YzNlYTNlMTI1YjQxNTU1ODdmOWM4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcApAQCAtMzUsMTcgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVN
b3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIFR5cGU6Ok1vcnBob2xvZ3kpCitGRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9n
eShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1
c1kpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBob2xvZ3kp
CiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQogICAgICwgbV9y
YWRpdXNZKHJhZGl1c1kpCiB7CiB9CiAKLVJlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6
Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0
IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCitSZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6
OmNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0
IHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KGZpbHRl
ciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
TW9ycGhvbG9neSh0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKIGJvb2wgRkVNb3JwaG9s
b2d5OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQpA
QCAtNzIsMTggKzcyLDYgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1koZmxvYXQgcmFk
aXVzWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRF
ZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJS
ZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlwc1RvQm91
bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19Ci0KIHN0
YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkK
IHsKICAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKQEAgLTIzMyw1MiArMjIxLDY0IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQogYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3Qs
IGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKICAgICBpZiAocmFkaXVzWCA8IDAgfHwgcmFk
aXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJl
c3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Cisg
ICAgICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAg
ICAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIoZHN0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRU1v
cnBob2xvZ3k6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDAp
LT5maWx0ZXJJbWFnZSgpOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJl
Y3QoKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pOwor
ICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwg
cHJpbWl0aXZlU3VicmVnaW9uKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKK30KIAotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKK2Jvb2wgRkVNb3Jw
aG9sb2d5Ojppc0FscGhhSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVmZmVjdCgw
KS0+aXNBbHBoYUltYWdlKCk7Cit9CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgYXV0byYgaW5wdXQgPSAqaW5w
dXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlcklt
YWdlKCk7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBh
dXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgp
OworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1h
Z2VSZWN0KGlucHV0KTsKIAogICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxv
YXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1cy53
aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHBsYXRm
b3JtQXBwbHlEZWdlbmVyYXRlKG91dHB1dFBpeGVsQXJyYXksIGlucHV0SW1hZ2VSZWN0LCByYWRp
dXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8gc291cmNlUGl4ZWxB
cnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0
dXJuOworICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFpbnB1dFBpeGVsQXJyYXkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRC
eUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaW50IHJh
ZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndp
ZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVp
Z2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOworICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXpl
KGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0p
KTsKKyAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGlucHV0SW1hZ2VSZWN0LndpZHRoKCkgLSAx
LCByYWRpdXMud2lkdGgoKSk7CisgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihpbnB1dEltYWdl
UmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAocGxhdGZvcm1B
cHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwg
cmFkaXVzWCwgcmFkaXVzWSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBQYWludGluZ0Rh
dGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNl
UGl4ZWxBcnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0
aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0
RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGlu
Z0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBmaWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNY
ICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2Vp
bGYocmFkaXVzWSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICBpZiAocGxhdGZvcm1BcHBs
eURlZ2VuZXJhdGUob3V0cHV0UGl4ZWxBcnJheSwgaW5wdXRJbWFnZVJlY3QsIHJhZGl1c1gsIHJh
ZGl1c1kpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIFBhaW50aW5nRGF0YSBwYWludGlu
Z0RhdGE7CisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBpbnB1dFBpeGVsQXJyYXku
Z2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmb3V0cHV0UGl4ZWxBcnJh
eTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihpbnB1dEltYWdlUmVjdC53aWR0aCgp
KTsKKyAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoaW5wdXRJbWFnZVJlY3QuaGVpZ2h0
KCkpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCk7CisgICAgcGFp
bnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZKTsKICAgICBwbGF0Zm9ybUFwcGx5KHBh
aW50aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0
eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRl
MzljNWExMS4uMDQ3YTBjYWEyNTEyNTRjZDRjNTU3N2U1ODgyZmE5OGFkNjczNTZlYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM0LDcgKzMzLDcgQEAgZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsKIAogY2xh
c3MgRkVNb3JwaG9sb2d5IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShGaWx0ZXImLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBzdGF0aWMgUmVmPEZFTW9y
cGhvbG9neT4gY3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZs
b2F0IHJhZGl1c1kpOwogCiAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9sb2d5T3Bl
cmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldE1vcnBob2xvZ3lP
cGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKQEAgLTQ2LDEzICs0NSwxMyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBzZXRSYWRpdXNZKGZsb2F0KTsKIAogcHJpdmF0ZToKLSAgICBGRU1vcnBo
b2xvZ3koRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxv
YXQgcmFkaXVzWSk7CisgICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZs
b2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFt
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBob2xvZ3kiOyB9CisgICAgYm9vbCBpc0Fs
cGhhSW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBG
aWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAK
ICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtODYsMyArODUs
NCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU1vcnBob2xvZ3kpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDAyNzBk
YjkyNDgxYTMzOTJkM2Q1YTFlOTE3YzJkNjVhYTQxNDBmNjkuLjk2ZmZhMDFhZWE0MWEwNTE5Nzcx
NTE4NWNlZjA0ODA3ZTZmOWQ0ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0zMCwxNiArMzAsMTYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU9mZnNldDo6RkVPZmZzZXQoRmlsdGVyJiBmaWx0ZXIs
IGZsb2F0IGR4LCBmbG9hdCBkeSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok9m
ZnNldCkKK0ZFT2Zmc2V0OjpGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpCisgICAgOiBGaWx0
ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU9mZnNldCkKICAgICAsIG1fZHgoZHgpCiAg
ICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1JlZjxGRU9mZnNldD4gRkVPZmZzZXQ6
OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9m
ZnNldChkeCwgZHkpKTsKIH0KIAogdm9pZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQgZHgpCkBAIC01
MiwzMyArNTIsMzggQEAgdm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkpCiAgICAgbV9keSA9
IGR5OwogfQogCi12b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitG
bG9hdFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmxv
YXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwot
ICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1vdmUo
ZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGlm
IChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0
UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0
KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0
KSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7Cisg
ICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBpbWFnZVJlY3QubW92
ZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVT
dWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworCit9CisKK2Jvb2wgRkVP
ZmZzZXQ6OmlzQWxwaGFJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlucHV0RWZmZWN0KDAp
LT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKK2Jvb2wgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAg
YXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYg
b3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9
IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVm
ZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VC
dWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIGF1dG8gb3V0cHV0
SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZpbHRl
ciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24p
OworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3QoaW5wdXQucmVsYXRpdmVBYnNv
bHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICBpbnB1dEltYWdlUmVjdC5tb3ZlKGZpbHRlci5z
Y2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIAorICAgIG91dHB1
dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdl
UmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVw
cmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2YWU1Yzc0YWFi
NWFhMTY3ZmIxZTY5ZS4uYTEwYTE4OWIzMGUzYzJmZGE1MzMxMzRhMzcxNzdlZTEzNDU1ZGQ1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuaApAQCAtMjIsMTMgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7
CisgICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAK
ICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KICAgICB2b2lkIHNldER4KGZs
b2F0KTsKQEAgLTM3LDE0ICszNiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREeShmbG9hdCk7
CiAKIHByaXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsK
KyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7IH0KKyAgICBib29sIGlz
QWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBG
aWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJp
ZGU7CiAKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKKyAgICAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIGZsb2F0IG1fZHg7CkBAIC01MywzICs1Miw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFT2Zm
c2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDU5OTcyMzA2ODg2YTYzZmE0
MTJiNWI3MTQxZjc0ZjljNDg3YTE0NGMuLjM4NzA3YjMwMWZkMTEwYmVjYmIwNGUyNWNmYzk4MmEy
MDVmZTY0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAgLTI3LDE4ICsyNywx
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVj
dWxhckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwg
ZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxh
ckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmls
dGVyLCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNw
ZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJu
ZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFyTGlnaHRp
bmcpCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKKyAgICA6
IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxl
LCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3Ro
WCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZykKIHsKIH0KIAotUmVmPEZFU3BlY3VsYXJMaWdodGlu
Zz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9y
JiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQorUmVm
PEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29s
b3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZpbHRlciwgbGln
aHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9u
ZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRT
b3VyY2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGxp
Z2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBv
bmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0
U291cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFyTGlnaHRpbmco
KSA9IGRlZmF1bHQ7Ci0KIGJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0
YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCiB7CiAgICAgaWYgKG1fc3BlY3VsYXJDb25zdGFu
dCA9PSBzcGVjdWxhckNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5kZXggZTk5
OGE3NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4YmYzYjI0OTU4YS4uYWM0NTBkYmRiNjBjZDY5N2Nk
OGRmYzNjNzkzMThkYmY2NGFkNTMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCkBAIC0y
Nyw4ICsyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVTcGVjdWxhckxpZ2h0
aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVTcGVj
dWxhckxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+
RkVTcGVjdWxhckxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+
IGNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
Jik7CiAKICAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVj
dWxhckNvbnN0YW50OyB9CiAgICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0KTsKQEAg
LTM5LDggKzM4LDkgQEAgcHVibGljOgogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImLCBjb25z
dCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291
cmNlPiYmKTsKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3Bl
Y3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVTcGVjdWxhckxpZ2h0
aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuY3BwCmluZGV4IDM1YzUxY2JiMjI5ZGVlOTY0MmRjMWU3ZGNhMGM1ZGIyZmNhYzIwYWQu
LjA1MzRhYmUwMDUxNzIxNjEyNDU0Zjg3YjM4NTcwZDA0MTlhM2Q3NzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTI2
LDY0ICsyNiw3NCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBh
dHRlcm4uaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiU1ZHUmVu
ZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZpbHRlcikKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitGRVRpbGU6OkZFVGlsZSgpCisgICAg
OiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCiB7CiB9CiAKLVJlZjxG
RVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZFVGlsZT4gRkVUaWxl
OjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZShmaWx0ZXIpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLXZvaWQgRkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRVRpbGU6OmlzQWxwaGFJbWFnZSgpIGNvbnN0
CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91
bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNl
LgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIEltYWdlQnVm
ZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VC
dWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1
bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldElzQWxwaGFJ
bWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1v
cmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2
ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMg
aXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAgIEZsb2F0
UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2ludCBpbk1h
eEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1h
eEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgaWYgKGlu
LT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0KSB7Ci0g
ICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAgIHRpbGVSZWN0
ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIu
ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVp
Z2h0KCkpOwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAoIXRpbGVJ
bWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBpbnB1dEVmZmVjdCgwKS0+aXNBbHBo
YUltYWdlKCk7Cit9CisKK0Zsb2F0UmVjdCBGRVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZl
U3VicmVnaW9uKTsKK30KKworYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+
ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKworICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJ
bWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0
LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9u
LnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBp
bi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICBhdXRvIG91dHB1dEltYWdl
ID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB0aWxlSW1hZ2VDb3B5ID0gSW1hZ2VCdWZmZXI6OnNp
bmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2UpKTsKLSAgICBpZiAoIXRpbGVJbWFn
ZUNvcHkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gaW5wdXQu
YWJzb2x1dGVJbWFnZVJlY3QoKTsKKyAgICBhdXRvIG91dHB1dEltYWdlUmVjdCA9IG91dHB1dC5h
YnNvbHV0ZUltYWdlUmVjdCgpOworCisgICAgYXV0byB0aWxlUmVjdCA9IGZpbHRlci5tYXhQcmlt
aXRpdmVTdWJyZWdpb24oaW5wdXQucHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIHRpbGVSZWN0
ID0gZmlsdGVyLnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKHRpbGVSZWN0KTsKKworICAgIGF1dG8g
bWF4T3V0cHV0UmVjdCA9IGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ob3V0cHV0LnByaW1p
dGl2ZVN1YnJlZ2lvbigpKTsKKyAgICBtYXhPdXRwdXRSZWN0ID0gZmlsdGVyLnNjYWxlZFJlY3RC
eUZpbHRlclNjYWxlKG1heE91dHB1dFJlY3QpOworCisgICAgYXV0byB0aWxlSW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRpbGVSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCk7CisgICAgaWYgKCF0aWxlSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZUJ1
ZmZlci0+Y29udGV4dCgpOworICAgIHRpbGVJbWFnZUNvbnRleHQudHJhbnNsYXRlKC10aWxlUmVj
dC5sb2NhdGlvbigpKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5w
dXRJbWFnZSwgaW5wdXRJbWFnZVJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRvIHRpbGVJbWFn
ZSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlQnVm
ZmVyKSk7CisgICAgaWYgKCF0aWxlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBhdHRlcm5UcmFuc2Zvcm0u
dHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2NhdGlvbik7CisgICAg
cGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUodGlsZVJlY3QubG9jYXRpb24oKSAtIG1heE91dHB1
dFJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUo
dGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9y
bSB9KTsKIAotICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5
LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKyAg
ICBHcmFwaGljc0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgp
OworICAgIG91dHB1dENvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOwotICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSk7
Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOworICAgIG91dHB1dENvbnRleHQuZmlsbFJlY3QoRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0SW1hZ2VSZWN0LnNpemUoKSkpOworICAgIHJldHVy
biB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5o
CmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLmZiYjBhMTA2
MmNiOWRmNDJlZjAyMzBlNjI0Njc2YTExZWEyNzI3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMjIsMjcgKzIyLDI1IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZp
bHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVGlsZT4gY3JlYXRl
KEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAogcHJpdmF0ZToK
LSAgICBGRVRpbGUoRmlsdGVyJik7CisgICAgRkVUaWxlKCk7CiAKLSAgICBjb25zdCBjaGFyKiBm
aWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVGlsZSI7IH0KKyAgICBib29sIGlz
QWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0
ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVRp
bGU7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFVGlsZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmNwcAppbmRleCA3NzRlNjgyZTNiNDg1OWJiNmUyMDZhMWQyYmZhZWIwY2VhOTE5ZjBiLi4yMmQ0
Zjk5YzcyZTUyNzE3YjQ4ODE5YjVjNDljM2FmM2U3NGM3ZGUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CkBAIC00OCw4ICs0OCw4IEBAIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4
MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KIHN0YXRpYyBjb25zdCBpbnQgc19yYW5k
USA9IDEyNzc3MzsgLy8gbSAvIGEKIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8v
IG0gJSBhCiAKLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJi
dWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKK0ZFVHVyYnVsZW5jZTo6RkVU
dXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9h
dCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNo
VGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVR1cmJ1bGVu
Y2UpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1
ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQpAQCAtNTksOSAr
NTksOSBAQCBGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVs
ZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZQogewogfQogCi1SZWY8RkVUdXJidWxlbmNl
PiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlw
ZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0
YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK1JlZjxGRVR1cmJ1bGVuY2U+IEZF
VHVyYnVsZW5jZTo6Y3JlYXRlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJv
b2wgc3RpdGNoVGlsZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNl
KGZpbHRlciwgdHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVz
LCBzZWVkLCBzdGl0Y2hUaWxlcykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVs
ZW5jZSh0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNl
ZWQsIHN0aXRjaFRpbGVzKSk7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpzZXRUeXBlKFR1cmJ1
bGVuY2VUeXBlIHR5cGUpCkBAIC0zNjYsMjIgKzM2NiwyMCBAQCBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChj
b25zdAogICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
U3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3QKK3ZvaWQg
RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkgY29uc3QKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKLSAg
ICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZmlsdGVy
UmVnaW9uLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0UG9pbnQgcG9p
bnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CiAgICAgaW50IGluZGV4T2ZQaXhlbENo
YW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgQWZmaW5l
VHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgp
LmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgRmxvYXRTaXplIGlu
dmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0
ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsg
eSA8IGVuZFk7ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwogICAg
ICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwogICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGZpbHRlclJlZ2lvbi53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIHBvaW50LnNl
dFgocG9pbnQueCgpICsgMSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBp
bnZlcnNlVHJhbnNmcm9tLm1hcFBvaW50KHBvaW50KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQg
bG9jYWxQb2ludCA9IHBvaW50LnNjYWxlZChpbnZlcnNlU2NhbGUud2lkdGgoKSwgaW52ZXJzZVNj
YWxlLmhlaWdodCgpKTsKICAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsK
ICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgp
LCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKICAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5u
ZWwgKz0gNDsKQEAgLTM5MSwyNiArMzg5LDMyIEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVn
aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmCiAK
IHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJz
KiBwYXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lvbigqcGFy
YW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVy
cy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKKyAg
ICBwYXJhbWV0ZXJzLT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwgKnBh
cmFtZXRlcnMtPnBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmZpbHRlclJlZ2lvbiwgKnBhcmFtZXRl
cnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3Rh
cnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdAogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVn
aW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgYXV0byYgb3V0cHV0
ID0gKmZpbHRlckltYWdlKCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0
LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7Cisg
ICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0
YSgpOworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOwogCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KTsKLSAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAgIElu
dFNpemUgb3V0cHV0U2l6ZShvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCkpOwogCi0g
ICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheS56ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG91dHB1dFNpemUuaXNF
bXB0eSgpKSB7CisgICAgICAgIG91dHB1dFBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRT
aXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7CisgICAgSW50U2l6ZSB0aWxl
U2l6ZSA9IHJvdW5kZWRJbnRTaXplKG91dHB1dC5wcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkp
OwogCiAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVggPSBtX2Jhc2VGcmVxdWVuY3lYOwogICAgIGZs
b2F0IGJhc2VGcmVxdWVuY3lZID0gbV9iYXNlRnJlcXVlbmN5WTsKQEAgLTQxOSwxNCArNDIzLDE3
IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIFBhaW50
aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJh
c2VGcmVxdWVuY3lZKTsKICAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKIAotICAgIGF1dG8g
YXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOworICAgIGF1dG8gYXJlYSA9IG91dHB1dFNpemUuYXJl
YSgpOwogICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgaGVpZ2h0ID0gcmVzdWx0U2l6ZS5oZWlnaHQo
KTsKKyAgICBpbnQgaGVpZ2h0ID0gb3V0cHV0U2l6ZS5oZWlnaHQoKTsKIAogICAgIHVuc2lnbmVk
IG1heE51bVRocmVhZHMgPSBoZWlnaHQgLyA4OwogICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWRO
dW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24s
IG1heE51bVRocmVhZHMpOworCisgICAgYXV0byBmaWx0ZXJSZWdpb24gPSBvdXRwdXQuYWJzb2x1
dGVJbWFnZVJlY3QoKTsKKwogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewogICAg
ICAgICBQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2Vi
Q29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVy
KTsKIApAQCAtNDQwLDggKzQ0NywxMCBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpv
YnM7ICsraSkgewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMg
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0
ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0
aW9uUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gJmZpbHRlcjsK
KyAgICAgICAgICAgICAgICBwYXJhbXMuZWZmZWN0ID0gdGhpczsKKyAgICAgICAgICAgICAgICBw
YXJhbXMuZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOworICAgICAgICAgICAgICAgIHBhcmFt
cy5waXhlbEFycmF5ID0gJm91dHB1dFBpeGVsQXJyYXk7CiAgICAgICAgICAgICAgICAgcGFyYW1z
LnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnN0
aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBz
dGFydFk7CkBAIC00NTIsMTIgKzQ2MSwxMyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxsZWxKb2Jz
LmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVk
IG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBh
cmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwg
cGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIGZpbGxSZWdpb24oZmls
dGVyLCBvdXRwdXRQaXhlbEFycmF5LCBmaWx0ZXJSZWdpb24sIHBhaW50aW5nRGF0YSwgc3RpdGNo
RGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuaAppbmRleCA0ZDUzNmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2QzY2NlY2I1Y2ZiLi5m
MjY0NjYyNTc2ZGFmNmJhMzU4MTU0ZTIzNTUzNWE0ZWQ2ZTAyNDA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgK
QEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM4LDcgKzM3LDcgQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlwZSB7CiAK
IGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUs
IGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgc3RhdGljIFJlZjxGRVR1cmJ1
bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0
IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hU
aWxlcyk7CiAKICAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CiAgICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKQEAgLTk2LDcgKzk1LDkgQEAg
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwogCiAgICAgc3RydWN0IEZp
bGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7CisgICAg
ICAgIGNvbnN0IEZpbHRlciogZmlsdGVyOworICAgICAgICBGRVR1cmJ1bGVuY2UqIGVmZmVjdDsK
KyAgICAgICAgSW50UmVjdCBmaWx0ZXJSZWdpb247CiAgICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiBwaXhlbEFycmF5OwogICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKICAgICAg
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwpAQCAtMTA2LDE5ICsxMDcsMTcgQEAgcHJpdmF0ZToK
IAogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMq
KTsKIAotICAgIEZFVHVyYnVsZW5jZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZs
b2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAgICBGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUs
IGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2
ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpOwogCi0gICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRVR1cmJ1bGVuY2UiOyB9Ci0KLSAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwogICAgIFN0aXRjaERh
dGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3Q7CiAgICAgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBj
b25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0
aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24o
VWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQg
c3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgdm9pZCBmaWxsUmVnaW9uKGNvbnN0IEZpbHRl
ciYsIFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25z
dCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7
CiAKICAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKIApAQCAtMTMyLDMg
KzEzMSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFVHVyYnVsZW5jZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IGEyZDk5Nzkz
YjBkYjIyNThiYzQ3NmRkY2MyOWMwY2UyNjExMGJjMWYuLjZkMjFhNjNhM2U0YmNkYzAyYWYwZmZm
MDVhZDllMzIzOGFlY2NlYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMSw1OCArMjIsOTcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyRWZmZWN0OwogCi1j
bGFzcyBGaWx0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXI+IHsKK2NsYXNzIEZpbHRlciA6
IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAg
ICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAs
IG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVy
KCkgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZm
ZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2Up
OyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFn
ZS5nZXQoKTsgfQorICAgIGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7IEludGVyc2VjdCwgVW5p
dGUgfTsKIAotICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNvbnN0
IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRpb24gPSBmaWx0
ZXJSZXNvbHV0aW9uOyB9CisgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJTY2FsZTsgfQorICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRT
aXplJiBmaWx0ZXJTY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7IH0KIAotICAg
IGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAg
IHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxl
OyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlSW1hZ2VSZWN0OyB9CisgICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QpIHsgbV9zb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJl
Y3Q7IH0KKyAgICAKKyAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4g
bV9maWx0ZXJSZWdpb247IH0KKyAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQogCi0g
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShz
b3VyY2VJbWFnZSk7IH0KKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9CiAKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KICAgICB2b2lkIHNldFJl
bmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9k
ZSA9IHJlbmRlcmluZ01vZGU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZpbHRlcigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ1NTRmlsdGVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2NsaXBPcGVyYXRpb247IH0KIAotICAgIHZpcnR1YWwgRmxvYXRTaXpl
IHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4g
c2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0
ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9u
SW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBGbG9hdFNpemUgc2NhbGVkU2l6
ZUJ5RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdCB7IHJldHVybiBzaXpl
ICogbV9maWx0ZXJTY2FsZTsgfQorCisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3RCeUZpbHRlclNj
YWxlKGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0
byBzY2FsZWRJbWFnZVJlY3QgPSBpbWFnZVJlY3Q7CisgICAgICAgIHNjYWxlZEltYWdlUmVjdC5z
Y2FsZShtX2ZpbHRlclNjYWxlKTsKKyAgICAgICAgcmV0dXJuIHNjYWxlZEltYWdlUmVjdDsKKyAg
ICB9CisKKyAgICBGbG9hdFJlY3QgbWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVy
c2VjdGlvbihwcmltaXRpdmVTdWJyZWdpb24sIG1fZmlsdGVyUmVnaW9uKTsKKyAgICB9CisKKyAg
ICBGbG9hdFJlY3QgY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgaW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2NsaXBPcGVyYXRpb24gPT0gQ2xpcE9wZXJhdGlvbjo6SW50ZXJz
ZWN0ID8gaW50ZXJzZWN0aW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKSA6IHVuaW9u
UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgfQorCisgICAgRmxvYXRS
ZWN0IGNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgbWF4UHJpbWl0
aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikpOworICAgIH0KKworICAgIEZsb2F0UG9p
bnQgbWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoY29uc3QgRmxvYXRQb2ludCYgdXNlclNw
YWNlUG9pbnQsIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAgICB7CisgICAgICAgIEZsb2F0UG9pbnQgYWJzb2x1
dGVQb2ludCA9IG1hcFBvaW50KHVzZXJTcGFjZVBvaW50LCBwcmltaXRpdmVTdWJyZWdpb24sIHNj
YWxlZFJlY3RCeUZpbHRlclNjYWxlKHByaW1pdGl2ZVN1YnJlZ2lvbikpOworICAgICAgICBGbG9h
dFJlY3QgYWJzb2x1dGVJbWFnZVJlY3QgPSBzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShpbWFnZVJl
Y3QpOworICAgICAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgtYWJzb2x1dGVJbWFnZVJlY3QubG9j
YXRpb24oKSk7CisgICAgICAgIHJldHVybiBhYnNvbHV0ZVBvaW50OworICAgIH0KKworICAgIHZp
cnR1YWwgYm9vbCBhcHBseUZpbHRlcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByb3RlY3RlZDoK
LSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKQot
ICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQorICAgIEZpbHRl
cihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgICAgICA6IEZpbHRlckZ1bmN0aW9uKGZp
bHRlclR5cGUpCisgICAgICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAgICAg
LCBtX2NsaXBPcGVyYXRpb24oY2xpcE9wZXJhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgRmls
dGVyKEZpbHRlcjo6VHlwZSBmaWx0ZXJUeXBlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxl
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKKyAgICAgICAgOiBGaWx0ZXJG
dW5jdGlvbihmaWx0ZXJUeXBlKQorICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUp
CisgICAgICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KQorICAgICAgICAs
IG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKKyAgICAgICAgLCBtX2NsaXBPcGVyYXRpb24o
Y2xpcE9wZXJhdGlvbikKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgorICAgIEZsb2F0U2l6ZSBt
X2ZpbHRlclNjYWxlOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKKyAgICBGbG9h
dFJlY3QgbV9maWx0ZXJSZWdpb247CisKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNl
SW1hZ2U7Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKICAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5n
TW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBmbG9hdCBtX2ZpbHRl
clNjYWxlIHsgMSB9OworCisgICAgQ2xpcE9wZXJhdGlvbiBtX2NsaXBPcGVyYXRpb24geyBDbGlw
T3BlcmF0aW9uOjpJbnRlcnNlY3QgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Qm91bmRhcnlTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyQm91bmRhcnlTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGRmYjU1YTQxODNmN2M0NjI0NDczMmE3
NGRiYzljMzljY2I2MTAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNldC5oCkBAIC0wLDAgKzEsODMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyQm91bmRhcnlTZXQgeworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgRmxhZ3MgeworICAgICAgICBIYXNYICAgICAgPSAxIDw8IDAs
CisgICAgICAgIEhhc1kgICAgICA9IDEgPDwgMSwKKyAgICAgICAgSGFzV2lkdGggID0gMSA8PCAy
LAorICAgICAgICBIYXNIZWlnaHQgPSAxIDw8IDMKKyAgICB9OworCisgICAgRmlsdGVyQm91bmRh
cnlTZXQoKSA9IGRlZmF1bHQ7CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldChjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kYXJpZXMsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCisgICAgICAgIDogbV9ib3Vu
ZGFyaWVzKGJvdW5kYXJpZXMpCisgICAgICAgICwgbV9mbGFncyhmbGFncykKKyAgICB7CisgICAg
fQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4geCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzWCkpCisgICAgICAgICAgICByZXR1cm4gbV9i
b3VuZGFyaWVzLngoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Zs
YWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNZKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJp
ZXMueSgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6
b3B0aW9uYWw8ZmxvYXQ+IHdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdz
LmNvbnRhaW5zKEZsYWdzOjpIYXNXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFy
aWVzLndpZHRoKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gaGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICht
X2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNIZWlnaHQpKQorICAgICAgICAgICAgcmV0dXJuIG1f
Ym91bmRhcmllcy5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fYm91bmRhcmllczsKKyAgICBPcHRpb25TZXQ8
RmxhZ3M+IG1fZmxhZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKaW5kZXggZmI2Nzc1NGU0ZmM1YmJjYTUxYzM0OGVjN2Y2M2U0Y2M5MjdkYjEwOC4uMmJl
OGM3MGJmMjhmMzdkZjk5MzNhYmE4N2VlMTU5MmRhMzk3OWVmYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cApAQCAtMjYsMTE4ICsyNiwxNCBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQotI2luY2x1ZGUgPGFybV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVy
JiBmaWx0ZXIsIFR5cGUgdHlwZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmls
dGVyRWZmZWN0Q2xhc3NUeXBlKHR5cGUpCi17Ci19Ci0KLUZpbHRlckVmZmVjdDo6fkZpbHRlckVm
ZmVjdCgpID0gZGVmYXVsdDsKLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkKLXsKLSAgICBtX2Fic29sdXRlUGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAg
IGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCi0gICAgICAgIG1fYWJzb2x1dGVQ
YWludFJlY3QudW5pdGUoZWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBjbGlwQWJz
b2x1dGVQYWludFJlY3QoKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBh
aW50UmVjdCgpCi17Ci0gICAgLy8gRmlsdGVycyBpbiBTVkcgY2xpcCB0byBwcmltaXRpdmUgc3Vi
cmVnaW9uLCB3aGlsZSBDU1MgZG9lc24ndC4KLSAgICBpZiAobV9jbGlwc1RvQm91bmRzKQotICAg
ICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KG1fbWF4
RWZmZWN0UmVjdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0
ZShlbmNsb3NpbmdJbnRSZWN0KG1fbWF4RWZmZWN0UmVjdCkpOwotfQotCi1GbG9hdFBvaW50IEZp
bHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCB1c2Vy
U3BhY2VQb2ludCkgY29uc3QKLXsKLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQ
b2ludCh1c2VyU3BhY2VQb2ludCwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIG1fYWJzb2x1
dGVVbmNsaXBwZWRTdWJyZWdpb24pOwotICAgIGFic29sdXRlUG9pbnQubW92ZUJ5KC1tX2Fic29s
dXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBhYnNvbHV0ZVBvaW50OwotfQot
Ci1JbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgbG9jYXRp
b24gPSBtX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCk7Ci0gICAgbG9jYXRpb24ubW92ZUJ5
KC1lZmZlY3RSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6
OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
K0ZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlKQorICAg
IDogRmlsdGVyRnVuY3Rpb24odHlwZSkKIHsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0g
ICAgRmxvYXRTaXplIHNjYWxlOwotICAgIEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoc2NhbGUpLnRyYW5zbGF0ZSgtbV9hYnNvbHV0ZVBh
aW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3Qoc3JjUmVj
dCk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpCi17Ci0gICAgLy8gRkVUaWxlLCBGRVR1cmJ1bGVuY2UsIEZFRmxvb2QgZG9u
J3QgaGF2ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJl
Y3QuCi0gICAgRmxvYXRSZWN0IHN1YnJlZ2lvbjsKLSAgICBpZiAodW5zaWduZWQgbnVtYmVyT2ZJ
bnB1dEVmZmVjdHMgPSBpbnB1dEVmZmVjdHMoKS5zaXplKCkpIHsKLSAgICAgICAgc3VicmVnaW9u
ID0gaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsr
aSkgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGlucHV0RWZm
ZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgICAg
IHN1YnJlZ2lvbi51bml0ZShpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbik7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2Vy
U3BhY2UoKTsKLQotICAgIC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWlu
IGZvciA8ZmVUaWxlPi4KLSAgICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVj
dFR5cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVz
ZXJTcGFjZSgpOwotCi0gICAgYXV0byBib3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwot
ICAgIGlmIChoYXNYKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsK
LSAgICBpZiAoaGFzWSgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7
Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFy
aWVzLndpZHRoKCkpOwotICAgIGlmIChoYXNIZWlnaHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNl
dEhlaWdodChib3VuZGFyaWVzLmhlaWdodCgpKTsKLQotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbihzdWJyZWdpb24pOwotCi0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmls
dGVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8gZmls
dGVyUmVzb2x1dGlvbiA9IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0
ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKLSAgICAvLyBTYXZlIHRoaXMgYmVm
b3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQgdG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBmcm9t
IHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5hdGVzLgotICAgIHNldFVuY2xpcHBlZEFic29s
dXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKLQotICAgIC8vIENsaXAgZXZlcnkgZmls
dGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAgICBhdXRvIGFic29sdXRlU2NhbGVk
RmlsdGVyUmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgYWJzb2x1dGVTY2Fs
ZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgYWJzb2x1dGVTdWJy
ZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKLQotICAgIHNldE1h
eEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJyZWdpb24pOwotICAgIHJldHVybiBzdWJyZWdpb247CiB9
CiAKIEZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1i
ZXIpIGNvbnN0CkBAIC0xNDYsNTE0ICs0Miw5OSBAQCBGaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVj
dDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAogICAgIHJldHVybiBtX2lucHV0
RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY29sbGVjdEVm
ZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KmVmZmVjdCwgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZl
Y3QqPiYgYWxsRWZmZWN0cykKLXsKLSAgICBhbGxFZmZlY3RzLmFkZChlZmZlY3QpOwotICAgIHVu
c2lnbmVkIHNpemUgPSBlZmZlY3QtPm51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsKLSAgICAgICAgY29sbGVjdEVmZmVjdHMoaW4sIGFs
bEVmZmVjdHMpOwotICAgIH0KLSAgICByZXR1cm4gYWxsRWZmZWN0cy5zaXplKCk7Ci19Ci0KLXVu
c2lnbmVkIEZpbHRlckVmZmVjdDo6dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0Ci17
Ci0gICAgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiBhbGxFZmZlY3RzOwotICAgIHJldHVy
biBjb2xsZWN0RWZmZWN0cyh0aGlzLCBhbGxFZmZlY3RzKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmFwcGx5KCkKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVByaW1pdGl2ZVN1
YnJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBpZiAoaGFzUmVzdWx0
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMu
c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpOwotICAgICAg
ICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ29udmVydCBpbnB1dCByZXN1bHRzIHRvIHRoZSBjdXJy
ZW50IGVmZmVjdCdzIGNvbG9yIHNwYWNlLgotICAgICAgICB0cmFuc2Zvcm1SZXN1bHRDb2xvclNw
YWNlKGluLCBpKTsKLSAgICB9Ci0KLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwot
ICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLQotICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRl
ck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8ICJcbiAgZWZmZWN0Qm91
bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFic29sdXRlVW5jbGlwcGVk
U3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA8PCAiXG4gIGFic29s
dXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAiXG4gIG1heEVmZmVjdFJl
Y3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBtX2ZpbHRl
ci5maWx0ZXJTY2FsZSgpIDw8ICJcbiAgZmlsdGVyIHJlc29sdXRpb24gIiA8PCBtX2ZpbHRlci5m
aWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0
eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVs
dGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElm
TmVlZGVkKCk7Ci0gICAgfQorICAgIC8vIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBodHRwczov
L3d3dy53My5vcmcvVFIvZmlsdGVyLWVmZmVjdHMtMS8jRmlsdGVyUHJpbWl0aXZlU3ViUmVnaW9u
LgorICAgIEZsb2F0UmVjdCBkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uOwogICAgIAotICAgIC8v
IEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVh
cmxpZXIuCi0gICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZm
ZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCi17Ci0gICAgLy8gTXVzdCBvcGVy
YXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUg
aW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5k
YXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwot
Ci0gICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUg
cGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUo
QVJNX05FT05fSU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewot
ICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0
aCAmIH4weDNmKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhl
bERhdGEgYnkgNjQuCi0gICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZs
ZDRxX3U4KHBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZt
aW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAg
ICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFs
WzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZh
bFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFsz
XSk7Ci0gICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAg
ICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBs
YXN0UGl4ZWwpOwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAg
aWYgKCFwaXhlbEFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8g
SXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29s
b3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkg
ewotICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1
aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBv
bmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRh
ID4gYSkKLSAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4
ZWxEYXRhOwotICAgICAgICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAg
ICAgKytwaXhlbERhdGE7Ci0gICAgfQotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1
bHQoKQotewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdHNSZWN1cnNpdmUoKQotewotICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNz
IHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNl
ZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1
bHQoKSkKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lu
cHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKLSAgICAgICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vy
c2l2ZSgpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3Vs
dCgpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1
bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIu
cmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3Bh
Y2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBEb24ndCB1c2UgdGhlIGlucHV0J3Mgc3Vi
cmVnaW9uIGZvciA8ZmVUaWxlPi4KKyAgICBpZiAoIW1faW5wdXRFZmZlY3RzLmlzRW1wdHkoKSAm
JiBmaWx0ZXJUeXBlKCkgIT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKKyAgICAgICAgICAgIGRlZmF1bHRQ
cmltaXRpdmVTdWJyZWdpb24udW5pdGUoZWZmZWN0LT5jYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdp
b24oZmlsdGVyKSk7CisgICAgfSBlbHNlCisgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdp
b24gPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7CiAKLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQ
aXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7
Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3Vi
cmVnaW9uOwogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0
aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRp
b25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0
LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2Nh
bGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4o
KSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4
ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7CisgICAg
cHJpbWl0aXZlU3VicmVnaW9uLnNldFgobV9ib3VuZGFyeVNldC54KCkudmFsdWVfb3IoZGVmYXVs
dFByaW1pdGl2ZVN1YnJlZ2lvbi54KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0WSht
X2JvdW5kYXJ5U2V0LnkoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLnkoKSkp
OworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRXaWR0aChtX2JvdW5kYXJ5U2V0LndpZHRoKCku
dmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi53aWR0aCgpKSk7CisgICAgcHJpbWl0
aXZlU3VicmVnaW9uLnNldEhlaWdodChtX2JvdW5kYXJ5U2V0LmhlaWdodCgpLnZhbHVlX29yKGRl
ZmF1bHRQcmltaXRpdmVTdWJyZWdpb24uaGVpZ2h0KCkpKTsKKyAgICAKKyAgICByZXR1cm4gcHJp
bWl0aXZlU3VicmVnaW9uOwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVm
ZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK0Zsb2F0UmVjdCBGaWx0ZXJF
ZmZlY3Q6OmNhbGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKIHsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBz
Y2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gY2hlY2tl
ZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChj
aGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBj
b2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1
YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOworICAgIHJldHVy
biBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAK
LXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3Qm
IHJlY3QpIGNvbnN0CitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3Qo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdAogewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0
LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2Nh
bGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0
aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkg
dGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgp
IDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNj
YWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1z
ZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisgICAgaWYg
KG1fZmlsdGVySW1hZ2UpCisgICAgICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5pbWFnZVJlY3Qo
KTsKIAotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qg
d2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxl
ZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndp
ZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAg
ICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdDsKIAotICAgIGludCB4T3JpZ2lu
ID0gc2NhbGVkUmVjdC54KCk7Ci0gICAgaW50IHhEZXN0ID0gMDsKLSAgICBpZiAoeE9yaWdpbiA8
IDApIHsKLSAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKLSAgICAgICAgeE9yaWdpbiA9IDA7Cisg
ICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykgeworICAgICAgICBhdXRvJiBp
bnB1dCA9ICplZmZlY3QtPmZpbHRlckltYWdlKCk7CisgICAgICAgIGltYWdlUmVjdC51bml0ZShp
bnB1dC5pbWFnZVJlY3QoKSk7CiAgICAgfQotICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhY
KCk7Ci0gICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgeEVu
ZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOwotCi0gICAgaW50IHlPcmlnaW4gPSBzY2FsZWRS
ZWN0LnkoKTsKLSAgICBpbnQgeURlc3QgPSAwOwotICAgIGlmICh5T3JpZ2luIDwgMCkgewotICAg
ICAgICB5RGVzdCA9IC15T3JpZ2luOwotICAgICAgICB5T3JpZ2luID0gMDsKLSAgICB9Ci0gICAg
aW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKLSAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50
U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsK
LQotICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7Ci0gICAgaW50IGRlc3RpbmF0
aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBzb3VyY2VTY2Fu
bGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKLSAgICB1aW50OF90KiBkZXN0aW5h
dGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lk
dGgoKSkgKyB4RGVzdCkgKiA0OwotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291
cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmln
aW4pICogNDsKIAotICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgewotICAgICAgICBtZW1jcHko
ZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwotICAgICAgICBkZXN0aW5hdGlv
blBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7Ci0gICAgICAgIHNvdXJjZVBpeGVsICs9IHNv
dXJjZVNjYW5saW5lOwotICAgICAgICArK3lPcmlnaW47Ci0gICAgfQorICAgIHJldHVybiBmaWx0
ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKIH0KIAotc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRTaXplJiBpbnB1dFNpemUpCitJbnRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRl
QWJzb2x1dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0
OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndp
ZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93
Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWln
aHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vs
c2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwot
ICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJl
YSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRl
c3RpbmF0aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsK
LSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAq
IGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19j
YXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJd
KSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhh
OwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9
IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOworICAgIGlmIChwcmltaXRpdmVT
dWJyZWdpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gaW1hZ2VS
ZWN0ID0gY2FsY3VsYXRlSW1hZ2VSZWN0KGZpbHRlciwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKyAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChmaWx0ZXIuc2NhbGVkUmVjdEJ5RmlsdGVyU2NhbGUo
aW1hZ2VSZWN0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit2b2lkIEZpbHRlckVmZmVjdDo6Y2xl
YXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNp
emVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWln
aHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0g
ICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQot
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRo
KCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dC
eXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50
OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3Qq
IGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsK
LSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsK
LSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9
IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzBdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFsxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9
IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsK
LSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVm
ZmVyKQotewotICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRo
ZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGly
ZWN0bHkuCi0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1
ZmZlci5zaXplKCkpOwotICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFn
ZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1dG8gYnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgp
LCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25S
ZWN0KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENv
bG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCku
YWxwaGFGb3JtYXQpOworICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQg
dGhlIGN1cnJlbnQgZWZmZWN0IGhhcworICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBh
biBlZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgorICAgIGNsZWFyRmlsdGVySW1hZ2Uo
KTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQorICAgICAgICBlZmZl
Y3QtPmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXIm
IGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEFscGhhRm9ybWF0KQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZGlyZWN0
bHkgdXNpbmcgUGl4ZWxCdWZmZXJDb252ZXJzaW9uLgorICAgIGlmIChtX2ZpbHRlckltYWdlKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdl
QnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgYXV0byBwcmltaXRpdmVTdWJy
ZWdpb24gPSBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKKyAgICBpZiAocHJp
bWl0aXZlU3VicmVnaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Ly8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5k
IHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNv
bnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVy
LnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFj
ZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24g
aGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8g
YW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihp
bnB1dEJ1ZmZlciwgcmVjdCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBjYWxjdWxhdGVJbWFnZVJl
Y3QoZmlsdGVyLCBwcmltaXRpdmVTdWJyZWdpb24pOworICAgIGF1dG8gYWJzb2x1dGVJbWFnZVJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci5zY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShpbWFn
ZVJlY3QpKTsKICAgICAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBo
YUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCB0YXJnZXRDb2xvclNwYWNlIH07Ci0gICAgcmV0
dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKLX0KLQot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24o
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQg
aW4gbV9pbWFnZUJ1ZmZlclJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRv
IGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNv
bG9yU3BhY2UsICptX2ltYWdlQnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpIH0sIG91dHB1dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBp
eGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmls
dGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LAotICAgIC8vIHdoaWNoZXZlciBp
c24ndCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4
ZWxCdWZmZXIgPSBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4
ZWxCdWZmZXIpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0
aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3Qm
IHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQot
ewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgaWYgKGFic29sdXRlSW1hZ2VSZWN0Lmlz
RW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJl
Y3Quc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIExPR19XSVRIX1NU
UkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8
PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1h
Z2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwot
Ci0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHBy
ZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9p
bWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJD
b2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlD
b252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1f
aW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwot
ICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JT
cGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VC
dWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1
dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0g
ICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNw
YWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZm
ZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29u
dmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJU
b0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNv
bG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5
dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3Qp
OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFz
UmVzdWx0KCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmls
dGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11
bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhl
IGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAg
ICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JT
cGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFj
ZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1h
dCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihm
b3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAg
ICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRT
aXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgICAgICAgICBBU1NFUlQo
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3Vs
dENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBt
X3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAg
ICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwg
aW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZl
cnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwg
ZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3Qg
JXMgJXAgY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQgJWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMs
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93
ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBj
bGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0g
ICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0
IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQo
IW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsK
LQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0g
ICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwot
ICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxC
dWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVz
dWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAg
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQot
ICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNS
ZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAg
ICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENv
bG9yU3BhY2UgfTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVy
Ojp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBm
dW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBj
b2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNv
bnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0g
ICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICBy
ZXR1cm4gZGVzdGluYXRpb25Db2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVz
dGluYXRpb25Db2xvclNwYWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVz
dGluYXRpb25Db2xvclNwYWNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAg
IC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBV
TlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNS
ZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50
aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAv
LyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGll
ZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNl
KGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0
aW5hdGlvbkNvbG9yU3BhY2U7Ci0KLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3Rk
OjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0
OwotI2VuZGlmCisgICAgYXV0byBpc0FscGhhSW1hZ2UgPSB0aGlzLT5pc0FscGhhSW1hZ2UoKTsK
KyAgICBhdXRvIGltYWdlQ29sb3JTcGFjZSA9IHRoaXMtPmltYWdlQ29sb3JTcGFjZSgpOworICAg
IAorICAgIG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKHByaW1pdGl2ZVN1YnJl
Z2lvbiwgaW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdlUmVjdCwgaXNBbHBoYUltYWdlLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBpbWFnZUNvbG9yU3BhY2UpOworICAgIGlmICghbV9maWx0
ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZp
bHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgp
IDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKToiCisgICAgICAgIDw8ICJcbiAgcHJpbWl0aXZl
U3VicmVnaW9uICIgPDwgcHJpbWl0aXZlU3VicmVnaW9uCisgICAgICAgIDw8ICJcbiAgbWF4UHJp
bWl0aXZlU3VicmVnaW9uICIgPDwgZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRp
dmVTdWJyZWdpb24pCisgICAgICAgIDw8ICJcbiAgaW1hZ2VSZWN0ICIgPDwgaW1hZ2VSZWN0Cisg
ICAgICAgIDw8ICJcbiAgYWJzb2x1dGVJbWFnZWdSZWN0ICIgPDwgYWJzb2x1dGVJbWFnZVJlY3Qp
OworICAgIAorICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVy
ZSBhbmQgcmV0dXJuIGVhcmxpZXIuCisgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGZpbHRlcik7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3QKQEAgLTY2Myw5ICsxNDQsNyBAQCBUZXh0U3RyZWFtJiBGaWx0
ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2Vu
dGF0aW9uVAogICAgIAogICAgIGlmIChyZXByZXNlbnRhdGlvblR5cGUgPT0gUmVwcmVzZW50YXRp
b25UeXBlOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5k
ZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIGltYWdlIiwgbV9h
bHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcgY29sb3JzcGFj
ZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVz
dWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwogICAgICAgICB0cyA8PCAiXG4i
IDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggMTJk
ZWQyNjVhNjU1YzM3ZTc3ZTJjZjA1YjUyNzczZjJiOTZiNDcxYy4uNTBjY2IwYTZkYTYwZDMyMWUx
NDBkZmFkNzQzZGIwOTljMzllMmJlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMiwxNyArMjIsOSBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIK
LSNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5o
PgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgIkZpbHRlckJvdW5kYXJ5U2V0LmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFRleHRT
dHJlYW07CkBAIC00MiwyMTcgKzM0LDY0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RmlsdGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7CiAKLWVu
dW0gRmlsdGVyRWZmZWN0VHlwZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24sCi0gICAg
RmlsdGVyRWZmZWN0VHlwZUltYWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAotICAgIEZp
bHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dAotfTsKLQotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJs
aWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4
X3QgewotICAgICAgICBCbGVuZCwKLSAgICAgICAgQ29sb3JNYXRyaXgsCi0gICAgICAgIENvbXBv
bmVudFRyYW5zZmVyLAotICAgICAgICBDb21wb3NpdGUsCi0gICAgICAgIENvbnZvbHZlTWF0cml4
LAotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIERpc3BsYWNlbWVudE1hcCwKLSAg
ICAgICAgRHJvcFNoYWRvdywKLSAgICAgICAgRmxvb2QsCi0gICAgICAgIEdhdXNzaWFuQmx1ciwK
LSAgICAgICAgSW1hZ2UsCi0gICAgICAgIExpZ2h0aW5nLAotICAgICAgICBNZXJnZSwKLSAgICAg
ICAgTW9ycGhvbG9neSwKLSAgICAgICAgT2Zmc2V0LAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5n
LAotICAgICAgICBUaWxlLAotICAgICAgICBUdXJidWxlbmNlLAotICAgICAgICBTb3VyY2VBbHBo
YSwKLSAgICAgICAgU291cmNlR3JhcGhpYwotICAgIH07Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZm
ZWN0KCk7Ci0KLSAgICB2b2lkIGNsZWFyUmVzdWx0KCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNS
ZWN1cnNpdmUoKTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJl
Y3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQp
OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25z
dCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpu
dWxsb3B0KTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CiAgICAg
RmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0
czsgfQotICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwotICAg
IHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVm
ZmVjdHMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygp
IGNvbnN0OwotICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywg
aWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAg
ICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQ7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29u
c3QgSW50UmVjdCYpIGNvbnN0OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBp
eGVsQnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZWN1cnNlcyBv
biBpbnB1dHMuCi0gICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpOwotCi0gICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFs
dWVzLgotICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUltYWdl
OyB9Ci0gICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJ
bWFnZSA9IGFscGhhSW1hZ2U7IH0KKyAgICBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CisgICAgRmlsdGVyRWZm
ZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0OwogCi0gICAgSW50UmVjdCBh
YnNvbHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVQYWludFJlY3Q7IH0K
LSAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGFic29sdXRlUGFp
bnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50UmVjdDsgfQorICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJikgY29u
c3Q7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBG
aWx0ZXImKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3Qo
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
OworICAgIEludFJlY3QgY2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJikg
Y29uc3Q7CiAKLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJl
Y3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAK
KyAgICBGaWx0ZXJJbWFnZSogZmlsdGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcklt
YWdlLmdldCgpOyB9CisgICAgdm9pZCBjbGVhckZpbHRlckltYWdlKCkgb3ZlcnJpZGUgeyBtX2Zp
bHRlckltYWdlID0gbnVsbHB0cjsgfQorICAgIHZvaWQgY2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNp
dmUoKTsKIAotICAgIHZvaWQgYXBwbHkoKTsKKyAgICB2b2lkIHNldEJvdW5kYXJ5U2V0KGNvbnN0
IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgeyBtX2JvdW5kYXJ5U2V0ID0gYm91bmRh
cnlTZXQ7IH0KIAotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3Nh
cnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0
aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRz
IGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9z
aXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFs
IHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9CisgICAgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9v
cGVyYXRpbmdDb2xvclNwYWNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0
aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlm
ZmVyZW50IGFscGhhIHZhbHVlcy4KKyAgICB2aXJ0dWFsIGJvb2wgaXNBbHBoYUltYWdlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgaW1hZ2VDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNw
YWNlOyB9CiAKLSAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9CisgICAgdmlydHVhbCBi
b29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSA9IDA7CiAKLSAgICB2aXJ0
dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMoKTsgfQor
I2lmIFVTRShDT1JFX0lNQUdFKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5Q29yZUlt
YWdlKGNvbnN0IEZpbHRlciYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKyAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgZW51bSBjbGFzcyBSZXBy
ZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKICAgICB2aXJ0dWFsIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRwdXQpIGNvbnN0
OwogCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVjaWZpYyBhbmQg
d2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgotICAgIC8vIFNl
ZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NjE0LgotICAg
IGJvb2wgaGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZvaWQgc2V0SGFzWChi
b29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1koKSBjb25zdCB7
IHJldHVybiBtX2hhc1k7IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkgeyBtX2hhc1kg
PSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzV2lk
dGg7IH0KLSAgICB2b2lkIHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9oYXNXaWR0aCA9IHZh
bHVlOyB9Ci0KLSAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSGVpZ2h0
OyB9Ci0gICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hlaWdodCA9IHZh
bHVlOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2b2lkIHNldEZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbjsgfQotCi0gICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVy
biBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICB2b2lkIHNldEVmZmVjdEJvdW5kYXJpZXMoY29u
c3QgRmxvYXRSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91bmRhcmllcyA9IGVm
ZmVjdEJvdW5kYXJpZXM7IH0KLSAgICAKLSAgICB2b2lkIHNldFVuY2xpcHBlZEFic29sdXRlU3Vi
cmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9u
ID0gcjsgfQotICAgIAotICAgIEZsb2F0UG9pbnQgbWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZm
ZXIoRmxvYXRQb2ludCkgY29uc3Q7Ci0gICAgCi0gICAgVHlwZSBmaWx0ZXJFZmZlY3RDbGFzc1R5
cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsgfQotCi0gICAgRmls
dGVyJiBmaWx0ZXIoKSB7IHJldHVybiBtX2ZpbHRlcjsgfQotICAgIGNvbnN0IEZpbHRlciYgZmls
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXI7IH0KLQotICAgIGJvb2wgY2xpcHNUb0JvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcHNUb0JvdW5kczsgfQotICAgIHZvaWQgc2V0Q2xpcHNU
b0JvdW5kcyhib29sIHZhbHVlKSB7IG1fY2xpcHNUb0JvdW5kcyA9IHZhbHVlOyB9Ci0KLSAgICBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Up
IHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotICAgIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
dWx0Q29sb3JTcGFjZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX3Jlc3VsdENvbG9yU3Bh
Y2UgPSBjb2xvclNwYWNlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsgfQotICAgIHZvaWQgdHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKLSAgICAKLSAg
ICBzdGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcykKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZhbHVl
cyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXpl
ZEZsb2F0KHZhbHVlc1tpXSk7Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOwotICAg
IH0KLQogcHJvdGVjdGVkOgotICAgIEZpbHRlckVmZmVjdChGaWx0ZXImLCBUeXBlKTsKLSAgICAK
LSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7Ci0KLSAgICBJ
bWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNv
cnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1
NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBi
b29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9y
IHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQ
cmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci0KLSAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgp
OwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9
IDA7CisgICAgRmlsdGVyRWZmZWN0KFR5cGUpOwogCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFn
ZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBl
ZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZl
cnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29u
dmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYs
IFBpeGVsQnVmZmVyJik7Ci0gICAgCi0KLSAgICBGaWx0ZXImIG1fZmlsdGVyOwogICAgIEZpbHRl
ckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKLQotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
bV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRS
ZWN0OwotICAgIAotICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgb2YgYSBmaWx0ZXIgcHJpbWl0aXZl
LiBJbiBTVkcgdGhpcyBpcyB0aGUgcHJpbWl0aXZlIHN1YnJlZ2lvbiBpbiBhYnNvbHV0ZSBjb29y
ZGluYXRlIHNwYWNlLgotICAgIC8vIFRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHNob3VsZCBuZXZl
ciBiZSBiaWdnZXIgdGhhbiBtX21heEVmZmVjdFJlY3QuCi0gICAgRmxvYXRSZWN0IG1fbWF4RWZm
ZWN0UmVjdDsKICAgICAKLSAgICAvLyBUaGUgc3VicmVnaW9uIG9mIGEgZmlsdGVyIHByaW1pdGl2
ZSBhY2NvcmRpbmcgdG8gdGhlIFNWRyBGaWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBsb2NhbCBjb29y
ZGluYXRlcy4KLSAgICAvLyBUaGlzIGlzIFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gbW92ZSB0
byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KLSAgICBGbG9hdFJlY3QgbV9maWx0
ZXJQcmltaXRpdmVTdWJyZWdpb247CisgICAgRmlsdGVyQm91bmRhcnlTZXQgbV9ib3VuZGFyeVNl
dDsKIAotICAgIC8vIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFjdHVhbCBTVkdGRSpF
bGVtZW50LiBJcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJyZWdpb24gb2YgdGhlCi0gICAg
Ly8gZmlsdGVyIHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0ZXAuCi0gICAgRmxvYXRSZWN0IG1fZWZm
ZWN0Qm91bmRhcmllczsKLSAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gbWFw
cGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAgICBGbG9hdFJl
Y3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+
IG1fZmlsdGVySW1hZ2U7CiAKLSAgICBib29sIG1fYWxwaGFJbWFnZSB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX2hhc1ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNZIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1faGFzV2lkdGggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNIZWlnaHQgeyBmYWxzZSB9
OwotCi0gICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJpbWl0aXZlIHJlZ2lv
biwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMuCi0g
ICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07Ci0KLSNpZiBFTkFCTEUoREVTVElOQVRJ
T05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1f
b3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigp
IH07Ci0jZWxzZQogICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3Bh
Y2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotI2VuZGlmCi0gICAgRGVzdGlu
YXRpb25Db2xvclNwYWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpIH07Ci0gICAgCi0gICAgY29uc3QgVHlwZSBtX2ZpbHRlckVmZmVjdENsYXNzVHlw
ZTsKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBGaWx0ZXJFZmZlY3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZpbHRlckVmZmVj
dCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24m
IGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi5pc0ZpbHRlckVmZmVjdCgpOyB9CitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19G
SUxURVJfRUZGRUNUKENsYXNzTmFtZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpDbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJUeXBlKCkgPT0g
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDbGFzc05hbWU7IH0gXAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCmluZGV4IDU2YmUy
NDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3NWE3NTczZTljYzQuLjgzNzFhYTIwZjIwZjc0ZDBlZmFl
MGI2NTY2OGY0ODExMGRjMTQ2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKQEAg
LTM2LDE3ICszNiwxNyBAQCBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7CiAgICAgCiBwdWJs
aWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gdHJ5
Q3JlYXRlKGJvb2wsIEZpbHRlckVmZmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUVmZmVj
dHMoRmlsdGVyRWZmZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUVmZmVjdHMoY29u
c3QgRmlsdGVyJiwgRmlsdGVyRWZmZWN0JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBoYXNSZXN1
bHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXIm
LCBjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFy
UmVzdWx0KCkgPSAwOwogICAgIAogICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdFJlbmRlcmVyKCkg
PSBkZWZhdWx0OwogICAgIAogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKCkg
PSBkZWZhdWx0OwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVm
ZmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihjb25zdCBG
aWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmNWJiMTU2MzgxZGVjMWUwYmFjMjJk
OTExOWMyZTBlZDgwZTRhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDg0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5oIgorCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRl
ckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbihUeXBlIGZpbHRlclR5cGUpCisgICAgOiBtX2ZpbHRl
clR5cGUoZmlsdGVyVHlwZSkKK3sKK30KKworc3RhdGljIGlubGluZSBjb25zdCBhdXRvJiBmaWx0
ZXJOYW1lcygpCit7CisgICAgdXNpbmcgRmlsdGVyTmFtZU1hcCA9IEhhc2hNYXA8RmlsdGVyRnVu
Y3Rpb246OlR5cGUsIEF0b21TdHJpbmcsIFdURjo6SW50SGFzaDxGaWx0ZXJGdW5jdGlvbjo6VHlw
ZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8RmlsdGVyRnVuY3Rpb246OlR5cGU+PjsKKwor
ICAgIHN0YXRpYyBhdXRvIGZpbHRlck5hbWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKKyAg
ICAgICAgRmlsdGVyTmFtZU1hcCBmaWx0ZXJOYW1lcyA9IHsKKyAgICAgICAgICAgIHsgRmlsdGVy
RnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlciwgICAgICAgICAgICJDU1NGaWx0ZXIiX3MgICAgICAg
ICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsICAg
ICAgICAgICAiU1ZHRmlsdGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAgCisgICAgICAg
ICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kLCAgICAgICAgICAgICAiRkVCbGVu
ZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVDb2xvck1hdHJpeCwgICAgICAgIkZFQ29sb3JNYXRyaXgiX3MgICAgICAgfSwKKyAgICAgICAg
ICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXIsICJGRUNvbXBv
bmVudFRyYW5zZmVyIl9zIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUNvbXBvc2l0ZSwgICAgICAgICAiRkVDb21wb3NpdGUiX3MgICAgICAgICB9LAorICAgICAgICAg
ICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwgICAgIkZFQ29udm9s
dmVNYXRyaXgiX3MgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
RGlmZnVzZUxpZ2h0aW5nLCAgICJGRURpZmZ1c2VMaWdodGluZyJfcyAgIH0sCisgICAgICAgICAg
ICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCwgICAiRkVEaXNwbGFj
ZW1lbnRNYXAiX3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVE
cm9wU2hhZG93LCAgICAgICAgIkZFRHJvcFNoYWRvdyJfcyAgICAgICAgfSwKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRmxvb2QsICAgICAgICAgICAgICJGRUZsb29kIl9z
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdh
dXNzaWFuQmx1ciwgICAgICAiRkVHYXVzc2lhbkJsdXIiX3MgICAgICB9LAorICAgICAgICAgICAg
eyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZSwgICAgICAgICAgICAgIkZFSW1hZ2UiX3Mg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWVy
Z2UsICAgICAgICAgICAgICJGRU1lcmdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7
IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3ksICAgICAgICAiRkVNb3JwaG9sb2d5
Il9zICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZz
ZXQsICAgICAgICAgICAgIkZFT2Zmc2V0Il9zICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsg
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZywgICJGRVNwZWN1bGFyTGln
aHRpbmciX3MgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVRpbGUs
ICAgICAgICAgICAgICAiRkVUaWxlIl9zICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLCAgICAgICAgIkZFVHVyYnVsZW5jZSJf
cyAgICAgICAgfSwKKworICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNl
QWxwaGEsICAgICAgICAgIlNvdXJjZUFscGhhIl9zICAgICAgICAgfSwKKyAgICAgICAgICAgIHsg
RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUdyYXBoaWMsICAgICAgICJTb3VyY2VHcmFwaGlj
Il9zICAgICAgIH0KKworICAgICAgICB9OworICAgICAgICByZXR1cm4gZmlsdGVyTmFtZXM7Cisg
ICAgfSgpKTsKKyAgICAKKyAgICByZXR1cm4gZmlsdGVyTmFtZXMuZ2V0KCk7Cit9CisKK2NvbnN0
IEF0b21TdHJpbmcmIEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKFR5cGUgZmlsdGVyVHlwZSkK
K3sKKyAgICBhdXRvIGl0ID0gZmlsdGVyTmFtZXMoKS5maW5kKGZpbHRlclR5cGUpOworICAgIEFT
U0VSVChpdCAhPSBmaWx0ZXJOYW1lcygpLmVuZCgpKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjA2NThjYmEwOWNhMWYwYzdiNDc0NDc0OWU4MDE4MWU3YzE4NTQ4YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rp
b24uaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBU
ZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlcjsKKwor
Y2xhc3MgRmlsdGVyRnVuY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJGdW5jdGlvbj4g
eworcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBDU1NG
aWx0ZXIsCisgICAgICAgIFNWR0ZpbHRlciwKKworICAgICAgICBGRU1pbmltdW0sCisKKyAgICAg
ICAgRkVCbGVuZCA9IEZFTWluaW11bSwKKyAgICAgICAgRkVDb2xvck1hdHJpeCwKKyAgICAgICAg
RkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgRkVDb21wb3NpdGUsCisgICAgICAgIEZFQ29u
dm9sdmVNYXRyaXgsCisgICAgICAgIEZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBGRURpc3Bs
YWNlbWVudE1hcCwKKyAgICAgICAgRkVEcm9wU2hhZG93LAorICAgICAgICBGRUZsb29kLAorICAg
ICAgICBGRUdhdXNzaWFuQmx1ciwKKyAgICAgICAgRkVJbWFnZSwKKyAgICAgICAgRkVNZXJnZSwK
KyAgICAgICAgRkVNb3JwaG9sb2d5LAorICAgICAgICBGRU9mZnNldCwKKyAgICAgICAgRkVTcGVj
dWxhckxpZ2h0aW5nLAorICAgICAgICBGRVRpbGUsCisgICAgICAgIEZFVHVyYnVsZW5jZSwKKyAg
ICAgICAgU291cmNlQWxwaGEsCisgICAgICAgIFNvdXJjZUdyYXBoaWMsCisKKyAgICAgICAgRkVN
YXhpbXVtID0gU291cmNlR3JhcGhpYworICAgIH07CisKKyAgICBGaWx0ZXJGdW5jdGlvbihUeXBl
KTsKKyAgICB2aXJ0dWFsIH5GaWx0ZXJGdW5jdGlvbigpID0gZGVmYXVsdDsKKworICAgIFR5cGUg
ZmlsdGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZTsgfQorCisgICAgYm9vbCBp
c0NTU0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpDU1NGaWx0
ZXI7IH0KKyAgICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBl
ID09IFR5cGU6OlNWR0ZpbHRlcjsgfQorICAgIGJvb2wgaXNGaWx0ZXIoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlclR5cGUgPT0gVHlwZTo6Q1NTRmlsdGVyIHx8IG1fZmlsdGVyVHlwZSA9PSBUeXBl
OjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmlsdGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9maWx0ZXJUeXBlID49IFR5cGU6OkZFTWluaW11bSAmJiBtX2ZpbHRlclR5cGUgPD0gVHlwZTo6
RkVNYXhpbXVtOyB9CisKKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVyTmFtZShU
eXBlKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgc291cmNlQWxwaGFOYW1lKCkgeyBy
ZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VBbHBoYSk7IH0KKyAgICBzdGF0aWMgY29uc3Qg
QXRvbVN0cmluZyYgc291cmNlR3JhcGhpY05hbWUoKSB7IHJldHVybiBmaWx0ZXJOYW1lKFR5cGU6
OlNvdXJjZUdyYXBoaWMpOyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIGZpbHRlck5hbWUobV9maWx0ZXJUeXBlKTsgfQorCisgICAgdmlydHVhbCBJ
bnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIGJv
b2wgYXBwbHkoY29uc3QgRmlsdGVyJikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJGaWx0ZXJJbWFnZSgpIHsgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9maWx0ZXJU
eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpT
VkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxl
bmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFu
c2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRl
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJp
eCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0
aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1l
bnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFk
b3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3Vy
Y2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hYzcwYTQ4ZTEwZTY0MTNhZWY2OWE1MDZjYTExYjk0NTRhNjVhOTEzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBIQVZFKEFS
TV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYg
VVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlcklt
YWdlOjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZs
b2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9v
bCBpc0FscGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQoreworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlSW1hZ2VSZWN0LnNpemUoKSkpOworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRmlsdGVySW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3Qs
IGFic29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIHJlbmRlcmluZ01vZGUsIGNvbG9yU3Bh
Y2UpKTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVj
dCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKKyAg
ICA6IG1fcHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikKKyAgICAsIG1faW1h
Z2VSZWN0KGltYWdlUmVjdCkKKyAgICAsIG1fYWJzb2x1dGVJbWFnZVJlY3QoYWJzb2x1dGVJbWFn
ZVJlY3QpCisgICAgLCBtX2lzQWxwaGFJbWFnZShpc0FscGhhSW1hZ2UpCisgICAgLCBtX3JlbmRl
cmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
eworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBp
ZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisK
KyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlSW1hZ2VS
ZWN0LnNpemUoKSwgbV9yZW5kZXJpbmdNb2RlLCAxLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0
OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIEludFJlY3QgcmVjdCB7IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkg
fTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigq
cGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQ
aXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpLCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgp
OworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qg
cm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNy
YzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNy
Yy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwor
ICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMg
PSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0
aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0g
c291cmNlQ29tcG9uZW50ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlucHV0U2l6ZS5hcmVhKCkg
KiA0KTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRh
dGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50
IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1
OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291
cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8g
MjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBz
b3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsK
KyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBo
YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFU
RSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2
SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAg
ICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJv
d0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRh
dGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0
U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAg
IGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBs
eURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAg
Y29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25z
dCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aW5wdXRTaXplLmFyZWEoKSAqIDQpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50
ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQp
IHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAo
YWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nh
c3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50
WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0g
PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3Rz
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhh
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5w
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30K
KworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZm
ZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisgICAgaWYgKHBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3Jt
YXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2NvbG9yU3BhY2UgfTsKKwor
ICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAg
ICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyB7
IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH0pOworICAgICAgICBpZiAoIXBpeGVsQnVm
ZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxC
dWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZShtX2Fi
c29sdXRlSW1hZ2VSZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcobG9naWNhbFNpemUpKTsKKworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZm
ZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGxvZ2ljYWxTaXplKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChhbHBoYUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgaWYgKGF1dG8m
IHNvdXJjZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEoc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgbG9n
aWNhbFNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhdXRvJiBzb3VyY2VQaXhlbEJ1
ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSkKKyAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHNvdXJjZVBp
eGVsQnVmZmVyLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIGxvZ2ljYWxTaXplKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gRmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUgc2l6ZShy
ZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
c2l6ZSkpOworCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxv
dz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQaXhlbEJ1ZmZl
cigqcGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICByZXR1
cm4gcGl4ZWxCdWZmZXI7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxCdWZm
ZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFj
ZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5jdGlv
biBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBz
cGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNp
b24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAgLy8g
QU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1cm4g
Y29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8v
IEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1D
RworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFNpemUgbG9naWNhbFNpemUobV9hYnNvbHV0
ZUltYWdlUmVjdC5zaXplKCkpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24g
dG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3Vy
Y2UuCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhYKCkg
PiBsb2dpY2FsU2l6ZS53aWR0aCgpIHx8IHJlY3QubWF4WSgpID4gbG9naWNhbFNpemUuaGVpZ2h0
KCkpCisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxl
bmd0aCgpKTsKKworICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRl
cnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAgIGlmIChyZWN0Lm1heFgoKSA8PSAwIHx8IHJlY3Qu
bWF4WSgpIDw9IDAgfHwgcmVjdC54KCkgPj0gbG9naWNhbFNpemUud2lkdGgoKSB8fCByZWN0Lnko
KSA+PSBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHhP
cmlnaW4gPSByZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAgIGlmICh4T3JpZ2luIDwg
MCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4T3JpZ2luID0gMDsKKyAg
ICB9CisgICAgaW50IHhFbmQgPSByZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+IGxvZ2ljYWxT
aXplLndpZHRoKCkpCisgICAgICAgIHhFbmQgPSBsb2dpY2FsU2l6ZS53aWR0aCgpOworCisgICAg
aW50IHlPcmlnaW4gPSByZWN0LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAgIGlmICh5T3Jp
Z2luIDwgMCkgeworICAgICAgICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5T3JpZ2luID0g
MDsKKyAgICB9CisgICAgaW50IHlFbmQgPSByZWN0Lm1heFkoKTsKKyAgICBpZiAoeUVuZCA+IGxv
Z2ljYWxTaXplLmhlaWdodCgpKQorICAgICAgICB5RW5kID0gbG9naWNhbFNpemUuaGVpZ2h0KCk7
CisKKyAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OworICAgIGludCBkZXN0aW5h
dGlvblNjYW5saW5lID0gcmVjdC53aWR0aCgpICogNDsKKyAgICBpbnQgc291cmNlU2NhbmxpbmUg
PSBsb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVs
ID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHJlY3Qud2lkdGgoKSkgKyB4RGVzdCkg
KiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgo
eU9yaWdpbiAqIGxvZ2ljYWxTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OworCisgICAgd2hp
bGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBz
b3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRp
b25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7CisgICAg
ICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZp
bHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEZsb2F0
U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7
CisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3Bh
Y2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICBh
dXRvIGNvbnZlcnRlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6
ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNvbnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBp
bnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgor
ICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGltYWdl
QnVmZmVyLCByZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1h
dCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0dXJuIGNvbnZlcnRl
ZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOworfQorCitzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIo
UGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9y
bWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKKyAgICBGbG9hdFNpemUg
Y2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworCisg
ICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVy
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUs
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBy
ZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBh
bHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNv
cHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIGF1dG8qIHBp
eGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZm
ZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFsdWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNv
bnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZl
cnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VC
dWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0
IHJlY3QgeyB7IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH07CisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAg
ICAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCks
IGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVm
ZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJz
aW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVy
ID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNv
bG9yU3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZm
ZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24s
IHNyY1JlY3QpOworfQorCit2b2lkIEZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlwbGllZFBp
eGVsQnVmZmVyKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVz
dWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KKyAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBVaW50
OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5k
YXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7CisgICAg
aW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOworCisgICAgLy8gV2Ug
bXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCisgICAg
QVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKKworI2lmIEhBVkUoQVJNX05FT05fSU5U
UklOU0lDUykKKyAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgeworICAgICAgICB1aW50
OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsK
KyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQu
CisgICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVs
RGF0YSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRl
ZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0
ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVu
UGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5x
X3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAg
ICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOworICAgICAgICAgICAgcGl4
ZWxEYXRhICs9IDY0OworICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwor
CisgICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKKyAgICAgICAgaWYgKCFwaXhlbEFy
cmF5TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaW50
IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OworCisgICAgLy8gSXRlcmF0ZSBvdmVy
IGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50
cyBpZiBuZWNlc3NhcnkKKyAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgeworICAgICAgICAv
LyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAorICAgICAgICB1aW50OF90IGEgPSAq
KHBpeGVsRGF0YSArIDMpOworICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBo
YSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKKyAgICAg
ICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKKyAgICAgICAgICAgICsrcGl4ZWxEYXRhOworICAg
ICAgICB9CisgICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKKyAgICAgICAgKytwaXhlbERh
dGE7CisgICAgfQorfQorCit2b2lkIEZpbHRlckltYWdlOjp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2Uo
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8v
IENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KKyAgICBVTlVT
RURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xvclNwYWNlID09IG1fY29s
b3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0
aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRk
aW5nCisgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVu
fW11bHRpcGxpZWQgYXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gdGhpcy0+aW1h
Z2VCdWZmZXIoKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShj
b2xvclNwYWNlKTsKKworICAgIG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91bnBy
ZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxp
ZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJhOGU3NmYwNDlmZjI0ZmE1Zjg0NTBi
YWE0NzY1ZTYwMDI4M2E4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApAQCAtMCwwICsxLDg1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJJbWFn
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckltYWdlPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1
dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb24o
KSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIEZsb2F0UmVjdCBp
bWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlUmVjdDsgfQorICAgIEludFJlY3QgYWJz
b2x1dGVJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlSW1hZ2VSZWN0OyB9Cisg
ICAgSW50UmVjdCByZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlJiBv
cmlnaW4pIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVJbWFnZVJlY3QgLSBvcmlnaW4uYWJzb2x1
dGVJbWFnZVJlY3QoKS5sb2NhdGlvbigpOyB9CisKKyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNBbHBoYUltYWdlOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisgICAgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNw
YWNlOyB9CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkg
eyByZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigp
OworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBn
ZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2
b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhh
UHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0
aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFBy
ZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNl
KERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmlsdGVySW1hZ2UoY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2Us
IFJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgYm9v
bCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+KSBjb25zdDsKKyAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7Cisg
ICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4
ZWxCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Up
IGNvbnN0OworCisgICAgRmxvYXRSZWN0IG1fcHJpbWl0aXZlU3VicmVnaW9uOworICAgIEZsb2F0
UmVjdCBtX2ltYWdlUmVjdDsKKyAgICBJbnRSZWN0IG1fYWJzb2x1dGVJbWFnZVJlY3Q7CisgICAg
CisgICAgYm9vbCBtX2lzQWxwaGFJbWFnZSB7IGZhbHNlIH07CisgICAgUmVuZGVyaW5nTW9kZSBt
X3JlbmRlcmluZ01vZGU7CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29sb3JTcGFjZTsK
KworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworICAgIHN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCmluZGV4IDk0ZDE5NTAxMzlkNmQyNDNh
ODY2MWU1ZWE1NWQyMzVhNzM4OWY1ZDUuLmYxOTE3MWZmODRlOTA0OTI3MjYyZWFkMTFhYzQxZTA4
M2M1OGVmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvTGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKQEAgLTM4LDYgKzM4LDcgQEAgZW51bSBMaWdodFR5cGUg
ewogICAgIExTX1NQT1QKIH07CiAKK2NsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsK
IAogY2xhc3MgTGlnaHRTb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMaWdodFNvdXJjZT4gewpA
QCAtNjUsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgTGlnaHRUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgPSAwOwogICAgIC8vIHogaXMgYSBmbG9h
dCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCiAg
ICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2NhbGUiIGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxu
dW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQuCiAgICAgLy8geCBhbmQgeSBhcmUgaW4gdGhlIGNv
b3JkaW5hdGVzIG9mIHRoZSBGaWx0ZXJFZmZlY3QncyBidWZmZXIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1MDM4NzkxMjhmNTRiNDRiLi5l
OWIzZTUzMWNiNTk0ZTU1YThiOWVmMDUzM2U0MzRmNzU5NTUyYjg3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdo
dFNvdXJjZS5jcHAKQEAgLTM2LDExICszNiwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZl
Y3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0
JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5z
ZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3Bh
Y2VQb3NpdGlvbi54eSgpKSk7CisgICAgYXV0byYgaW1hZ2UgPSAqZmlsdGVyRWZmZWN0LmZpbHRl
ckltYWdlKCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbWFnZS5pbWFnZVJlY3QoKTsKKyAgICBh
dXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGltYWdlLnByaW1pdGl2ZVN1YnJlZ2lvbigpOworCisg
ICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXIubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9C
dWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpLCBpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJl
Z2lvbikpOwogICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNl
clNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBt
YXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91
c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3Bh
Y2VQb3NpdGlvbi55KCkgfSk7CisgICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyLm1hcFBv
aW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSwgaW1hZ2VSZWN0
LCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRa
LngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaApp
bmRleCA2N2EzYTBiZDM5YThhOWNjMTk1NDM0OTg1OTZkNzExNWY0YmI5NWE1Li5hZGViZjk2YWEz
MTI3ZWU0NWVmYTg3MDkzZDMyZGVkYzFiYWM3YTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaApA
QCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRZKGZsb2F0KSBvdmVycmlkZTsK
ICAgICBib29sIHNldFooZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZv
aWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmLCBQ
YWludGluZ0RhdGEmKSBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRl
UGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9h
dCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAK
aW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBhZDZjZjNhMy4uNmViNjE4Yzcz
YWM5ZjJhMzI5M2RhYjQ2MmE4OTM2OWQ0MzUxMzgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTIz
LDEwICsyMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTM1LDMyICszMiwzNyBAQCBSZWY8U291cmNlQWxwaGE+IFNvdXJjZUFs
cGhhOjpjcmVhdGUoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCiAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CiB9CiAKLWNvbnN0IEF0b21TdHJp
bmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKK1NvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShG
aWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUFscGhhKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VBbHBoYSIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gc19lZmZlY3ROYW1lOwor
ICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7CisgICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwogfQogCi12
b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3Qg
U291cmNlQWxwaGE6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9h
dFJlY3QmKSBjb25zdAogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+Zmls
dGVySW1hZ2UoKTsKKyAgICByZXR1cm4gaW5wdXQuaW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQgU291
cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIFNvdXJjZUFscGhhOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1h
Z2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQg
PSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0
KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwog
Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW5wdXRFZmZlY3QoMCktPmltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZs
b2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIGZpbHRlckNvbnRl
eHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOwotICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0
b3I6OkRlc3RpbmF0aW9uSW4pOworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VC
dWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0LmFic29sdXRlSW1h
Z2VSZWN0KCkuc2l6ZSgpKTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3Qo
aW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJh
d0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6
RGVzdGluYXRpb25Jbik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIFNvdXJj
ZUFscGhhOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0CkBAIC02OSwxMSArNzEsNCBAQCBUZXh0U3RyZWFtJiBTb3VyY2VBbHBo
YTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eQogICAgIHJldHVybiB0czsKIH0KIAotU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVm
ZmVjdCYgc291cmNlRWZmZWN0KQotICAgIDogRmlsdGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0
ZXIoKSwgVHlwZTo6U291cmNlQWxwaGEpCi17Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShz
b3VyY2VFZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpbnB1dEVmZmVjdHMoKS5h
cHBlbmQoJnNvdXJjZUVmZmVjdCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxw
aGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxw
aGEuaAppbmRleCA2NjI5YTM2N2ZkNDMyNDJkMWM0YWFkZTY0YzU2MWU4NjRhMzk0OTBmLi45NGZh
NTZmNTJiODQ2ZTYzYWFkMjllYTRkNmY1MTk4ZmJkMDAxODYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0x
Nyw4ICsxNyw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZu
ZGVmIFNvdXJjZUFscGhhX2gKLSNkZWZpbmUgU291cmNlQWxwaGFfaAorI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIApAQCAtMjgsMTkgKzI3LDE2IEBAIGNsYXNzIFNv
dXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKICAgICBz
dGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CiAKLSAgICBzdGF0
aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9t
U3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5h
bWUoKTsgfQogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVj
dCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQogCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0K
LQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOwogfTsKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBTb3Vy
Y2VBbHBoYV9oCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoU291cmNlQWxw
aGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCA4OGEzNmE0MTAyNmJkM2E1ODU0NDc4MjAyNzRj
MTEwN2Q3ODM5MmU5Li40NTJlNjQ3NGZkY2VlYTkzMWRiYjk4ZmZiNWJiMDZhOWRkODNkY2NhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTIyLDQyICsyMiwzOSBAQAogCiAjaW5jbHVkZSAiRmls
dGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhpYzo6
Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6
OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYyhmaWx0
ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKCkpOwogfQogCi1j
b25zdCBBdG9tU3RyaW5nJiBTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkKK1NvdXJjZUdyYXBo
aWM6OlNvdXJjZUdyYXBoaWMoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OlNvdXJjZUdyYXBo
aWMpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3Ry
aW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUdyYXBoaWMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VH
cmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgU291cmNlR3Jh
cGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9h
dFJlY3QmKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0g
ICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBw
YWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIu
ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJldHVybiBmaWx0ZXIuc291cmNlSW1h
Z2VSZWN0KCk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK2Jvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAg
YXV0byogb3V0cHV0ID0gZmlsdGVySW1hZ2UoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAh
c291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzb3VyY2VJbWFnZSA9IGZp
bHRlci5zb3VyY2VJbWFnZSgpOworICAgIGlmICghc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpz
b3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgYXV0byogb3V0cHV0SW1hZ2UgPSBvdXRwdXQt
PmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpz
b3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJl
YW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMzBjZDU0ZjI0
NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2ZjYTViZi4uYjFjMTNiMWM5OGYyNzgyYzUzYmQ3ZjVh
M2U4OWI1MzdjOTYwN2M5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTE4LDQxICsxOCwyNiBAQAog
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VHcmFw
aGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRlciYp
OworICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKLSAgICBzdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3Ry
aW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VHcmFwaGljTmFt
ZSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhpYyhGaWx0ZXImIGZpbHRlcikKLSAg
ICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpTb3VyY2VHcmFwaGljKQotICAgIHsK
LSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdyYXBoaWMoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7IH0KLQotICAg
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0OyB9CiB9OwogCiB9IC8v
bmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpG
aWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlw
ZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYzsgfQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi0KLSNlbmRpZiAvLyBTb3VyY2VHcmFwaGljX2gK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChTb3VyY2VHcmFwaGljKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGln
aHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuY3BwCmluZGV4IDcxNjA3YWIwMGZmOWQ2YTZkMDE2OTFkOWJiYjg1NTNk
MWYzNDhkMDAuLjY1N2IxOGQ2ODhlY2NiMTUyYmQwMjBhYTY2YTU5NzI0NTdhMDhkN2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0
U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1Nwb3RMaWdodFNvdXJjZS5jcHAKQEAgLTQxLDExICs0MSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAvLyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0
cwogc3RhdGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOwogCi12b2lk
IFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZp
bHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIFNwb3RMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
RWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewotICAg
IG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFj
ZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOworICAgIGF1dG8mIGltYWdlID0g
KmZpbHRlckVmZmVjdC5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW1hZ2Uu
aW1hZ2VSZWN0KCk7CisgICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBpbWFnZS5wcmltaXRp
dmVTdWJyZWdpb24oKTsKKyAgICAKKyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlci5t
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCksIGlt
YWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEg
cG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24g
Ynkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9t
VXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNl
UG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKKyAgICBGbG9hdFBvaW50
IG1hcHBlZFogPSBmaWx0ZXIubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJT
cGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBv
c2l0aW9uLnkoKSB9LCBpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiAgICAgbV9idWZm
ZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwogICAg
IAogICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3IgPSBtX3VzZXJTcGFjZVBvaW50c0F0
IC0gbV91c2VyU3BhY2VQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmluZGV4IDM1MTUxNjM1
MDc3ZWVmMGU3M2MyNmFlNDQyYTVlYTUzNGZkMWYzYmYuLmZlM2YyZjNmYzliNTg4YWJmNDI4YmU5
ZGU2ZjM2NzkxMzZiOTNiZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaApAQCAtNTAsNyArNTAsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBvdmVycmlkZTsK
ICAgICBib29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZv
aWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdo
dGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcApp
bmRleCA5YWVhNWYxYzA3MmMwOWJmMDYzZjQ5OTllMDNiMjE5ZTg1ZDdlMmQ5Li5kNjdiMjliNTFj
NzkxZTUyMTVlYjk4OTc1ZmQ5Y2ViNmFjNGZjMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29j
b2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VDb2NvYS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Gb3JtYXQuaCIKKyNpbmNsdWRl
ICJMaWJXZWJSVENBdWRpb01vZHVsZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
IDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4
IDlkNmMyY2RkMDVmOTQ5YjYzNGNhZmExN2FjMTdkYjVjMDJiNWI2MTEuLjUwMjk3MGJiMGJmY2Zi
OWZlZTkyNmQxNjBjMDE0MTY4M2ExYzU2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NG
aWx0ZXIuY3BwCkBAIC0yNyw5ICsyNyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiRWxlbWVudEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50
VHJhbnNmZXIuaCIKICNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIKQEAgLTM4LDQ1ICszNSwxODUg
QEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRF
eHRlbnNpb25zLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVy
QnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJTb3VyY2VBbHBo
YS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRl
IDxkMmQxLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8Q1NTRmlsdGVy
PiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitSZWZQdHI8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0
aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBzY2FsZUZhY3RvciwgQ2xp
cE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENT
U0ZpbHRlcik7CisgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25z
Lmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3Vs
ZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICBhdXRvIGZpbHRlciA9
IGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgaGFzRmls
dGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIHNjYWxlRmFjdG9yLCBj
bGlwT3BlcmF0aW9uKSk7CisKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRGaWx0ZXJGdW5jdGlvbnMo
cmVuZGVyZXIsIG9wZXJhdGlvbnMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGZp
bHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1cm4gZmlsdGVy
OwogfQogCi1DU1NGaWx0ZXI6OkNTU0ZpbHRlcigpCi0gICAgOiBGaWx0ZXIoRmxvYXRTaXplIHsg
MSwgMSB9KQotICAgICwgbV9zb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgqdGhp
cykpCitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywg
Ym9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxv
YXQgc2NhbGVGYWN0b3IsIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKKyAgICA6IEZpbHRl
cihGaWx0ZXI6OlR5cGU6OkNTU0ZpbHRlciwgRmxvYXRTaXplIHsgc2NhbGVGYWN0b3IsIHNjYWxl
RmFjdG9yIH0sIGNsaXBPcGVyYXRpb24pCisgICAgLCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cyhoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMpCisgICAgLCBtX2hhc0ZpbHRlclRoYXRTaG91bGRC
ZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0
ZWRCeVNlY3VyaXR5T3JpZ2luKQogewogfQogCi1DU1NGaWx0ZXI6On5DU1NGaWx0ZXIoKSA9IGRl
ZmF1bHQ7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVmZmVjdChjb25z
dCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uLCBGaWx0ZXI6OkNsaXBPcGVyYXRp
b24gY2xpcE9wZXJhdGlvbikKK3sKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBG
RUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjbGlwT3Bl
cmF0aW9uID09IEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUgPyBFREdFTU9ERV9OT05FIDog
RURHRU1PREVfRFVQTElDQVRFKTsKK30KIAotR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6Omlu
cHV0Q29udGV4dCgpCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQnJpZ2h0bmVz
c0VmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZz
b3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBG
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xv
cGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFt
b3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBjcmVhdGVDb250cmFzdEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5j
dGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRy
YW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKKworICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBv
bmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
dHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbikKK3sKKyAgICBmbG9hdCBzdGQgPSBkcm9wU2hh
ZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpOworICAgIHJldHVybiBGRURyb3BTaGFkb3c6OmNy
ZWF0ZShzdGQsIHN0ZCwgZHJvcFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRp
b24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEpOworfQorCitzdGF0aWMgUmVm
UHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJs
ZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3Vu
dCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRG
L3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAg
IC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBp
bnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAr
IDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAw
LAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0g
MC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAs
CisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAw
LjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwK
KyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAg
ICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7
Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3Qo
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRp
b24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUludmVydEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3Jl
YXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24s
IG51bGxGdW5jdGlvbik7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVp
bGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYg
cHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9u
KQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZU9wYWNpdHlFZmZlY3QoY29uc3Qg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24pCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVyLmVuc3VyZVJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJlci5k
b2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRl
cmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247
CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVuY3Rpb24sIG51
bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKK30KKworc3RhdGlj
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZl
Y3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6
Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRl
cnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNlcGlhRWZmZWN0
KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0
aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9k
dmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFF
cXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisKKyAgICBW
ZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAg
MCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0g
MC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAg
ICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEs
CisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUo
RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30K
Kworc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihDU1NGaWx0ZXImIGZp
bHRlciwgY29uc3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KQorewor
ICAgIGF1dG8mIHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVu
Y2VkU1ZHUmVzb3VyY2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRT
VkdSZXNvdXJjZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwg
ZmlsdGVyT3BlcmF0aW9uKTsKKwogICAgIGlmICghZmlsdGVyRWxlbWVudCkgewotICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8PCB0aGlzIDw8
ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRlciByZW5kZXJlciwg
YWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSk7
CisgICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIiBidWlsZFJlZmVy
ZW5jZUZpbHRlcjogZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGlu
ZyByZXNvdXJjZSAiIDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKICAgICAgICAgLy8g
QWx0aG91Z2ggd2UgZGlkIG5vdCBmaW5kIHRoZSByZWZlcmVuY2VkIGZpbHRlciwgaXQgbWlnaHQg
ZXhpc3QgbGF0ZXIgaW4gdGhlIGRvY3VtZW50LgogICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lw
cyBhbm9ueW1vdXMgUmVuZGVyT2JqZWN0cy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTA4NT4K
ICAgICAgICAgLy8gRklYTUU6IFVuY2xlYXIgaWYgdGhpcyBkb2VzIGFueXRoaW5nLgpAQCAtODUs
MjMxICsyMjIsMTA5IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZl
cmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVy
QnVpbGRlcj4oJnByZXZpb3VzRWZmZWN0KTsKLSAgICBtX3NvdXJjZUFscGhhID0gYnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpKTsKLQotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IHJlZmVy
ZW5jZUVmZmVjdHM7Ci0KLSAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGlsZHJlbk9m
VHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCpmaWx0ZXJFbGVtZW50
KSkgewotICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0KCks
ICp0aGlzKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIExPR19XSVRIX1NU
UkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJl
ZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGJ1aWxkIGVmZmVjdCBmcm9tICIgPDwgZWZmZWN0RWxl
bWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAg
IGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAg
ICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJ
T05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxl
KCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGlu
ZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVy
YXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgot
ICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBl
ZmZlY3QpOwotICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICB9
Ci0gICAgCi0gICAgbV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKHJlZmVyZW5jZUVmZmVj
dHMpKTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRlcjsK
KyAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZp
bHRlci5maWx0ZXJTY2FsZSgpLCBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCksIGZpbHRlci5maWx0
ZXJSZWdpb24oKSwgZmlsdGVyLmNsaXBPcGVyYXRpb24oKSwgcHJldmlvdXNFZmZlY3QpOwogfQog
Ci1ib29sIENTU0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQorYm9v
bCBDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zKQogewotICAgIG1faGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsK
LSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0g
b3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
bigpOwotCi0gICAgbV9lZmZlY3RzLmNsZWFyKCk7CisgICAgbV9mdW5jdGlvbnMuY2xlYXIoKTsK
ICAgICBtX291dHNldHMgPSB7IH07CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBwcmV2aW91
c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBwcmV2aW91c0VmZmVjdCA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAgIG1fZnVuY3Rp
b25zLmFwcGVuZCh7ICpwcmV2aW91c0VmZmVjdCB9KTsKKworICAgIFJlZlB0cjxTVkdGaWx0ZXI+
IGZpbHRlcjsKKwogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkpIHsKICAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgICAgICBh
dXRvJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uOwotICAgICAgICBzd2l0Y2ggKGZpbHRl
ck9wZXJhdGlvbi50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVS
RU5DRTogewotICAgICAgICAgICAgYXV0byYgcmVmZXJlbmNlT3BlcmF0aW9uID0gZG93bmNhc3Q8
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAg
ZWZmZWN0ID0gYnVpbGRSZWZlcmVuY2VGaWx0ZXIocmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCwg
cmVmZXJlbmNlT3BlcmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9u
LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9M
SUdIVE5FU1M6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5W
RVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpH
UkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBo
dHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRt
bCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24g
cGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMg
ewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAg
MCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhp
cywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6Cisg
ICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0PEJsdXJGaWx0ZXJP
cGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0aW9uKCkpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBk
b3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLncz
Lm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFs
ZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAg
ICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwK
LSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNB
bW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVz
QW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0g
MC41MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJyaWdodG5l
c3NFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1h
dHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1l
dGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50
KCkpIH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMs
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsK
KworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBl
ZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAg
ICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVj
dG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9y
TWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xv
ck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZN
b3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BT
aGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3Vu
dCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1v
dW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0K
LSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAg
ICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVu
Y3Rpb24pOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZ
U0NBTEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQ
UExFX0lOVkVSVF9MSUdIVE5FU1M6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZp
bHRlci4KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChkb3duY2Fz
dDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAg
ICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0
aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9u
LCB0cmFuc2ZlckZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRvd25jYXN0PEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpC
UklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5z
ZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5z
bG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24u
YW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwot
Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAg
ICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJh
bnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BB
Q0lUWToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3QoZG93bmNhc3Q8
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5z
ZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgq
dGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRF
OgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2F0dXJhdGVFZmZlY3QoZG93bmNhc3Q8QmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsK
LSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9u
ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERl
dmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVy
UHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBl
ZmZlY3QgPSBjcmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAg
IGF1dG8mIGRyb3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hh
ZG93OjpjcmVhdGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRy
b3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNo
YWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3Bl
cmF0aW9uLmNvbG9yKCksIDEpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmls
dGVyKCp0aGlzLCBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
LCByZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0KTsKKyAgICAgICAgICAgIGVmZmVjdCA9IG51bGxw
dHI7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVmZmVjdCgpOworICAgICAgICAgICAgZWZm
ZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKKyAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoZWZmZWN0
KSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdl
cywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAgICAgICAgICAvLyBwcm9wZXJ0
eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdp
b25zLgotICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZp
bHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7CiAgICAgICAgICAgICBlZmZlY3QtPnNldE9w
ZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSAhPSBGaWx0ZXJP
cGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZl
Y3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07Ci0gICAgICAgICAgICAgICAgbV9l
ZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07CisgICAgICAg
ICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogICAgICAgICAgICAgcHJldmlv
dXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBJ
ZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBub3Qg
dmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnVuY3Rpb25z
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9lZmZlY3RzLnNocmlu
a1RvRml0KCk7CisgICAgbV9mdW5jdGlvbnMuc2hyaW5rVG9GaXQoKTsKIAotICAgIHNldE1heEVm
ZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENPUkVfSU1BR0UpCi0g
ICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmls
dGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFn
ZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFzdCgpLmdldCgp
KTsKLSNlbmRpZgorICAgIC8vIFRoaXMgd2lsbCBzZXQgdGhlIGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbiBhbmQgbWF4RWZmZWN0UmVjdCBmb3IgdGhlIEZpbHRlckVmZmVjdCBjaGFpbi4KKyAgICBk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCgpCit7CisgICAgcmV0
dXJuIHNvdXJjZUltYWdlKCkgPyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0cjsK
K30KKwogYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWN0KQogewogICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHkoKSB8fCBJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQpAQCAtMzMxLDUz
ICszNDYsNzIgQEAgdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXgKICAgICBpZiAobV9ncmFwaGljc0J1
ZmZlckF0dGFjaGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGxvZ2ljYWxTaXplID0g
bV9zb3VyY2VEcmF3aW5nUmVnaW9uLnNpemUoKTsKKyAgICBhdXRvIGxvZ2ljYWxTaXplID0gc291
cmNlSW1hZ2VSZWN0KCkuc2l6ZSgpICogZmlsdGVyU2NhbGUoKTsKKwogICAgIGlmICghc291cmNl
SW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXplKSB7
CiAjaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCBmaWx0
ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4KSk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNh
bFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIDEsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKICNlbHNlCiAgICAgICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgUmVuZGVyaW5nTW9kZSBtb2RlID0g
bV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogcmVuZGVyaW5n
TW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2lj
YWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVm
ZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIG1vZGUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKICNlbmRpZgorICAgICAgICBpZiAoYXV0byBj
b250ZXh0ID0gaW5wdXRDb250ZXh0KCkpCisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0
ZXJTY2FsZSgpKTsKICAgICB9CisKICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVl
OwogfQogCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6Omxhc3RFZmZlY3QoKQorewor
ICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byYgZnVuY3Rpb24gPSBtX2Z1bmN0aW9ucy5sYXN0KCk7CisgICAgaWYgKGZ1bmN0
aW9uLT5pc1NWR0ZpbHRlcigpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHRmlsdGVyPihm
dW5jdGlvbi5wdHIoKSktPmxhc3RFZmZlY3QoKTsKKworICAgIHJldHVybiBkb3duY2FzdDxGaWx0
ZXJFZmZlY3Q+KGZ1bmN0aW9uLnB0cigpKTsKK30KKwogdm9pZCBDU1NGaWx0ZXI6OmRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCiB7Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1f
ZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC5t
YXhFZmZlY3RSZWN0KCk7CisgICAgYXV0byBsYXN0RWZmZWN0ID0gdGhpcy0+bGFzdEVmZmVjdCgp
OworICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5jYWxjdWxhdGVNYXhQcmlt
aXRpdmVTdWJyZWdpb24oKnRoaXMpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVj
dCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMg
d2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgaWYgKElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsK
LSAgICAgICAgc2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxhc3RFZmZlY3Qu
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAgIEZsb2F0U2l6
ZSBmaWx0ZXJTY2FsZSB7IDEsIDEgfTsKKyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKSkKKyAgICAgICAgc2V0RmlsdGVy
U2NhbGUoZmlsdGVyU2NhbGUpOwogfQogCiB2b2lkIENTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlh
dGVSZXN1bHRzKCkKIHsKLSAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVzdWx0KCk7Ci0gICAg
aWYgKG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291cmNlQWxwaGEtPmNsZWFyUmVzdWx0KCk7
Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVjdC0+Y2xl
YXJSZXN1bHQoKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAg
ICAgIGZ1bmN0aW9uLT5jbGVhckZpbHRlckltYWdlKCk7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjph
cHBseSgpCitib29sIENTU0ZpbHRlcjo6YXBwbHlGaWx0ZXIoKQogewotICAgIGF1dG8mIGVmZmVj
dCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIpIHsK
LSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVjdCk7Ci0gICAgICAg
IGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZWZmZWN0
LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OwotICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVmZmVjdCgpOwor
CisgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIpCisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFw
cGx5RWZmZWN0cygqdGhpcywgKmVmZmVjdCk7CisKKyAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIg
fHwgIW1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgIGZvciAoYXV0byYg
ZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAgICAgICAgaWYgKCFmdW5jdGlvbi0+YXBw
bHkoKnRoaXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
IH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisKKyAgICBpZiAoYXV0byBpbWFn
ZSA9IGVmZmVjdC0+ZmlsdGVySW1hZ2UoKSkgeworICAgICAgICBpbWFnZS0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBMYXlvdXRSZWN0IENTU0Zp
bHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0
JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0zOTAsMzUg
KzQyNCwzNCBAQCBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZv
ckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZQogICAgIHJldHVybiByZWN0Rm9yUmVw
YWludDsKIH0KIAotSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkgY29uc3QKK0ltYWdl
QnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpCiB7CiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIg
JiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBtX2ZpbHRl
clJlbmRlcmVyLT5vdXRwdXQoKTsKICAgICAKLSAgICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoYXV0byBpbWFnZSA9IGxhc3RFZmZlY3QoKS0+
ZmlsdGVySW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIGltYWdlLT5pbWFnZUJ1ZmZlcigpOworICAg
IAorICAgIHJldHVybiBudWxscHRyOwogfQogCiB2b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1h
Z2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQogewotICAgIG1fc291cmNl
RHJhd2luZ1JlZ2lvbiA9IHNvdXJjZUltYWdlUmVjdDsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhz
b3VyY2VJbWFnZVJlY3QpOwotICAgIHNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwor
ICAgIEZpbHRlcjo6c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7CisgICAgRmlsdGVy
OjpzZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKKyAgICBmb3IgKGF1dG8mIGZ1
bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc1NWR0ZpbHRl
cigpKSB7CisgICAgICAgICAgICBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+
c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7CisgICAgICAgICAgICBkb3duY2FzdDxT
VkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+c2V0U291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdl
UmVjdCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0g
ZmFsc2U7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9h
dFJlY3QmIGVmZmVjdFJlY3QpCitJbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpCiB7Ci0g
ICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVjdC0+c2V0TWF4
RWZmZWN0UmVjdChlZmZlY3RSZWN0KTsKLX0KLQotSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJl
Y3QoKSBjb25zdAotewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdl
dCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJl
bmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAgICAgcmV0dXJu
IGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBt
X2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKKyAgICBpZiAoYXV0byBpbWFnZSA9IGxhc3RFZmZlY3Qo
KS0+ZmlsdGVySW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIGltYWdlLT5hYnNvbHV0ZUltYWdlUmVj
dCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTQzMCw4ICs0NjMsOSBAQCBJbnRPdXRzZXRz
IENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0CiAgICAgaWYgKCFtX291dHNldHMuaXNaZXJvKCkp
CiAgICAgICAgIHJldHVybiBtX291dHNldHM7CiAKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1f
ZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9IGVmZmVjdC0+b3V0c2V0cygpOworICAgIGZv
ciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgbV9vdXRzZXRzICs9IGZ1
bmN0aW9uLT5vdXRzZXRzKCk7CisKICAgICByZXR1cm4gbV9vdXRzZXRzOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggMDBiOTE5MTdiODA0YzkyZDk0MDhiNzU4ZTM3
NWMyNTJmMjlkYjBjNS4uZDQ1Y2Q3NWQ4YTQ2MzMwZWVhNTJjMjM0NDdjZDk5NjQyYjFlYjFmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtMzgsNjkgKzM4LDQ3IEBAIGNs
YXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBSZWZl
cmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgU291cmNl
QWxwaGE7CiBjbGFzcyBTb3VyY2VHcmFwaGljOwogCi1lbnVtIGNsYXNzIEZpbHRlckNvbnN1bWVy
IHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07Ci0KIGNsYXNzIENTU0ZpbHRlciBm
aW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTRmlsdGVyPiBjcmVh
dGUoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBSZW5kZXJpbmdNb2Rl
LCBmbG9hdCBzY2FsZUZhY3RvciA9IDEsIENsaXBPcGVyYXRpb24gPSBDbGlwT3BlcmF0aW9uOjpJ
bnRlcnNlY3QpOwogCiAgICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdp
b24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247IH0KLQotICAgIEltYWdlQnVmZmVy
KiBvdXRwdXQoKSBjb25zdDsKLQotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVy
bWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFwcGx5KCk7CiAKICAgICBib29sIGhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzOyB9CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0
eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW47IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCk7Ci0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Q7Ci0KLXByaXZhdGU6
Ci0gICAgQ1NTRmlsdGVyKCk7Ci0gICAgdmlydHVhbCB+Q1NTRmlsdGVyKCk7Ci0KLSAgICBib29s
IGlzQ1NTRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgRmxvYXRS
ZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlRHJhd2lu
Z1JlZ2lvbjsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNl
clNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLQotICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmLCBG
aWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mKTsK
KyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCk7CisgICAgR3JhcGhpY3NDb250
ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0Jik7Cisg
ICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKKyAgICBib29sIGFwcGx5RmlsdGVy
KCkgb3ZlcnJpZGU7CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAg
IEltYWdlQnVmZmVyKiBvdXRwdXQoKTsKKyAgICBJbnRSZWN0IG91dHB1dFJlY3QoKTsKIAogICAg
IGJvb2wgdXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3Qp
OwogICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0Nv
bnRleHQmKTsKIAotICAgIEludFJlY3Qgb3V0cHV0UmVjdCgpIGNvbnN0OwotCiAgICAgTGF5b3V0
UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3Qm
IGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CiAKLSAgICBGbG9h
dFJlY3QgbV9zb3VyY2VEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lv
bjsKLQotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbV9lZmZlY3RzOwotICAgIFJlZjxT
b3VyY2VHcmFwaGljPiBtX3NvdXJjZUdyYXBoaWM7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
bV9zb3VyY2VBbHBoYTsKK3ByaXZhdGU6CisgICAgQ1NTRmlsdGVyKGJvb2wgaGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luLCBmbG9hdCBzY2FsZUZhY3RvciwgQ2xpcE9wZXJhdGlvbik7CiAKLSAgICBtdXRh
YmxlIEludE91dHNldHMgbV9vdXRzZXRzOworICAgIGJvb2wgYnVpbGRGaWx0ZXJGdW5jdGlvbnMo
UmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICB2b2lkIGRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwogCiAgICAgYm9vbCBtX2dyYXBoaWNzQnVm
ZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVk
QnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCisKKyAgICBWZWN0b3I8UmVmPEZpbHRl
ckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisKKyAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRz
ZXRzOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRl
clJlbmRlcmVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
aW5kZXggMGMyNjY5NjI5OTE3NGJkNmZkODljNjJiMWEwMjI5NmZhODllNGJkOS4uZjdlNzNiMmY1
MDE0OGNkNjZjMmI2OWRlZjFiMTRhNTM5OTJmMDQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMjI2LDcgKzMyMjYsNyBAQCBHcmFwaGljc0NvbnRleHQq
IFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNv
bnRleHQsCiAKICAgICBhdXRvIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91
bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9mZnNldEZyb21Sb290LCB7IH0pOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZp
bHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qocm9vdFJlbGF0
aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qp
LCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFpbnRSZWN0KSk7CisgICAgR3JhcGhpY3NDb250
ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChk
ZXN0aW5hdGlvbkNvbnRleHQsIHJlbmRlcmVyKCksIGVuY2xvc2luZ0ludFJlY3Qocm9vdFJlbGF0
aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3Qp
LCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFpbnRSZWN0KSk7CiAgICAgaWYgKCFmaWx0ZXJD
b250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAppbmRleCAyNTBhN2Q1YzBiYWEwYWM3NDFh
OTBjODE4YjYxYTA1Zjk1Yjk2NGE0Li4xYzYzMzU0NjI4MTU1YWI5NmQ3MWJkYjI2ZDExY2NkYzRl
MjY5MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0
ZXJzLmNwcApAQCAtMTE4LDIzICsxMTgsMTMgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OnJl
bW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKQogCiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6
YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikgewotICAg
ICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fZmlsdGVyLT5z
ZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRSZW5kZXJp
bmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBpZiAobV9maWx0ZXItPmZpbHRlclNj
YWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9maWx0ZXItPnNldEZpbHRlclNjYWxl
KHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0
cygpOwotICAgIH0KLQogICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92
ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCiAgICAgLy8gZ28g
dGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIg
YXBwbHkgYW55dGhpbmcuCiAgICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBl
ZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAg
IGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigp
LCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2ZpbHRlciA9IG51
bGxwdHI7CisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgcmVuZGVy
ZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0b3IsIEZpbHRlcjo6
Q2xpcE9wZXJhdGlvbjo6VW5pdGUpOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVy
RmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNv
bnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNz
Q29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJl
Y3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5
b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1OSw4ICsxNDksNiBAQCBHcmFwaGljc0NvbnRleHQqIFJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdAogICAgIG1fcGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3VyY2VSZWN0LmxvY2F0aW9uKCk7CiAg
ICAgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAotICAgIGZpbHRlci5kZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKTsKLQogICAgIGZpbHRlci5hbGxvY2F0ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7CiAgICAgYXV0byogc291cmNlR3JhcGhpY3NDb250
ZXh0ID0gZmlsdGVyLmlucHV0Q29udGV4dCgpOwogICAgIGlmICghc291cmNlR3JhcGhpY3NDb250
ZXh0IHx8IGZpbHRlci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKGZpbHRlci5maWx0ZXJSZWdpb24oKS5zaXplKCkpKQpAQCAtMTg0LDE0
ICsxNzIsMTYgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KQogICAgIGF1dG8mIGZpbHRlciA9ICpt
X2ZpbHRlcjsKICAgICBmaWx0ZXIuaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKIAotICAgIGZp
bHRlci5hcHBseSgpOworICAgIGZpbHRlci5hcHBseUZpbHRlcigpOwogCiAgICAgLy8gR2V0IHRo
ZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4gcGxhY2UuCi0gICAgTGF5b3V0UmVjdCBk
ZXN0UmVjdCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7Ci0gICAgZGVzdFJlY3QubW92ZShtX3BhaW50
T2Zmc2V0LngoKSwgbV9wYWludE9mZnNldC55KCkpOworICAgIGF1dG8gZGVzdFJlY3QgPSBmaWx0
ZXIub3V0cHV0UmVjdCgpOwogCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5v
dXRwdXQoKSkKLSAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0
cHV0QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xheWVyLnJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgaWYgKGF1dG8qIG91
dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQoKSkgeworICAgICAgICBkZXN0aW5hdGlvbkNvbnRl
eHQuc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5m
aWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCpvdXRwdXRCdWZmZXIsIGRlc3RSZWN0KTsKKyAgICAgICAgZGVzdGluYXRp
b25Db250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAgICBmaWx0
ZXIuY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAppbmRleCAzZGExNDBhNWM4OGYxNTUzMTkwYjcwMDNk
N2U3ODQ0YzkxOTQ1YmY3Li4zYTc0OTk1ZjFmODRiZDk3M2VkMmI4OGQzMDQzOTdiNGM0NGRhMDM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCkBA
IC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAvLyBQZXIgcmVuZGVyCiAgICAgTGF5b3V0UmVj
dCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KIAotICAgIEdy
YXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5h
dGlvbkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91
dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRl
c3RpbmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
bGF5ZXJSZXBhaW50UmVjdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmlu
ZGV4IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjFlYzlkNjZkNWYz
NzhjNmNlNzViNDAwZGEyNTVlNzRmMDE0MDU5ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC04Miw0
MCArODIsNiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRGcm9t
Q2FjaGUoUmVuZGVyRWxlbWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZvckludmFs
aWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0
aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdG
aWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNW
R0ZpbHRlciYgZmlsdGVyKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhD
b3VudENoaWxkTm9kZXMgPSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3VudENoaWxk
Tm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdC
b3goKTsKLQotICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0byBidWls
ZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpjcmVhdGUo
ZmlsdGVyKSk7Ci0gICAgYnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudCgp
LnByaW1pdGl2ZVVuaXRzKCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5nQm94KHRh
cmdldEJvdW5kaW5nQm94KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJl
bk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1l
bnQoKSkpIHsKLSAgICAgICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0
KCksIGZpbHRlcik7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBidWlsZGVy
LT5jbGVhckVmZmVjdHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9
Ci0gICAgICAgIGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3Qu
Y29weVJlZigpLCBlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNldFN0YW5k
YXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVmZmVjdEJv
dW5kYXJpZXMoU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0
aXZlVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQucmVu
ZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JH
QikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVtZW50LnJl
bmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkg
PT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0g
ICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRk
KGVsZW1lbnQucmVzdWx0KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJldHVybiBi
dWlsZGVyOwotfQotCiBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNl
TW9kZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC0xMzcsNTIgKzEwMywzOCBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gRGV0ZXJtaW5lIGFic29sdXRl
IHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
YWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxhdGVUcmFuc2Zv
cm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7Ci0gICAgaWYgKCFh
YnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFnZXMgZm9yIGZl
VGlsZS4KLSAgICBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSA9IEFmZmlu
ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJzb2x1dGVUcmFu
c2Zvcm0ueVNjYWxlKCksIDAsIDApOwotCiAgICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIGJvdW5k
YXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgogICAgIGZpbHRlckRh
dGEtPmRyYXdpbmdSZWdpb24gPSByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOwogICAgIGZp
bHRlckRhdGEtPmRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJvdW5kYXJpZXMp
OwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24p
OwotCi0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0
aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0g
U1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRl
ckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94
LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwogCi0g
ICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJE
YXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAg
IGlmICghZmlsdGVyRGF0YS0+YnVpbGRlcikKKyAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgdHJh
bnNmb3JtYXRpb24gbWF0cml4IGZvciBmaWx0ZXIuCisgICAgQWZmaW5lVHJhbnNmb3JtIGFic29s
dXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRp
b25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOworICAgIGlmICghYWJzb2x1
dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IC8vIERldGVybWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUgb2YgaW50ZXJt
ZWRpYXRlIEltYWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01heEZpbHRlclNp
emUuCi0gICAgRmxvYXRSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5nUmVnaW9u
OwotICAgIEZsb2F0U2l6ZSBzY2FsZSgxLCAxKTsKLSAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcodGVtcFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0gICAgdGVtcFNvdXJjZVJl
Y3Quc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIC8vIEVsaW1pbmF0
ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxl
IHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCisgICAgRmxvYXRT
aXplIGZpbHRlclNjYWxlKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCBhYnNvbHV0ZVRyYW5z
Zm9ybS55U2NhbGUoKSk7CiAKLSAgICAvLyBTZXQgdGhlIHNjYWxlIGxldmVsIGluIFNWR0ZpbHRl
ci4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwor
ICAgIC8vIERldGVybWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUgb2YgaW50
ZXJtZWRpYXRlIEltYWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01heEZpbHRl
clNpemUuCisgICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlckRhdGEtPmRy
YXdpbmdSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSk7CiAKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxh
c3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0gICAgaWYgKCFs
YXN0RWZmZWN0IHx8IGxhc3RFZmZlY3QtPnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSA+IG1h
eFRvdGFsT2ZFZmZlY3RJbnB1dHMpCisgICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0
LgorICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+
KCk7CisgICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRWxl
bWVudCgpLCAqZmlsdGVyRGF0YS0+YnVpbGRlciwgZmlsdGVyU2NhbGUsIGZpbHRlckRhdGEtPmRy
YXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdldEJvdW5kaW5nQm94KTsK
KyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGF1dG8gbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3Qo
KTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVy
cywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxuIiA8
PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKIAotICAgIGxhc3RFZmZlY3Qt
PmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBzdWJS
ZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7CisgICAgRmxvYXRSZWN0IHN1YlJl
Z2lvbiA9IGxhc3RFZmZlY3QtPmNhbGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lvbigqZmlsdGVy
RGF0YS0+ZmlsdGVyKTsKKwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEg
dG9vIGJpZyBpbWFnZSBzaXplLAogICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMg
d2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewotICAgICAgICBmaWx0ZXJEYXRhLT5m
aWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LT5k
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICB9CisgICAgaWYgKEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSkp
CisgICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUp
OwogCiAgICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdlIGhhdmUgc29tZXRo
aW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KICAgICAvLyBFdmVuIGlmIHRoZSB0YXJnZXQgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0eSwgd2Ugc3RpbGwgaGF2ZSB0byBkcmF3IHRoZSBsYXN0
IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4gcG9zdEFwcGx5UmVzb3VyY2UuCkBAIC0xOTQsOSArMTQ2
LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICB9CiAKICAgICAvLyBDaGFuZ2UgdGhl
IGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gYXBwbGllZCB0byB0aGUgZmlsdGVyZWQgZWxlbWVu
dCB0byByZWZsZWN0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBmaWx0ZXIuCi0gICAgQWZmaW5lVHJh
bnNmb3JtIGVmZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUo
c2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5t
dWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgQWZm
aW5lVHJhbnNmb3JtIGVmZmVjdGl2ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybShmaWx0ZXJT
Y2FsZS53aWR0aCgpLCAwLCAwLCBmaWx0ZXJTY2FsZS5oZWlnaHQoKSwgMCwgMCk7CiAKICAgICBh
dXRvIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVy
c0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZDsKICNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFS
X1NSR0IpCkBAIC0yNjksMzMgKzIxOSwzMiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0
ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICBhdXRvIGxhc3RFZmZlY3QgPSBmaWx0
ZXJEYXRhLmZpbHRlci0+bGFzdEVmZmVjdCgpOwogCi0gICAgaWYgKGxhc3RFZmZlY3QgJiYgIWZp
bHRlckRhdGEuYm91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3QtPmZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgeworICAgIGlmIChsYXN0RWZmZWN0ICYmICFmaWx0
ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5jYWxjdWxhdGVQcmlt
aXRpdmVTdWJyZWdpb24oKmZpbHRlckRhdGEuZmlsdGVyKS5pc0VtcHR5KCkpIHsKICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4gSXQganVzdCBuZWVk
cyB0byBiZSBjYWxsZWQgb24gdGhlCiAgICAgICAgIC8vIGluaXRpYWwgZmlsdGVyaW5nIHByb2Nl
c3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24gYQogICAgICAgICAv
LyBzZWNvbmQgZHJhd2luZy4KICAgICAgICAgaWYgKGZpbHRlckRhdGEuc3RhdGUgIT0gRmlsdGVy
RGF0YTo6QnVpbHQpCiAgICAgICAgICAgICBmaWx0ZXJEYXRhLmZpbHRlci0+c2V0U291cmNlSW1h
Z2UoV1RGTW92ZShmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIpKTsKIAorICAgICAgICBh
dXRvIGltYWdlID0gbGFzdEVmZmVjdC0+ZmlsdGVySW1hZ2UoKTsKKyAgICAKICAgICAgICAgLy8g
QWx3YXlzIHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJEYXRhLT5zdGF0
ZSA9PSBGaWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFzdEVmZmVjdC0+aGFzUmVz
dWx0KCkpIHsKKyAgICAgICAgaWYgKCFpbWFnZSkgewogICAgICAgICAgICAgZmlsdGVyRGF0YS5z
dGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBw
bHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgICAgICAgICBmaWx0ZXJEYXRhLmZp
bHRlci0+YXBwbHlGaWx0ZXIoKTsKKyAgICAgICAgICAgIGltYWdlID0gbGFzdEVmZmVjdC0+Zmls
dGVySW1hZ2UoKTsKKyAgICAgICAgICAgIGltYWdlLT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogICAgICAgICB9CisKICAgICAgICAgZmlsdGVy
RGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkJ1aWx0OwogCi0gICAgICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlID8gaW1hZ2UtPmltYWdlQnVmZmVyKCkgOiBu
dWxscHRyOwogICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2Uo
KS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCku
d2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0
KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2Us
IGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAgY29udGV4dC0+
c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICAgICAg
ICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0
YS5maWx0ZXItPmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5m
aWx0ZXJTY2FsZSgpLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIoKnJlc3VsdEltYWdlLCBpbWFnZS0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7CisgICAgICAg
ICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyID0gbnVs
bHB0cjsKQEAgLTMyNyw3ICsyNzYsOCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
cmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBjbwogICAgICAg
ICAvLyBvciBub25lIG9mIHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgogICAgICAgICBpZiAoIXByaW1p
dHZlLT5zZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoZWZm
ZWN0KTsKKworICAgICAgICBidWlsZGVyLT5jbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2ZSgqZWZm
ZWN0KTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2NyZWVuLgogICAg
ICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJEYXRhUGFpci5rZXks
IFJlcGFpbnRJbnZhbGlkYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDhjZTBjN2FiYzE0M2JkYjY1
Mzg1MGM5M2UzMjkyYWM5ZGE0OWJiYzcuLjY2OGRkYTMwNTg2ZjY5ZTZkNTQ0YzI2MTBmMzA5OWNl
OWViODNlZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTQ3LDEwICs0Nyw4IEBAIHB1YmxpYzoKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKICAgICBSZWZQdHI8SW1h
Z2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzYXZl
ZENvbnRleHQgeyBudWxscHRyIH07Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtOwogICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOwogICAgIEZsb2F0UmVjdCBk
cmF3aW5nUmVnaW9uOwotICAgIEZsb2F0U2l6ZSBzY2FsZTsKICAgICBGaWx0ZXJEYXRhU3RhdGUg
c3RhdGUgeyBQYWludGluZ1NvdXJjZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYzY1MDIxYmVlMDM1
NTY1YWFiMzFjNjdmYjkzMTlmODhlNjE4MDdjNy4uNjRlM2FjNWFlYWM4MGFkZjllMjZhYjRlZjZi
ODVhMjdjMjU0MmQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00MzIsMTEgKzQzMiwxMyBAQCB2b2lkIHdyaXRl
U1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jlc291
cmNlQ29udGFpbmVyJgogICAgICAgICB0cyA8PCAiXG4iOwogICAgICAgICAvLyBDcmVhdGluZyBh
IHBsYWNlaG9sZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCiAgICAg
ICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdG
aWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1
bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0ZXIuYnVpbGRQ
cmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAgICBGbG9hdFNpemUgZHVtbXlT
Y2FsZSgxLCAxKTsKKyAgICAgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgICAgICBh
dXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyLmZpbHRlckVsZW1lbnQo
KSwgYnVpbGRlciwgZHVtbXlTY2FsZSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1bW15UmVjdCk7
CisgICAgICAgIGlmIChkdW1teUZpbHRlcikgewogICAgICAgICAgICAgVGV4dFN0cmVhbTo6SW5k
ZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwogCi0gICAgICAgICAgICBpZiAoRmlsdGVyRWZmZWN0
KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQorICAgICAgICAgICAgaWYgKGF1
dG8gbGFzdEVmZmVjdCA9IGR1bW15RmlsdGVyLT5sYXN0RWZmZWN0KCkpCiAgICAgICAgICAgICAg
ICAgbGFzdEVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKHJlc291cmNlLnJlc291cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5
cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IDIwYjhiNWU3YjA3YjMxYTEyYzVhYWNiYTM4NTg5MmZiZjNhMjM1
NzMuLjM5NzRjYTljM2Q4NGEzYjMyMDAwNzE5M2EyMDQ2ZWYyNjFhZWFlOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApA
QCAtMjM1LDggKzIzNSwxMSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZwogICAgIGlmIChwYWlu
dFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEZsb2F0U2l6
ZSBzY2FsZTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFNpemUocGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOworICAgIEZsb2F0U2l6ZSBzY2FsZSB7IDEs
IDEgfTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBwYWludFJlY3Quc2l6ZSgpOworCisg
ICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhwYWludFJlY3Quc2l6ZSgpLCBz
Y2FsZSkpCisgICAgICAgIGNsYW1wZWRTaXplLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKIAogI2lmIFVTRShESVJFQ1QyRCkKICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCwgMSwg
Y29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuY3BwCmluZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4MjJkNmQwNjQz
MWY2ODYuLjA1NDBjOGU0NDA4MmQ1YzYxZjAwZjhmYjczNWMzNjE4MmQxMGZhN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcApAQCAtMTAwLDE5ICsxMDAsMTYgQEAg
dm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUJs
ZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7
CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwor
ICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMigpKTsKIAog
ICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgYXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkpOwotICAgIEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsK
LSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5h
cHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAg
IGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSk7CisgICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICBy
ZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVC
bGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCmlu
ZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLmViYTlhYmI1ODMy
OGY0ZGFiZjM0MjhiNmIxN2RiZjU4MjM3Njg0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJs
ZW5kRWxlbWVudC5oCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRl
OwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJO
YW1lKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0
cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuY3BwCmluZGV4IDA1MjQ4NTc4YzI3NGM4ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0MmJhOWMuLmNk
ZWJlZjE4YTFmZGNiYjhmM2ZiMzVmYjgzOGFjNjA0YzlhMjNkNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApAQCAtMTAwLDkgKzEwMCw5IEBA
IHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZp
bHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0
RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0xNDEsOCArMTQxLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWwKICAgICAg
ICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3Qg
PSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZNb3ZlKGZpbHRl
clZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAg
IGF1dG8gZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlclR5cGUsIFdURk1vdmUo
ZmlsdGVyVmFsdWVzKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShp
bnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAppbmRleCA3YWI0YWE0MTgxZTdhYjE5OGIxMmU3N2Jl
MjA2YjljNWM0MTAyM2ZkLi45NzAxMWEwNDFlNDlhMTdmYjQ5OGExZjg0NmY4ODBkYmRkNjk1MjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaApAQCAt
ODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0
dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9w
ZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4x
IHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXggOTBhNTVi
N2VmZmY3YTNmZTYwNmE5ZTA1NzlhNzZlZGU5Zjk2ODAxMS4uMjdkMTJiNWQwODgzZWJmMWVhYzBh
ZGFiMTExMmZlZWViYjExZjQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCkBAIC02Myw5ICs2Myw5IEBAIHZvaWQgU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBm
aWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+
Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTg2LDggKzg2LDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHQKICAg
ICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNoaWxkKS50cmFu
c2ZlckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAg
ICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1
cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudC5oCmluZGV4IGJiNTg5MzQ3ZDg4MjZkZmIzNjA5ZWRhYzZlOGI5OTNh
NGRkNTQ4NjMuLjYwMTcxMGY3ZDM1MzVhMTQxYTE1Nzg4NTRhZjJiMDM1MTEyOWU5ODIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5o
CkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IHN2Z0F0dHJpYnV0ZUNo
YW5nZWQgbWlzc2luZy4KICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhp
cyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmlu
Zzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb3NpdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQuY3BwCmluZGV4IDNjYTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIwNWFjOTgyMzUu
LjdmY2VkMmU2NDU1NDBlM2I5ZGQwOTZjYmU0OTkxZjU4NDE1NTA1MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0xMzEsMTkgKzEzMSwxNiBA
QCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJC
dWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0
QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5
SWQoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGZp
bHRlciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7Ci0gICAgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotICAg
IGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVu
ZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAgCisgICAgYXV0
byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCks
IGszKCksIGs0KCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5w
dXQxKSwgV1RGTW92ZShpbnB1dDIpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCmluZGV4IDgxYTc4Yzg2NTdhMGZh
MzA0NGRmNWI3YzVhMDgwZDZlNzc5NzIyZjYuLjc0ZDgxNGMzYzIwZTBmZDM3ZWI2YThiNTNhZmY1
NjlkOGQxMWRjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0
ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmgKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRl
ckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZjc1
MDU4MTVkZWNhYmI0ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uMWE4MTM0YTljOGI3ZmMwYTUw
NzVlZGU4MWEwZDM2OTcwZTk4YzQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC0xOTEsOSArMTkxLDkgQEAgdm9pZCBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVy
QnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTI0Niw4ICsyNDYsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgogICAgICAgICAg
ICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29udm9s
dmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVl
KSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZh
bHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJu
ZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0g
RkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVl
KSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwgdGFyZ2V0WVZh
bHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZhbHVlLCBrZXJu
ZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOworICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVy
biBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50LmgKaW5kZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJhOTViOGQ5MDQ5YjMz
OS4uMWI2YmJlNDg3MTI3NWM0MjFjOGRkNDQwOWMxYjQ4OTcyOTVhYTEwYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKQEAgLTEwMyw3ICsx
MDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1ZmQ4ZTk1YWU5
OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li5kZDM5NDU5NWNmNzI2NDhhNjdkNTI4YTEzNDE1MWRh
MzY3ZjRjNjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmNwcApAQCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGln
aHRFCiAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNjIsNyArMTYyLDcgQEAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXIKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZp
bHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0
U291cmNlKGZpbHRlckJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE3MCw4ICsxNzAsOCBAQCBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlcgogCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5
bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHls
ZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlmZnVzZUxpZ2h0
aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFu
dCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxp
Z2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07Cisg
ICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNl
U2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVu
aXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKaW5k
ZXggNjg5OTk2MDlmNGI2YjU2YTc2Yzg4ZWE1Njk1ZjFlMGU5ZTIwNTU4MC4uYjJhYWM4YjAzZWQy
NGQyMWQ5OGI1MTlmYmE4ZTVmOTQ1Y2EzMDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMg
fTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6
OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEyNjllYTZkNzIyZGZk
MDUxNzNkOGMyLi42OTA3NTEzNzUwN2Q2YzY0NzQ5YTFjOGJjNDEyYTBhZWU1MWExYTJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNw
cApAQCAtMTE1LDE5ICsxMTUsMTYgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck4KICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmls
dGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAg
IGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAg
YXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBh
dXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0
byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4yKCkpOwogICAgIAogICAg
IGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
YXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwgeENoYW5uZWxT
ZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLSAgICBpbnB1
dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5w
dXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAgIGF1dG8gZWZm
ZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9yKCksIHlDaGFu
bmVsU2VsZWN0b3IoKSwgc2NhbGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
V1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICByZXR1cm4gZWZmZWN0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVkMy4uZjJjNmQw
YjE4Zjg1Yzk0ZjM4NGY1YmQxYmVmYzM1OWVkZTgyM2U2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTEsNyArOTEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJF
ZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcxZmU1ZDc5ZjRi
MzI2YTg5YmZjNWI2ODEuLmJkNjFjMjc0ZTE1MzRmZDkxYWMzOTgwYzY0NTYyOTg5OWNmNjIxNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKQEAg
LTk3LDcgKzk3LDcgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTExLDEyICsx
MTEsMTIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGQKICAgICBDb2xvciBjb2xvciA9IHJlbmRl
cmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29kQ29s
b3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwogCi0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAgICAg
aWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3Qg
PSBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0
aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNy
ZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3Is
IG9wYWNpdHkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQx
KSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
cm9wU2hhZG93RWxlbWVudC5oCmluZGV4IDliNjJkMjRiNDU0YmI3ZDI3NThlNzEyYjYyMWI4Y2Jl
NDJmNzQ1MWQuLjNlNDA1ZGU0ODljNjgxYTc2YzQ0ZjlhODI5NzMzYTIwMjZiNGQ4ZmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaApAQCAtNTMsNyArNTMs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVu
dC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1OGZjMi4uZjMy
OGNjN2MxNWVlNzkxYjRhYWJhM2E4ZTcxYTgwNGM4MDkzZGNmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wgU1ZHRkVGbG9v
ZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCwg
Y29uc3QgUXVhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVy
KSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC02OSw3ICs2OSw3IEBAIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJiBmaWx0ZXIpCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUo
KS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9yKCkpOwogICAg
IGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJldHVybiBG
RUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7CisgICAgcmV0dXJuIEZFRmxv
b2Q6OmNyZWF0ZShjb2xvciwgb3BhY2l0eSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Rmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3MjQ4YTFiNmY1Y2Y1MWZl
ZTkxMS4uYWVkNjY5MTkzM2JkMDJmMzMwMWE5MjM5N2I3NDA1OWZmNmJlYzRiZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHJpdmF0ZToK
ICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAgICBib29sIHNldEZpbHRl
ckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4IDdhOTk4MjI0
YzkyMTk1NTUyNDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLmYxZTZiZjQ5YTRkYjNkY2E3NzVjOWI3
ZWZhNWRiOWRjODY5ODg3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuY3BwCkBAIC05NSwxNyArOTUsMTcgQEAgdm9pZCBTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIs
IEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25z
dAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEo
KSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkp
OwogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChz
dGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZp
bHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOwotICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0g
RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwg
ZWRnZU1vZGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1
dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCmluZGV4IGQ4OWUxYTc0OGZiMmM1MDllMjE0ZmU5NGFl
NDEwMDFjZTQ4ZWUwYjIuLmY0MGViMzM3NzhjNDNkZjYxZWU1ODk2M2VlY2Y5ZWNkYmE1NDljYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKQEAg
LTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25z
dCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlS
ZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNW
R0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuY3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYwODExOTVkM2My
N2VjNGYuLjQyYTFjZTBlYTZhZTFkNDljYjZiYjdlYTk2NzQzYjNiZTA1YWY0NGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsxNzQsMTYgQEAg
dm9pZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UmLCBj
b25zdCBOZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0Zvckxh
eW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJlcik7CiB9CiAK
LVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgaWYg
KG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2Uo
ZmlsdGVyLCBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElt
YWdlKG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSksIHByZXNlcnZl
QXNwZWN0UmF0aW8oKSk7CiAKICAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFy
Z2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCB0cmVlU2NvcGUoKSk7CiAgICAgaWYgKGlz
RGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9mKHRhcmdldC5lbGVtZW50LmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElS
SVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZlQXNwZWN0UmF0
aW8oKSk7CisgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UodHJlZVNj
b3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBTVkdGRUlt
YWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4m
IHVybHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCmluZGV4IGQ5
M2UwZDBkYjhiODg2NjU0ODBmMjEwMTVhMjU2YmFkYTE1NGM1YzcuLjJhM2U5ZjYwZWJmYzI3ZDAx
MzliMmMzNzY4NWYzMzhiMWM4YjY3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5oCkBAIC01NSw3ICs1NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZEZpbmlzaElu
c2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZXF1ZXN0SW1h
Z2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKaW5k
ZXggYmUyZjZlMDMwN2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2RkNi4uMWMwZDU4MmQwMTNi
ODdjZjBlM2MxMTA4Yjk2MmYyZDM2OWRjMzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
ZXJnZUVsZW1lbnQuY3BwCkBAIC00NSwxMyArNDUsMTIgQEAgUmVmPFNWR0ZFTWVyZ2VFbGVtZW50
PiBTVkdGRU1lcmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IEQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGVmZmVjdCA9IEZF
TWVyZ2U6OmNyZWF0ZShmaWx0ZXIpOwotICAgIGF1dG8mIG1lcmdlSW5wdXRzID0gZWZmZWN0LT5p
bnB1dEVmZmVjdHMoKTsKLQorICAgIEZpbHRlckVmZmVjdFZlY3RvciBtZXJnZUlucHV0czsKKyAg
ICAKICAgICBmb3IgKGF1dG8mIG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZFTWVyZ2VO
b2RlRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAgIGF1dG8gbWVy
Z2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsK
ICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkpOwpAQCAtNjIs
NiArNjEsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRgogICAgIGlmIChtZXJnZUlucHV0cy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0byBlZmZlY3QgPSBG
RU1lcmdlOjpjcmVhdGUoKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0gV1RGTW92ZSht
ZXJnZUlucHV0cyk7CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVNZXJnZUVsZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3NTgwMmQyODNj
ZjRlM2MyLi40MzdjZDcyNTYzMmM1ZjRjNTI0ODk0Y2MzMjZjYTA5YjQxOTg1MTdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBAQCBwcml2YXRl
OgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVyUmVnaXN0cnk8
U1ZHRkVNZXJnZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz47
CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5jcHAKaW5kZXggZDZmYjk1YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVkMzIxYi4uOGIw
NTYwYzRkYTgwMDM5NzAxNDhlMWUxNWUyZjMwOTdiOTE1MzE1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtMTE0LDIwICsxMTQsMTkgQEAg
dm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVy
QnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7Ci0gICAgZmxv
YXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKKyAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOworICAgIGZsb2F0IHlS
YWRpdXMgPSByYWRpdXNZKCk7CiAgICAgaWYgKHhSYWRpdXMgPCAwIHx8IHlSYWRpdXMgPCAwKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVNb3JwaG9sb2d5
OjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKTsKLSAgICBl
ZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZF
TW9ycGhvbG9neTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRpdXMpOworICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVy
biBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBo
b2xvZ3lFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVu
dC5oCmluZGV4IDFhOTA4OGI3NWNmOGQ4NWFlMzhmMjkzZTExMTk4YTY2ZjY2YWE2NjkuLmIyMWI2
ZjVjNDdiNzg1ZGYyOGYwMTNlZGU1NDAxYzg2NmQ0MGU5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaApAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApp
bmRleCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li45YjBkNzAyYTFk
MjU4NTQyMDhiOTdmZjlkNmFkZDFmODI3ZTI5YWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmNwcApAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgU1ZHRkVPZmZzZXRF
bGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
KQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBm
aWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBp
bnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlu
cHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlu
cHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFT2Zm
c2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFT2Zm
c2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7CiAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
aW5wdXQxIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuaAppbmRleCA1NzQ3M2RjYzcyZGI2N2IxMjVlYTJlZDQ2NWUzNWI1NzM3MDQ5
YmVlLi44OTk2ZjI4MmIwMWU4ZDljZDY2N2JmMjBiNWNkOTg4YTU5OWFmODg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAg
IFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRl
KHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRiMjRjZGE0NTlhODQy
OWE1OS4uNTYzYjlmMTdiNGE5MTZiN2QyNjUxMjQyZDM3ZDNmYzBiZDc1MDJlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcApA
QCAtMTYwLDkgKzE2MCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6bGln
aHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAgcHJpbWl0aXZl
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVy
QnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTE3MSw3ICsxNzEsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZQogICAgIGlmICgh
bGlnaHRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBhdXRvIGxp
Z2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7Cisg
ICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoZmlsdGVyQnVp
bGRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTc5LDcgKzE3OSw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlCiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmxpZ2h0aW5n
Q29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRl
KGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNwZWN1
bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwg
V1RGTW92ZShsaWdodFNvdXJjZSkpOworICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0
aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIHNw
ZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFko
KSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7
IGlucHV0MSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRlMTU2ZDFjNzlh
MWQzZmQ4YjMxMThlMmFiNjNiNDdiMTQ2Li40ZDFiNTMxYzQyYmViOGNkZmEyMDE1MjE2MjExNjUx
MGQwMDliYzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9v
bCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9w
ZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJkY2M3NzM1OTY2
NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi4wMDFkZDUwODkyMTQ5ODkxNTZkNzI0NjdhYzIw
ZjRmZmY3ZDRkYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCkBA
IC03MCwxNSArNzAsMTUgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAK
LVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVy
QnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFVGls
ZTo6Y3JlYXRlKCk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1
dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVF
bGVtZW50LmgKaW5kZXggNDViMzI3MTg1MWQ3ZmMwZGMyZDNiY2M4NzlhMjJkYzQyYTMzYTkxZi4u
Y2FiYWNlNmJkMDFjMmIxZDM1NjRhNWNlZTVjMjc1YjY2OTZmOWQ0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUaWxlRWxlbWVudC5oCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJv
cGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKaW5kZXgg
MTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uMTUxYjdiOWU4ZTA4YTQz
ZTdjY2NiNjgwOWFhNzI5MTQ2ZGJiZjBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9pZCBTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIGlmIChiYXNlRnJlcXVlbmN5
WCgpIDwgMCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgpLCBiYXNlRnJl
cXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNo
VGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgIHJldHVybiBGRVR1cmJ1bGVu
Y2U6OmNyZWF0ZSh0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51
bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRD
SCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
CmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0MjY3NzY5ZTE5OGEuLjUwYWY5MTBl
YjU4ZTJjOTIyNDFhOTBkYThjYmRmZGM2ODE0ZjkzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAq
dGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVlbmN5WCB7IFNW
R0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKaW5k
ZXggZmY1MjIzMDk0NjZiMDQwYmVmMDg5ZDE1N2IzODZkZmZiYjA1YzYxOS4uNjc4ZGYwOTkwNmJl
M2I4NDZhMDM2ZjIzYTM0ZGYxYzUzMjhiNzcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKQEAg
LTkzLDIyICs5Myw2IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52YWxpZGF0ZSgp
OwogfQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3Rh
bmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25zdAotewotICAg
IEFTU0VSVChmaWx0ZXJFZmZlY3QpOwotICAgIGlmICghZmlsdGVyRWZmZWN0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCi0gICAgICAg
IGZpbHRlckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05h
bWVzOjp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWSh0cnVlKTsKLSAgICBp
ZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZl
Y3QtPnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6Omhl
aWdodEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0cnVlKTsKLX0K
LQogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0
IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRlcmVyPFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5oCmluZGV4IGM5OGIxM2VkOTYyNzZhZjllMTRmNjQyODExYTZmZDc0Njc3MmFj
YTcuLjg3OGQxMTJjMDI5ODdkMWZiZjE2MTQxYWNlMmI4YjgxZjVlYjI5MmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmgKQEAgLTM2LDkgKzM2LDcgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKIGNsYXNz
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBTVkdFbGVtZW50
IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmls
dGVyRWZmZWN0KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QgPSAwOwog
ICAgIC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0
aGUgb2xkIG9uZS4KICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCAzODVhZjI5MDg0
OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYyMzk2Li42OGQ0Yzc4MjIxNTY0OTJkNTkwNjcwNzE1
MmU0OGIzYTY3NmY4MTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMzUsNDYgKzM1LDQxIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPEltYWdl
PiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2UpCitGRUltYWdl
OjpGRUltYWdlKFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpCiAgICAgLCBtX2ltYWdlKGltYWdlKQogICAgICwgbV9wcmVz
ZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLUZFSW1hZ2U6OkZF
SW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcm
IGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RS
YXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQorRkVJbWFnZTo6
RkVJbWFnZShUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgOiBG
aWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKQogICAgICwgbV90cmVlU2Nv
cGUoJnRyZWVTY29wZSkKICAgICAsIG1faHJlZihocmVmKQogICAgICwgbV9wcmVzZXJ2ZUFzcGVj
dFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdl
OjpjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNv
bnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKK1Jl
ZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoUmVmUHRyPEltYWdlPiBpbWFnZSwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQog
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCBpbWFnZSwgcHJlc2Vy
dmVBc3BlY3RSYXRpbykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoaW1hZ2Us
IHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0
ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBj
b25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJl
c2VydmVBc3BlY3RSYXRpbykKK1JlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVm
ZXJlbmNlKFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZpbHRlciwgdHJlZVNjb3BlLCBocmVmLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZSh0cmVl
U2NvcGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKIH0KIAotdm9pZCBGRUltYWdlOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRkVJbWFnZTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gZmlsdGVyKCku
YWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsK
LSAgICBGbG9hdFJlY3Qgc3JjUmVjdDsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gcHJpbWl0
aXZlU3VicmVnaW9uOworCiAgICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgc3JjUmVjdC5zZXRT
aXplKG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFu
c2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0ID0g
ZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAg
ICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CisgICAgICAgIEZsb2F0UmVjdCBz
cmNSZWN0ID0geyB7IH0sIG1faW1hZ2UtPnNpemUoKSB9OworICAgICAgICBtX3ByZXNlcnZlQXNw
ZWN0UmF0aW8udHJhbnNmb3JtUmVjdChpbWFnZVJlY3QsIHNyY1JlY3QpOworICAgIH0KKworICAg
IHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJp
bWl0aXZlU3VicmVnaW9uKTsKIH0KIAogUmVuZGVyRWxlbWVudCogRkVJbWFnZTo6cmVmZXJlbmNl
ZFJlbmRlcmVyKCkgY29uc3QKQEAgLTg3LDM3ICs4MiwzNyBAQCBSZW5kZXJFbGVtZW50KiBGRUlt
YWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdAogICAgIHJldHVybiB0YXJnZXQuZWxlbWVu
dC0+cmVuZGVyZXIoKTsKIH0KIAotdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQorYm9vbCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIo
KTsKICAgICBpZiAoIW1faW1hZ2UgJiYgIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGlu
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRl
ckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IG91dHB1dC5pbWFn
ZUJ1ZmZlcigpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyKCkuYWJz
b2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCk7CisgICAg
ZGVzdFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogCiAgICAgRmxvYXRSZWN0IHNy
Y1JlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJz
b2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKLSAgICBlbHNlIHsKKyAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAgICAgc3Jj
UmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgICAg
ICBzcmNSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9IGVsc2UgewogICAg
ICAgICBzcmNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsK
ICAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNy
Y1JlY3QpOwogICAgIH0KIAotICAgIEludFBvaW50IHBhaW50TG9jYXRpb24gPSBhYnNvbHV0ZVBh
aW50UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgYXV0byBwYWludExvY2F0aW9uID0gb3V0cHV0LmFi
c29sdXRlSW1hZ2VSZWN0KCkubG9jYXRpb24oKTsKICAgICBkZXN0UmVjdC5tb3ZlKC1wYWludExv
Y2F0aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKIAogICAgIGF1dG8mIGNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogCiAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0gPSBmaWx0ZXIoKS5hYnNvbHV0
ZVRyYW5zZm9ybSgpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0ZVRyYW5zZm9y
bSk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogCiAgICAg
ICAgIFJlZlB0ciBjb250ZXh0Tm9kZSA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5l
bGVtZW50KCkpOwogICAgICAgICBpZiAoY29udGV4dE5vZGUtPmhhc1JlbGF0aXZlTGVuZ3Rocygp
KSB7CkBAIC0xMzIsMTAgKzEyNywxMSBAQCB2b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiAKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbjsK
ICAgICAgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29udGV4dChjb250
ZXh0LCAqcmVuZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY29udGV4dC5kcmF3SW1hZ2UoKm1f
aW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0
cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYwZWRjZTdjMGUw
YTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLjJkNGIzMzUyZTU4M2RmZDhjNWYzOWQ1MzU4MGQw
NzlkMzk1NzFkYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmgKQEAgLTM0LDIyICszNCwyMiBAQCBjbGFzcyBUcmVlU2NvcGU7CiAKIGNs
YXNzIEZFSW1hZ2UgZmluYWwgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVmPEZF
SW1hZ2U+IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGlj
IFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVX
aXRoSVJJUmVmZXJlbmNlKFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgfkZFSW1hZ2Uo
KSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+LCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRlciYsIFRyZWVT
Y29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYp
OworICAgIEZFSW1hZ2UoUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
b1ZhbHVlJik7CisgICAgRkVJbWFnZShUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVJbWFnZSI7IH0KKyAgICBSZW5kZXJFbGVtZW50
KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmls
dGVyRWZmZWN0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVJbWFn
ZTsgfQorICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpCisgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQogCi0gICAgUmVuZGVyRWxlbWVudCog
cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIGZpbmFs
OwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5hbDsKKyAgICBib29s
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBmaW5hbDsKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBmaW5hbDsKIAogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsK
QEAgLTYxLDMgKzYxLDUgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFSW1hZ2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAppbmRleCA5
YTk0YTQ2MDM1ODc5MDhhMzg0ZDE3NDI3YjM3MTkzNTkyYjdiY2U3Li4yNzgwYTQ4ZDViMTZhNGVh
MzAxM2Q0ZjM4YzBiOGYxNGNkNzhkNzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTIyLDI5ICsyMiw5MSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisjaW5jbHVkZSAiU1ZHRmls
dGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFi
c29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1Jl
Z2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJzb2x1
dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNvbHV0
ZVNvdXJjZURyYXdpbmdSZWdpb24pCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0
ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWls
ZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24g
Y2xpcE9wZXJhdGlvbiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICByZXR1
cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFn
ZVJlY3QsIGZpbHRlclJlZ2lvbiwgY2xpcE9wZXJhdGlvbiwgZmlsdGVyUmVnaW9uLCAmcHJldmlv
dXNFZmZlY3QpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdG
aWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBj
b25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0Qm91bmRpbmdCb3gpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0ZXJFbGVtZW50LCBidWls
ZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIENsaXBPcGVy
YXRpb246OkludGVyc2VjdCwgdGFyZ2V0Qm91bmRpbmdCb3gsIG51bGxwdHIpOworfQorCitSZWZQ
dHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJF
bGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRl
clNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sK
KyAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQucHJpbWl0
aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1g7CisKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGZpbHRlclNj
YWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgY2xpcE9wZXJhdGlvbiwgdGFyZ2V0
Qm91bmRpbmdCb3gsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSkpOworCisgICAgaWYgKCFwcmV2
aW91c0VmZmVjdCkKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIGJ1aWxkZXIuc2V0dXBCdWlsdGlu
RWZmZWN0cyh7ICpwcmV2aW91c0VmZmVjdCB9KTsKKworICAgIGJ1aWxkZXIuc2V0VGFyZ2V0Qm91
bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIGJ1aWxkZXIuc2V0UHJpbWl0aXZlVW5p
dHMoZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpKTsKKworICAgIGF1dG8gbGFzdEVmZmVj
dCA9IGJ1aWxkZXIuYnVpbGRGaWx0ZXJFZmZlY3RzKGZpbHRlckVsZW1lbnQpOworICAgIGlmICgh
bGFzdEVmZmVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIGV4cHJlc3Npb247CisgICAgaWYgKCFidWlsZGVyLmJ1aWxkRXhwcmVzc2lvbihl
eHByZXNzaW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmaWx0ZXItPnNldExh
c3RFZmZlY3QoV1RGTW92ZShsYXN0RWZmZWN0KSk7CisgICAgZmlsdGVyLT5zZXRFeHByZXNzaW9u
KFdURk1vdmUoZXhwcmVzc2lvbikpOworICAgIHJldHVybiBmaWx0ZXI7Cit9CisKK1NWR0ZpbHRl
cjo6U1ZHRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9w
ZXJhdGlvbiBjbGlwT3BlcmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94
LCBib29sIGVmZmVjdEJCb3hNb2RlKQorICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6U1ZHRmls
dGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIGNsaXBPcGVy
YXRpb24pCiAgICAgLCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAg
ICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQogICAgICwgbV9lZmZlY3RCQm94TW9kZShl
ZmZlY3RCQm94TW9kZSkKIHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1dGVU
cmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJSZWdpb24pOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVy
OjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitGbG9hdFNp
emUgU1ZHRmlsdGVyOjpzY2FsZWRTaXplQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmIHNp
emUpIGNvbnN0CiB7CisgICAgRmxvYXRTaXplIHJlc29sdmVkU2l6ZSA9IHNpemU7CiAgICAgaWYg
KG1fZWZmZWN0QkJveE1vZGUpCi0gICAgICAgIHNpemUgPSBzaXplICogbV90YXJnZXRCb3VuZGlu
Z0JveC5zaXplKCk7CisgICAgICAgIHJlc29sdmVkU2l6ZSA9IHJlc29sdmVkU2l6ZSAqIG1fdGFy
Z2V0Qm91bmRpbmdCb3guc2l6ZSgpOworCisgICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkU2l6ZUJ5
RmlsdGVyU2NhbGUocmVzb2x2ZWRTaXplKTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHNldFNvdXJjZUltYWdlKHsgZmlsdGVyLnNvdXJj
ZUltYWdlKCkgfSk7CisgICAgcmV0dXJuIGFwcGx5RmlsdGVyKCk7Cit9CiAKLSAgICByZXR1cm4g
RmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc2l6ZSkgKiBtX2Fic29sdXRlRmlsdGVy
UmVnaW9uLnNpemUoKSAvIG1fZmlsdGVyUmVnaW9uLnNpemUoKTsKK2Jvb2wgU1ZHRmlsdGVyOjph
cHBseUZpbHRlcigpCit7CisgICAgaWYgKG1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9leHByZXNzaW9uKSB7
CisgICAgICAgIGlmICghZWZmZWN0LT5hcHBseSgqdGhpcykpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ludE91dHNldHMgU1ZHRmls
dGVyOjpvdXRzZXRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXN0RWZmZWN0LT5vdXRzZXRz
KCk7CiB9CiAKLVJlZjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3Vy
Y2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK3ZvaWQgU1ZH
RmlsdGVyOjpjbGVhckZpbHRlckltYWdlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
VkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwg
dGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBt
X2xhc3RFZmZlY3QtPmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmgKaW5kZXggODA5MzE0NmQ2NGFmODg4NWJjM2RhNDkzMDJmNWFlYTBmYjE3MDBj
Zi4uZTQ2YWZlN2I1NDU0MTQ5YWFmOWNkOGUzNDk3ZGY4NTc1MjYzZmY5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKQEAgLTIwLDcgKzIw
LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKQEAgLTI5LDMyICsyOCw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworCiBjbGFz
cyBTVkdGaWx0ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpOwotCi0gICAg
RmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsgfQorICAgIHN0YXRpYyBSZWZQdHI8
U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBj
b25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24sIEZpbHRl
ckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBj
cmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNp
emUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdC
b3gpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVu
dCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdp
b24sIENsaXBPcGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZp
bHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0U2l6ZSBzY2Fs
ZWRTaXplQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlGaWx0ZXIo
KSBvdmVycmlkZTsKIAotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsgfQogICAgIEZsb2F0UmVj
dCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7
IH0KIAotICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIHsgcmV0dXJuIG1fbGFzdEVm
ZmVjdDsgfQorICAgIHZvaWQgc2V0TGFzdEVmZmVjdChSZWZQdHI8RmlsdGVyRWZmZWN0PiYmIGxh
c3RFZmZlY3QpIHsgbV9sYXN0RWZmZWN0ID0gV1RGTW92ZShsYXN0RWZmZWN0KTsgfQorICAgIHZv
aWQgc2V0RXhwcmVzc2lvbihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBleHByZXNzaW9uKSB7IG1fZXhw
cmVzc2lvbiA9IFdURk1vdmUoZXhwcmVzc2lvbik7IH0KIAogcHJpdmF0ZToKLSAgICBTVkdGaWx0
ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRS
ZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJC
b3hNb2RlKTsKKyAgICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVn
aW9uLCBDbGlwT3BlcmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBi
b29sIGVmZmVjdEJCb3hNb2RlKTsKKworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgY2xlYXJGaWx0ZXJJbWFnZSgpIG92ZXJyaWRlOwogCi0gICAgRmxv
YXRSZWN0IG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOwogICAgIEZsb2F0UmVjdCBtX3Rh
cmdldEJvdW5kaW5nQm94OwotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOwot
ICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7
CisKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CisgICAgRmlsdGVyRWZm
ZWN0VmVjdG9yIG1fZXhwcmVzc2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTVkdGaWx0ZXIpCiAgICAgc3Rh
dGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBm
aWx0ZXIuaXNTVkdGaWx0ZXIoKTsgfQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLmlzU1ZHRmls
dGVyKCk7IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5k
ZXggOTZmM2E4MDUwNDI5NTU1ODEwMzRkOThhNGZkYWM0ZWFmMzA4N2I5NC4uMTkzNjZlMWU5MWIz
N2M3MGRhZDU3NTQyNTRiMWYwZjcxOTQyNjQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTIwLDIw
ICsyMCwxMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWls
ZGVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aCIKICNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAorI2lmIEVO
QUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyNpbmNsdWRlICJDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1h
cHBpbmdzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXJCdWls
ZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMp
Cit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVm
ZmVjdD4gc291cmNlR3JhcGhpYykKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVj
dHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNv
dXJjZUdyYXBoaWMpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjpl
ZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMucHRyKCkpOworICAgIG1fYnVpbHRpbkVmZmVjdHMu
YWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoc291cmNl
R3JhcGhpYykpOwogICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKKyNpZiBFTkFCTEUoREVT
VElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCitzdGF0aWMgQ29sb3JJbnRlcnBvbGF0
aW9uIGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKK3sK
KyAgICBpZiAoYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0
dXJuIHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVy
cygpOworCisgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgcHJvcGVydHkgdmFsdWUgZnJvbSB0
aGUgY29tcHV0ZWQgc3R5bGUuCisgICAgaWYgKGF1dG8gdmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0
cmFjdG9yKCZlbGVtZW50KS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0
aW9uRmlsdGVycykpIHsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7
CisgICAgfQorCisgICAgcmV0dXJuIENvbG9ySW50ZXJwb2xhdGlvbjo6QXV0bzsKK30KKyNlbmRp
ZgorCitzdGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KiBl
ZmZlY3QsIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCit7CisgICAg
YWxsRWZmZWN0cy5hZGQoZWZmZWN0KTsKKyAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKS5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsK
KyAgICAgICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMpOworICAgIH0KKyAgICByZXR1
cm4gYWxsRWZmZWN0cy5zaXplKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB0b3RhbE51bWJlckZp
bHRlckVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQoreworICAgIEhhc2hT
ZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4gYWxsRWZmZWN0czsKKyAgICByZXR1cm4gY29sbGVjdEVm
ZmVjdHMoJmxhc3RFZmZlY3QsIGFsbEVmZmVjdHMpOworfQorCitSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYg
ZmlsdGVyRWxlbWVudCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGls
ZE5vZGVzID0gMjAwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhUb3RhbE51bWJlckZp
bHRlckVmZmVjdHMgPSAxMDA7CisKKyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENoaWxkTm9k
ZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdEVs
ZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM+KGZpbHRlckVsZW1lbnQpKSB7CisgICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVp
bGQoKnRoaXMpOworICAgICAgICBpZiAoIWVmZmVjdCkgeworICAgICAgICAgICAgY2xlYXJFZmZl
Y3RzKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gZWZmZWN0Qm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5n
bGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVudCwg
bV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCk7CisgICAgICAgIAorICAgICAg
ICBPcHRpb25TZXQ8RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzPiBmbGFnczsKKyAgICAgICAgaWYg
KGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCisgICAgICAgICAg
ICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNYKTsKKworICAgICAgICBp
ZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkKKyAgICAgICAg
ICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1kpOworCisgICAgICAg
IGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKKyAg
ICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1dpZHRoKTsK
KworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6
SGFzSGVpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIGVmZmVjdC0+c2V0Qm91bmRhcnlTZXQoeyBl
ZmZlY3RCb3VuZGFyaWVzLCBmbGFncyB9KTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgaWYgKGNvbG9ySW50ZXJwb2xhdGlvbkZvckVs
ZW1lbnQoZWZmZWN0RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisg
ICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpMaW5lYXJTUkdCKCkpOworI2VuZGlmCisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVy
ID0gZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQorICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9F
ZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC5jb3B5UmVmKCksIHJlbmRlcmVyKTsKKworICAgICAgICBh
ZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKKyAgICB9CisKKyAgICBpZiAoIWVm
ZmVjdCB8fCB0b3RhbE51bWJlckZpbHRlckVmZmVjdHMoKmVmZmVjdCkgPiBtYXhUb3RhbE51bWJl
ckZpbHRlckVmZmVjdHMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVm
ZmVjdDsKK30KKwogdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGQoY29uc3QgQXRvbVN0cmluZyYg
aWQsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKIHsKICAgICBpZiAoaWQuaXNFbXB0eSgp
KSB7CkBAIC05MiwxNSArMTgzLDQzIEBAIHZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZl
Y3RzKCkKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCi12b2lkIFNWR0ZpbHRlckJ1aWxk
ZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKK3ZvaWQgU1ZH
RmlsdGVyQnVpbGRlcjo6Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0JiBl
ZmZlY3QpCiB7Ci0gICAgaWYgKCFlZmZlY3QtPmhhc1Jlc3VsdCgpKQorICAgIGlmICghZWZmZWN0
LmZpbHRlckltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVmZmVjdC0+Y2xlYXJSZXN1
bHQoKTsKKyAgICBlZmZlY3QuY2xlYXJGaWx0ZXJJbWFnZSgpOworCisgICAgZm9yIChhdXRvJiBy
ZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKCZlZmZlY3QpKQorICAgICAgICBjbGVhckZpbHRl
ckltYWdlc1JlY3Vyc2l2ZSgqcmVmZXJlbmNlKTsKK30KKworc3RhdGljIGJvb2wgYnVpbGRFZmZl
Y3RFeHByZXNzaW9uKGNvbnN0IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVm
ZmVjdFZlY3RvciYgc3RhY2ssIEZpbHRlckVmZmVjdFZlY3RvciYgZXhwcmVzc2lvbikKK3sKKyAg
ICAvLyBBIGN5Y2xlIGlzIGRldGVjdGVkLgorICAgIGlmIChzdGFjay5jb250YWlucyhlZmZlY3Qp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBleHByZXNzaW9uLmluc2VydCgwLCBlZmZl
Y3QpOworCisgICAgc3RhY2suYXBwZW5kKGVmZmVjdCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0
RWZmZWN0IDogZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSkgeworICAgICAgICBpZiAoIWJ1aWxkRWZm
ZWN0RXhwcmVzc2lvbihpbnB1dEVmZmVjdCwgc3RhY2ssIGV4cHJlc3Npb24pKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQoc3RhY2subGFzdCgpID09IGVmZmVjdCk7CisKKyAgICBzdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6
IGVmZmVjdFJlZmVyZW5jZXMoZWZmZWN0KSkKLSAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZl
KHJlZmVyZW5jZSk7Citib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbihGaWx0
ZXJFZmZlY3RWZWN0b3ImIGV4cHJlc3Npb24pIGNvbnN0Cit7CisgICAgRmlsdGVyRWZmZWN0VmVj
dG9yIHN0YWNrOworICAgIHJldHVybiBidWlsZEVmZmVjdEV4cHJlc3Npb24obV9sYXN0RWZmZWN0
LCBzdGFjaywgZXhwcmVzc2lvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaAppbmRleCBjNzdhZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li41NmFk
NjcwYzI5N2Y2NzRmYWFiNDM5N2ZkMTJmNTNmMDhjZjg1OTRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0z
Nyw3ICszNyw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogcHVibGljOgogICAgIHR5cGVk
ZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CiAKLSAgICBTVkdGaWx0
ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFNWR0Zp
bHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94
KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQogICAgIEZs
b2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRp
bmdCb3g7IH0KQEAgLTYzLDcgKzYzLDExIEBAIHB1YmxpYzoKICAgICBpbmxpbmUgRmlsdGVyRWZm
ZWN0KiBlZmZlY3RCeVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0KSB7IHJldHVybiBtX2Vm
ZmVjdFJlbmRlcmVyLmdldChvYmplY3QpOyB9CiAKICAgICB2b2lkIGNsZWFyRWZmZWN0cygpOwot
ICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCopOworICAgIHZvaWQg
Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Jik7CisKKyAgICB2b2lkIHNl
dHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQm
KTsKKyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihGaWx0ZXJFZmZlY3RWZWN0b3ImIGV4cHJlc3Np
b24pIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3Rz
KCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCBmNjJkNGVmMjQ2YmQ3MzhhODI1ZmZhMGY3Y2Q2YTc5MWEyZDk0NjQ2Li44NTFl
MGU5MTRmYjcyNDU5NzNlOGI4OWRmZTJlMzZkZmRiNjE3ZTAwIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMjEtMTEtMDUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0dQVSBQcm9jZXNzXSBSZWZhY3RvciB0aGUgRmlsdGVyRWZmZWN0IHJlc3VsdCBidWZm
ZXJzIGludG8gYSBuZXcgY2xhc3MgbmFtZWQgJ0ZpbHRlckltYWdlJworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MDg4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCisy
MDIxLTExLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAg
IFtHUFUgUHJvY2Vzc10gUmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gRmlsdGVyIGZyb20gRmlsdGVy
RWZmZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzI1NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgdHdvIGZhaWx1cmVzIHJlbGF0ZWQgdG8gdGhlIGNvbG9yIHNwYWNlIHRvIFRlc3RFeHBlY3Rh
dGlvbnMuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCisyMDIxLTEwLTMxICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TWFrZSBDU1NGaWx0ZXIgaG9sZHMgYSBsaXN0IG9mIEZpbHRlckZ1bmN0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDY5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25z
OgorCiAyMDIxLTExLTAxICBNaWNoYWVsIFNtaXRoICA8bWlrZUB3My5vcmc+CiAKICAgICAgICAg
W1dlYkluc3BlY3Rvcl1bQ09SU10gU2hvdyBIVFRQIHN0YXR1cyBjb2RlIGluIENPUlMgbWVzc2Fn
ZXMuCg==
</data>
<flag name="commit-queue"
          id="468248"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443504</attachid>
            <date>2021-11-07 02:20:46 -0800</date>
            <delta_ts>2021-11-07 02:58:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211107022045.patch</filename>
            <type>text/plain</type>
            <size>404573</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdjNTM4ODU1ZTZmNTRh
NTJkN2Q2MzI5NDBlMTk1NjUzMmVhMWExNS4uMWIyYTdkOTRhYWY3N2Y4NGQ0OWQ5ZTIzMzVhYTll
MWU3NTdiMjZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5MiBAQAorMjAyMS0xMS0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFNpbXBsaWZ5IEZpbHRlckVmZmVjdCBnZW9tZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJj
ZUdyYXBoaWMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFudExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmNhbGN1bGF0
ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojppc0FscGhhSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRVRpbGU6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29y
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmNsaXBPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpzY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6bWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6Y2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6Om1hcFBvaW50RnJvbVVz
ZXJTcGFjZVRvQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHlG
aWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6RmlsdGVyQm91bmRhcnlTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OnggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyQm91bmRhcnlTZXQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJv
dW5kYXJ5U2V0OjpoZWlnaHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRl
UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFp
bnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbGxlY3RFZmZlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVz
dGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3RzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVySW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRCb3VuZGFyeVNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cGxhdGZvcm1BcHBseUNvcmVJbWFnZSBjb25z
dCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpu
dW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldElzQWxwaGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmFic29sdXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6aGFzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpoYXNZIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6c2V0SGFzWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Omhhc1dpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6c2V0SGFzV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRIYXNIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZm
ZWN0Qm91bmRhcmllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1bHRDb2xvclNwYWNlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0UmVzdWx0
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpub3JtYWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFn
ZTo6cHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjppbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6Omlz
QWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50
TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6Om91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJj
ZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICog
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjphcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpidWlsZEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
cHBseUZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjp0b3Rh
bE51bWJlckZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxk
ZXI6OmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTExLTA1ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVmYWN0b3IgdGhlIEZpbHRlckVmZmVjdCByZXN1bHQgYnVmZmVycyBpbnRvIGEgbmV3IGNs
YXNzIG5hbWVkICdGaWx0ZXJJbWFnZScKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1vdmUgdGhlIHN0b3JhZ2UgYW5kIHRoZSBsb2dpYyBmb3IgbWFuYWdp
bmcgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUKKyAgICAgICAgRmlsdGVyRWZmZWN0IHRvIGl0
cyBpbnB1dHMgdG8gYSBuZXcgY2FsbHMgbmFtZWQgJ0ZpbHRlclJlc3VsdCcuIFRoaXMgd2lsbAor
ICAgICAgICBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgRmlsdGVyRWZmZWN0LiBJdCB3
aWxsIGFsc28gYWxsb3cgaW50ZWdyYXRpbmcKKyAgICAgICAgdGhlIENvcmVJbWFnZSBzZWFtbGVz
c2x5IGFuZCBzaW1wbGlmeWluZyB0aGUgZ2VvbWV0cnkgY2FsY3VsYXRpb24uCisKKyAgICAgICAg
SW5zdGVhZCBvZiBoYXZpbmcgdGhyZWUgd2F5cyB0byBjcmVhdGUgdGhlIHJlc3VsdCBvZiBhIEZp
bHRlckVmZmVjdCwgdGhlcmUKKyAgICAgICAgd2lsbCBiZSBvbmUgd2F5IHdoaWNoIGlzIGJ5IGNh
bGxpbmcgRmlsdGVySW1hZ2U6OmNyZWF0ZSgpLiBUaGlzIGNhbGwgd2lsbAorICAgICAgICBub3Qg
Y3JlYXRlIGEgY29uY3JldGUgcmVzdWx0LiBCdXQgcmVxdWVzdGluZyB0aGUgSW1hZ2VCdWZmZXIg
b3IgYSBQaXhlbEJ1ZmZlcgorICAgICAgICBmcm9tIEZpbHRlckltYWdlIHdpbGwgbWFrZSB0aGlz
IGNyZWF0aW9uIGhhcHBlbnMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIHJlcXVpcmVzVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgaXMgcmVwbGFjZWQgYnkgdGhlIG9wcG9zaXRlIAorICAg
ICAgICBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKS4gQ29ycmVjdGluZyB0
aGUgcHJlbXVsdGlwbGllZAorICAgICAgICByZXN1bHQgd2lsbCBiZSBkb25lIGJ5IEZpbHRlckVm
ZmVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Zmls
bFJlZ2lvbldvcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOgorICAgICAgICBDbGVh
cmluZyB0aGUgcmVzdWx0IGNhbiBiZSBkb25lIGJ5IG51bGxpZnlpbmcgYSBzaW5nbGUgcG9pbnRl
ci4KKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRVbnByZW11bHRpcGxpZWRSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRQcmVtdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVucHJlbXVsdGlwbGllZFJl
c3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29y
cmVjdFByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1
ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTog
RGVsZXRlZC4KKyAgICAgICAgQWxsIHRoZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMgd2FzIG1v
dmVkIHRvIEZpbHRlckltYWdlLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1Jlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVm
ZmVjdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXlQcm9kdWNlSW52
YWxpZFByZW11bHRpcGxpZWRQaXhlbHMgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0VHlw
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om91dHNl
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0
ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFn
ZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisyMDIxLTExLTAyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gRmlsdGVyIGZyb20gRmlsdGVyRWZmZWN0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI1NTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9mIGhh
dmluZyBhIHJlZmVyZW5jZSB0byB0aGUgRmlsdGVyIGluIHRoZSBGaWx0ZXJFZmZlY3QsIHdlIGFy
ZQorICAgICAgICBnb2luZyB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoZSBGaWx0ZXIgdG8gdGhl
IEZpbHRlckVmZmVjdCBmdW5jdGlvbnMKKyAgICAgICAgb25seSB3aGVuIG5lZWRlZC4KKworICAg
ICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9y
dHNDb3JlSW1hZ2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJs
ZW5kOjpGRUJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZF
Q29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFu
Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVN
ZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3Bl
Y3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OkZFVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OmZpbGxSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpmaWxsUmVnaW9uV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6c291cmNlSW1hZ2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJ
bWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpmaWx0ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBw
bHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VH
cmFwaGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3RO
YW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6IERlbGV0
ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlQ29jb2EuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZm
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpvdXRwdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5k
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVu
dDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAg
ICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWls
ZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAg
ICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRUZsb29kRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpi
dWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRUltYWdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdl
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVP
ZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRl
ckVmZmVjdHMpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaDoKKworMjAyMS0xMC0zMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4K
KworICAgICAgICBbR1BVIFByb2Nlc3NdIE1ha2UgQ1NTRmlsdGVyIGhvbGRzIGEgbGlzdCBvZiBG
aWx0ZXJGdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjQ2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEluIHRoaXMgcGF0Y2gsIHRoZSBDU1MgcmVmZXJlbmNlIGZpbHRlciBpcyBidWlsdCBh
cyBhbiBTVkdGaWx0ZXIgYW5kIGl0CisgICAgICAgIGlzIGtlcHQgYXMgYSBGaWx0ZXJGdW5jdGlv
biBpbiB0aGUgQ1NTRmlsdGVyIGZ1bmN0aW9ucycgbGlzdC4gVGhlIEZpbHRlciAKKyAgICAgICAg
YXNzb2NpYXRlZCB3aXRoIHRoZSBGaWx0ZXJFZmZlY3RzIG9mIHRoZSByZWZlcmVuY2VkIGZpbHRl
ciB3aWxsIGJlIGFuCisgICAgICAgIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyBhIENTU0Zp
bHRlci4gVGhpcyB3aWxsIGFsbG93IGhhdmluZyBjb2xvcgorICAgICAgICBzcGFjaW5nIGZvciB0
aGUgcmVmZXJlbmNlZCBmaWx0ZXJzIGRpZmZlcmVudCBmcm9tIHRoZSBjb2xvciBzcGFjaW5nIG9m
CisgICAgICAgIENTU0ZpbHRlci4gCisKKyAgICAgICAgQWxzbyB0aGlzIHBhdGNoIG1ha2VzIGEg
c2luZ2xlIGZ1bmN0aW9uIGZvciBidWlsZGluZyB0aGUgcHJpbWl0aXZlcyBvZgorICAgICAgICB0
aGUgU1ZHRmlsdGVyIGluc3RlYWQgb2YgaGF2aW5nIHR3byBmdW5jdGlvbnMuCisKKyAgICAgICAg
VG8gYWxsb3cgb3BlcmF0aW5nIHRocm91Z2ggdGhlIFNWR0ZpbHRlciBhcyBhIEZpbHRlckZ1bmN0
aW9uIG93bmVkIGJ5CisgICAgICAgIENTU0ZpbHRlciwgdGhlIFNWR0ZpbHRlciB3aWxsIGhhdmUg
YSBwb2ludGVyIHRvIGl0cyBsYXN0RWZmZWN0LgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVmZmVjdFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQmx1ckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCcmlnaHRuZXNz
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRyYXN0RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlR3JheVNjYWxlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUh1ZVJvdGF0
ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbnZlcnRFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlT3BhY2l0eUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTYXR1cmF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Omxhc3RFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6Om91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJjZUlt
YWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckludGVycG9s
YXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1
aWxkRmlsdGVyRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpT
VkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisKKzIwMjEtMTAtMjggIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIFNWR0ZpbHRlciBh
bmQgQ1NTRmlsdGVyIHdvcmsgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMgc3lzdGVtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgU1ZHRmls
dGVyIHNldHMgdGhlIGZvbGxvd2luZyBtZW1iZXJzIG9mIEZpbHRlcgorCisgICAgICAgIDEuIEFm
ZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOiB0aGlzIGlzIHRoZSBzY2FsaW5nIHBh
cnQgZnJvbSB0aGUKKyAgICAgICAgICAgdHJhbnNmb3JtYXRpb24gZnJvbSB0aGUgdGFyZ2V0IGVs
ZW1lbnQgdG8gdGhlIG91dGVybW9zdCBjb29yZGluYXRlIHN5c3RlbQorICAgICAgICAyLiBGbG9h
dFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOiB0aGlzIGlzIHRoZSBjbGFtcGluZyBzY2FsZSBpZiB0
aGUgc2l6ZQorICAgICAgICAgICBvZiB0aGUgcmVzdWx0IEltYWdlQnVmZmVycyBleGNlZWRzIE1h
eENsYW1wZWRBcmVhCisKKyAgICAgICAgQW5kIHRoZSBDU1NGaWx0ZXIgc2V0cyB0aGUgZm9sbG93
aW5nIG1lbWJlciBvZiBGaWx0ZXI6CisKKyAgICAgICAgMS4gZmxvYXQgbV9maWx0ZXJTY2FsZTog
dGhpcyBpcyB0aGUgZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpCisKKyAgICAgICAgVGhl
IGRpc2NyZXBhbmN5IGhhcHBlbnMgYWxzbyB3aGVuIGNyZWF0aW5nIHRoZSByZXN1bHQgSW1hZ2VC
dWZmZXJzLiBGb3IgCisgICAgICAgIFNWR0ZpbHRlciwgd2UgY3JlYXRlIHRoZW0gd2l0aCBzY2Fs
ZUZhY3Rvcj0xLiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZQorICAgICAgICA9PSBiYWNrZW5k
U2l6ZS4gQnV0IGZvciBDU1NGaWx0ZXIgd2UgY3JlYXRlIHRoZW0gd2l0aCBzY2FsZUZhY3Rvcgor
ICAgICAgICA9IG1fZmlsdGVyU2NhbGUuIFRoaXMgbWVhbnMgdGhlIGxvZ2ljYWxTaXplICE9IGJh
Y2tlbmRTaXplIGluIHRoaXMgY2FzZS4KKworICAgICAgICBXZSBuZWVkIHRvIHVuaWZ5IHRoZSBj
b29yZGluYXRlcyBzeXN0ZW0gZm9yIGJvdGggZmlsdGVycy4gV2UgbmVlZCBhbHNvIHRvCisgICAg
ICAgIHJlcGxhY2UgdGhlIHRocmVlIG1lbWJlcnMgYnkgYSBzaW5nbGUgRmxvYXRTaXplIGNhbGxl
ZCAibV9maWx0ZXJTY2FsZSIuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6
OmZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNldFNvdXJj
ZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2Nh
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpmaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyUmVzb2x1dGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpv
dXRwdXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondy
aXRlU1ZHUmVzb3VyY2VDb250YWluZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRl
clNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoK
KworMjAyMS0xMC0yNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAg
ICAgICBbR1BVIFByb2Nlc3NdIEludHJvZHVjZSBGaWx0ZXJGdW5jdGlvbiBhbmQgbWFrZSBpdCB0
aGUgYmFzZSBjbGFzcyBvZiBGaWx0ZXIgYW5kIEZpbHRlckVmZmVjdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDEzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhbGxvd3MgQ1NTRmlsdGVyIHRv
IGhvbGQgYSBsaXN0IG9mIEZpbHRlckZ1bmN0aW9ucy4gVGhlIEZpbHRlciBpbgorICAgICAgICB0
aGlzIGNhc2Ugd2lsbCBhY3QgbGlrZSBhIGNvbXBvc2l0ZSBwYXR0ZXJuIG9mIHRoZSBGaWx0ZXJF
ZmZlY3QuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvCisgICAgICAgIDEuIFJlbW92ZXMgdGhl
IHZpcnR1YWwgZnVuY3Rpb24gZmlsdGVyTmFtZSgpIGZyb20gYWxsIHRoZSBGaWx0ZXJFZmZlY3QK
KyAgICAgICAgICAgY2xhc3Nlcy4gSXQgcmVwbGFjZXMgaXQgd2l0aCBhIHN0YXRpYyBmdW5jdGlv
biBpbiBGaWx0ZXJGdW5jdGlvbi4KKyAgICAgICAgMi4gUmVtb3ZlcyB0aGUgdmlydHVhbCBmdW5j
dGlvbiBmaWx0ZXJFZmZlY3RUeXBlKCkgYW5kIHRoZSBmdW5jdGlvbgorICAgICAgICAgICBGaWx0
ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlwZSgpIHNpbmNlIHRoZXkgY2FuIGJvdGggYmUg
cmVwbGFjZWQKKyAgICAgICAgICAgYnkgRmlsdGVyRnVuY3Rpb246OmZpbHRlclR5cGUoKS4KKyAg
ICAgICAgMy4gQWRkcyB0cmFpdCBtYWNyb3MgZm9yIGFsbCBGaWx0ZXJFZmZlY3RzIGFuZCB0aGUg
U1ZHRmlsdGVycyBjbGFzcy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpGRUJsZW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRy
aXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
OgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChpc1R5
cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRN
YXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6RkVPZmZzZXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpGRVR1cmJ1bGVuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6Cisg
ICAgICAgIChpc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJF
ZmZlY3RUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6ZmlsdGVyTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZp
bHRlck5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVu
Y3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVy
VHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNDU1NGaWx0
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzU1ZHRmlsdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXJFZmZlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUFscGhhTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlR3JhcGhpY05hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlck5hbWUgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VB
bHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Yzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1h
Z2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorCiAyMDIxLTExLTAxICBEb24gT2xtc3RlYWQgIDxkb24u
b2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW0N1cmxdIEZpeCAtV3Jlb3JkZXItY3RvciBp
biBDdXJsUmVxdWVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA4ZGEyNGI3OGRhNTdkYzNiZDJjZWQxMTg0
YzJlZGRmZjBiOGRlMjQ2Li44ZjMwZTMzZjgyYjcyMjU3YjBhOWVhZjIwODgxMWM4Y2JjYzliMTRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjA2Miw2ICsyMDYyLDggQEAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjU3
NTViYzMzOGU3NmQ4NzkwZDBiNDNjMDdkMmQyYWJmMDYwZTc4NS4uM2FmMjkyZGU1YzgxNDQyOWZi
MTcxYTFmYjEyOWEyNDdlODgyZGMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI5OCw2ICsyMjk4LDcgQEAKIAkJNzI0RUQz
MzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAv
KiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAv
KiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURD
ODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjZCRTAyRDI3MkZCMTcyMDA3MzhGRkQg
LyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNkJFMDJCMjcyRkIxNzIwMDczOEZGRCAvKiBGaWx0ZXJJbWFnZS5oICovOyB9Owog
CQk3MjZENTZFMjI1M0FFMjhEMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2RDU2RTEyNTNBRTA0MzAwMDJF
RjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MjZENTZFMzI1M0FFMzY2MDAwMkVGOTAgLyogTmF0aXZlSW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY2
MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyN0E3RjNBMjQwNzhCODQwMDREMjkzMSAvKiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTA1NjEsNiArMTA1NjIsOCBAQAogCQk3MjRFRTU0RTFEQzdGMjVCMDBB
OTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY3Rpdml0eVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVFNTRG
MURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNTIzOTZCMjU0Q0FEQzIwMEY1RkIxNSAv
KiBOYXRpdmVJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXRpdmVJbWFnZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNjJENzU2MjcyQTE3NDEwMEM1NkEwOSAvKiBG
aWx0ZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NzI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVy
RnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAxMzIyNDFCQ0UyMDA4MzM5NzUgLyogU1ZH
UHJvcGVydHlBbmltYXRvckZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBbmlt
YXRvckZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTQyMjQx
QkZCMjAwODMzOTc1IC8qIFNWR1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3JJbXBsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3JJbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDE1MjI0MUMwOTgwMDgzMzk3NSAvKiBTVkdQcmltaXRp
dmVQcm9wZXJ0eUFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ByaW1pdGl2ZVByb3BlcnR5
QW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTcxLDYgKzEwNTc0
LDkgQEAKIAkJNzI2NkYwMjgyMjQzMTIwMzAwODMzOTc1IC8qIFNWR0FuaW1hdGlvbkFkZGl0aXZl
TGlzdEZ1bmN0aW9uSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxp
c3RGdW5jdGlvbkltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMjky
MjQzMTJCMTAwODMzOTc1IC8qIFNWR0FuaW1hdGlvbkFkZGl0aXZlTGlzdEZ1bmN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0FuaW1hdGlvbkFkZGl0aXZlTGlzdEZ1bmN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDJBMjI0MzE0OUIwMDgzMzk3NSAvKiBTVkdBbmlt
YXRlZFByb3BlcnR5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5TGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCRTAyOTI3MkZCMTcxMDA3MzhG
RkQgLyogRmlsdGVySW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZCRTAy
QjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI2QkUwMzkyNzMzNEI0MjAwNzM4RkZEIC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZpbHRlckJvdW5kYXJ5U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZF
RDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4NjQ0LDExICsxODY1MCwxMSBAQAogCQkxQTU2OUNDNDBEN0UyQjYwMDA3QzM5ODMgLyogYnJp
ZGdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk1OUI1
OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAotCQkJCTFBNTY5Q0UyMEQ3RTJCODIwMDdD
Mzk4MyAvKiBvYmpjICovLAogCQkJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2Uu
aCAqLywKIAkJCQkxQTcxRDU3OTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5jcHAg
Ki8sCiAJCQkJMUE3MUQ1N0EwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuaCAqLywK
KwkJCQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAorCQkJCTFBNTY5Q0UyMEQ3
RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTFBNTY5Q0VGMEQ3RTJCODIwMDdDMzk4MyAv
KiBydW50aW1lX2FycmF5LmNwcCAqLywKIAkJCQkxQTU2OUNGMDBEN0UyQjgyMDA3QzM5ODMgLyog
cnVudGltZV9hcnJheS5oICovLAogCQkJCTFBNTY5Q0YxMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50
aW1lX21ldGhvZC5jcHAgKi8sCkBAIC0yNTI4NywxMCArMjUyOTMsMTUgQEAKIAkJCQk4NDczMEQ2
RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3MDEy
NDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi8sCiAJCQkJODQ1RTcyRjcwRkQyNjFF
RTAwQTg3RDc5IC8qIEZpbHRlci5oICovLAorCQkJCTcyNkJFMDM5MjczMzRCNDIwMDczOEZGRCAv
KiBGaWx0ZXJCb3VuZGFyeVNldC5oICovLAogCQkJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAv
KiBGaWx0ZXJFZmZlY3QuY3BwICovLAogCQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBG
aWx0ZXJFZmZlY3QuaCAqLywKIAkJCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVy
RWZmZWN0UmVuZGVyZXIuY3BwICovLAogCQkJCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBG
aWx0ZXJFZmZlY3RSZW5kZXJlci5oICovLAorCQkJCTcyNjJENzU3MjcyQTE3NDEwMEM1NkEwOSAv
KiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8sCisJCQkJNzI2MkQ3NTYyNzJBMTc0MTAwQzU2QTA5IC8q
IEZpbHRlckZ1bmN0aW9uLmggKi8sCisJCQkJNzI2QkUwMjkyNzJGQjE3MTAwNzM4RkZEIC8qIEZp
bHRlckltYWdlLmNwcCAqLywKKwkJCQk3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVy
SW1hZ2UuaCAqLywKIAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlv
bnMuY3BwICovLApAQCAtMzI3ODMsNiArMzI3OTQsNyBAQAogCQkJCTA4QzkyNTFBMEZDQzdDNEEw
MDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJDODU2NTM0MjRD
MEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkNBQTRBM0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjZCRTAyRDI3MkZCMTcyMDA3MzhGRkQgLyogRmls
dGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAv
KiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQw
MENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBE
OTEyOTYxOUY4MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGM2N2EzNWIwNzE1Yjcy
MWVkODk5MmRlY2Q0OWZhOGQwYjgwNjQ3NzAuLjI5Yzc2ZjgzZTNlNWQ0YjQ3NjNkMWJiOGIwZjk2
MTBjYjJlNzM4MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5j
cHAKQEAgLTExNiwyMCArMTE2LDIxIEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1
ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAv
LyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0
KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRl
ZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghdGV4dHVyZSkKKyAgICBhdXRvIHJlbmRlcmlu
Z01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworICAgIGF1dG8gc291cmNlSW1h
Z2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIDEsIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghc291
cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAgYXV0
byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKLSAgICB0ZXh0dXJlLT5jb250
ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBhdXRvIHNvdXJjZUltYWdl
UmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9OworICAgIHNvdXJjZUltYWdlLT5jb250ZXh0
KCkuZHJhd0ltYWdlKCppbWFnZSwgc291cmNlSW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmls
dGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdl
KFdURk1vdmUodGV4dHVyZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGlt
YWdlUmVjdCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAg
ICBpZiAoIWNzc0ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmls
dGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKSkKKyAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0Zp
bHRlcjo6Y3JlYXRlKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUp
OworICAgIGlmICghY3NzRmlsdGVyKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2Uo
KTsKLSAgICBjc3NGaWx0ZXItPmFwcGx5KCk7CisKKyAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUlt
YWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpOworICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2Uo
V1RGTW92ZShzb3VyY2VJbWFnZSkpOworICAgIGNzc0ZpbHRlci0+YXBwbHlGaWx0ZXIoKTsKIAog
ICAgIGF1dG8qIG91dHB1dCA9IGNzc0ZpbHRlci0+b3V0cHV0KCk7CiAgICAgaWYgKCFvdXRwdXQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAK
aW5kZXggODhjZTk0MjQ5NzNmNzhiYmYxOWViM2YxYzM5NzgwNGVkMGU3M2ZmNi4uYjhlOThkN2E4
MjllYjliZjI0ZDU3MzVhYWE4ZDI1YWVhOTk5OWRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMTMzLDcgKzEzMyw3IEBAIGJv
b2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
RmxvYXRTaXplJiBzY2FsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gVGhlIGFy
ZWEgb2Ygc2NhbGVkIHNpemUgaXMgYmlnZ2VyIHRoYW4gdGhlIHVwcGVyIGxpbWl0LCBhZGp1c3Qg
dGhlIHNjYWxlIHRvIGZpdC4KLSAgICBzY2FsZS5zY2FsZShzcXJ0ZihNYXhDbGFtcGVkQXJlYSAv
IChzY2FsZWRTaXplLndpZHRoKCkgKiBzY2FsZWRTaXplLmhlaWdodCgpKSkpOworICAgIHNjYWxl
LnNjYWxlKHNxcnRmKE1heENsYW1wZWRBcmVhIC8gc2NhbGVkU2l6ZS5hcmVhKCkpKTsKICAgICBB
U1NFUlQoIXNpemVOZWVkc0NsYW1waW5nKHNpemUsIHNjYWxlKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1h
Z2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCmlu
ZGV4IGU2YzhkZjRkNTViNDU2MTM1NDllM2FmNDkxOTJhMjZlMmMwNDRhZjcuLjdjZDE2YTI4NWZl
OWUwOWJhMWFlNDcyNjEwZTk4NjBjNzJmYmM3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCkBAIC00NywyMCArNDcsMjAgQEAgY2xhc3MgRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIg
ewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKICAgICBSZXRhaW5QdHI8Q0lD
b250ZXh0PiBzaGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJF
ZmZlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0
ZXJFZmZlY3QmKSBmaW5hbDsKICAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fb3V0cHV0SW1hZ2U7IH0KICAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgZmlu
YWw7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0IGZp
bmFsOworICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3QmKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7CiAgICAg
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgUmV0
YWluUHRyPENJSW1hZ2U+IGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9p
ZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpIGZpbmFsOworICAgIFJldGFpblB0
cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYsIEZpbHRlckVmZmVjdCYp
OworICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZl
Y3QmKSBmaW5hbDsKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhG
aWx0ZXJFZmZlY3QmKTsKICAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhG
aWx0ZXJFZmZlY3QmKTsKICAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3Vy
Y2VHcmFwaGljKFNvdXJjZUdyYXBoaWMmKTsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VG
b3JTb3VyY2VHcmFwaGljKGNvbnN0IEZpbHRlciYpOwogICAgIFJldGFpblB0cjxDSUltYWdlPiBp
bWFnZUZvckZFQ29sb3JNYXRyaXgoY29uc3QgRkVDb2xvck1hdHJpeCYsIGNvbnN0IFZlY3RvcjxS
ZXRhaW5QdHI8Q0lJbWFnZT4+Jik7CiAgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVD
b21wb25lbnRUcmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiwgVmVjdG9yPFJldGFp
blB0cjxDSUltYWdlPj4mKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbQppbmRleCA5N2UxMTM3YjI5ZDcxYzJiNTQ0MTU3MzA2NzI0MDBi
ODI0MjhiMzYxLi5iZGQ1MWY1NWEzMjgyZDQ5YWYwNjg5YzkwZDU4OGNkNWRmOTc1ZDRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCkBAIC03
MiwxMSArNzIsMTEgQEAgc3RhdGljIGJvb2wgaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uKGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGUKIGJvb2wgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVj
dCYgZWZmZWN0KQogewogICAgIC8vIEZJWE1FOiBjaGFuZ2UgcmV0dXJuIHZhbHVlIHRvIHRydWUg
b25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVj
dENsYXNzVHlwZSgpKSB7CisgICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyVHlwZSgpKSB7CiAgICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0
cml4OiB7CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29sb3JNYXRyaXg6IHsKICAg
ICAgICAgc3dpdGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewog
ICAgICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBjYXNlIEZF
Q09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgpAQCAtODgsOTAgKzg4LDU1IEBAIGJv
b2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVy
aW5nKEZpbHRlckVmZmVjdCYgZWZmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CiAgICAgICAgIHJldHVybiBpc051bGxPckxpbmVh
ckNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4o
ZWZmZWN0KSk7CiAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29udm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpZmZ1
c2VMaWdodGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50TWFw
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6R2F1
c3NpYW5CbHVyOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6Ok1lcmdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5OgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNwZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRp
bGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGRlZmF1bHQ6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JiBsYXN0RWZm
ZWN0KQordm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCiB7Ci0gICAgbV9v
dXRwdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7CisgICAgbV9vdXRwdXRJ
bWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMoZmlsdGVyLCBsYXN0RWZmZWN0KTsKICAgICBpZiAoIW1f
b3V0cHV0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGxh
c3RFZmZlY3QpOworICAgIHJlbmRlclRvSW1hZ2VCdWZmZXIoZmlsdGVyLCBsYXN0RWZmZWN0KTsK
IH0KIAotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpj
b25uZWN0Q0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQorUmV0YWluUHRyPENJSW1hZ2U+
IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZp
bHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICBWZWN0b3I8UmV0YWlu
UHRyPENJSW1hZ2U+PiBpbnB1dEltYWdlczsKICAgICAKICAgICBmb3IgKGF1dG8gaW4gOiBlZmZl
Y3QuaW5wdXRFZmZlY3RzKCkpIHsKLSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJ
RmlsdGVycygqaW4pOworICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJz
KGZpbHRlciwgKmluKTsKICAgICAgICAgaWYgKCFpbnB1dEltYWdlKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChpbnB1dEltYWdlKTsKICAg
ICB9Ci0gICAgZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZWZmZWN0
LnNldFJlc3VsdENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAg
Ci0gICAgaWYgKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSkKKworICAgIGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBlZmZlY3QuY2FsY3VsYXRlQWJzb2x1
dGVJbWFnZVJlY3QoZmlsdGVyKTsKKyAgICBpZiAoYWJzb2x1dGVJbWFnZVJlY3QuaXNFbXB0eSgp
IHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXpl
KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5m
aWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlclR5cGUo
KSkgewogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAg
ICByZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVm
ZmVjdCkpOwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKKyAgICAg
ICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3JhcGhpYyhmaWx0ZXIpOworICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpGRUNvbG9yTWF0cml4OgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNv
bG9yTWF0cml4KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CisgICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CiAgICAgICAgIHJldHVy
biBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zl
cj4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwogCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9z
ZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2
YWxpZCBDSUltYWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZm
dXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1h
cDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Okdh
dXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpU
aWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJldGFpblB0
cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VH
cmFwaGljKFNvdXJjZUdyYXBoaWMmIGVmZmVjdCkKK1JldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogewotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGVmZmVjdC5maWx0
ZXIoKS5zb3VyY2VJbWFnZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRl
ci5zb3VyY2VJbWFnZSgpOwogICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIApAQCAtMjczLDIyICsyMzgsMjIgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAogICAgIHJldHVybiBtX291dHB1
dEltYWdlQnVmZmVyLmdldCgpOwogfQogICAgIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCit2
b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCiB7Ci0gICAgRmxv
YXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJ
T1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRl
cigpLmZpbHRlclNjYWxlKCksIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOworICAgIEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmNhbGN1bGF0
ZUFic29sdXRlSW1hZ2VSZWN0KGZpbHRlcikuc2l6ZSgpOworICAgIEZsb2F0U2l6ZSBjbGFtcGVk
U2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0U2l6ZSk7CisgICAgbV9vdXRwdXRJ
bWFnZUJ1ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIDEs
IGxhc3RFZmZlY3QuaW1hZ2VDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAg
aWYgKCFtX291dHB1dEltYWdlQnVmZmVyKSB7CiAgICAgICAgIGNsZWFyUmVzdWx0KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBbc2hhcmVkQ0lDb250ZXh0KCkuZ2V0KCkgcmVuZGVy
OiBtX291dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBtX291dHB1dEltYWdlQnVmZmVyLT5z
dXJmYWNlKCkuc3VyZmFjZSgpIGJvdW5kczpkZXN0UmVjdChsYXN0RWZmZWN0KSBjb2xvclNwYWNl
Omxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLnBsYXRmb3JtQ29sb3JTcGFjZSgpXTsKKyAg
ICBbc2hhcmVkQ0lDb250ZXh0KCkuZ2V0KCkgcmVuZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRv
SU9TdXJmYWNlOiBtX291dHB1dEltYWdlQnVmZmVyLT5zdXJmYWNlKCkuc3VyZmFjZSgpIGJvdW5k
czpkZXN0UmVjdChmaWx0ZXIsIGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5pbWFn
ZUNvbG9yU3BhY2UoKS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07CiB9CiAgICAgCi1GbG9hdFJlY3Qg
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVj
dCYgbGFzdEVmZmVjdCkgY29uc3QKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZTo6ZGVzdFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdCYg
bGFzdEVmZmVjdCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6ZS5zY2FsZShsYXN0RWZmZWN0
LmZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAgIEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZm
ZWN0LmNhbGN1bGF0ZUFic29sdXRlSW1hZ2VSZWN0KGZpbHRlcikuc2l6ZSgpOwogICAgIEZsb2F0
UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKICAgICBy
ZXR1cm4gZGVzdFJlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IDI2MTEw
Y2RmYjBiYjZjZjQ5MDQ1ODM4Nzc4N2FjMTBmYTE3MWNmMTguLmQzNzBmMDIyZWExMWFhYTAxYWMy
NzBiYzQyN2I5NzhmNTk3NjQ0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0y
NSw4ICsyNSw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRkVCbGVuZE5FT05f
aAotI2RlZmluZSBGRUJsZW5kTkVPTl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKIApAQCAtMTA3LDQzICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsK
IAotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0
RWZmZWN0KDEpOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUEgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOwotCi0gICAgSW50UmVjdCBlZmZlY3RCRHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlCID0gaW4yLT5wcmVtdWx0
aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7Ci0KLSAgICB1bnNpZ25lZCBzb3VyY2VQ
aXhlbEFycmF5TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOwotICAgIEFTU0VS
VChwaXhlbEFycmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7Ci0KLSAg
ICBpZiAoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7Ci0gICAgICAgIHBsYXRmb3JtQXBw
bHlORU9OKHNvdXJjZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRh
KCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBp
eGVsIHdlIGV4cGFuZCBpdCB0byB0d28uCi0gICAgQVNTRVJUKHNvdXJjZVBpeGVsQXJyYXlMZW5n
dGggPiAwKTsKLSAgICB1aW50MzJfdCBzb3VyY2VBWzJdID0gezAsIDB9OwotICAgIHVpbnQzMl90
IHNvdXJjZUJBbmREZXN0WzJdID0gezAsIDB9OwotCi0gICAgc291cmNlQVswXSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpKVswXTsKLSAgICBz
b3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzb3VyY2VQaXhl
bEFycmF5Qi0+ZGF0YSgpKVswXTsKLSAgICBwbGF0Zm9ybUFwcGx5TkVPTihyZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNl
QkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIDgp
OwotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXku
ZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBdOwotfQotCi12b2lkIEZFQmxlbmQ6OnBsYXRm
b3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFy
KiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCkKK3ZvaWQg
RkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEs
IHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFy
cmF5LCB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKQogewogICAgIHVpbnQ4X3QqIHNvdXJjZVBp
eGVsQSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNyY1BpeGVsQXJyYXlBKTsKICAgICB1
aW50OF90KiBzb3VyY2VQaXhlbEIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzcmNQaXhl
bEFycmF5Qik7CkBAIC0yMDIsOCArMTY1LDQ2IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBs
eU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyCiAg
ICAgfQogfQogCitib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKQoreworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgp
OworICAgIGF1dG8mIGlucHV0MiA9ICppbnB1dEVmZmVjdCgxKS0+ZmlsdGVySW1hZ2UoKTsKKyAg
ICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKworICAgIGF1dG8mIG91cHV0UGl4ZWxC
dWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCk7CisgICAgaWYgKCFvdXB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3VwdXRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFic29sdXRl
SW1hZ2VSZWN0KGlucHV0KTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1h
Z2VSZWN0KTsKKworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QyID0gb3V0cHV0LnJlbGF0aXZlQWJz
b2x1dGVJbWFnZVJlY3QoaW5wdXQyKTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheTIgPSBpbnB1
dDIuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
aW5wdXRJbWFnZVJlY3QyKTsKKworICAgIHVuc2lnbmVkIGlucHV0UGl4ZWxBcnJheUxlbmd0aCA9
IGlucHV0UGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgQVNTRVJUKGlucHV0UGl4ZWxBcnJheUxl
bmd0aCA9PSBpbnB1dFBpeGVsQXJyYXkyLT5sZW5ndGgoKSk7CisKKyAgICBpZiAoaW5wdXRQaXhl
bEFycmF5TGVuZ3RoID49IDgpIHsKKyAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oaW5wdXRQaXhl
bEFycmF5LT5kYXRhKCksIGlucHV0UGl4ZWxBcnJheTItPmRhdGEoKSwgb3V0cHV0UGl4ZWxBcnJh
eS5kYXRhKCksIGlucHV0UGl4ZWxBcnJheUxlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVsIHdlIGV4cGFuZCBpdCB0
byB0d28uCisgICAgQVNTRVJUKGlucHV0UGl4ZWxBcnJheUxlbmd0aCA+IDApOworICAgIHVpbnQz
Ml90IHNvdXJjZUFbMl0gPSB7IDAsIDAgfTsKKyAgICB1aW50MzJfdCBzb3VyY2VCQW5kRGVzdFsy
XSA9IHsgMCwgMCB9OworCisgICAgc291cmNlQVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihpbnB1dFBpeGVsQXJyYXktPmRhdGEoKSlbMF07CisgICAgc291cmNlQkFuZERlc3RbMF0g
PSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oaW5wdXRQaXhlbEFycmF5Mi0+ZGF0YSgpKVsw
XTsKKworICAgIHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNv
dXJjZUEpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CisgICAgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KG91dHB1dFBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJB
bmREZXN0WzBdOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLQotI2VuZGlmIC8vIEZF
QmxlbmRORU9OX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAppbmRleCBlNWZiMWZmNjY1
ZDNlYjA3ZjQ4ZWUxZDAyYmJmZmNjNmIwNDQxZjg5Li4xZmIwMzdmZTExZjY2OTFlZDAzOTRhNDRl
YWNjZDAyNzliYjZkMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCkBAIC0zNSw3
ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEaXN0YW50TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEpCit2b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShj
b25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSkKIHsKICAgICBmbG9hdCBhemltdXRoID0gZGVnMnJhZChtX2F6aW11dGgpOwogICAgIGZs
b2F0IGVsZXZhdGlvbiA9IGRlZzJyYWQobV9lbGV2YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291
cmNlLmgKaW5kZXggYzFlMzBlZGU3NTk4MzcyOGE2MzJiY2NmZmIwOTk3M2EzYTRlNzJmZC4uMDAz
ZmUxOWNkMTI2MjM5OTY3YjFiMjIyNmZkNzkwNTU0MmJlYmQ4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdo
dFNvdXJjZS5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldEF6aW11dGgo
ZmxvYXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0RWxldmF0aW9uKGZsb2F0KSBvdmVycmlkZTsK
IAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGlu
Z0RhdGEmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CiAgICAgQ29t
cHV0ZWRMaWdodGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5n
RGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmNwcAppbmRleCA1YWM3ZjQ5MGQ0Y2RhNTMzYTQxZjVjM2Q4NTQ1MzJjMThh
ZGNkYjY2Li45ODc2NTczY2ZmMjc0MTY1NGJiZDM1MmEyODBhZjMwOWE4NGZhNmMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5j
cHAKQEAgLTM0LDE1ICszNCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6
OkZFQmxlbmQoRmlsdGVyJiBmaWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6QmxlbmQpCitGRUJsZW5kOjpGRUJsZW5kKEJsZW5kTW9kZSBtb2Rl
KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVCbGVuZCkKICAgICAs
IG1fbW9kZShtb2RlKQogewogfQogCi1SZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRl
ciYgZmlsdGVyLCBCbGVuZE1vZGUgbW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUo
QmxlbmRNb2RlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0
ZXIsIG1vZGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKG1vZGUpKTsKIH0K
IAogYm9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCkBAIC01NCwyMyAr
NTQsMjkgQEAgYm9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB9CiAK
ICNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQorYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKyAgICBhdXRvJiBpbnB1dCA9ICpp
bnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSAqaW5wdXRF
ZmZlY3QoMSktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdl
KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJl
c3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFw
aGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbnB1dElt
YWdlMiA9IGlucHV0Mi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSB8fCAhaW5w
dXRJbWFnZTIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2Ug
PSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3QoaW5w
dXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICBhdXRvIGlucHV0SW1h
Z2VSZWN0MiA9IEZsb2F0UmVjdChpbnB1dDIucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRw
dXQpKTsKIAotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1f
bW9kZSB9KTsKKyAgICBHcmFwaGljc0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFn
ZS0+Y29udGV4dCgpOworCisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0
SW1hZ2UyLCBpbnB1dEltYWdlUmVjdDIpOworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxvZ2lj
YWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOwor
ICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKaW5kZXggNzBlODQwN2JmNWMyMDBkNDUy
MTZiOGY5YzA4NTE3YjUwNzllNzk2Ni4uMzM2OTNjMTk5N2JiYTdiYmRlODg5MDU4N2IxNTZlZWUz
Mzc2YzVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmgKQEAgLTIzLDIyICsyMywyMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUJsZW5kIDog
cHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUJsZW5kPiBj
cmVhdGUoRmlsdGVyJiwgQmxlbmRNb2RlKTsKKyAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0
ZShCbGVuZE1vZGUpOwogCiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbW9kZTsgfQogICAgIGJvb2wgc2V0QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAKIHByaXZhdGU6
Ci0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJs
ZW5kIjsgfQorICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNp
Z25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIs
IHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9O
KHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFy
cmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKQEAgLTQ2LDEwICs0NSw5IEBAIHBy
aXZhdGU6CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IEZFQmxlbmQoRmlsdGVyJiwgQmxlbmRNb2RlKTsKLQogICAgIEJsZW5kTW9kZSBtX21vZGU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklM
VEVSX0VGRkVDVChGRUJsZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMTY0MjJkNmRjNWI1
N2VjNmY3NDdhNDIxMGMyODU0MzMyYmExZDNlNS4uYTllNTIyYThlY2M3ZWFjODM1OWY5MjNmMGQ3
OTM1Nzc3NTY0YWRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zNSwxNiArMzUsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZp
bHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVl
cykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQorRkVDb2xv
ck1hdHJpeDo6RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0
PiYmIHZhbHVlcykKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29s
b3JNYXRyaXgpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFs
dWVzKSkKIHsKIH0KIAotUmVmPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1
ZXMpCitSZWY8RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKENvbG9yTWF0cml4
VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFQ29sb3JNYXRyaXgoZmlsdGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbG9yTWF0cml4KHR5cGUsIFdURk1vdmUodmFsdWVz
KSkpOwogfQogCiBib29sIEZFQ29sb3JNYXRyaXg6OnNldFR5cGUoQ29sb3JNYXRyaXhUeXBlIHR5
cGUpCkBAIC0yNzMsMjMgKzI3MywzOSBAQCB2b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJy
YXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50UwogICAgIH0K
IH0KIAotdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBG
RUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2UoKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICByZXR1cm4gbV90eXBlID09IEZFQ09MT1JNQVRSSVhf
VFlQRV9MVU1JTkFOQ0VUT0FMUEhBOworfQogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAg
ICAgICByZXR1cm47CitWZWN0b3I8ZmxvYXQ+IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9h
dHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQoreworICAgIFZlY3RvcjxmbG9hdD4gbm9y
bWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5vcm1h
bGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOworICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOworfQor
Citib29sIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KQoreworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOwor
ICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIAorICAgIGF1dG8gb3V0cHV0
SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIGF1dG8gaW5wdXRCdWZmZXIg
PSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmIChpbnB1dEJ1ZmZlcikgeworICAgICAgICBh
dXRvIGFic29sdXRlSW1hZ2VSZWN0ID0gRmxvYXRSZWN0KGlucHV0LnJlbGF0aXZlQWJzb2x1dGVJ
bWFnZVJlY3Qob3V0cHV0KSk7CisgICAgICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCppbnB1dEJ1ZmZlciwgYWJzb2x1dGVJbWFnZVJlY3QpOworICAgIH0KIAotICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAg
ICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9n
aWNhbFNpemUoKSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhl
bEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG91dHB1dC5jb2xvclNwYWNlKCkgfTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQ
b2ludCgpLCBvdXRwdXRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSk7CisgICAgYXV0byBw
aXhlbEJ1ZmZlciA9IG91dHB1dEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVj
dCk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsK
ICAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKQEAg
LTMxMCwxMSArMzI2LDExIEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQToKICAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5B
TkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0g
ICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsK
KyAgICBvdXRwdXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3Qp
OworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aAppbmRleCAyOWU0MWE4YWVkMWU0ZjBiNTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi5jM2Y4YmQw
YmM0YTg1ODVmYjEzNjMxY2M3ZGZmMWJlNGYzODQyMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAt
MjIsOCArMjIsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
LQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzgsNyArMzYsNyBAQCBlbnVtIENvbG9yTWF0cml4VHlwZSB7CiAK
IGNsYXNzIEZFQ29sb3JNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5
cGUsIFZlY3RvcjxmbG9hdD4mJik7CisgICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVh
dGUoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCiAgICAgQ29sb3JNYXRyaXhU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoQ29s
b3JNYXRyaXhUeXBlKTsKQEAgLTQ4LDEzICs0NiwxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
aW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRz
LCBmbG9hdCB2YWx1ZSk7CiAgICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0
ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLQorICAgIHN0YXRp
YyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWVzKTsKKyAgICAKIHByaXZhdGU6Ci0gICAgRkVDb2xvck1hdHJpeChGaWx0ZXImLCBDb2xvck1h
dHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CisgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJp
eFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29sb3JNYXRyaXgiOyB9CisgICAgYm9vbCBpc0FscGhh
SW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsK
IApAQCAtOTMsNyArOTIsNCBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVI
dWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVD
b2xvck1hdHJpeCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVy
RWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9
PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OyB9Ci1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCi0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVD
VChGRUNvbG9yTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODQ3
ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uMmNkN2NmY2I1NWI2NWY3OGU5
YTViZjQxMWI4YjhiZWQyNTJmOTliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3Bw
CkBAIC0zMyw5ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRU
cmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBo
YUZ1bmN0aW9uKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJh
bnNmZXIpCitGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhh
RnVuY3Rpb24pCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBv
bmVudFRyYW5zZmVyKQogICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1f
Z3JlZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1
bmN0aW9uKQpAQCAtNDMsMTAgKzQyLDEwIEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9u
ZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9
CiAKLVJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0
aW9uLAorUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKICAgICBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVD
b21wb25lbnRUcmFuc2ZlcihmaWx0ZXIsIHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVl
RnVuY3Rpb24sIGFscGhhRnVuY3Rpb24pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNv
bXBvbmVudFRyYW5zZmVyKHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24s
IGFscGhhRnVuY3Rpb24pKTsKIH0KIAogdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRl
SWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKQpAQCAtMTA0LDEzICsxMDMsMTQgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9
CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K2Jvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1
dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91
dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIApAQCAtMTIw
LDggKzEyMCw5IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwogICAgIGNvbXB1dGVMb29rdXBUYWJs
ZXMocmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CiAKLSAgICBJ
bnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChk
ZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdl
UmVjdChpbnB1dCk7CisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdl
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICB1
aW50OF90KiBkYXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKICAgICBmb3IgKHVu
c2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJy
YXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKQEAgLTEzMCw2ICsxMzEsOCBAQCB2b2lkIEZF
Q29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIGRhdGFb
cGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwogICAg
ICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQg
KyAzXV07CiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1
cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYg
YWxwaGFUYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0
MmEzN2IyZTEyM2VkYTg3MTE5YzRlYjM0OGE1MS4uNmFkYTljMGFiYmU1YzJmOWQ2NWJkOTE5ZmZl
YzRmMTczZDAwMzQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIyLDggKzIy
LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNs
dWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
ewogCiBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoRmlsdGVy
JiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVG
dW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOworICAgIHN0
YXRpYyBSZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdy
ZWVuRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CiAKICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIHJlZEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWRGdW5jdGlv
bjsgfQogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gZ3JlZW5GdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZ3JlZW5GdW5jdGlvbjsgfQpAQCAtNjIsMTAgKzU5LDcgQEAgcHVibGljOgog
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gYWxwaGFGdW5jdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fYWxwaGFGdW5jdGlvbjsgfQogCiBwcml2YXRlOgotICAgIEZFQ29tcG9uZW50VHJhbnNm
ZXIoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7Ci0KLSAgICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvbmVudFRyYW5zZmVy
IjsgfQorICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5j
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKIAogICAgIHVzaW5nIExvb2t1cFRhYmxl
ID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OwogCkBAIC03Nyw3ICs3MSw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBM
b29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFi
bGUmIGFscGhhVGFibGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVy
cmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04
OSw2ICs4Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQotICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkg
eyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBvbmVu
dFRyYW5zZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCA4MzM1MzA5MDgxYTI2YmEyYzMxYzNiZGFj
ODg4NjY5ZTI4ZTM0NTZkLi4zNGJlOGE3NmMyNzBlZDdhOThlZDY4MmMwMWM3YWI1MTdlMzg5OThk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9zaXRlLmNwcApAQCAtMzIsOCArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCitG
RUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlw
ZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCisgICAgOiBGaWx0ZXJF
ZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvc2l0ZSkKICAgICAsIG1fdHlwZSh0eXBl
KQogICAgICwgbV9rMShrMSkKICAgICAsIG1fazIoazIpCkBAIC00Miw5ICs0Miw5IEBAIEZFQ29t
cG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSYgdHlwZSwgZmxvCiB7CiB9CiAKLVJlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6
OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlw
ZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCitSZWY8RkVDb21wb3Np
dGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlw
ZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVDb21wb3NpdGUoZmlsdGVyLCB0eXBlLCBrMSwgazIsIGszLCBrNCkp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9zaXRlKHR5cGUsIGsxLCBrMiwgazMs
IGs0KSk7CiB9CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRpb25UeXBlIHR5cGUpCkBAIC04NywxNCArODcsNiBAQCBib29sIEZFQ29tcG9zaXRlOjpzZXRL
NChmbG9hdCBrNCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6Y29y
cmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCiBzdGF0aWMgdW5zaWduZWQgY2hhciBj
bGFtcEJ5dGUoaW50IGMpCiB7CiAgICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKQEAgLTIwMSwxMDAgKzE5MywxMDcgQEAg
aW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3UKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRkVDb21wb3NpdGU6OmNhbGN1
bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOgotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1Jf
QVRPUDoKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6IHsKICAgICAgICAgLy8g
Rm9yIEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1
bHQgb2YKICAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNv
bHV0ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCi0gICAgICAgIHNldEFi
c29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICAgICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
YXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFnZSgpOworICAgICAgICBy
ZXR1cm4gZmlsdGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dDIuaW1hZ2VSZWN0
KCksIHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgfQorCiAgICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BUklUSE1FVElDOgogICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0
aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKICAgICAgICAg
Ly8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2
ZVN1YnJlZ2lvbik7CisKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBv
ZiBib3RoIGlucHV0IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gRmlsdGVy
RWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QoZmlsdGVyLCBwcmltaXRpdmVTdWJyZWdpb24pOwog
ICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jv
b2wgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3Qq
IGluMiA9IGlucHV0RWZmZWN0KDEpOwotCisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3Qo
MCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5m
aWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIAog
ICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAg
ICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5w
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAg
ICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCi0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICAgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91
dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEs
IG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaW5wdXRJ
bWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dCk7CisgICAg
ICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisgICAgICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgYXV0byBpbnB1dEltYWdlUmVjdDIgPSBv
dXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dDIpOworICAgICAgICBpbnB1dDIu
Y29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0Miwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
KyAgICAgICAgCisgICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCppbnB1dFBpeGVs
QXJyYXksIG91dHB1dFBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIo
KTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IGF1dG8mIGZpbHRlckNvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworCisgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZl
cjIgPSBpbnB1dDIuaW1hZ2VCdWZmZXIoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFn
ZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
YXV0byBpbnB1dEltYWdlUmVjdCA9IEZsb2F0UmVjdChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1h
Z2VSZWN0KG91dHB1dCkpOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QyID0gRmxvYXRSZWN0KGlu
cHV0Mi5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOworICAgIAogICAgIHN3aXRj
aCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW5wdXRJbWFnZVJlY3QyKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdl
UmVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46
IHsKICAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0g
ICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7
Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVj
dCgpKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBpbnB1dC5hYnNvbHV0ZUltYWdl
UmVjdCgpOworICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGlucHV0Mi5hYnNvbHV0
ZUltYWdlUmVjdCgpKTsKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChvdXRwdXQu
YWJzb2x1dGVJbWFnZVJlY3QoKSk7CiAgICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0
eSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5h
dGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9u
KCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJl
Y3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbjItPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24o
KTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwg
RmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0
KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
RmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3Qp
LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYXV0byBhZGp1c3Rl
ZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIG91dHB1dC5hYnNvbHV0ZUltYWdl
UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IGRlc3RpbmF0aW9u
UmVjdCAtIGlucHV0LmFic29sdXRlSW1hZ2VSZWN0KCkubG9jYXRpb24oKTsKKyAgICAgICAgYXV0
byBzb3VyY2VSZWN0MiA9IGRlc3RpbmF0aW9uUmVjdCAtIGlucHV0Mi5hYnNvbHV0ZUltYWdlUmVj
dCgpLmxvY2F0aW9uKCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlcjIsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0Mik7CisgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWRqdXN0ZWRE
ZXN0aW5hdGlvblJlY3QsIHNvdXJjZVJlY3QsIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUlu
IH0pOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
ciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwot
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBp
bWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0
aW9uT3V0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBpbnB1dEltYWdlUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0MiwgeyB7IH0sIGltYWdlQnVmZmVyMi0+
bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAg
IGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9n
aWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0
Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
aW5wdXRJbWFnZVJlY3QsIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OlhPUik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJlY3QsIHsgeyB9LCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxT
aXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW5wdXRJbWFnZVJlY3QyKTsK
KyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1
dEltYWdlUmVjdCwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0
ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3
YzMyYWUyZjc2YWVhMGMzLi42YjA3YmExZjliMDA3MTljMGQ3OWI1ZjdlY2RjZjNiM2RiMzIzNDJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvc2l0ZS5oCkBAIC0yMiw4ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzM5LDcg
QEAgZW51bSBDb21wb3NpdGVPcGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3NpdGUgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRl
PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUo
Y29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
KTsKIAogICAgIENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CiAgICAgYm9vbCBzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSk7CkBAIC01OCwxOCArNTYsMTIgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyBy
ZXR1cm4gbV9rNDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAg
Ym9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6
Ci0gICAgRkVDb21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CisgICAgRkVDb21wb3Np
dGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZs
b2F0KTsKIAotICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwpAQCAtOTAs
MyArODIsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBvc2l0ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguY3BwCmluZGV4IDNiYmU3ODM1OThkNzA5MzVhOTVjNmYxNTZlYzI5MzNjMGU5OWYwNTAu
LjI1ZjRiNDkyZTNiODI1Njg3NDQ2OWRiZWNmOWZhOWQ4ZjY5M2M0MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcApAQCAtMzIsMTAgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25z
dCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNv
bnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBj
b25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0
ZXIsIFR5cGU6OkNvbnZvbHZlTWF0cml4KQorRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1h
dHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFz
LCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsIGNv
bnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29u
c3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRl
ckVmZmVjdDo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCkKICAgICAsIG1fa2VybmVsU2l6ZShrZXJu
ZWxTaXplKQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCiAgICAgLCBtX2JpYXMoYmlhcykKQEAg
LTQ5LDExICs0Nyw5IEBAIEZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCiAgICAgQVNTRVJUKG1fa2VybmVs
U2l6ZS5oZWlnaHQoKSA+IDApOwogfQogCi1SZWY8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2
ZU1hdHJpeDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXpl
LAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBrZXJu
ZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtl
cm5lbE1hdHJpeCkKK1JlZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVh
dGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25z
dCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUNvbnZvbHZlTWF0cml4KGZpbHRlciwga2VybmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFy
Z2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdl
dE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCiAgICAgICAgIHByZXNlcnZlQWxw
aGEsIGtlcm5lbE1hdHJpeCkpOwogfQogCkBAIC0zNjcsNDkgKzM2Myw1NSBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsCiAgICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4ocGFpbnRpbmdE
YXRhLCB4MSwgeTEsIHgyLCB5Mik7CiB9CiAKLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVjdCBGRUNvbnZvbHZlTWF0cml4OjpjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKKyAgICByZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJy
ZWdpb24pOworfQogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fcHJlc2Vy
dmVBbHBoYSA/IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKK2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYpCit7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCkt
PmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7CisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlciht
X3ByZXNlcnZlQWxwaGEgPyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQg
OiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1
dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4
ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNl
UGl4ZWxBcnJheTsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJz
b2x1dGVJbWFnZVJlY3QoaW5wdXQpOworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gaW5wdXRQaXhlbEFycmF5OwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIHNv
dXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1
dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IGlucHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGVsc2UKLSAgICAg
ICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJh
eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2Nh
bGUoKSk7CisgICAgICAgIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwogCisgICAgaWYgKCFpbnB1dFBpeGVsQXJyYXkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IG91dHB1dC5hYnNv
bHV0ZUltYWdlUmVjdCgpLnNpemUoKTsKKyAgICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdE
YXRhID0gewotICAgICAgICAqc291cmNlUGl4ZWxBcnJheSwKLSAgICAgICAgZGVzdGluYXRpb25Q
aXhlbEFycmF5LAotICAgICAgICBwYWludFNpemUud2lkdGgoKSwKLSAgICAgICAgcGFpbnRTaXpl
LmhlaWdodCgpLAorICAgICAgICAqaW5wdXRQaXhlbEFycmF5LAorICAgICAgICBvdXRwdXRQaXhl
bEFycmF5LAorICAgICAgICBpbWFnZVNpemUud2lkdGgoKSwKKyAgICAgICAgaW1hZ2VTaXplLmhl
aWdodCgpLAogICAgICAgICBtX2JpYXMgKiAyNTUsCi0gICAgICAgIG5vcm1hbGl6ZWRGbG9hdHMo
bV9rZXJuZWxNYXRyaXgpCisgICAgICAgIEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMo
bV9rZXJuZWxNYXRyaXgpCiAgICAgfTsKIAogICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBw
aXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNp
emUud2lkdGgoKTsKLSAgICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1f
a2VybmVsU2l6ZS5oZWlnaHQoKTsKKyAgICBpbnQgY2xpcFJpZ2h0ID0gaW1hZ2VTaXplLndpZHRo
KCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xpcEJvdHRvbSA9IGltYWdlU2l6
ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKIAogICAgIGlmIChjbGlwUmlnaHQg
PCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7CiAgICAgICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qg
b3B0aW1pemllZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRh
LCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICBpZiAoaW50IGl0ZXJhdGlvbnMgPSAoYWJzb2x1dGVQYWludFJlY3QoKS53
aWR0aCgpICogYWJzb2x1dGVQYWludFJlY3QoKS5oZWlnaHQoKSkgLyBzX21pbmltYWxSZWN0RGlt
ZW5zaW9uKSB7CisgICAgaWYgKGludCBpdGVyYXRpb25zID0gKGltYWdlU2l6ZS53aWR0aCgpICog
aW1hZ2VTaXplLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKICAgICAgICAg
aW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwogICAgICAgICBpbnQgY2h1bmtD
b3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7CiAKQEAgLTQyNSwxMyAr
NDI3LDE1IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
ICAgICBjbGlwUmlnaHQgKz0gbV90YXJnZXRPZmZzZXQueCgpICsgMTsKICAgICBjbGlwQm90dG9t
ICs9IG1fdGFyZ2V0T2Zmc2V0LnkoKSArIDE7CiAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LnkoKSA+
IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXpl
LndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7Ci0gICAgaWYgKGNsaXBCb3R0b20gPCBwYWlu
dFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwg
Y2xpcEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VTaXplLndpZHRoKCks
IG1fdGFyZ2V0T2Zmc2V0LnkoKSk7CisgICAgaWYgKGNsaXBCb3R0b20gPCBpbWFnZVNpemUuaGVp
Z2h0KCkpCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRv
bSwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAgaWYgKG1fdGFy
Z2V0T2Zmc2V0LngoKSA+IDApCiAgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
MCwgbV90YXJnZXRPZmZzZXQueSgpLCBtX3RhcmdldE9mZnNldC54KCksIGNsaXBCb3R0b20pOwot
ICAgIGlmIChjbGlwUmlnaHQgPCBwYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRT
aXplLndpZHRoKCksIGNsaXBCb3R0b20pOworICAgIGlmIChjbGlwUmlnaHQgPCBpbWFnZVNpemUu
d2lkdGgoKSkKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQs
IG1fdGFyZ2V0T2Zmc2V0LnkoKSwgaW1hZ2VTaXplLndpZHRoKCksIGNsaXBCb3R0b20pOworCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CmluZGV4IDY3ZDRjNjU2N2ZjZTZiMjdlZTVhYjg5NWE2ZTFlNTAwNTRlMTNkYmEuLmI5YTgxODNh
MWI4ZmZjZWMzNTU3OGQzY2UwNWM2Mjk2NTM0OTIzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5o
CkBAIC0yNCw3ICsyNCw2IEBACiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszNyw3IEBAIGVudW0gRWRnZU1v
ZGVUeXBlIHsKIAogY2xhc3MgRkVDb252b2x2ZU1hdHJpeCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRl
ciYsIGNvbnN0IEludFNpemUmLAotICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQ
b2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCi0gICAgICAgICAgICBib29s
LCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgc3RhdGljIFJlZjxGRUNvbnZvbHZlTWF0cml4
PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBG
bG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5lbFNpemUoY29u
c3QgSW50U2l6ZSYpOwpAQCAtNzcsMTQgKzc0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIFZlY3Rv
cjxmbG9hdD4ga2VybmVsTWF0cml4OwogICAgIH07CiAKLSAgICBGRUNvbnZvbHZlTWF0cml4KEZp
bHRlciYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCi0gICAgICAgICAgICBjb25zdCBJ
bnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mKTsKKyAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwg
Ym9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwog
Ci0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNv
bnZvbHZlTWF0cml4IjsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3Qg
RmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsg
fQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29s
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xMTUsMyArMTA5LDQgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb252b2x2ZU1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGlu
Zy5jcHAKaW5kZXggZWViMTcyOGRiMzVlOGFjMzAyYjI3ZTRjM2ZmMzRjYjg4NTViOWQwOS4uZjc2
Y2UyY2U5NjQzZWZkZjZjZTI1NmU5NTQ3Mzc4YTQwN2QxMzQxYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VM
aWdodGluZy5jcHAKQEAgLTI3LDE4ICsyNywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoZmls
dGVyLCBEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVz
ZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdU
Rk1vdmUobGlnaHRTb3VyY2UpLCBUeXBlOjpEaWZmdXNlTGlnaHRpbmcpCitGRURpZmZ1c2VMaWdo
dGluZzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNv
dXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBz
dXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtl
cm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBl
OjpGRURpZmZ1c2VMaWdodGluZykKIHsKIH0KIAotUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURp
ZmZ1c2VMaWdodGluZzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmIGxpZ2h0U291cmNlKQorUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdo
dGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcoZmlsdGVyLCBsaWdodGlu
Z0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgs
IGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2Fs
ZSwgZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFks
IFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjp+RkVEaWZm
dXNlTGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KIGJvb2wgRkVEaWZmdXNlTGlnaHRpbmc6OnNldERp
ZmZ1c2VDb25zdGFudChmbG9hdCBkaWZmdXNlQ29uc3RhbnQpCiB7CiAgICAgaWYgKG1fZGlmZnVz
ZUNvbnN0YW50ID09IGRpZmZ1c2VDb25zdGFudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaAppbmRl
eCBkZjYxMTRkMGZiOGUyZjNlMTEyOGI4NDI2MTVlNDc1MTNhMGRkZGMzLi44YTEwYWVjODdjOGYx
ODlmOWYwNTdjYjk0NDNlYWFlZGQ1MzhmNjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCkBA
IC0yOSw4ICsyOSw3IEBAIGNsYXNzIExpZ2h0U291cmNlOwogCiBjbGFzcyBGRURpZmZ1c2VMaWdo
dGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlm
ZnVzZUxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRURpZmZ1
c2VMaWdodGluZygpOworICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZm
dXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50OyB9CiAgICAgYm9vbCBzZXREaWZmdXNl
Q29uc3RhbnQoZmxvYXQpOwpAQCAtMzgsOCArMzcsOSBAQCBwdWJsaWM6CiAgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgRkVEaWZmdXNlTGln
aHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
UmVmPExpZ2h0U291cmNlPiYmKTsKKyAgICBGRURpZmZ1c2VMaWdodGluZyhjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRGlmZnVzZUxpZ2h0aW5nKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmNwcAppbmRleCAwNDc0OTMzOTJiYjI4MTQ2ZDhiMTY5YmEwYTdjMzJiMTZj
NTYzZmExLi4wN2ZjODNjYTdjYjY3NTZlOGUzZTg1MmExOWJlNDBiMWM5YzYwZTVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtMzEsMTggKzMxLDE3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYg
ZmlsdGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxl
Y3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpEaXNwbGFjZW1lbnRNYXApCitGRURpc3BsYWNlbWVudE1hcDo6RkVE
aXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFu
bmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQorICAgIDogRmls
dGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXApCiAgICAgLCBt
X3hDaGFubmVsU2VsZWN0b3IoeENoYW5uZWxTZWxlY3RvcikKICAgICAsIG1feUNoYW5uZWxTZWxl
Y3Rvcih5Q2hhbm5lbFNlbGVjdG9yKQogICAgICwgbV9zY2FsZShzY2FsZSkKIHsKIH0KIAotUmVm
PEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKEZpbHRlciYgZmls
dGVyLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsCi0gICAgQ2hhbm5lbFNl
bGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKK1JlZjxGRURpc3BsYWNl
bWVudE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhD
aGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxv
YXQgc2NhbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNwbGFjZW1lbnRNYXAo
ZmlsdGVyLCB4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50TWFwKHhDaGFubmVsU2VsZWN0b3Is
IHlDaGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7CiB9CiAKIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6
OnNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNl
bGVjdG9yKQpAQCAtNjksMjAgKzY4LDE0IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNj
YWxlKGZsb2F0IHNjYWxlKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjpzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
Citjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjppbWFnZUNv
bG9yU3BhY2UoKSBjb25zdAogewogICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlv
bi1maWx0ZXJzJyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFn
ZQogICAgIC8vIGFuZCBkb2VzIG5vdCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRo
ZSAnaW4nIHNvdXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBjdXJyZW50IGNv
bG9yIHNwYWNlLgogICAgIC8vIFRoZSByZXN1bHQgaXMgaW4gdGhhdCBzbWFlIGNvbG9yIHNwYWNl
IGJlY2F1c2UgaXQgaXMgYSBkaXNwbGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgRmls
dGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xv
clNwYWNlKCkpOwotfQotCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCBpbmRleCkKLXsKLSAgICAvLyBE
byBub3QgdHJhbnNmb3JtIHRoZSBmaXJzdCBwcmltaXRpdmUgaW5wdXQsIGFzIHBlciB0aGUgc3Bl
Yy4KLSAgICBpZiAoaW5kZXgpCi0gICAgICAgIGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3Qo
MCktPmZpbHRlckltYWdlKCk7CisgICAgcmV0dXJuIGlucHV0LmNvbG9yU3BhY2UoKTsKIH0KIAog
c3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNp
Z25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKQEAgLTkxLDM3ICs4NCw0MSBAQCBzdGF0aWMgaW5s
aW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVu
c2lnbmVkIHJvd0J5dAogICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRl
czsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K0Zsb2F0UmVjdCBGRURpc3BsYWNlbWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QK
IHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKyAgICByZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2
ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOworfQogCitib29sIEZFRGlzcGxhY2VtZW50
TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CiAgICAg
QVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VS
VChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBh
dXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBp
bnB1dDIgPSAqaW5wdXRFZmZlY3QoMSktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0
ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZl
ciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEo
KTsKIAotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIGlucHV0
SW1hZ2UgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RBRHJhd2luZ1JlY3QpOworICAg
IEludFJlY3QgaW5wdXRJbWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVj
dChpbnB1dCk7CisgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0gaW5wdXQuZ2V0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3Qp
OwogCi0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAvLyBUaGUgY2Fs
Y3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZv
cm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCi0gICAgYXV0byBkaXNw
bGFjZW1lbnRJbWFnZSA9IGluMi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEJEcmF3aW5nUmVj
dCk7CisgICAgSW50UmVjdCBpbnB1dEltYWdlUmVjdDIgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0
ZUltYWdlUmVjdChpbnB1dDIpOworICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBp
eGVsIHZhbHVlcyBmcm9tICdpbjInIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxp
ZWQgY29sb3IgdmFsdWVzLgorICAgIGF1dG8gaW5wdXRQaXhlbEJ1ZmZlcjIgPSBpbnB1dDIuZ2V0
UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbnB1
dEltYWdlUmVjdDIpOwogICAgIAotICAgIGlmICghaW5wdXRJbWFnZSB8fCAhZGlzcGxhY2VtZW50
SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlucHV0UGl4ZWxCdWZmZXIgfHwgIWlu
cHV0UGl4ZWxCdWZmZXIyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQoaW5w
dXRJbWFnZS0+bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UtPmxlbmd0aCgpKTsKKyAgICBB
U1NFUlQoaW5wdXRQaXhlbEJ1ZmZlci0+bGVuZ3RoKCkgPT0gaW5wdXRQaXhlbEJ1ZmZlcjItPmxl
bmd0aCgpKTsKIAotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgSW50
U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNp
emUuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIGF1dG8gaW1hZ2VTaXplID0gb3V0
cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlID0g
ZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fc2NhbGUsIG1fc2NhbGUgfSk7Cisg
ICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZFNpemVCeUZpbHRlclNjYWxlKHsgbV9z
Y2FsZSwgbV9zY2FsZSB9KTsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRo
KCkgLyAyNTUuMDsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8g
MjU1LjA7CiAgICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAw
LjU7CkBAIC0xMzAsMjYgKzEyNywyOCBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWCA9IHhDaGFubmVs
SW5kZXgoKTsKICAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFkgPSB5Q2hhbm5lbEluZGV4KCk7
CiAKLSAgICBpbnQgcm93Qnl0ZXMgPSBwYWludFNpemUud2lkdGgoKSAqIDQ7CisgICAgaW50IHJv
d0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OwogCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBwYWludFNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1h
Z2VTaXplLmhlaWdodCgpOyArK3kpIHsKICAgICAgICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkg
KiByb3dCeXRlczsKIAotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0
aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0YXJ0
T2Zmc2V0ICsgeCAqIDQ7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VTaXplLndp
ZHRoKCk7ICsreCkgeworICAgICAgICAgICAgaW50IG91dHB1dEluZGV4ID0gbGluZVN0YXJ0T2Zm
c2V0ICsgeCAqIDQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0
YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShk
ZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7
Ci0gICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29s
b3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNl
bWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOworICAgICAgICAgICAgaW50IHNyY1ggPSB4
ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWCAqIGlucHV0UGl4ZWxCdWZmZXIyLT5p
dGVtKG91dHB1dEluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7
CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29s
b3JZICogaW5wdXRQaXhlbEJ1ZmZlcjItPml0ZW0ob3V0cHV0SW5kZXggKyBkaXNwbGFjZW1lbnRD
aGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAotICAgICAgICAgICAgdW5zaWduZWQqIGRlc3Rp
bmF0aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25Q
aXhlbEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9uSW5kZXgpOwotICAgICAgICAgICAgaWYgKHNy
Y1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+
PSBwYWludFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25QaXhl
bFB0ciA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCogb3V0cHV0UGl4ZWxQdHIgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkKj4ob3V0cHV0UGl4ZWxBcnJheS5kYXRhKCkgKyBvdXRwdXRJbmRl
eCk7CisgICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBpbWFnZVNpemUud2lkdGgo
KSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IGltYWdlU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAg
ICAgICAgICpvdXRwdXRQaXhlbFB0ciA9IDA7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dEltYWdlLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQ
aXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOworICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRy
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCkg
KyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOwogICAgICAgICB9CiAg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5oCmluZGV4IGRkNzMyYTg4MTA3M2UyNjZiYzg0NmFmZTY4MTllNjc1
MTYyM2EzYTIuLmUwNjJiYmZiNzZiMWM5ZTUwNTJmZDEyM2FlZjkyNWI1YWRlN2M0ZGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDcgKzM2
LDcgQEAgZW51bSBDaGFubmVsU2VsZWN0b3JUeXBlIHsKIAogY2xhc3MgRkVEaXNwbGFjZW1lbnRN
YXAgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRGlz
cGxhY2VtZW50TWFwPiBjcmVhdGUoRmlsdGVyJiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5l
bFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNj
YWxlKTsKKyAgICBzdGF0aWMgUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoQ2hhbm5lbFNl
bGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVs
U2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAogICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvcjsgfQogICAgIGJv
b2wgc2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKQEAgLTQ4
LDIwICs0NywxNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBt
X3NjYWxlOyB9CiAgICAgYm9vbCBzZXRTY2FsZShmbG9hdCk7CiAKLSAgICB2b2lkIHNldFJlc3Vs
dENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNvbnN0IGludCkg
b3ZlcnJpZGU7Ci0KIHByaXZhdGU6Ci0gICAgRkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiwgQ2hh
bm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlD
aGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKKyAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2Vs
ZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxT
ZWxlY3RvciwgZmxvYXQgc2NhbGUpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJGRURpc3BsYWNlbWVudE1hcCI7IH0KKyAgICBpbnQgeENoYW5u
ZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBp
bnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7
IH0KIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBpbWFnZUNvbG9yU3BhY2UoKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0K
KyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGludCB4
Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQot
ICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQorICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92
ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAg
LTcyLDMgKzY4LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaXNwbGFjZW1lbnRNYXApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHAKaW5kZXggMzVmYmFiNDFlODA5MjE2ZTRiMjI0MzUxMTg2MjNlMjhmZmQ2MWVm
YS4uOTE5OTBmZTAyNWQ0NTBjZjQ1ZjI4NWFmM2YzZDI5N2Y4MTNhMTlmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcApAQCAtMzEsOCArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1G
RURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhGaWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxv
YXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZs
b2F0IHNoYWRvd09wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpEcm9w
U2hhZG93KQorRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQgc3Rk
WSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNo
YWRvd09wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURy
b3BTaGFkb3cpCiAgICAgLCBtX3N0ZFgoc3RkWCkKICAgICAsIG1fc3RkWShzdGRZKQogICAgICwg
bV9keChkeCkKQEAgLTQyLDkwICs0Miw4NSBAQCBGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhG
aWx0ZXImIGZpbHRlciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsbwogewog
fQogCi1SZWY8RkVEcm9wU2hhZG93PiBGRURyb3BTaGFkb3c6OmNyZWF0ZShGaWx0ZXImIGZpbHRl
ciwgZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xv
ciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCitSZWY8RkVEcm9wU2hhZG93PiBG
RURyb3BTaGFkb3c6OmNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURyb3BTaGFkb3coZmlsdGVyLCBzdGRYLCBzdGRZ
LCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVEcm9wU2hhZG93KHN0ZFgsIHN0ZFksIGR4LCBkeSwgc2hhZG93Q29sb3IsIHNo
YWRvd09wYWNpdHkpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkKK0ludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKIHsK
LSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOworICAgIEludFNpemUgb3V0c2V0
U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0
ZFkgfSk7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXpl
LmhlaWdodCgpIC0gbV9keSksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53
aWR0aCgpICsgbV9keCksCisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWln
aHQoKSArIG1fZHkpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgo
KSAtIG1fZHgpCisgICAgfTsKK30KKworRmxvYXRSZWN0IEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+
ZmlsdGVySW1hZ2UoKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9m
ZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWlu
dFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9
KSk7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3Qp
OworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgYXV0byBpbWFn
ZVJlY3RXaXRoT2Zmc2V0KGltYWdlUmVjdCk7CisgICAgaW1hZ2VSZWN0V2l0aE9mZnNldC5tb3Zl
KHsgbV9keCwgbV9keSB9KTsKKyAgICBpbWFnZVJlY3QudW5pdGUoaW1hZ2VSZWN0V2l0aE9mZnNl
dCk7CiAKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
S2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgYXV0byBrZXJuZWxT
aXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3Rk
WCwgbV9zdGRZIH0pOwogCiAgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQg
bXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGlt
ZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgo
KSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXpl
LmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBh
YnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7CisgICAgaW1h
Z2VSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKyAgICBpbWFn
ZVJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsK
KyAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3Qs
IHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQorYm9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7
CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CisgICAgCisgICAgYXV0byBpbnB1
dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0
dXJuOworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGaWx0ZXImIGZp
bHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0g
MiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3N0ZFgsIG1fc3RkWSB9KTsK
LSAgICBibHVyUmFkaXVzLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNp
emUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkg
fSk7CisgICAgYXV0byBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJT
Y2FsZSh7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIGF1dG8gb2Zmc2V0ID0gZmlsdGVyLnNjYWxl
ZFNpemVCeUZpbHRlclNjYWxlKHsgbV9keCwgbV9keSB9KTsKIAotICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdp
b24pOwotICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKyAgICBhdXRv
IGlucHV0SW1hZ2VSZWN0ID0gRmxvYXRSZWN0KGlucHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJl
Y3Qob3V0cHV0KSk7CiAKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBpbi0+aW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47Cisg
ICAgYXV0byBpbnB1dEltYWdlUmVjdFdpdGhPZmZzZXQgPSBpbnB1dEltYWdlUmVjdDsKKyAgICBp
bnB1dEltYWdlUmVjdFdpdGhPZmZzZXQubW92ZShvZmZzZXQpOwogCi0gICAgR3JhcGhpY3NDb250
ZXh0JiByZXN1bHRDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICByZXN1bHRD
b250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0eSk7Ci0gICAgcmVzdWx0Q29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldCk7Ci0gICAg
cmVzdWx0Q29udGV4dC5zZXRBbHBoYSgxKTsKKyAgICBhdXRvJiBvdXRwdXRDb250ZXh0ID0gb3V0
cHV0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBvdXRwdXRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93
T3BhY2l0eSk7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2Us
IGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRBbHBoYSgx
KTsKIAogICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1f
c2hhZG93Q29sb3IpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRD
b2xvclNwYWNlKCkgfTsKLSAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0
SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBy
ZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKLSAgICBpZiAo
IXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBmb3JtYXQgPSBQaXhlbEJ1
ZmZlckZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVs
Rm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2UoKSB9OworICAgIGF1dG8gc2hhZG93QXJl
YSA9IEludFJlY3QgeyBJbnRQb2ludCgpLCBvdXRwdXRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNp
emUoKSB9OworICAgIGF1dG8gc2hhZG93UGl4ZWxCdWZmZXIgPSBvdXRwdXRJbWFnZS0+Z2V0UGl4
ZWxCdWZmZXIoZm9ybWF0LCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIXNoYWRvd1BpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkg
PSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uo
c291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1
ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwotICAgIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1
ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOworICAgIGF1dG8mIHNoYWRvd1BpeGVsQXJy
YXkgPSBzaGFkb3dQaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxh
eWVySW1hZ2Uoc2hhZG93UGl4ZWxBcnJheS5kYXRhKCksIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXpl
KCksIDQgKiBzaGFkb3dQaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0
Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUlu
KTsKLSAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7Ci0gICAgcmVzdWx0Q29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9u
T3Zlcik7CisgICAgb3V0cHV0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpzaGFkb3dQaXhlbEJ1ZmZl
ciwgc2hhZG93QXJlYSk7CiAKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb24pOwotfQorICAgIG91dHB1dENvbnRleHQu
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CisgICAg
b3V0cHV0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXQuYWJz
b2x1dGVJbWFnZVJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICBvdXRwdXRDb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25P
dmVyKTsKIAotSW50T3V0c2V0cyBGRURyb3BTaGFkb3c6Om91dHNldHMoKSBjb25zdAotewotICAg
IEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXpl
KHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgc3RkOjptYXg8aW50
PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9keSksCi0gICAgICAgIHN0ZDo6bWF4PGludD4o
MCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCksCi0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwg
b3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91
dHNldFNpemUud2lkdGgoKSAtIG1fZHgpCi0gICAgfTsKKyAgICBvdXRwdXRDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVl
OwogfQogCiBUZXh0U3RyZWFtJiBGRURyb3BTaGFkb3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAxMmZlZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4
NGMuLmIyNTY4ODhhZDI1ZDdkZjk2ODcxNTQ5MmI4ZmNkMjNlNzYwNThlNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuaApAQCAtMjAsMTQgKzIwLDEzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9y
LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIEZFRHJvcFNoYWRvdyA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEcm9wU2hhZG93PiBjcmVhdGUo
RmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiwgZmxvYXQp
OworICAgIHN0YXRpYyBSZWY8RkVEcm9wU2hhZG93PiBjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQg
c3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0
IHNoYWRvd09wYWNpdHkpOwogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RkWDsgfQogICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCBzdGRYKSB7IG1f
c3RkWCA9IHN0ZFg7IH0KQEAgLTQ4LDE1ICs0NywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRT
aGFkb3dPcGFjaXR5KGZsb2F0IHNoYWRvd09wYWNpdHkpIHsgbV9zaGFkb3dPcGFjaXR5ID0gc2hh
ZG93T3BhY2l0eTsgfQogCiBwcml2YXRlOgotICAgIEZFRHJvcFNoYWRvdyhGaWx0ZXImLCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRkVEcm9w
U2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAotICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQot
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBJbnRPdXRz
ZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTcwLDMgKzY3
LDQgQEAgcHJpdmF0ZToKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRHJvcFNoYWRvdykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGI0
MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5MjM4MGYzYjZiMDEuLmE3NmE5YTIzYzU2YWRkMmMx
NzRhMDE4MDM3MGQ2YTg1YjMyOTM5MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMzAsMTYgKzMwLDE2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVGbG9vZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRlciwg
Y29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29kKQorRkVGbG9vZDo6RkVGbG9vZChjb25zdCBDb2xv
ciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZp
bHRlckVmZmVjdDo6VHlwZTo6RkVGbG9vZCkKICAgICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9y
KQogICAgICwgbV9mbG9vZE9wYWNpdHkoZmxvb2RPcGFjaXR5KQogewogfQogCi1SZWY8RkVGbG9v
ZD4gRkVGbG9vZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xv
ciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorUmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShjb25z
dCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFRmxvb2QoZmlsdGVyLCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGZsb29kQ29sb3IsIGZsb29kT3BhY2l0
eSkpOwogfQogCiBib29sIEZFRmxvb2Q6OnNldEZsb29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQpAQCAtNTgsMTQgKzU4LDIxIEBAIGJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0
IGZsb29kT3BhY2l0eSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUZsb29kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0CiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Cisg
ICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9u
KTsKK30KIAotICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmls
bFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkp
LCBjb2xvcik7Citib29sIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKQoreworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIGF1dG8gb3V0
cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGNvbG9yID0gbV9mbG9vZENvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KG1fZmxvb2RPcGFjaXR5KTsKKyAgICBvdXRwdXRJbWFn
ZS0+Y29udGV4dCgpLmZpbGxSZWN0KHsgeyB9LCBvdXRwdXRJbWFnZS0+bG9naWNhbFNpemUoKSB9
LCBjb2xvcik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSBy
ZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0
NjgyZmEwNjE3MzQ4ZS4uOWZiMTg5ZTdhZGYwNzM5MDMxYWMyYzA2ZTAzNDhjNWYwMThkM2VlNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmgKQEAgLTIyLDE0ICsyMiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xv
ci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFRmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShGaWx0ZXImLCBjb25z
dCBDb2xvciYsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBD
b2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9y
JiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBz
ZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7CkBAIC00MCwxOCArMzksMTUgQEAgcHVibGljOgog
I2lmICFVU0UoQ0cpCiAgICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVy
cG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJy
ZW50CiAgICAgLy8gY29sb3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3It
aW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KLSAgICB2
b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3Zl
cnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOyB9CisgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQogI2VuZGlmCiAKIHByaXZhdGU6
Ci0gICAgRkVGbG9vZChGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRUZsb29k
KGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCi0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZsb29kIjsgfQor
ICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxv
YXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOwogCkBAIC02MSwzICs1Nyw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZF
Rmxvb2QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDBmNmVlODdmOTVlNzU3NTE4NjNmZDJl
NWY1NDllNzRkOTcyOWRiMWYuLjEwNzIxZmFhN2UwYmM5MDQ3YzRjYTI1NDI2YTcxZmNkODAxZGE4
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC03OSwxNyArNzksMTcgQEAgaW5saW5lIHZv
aWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGlu
dCYgZGVsdGFMZWZ0LAogICAgIH0KIH0KIAotRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVy
KEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUp
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpHYXVzc2lhbkJsdXIpCitGRUdhdXNz
aWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVHYXVzc2lh
bkJsdXIpCiAgICAgLCBtX3N0ZFgoeCkKICAgICAsIG1fc3RkWSh5KQogICAgICwgbV9lZGdlTW9k
ZShlZGdlTW9kZSkKIHsKIH0KIAotUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6
Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUpCitSZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmxvYXQg
eCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFR2F1c3NpYW5CbHVyKGZpbHRlciwgeCwgeSwgZWRnZU1vZGUpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cih4LCB5LCBlZGdlTW9kZSkpOwogfQogCiB2
b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25YKGZsb2F0IHgpCkBAIC00NjUsMTEg
KzQ2NSwxMiBAQCBzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7
CiAgICAgLy8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdv
bid0IG1ha2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAv
LyBpbmZsYXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21w
YXRpYmxlIHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4
S2VybmVsU2l6ZSA9IDUwMDsKICAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+
KDIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZh
Y3RvcigpICsgMC41ZikpKTsKICAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKIH0KICAgICAKLUludFNp
emUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUg
c3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIEFTU0VSVChz
dGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAwKTsK
ICAgICBJbnRTaXplIGtlcm5lbFNpemU7CkBAIC00ODMsMTIgKzQ4NCwxMiBAQCBJbnRTaXplIEZF
R2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERl
dmlhdGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXpl
IHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNp
emUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQog
ewotICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24pKTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5z
Y2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZShzdGREZXZpYXRp
b24pKTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShG
bG9hdFNpemUgc3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKICAgICBhdXRvIGtl
cm5lbFNpemUgPSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKIApA
QCAtNDk2LDYyICs0OTcsNjEgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0
c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQogICAgIHJldHVybiB7IDMgKiBrZXJuZWxT
aXplLndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKIH0KIAotdm9p
ZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0
IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEludFNp
emUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIHsgbV9zdGRYLCBt
X3N0ZFkgfSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdl
KCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKIAotICAgIEZsb2F0
UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVj
dCgpOwogICAgIC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUg
dGhlIGFmZmVjdGVkIHBhaW50IHJlY3QuCi0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVf
Tk9ORSkgewotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFi
c29sdXRlUGFpbnRSZWN0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRn
ZU1vZGUgIT0gRURHRU1PREVfTk9ORSkKKyAgICAgICAgcmV0dXJuIGltYWdlUmVjdDsKIAorICAg
IGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwg
bV9zdGRZIH0pOworICAgIAogICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5k
IG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRp
bWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRo
KCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6
ZS5oZWlnaHQoKSAqIDAuNWYpOworICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6
ZS53aWR0aCgpICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXpl
LmhlaWdodCgpICogMC41Zik7CiAKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBh
YnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0g
ICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7CisgICAgcmV0
dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRp
dmVTdWJyZWdpb24pOworfQogCi0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOworSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0
c2V0cygpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0
U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0
KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53
aWR0aCgpIH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCitib29sIEZFR2F1c3NpYW5CbHVyOjppc0FscGhhSW1hZ2UoKSBjb25zdAogewotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICByZXR1cm4gaW5wdXRFZmZlY3Qo
MCktPmlzQWxwaGFJbWFnZSgpOworfQogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIGF1dG8mIGlu
cHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9
ICpmaWx0ZXJJbWFnZSgpOworCisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5w
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBp
ZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7
CisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7
CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBhdXRvIGlu
cHV0SW1hZ2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOwog
Ci0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9w
ZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBp
eGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1h
Z2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghbV9zdGRYICYmICFtX3N0
ZFkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBJbnRTaXpl
IGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9z
dGRZIH0pOwotICAgIGtlcm5lbFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Cisg
ICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRY
LCBtX3N0ZFkgfSk7CisgICAgYXV0byBpbWFnZVNpemUgPSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJl
Y3QoKS5zaXplKCk7CiAKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsK
LSAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKKyAgICBhdXRvIHRtcEltYWdlRGF0YSA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGltYWdlU2l6ZS5hcmVh
KCkgKiA0KTsKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5l
bFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKLX0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi1JbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkg
Y29uc3QKLXsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsg
bV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJuIHsgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0
c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCkg
fTsKKyAgICBwbGF0Zm9ybUFwcGx5KG91dHB1dFBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtl
cm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgaW1hZ2VTaXplKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVHYXVzc2lhbkJsdXI6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRh
dGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAppbmRleCA1ZmI5N2ZmYjA3MGMyZGFlYjZlYjI4
M2JlYWFhMTc2NDdjYmIyZDNlLi40ZDk1M2E4YTZmODBkNWYwYzk2ODllZTVmNWI0OThjOWMwNTRi
MTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBAIC0yMiwxNCArMjIsMTMgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEZFR2F1c3NpYW5CbHVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRn
ZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgUmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQg
eCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsKIAogICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBj
b25zdCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQp
OwpAQCAtNDAsMTQgKzM5LDEyIEBAIHB1YmxpYzoKICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2VkZ2VNb2RlOyB9CiAgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdl
TW9kZVR5cGUpOwogCi0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25z
dCBGaWx0ZXImLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBj
YWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7Ci0gICAg
c3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9u
KTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxj
dWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOwor
ICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBz
dGREZXZpYXRpb24pOwogCiBwcml2YXRlOgotICAgIEZFR2F1c3NpYW5CbHVyKEZpbHRlciYsIGZs
b2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVHYXVzc2lhbkJsdXIiOyB9CisgICAgRkVHYXVzc2lh
bkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsKIAogICAgIHN0YXRpYyBjb25z
dCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRh
dGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKIApAQCAtNjQsMTIgKzYxLDE0IEBAIHByaXZhdGU6
CiAgICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwogICAgIH07CiAKLSAgICB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3Qo
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
KyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYm9vbCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0YXRpYyB2b2lkIHBsYXRmb3Jt
QXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKQEAgLTgzLDMgKzgyLDQgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0ZJTFRFUl9FRkZFQ1QoRkVHYXVzc2lhbkJsdXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCA2NTli
MTA1NWY2MWVhYWJjNWYyOTk5MWRhMGRhMWE1ODUwNzFhZTkyLi42N2Y4ZTI4ZThiMTgyZTU1NjE5
YTVkNWE1MGNhMmE3NjI2NDI2ZTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTM1LDggKzM1LDggQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKEZpbHRlciYg
ZmlsdGVyLCBMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0
U291cmNlLCBUeXBlIHR5cGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCB0eXBlKQorRkVM
aWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmIGxpZ2h0U291cmNlLCBUeXBlIHR5cGUpCisgICAgOiBGaWx0ZXJFZmZlY3QodHlwZSkK
ICAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlwZSkKICAgICAsIG1fbGlnaHRTb3VyY2Uo
V1RGTW92ZShsaWdodFNvdXJjZSkpCiAgICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xv
cikKQEAgLTM4OCwyNiArMzg4LDE0IEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjCiAjZW5kaWYK
IH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRp
bmcoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKIHsKICAg
ICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdodGluZ0Rh
dGEgZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0
IChvciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmlu
ZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGgg
PD0gMiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGF0YS5w
aXhlbHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUg
LyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICog
Y1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0g
ICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAKICAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFj
ZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRp
bmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogCi0gICAgbV9saWdo
dFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKKyAgICBtX2xp
Z2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKGZpbHRlciwgKnRoaXMsIHBhaW50aW5nRGF0YSk7
CiAKICAgICAvLyBUb3AgbGVmdC4KICAgICBpbnQgb2Zmc2V0ID0gMDsKQEAgLTQyMiwxMCArNDEw
LDEwIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEs
IHBhaW50aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYz
LCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKIAogICAgIC8v
IEJvdHRvbSByaWdodC4KLSAgICBvZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICBvZmZzZXQgPSAoZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZSArIDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhl
bFNpemU7CiAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYz
LCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7CiAKLSAgICBp
ZiAod2lkdGggPj0gMykgeworICAgIGlmIChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPj0gMikg
ewogICAgICAgICAvLyBUb3Agcm93LgogICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwogICAg
ICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBv
ZmZzZXQgKz0gY1BpeGVsU2l6ZSkKQEAgLTQzNyw3ICs0MjUsNyBAQCBib29sIEZFTGlnaHRpbmc6
OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCiAgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
eCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIs
IGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmIChoZWlnaHQg
Pj0gMykgeworICAgIGlmIChkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID49IDIpIHsKICAgICAg
ICAgLy8gTGVmdCBjb2x1bW4uCiAgICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7CiAgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSkKQEAgLTQ0OSwxMiArNDM3LDEyIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAg
ICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVh
c2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1u
Tm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+
PSAzKSB7CisgICAgaWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyICYmIGRhdGEuaGVp
Z2h0RGVjcmVhc2VkQnlPbmUgPj0gMikgewogICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCiAg
ICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0YSwgcGFpbnRpbmdEYXRhKTsKICAgICB9CiAKLSAgICBp
bnQgbGFzdFBpeGVsID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsK
KyAgICBpbnQgbGFzdFBpeGVsID0gKGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CiAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09
IERpZmZ1c2VMaWdodGluZykgewogICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9m
ZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQogICAgICAgICAgICAgZGF0YS5w
aXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwpAQCAtNDcxLDI3ICs0NTksNDcgQEAgYm9vbCBG
RUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFTGlnaHRpbmc6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVMaWdodGluZzo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJl
Z2lvbihwcmltaXRpdmVTdWJyZWdpb24pOworfQorCitib29sIEZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCkt
PmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47CisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFy
cmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvIGlu
cHV0SW1hZ2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOwog
Ci0gICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIo
b3V0cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
aW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAKLSAgICBJbnRSZWN0IGVm
ZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVz
dGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFu
ICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhh
cyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94
KSBoYXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3Ro
cywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBm
ZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAotICAg
IEludFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsK
LSAgICBkcmF3TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6
ZS53aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBhYnNv
bHV0ZUltYWdlU2l6ZSA9IG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKTsKKworICAg
IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAx
IHBpeGVsLgorICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5v
dyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KKyAgICBpZiAoYWJzb2x1dGVJbWFnZVNpemUud2lk
dGgoKSA8PSAyIHx8IGFic29sdXRlSW1hZ2VTaXplLmhlaWdodCgpIDw9IDIpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgTGlnaHRpbmdEYXRhIGRhdGE7CisgICAgZGF0YS5waXhlbHMgPSAm
b3V0cHV0UGl4ZWxBcnJheTsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxl
IC8gMjU1LjBmOworICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSBhYnNvbHV0
ZUltYWdlU2l6ZS53aWR0aCgpICogY1BpeGVsU2l6ZTsKKyAgICBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUgPSBhYnNvbHV0ZUltYWdlU2l6ZS53aWR0aCgpIC0gMTsKKyAgICBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lID0gYWJzb2x1dGVJbWFnZVNpemUuaGVpZ2h0KCkgLSAxOworCisgICAgZHJh
d0xpZ2h0aW5nKGZpbHRlciwgZGF0YSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggYjBiYjcwYTE0ZDE3NDk1MDY3MzdlODhlMDUx
NGVlNzk2ODIwYTQ0OS4uMGI0ZDgwMDRkYjY5NjRmOTQ5MDhjYzZkMjYwNTY0YmIyYjRiMDIwZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmgKQEAgLTI3LDcgKzI3LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
Q29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
ICNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Zvcndh
cmQuaD4KQEAgLTQwLDggKzM5LDYgQEAgc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JO
ZW9uOwogCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotCiAg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0K
ICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKQEAgLTEyOCwxNiArMTI1LDE2IEBA
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQ
bGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKICAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiopOwogCi0gICAg
RkVMaWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBl
KTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
RkVMaWdodGluZyI7IH0KKyAgICBGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJj
ZT4mJiwgVHlwZSk7CiAKLSAgICBib29sIGRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYs
IGludCwgaW50KTsKKyAgICBib29sIGRyYXdMaWdodGluZyhjb25zdCBGaWx0ZXImLCBjb25zdCBM
aWdodGluZ0RhdGEmKTsKIAogICAgIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQg
eSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IpOwog
ICAgIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEm
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3RvciwgZmxvYXQgYWxwaGEp
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9y
bUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZl
N2IzZi4uNmY1YjcxNGIzZDViYzRkNjgzZjM4MTc0ZDdiYWE2OTM2YzA3OTc3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3Bw
CkBAIC0yOCwzOSArMjgsNDMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpG
RU1lcmdlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6
TWVyZ2UpCitGRU1lcmdlOjpGRU1lcmdlKCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFTWVyZ2UpCiB7CiB9CiAKLVJlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUo
RmlsdGVyJiBmaWx0ZXIpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKGZpbHRlcikpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFTWVyZ2UoKSk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKK2Jvb2wgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNT
RVJUKHNpemUgPiAwKTsKKyAgICBBU1NFUlQoIWlucHV0RWZmZWN0cygpLmlzRW1wdHkoKSk7Cisg
ICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1h
Z2UpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdl
QnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgR3JhcGhpY3NDb250ZXh0JiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRl
eHQoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJ
bWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIGZvciAoYXV0byYg
ZWZmZWN0IDogaW5wdXRFZmZlY3RzKCkpIHsKKyAgICAgICAgYXV0byYgaW5wdXQgPSAqZWZmZWN0
LT5maWx0ZXJJbWFnZSgpOworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGlucHV0Lmlt
YWdlQnVmZmVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJl
Y3QoaW5wdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICAgICAgICAg
IG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJl
Y3QpOworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJl
YW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQg
PDwgIltmZU1lcmdlIjsKICAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
dHMsIHJlcHJlc2VudGF0aW9uKTsKLSAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJ
bnB1dHMoKTsKKyAgICB1bnNpZ25lZCBzaXplID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpOwogICAg
IEFTU0VSVChzaXplID4gMCk7CiAgICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8
ICJcIl1cbiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThm
MjYwNy4uODg3YmEwZmQzM2Y4OTMyY2JmNDMzODI2OGU3YWFhNDhhZmEyZjA0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAg
LTIyLDIzICsyMiwyMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3Qu
aCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
RU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RU1lcmdlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUo
KTsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYpOworICAgIEZFTWVyZ2UoKTsKIAot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJn
ZSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAg
Ym9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTWVy
Z2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggNmFlM2Q5ODk4NjYyNmUwN2MwOTRjNTg2ZjMxOThj
OWM1OGRhZWQ2Yi4uNzQwNzA0ZTI3ODEyNDlmNGI1YzNlYTNlMTI1YjQxNTU1ODdmOWM4NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcApAQCAtMzUsMTcgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1vcnBob2xvZ3kpCitGRU1vcnBob2xvZ3k6OkZF
TW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZs
b2F0IHJhZGl1c1kpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1v
cnBob2xvZ3kpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQog
ICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7CiB9CiAKLVJlZjxGRU1vcnBob2xvZ3k+IEZFTW9y
cGhvbG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5
cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCitSZWY8RkVNb3JwaG9sb2d5PiBGRU1v
cnBob2xvZ3k6OmNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9s
b2d5KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFTW9ycGhvbG9neSh0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKIGJvb2wg
RkVNb3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSB0eXBlKQpAQCAtNzIsMTggKzcyLDYgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1ko
ZmxvYXQgcmFkaXVzWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0
ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0
ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVj
dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkp
OwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7
Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGlu
dCB3aWR0aCkKIHsKICAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKQEAgLTIzMyw1MiAr
MjIxLDY0IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKQogYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBp
bWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKICAgICBpZiAocmFkaXVzWCA8
IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVs
dGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7CisgICAgICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFn
ZSgpOworICAgICAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIoZHN0UGl4ZWxBcnJheSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0
UmVjdCBGRU1vcnBob2xvZ3k6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0
RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSBpbnB1
dC5pbWFnZVJlY3QoKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZSh7IG1fcmFkaXVzWCwgbV9yYWRp
dXNZIH0pOworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGlt
YWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKK30KIAotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKK2Jv
b2wgRkVNb3JwaG9sb2d5Ojppc0FscGhhSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1
dEVmZmVjdCgwKS0+aXNBbHBoYUltYWdlKCk7Cit9CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgYXV0byYgaW5w
dXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0g
KmZpbHRlckltYWdlKCk7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgp
KTsKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZl
ci0+ZGF0YSgpOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFi
c29sdXRlSW1hZ2VSZWN0KGlucHV0KTsKIAogICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZElu
dFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3Jt
QXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKG91dHB1dFBpeGVsQXJyYXksIGlucHV0SW1hZ2VS
ZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8gc291
cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFpbnB1dFBpeGVsQXJyYXkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0g
ICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwg
cmFkaXVzLndpZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2lu
Z1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOworICAgIHJhZGl1cyA9IGZsb29y
ZWRJbnRTaXplKGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9y
YWRpdXNZIH0pKTsKKyAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGlucHV0SW1hZ2VSZWN0Lndp
ZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CisgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihp
bnB1dEltYWdlUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAo
cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3
aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBQ
YWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJh
eSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2Vp
bGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkg
KiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWls
ZihyYWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRp
dXNZID0gY2VpbGYocmFkaXVzWSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICBpZiAocGxh
dGZvcm1BcHBseURlZ2VuZXJhdGUob3V0cHV0UGl4ZWxBcnJheSwgaW5wdXRJbWFnZVJlY3QsIHJh
ZGl1c1gsIHJhZGl1c1kpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIFBhaW50aW5nRGF0
YSBwYWludGluZ0RhdGE7CisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBpbnB1dFBp
eGVsQXJyYXkuZ2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmb3V0cHV0
UGl4ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihpbnB1dEltYWdlUmVj
dC53aWR0aCgpKTsKKyAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoaW5wdXRJbWFnZVJl
Y3QuaGVpZ2h0KCkpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCk7
CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZKTsKICAgICBwbGF0Zm9y
bUFwcGx5KHBhaW50aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2Yx
NGVkZjA3NWRlMzljNWExMS4uMDQ3YTBjYWEyNTEyNTRjZDRjNTU3N2U1ODgyZmE5OGFkNjczNTZl
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTM0LDcgKzMzLDcgQEAgZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHsKIAogY2xhc3MgRkVNb3JwaG9sb2d5IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShGaWx0ZXImLCBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBzdGF0aWMg
UmVmPEZFTW9ycGhvbG9neT4gY3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJh
ZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3Jw
aG9sb2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldE1v
cnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKQEAgLTQ2LDEzICs0NSwx
MyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRSYWRpdXNZKGZsb2F0KTsKIAogcHJpdmF0ZToKLSAg
ICBGRU1vcnBob2xvZ3koRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFk
aXVzWCwgZmxvYXQgcmFkaXVzWSk7CisgICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBob2xvZ3kiOyB9CisgICAg
Ym9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3Zl
cnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3Zl
cnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAt
ODYsMyArODUsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU1vcnBob2xvZ3kpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmlu
ZGV4IDAyNzBkYjkyNDgxYTMzOTJkM2Q1YTFlOTE3YzJkNjVhYTQxNDBmNjkuLjk2ZmZhMDFhZWE0
MWEwNTE5NzcxNTE4NWNlZjA0ODA3ZTZmOWQ0ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0zMCwxNiArMzAs
MTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU9mZnNldDo6RkVPZmZzZXQoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6Ok9mZnNldCkKK0ZFT2Zmc2V0OjpGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpCisg
ICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU9mZnNldCkKICAgICAsIG1f
ZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0Ojpj
cmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1JlZjxGRU9mZnNldD4g
RkVPZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRU9mZnNldChkeCwgZHkpKTsKIH0KIAogdm9pZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQg
ZHgpCkBAIC01MiwzMyArNTIsMzggQEAgdm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkpCiAg
ICAgbV9keSA9IGR5OwogfQogCi12b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpCitGbG9hdFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0
ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7
Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50
UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRS
ZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkp
OwotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3Qo
bWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhF
ZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
cGFpbnRSZWN0KSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlcklt
YWdlKCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBpbWFn
ZVJlY3QubW92ZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQ
cmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworCit9CisK
K2Jvb2wgRkVPZmZzZXQ6OmlzQWxwaGFJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlucHV0
RWZmZWN0KDApLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7Cisg
ICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBp
bkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Ug
fHwgIWluQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbnB1dEltYWdlID0gaW5w
dXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIGF1
dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lv
biA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwot
ICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5t
b3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAg
ICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdp
bmdSZWdpb24pOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3QoaW5wdXQucmVs
YXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICBpbnB1dEltYWdlUmVjdC5tb3Zl
KGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIAor
ICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBp
bnB1dEltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZFT2Zm
c2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlv
blR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2
YWU1Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uYTEwYTE4OWIzMGUzYzJmZGE1MzMxMzRhMzcxNzdlZTEz
NDU1ZGQ1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaApAQCAtMjIsMTMgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBm
bG9hdCBkeSk7CisgICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9h
dCBkeSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KICAgICB2b2lk
IHNldER4KGZsb2F0KTsKQEAgLTM3LDE0ICszNiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRE
eShmbG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZs
b2F0IGR5KTsKKyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7IH0KKyAg
ICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKSBvdmVycmlkZTsKKyAgICAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIGZsb2F0IG1fZHg7CkBAIC01MywzICs1Miw0IEBAIHByaXZhdGU6CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDU5OTcyMzA2
ODg2YTYzZmE0MTJiNWI3MTQxZjc0ZjljNDg3YTE0NGMuLjM4NzA3YjMwMWZkMTEwYmVjYmIwNGUy
NWNmYzk4MmEyMDVmZTY0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAgLTI3
LDE4ICsyNywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGlu
Zzo6RkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9h
dCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGln
aHRpbmcoZmlsdGVyLCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2Nh
bGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1
bGFyTGlnaHRpbmcpCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25z
dCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJj
ZSkKKyAgICA6IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3Vy
ZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxV
bml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZykKIHsKIH0KIAotUmVmPEZFU3BlY3Vs
YXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291
cmNlKQorUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUo
Y29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3Bl
Y3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRT
b3VyY2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZp
bHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVj
dWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxp
Z2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3Bl
Y3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFy
TGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KIGJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVj
dWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCiB7CiAgICAgaWYgKG1fc3BlY3Vs
YXJDb25zdGFudCA9PSBzcGVjdWxhckNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgK
aW5kZXggZTk5OGE3NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4YmYzYjI0OTU4YS4uYWM0NTBkYmRi
NjBjZDY5N2NkOGRmYzNjNzkzMThkYmY2NGFkNTMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5oCkBAIC0yNyw4ICsyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVTcGVj
dWxhckxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAg
dmlydHVhbCB+RkVTcGVjdWxhckxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1bGFy
TGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJik7CiAKICAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9CiAgICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZs
b2F0KTsKQEAgLTM5LDggKzM4LDkgQEAgcHVibGljOgogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0
ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmKTsKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwg
ZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVTcGVj
dWxhckxpZ2h0aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDM1YzUxY2JiMjI5ZGVlOTY0MmRjMWU3ZGNhMGM1ZGIy
ZmNhYzIwYWQuLjA1MzRhYmUwMDUxNzIxNjEyNDU0Zjg3YjM4NTcwZDA0MTlhM2Q3NzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5j
cHAKQEAgLTI2LDY0ICsyNiw3NCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVk
ZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZpbHRl
cikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitGRVRpbGU6OkZFVGls
ZSgpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCiB7CiB9
CiAKLVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZFVGls
ZT4gRkVUaWxlOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZShm
aWx0ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLXZvaWQg
RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRVRpbGU6OmlzQWxwaGFJbWFn
ZSgpIGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8g
d29yayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Ig
b3RoZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
aWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNl
dElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0
IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lv
biBidXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJh
Y2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgot
ICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQ
b2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9h
dFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0g
ICAgaWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlu
cHV0KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAg
IHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2Fs
ZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0
aW9uKCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBp
ZiAoIXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBpbnB1dEVmZmVjdCgw
KS0+aXNBbHBoYUltYWdlKCk7Cit9CisKK0Zsb2F0UmVjdCBGRVRpbGU6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24o
cHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKworYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVm
ZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2Uo
KTsKKworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1h
Z2VDb250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVj
dExvY2F0aW9uLnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlu
QnVmZmVyLCBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICBhdXRvIG91
dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB0aWxlSW1hZ2VDb3B5ID0gSW1hZ2VC
dWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2UpKTsKLSAgICBpZiAo
IXRpbGVJbWFnZUNvcHkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0
ID0gaW5wdXQuYWJzb2x1dGVJbWFnZVJlY3QoKTsKKyAgICBhdXRvIG91dHB1dEltYWdlUmVjdCA9
IG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpOworCisgICAgYXV0byB0aWxlUmVjdCA9IGZpbHRl
ci5tYXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXQucHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAg
IHRpbGVSZWN0ID0gZmlsdGVyLnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKHRpbGVSZWN0KTsKKwor
ICAgIGF1dG8gbWF4T3V0cHV0UmVjdCA9IGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ob3V0
cHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICBtYXhPdXRwdXRSZWN0ID0gZmlsdGVyLnNj
YWxlZFJlY3RCeUZpbHRlclNjYWxlKG1heE91dHB1dFJlY3QpOworCisgICAgYXV0byB0aWxlSW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRpbGVSZWN0LnNpemUoKSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBp
eGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCF0aWxlSW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRp
bGVJbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIHRpbGVJbWFnZUNvbnRleHQudHJhbnNsYXRl
KC10aWxlUmVjdC5sb2NhdGlvbigpKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRv
IHRpbGVJbWFnZSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGls
ZUltYWdlQnVmZmVyKSk7CisgICAgaWYgKCF0aWxlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBhdHRlcm5U
cmFuc2Zvcm0udHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2NhdGlv
bik7CisgICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUodGlsZVJlY3QubG9jYXRpb24oKSAt
IG1heE91dHB1dFJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJu
OjpjcmVhdGUodGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVy
blRyYW5zZm9ybSB9KTsKIAotICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxl
SW1hZ2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9y
bSB9KTsKKyAgICBHcmFwaGljc0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+
Y29udGV4dCgpOworICAgIG91dHB1dENvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0
ZXJuKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShw
YXR0ZXJuKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOworICAgIG91dHB1dENvbnRleHQuZmls
bFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0SW1hZ2VSZWN0LnNpemUoKSkpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlv
bikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQu
LmZiYjBhMTA2MmNiOWRmNDJlZjAyMzBlNjI0Njc2YTExZWEyNzI3OWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMjIsMjcg
KzIyLDI1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRVRp
bGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVGls
ZT4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAog
cHJpdmF0ZToKLSAgICBGRVRpbGUoRmlsdGVyJik7CisgICAgRkVUaWxlKCk7CiAKLSAgICBjb25z
dCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVGlsZSI7IH0KKyAg
ICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRmlsdGVyRWZmZWN0
VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0VHlwZVRpbGU7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFVGlsZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcAppbmRleCA3NzRlNjgyZTNiNDg1OWJiNmUyMDZhMWQyYmZhZWIwY2VhOTE5
ZjBiLi4yMmQ0Zjk5YzcyZTUyNzE3YjQ4ODE5YjVjNDljM2FmM2U3NGM3ZGUyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuY3BwCkBAIC00OCw4ICs0OCw4IEBAIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0
dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KIHN0YXRpYyBjb25zdCBp
bnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9
IDI4MzY7IC8vIG0gJSBhCiAKLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmls
dGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKK0ZFVHVyYnVs
ZW5jZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJv
b2wgc3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RVR1cmJ1bGVuY2UpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgo
YmFzZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQpA
QCAtNTksOSArNTksOSBAQCBGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRl
ciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZQogewogfQogCi1SZWY8RkVU
dXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5j
ZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBp
bnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK1JlZjxGRVR1cmJ1
bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVU
dXJidWxlbmNlKGZpbHRlciwgdHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBu
dW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9j
dGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpzZXRU
eXBlKFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC0zNjYsMjIgKzM2NiwyMCBAQCBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVG
b3JQb2ludChjb25zdAogICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9u
KFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29u
c3QKK3ZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBV
aW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9u
LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3QKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0
WSk7CiAKLSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0g
ICAgZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0
UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CiAgICAgaW50IGluZGV4
T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRy
YW5zZm9ybSgpLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgRmxv
YXRTaXplIGludmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCks
IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9
IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSAr
IDEpOwogICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwogICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IGZpbHRlclJlZ2lvbi53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAg
IHBvaW50LnNldFgocG9pbnQueCgpICsgMSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2Fs
UG9pbnQgPSBpbnZlcnNlVHJhbnNmcm9tLm1hcFBvaW50KHBvaW50KTsKKyAgICAgICAgICAgIEZs
b2F0UG9pbnQgbG9jYWxQb2ludCA9IHBvaW50LnNjYWxlZChpbnZlcnNlU2NhbGUud2lkdGgoKSwg
aW52ZXJzZVNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3Vs
YXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2Nh
bFBvaW50KTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVu
dHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKICAgICAgICAgICAgIGluZGV4T2ZQ
aXhlbENoYW5uZWwgKz0gNDsKQEAgLTM5MSwyNiArMzg5LDMyIEBAIHZvaWQgRkVUdXJidWxlbmNl
OjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGlu
Z0RhdGEmCiAKIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25Q
YXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJl
Z2lvbigqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwg
cGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5l
bmRZKTsKKyAgICBwYXJhbWV0ZXJzLT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZp
bHRlciwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmZpbHRlclJlZ2lvbiwg
KnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1l
dGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVUdXJidWxlbmNlOjpjYWxjdWxh
dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0
aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgYXV0
byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVy
ID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1
ZmZlci0+ZGF0YSgpOwogCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkp
OworICAgIEludFNpemUgb3V0cHV0U2l6ZShvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXpl
KCkpOwogCi0gICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG91dHB1
dFNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dHB1dFBpeGVsQXJyYXkuemVyb0ZpbGwoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHJv
dW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7CisgICAgSW50
U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG91dHB1dC5wcmltaXRpdmVTdWJyZWdpb24o
KS5zaXplKCkpOwogCiAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVggPSBtX2Jhc2VGcmVxdWVuY3lY
OwogICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZID0gbV9iYXNlRnJlcXVlbmN5WTsKQEAgLTQxOSwx
NCArNDIzLDE3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1
ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKICAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKIAot
ICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOworICAgIGF1dG8gYXJlYSA9IG91dHB1
dFNpemUuYXJlYSgpOwogICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgaGVpZ2h0ID0gcmVzdWx0U2l6
ZS5oZWlnaHQoKTsKKyAgICBpbnQgaGVpZ2h0ID0gb3V0cHV0U2l6ZS5oZWlnaHQoKTsKIAogICAg
IHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBoZWlnaHQgLyA4OwogICAgIHVuc2lnbmVkIG9wdGlt
YWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIHNfbWluaW1hbFJlY3RE
aW1lbnNpb24sIG1heE51bVRocmVhZHMpOworCisgICAgYXV0byBmaWx0ZXJSZWdpb24gPSBvdXRw
dXQuYWJzb2x1dGVJbWFnZVJlY3QoKTsKKwogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4g
MSkgewogICAgICAgICBQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVs
Sm9icygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhy
ZWFkTnVtYmVyKTsKIApAQCAtNDQwLDggKzQ0NywxMCBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUpvYnM7ICsraSkgewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAgIHBh
cmFtcy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0g
JmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0g
JmZpbHRlcjsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZWZmZWN0ID0gdGhpczsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMuZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOworICAgICAgICAgICAg
ICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJm91dHB1dFBpeGVsQXJyYXk7CiAgICAgICAgICAgICAg
ICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAgICAg
cGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5z
dGFydFkgPSBzdGFydFk7CkBAIC00NTIsMTIgKzQ2MSwxMyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFy
YWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xl
IHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRo
ZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIGZpbGxS
ZWdpb24oZmlsdGVyLCBvdXRwdXRQaXhlbEFycmF5LCBmaWx0ZXJSZWdpb24sIHBhaW50aW5nRGF0
YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5
cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0ZDUzNmIzN2E4MGFhZGY5MTFlYmZjZTg5Nzc0Y2QzY2Nl
Y2I1Y2ZiLi5mMjY0NjYyNTc2ZGFmNmJhMzU4MTU0ZTIzNTUzNWE0ZWQ2ZTAyNDA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5o
IgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDcgKzM3LDcgQEAgZW51bSBjbGFzcyBUdXJidWxlbmNl
VHlwZSB7CiAKIGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVs
ZW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgc3RhdGljIFJl
ZjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9v
bCBzdGl0Y2hUaWxlcyk7CiAKICAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CiAgICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKQEAgLTk2LDcg
Kzk1LDkgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxKb2JzOwogCiAgICAg
c3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0
ZXI7CisgICAgICAgIGNvbnN0IEZpbHRlciogZmlsdGVyOworICAgICAgICBGRVR1cmJ1bGVuY2Uq
IGVmZmVjdDsKKyAgICAgICAgSW50UmVjdCBmaWx0ZXJSZWdpb247CiAgICAgICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBwaXhlbEFycmF5OwogICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0
YTsKICAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwpAQCAtMTA2LDE5ICsxMDcsMTcgQEAg
cHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBh
cmFtZXRlcnMqKTsKIAotICAgIEZFVHVyYnVsZW5jZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwg
ZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAgICBGRVR1cmJ1bGVuY2UoVHVyYnVs
ZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50
IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpOwogCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRVR1cmJ1bGVuY2UiOyB9
Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwogICAg
IFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3Q7CiAgICAgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRj
aERhdGEmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5n
RGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZp
bGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hE
YXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgdm9pZCBmaWxsUmVnaW9uKGNv
bnN0IEZpbHRlciYsIFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50UmVjdCYgZmlsdGVyUmVn
aW9uLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5k
WSkgY29uc3Q7CiAKICAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKIApA
QCAtMTMyLDMgKzEzMSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFVHVyYnVsZW5jZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4
IGEyZDk5NzkzYjBkYjIyNThiYzQ3NmRkY2MyOWMwY2UyNjExMGJjMWYuLjZkMjFhNjNhM2U0YmNk
YzAyYWYwZmZmMDVhZDllMzIzOGFlY2NlYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMSw1OCArMjIsOTcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyRWZm
ZWN0OwogCi1jbGFzcyBGaWx0ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXI+IHsKK2NsYXNz
IEZpbHRlciA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxl
ID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRlVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQot
ICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVh
bCB+RmlsdGVyKCkgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8
SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291
cmNlSW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9z
b3VyY2VJbWFnZS5nZXQoKTsgfQorICAgIGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7IEludGVy
c2VjdCwgVW5pdGUgfTsKIAotICAgIEZsb2F0U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0
aW9uKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyUmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRp
b24gPSBmaWx0ZXJSZXNvbHV0aW9uOyB9CisgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKCkgY29u
c3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQorICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoY29u
c3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7
IH0KIAotICAgIGZsb2F0IGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2Fs
ZTsgfQotICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2Fs
ZSA9IHNjYWxlOyB9CisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisgICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpIHsgbV9zb3VyY2VJbWFnZVJlY3QgPSBzb3Vy
Y2VJbWFnZVJlY3Q7IH0KKyAgICAKKyAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KKyAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lv
bjsgfQogCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFNvdXJjZUlt
YWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0g
V1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9CiAKICAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KICAgICB2
b2lkIHNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVu
ZGVyaW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0Zp
bHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ1NTRmls
dGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBDbGlwT3BlcmF0aW9uIGNsaXBPcGVy
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NsaXBPcGVyYXRpb247IH0KIAotICAgIHZpcnR1YWwg
RmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3Qg
eyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBGbG9hdFNpemUg
c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdCB7IHJl
dHVybiBzaXplICogbV9maWx0ZXJTY2FsZTsgfQorCisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3RC
eUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgYXV0byBzY2FsZWRJbWFnZVJlY3QgPSBpbWFnZVJlY3Q7CisgICAgICAgIHNjYWxlZElt
YWdlUmVjdC5zY2FsZShtX2ZpbHRlclNjYWxlKTsKKyAgICAgICAgcmV0dXJuIHNjYWxlZEltYWdl
UmVjdDsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgbWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGludGVyc2VjdGlvbihwcmltaXRpdmVTdWJyZWdpb24sIG1fZmlsdGVyUmVnaW9uKTsKKyAg
ICB9CisKKyAgICBGbG9hdFJlY3QgY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0
UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NsaXBPcGVyYXRpb24gPT0gQ2xpcE9wZXJhdGlv
bjo6SW50ZXJzZWN0ID8gaW50ZXJzZWN0aW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9u
KSA6IHVuaW9uUmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgfQorCisg
ICAgRmxvYXRSZWN0IGNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3Qm
IGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gY2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwg
bWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikpOworICAgIH0KKworICAg
IEZsb2F0UG9pbnQgbWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoY29uc3QgRmxvYXRQb2lu
dCYgdXNlclNwYWNlUG9pbnQsIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAgICB7CisgICAgICAgIEZsb2F0UG9p
bnQgYWJzb2x1dGVQb2ludCA9IG1hcFBvaW50KHVzZXJTcGFjZVBvaW50LCBwcmltaXRpdmVTdWJy
ZWdpb24sIHNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKHByaW1pdGl2ZVN1YnJlZ2lvbikpOworICAg
ICAgICBGbG9hdFJlY3QgYWJzb2x1dGVJbWFnZVJlY3QgPSBzY2FsZWRSZWN0QnlGaWx0ZXJTY2Fs
ZShpbWFnZVJlY3QpOworICAgICAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgtYWJzb2x1dGVJbWFn
ZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgIHJldHVybiBhYnNvbHV0ZVBvaW50OworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCBhcHBseUZpbHRlcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNv
bHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQor
ICAgIEZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0
ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgICAgICA6IEZpbHRlckZ1
bmN0aW9uKGZpbHRlclR5cGUpCisgICAgICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkK
KyAgICAgICAgLCBtX2NsaXBPcGVyYXRpb24oY2xpcE9wZXJhdGlvbikKKyAgICB7CisgICAgfQor
CisgICAgRmlsdGVyKEZpbHRlcjo6VHlwZSBmaWx0ZXJUeXBlLCBjb25zdCBGbG9hdFNpemUmIGZp
bHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKKyAgICAgICAg
OiBGaWx0ZXJGdW5jdGlvbihmaWx0ZXJUeXBlKQorICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmls
dGVyU2NhbGUpCisgICAgICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KQor
ICAgICAgICAsIG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKKyAgICAgICAgLCBtX2NsaXBP
cGVyYXRpb24oY2xpcE9wZXJhdGlvbikKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgorICAgIEZs
b2F0U2l6ZSBtX2ZpbHRlclNjYWxlOworICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsK
KyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CisKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
IG1fc291cmNlSW1hZ2U7Ci0gICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKICAgICBSZW5kZXJpbmdNb2RlIG1f
cmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBmbG9h
dCBtX2ZpbHRlclNjYWxlIHsgMSB9OworCisgICAgQ2xpcE9wZXJhdGlvbiBtX2NsaXBPcGVyYXRp
b24geyBDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyQm91bmRhcnlTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGRmYjU1YTQxODNmN2M0
NjI0NDczMmE3NGRiYzljMzljY2I2MTAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNldC5oCkBAIC0wLDAg
KzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyQm91bmRhcnlT
ZXQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgRmxhZ3MgeworICAgICAgICBIYXNYICAgICAg
PSAxIDw8IDAsCisgICAgICAgIEhhc1kgICAgICA9IDEgPDwgMSwKKyAgICAgICAgSGFzV2lkdGgg
ID0gMSA8PCAyLAorICAgICAgICBIYXNIZWlnaHQgPSAxIDw8IDMKKyAgICB9OworCisgICAgRmls
dGVyQm91bmRhcnlTZXQoKSA9IGRlZmF1bHQ7CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldChjb25z
dCBGbG9hdFJlY3QmIGJvdW5kYXJpZXMsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCisgICAgICAg
IDogbV9ib3VuZGFyaWVzKGJvdW5kYXJpZXMpCisgICAgICAgICwgbV9mbGFncyhmbGFncykKKyAg
ICB7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4geCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzWCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9ib3VuZGFyaWVzLngoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNZKSkKKyAgICAgICAgICAgIHJldHVybiBt
X2JvdW5kYXJpZXMueSgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKwor
ICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4g
bV9ib3VuZGFyaWVzLndpZHRoKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gaGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNIZWlnaHQpKQorICAgICAgICAgICAg
cmV0dXJuIG1fYm91bmRhcmllcy5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmxvYXRSZWN0IG1fYm91bmRhcmllczsKKyAgICBP
cHRpb25TZXQ8RmxhZ3M+IG1fZmxhZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKaW5kZXggZmI2Nzc1NGU0ZmM1YmJjYTUxYzM0OGVjN2Y2M2U0Y2M5Mjdk
YjEwOC4uMmJlOGM3MGJmMjhmMzdkZjk5MzNhYmE4N2VlMTU5MmRhMzk3OWVmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcApAQCAtMjYsMTE4ICsyNiwxNCBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJy
YXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotI2luY2x1ZGUgPGFybV9uZW9uLmg+Ci0jZW5kaWYKLQot
I2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZl
Y3QoRmlsdGVyJiBmaWx0ZXIsIFR5cGUgdHlwZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikKLSAg
ICAsIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKHR5cGUpCi17Ci19Ci0KLUZpbHRlckVmZmVjdDo6
fkZpbHRlckVmZmVjdCgpID0gZGVmYXVsdDsKLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBtX2Fic29sdXRlUGFpbnRSZWN0ID0gSW50UmVj
dCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCi0gICAgICAgIG1f
YWJzb2x1dGVQYWludFJlY3QudW5pdGUoZWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsaXBB
YnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgLy8gRmlsdGVycyBpbiBTVkcgY2xpcCB0byBwcmlt
aXRpdmUgc3VicmVnaW9uLCB3aGlsZSBDU1MgZG9lc24ndC4KLSAgICBpZiAobV9jbGlwc1RvQm91
bmRzKQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRS
ZWN0KG1fbWF4RWZmZWN0UmVjdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9hYnNvbHV0ZVBhaW50
UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KG1fbWF4RWZmZWN0UmVjdCkpOwotfQotCi1GbG9h
dFBvaW50IEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQ
b2ludCB1c2VyU3BhY2VQb2ludCkgY29uc3QKLXsKLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9p
bnQgPSBtYXBQb2ludCh1c2VyU3BhY2VQb2ludCwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24s
IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24pOwotICAgIGFic29sdXRlUG9pbnQubW92ZUJ5
KC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBhYnNvbHV0ZVBv
aW50OwotfQotCi1JbnRSZWN0IEZpbHRlckVmZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBp
eGVsQnVmZmVyKGNvbnN0IEludFJlY3QmIGVmZmVjdFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UG9p
bnQgbG9jYXRpb24gPSBtX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCk7Ci0gICAgbG9jYXRp
b24ubW92ZUJ5KC1lZmZlY3RSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBJbnRSZWN0KGxv
Y2F0aW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0
ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjUmVj
dCkgY29uc3QKK0ZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSB0
eXBlKQorICAgIDogRmlsdGVyRnVuY3Rpb24odHlwZSkKIHsKLSAgICBBU1NFUlQoaGFzUmVzdWx0
KCkpOwotCi0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6
ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOwotCi0gICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoc2NhbGUpLnRyYW5zbGF0ZSgtbV9h
YnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtLm1hcFJl
Y3Qoc3JjUmVjdCk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0gICAgLy8gRkVUaWxlLCBGRVR1cmJ1bGVuY2UsIEZF
Rmxvb2QgZG9uJ3QgaGF2ZSBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFz
IHVuaXRlIHJlY3QuCi0gICAgRmxvYXRSZWN0IHN1YnJlZ2lvbjsKLSAgICBpZiAodW5zaWduZWQg
bnVtYmVyT2ZJbnB1dEVmZmVjdHMgPSBpbnB1dEVmZmVjdHMoKS5zaXplKCkpIHsKLSAgICAgICAg
c3VicmVnaW9uID0gaW5wdXRFZmZlY3QoMCktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVm
ZmVjdHM7ICsraSkgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9
IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAg
ICAgICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbik7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVn
aW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8vIEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVn
aW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAgICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZp
bHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJS
ZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAgYXV0byBib3VuZGFyaWVzID0gZWZmZWN0Qm91bmRh
cmllcygpOwotICAgIGlmIChoYXNYKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJp
ZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WShib3VuZGFy
aWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0
aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAgIGlmIChoYXNIZWlnaHQoKSkKLSAgICAgICAgc3Vi
cmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVzLmhlaWdodCgpKTsKLQotICAgIHNldEZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwotCi0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lv
biA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChzdWJyZWdpb24pOwotICAg
IGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsKLSAg
ICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKLSAgICAvLyBTYXZl
IHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQgdG8gbWFwIGxpZ2h0aW5nIHBv
aW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5hdGVzLgotICAgIHNldFVuY2xp
cHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKLQotICAgIC8vIENsaXAg
ZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KLSAgICBhdXRvIGFic29s
dXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgYWJz
b2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgYWJz
b2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKLQot
ICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJyZWdpb24pOwotICAgIHJldHVybiBzdWJy
ZWdpb247CiB9CiAKIEZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNp
Z25lZCBudW1iZXIpIGNvbnN0CkBAIC0xNDYsNTE0ICs0Miw5OSBAQCBGaWx0ZXJFZmZlY3QqIEZp
bHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAogICAgIHJldHVy
biBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwogfQogCi1zdGF0aWMgdW5zaWduZWQg
Y29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KmVmZmVjdCwgSGFzaFNldDxjb25zdCBG
aWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykKLXsKLSAgICBhbGxFZmZlY3RzLmFkZChlZmZlY3Qp
OwotICAgIHVuc2lnbmVkIHNpemUgPSBlZmZlY3QtPm51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsKLSAgICAgICAgY29sbGVjdEVmZmVj
dHMoaW4sIGFsbEVmZmVjdHMpOwotICAgIH0KLSAgICByZXR1cm4gYWxsRWZmZWN0cy5zaXplKCk7
Ci19Ci0KLXVuc2lnbmVkIEZpbHRlckVmZmVjdDo6dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygp
IGNvbnN0Ci17Ci0gICAgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiBhbGxFZmZlY3RzOwot
ICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cyh0aGlzLCBhbGxFZmZlY3RzKTsKLX0KLQotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmFwcGx5KCkKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVBy
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBpZiAo
aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1
dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgp
OwotICAgICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gQ29udmVydCBpbnB1dCByZXN1bHRzIHRv
IHRoZSBjdXJyZW50IGVmZmVjdCdzIGNvbG9yIHNwYWNlLgotICAgICAgICB0cmFuc2Zvcm1SZXN1
bHRDb2xvclNwYWNlKGluLCBpKTsKLSAgICB9Ci0KLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpOwotICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsK
LQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAi
IDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8ICJcbiAg
ZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFic29sdXRl
VW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA8PCAi
XG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAiXG4gIG1h
eEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8
PCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpIDw8ICJcbiAgZmlsdGVyIHJlc29sdXRpb24gIiA8PCBt
X2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJl
Y3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChyZXF1aXJlc1Zh
bGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRl
clJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQorICAgIC8vIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50
cyBodHRwczovL3d3dy53My5vcmcvVFIvZmlsdGVyLWVmZmVjdHMtMS8jRmlsdGVyUHJpbWl0aXZl
U3ViUmVnaW9uLgorICAgIEZsb2F0UmVjdCBkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uOwogICAg
IAotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQg
cmV0dXJuIGVhcmxpZXIuCi0gICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7Ci19Ci0KLXZvaWQg
RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCi17Ci0gICAgLy8g
TXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fu
bm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1h
Z2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxl
bmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQg
Y29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQot
I2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+
PSA2NCkgewotICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxB
cnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVt
ZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBp
eGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZh
bFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFsz
XSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5Q
aXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVu
UGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4
ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhl
bHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhl
bERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsK
LSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0Owot
Ci0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1
c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhl
bHMgPj0gMCkgewotICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAot
ICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBl
YWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgq
cGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAg
ICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxw
aGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0gICAgfQotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6
Y2xlYXJSZXN1bHQoKQotewotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0
OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQotewotICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCBy
ZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0IGhhcwotICAgIC8vIGEgcmVzdWx0LiBD
YW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlm
IChoYXNSZXN1bHQoKSkKLSAgICAgICAgY2xlYXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNp
emUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkKLSAgICAgICAgbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVz
dWx0c1JlY3Vyc2l2ZSgpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1
ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAi
RmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VC
dWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFoYXNSZXN1bHQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwg
bV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3Vs
dENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVy
UmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBEb24ndCB1c2UgdGhlIGlu
cHV0J3Mgc3VicmVnaW9uIGZvciA8ZmVUaWxlPi4KKyAgICBpZiAoIW1faW5wdXRFZmZlY3RzLmlz
RW1wdHkoKSAmJiBmaWx0ZXJUeXBlKCkgIT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKKyAgICAgICAgICAg
IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24udW5pdGUoZWZmZWN0LT5jYWxjdWxhdGVQcmltaXRp
dmVTdWJyZWdpb24oZmlsdGVyKSk7CisgICAgfSBlbHNlCisgICAgICAgIGRlZmF1bHRQcmltaXRp
dmVTdWJyZWdpb24gPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7CiAKLSAgICBJbnRSZWN0IGRlc3Rp
bmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAg
aWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0
aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhl
bEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KKyAgICBGbG9hdFJlY3QgcHJp
bWl0aXZlU3VicmVnaW9uOwogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVj
dDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVk
U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4
ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJl
c3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJy
YXk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFgobV9ib3VuZGFyeVNldC54KCkudmFsdWVf
b3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi54KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdp
b24uc2V0WShtX2JvdW5kYXJ5U2V0LnkoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVn
aW9uLnkoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRXaWR0aChtX2JvdW5kYXJ5U2V0
LndpZHRoKCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi53aWR0aCgpKSk7Cisg
ICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldEhlaWdodChtX2JvdW5kYXJ5U2V0LmhlaWdodCgpLnZh
bHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24uaGVpZ2h0KCkpKTsKKyAgICAKKyAgICBy
ZXR1cm4gcHJpbWl0aXZlU3VicmVnaW9uOwogfQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK0Zsb2F0UmVj
dCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkp
OwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUp
KTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1
dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0Owot
ICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAoIXBpeGVsQXJyYXkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5
LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJheTsKKyAgICBhdXRvIHBy
aW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOwor
ICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lv
bik7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmIHJlY3QpIGNvbnN0CitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdAogewotICAgIEludFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBz
Y2FsZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2Nh
bGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWlu
dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXpl
IHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNv
dmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxl
ZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0
aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAg
ICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7
CisgICAgaWYgKG1fZmlsdGVySW1hZ2UpCisgICAgICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5p
bWFnZVJlY3QoKTsKIAotICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBp
bnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAw
IHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdo
dCgpKQotICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdDsKIAotICAgIGlu
dCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7Ci0gICAgaW50IHhEZXN0ID0gMDsKLSAgICBpZiAo
eE9yaWdpbiA8IDApIHsKLSAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKLSAgICAgICAgeE9yaWdp
biA9IDA7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykgeworICAgICAg
ICBhdXRvJiBpbnB1dCA9ICplZmZlY3QtPmZpbHRlckltYWdlKCk7CisgICAgICAgIGltYWdlUmVj
dC51bml0ZShpbnB1dC5pbWFnZVJlY3QoKSk7CiAgICAgfQotICAgIGludCB4RW5kID0gc2NhbGVk
UmVjdC5tYXhYKCk7Ci0gICAgaWYgKHhFbmQgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKLSAg
ICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpOwotCi0gICAgaW50IHlPcmlnaW4g
PSBzY2FsZWRSZWN0LnkoKTsKLSAgICBpbnQgeURlc3QgPSAwOwotICAgIGlmICh5T3JpZ2luIDwg
MCkgewotICAgICAgICB5RGVzdCA9IC15T3JpZ2luOwotICAgICAgICB5T3JpZ2luID0gMDsKLSAg
ICB9Ci0gICAgaW50IHlFbmQgPSBzY2FsZWRSZWN0Lm1heFkoKTsKLSAgICBpZiAoeUVuZCA+IHNj
YWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5o
ZWlnaHQoKTsKLQotICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7Ci0gICAgaW50
IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2FsZWRSZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBz
b3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpICogNDsKLSAgICB1aW50OF90
KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxl
ZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OwotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBp
eGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgp
KSArIHhPcmlnaW4pICogNDsKIAotICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgewotICAgICAg
ICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOwotICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7Ci0gICAgICAgIHNvdXJjZVBp
eGVsICs9IHNvdXJjZVNjYW5saW5lOwotICAgICAgICArK3lPcmlnaW47Ci0gICAgfQorICAgIHJl
dHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0
aXZlU3VicmVnaW9uKTsKIH0KIAotc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCitJbnRSZWN0IEZpbHRlckVmZmVjdDo6
Y2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndp
ZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5w
dXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAg
ICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAg
IGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0
U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5k
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAg
IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxh
Z3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2Uu
ZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1
dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBv
bmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLQotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQg
PCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAg
ICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9u
ZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsz
XSA9IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKKyAgICBhdXRvIHByaW1pdGl2ZVN1
YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOworICAgIGlmIChw
cmltaXRpdmVTdWJyZWdpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1
dG8gaW1hZ2VSZWN0ID0gY2FsY3VsYXRlSW1hZ2VSZWN0KGZpbHRlciwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChmaWx0ZXIuc2NhbGVkUmVjdEJ5Rmls
dGVyU2NhbGUoaW1hZ2VSZWN0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5
aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit2b2lkIEZpbHRlckVm
ZmVjdDo6Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoKQogewotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAg
IHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93
Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0
YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRT
aXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAg
ZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBj
b25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0
IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCku
dmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9u
LmRhdGEoKTsKLSAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGlu
dCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAg
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBh
bHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8
aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IDA7Ci0gICAgICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFsyXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10g
PSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXIm
IHBpeGVsQnVmZmVyKQotewotICAgIC8vIEZJWE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBw
ZXJmb3JtIHRoZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4g
ZG8gaXQgZGlyZWN0bHkuCi0KLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgp
LCBwaXhlbEJ1ZmZlci5zaXplKCkpOwotICAgIGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VC
dWZmZXI6OmNsYW1wZWRTaXplKGRlc3RpbmF0aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0
ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1dG8g
YnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVy
aW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCks
IFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVz
dGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNl
KHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIsIGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIu
Zm9ybWF0KCkuYWxwaGFGb3JtYXQpOworICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRs
ZXNzIHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0IGhhcworICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUg
dXNlZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4gZXJyb25lb3VzIHN0YXRlLgorICAgIGNsZWFyRmls
dGVySW1hZ2UoKTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQorICAg
ICAgICBlZmZlY3QtPmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKCk7CiB9CiAKLXN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1h
Z2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0KQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1v
cmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZmZXJDb252ZXJzaW9uLgorICAgIGlmIChtX2ZpbHRl
ckltYWdlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6
ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgYXV0byBwcmlt
aXRpdmVTdWJyZWdpb24gPSBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKKyAg
ICBpZiAocHJpbWl0aXZlU3VicmVnaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Ig
c3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAg
ICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUs
IG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0
Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIC8vIENvbG9yIHNwYWNlIGNv
bnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBi
dWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZlcnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBjYWxjdWxh
dGVJbWFnZVJlY3QoZmlsdGVyLCBwcmltaXRpdmVTdWJyZWdpb24pOworICAgIGF1dG8gYWJzb2x1
dGVJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci5zY2FsZWRSZWN0QnlGaWx0ZXJT
Y2FsZShpbWFnZVJlY3QpKTsKICAgICAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBv
dXRwdXRBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCB0YXJnZXRDb2xvclNwYWNlIH07
Ci0gICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0
KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVz
dGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0
YSBzdG9yZWQgaW4gbV9pbWFnZUJ1ZmZlclJlc3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24K
LSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xv
clNwYWNlKGNvbG9yU3BhY2UsICptX2ltYWdlQnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0sIG91dHB1dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252
ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNv
bnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0K
LXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9u
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3Qm
IGRlc3RSZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LAotICAgIC8vIHdo
aWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29u
dmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JT
cGFjZSwgcGl4ZWxCdWZmZXIpOwotICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0
YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29w
eVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xv
clNwYWNlKQotewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CisgICAgaWYgKGFic29sdXRlSW1h
Z2VSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1
dGVJbWFnZVJlY3Quc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRl
ck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOwotCi0gICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAg
IC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAg
ICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4
ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAg
ICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpj
b2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3Qp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
QVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9y
U3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVz
dWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JT
cGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1
bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0
U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4
ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNv
cHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRp
b24sIHJlY3QpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBB
U1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIg
Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9p
bWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAi
IDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9u
IGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQp
IHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNp
b24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZm
ZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+
Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhl
bEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkg
fSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUg
aW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAg
ICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgICAgICAg
ICBBU1NFUlQobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9
PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6
OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7
Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAg
Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0
ZXJFZmZlY3QgJXMgJXAgY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQgJWR4JWQiLCBmaWx0ZXJOYW1l
KCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBl
IGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZs
b2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIu
ZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwot
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQotCi1zdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwotCi0gICAgLy8gT25seSBv
bmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAg
ICBBU1NFUlQoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1
dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0
U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0g
ICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9Owot
ICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZv
cm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7
Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZl
Y3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0
aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNT
RVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNTRVJUKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6
ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBt
X3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBp
eGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLWJvb2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAg
Ly8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBh
biBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCi0gICAgLy8gV2Ugb25seSBuZWVkIGV4dHJh
IGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhl
IGlucHV0Ci0gICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhl
bHMKLSAgICByZXR1cm4gZGVzdGluYXRpb25Db2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2Uo
KSAhPSAqZGVzdGluYXRpb25Db2xvclNwYWNlOwotI2Vsc2UKLSAgICAvLyBBZGRpdGlvbmFsIGNv
bG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURf
UEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNF
KENHKQotICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxs
eS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLSNlbHNlCi0gICAg
aWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xv
clNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRo
aXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRp
bmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59
bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1hZ2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENvbG9yU3Bh
Y2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0KLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3Rk
OjpudWxsb3B0OwotI2VuZGlmCisgICAgYXV0byBpc0FscGhhSW1hZ2UgPSB0aGlzLT5pc0FscGhh
SW1hZ2UoKTsKKyAgICBhdXRvIGltYWdlQ29sb3JTcGFjZSA9IHRoaXMtPmltYWdlQ29sb3JTcGFj
ZSgpOworICAgIAorICAgIG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKHByaW1p
dGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdlUmVjdCwgaXNBbHBoYUltYWdl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBpbWFnZUNvbG9yU3BhY2UpOworICAgIGlm
ICghbV9maWx0ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmls
dGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKToiCisgICAgICAgIDw8ICJcbiAg
cHJpbWl0aXZlU3VicmVnaW9uICIgPDwgcHJpbWl0aXZlU3VicmVnaW9uCisgICAgICAgIDw8ICJc
biAgbWF4UHJpbWl0aXZlU3VicmVnaW9uICIgPDwgZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lv
bihwcmltaXRpdmVTdWJyZWdpb24pCisgICAgICAgIDw8ICJcbiAgaW1hZ2VSZWN0ICIgPDwgaW1h
Z2VSZWN0CisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVJbWFnZWdSZWN0ICIgPDwgYWJzb2x1dGVJ
bWFnZVJlY3QpOworICAgIAorICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5j
dGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCisgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGZpbHRlcik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZpbHRlckVmZmVj
dDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25U
eXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKQEAgLTY2Myw5ICsxNDQsNyBAQCBUZXh0U3Ry
ZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVAogICAgIAogICAgIGlmIChyZXByZXNlbnRhdGlvblR5cGUgPT0gUmVw
cmVzZW50YXRpb25UeXBlOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50
U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIGlt
YWdlIiwgbV9hbHBoYUltYWdlKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcg
Y29sb3JzcGFjZSIsIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwogICAgICAgICB0
cyA8PCAiXG4iIDw8IGluZGVudDsKICAgICB9CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgK
aW5kZXggMTJkZWQyNjVhNjU1YzM3ZTc3ZTJjZjA1YjUyNzczZjJiOTZiNDcxYy4uNTBjY2IwYTZk
YTYwZDMyMWUxNDBkZmFkNzQzZGIwOTljMzllMmJlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMiwx
NyArMjIsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGlj
YXRpb24uaCIKLSNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVu
dC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Rm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgIkZpbHRlckJvdW5kYXJ5U2V0LmgiCisjaW5jbHVkZSAiRmlsdGVyRnVu
Y3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIGNs
YXNzIFRleHRTdHJlYW07CkBAIC00MiwyMTcgKzM0LDY0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRmlsdGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7
CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0
b3I7CiAKLWVudW0gRmlsdGVyRWZmZWN0VHlwZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVua25v
d24sCi0gICAgRmlsdGVyRWZmZWN0VHlwZUltYWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVUaWxl
LAotICAgIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dAotfTsKLQotY2xhc3MgRmlsdGVyRWZm
ZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZl
Y3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlw
ZSA6IHVpbnQ4X3QgewotICAgICAgICBCbGVuZCwKLSAgICAgICAgQ29sb3JNYXRyaXgsCi0gICAg
ICAgIENvbXBvbmVudFRyYW5zZmVyLAotICAgICAgICBDb21wb3NpdGUsCi0gICAgICAgIENvbnZv
bHZlTWF0cml4LAotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIERpc3BsYWNlbWVu
dE1hcCwKLSAgICAgICAgRHJvcFNoYWRvdywKLSAgICAgICAgRmxvb2QsCi0gICAgICAgIEdhdXNz
aWFuQmx1ciwKLSAgICAgICAgSW1hZ2UsCi0gICAgICAgIExpZ2h0aW5nLAotICAgICAgICBNZXJn
ZSwKLSAgICAgICAgTW9ycGhvbG9neSwKLSAgICAgICAgT2Zmc2V0LAotICAgICAgICBTcGVjdWxh
ckxpZ2h0aW5nLAotICAgICAgICBUaWxlLAotICAgICAgICBUdXJidWxlbmNlLAotICAgICAgICBT
b3VyY2VBbHBoYSwKLSAgICAgICAgU291cmNlR3JhcGhpYwotICAgIH07Ci0gICAgdmlydHVhbCB+
RmlsdGVyRWZmZWN0KCk7Ci0KLSAgICB2b2lkIGNsZWFyUmVzdWx0KCk7Ci0gICAgdm9pZCBjbGVh
clJlc3VsdHNSZWN1cnNpdmUoKTsKLQotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNv
bnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6
Om51bGxvcHQpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJl
c3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50
UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9w
dCk7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lu
cHV0RWZmZWN0czsgfQotICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNv
bnN0OwotICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4g
bV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVj
dElucHV0cygpIGNvbnN0OwotICAgIAotICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0
Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmlj
IGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZm
ZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAotICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQ7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICAvLyBS
ZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpOwotCi0gICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQg
YWxwaGEgdmFsdWVzLgotICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9h
bHBoYUltYWdlOyB9Ci0gICAgdm9pZCBzZXRJc0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7
IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1hZ2U7IH0KKyAgICBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CisgICAg
RmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0OwogCi0gICAg
SW50UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVQYWlu
dFJlY3Q7IH0KLSAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGFi
c29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50UmVj
dDsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmls
dGVyJikgY29uc3Q7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lv
bihjb25zdCBGaWx0ZXImKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0OworICAgIEludFJlY3QgY2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJlY3QoY29uc3Qg
RmlsdGVyJikgY29uc3Q7CiAKLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25z
dCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0
UmVjdDsgfSAKKyAgICBGaWx0ZXJJbWFnZSogZmlsdGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X2ZpbHRlckltYWdlLmdldCgpOyB9CisgICAgdm9pZCBjbGVhckZpbHRlckltYWdlKCkgb3ZlcnJp
ZGUgeyBtX2ZpbHRlckltYWdlID0gbnVsbHB0cjsgfQorICAgIHZvaWQgY2xlYXJGaWx0ZXJJbWFn
ZXNSZWN1cnNpdmUoKTsKIAotICAgIHZvaWQgYXBwbHkoKTsKKyAgICB2b2lkIHNldEJvdW5kYXJ5
U2V0KGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0JiBib3VuZGFyeVNldCkgeyBtX2JvdW5kYXJ5U2V0
ID0gYm91bmRhcnlTZXQ7IH0KIAotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBp
ZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8v
IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0
ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0
aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAg
ICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9CisgICAgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7
IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIC8vIFNvbGlkIGJsYWNrIGltYWdl
IHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4KKyAgICB2aXJ0dWFsIGJvb2wgaXNBbHBoYUlt
YWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgaW1hZ2VDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRp
bmdDb2xvclNwYWNlOyB9CiAKLSAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZm
ZWN0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVVbmtub3duOyB9CisgICAg
dmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSA9IDA7CiAK
LSAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNl
dHMoKTsgfQorI2lmIFVTRShDT1JFX0lNQUdFKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFw
cGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlciYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5k
aWYKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgZW51bSBj
bGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKICAgICB2
aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRw
dXQpIGNvbnN0OwogCi0gICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVj
aWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgot
ICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
NjE0LgotICAgIGJvb2wgaGFzWCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZvaWQg
c2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFzWCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1ko
KSBjb25zdCB7IHJldHVybiBtX2hhc1k7IH0KLSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkg
eyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzV2lkdGg7IH0KLSAgICB2b2lkIHNldEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9oYXNX
aWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIYXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hl
aWdodCA9IHZhbHVlOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2b2lk
IHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbjsgfQotCi0gICAgRmxvYXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoKSBjb25z
dCB7IHJldHVybiBtX2VmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICB2b2lkIHNldEVmZmVjdEJvdW5k
YXJpZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91bmRh
cmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0KLSAgICAKLSAgICB2b2lkIHNldFVuY2xpcHBlZEFi
c29sdXRlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2Fic29sdXRlVW5jbGlwcGVk
U3VicmVnaW9uID0gcjsgfQotICAgIAotICAgIEZsb2F0UG9pbnQgbWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoRmxvYXRQb2ludCkgY29uc3Q7Ci0gICAgCi0gICAgVHlwZSBmaWx0ZXJFZmZl
Y3RDbGFzc1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsgfQot
Ci0gICAgRmlsdGVyJiBmaWx0ZXIoKSB7IHJldHVybiBtX2ZpbHRlcjsgfQotICAgIGNvbnN0IEZp
bHRlciYgZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXI7IH0KLQotICAgIGJvb2wgY2xp
cHNUb0JvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcHNUb0JvdW5kczsgfQotICAgIHZvaWQg
c2V0Q2xpcHNUb0JvdW5kcyhib29sIHZhbHVlKSB7IG1fY2xpcHNUb0JvdW5kcyA9IHZhbHVlOyB9
Ci0KLSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotICAgIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzdWx0Q29sb3JTcGFjZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRSZXN1bHRDb2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX3Jlc3Vs
dENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsgfQotICAgIHZvaWQg
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsK
LSAgICAKLSAgICBzdGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHZhbHVlcykKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFs
aXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0g
bm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVkVmFs
dWVzOwotICAgIH0KLQogcHJvdGVjdGVkOgotICAgIEZpbHRlckVmZmVjdChGaWx0ZXImLCBUeXBl
KTsKLSAgICAKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7
Ci0KLSAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBv
cGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhh
IGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAg
dmlydHVhbCBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4g
dHJ1ZTsgfQotCi0gICAgLy8gSWYgYSBwcmUtbXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkg
cGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3JyZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZv
cmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCk7Ci0KLSAgICB2b2lkIGNsaXBBYnNvbHV0ZVBh
aW50UmVjdCgpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSA9IDA7CisgICAgRmlsdGVyRWZmZWN0KFR5cGUpOwogCi0gICAgdm9pZCBjb3B5SW1h
Z2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252
ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVp
bnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZmZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3Bh
Y2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRS
ZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0gICAgCi0KLSAgICBGaWx0ZXImIG1fZmlsdGVyOwog
ICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKLQotICAgIFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50UmVjdCBtX2Fic29s
dXRlUGFpbnRSZWN0OwotICAgIAotICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgb2YgYSBmaWx0ZXIg
cHJpbWl0aXZlLiBJbiBTVkcgdGhpcyBpcyB0aGUgcHJpbWl0aXZlIHN1YnJlZ2lvbiBpbiBhYnNv
bHV0ZSBjb29yZGluYXRlIHNwYWNlLgotICAgIC8vIFRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHNo
b3VsZCBuZXZlciBiZSBiaWdnZXIgdGhhbiBtX21heEVmZmVjdFJlY3QuCi0gICAgRmxvYXRSZWN0
IG1fbWF4RWZmZWN0UmVjdDsKICAgICAKLSAgICAvLyBUaGUgc3VicmVnaW9uIG9mIGEgZmlsdGVy
IHByaW1pdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIFNWRyBGaWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBs
b2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBUaGlzIGlzIFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMg
dG8gbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KLSAgICBGbG9hdFJl
Y3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247CisgICAgRmlsdGVyQm91bmRhcnlTZXQgbV9i
b3VuZGFyeVNldDsKIAotICAgIC8vIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFjdHVh
bCBTVkdGRSpFbGVtZW50LiBJcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJyZWdpb24gb2Yg
dGhlCi0gICAgLy8gZmlsdGVyIHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0ZXAuCi0gICAgRmxvYXRS
ZWN0IG1fZWZmZWN0Qm91bmRhcmllczsKLSAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24gbWFwcGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAg
ICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKKyAgICBSZWZQdHI8Rmls
dGVySW1hZ2U+IG1fZmlsdGVySW1hZ2U7CiAKLSAgICBib29sIG1fYWxwaGFJbWFnZSB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2hhc1ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNZIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1faGFzV2lkdGggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNIZWlnaHQg
eyBmYWxzZSB9OwotCi0gICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJpbWl0
aXZlIHJlZ2lvbiwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0cyBp
bnB1dHMuCi0gICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07Ci0KLSNpZiBFTkFCTEUo
REVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgRGVzdGluYXRpb25Db2xv
clNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGlu
ZWFyU1JHQigpIH07Ci0jZWxzZQogICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGlu
Z0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotI2VuZGlmCi0g
ICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpIH07Ci0gICAgCi0gICAgY29uc3QgVHlwZSBtX2ZpbHRlckVmZmVj
dENsYXNzVHlwZTsKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBGaWx0ZXJFZmZlY3QmKTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZp
bHRlckVmZmVjdCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi5pc0ZpbHRlckVmZmVjdCgpOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19GSUxURVJfRUZGRUNUKENsYXNzTmFtZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihXZWJDb3JlOjpDbGFzc05hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJU
eXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDbGFzc05hbWU7IH0gXAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCmlu
ZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3MTMyMmI3NWE3NTczZTljYzQuLjgzNzFhYTIwZjIw
Zjc0ZDBlZmFlMGI2NTY2OGY0ODExMGRjMTQ2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmgKQEAgLTM2LDE3ICszNiwxNyBAQCBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7CiAg
ICAgCiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5k
ZXJlcj4gdHJ5Q3JlYXRlKGJvb2wsIEZpbHRlckVmZmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBh
cHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUVm
ZmVjdHMoY29uc3QgRmlsdGVyJiwgRmlsdGVyRWZmZWN0JikgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBoYXNSZXN1bHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogb3V0cHV0
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRl
ckVmZmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXN0UmVjdChjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyUmVzdWx0KCkgPSAwOwogICAgIAogICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdFJl
bmRlcmVyKCkgPSBkZWZhdWx0OwogICAgIAogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdFJl
bmRlcmVyKCkgPSBkZWZhdWx0OwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVy
KEZpbHRlckVmZmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZl
cihjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmNWJiMTU2MzgxZGVj
MWUwYmFjMjJkOTExOWMyZTBlZDgwZTRhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApAQCAtMCww
ICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5oIgorCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbihUeXBlIGZpbHRlclR5cGUpCisgICAg
OiBtX2ZpbHRlclR5cGUoZmlsdGVyVHlwZSkKK3sKK30KKworc3RhdGljIGlubGluZSBjb25zdCBh
dXRvJiBmaWx0ZXJOYW1lcygpCit7CisgICAgdXNpbmcgRmlsdGVyTmFtZU1hcCA9IEhhc2hNYXA8
RmlsdGVyRnVuY3Rpb246OlR5cGUsIEF0b21TdHJpbmcsIFdURjo6SW50SGFzaDxGaWx0ZXJGdW5j
dGlvbjo6VHlwZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8RmlsdGVyRnVuY3Rpb246OlR5
cGU+PjsKKworICAgIHN0YXRpYyBhdXRvIGZpbHRlck5hbWVzID0gbWFrZU5ldmVyRGVzdHJveWVk
KFtdIHsKKyAgICAgICAgRmlsdGVyTmFtZU1hcCBmaWx0ZXJOYW1lcyA9IHsKKyAgICAgICAgICAg
IHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlciwgICAgICAgICAgICJDU1NGaWx0ZXIi
X3MgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdG
aWx0ZXIsICAgICAgICAgICAiU1ZHRmlsdGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAg
CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kLCAgICAgICAgICAg
ICAiRkVCbGVuZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVDb2xvck1hdHJpeCwgICAgICAgIkZFQ29sb3JNYXRyaXgiX3MgICAgICAgfSwK
KyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXIs
ICJGRUNvbXBvbmVudFRyYW5zZmVyIl9zIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRUNvbXBvc2l0ZSwgICAgICAgICAiRkVDb21wb3NpdGUiX3MgICAgICAgICB9LAor
ICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwgICAg
IkZFQ29udm9sdmVNYXRyaXgiX3MgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLCAgICJGRURpZmZ1c2VMaWdodGluZyJfcyAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCwgICAi
RkVEaXNwbGFjZW1lbnRNYXAiX3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVEcm9wU2hhZG93LCAgICAgICAgIkZFRHJvcFNoYWRvdyJfcyAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRmxvb2QsICAgICAgICAgICAgICJG
RUZsb29kIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpGRUdhdXNzaWFuQmx1ciwgICAgICAiRkVHYXVzc2lhbkJsdXIiX3MgICAgICB9LAorICAg
ICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZSwgICAgICAgICAgICAgIkZF
SW1hZ2UiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFTWVyZ2UsICAgICAgICAgICAgICJGRU1lcmdlIl9zICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3ksICAgICAgICAiRkVN
b3JwaG9sb2d5Il9zICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVPZmZzZXQsICAgICAgICAgICAgIkZFT2Zmc2V0Il9zICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZywgICJGRVNw
ZWN1bGFyTGlnaHRpbmciX3MgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpGRVRpbGUsICAgICAgICAgICAgICAiRkVUaWxlIl9zICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLCAgICAgICAgIkZFVHVy
YnVsZW5jZSJfcyAgICAgICAgfSwKKworICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6U291cmNlQWxwaGEsICAgICAgICAgIlNvdXJjZUFscGhhIl9zICAgICAgICAgfSwKKyAgICAg
ICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUdyYXBoaWMsICAgICAgICJTb3Vy
Y2VHcmFwaGljIl9zICAgICAgIH0KKworICAgICAgICB9OworICAgICAgICByZXR1cm4gZmlsdGVy
TmFtZXM7CisgICAgfSgpKTsKKyAgICAKKyAgICByZXR1cm4gZmlsdGVyTmFtZXMuZ2V0KCk7Cit9
CisKK2NvbnN0IEF0b21TdHJpbmcmIEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKFR5cGUgZmls
dGVyVHlwZSkKK3sKKyAgICBhdXRvIGl0ID0gZmlsdGVyTmFtZXMoKS5maW5kKGZpbHRlclR5cGUp
OworICAgIEFTU0VSVChpdCAhPSBmaWx0ZXJOYW1lcygpLmVuZCgpKTsKKyAgICByZXR1cm4gaXQt
PnZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjA2NThjYmEwOWNhMWYwYzdiNDc0NDc0OWU4MDE4MWU3YzE4NTQ4YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7
CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZp
bHRlcjsKKworY2xhc3MgRmlsdGVyRnVuY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJG
dW5jdGlvbj4geworcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAg
ICAgICBDU1NGaWx0ZXIsCisgICAgICAgIFNWR0ZpbHRlciwKKworICAgICAgICBGRU1pbmltdW0s
CisKKyAgICAgICAgRkVCbGVuZCA9IEZFTWluaW11bSwKKyAgICAgICAgRkVDb2xvck1hdHJpeCwK
KyAgICAgICAgRkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgRkVDb21wb3NpdGUsCisgICAg
ICAgIEZFQ29udm9sdmVNYXRyaXgsCisgICAgICAgIEZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAg
ICBGRURpc3BsYWNlbWVudE1hcCwKKyAgICAgICAgRkVEcm9wU2hhZG93LAorICAgICAgICBGRUZs
b29kLAorICAgICAgICBGRUdhdXNzaWFuQmx1ciwKKyAgICAgICAgRkVJbWFnZSwKKyAgICAgICAg
RkVNZXJnZSwKKyAgICAgICAgRkVNb3JwaG9sb2d5LAorICAgICAgICBGRU9mZnNldCwKKyAgICAg
ICAgRkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBGRVRpbGUsCisgICAgICAgIEZFVHVyYnVs
ZW5jZSwKKyAgICAgICAgU291cmNlQWxwaGEsCisgICAgICAgIFNvdXJjZUdyYXBoaWMsCisKKyAg
ICAgICAgRkVNYXhpbXVtID0gU291cmNlR3JhcGhpYworICAgIH07CisKKyAgICBGaWx0ZXJGdW5j
dGlvbihUeXBlKTsKKyAgICB2aXJ0dWFsIH5GaWx0ZXJGdW5jdGlvbigpID0gZGVmYXVsdDsKKwor
ICAgIFR5cGUgZmlsdGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZTsgfQorCisg
ICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA9PSBUeXBl
OjpDU1NGaWx0ZXI7IH0KKyAgICBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9m
aWx0ZXJUeXBlID09IFR5cGU6OlNWR0ZpbHRlcjsgfQorICAgIGJvb2wgaXNGaWx0ZXIoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlclR5cGUgPT0gVHlwZTo6Q1NTRmlsdGVyIHx8IG1fZmlsdGVyVHlw
ZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmlsdGVyRWZmZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJUeXBlID49IFR5cGU6OkZFTWluaW11bSAmJiBtX2ZpbHRlclR5cGUg
PD0gVHlwZTo6RkVNYXhpbXVtOyB9CisKKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZmls
dGVyTmFtZShUeXBlKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgc291cmNlQWxwaGFO
YW1lKCkgeyByZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VBbHBoYSk7IH0KKyAgICBzdGF0
aWMgY29uc3QgQXRvbVN0cmluZyYgc291cmNlR3JhcGhpY05hbWUoKSB7IHJldHVybiBmaWx0ZXJO
YW1lKFR5cGU6OlNvdXJjZUdyYXBoaWMpOyB9CisgICAgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZpbHRlck5hbWUobV9maWx0ZXJUeXBlKTsgfQorCisgICAg
dmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKyAgICB2
aXJ0dWFsIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJGaWx0ZXJJbWFnZSgpIHsgfQorCitwcml2YXRlOgorICAgIFR5cGUg
bV9maWx0ZXJUeXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpTVkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFQmxlbmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNv
bG9yTWF0cml4LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21w
b25lbnRUcmFuc2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Q29tcG9zaXRlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252
b2x2ZU1hdHJpeCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVE
aXNwbGFjZW1lbnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RURyb3BTaGFkb3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZs
b29kLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJs
dXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAg
ICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpTb3VyY2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzcwYTQ4ZTEwZTY0MTNhZWY2OWE1MDZjYTExYjk0NTRh
NjVhOTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNp
ZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRp
ZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRl
Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8RmlsdGVySW1hZ2U+
IEZpbHRlckltYWdlOjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24s
IGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdl
UmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQoreworICAgIEFTU0VSVCghSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlSW1hZ2VSZWN0LnNpemUoKSkpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsdGVySW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBp
bWFnZVJlY3QsIGFic29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIHJlbmRlcmluZ01vZGUs
IGNvbG9yU3BhY2UpKTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29u
c3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSkKKyAgICA6IG1fcHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikKKyAg
ICAsIG1faW1hZ2VSZWN0KGltYWdlUmVjdCkKKyAgICAsIG1fYWJzb2x1dGVJbWFnZVJlY3QoYWJz
b2x1dGVJbWFnZVJlY3QpCisgICAgLCBtX2lzQWxwaGFJbWFnZShpc0FscGhhSW1hZ2UpCisgICAg
LCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xv
clNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKCkK
K3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIu
Z2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29s
dXRlSW1hZ2VSZWN0LnNpemUoKSwgbV9yZW5kZXJpbmdNb2RlLCAxLCBtX2NvbG9yU3BhY2UsIFBp
eGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgcmVjdCB7IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVj
dC5zaXplKCkgfTsKKworICAgIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhl
bEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxzZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVm
ZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCByZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVyLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAg
ICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2Vf
QnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMu
aGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVz
OworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7
CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53
aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qu
cm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhf
dCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlucHV0U2l6
ZS5hcmVhKCkgKiA0KTsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3Rp
bmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAg
ICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlv
bkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFs
cGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAq
IGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwor
ICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0Uo
QUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7
CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dC
eXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0
aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdo
dCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5w
cmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNl
bHNlCisgICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsK
KyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5wdXRTaXplLmFyZWEoKSAqIDQpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
Q29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25l
bnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAg
ICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNl
Q29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21w
b25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBh
bHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBk
ZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQg
Kz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYK
K30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZl
cklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0
dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAgIGF1dG8mIHBpeGVsQnVmZmVyID0g
cGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCk7CisgICAgaWYgKHBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisKKyAgICBQaXhlbEJ1ZmZlckZv
cm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2NvbG9yU3Bh
Y2UgfTsKKworICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygp
KSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgeyB7IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH0pOworICAgICAgICBpZiAo
IXBpeGVsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBsb2dpY2Fs
U2l6ZShtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcobG9naWNhbFNpemUpKTsKKworICAgIHBpeGVsQnVmZmVyID0g
UGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIGxvZ2ljYWxTaXplKTsKKyAgICBpZiAoIXBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChhbHBoYUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAg
aWYgKGF1dG8mIHNvdXJjZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgICAgIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEoc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRh
dGEoKSwgbG9naWNhbFNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhdXRvJiBzb3Vy
Y2VQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhh
KHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIGxvZ2ljYWxT
aXplKTsKKyAgICB9CisKKyAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNp
emUgc2l6ZShyZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoc2l6ZSkpOworCisgICAgYXV0byBjaGVja2VkQXJlYSA9IHNpemUuYXJlYTxSZWNv
cmRPdmVyZmxvdz4oKSAqIDQ7CisgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQ
aXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsK
KyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7Cit9CisKK2Jvb2wgRmlsdGVySW1hZ2U6OnJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhp
cyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRy
YSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisgICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9y
IGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0
CisgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAg
ICByZXR1cm4gY29sb3JTcGFjZSAmJiBtX2NvbG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxz
ZQorICAgIC8vIEFkZGl0aW9uYWwgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVk
IG9uIG5vbi1DRworICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFNpemUgbG9naWNhbFNpemUo
bV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVz
dGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5
IHRoZSBzb3VyY2UuCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVj
dC5tYXhYKCkgPiBsb2dpY2FsU2l6ZS53aWR0aCgpIHx8IHJlY3QubWF4WSgpID4gbG9naWNhbFNp
emUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3Rp
bmF0aW9uLmxlbmd0aCgpKTsKKworICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2Vz
IG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgorICAgIGlmIChyZWN0Lm1heFgoKSA8PSAw
IHx8IHJlY3QubWF4WSgpIDw9IDAgfHwgcmVjdC54KCkgPj0gbG9naWNhbFNpemUud2lkdGgoKSB8
fCByZWN0LnkoKSA+PSBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50IHhPcmlnaW4gPSByZWN0LngoKTsKKyAgICBpbnQgeERlc3QgPSAwOworICAgIGlmICh4
T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVzdCA9IC14T3JpZ2luOworICAgICAgICB4T3JpZ2lu
ID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQgPSByZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+
IGxvZ2ljYWxTaXplLndpZHRoKCkpCisgICAgICAgIHhFbmQgPSBsb2dpY2FsU2l6ZS53aWR0aCgp
OworCisgICAgaW50IHlPcmlnaW4gPSByZWN0LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAg
IGlmICh5T3JpZ2luIDwgMCkgeworICAgICAgICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5
T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHlFbmQgPSByZWN0Lm1heFkoKTsKKyAgICBpZiAo
eUVuZCA+IGxvZ2ljYWxTaXplLmhlaWdodCgpKQorICAgICAgICB5RW5kID0gbG9naWNhbFNpemUu
aGVpZ2h0KCk7CisKKyAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OworICAgIGlu
dCBkZXN0aW5hdGlvblNjYW5saW5lID0gcmVjdC53aWR0aCgpICogNDsKKyAgICBpbnQgc291cmNl
U2NhbmxpbmUgPSBsb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5h
dGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHJlY3Qud2lkdGgoKSkg
KyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRh
dGEoKSArICgoeU9yaWdpbiAqIGxvZ2ljYWxTaXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0Owor
CisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlv
blBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0g
ZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAgICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2Nhbmxp
bmU7CisgICAgICAgICsreU9yaWdpbjsKKyAgICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAorewor
ICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0
LnNpemUoKSk7CisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3Qg
Y29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b24KKyAgICBhdXRvIGNvbnZlcnRlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
bGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgY29sb3JTcGFjZSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWNvbnZlcnRlZEltYWdlQnVmZmVyKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24g
aGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8g
YW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBh
bHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0dXJu
IGNvbnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOworfQor
CitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sK
KyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKKyAgICBG
bG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXpl
KCkpOworCisgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBp
eGVsQnVmZmVyCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xh
bXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIG1fY29sb3JTcGFjZSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1hZ2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVs
QnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdl
QnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVy
SW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAg
IGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkgPyAm
cGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkudmFsdWUoKSA6IG51bGxwdHI7CisKKyAg
ICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29s
b3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgICAgIC8vIFdlIHByZWZl
ciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgorICAgICAgICAgICAgaWYgKGF1
dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAg
ICBJbnRSZWN0IHJlY3QgeyB7IH0sIG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH07CisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQ
aXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkp
CisgICAgICAgICAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVy
LT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMt
PnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsKKyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3Bh
Y2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZv
cm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVk
UGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29weUltYWdlQnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVz
dGluYXRpb24sIHNyY1JlY3QpOworfQorCit2b2lkIEZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVs
dGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRp
cGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4K
KyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZFBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRh
KCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOworCisg
ICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4
ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKKworI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKKyAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgeworICAg
ICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAm
IH4weDNmKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERh
dGEgYnkgNjQuCisgICAgICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRx
X3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5x
X3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAg
ICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFd
LCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsy
XSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7
CisgICAgICAgICAgICB2c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOworICAgICAg
ICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0
UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKKyAgICAgICAgaWYg
KCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
CisgICAgaW50IG51bVBpeGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OworCisgICAgLy8gSXRl
cmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3Ig
Y29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewor
ICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAorICAgICAgICB1aW50
OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOworICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVu
dCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4g
YSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxEYXRhID0gYTsKKyAgICAgICAgICAgICsrcGl4ZWxE
YXRhOworICAgICAgICB9CisgICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKKyAgICAgICAg
KytwaXhlbERhdGE7CisgICAgfQorfQorCit2b2lkIEZpbHRlckltYWdlOjp0cmFuc2Zvcm1Ub0Nv
bG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisjaWYgVVNFKENH
KQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4K
KyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisjZWxzZQorICAgIGlmIChjb2xvclNwYWNl
ID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFdlIGNh
biBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNp
b24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRo
ZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0g
dGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9ybVRvQ29s
b3JTcGFjZShjb2xvclNwYWNlKTsKKworICAgIG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Cisg
ICAgbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3By
ZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJhOGU3NmYwNDlmZjI0
ZmE1Zjg0NTBiYWE0NzY1ZTYwMDI4M2E4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApAQCAtMCwwICsxLDg1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBG
aWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckltYWdlPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVj
dCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVT
dWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIEZs
b2F0UmVjdCBpbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlUmVjdDsgfQorICAgIElu
dFJlY3QgYWJzb2x1dGVJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlSW1hZ2VS
ZWN0OyB9CisgICAgSW50UmVjdCByZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRl
ckltYWdlJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVJbWFnZVJlY3QgLSBvcmln
aW4uYWJzb2x1dGVJbWFnZVJlY3QoKS5sb2NhdGlvbigpOyB9CisKKyAgICBib29sIGlzQWxwaGFJ
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbHBoYUltYWdlOyB9CisgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisgICAg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xvclNwYWNlOyB9CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklm
RXhpc3RzKCkgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFn
ZUJ1ZmZlcigpOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVy
SWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRS
ZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0
KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFs
PERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQg
Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmlsdGVy
SW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVj
dCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9vbCBpc0Fs
cGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOwor
CisgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KSBjb25zdDsKKyAgICB2b2lkIGNvcHlJbWFn
ZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkg
Y29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxC
dWZmZXIoUGl4ZWxCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IG1fcHJpbWl0aXZlU3VicmVnaW9uOwor
ICAgIEZsb2F0UmVjdCBtX2ltYWdlUmVjdDsKKyAgICBJbnRSZWN0IG1fYWJzb2x1dGVJbWFnZVJl
Y3Q7CisgICAgCisgICAgYm9vbCBtX2lzQWxwaGFJbWFnZSB7IGZhbHNlIH07CisgICAgUmVuZGVy
aW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29s
b3JTcGFjZTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAgICBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOwor
ICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCmluZGV4IDk0ZDE5NTAx
MzlkNmQyNDNhODY2MWU1ZWE1NWQyMzVhNzM4OWY1ZDUuLmYxOTE3MWZmODRlOTA0OTI3MjYyZWFk
MTFhYzQxZTA4M2M1OGVmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKQEAgLTM4LDYgKzM4LDcgQEAgZW51bSBM
aWdodFR5cGUgewogICAgIExTX1NQT1QKIH07CiAKK2NsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRl
ckVmZmVjdDsKIAogY2xhc3MgTGlnaHRTb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMaWdodFNv
dXJjZT4gewpAQCAtNjUsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgTGlnaHRUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCA9IDA7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGlu
Z0RhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgPSAwOwogICAgIC8vIHog
aXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQgYnkg
YSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2NhbGUiIGNvbnN0YW50LCB3aGljaCB0
eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQuCiAgICAgLy8geCBhbmQgeSBhcmUg
aW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0ZXJFZmZlY3QncyBidWZmZXIuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRT
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2lu
dExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1MDM4NzkxMjhm
NTRiNDRiLi5lOWIzZTUzMWNiNTk0ZTU1YThiOWVmMDUzM2U0MzRmNzU5NTUyYjg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
UG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDExICszNiwxNSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBG
aWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQgUG9pbnRMaWdo
dFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmls
dGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisgICAgYXV0byYgaW1hZ2UgPSAqZmlsdGVyRWZm
ZWN0LmZpbHRlckltYWdlKCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbWFnZS5pbWFnZVJlY3Qo
KTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGltYWdlLnByaW1pdGl2ZVN1YnJlZ2lv
bigpOworCisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXIubWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpLCBpbWFnZVJlY3QsIHByaW1p
dGl2ZVN1YnJlZ2lvbikpOwogICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBm
cm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCi0gICAgRmxv
YXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVm
ZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwg
bV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisgICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmls
dGVyLm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54
KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSwg
aW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0
WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRT
b3VyY2UuaAppbmRleCA2N2EzYTBiZDM5YThhOWNjMTk1NDM0OTg1OTZkNzExNWY0YmI5NWE1Li5h
ZGViZjk2YWEzMTI3ZWU0NWVmYTg3MDkzZDMyZGVkYzFiYWM3YTUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRT
b3VyY2UuaApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRZKGZsb2F0KSBv
dmVycmlkZTsKICAgICBib29sIHNldFooZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRl
OworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0
YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGlu
dCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxw
aGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBkYzUwN2ZmZjkwOTBhZDZjZjNhMy4u
NmViNjE4YzczYWM5ZjJhMzI5M2RhYjQ2MmE4OTM2OWQ0MzUxMzgzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5j
cHAKQEAgLTIzLDEwICsyMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDMyICszMiwzNyBAQCBSZWY8U291cmNlQWxwaGE+
IFNvdXJjZUFscGhhOjpjcmVhdGUoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNlRWZmZWN0KSk7CiB9CiAKLWNvbnN0
IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKK1NvdXJjZUFscGhhOjpTb3Vy
Y2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKKyAgICA6IEZpbHRlckVmZmVjdChG
aWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFk
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VBbHBo
YSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICByZXR1cm4gc19lZmZl
Y3ROYW1lOworICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3Qp
OwogfQogCi12b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitG
bG9hdFJlY3QgU291cmNlQWxwaGE6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBj
b25zdCBGbG9hdFJlY3QmKSBjb25zdAogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0
KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVj
dCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICByZXR1cm4gaW5wdXQuaW1hZ2VSZWN0KCk7CiB9CiAK
LXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIFNvdXJjZUFs
cGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICgh
cmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRl
ckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8mIGlucHV0ID0gKmlu
cHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJ
bWFnZSgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW5wdXRFZmZlY3QoMCkt
PmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFJlY3QgaW1h
Z2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIGZp
bHRlckNvbnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOwotICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgSW50UG9pbnQoKSwgQ29tcG9z
aXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRw
dXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0LmFi
c29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpKTsKKworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCku
ZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOworICAgIG91dHB1dEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBJbnRQb2ludCgpLCBDb21wb3NpdGVP
cGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJl
YW0mIFNvdXJjZUFscGhhOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CkBAIC02OSwxMSArNzEsNCBAQCBUZXh0U3RyZWFtJiBT
b3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeQogICAgIHJldHVybiB0czsKIH0KIAotU291cmNlQWxwaGE6OlNvdXJjZUFscGhh
KEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQotICAgIDogRmlsdGVyRWZmZWN0KHNvdXJjZUVm
ZmVjdC5maWx0ZXIoKSwgVHlwZTo6U291cmNlQWxwaGEpCi17Ci0gICAgc2V0T3BlcmF0aW5nQ29s
b3JTcGFjZShzb3VyY2VFZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpbnB1dEVm
ZmVjdHMoKS5hcHBlbmQoJnNvdXJjZUVmZmVjdCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuaAppbmRleCA2NjI5YTM2N2ZkNDMyNDJkMWM0YWFkZTY0YzU2MWU4NjRhMzk0
OTBmLi45NGZhNTZmNTJiODQ2ZTYzYWFkMjllYTRkNmY1MTk4ZmJkMDAxODYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5oCkBAIC0xNyw4ICsxNyw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAq
LwogCi0jaWZuZGVmIFNvdXJjZUFscGhhX2gKLSNkZWZpbmUgU291cmNlQWxwaGFfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIApAQCAtMjgsMTkgKzI3LDE2IEBA
IGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAg
ICAKICAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CiAK
LSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBj
b25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3Vy
Y2VBbHBoYU5hbWUoKTsgfQogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZp
bHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQogCi0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VB
bHBoYSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0
UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBTb3VyY2VBbHBoYV9oCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
U291cmNlQWxwaGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCA4OGEzNmE0MTAyNmJkM2E1ODU0
NDc4MjAyNzRjMTEwN2Q3ODM5MmU5Li40NTJlNjQ3NGZkY2VlYTkzMWRiYjk4ZmZiNWJiMDZhOWRk
ODNkY2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTIyLDQyICsyMiwzOSBAQAogCiAjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U291cmNlR3JhcGhpYz4gU291cmNl
R3JhcGhpYzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJj
ZUdyYXBoaWM6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3Jh
cGhpYyhmaWx0ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VHcmFwaGljKCkp
OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkKK1Nv
dXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMoKQorICAgIDogRmlsdGVyRWZmZWN0KFR5cGU6OlNv
dXJjZUdyYXBoaWMpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUdyYXBoaWMiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9p
ZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3Qg
U291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGbG9hdFJlY3QmKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+Zmls
dGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3Qo
KTsKLSAgICBwYWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgp
LCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJldHVybiBmaWx0ZXIu
c291cmNlSW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKK2Jvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7CisgICAgYXV0byogb3V0cHV0ID0gZmlsdGVySW1hZ2UoKTsKIAotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7Ci0gICAgaWYgKCFyZXN1bHRJ
bWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzb3VyY2VJ
bWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOworICAgIGlmICghc291cmNlSW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgYXV0byogb3V0cHV0SW1hZ2Ug
PSBvdXRwdXQtPmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IFRleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXgg
MzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2ZjYTViZi4uYjFjMTNiMWM5OGYyNzgy
YzUzYmQ3ZjVhM2U4OWI1MzdjOTYwN2M5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTE4LDQxICsx
OCwyNiBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBT
b3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRl
KEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKCk7CiAKLSAg
ICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25z
dCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VH
cmFwaGljTmFtZSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhpYyhGaWx0ZXImIGZp
bHRlcikKLSAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpTb3VyY2VHcmFwaGlj
KQotICAgIHsKLSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdyYXBoaWMoKTsKIAotICAgIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlR3JhcGhpYyI7
IH0KLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0OyB9CiB9
OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpTb3VyY2VHcmFwaGljKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlckVmZmVj
dENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhp
YzsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi0KLSNlbmRpZiAvLyBTb3VyY2VH
cmFwaGljX2gKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChTb3VyY2VHcmFw
aGljKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9TcG90TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCmluZGV4IDcxNjA3YWIwMGZmOWQ2YTZkMDE2OTFk
OWJiYjg1NTNkMWYzNDhkMDAuLjY1N2IxOGQ2ODhlY2NiMTUyYmQwMjBhYTY2YTU5NzI0NTdhMDhk
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U3BvdExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKQEAgLTQxLDExICs0MSwxNSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAvLyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVz
c2lvbiB0ZXN0cwogc3RhdGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZm
OwogCi12b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJF
ZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIFNw
b3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29u
c3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
KQogewotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOworICAgIGF1dG8m
IGltYWdlID0gKmZpbHRlckVmZmVjdC5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8gaW1hZ2VSZWN0
ID0gaW1hZ2UuaW1hZ2VSZWN0KCk7CisgICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBpbWFn
ZS5wcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICAKKyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZ
KGZpbHRlci5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9u
Lnh5KCksIGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKSk7CiAgICAgLy8gVG8gc2NhbGUg
WiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBk
aXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFw
UG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1f
dXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKKyAgICBG
bG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXIubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
eyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnkoKSB9LCBpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiAg
ICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKG1hcHBlZFoueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54
KCkpOwogICAgIAogICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3IgPSBtX3VzZXJTcGFj
ZVBvaW50c0F0IC0gbV91c2VyU3BhY2VQb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmluZGV4
IDM1MTUxNjM1MDc3ZWVmMGU3M2MyNmFlNDQyYTVlYTUzNGZkMWYzYmYuLmZlM2YyZjNmYzliNTg4
YWJmNDI4YmU5ZGU2ZjM2NzkxMzZiOTNiZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaApAQCAtNTAs
NyArNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBv
dmVycmlkZTsKICAgICBib29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsK
IAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGlu
Z0RhdGEmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CiAgICAgQ29t
cHV0ZWRMaWdodGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5n
RGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNv
Y29hLmNwcAppbmRleCA5YWVhNWYxYzA3MmMwOWJmMDYzZjQ5OTllMDNiMjE5ZTg1ZDdlMmQ5Li5k
NjdiMjliNTFjNzkxZTUyMTVlYjk4OTc1ZmQ5Y2ViNmFjNGZjMDcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VDb2NvYS5jcHAKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Gb3JtYXQuaCIK
KyNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwCmluZGV4IDlkNmMyY2RkMDVmOTQ5YjYzNGNhZmExN2FjMTdkYjVjMDJiNWI2MTEuLjUwMjk3
MGJiMGJmY2ZiOWZlZTkyNmQxNjBjMDE0MTY4M2ExYzU2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0yNyw5ICsyNyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiRWxl
bWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogI2luY2x1ZGUgIkZF
Q29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRlICJGRURyb3BTaGFkb3cuaCIKQEAgLTM4LDQ1
ICszNSwxODUgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAjaW5jbHVkZSAi
U1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKLSNpbmNs
dWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJT
b3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKLSNpbmNsdWRlIDxhbGdv
cml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotI2lmIFVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8
Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitSZWZQdHI8Q1NTRmlsdGVyPiBDU1NGaWx0
ZXI6OmNyZWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBzY2FsZUZh
Y3RvciwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENTU0ZpbHRlcik7CisgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBv
cGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIGJvb2wgaGFzRmlsdGVy
VGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0Zp
bHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICBhdXRv
IGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cywgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIHNjYWxl
RmFjdG9yLCBjbGlwT3BlcmF0aW9uKSk7CisKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRGaWx0ZXJG
dW5jdGlvbnMocmVuZGVyZXIsIG9wZXJhdGlvbnMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1
cm4gZmlsdGVyOwogfQogCi1DU1NGaWx0ZXI6OkNTU0ZpbHRlcigpCi0gICAgOiBGaWx0ZXIoRmxv
YXRTaXplIHsgMSwgMSB9KQotICAgICwgbV9zb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWM6OmNy
ZWF0ZSgqdGhpcykpCitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihib29sIGhhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9y
aWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IsIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKKyAg
ICA6IEZpbHRlcihGaWx0ZXI6OlR5cGU6OkNTU0ZpbHRlciwgRmxvYXRTaXplIHsgc2NhbGVGYWN0
b3IsIHNjYWxlRmFjdG9yIH0sIGNsaXBPcGVyYXRpb24pCisgICAgLCBtX2hhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscyhoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMpCisgICAgLCBtX2hhc0ZpbHRlclRo
YXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKGhhc0ZpbHRlclRoYXRTaG91bGRC
ZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKQogewogfQogCi1DU1NGaWx0ZXI6On5DU1NGaWx0
ZXIoKSA9IGRlZmF1bHQ7CitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVm
ZmVjdChjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uLCBGaWx0ZXI6OkNs
aXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKK3sKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBm
bG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOworICAg
IHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9u
LCBjbGlwT3BlcmF0aW9uID09IEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUgPyBFREdFTU9E
RV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKK30KIAotR3JhcGhpY3NDb250ZXh0KiBDU1NG
aWx0ZXI6OmlucHV0Q29udGV4dCgpCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRl
QnJpZ2h0bmVzc0VmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4gc291cmNlSW1h
Z2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIHRyYW5zZmVyRnVu
Y3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisK
KyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFzdEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sK
KyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJh
bnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAg
ICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVy
T3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsK
KworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVy
biBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoY29uc3QgRHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbikKK3sKKyAgICBmbG9hdCBzdGQg
PSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpOworICAgIHJldHVybiBGRURyb3BT
aGFkb3c6OmNyZWF0ZShzdGQsIHN0ZCwgZHJvcFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFk
b3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEpOworfQorCitz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGNvbnN0IEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQorewor
ICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0
aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9y
Zy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZh
bGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9y
PGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAor
ICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAw
LAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1h
dHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJh
bWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3Rh
dGVFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRy
aXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAg
IHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFU
RSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGNyZWF0ZUludmVydEVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlv
bi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91
bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFt
b3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFu
c2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVy
RnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0Zp
bHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRl
ckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVy
T3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZU9wYWNpdHlFZmZl
Y3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVy
LmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChy
ZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkp
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5j
dGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShudWxsRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKK30K
Kworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGNvbnN0
IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQor
eworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xv
ck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1
dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNl
cGlhRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0
cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAt
IGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUg
aHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0
bWwjc2VwaWFFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMu
CisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQpLAor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisg
ICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0cml4
OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRl
cnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihDU1NG
aWx0ZXImIGZpbHRlciwgY29uc3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVy
YXRpb24sIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZm
ZWN0KQoreworICAgIGF1dG8mIHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1
cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9j
dW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKwogICAgIGlmICghZmlsdGVyRWxlbWVudCkgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8
PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRlciBy
ZW5kZXJlciwgYWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24uZnJh
Z21lbnQoKSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIiBi
dWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRp
bmcgcGVuZGluZyByZXNvdXJjZSAiIDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKICAg
ICAgICAgLy8gQWx0aG91Z2ggd2UgZGlkIG5vdCBmaW5kIHRoZSByZWZlcmVuY2VkIGZpbHRlciwg
aXQgbWlnaHQgZXhpc3QgbGF0ZXIgaW4gdGhlIGRvY3VtZW50LgogICAgICAgICAvLyBGSVhNRTog
VGhpcyBza2lwcyBhbm9ueW1vdXMgUmVuZGVyT2JqZWN0cy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzEzMTA4NT4KICAgICAgICAgLy8gRklYTUU6IFVuY2xlYXIgaWYgdGhpcyBkb2VzIGFueXRoaW5n
LgpAQCAtODUsMjMxICsyMjIsMTA5IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6
YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8
U1ZHRmlsdGVyQnVpbGRlcj4oJnByZXZpb3VzRWZmZWN0KTsKLSAgICBtX3NvdXJjZUFscGhhID0g
YnVpbGRlci0+Z2V0RWZmZWN0QnlJZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpKTsKLQotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVj
dD4+IHJlZmVyZW5jZUVmZmVjdHM7Ci0KLSAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBj
aGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCpmaWx0
ZXJFbGVtZW50KSkgewotICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKGJ1aWxk
ZXIuZ2V0KCksICp0aGlzKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAgICAgICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwg
IiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGJ1aWxkIGVmZmVjdCBmcm9tICIgPDwg
ZWZmZWN0RWxlbWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQo
KSk7Ci0gICAgICAgIGlmIChlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUo
REVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3Qt
PnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgp
LnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xh
dGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsK
LSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LnJl
c3VsdCgpLCBlZmZlY3QpOwotICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVuZCgqZWZmZWN0
KTsKLSAgICB9Ci0gICAgCi0gICAgbV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKHJlZmVy
ZW5jZUVmZmVjdHMpKTsKLSAgICByZXR1cm4gZWZmZWN0OworICAgIFNWR0ZpbHRlckJ1aWxkZXIg
YnVpbGRlcjsKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGJ1
aWxkZXIsIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCksIGZp
bHRlci5maWx0ZXJSZWdpb24oKSwgZmlsdGVyLmNsaXBPcGVyYXRpb24oKSwgcHJldmlvdXNFZmZl
Y3QpOwogfQogCi1ib29sIENTU0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1
bWVyKQorYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zKQogewotICAgIG1f
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMoKTsKLSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5
T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbigpOwotCi0gICAgbV9lZmZlY3RzLmNsZWFyKCk7CisgICAgbV9mdW5jdGlvbnMu
Y2xlYXIoKTsKICAgICBtX291dHNldHMgPSB7IH07CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBwcmV2aW91c0VmZmVjdCA9IG1fc291cmNlR3JhcGhpYy5wdHIoKTsKKyAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBwcmV2aW91c0VmZmVjdCA9IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpOworICAg
IG1fZnVuY3Rpb25zLmFwcGVuZCh7ICpwcmV2aW91c0VmZmVjdCB9KTsKKworICAgIFJlZlB0cjxT
VkdGaWx0ZXI+IGZpbHRlcjsKKwogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkpIHsKICAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0Owot
ICAgICAgICBhdXRvJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uOwotICAgICAgICBzd2l0
Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlJFRkVSRU5DRTogewotICAgICAgICAgICAgYXV0byYgcmVmZXJlbmNlT3BlcmF0aW9uID0g
ZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgZWZmZWN0ID0gYnVpbGRSZWZlcmVuY2VGaWx0ZXIocmVuZGVyZXIsICpwcmV2aW91
c0VmZmVjdCwgcmVmZXJlbmNlT3BlcmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
b3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExF
X0lOVkVSVF9MSUdIVE5FU1M6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
QVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRl
ci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAt
IGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAg
IC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMv
aW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3Jt
YXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2
ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNB
bW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUy
ICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIy
ICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFt
ZXRlcnMpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJMVVI6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0PEJs
dXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0aW9uKCkpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNF
UElBOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAg
ICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9w
ZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6
Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjc2Vw
aWFFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVy
cy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAg
ICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVz
QW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0g
MC43NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwK
LQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAq
IG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAotICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0g
ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEs
Ci0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVj
dCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0
ZUJyaWdodG5lc3NFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRv
JiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlu
cHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRp
b24uYW1vdW50KCkpIH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFt
ZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFU
RTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0
ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9U
QVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNy
ZWF0ZURyb3BTaGFkb3dFZmZlY3QoZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEg
LSAyICogYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBh
bW91bnQ7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0
aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0
aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9u
LCBudWxsRnVuY3Rpb24pOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpHUkFZU0NBTEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5U2NhbGVFZmZl
Y3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxl
LWNvbG9yLWZpbHRlci4KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6SFVFX1JPVEFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVj
dChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJ
VFk6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5j
dGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24p
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNl
cHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgq
dGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3Qo
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1v
dW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5h
bW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50Owot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsg
MC41OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNBVFVSQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2F0dXJhdGVFZmZlY3QoZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJMVVI6IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVy
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3Rk
RGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlv
bigpLCAwKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRo
aXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1l
cjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVTZXBpYUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAg
ICAgICAgICAgIGF1dG8mIGRyb3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0g
RkVEcm9wU2hhZG93OjpjcmVhdGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0
aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAg
ICAgZHJvcFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9w
U2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEpOworICAgICAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAgICAgZmlsdGVyID0gY3Jl
YXRlU1ZHRmlsdGVyKCp0aGlzLCBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pLCByZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0KTsKKyAgICAgICAgICAgIGVmZmVj
dCA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGlmIChmaWx0
ZXIpIHsKKyAgICAgICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVmZmVjdCgpOworICAgICAg
ICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpKTsKKyAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBp
ZiAoZWZmZWN0KSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0Zp
bHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAgICAgICAgICAv
LyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2
ZSBzdWJyZWdpb25zLgotICAgICAgICAgICAgZWZmZWN0LT5zZXRDbGlwc1RvQm91bmRzKGNvbnN1
bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7CiAgICAgICAgICAgICBlZmZl
Y3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSAh
PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07Ci0gICAgICAgICAg
ICAgICAgbV9lZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07
CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogICAgICAgICAg
ICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdl
IGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKG1f
ZnVuY3Rpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9lZmZl
Y3RzLnNocmlua1RvRml0KCk7CisgICAgbV9mdW5jdGlvbnMuc2hyaW5rVG9GaXQoKTsKIAotICAg
IHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7Ci0jaWYgVVNFKENPUkVf
SU1BR0UpCi0gICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJlbmRl
cmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygp
LmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFz
dCgpLmdldCgpKTsKLSNlbmRpZgorICAgIC8vIFRoaXMgd2lsbCBzZXQgdGhlIGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbiBhbmQgbWF4RWZmZWN0UmVjdCBmb3IgdGhlIEZpbHRlckVmZmVjdCBjaGFp
bi4KKyAgICBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCgpCit7
CisgICAgcmV0dXJuIHNvdXJjZUltYWdlKCkgPyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDog
bnVsbHB0cjsKK30KKwogYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQogewogICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHko
KSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQpA
QCAtMzMxLDUzICszNDYsNzIgQEAgdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3Jl
SWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXgKICAgICBpZiAobV9n
cmFwaGljc0J1ZmZlckF0dGFjaGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGxvZ2lj
YWxTaXplID0gbV9zb3VyY2VEcmF3aW5nUmVnaW9uLnNpemUoKTsKKyAgICBhdXRvIGxvZ2ljYWxT
aXplID0gc291cmNlSW1hZ2VSZWN0KCkuc2l6ZSgpICogZmlsdGVyU2NhbGUoKTsKKwogICAgIGlm
ICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT5sb2dpY2FsU2l6ZSgpICE9IGxvZ2lj
YWxTaXplKSB7CiAjaWYgVVNFKERJUkVDVDJEKQotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250
ZXh0LCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KSk7CisgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVh
dGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdldENvbnRleHQsIDEsIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKICNlbHNlCiAg
ICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRDb250ZXh0KTsKICAgICAgICAgUmVuZGVyaW5nTW9k
ZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDog
cmVuZGVyaW5nTW9kZSgpOwotICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGxvZ2ljYWxTaXplLCBtb2RlLCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CisgICAgICAgIHNldFNvdXJjZUltYWdl
KEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIG1vZGUsIDEsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKICNlbmRpZgorICAgICAgICBp
ZiAoYXV0byBjb250ZXh0ID0gaW5wdXRDb250ZXh0KCkpCisgICAgICAgICAgICBjb250ZXh0LT5z
Y2FsZShmaWx0ZXJTY2FsZSgpKTsKICAgICB9CisKICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNo
ZWQgPSB0cnVlOwogfQogCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6Omxhc3RFZmZl
Y3QoKQoreworICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byYgZnVuY3Rpb24gPSBtX2Z1bmN0aW9ucy5sYXN0KCk7CisgICAg
aWYgKGZ1bmN0aW9uLT5pc1NWR0ZpbHRlcigpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZH
RmlsdGVyPihmdW5jdGlvbi5wdHIoKSktPmxhc3RFZmZlY3QoKTsKKworICAgIHJldHVybiBkb3du
Y2FzdDxGaWx0ZXJFZmZlY3Q+KGZ1bmN0aW9uLnB0cigpKTsKK30KKwogdm9pZCBDU1NGaWx0ZXI6
OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCiB7Ci0gICAgYXV0byYgbGFzdEVm
ZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFz
dEVmZmVjdC5tYXhFZmZlY3RSZWN0KCk7CisgICAgYXV0byBsYXN0RWZmZWN0ID0gdGhpcy0+bGFz
dEVmZmVjdCgpOworICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5jYWxjdWxh
dGVNYXhQcmltaXRpdmVTdWJyZWdpb24oKnRoaXMpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZp
bHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZl
Y3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0g
ICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBz
Y2FsZSkpIHsKLSAgICAgICAgc2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAgIGxh
c3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAg
IEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSB7IDEsIDEgfTsKKyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKSkKKyAgICAgICAg
c2V0RmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpOwogfQogCiB2b2lkIENTU0ZpbHRlcjo6Y2xlYXJJ
bnRlcm1lZGlhdGVSZXN1bHRzKCkKIHsKLSAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVzdWx0
KCk7Ci0gICAgaWYgKG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291cmNlQWxwaGEtPmNsZWFy
UmVzdWx0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVm
ZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlv
bnMpCisgICAgICAgIGZ1bmN0aW9uLT5jbGVhckZpbHRlckltYWdlKCk7CiB9CiAKLXZvaWQgQ1NT
RmlsdGVyOjphcHBseSgpCitib29sIENTU0ZpbHRlcjo6YXBwbHlGaWx0ZXIoKQogewotICAgIGF1
dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgaWYgKG1fZmlsdGVyUmVu
ZGVyZXIpIHsKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVjdCk7
Ci0gICAgICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAg
ICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVm
ZmVjdCgpOworCisgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIpCisgICAgICAgIG1fZmlsdGVyUmVu
ZGVyZXItPmFwcGx5RWZmZWN0cygqdGhpcywgKmVmZmVjdCk7CisKKyAgICBpZiAoIW1fZmlsdGVy
UmVuZGVyZXIgfHwgIW1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgIGZv
ciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAgICAgICAgaWYgKCFmdW5j
dGlvbi0+YXBwbHkoKnRoaXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisKKyAgICBpZiAo
YXV0byBpbWFnZSA9IGVmZmVjdC0+ZmlsdGVySW1hZ2UoKSkgeworICAgICAgICBpbWFnZS0+dHJh
bnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBMYXlvdXRS
ZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBM
YXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCkBA
IC0zOTAsMzUgKzQyNCwzNCBAQCBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUlt
YWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZQogICAgIHJldHVybiBy
ZWN0Rm9yUmVwYWludDsKIH0KIAotSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkgY29u
c3QKK0ltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpCiB7CiAgICAgaWYgKG1fZmlsdGVy
UmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVy
biBtX2ZpbHRlclJlbmRlcmVyLT5vdXRwdXQoKTsKICAgICAKLSAgICByZXR1cm4gbV9lZmZlY3Rz
Lmxhc3QoKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBpZiAoYXV0byBpbWFnZSA9IGxhc3RF
ZmZlY3QoKS0+ZmlsdGVySW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIGltYWdlLT5pbWFnZUJ1ZmZl
cigpOworICAgIAorICAgIHJldHVybiBudWxscHRyOwogfQogCiB2b2lkIENTU0ZpbHRlcjo6c2V0
U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQogewotICAg
IG1fc291cmNlRHJhd2luZ1JlZ2lvbiA9IHNvdXJjZUltYWdlUmVjdDsKLSAgICBzZXRNYXhFZmZl
Y3RSZWN0cyhzb3VyY2VJbWFnZVJlY3QpOwotICAgIHNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFn
ZVJlY3QpOworICAgIEZpbHRlcjo6c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Cisg
ICAgRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKKyAgICBmb3Ig
KGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9uLT5p
c1NWR0ZpbHRlcigpKSB7CisgICAgICAgICAgICBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9u
LnB0cigpKS0+c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7CisgICAgICAgICAgICBk
b3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+c2V0U291cmNlSW1hZ2VSZWN0KHNv
dXJjZUltYWdlUmVjdCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgbV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkID0gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyhj
b25zdCBGbG9hdFJlY3QmIGVmZmVjdFJlY3QpCitJbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVj
dCgpCiB7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVj
dC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RSZWN0KTsKLX0KLQotSW50UmVjdCBDU1NGaWx0ZXI6
Om91dHB1dFJlY3QoKSBjb25zdAotewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBtX2VmZmVjdHMu
bGFzdCgpLmdldCgpOwotICAgIAotICAgIGlmIChsYXN0RWZmZWN0Lmhhc1Jlc3VsdCgpIHx8ICht
X2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKLSAgICAg
ICAgcmV0dXJuIGxhc3RFZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKElu
dFJlY3QgeyBtX2ZpbHRlclJlZ2lvbiB9KTsKLSAgICAKKyAgICBpZiAoYXV0byBpbWFnZSA9IGxh
c3RFZmZlY3QoKS0+ZmlsdGVySW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIGltYWdlLT5hYnNvbHV0
ZUltYWdlUmVjdCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTQzMCw4ICs0NjMsOSBAQCBJ
bnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0CiAgICAgaWYgKCFtX291dHNldHMu
aXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBtX291dHNldHM7CiAKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgbV9vdXRzZXRzICs9IGVmZmVjdC0+b3V0c2V0cygp
OworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAgbV9vdXRz
ZXRzICs9IGZ1bmN0aW9uLT5vdXRzZXRzKCk7CisKICAgICByZXR1cm4gbV9vdXRzZXRzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggMDBiOTE5MTdiODA0YzkyZDk0
MDhiNzU4ZTM3NWMyNTJmMjlkYjBjNS4uZDQ1Y2Q3NWQ4YTQ2MzMwZWVhNTJjMjM0NDdjZDk5NjQy
YjFlYjFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtMzgsNjkgKzM4
LDQ3IEBAIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBj
bGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBSZW5kZXJFbGVtZW50OwotY2xh
c3MgU291cmNlQWxwaGE7CiBjbGFzcyBTb3VyY2VHcmFwaGljOwogCi1lbnVtIGNsYXNzIEZpbHRl
ckNvbnN1bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07Ci0KIGNsYXNzIENT
U0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTRmls
dGVyPiBjcmVhdGUoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBSZW5k
ZXJpbmdNb2RlLCBmbG9hdCBzY2FsZUZhY3RvciA9IDEsIENsaXBPcGVyYXRpb24gPSBDbGlwT3Bl
cmF0aW9uOjpJbnRlcnNlY3QpOwogCiAgICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247IH0KLQotICAgIElt
YWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsKLQotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVu
dCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBj
bGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFwcGx5KCk7CiAKICAgICBib29s
IGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzOyB9CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVk
QnlTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW47IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgQ1NTRmlsdGVyKCk7Ci0gICAgdmlydHVhbCB+Q1NTRmlsdGVyKCk7Ci0K
LSAgICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291
cmNlRHJhd2luZ1JlZ2lvbjsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJl
Z2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVs
ZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24mKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKKyAgICBib29sIGFw
cGx5RmlsdGVyKCkgb3ZlcnJpZGU7CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4
dCgpOworICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKTsKKyAgICBJbnRSZWN0IG91dHB1dFJlY3Qo
KTsKIAogICAgIGJvb2wgdXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlY3QpOwogICAgIHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKIAotICAgIEludFJlY3Qgb3V0cHV0UmVjdCgpIGNvbnN0OwotCiAg
ICAgTGF5b3V0UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExh
eW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CiAK
LSAgICBGbG9hdFJlY3QgbV9zb3VyY2VEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2Zp
bHRlclJlZ2lvbjsKLQotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbV9lZmZlY3RzOwot
ICAgIFJlZjxTb3VyY2VHcmFwaGljPiBtX3NvdXJjZUdyYXBoaWM7Ci0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gbV9zb3VyY2VBbHBoYTsKK3ByaXZhdGU6CisgICAgQ1NTRmlsdGVyKGJvb2wgaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0
ZWRCeVNlY3VyaXR5T3JpZ2luLCBmbG9hdCBzY2FsZUZhY3RvciwgQ2xpcE9wZXJhdGlvbik7CiAK
LSAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOworICAgIGJvb2wgYnVpbGRGaWx0ZXJG
dW5jdGlvbnMoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICB2
b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwogCiAgICAgYm9vbCBtX2dy
YXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVS
ZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCisKKyAgICBWZWN0b3I8
UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisKKyAgICBtdXRhYmxlIEludE91dHNl
dHMgbV9vdXRzZXRzOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVy
PiBtX2ZpbHRlclJlbmRlcmVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKaW5kZXggMGMyNjY5NjI5OTE3NGJkNmZkODljNjJiMWEwMjI5NmZhODllNGJkOS4u
ZjdlNzNiMmY1MDE0OGNkNjZjMmI2OWRlZjFiMTRhNTM5OTJmMDQ4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMjI2LDcgKzMyMjYsNyBAQCBHcmFwaGlj
c0NvbnRleHQqIFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQsCiAKICAgICBhdXRvIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0
ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9mZnNldEZyb21Sb290LCB7IH0p
OwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcGFpbnRpbmdGaWx0ZXJz
LT5iZWdpbkZpbHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qo
cm9vdFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFpbnRSZWN0KSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRl
ckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQsIHJlbmRlcmVyKCksIGVuY2xvc2luZ0ludFJlY3Qo
cm9vdFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFpbnRSZWN0KSk7CiAgICAgaWYg
KCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAppbmRleCAyNTBhN2Q1YzBi
YWEwYWM3NDFhOTBjODE4YjYxYTA1Zjk1Yjk2NGE0Li4xYzYzMzU0NjI4MTU1YWI5NmQ3MWJkYjI2
ZDExY2NkYzRlMjY5MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmNwcApAQCAtMTE4LDIzICsxMTgsMTMgQEAgdm9pZCBSZW5kZXJMYXllckZp
bHRlcnM6OnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKQogCiB2b2lkIFJlbmRlckxheWVy
RmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxl
RmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgaWYgKCFtX2ZpbHRl
cikgewotICAgICAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1f
ZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5z
ZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwotICAgIH0gZWxzZSBpZiAobV9maWx0ZXIt
PmZpbHRlclNjYWxlKCkgIT0gc2NhbGVGYWN0b3IpIHsKLSAgICAgICAgbV9maWx0ZXItPnNldEZp
bHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0ZXItPmNsZWFySW50ZXJtZWRp
YXRlUmVzdWx0cygpOwotICAgIH0KLQogICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVp
bGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCiAg
ICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBi
dXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCiAgICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhl
IGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hh
bmdlLgotICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgp
LmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2Zp
bHRlciA9IG51bGxwdHI7CisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJl
ciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0b3Is
IEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUpOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkK
K0dyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChH
cmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYsIGNvbnN0
IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwg
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKIHsKICAgICBpZiAoIW1fZmlsdGVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1OSw4ICsxNDksNiBAQCBHcmFwaGljc0Nv
bnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250
ZXh0JiBkZXN0aW5hdAogICAgIG1fcGFpbnRPZmZzZXQgPSBmaWx0ZXJTb3VyY2VSZWN0LmxvY2F0
aW9uKCk7CiAgICAgcmVzZXREaXJ0eVNvdXJjZVJlY3QoKTsKIAotICAgIGZpbHRlci5kZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQogICAgIGZpbHRlci5hbGxvY2F0ZUJhY2tp
bmdTdG9yZUlmTmVlZGVkKGRlc3RpbmF0aW9uQ29udGV4dCk7CiAgICAgYXV0byogc291cmNlR3Jh
cGhpY3NDb250ZXh0ID0gZmlsdGVyLmlucHV0Q29udGV4dCgpOwogICAgIGlmICghc291cmNlR3Jh
cGhpY3NDb250ZXh0IHx8IGZpbHRlci5maWx0ZXJSZWdpb24oKS5pc0VtcHR5KCkgfHwgSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlci5maWx0ZXJSZWdpb24oKS5zaXplKCkpKQpA
QCAtMTg0LDE0ICsxNzIsMTYgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVy
RWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KQogICAgIGF1dG8mIGZp
bHRlciA9ICptX2ZpbHRlcjsKICAgICBmaWx0ZXIuaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsK
IAotICAgIGZpbHRlci5hcHBseSgpOworICAgIGZpbHRlci5hcHBseUZpbHRlcigpOwogCiAgICAg
Ly8gR2V0IHRoZSBmaWx0ZXJlZCBvdXRwdXQgYW5kIGRyYXcgaXQgaW4gcGxhY2UuCi0gICAgTGF5
b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7Ci0gICAgZGVzdFJlY3QubW92
ZShtX3BhaW50T2Zmc2V0LngoKSwgbV9wYWludE9mZnNldC55KCkpOworICAgIGF1dG8gZGVzdFJl
Y3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwogCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9
IGZpbHRlci5vdXRwdXQoKSkKLSAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xh
eWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgaWYg
KGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQoKSkgeworICAgICAgICBkZXN0aW5h
dGlvbkNvbnRleHQuc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAv
IGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOworICAgICAgICBkZXN0aW5hdGlvbkNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCpvdXRwdXRCdWZmZXIsIGRlc3RSZWN0KTsKKyAgICAgICAg
ZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAK
ICAgICBmaWx0ZXIuY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAppbmRleCAzZGExNDBhNWM4OGYxNTUz
MTkwYjcwMDNkN2U3ODQ0YzkxOTQ1YmY3Li4zYTc0OTk1ZjFmODRiZDk3M2VkMmI4OGQzMDQzOTdi
NGM0NGRhMDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJGaWx0ZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAvLyBQZXIgcmVuZGVyCiAgICAg
TGF5b3V0UmVjdCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0K
IAotICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0
JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNv
bnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50
UmVjdCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJl
Y3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5
b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlckVmZmVjdChH
cmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCk7CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCmluZGV4IDE5NTA5ZDk3MThhZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjFl
YzlkNjZkNWYzNzhjNmNlNzViNDAwZGEyNTVlNzRmMDE0MDU5ZTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
CkBAIC04Miw0MCArODIsNiBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVD
bGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxlbWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVu
dEZvckludmFsaWRhdGlvbihjbGllbnQsIG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVz
SW52YWxpZGF0aW9uIDogUGFyZW50T25seUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmlt
aXRpdmVzKFNWR0ZpbHRlciYgZmlsdGVyKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5j
b3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0
Qm91bmRpbmdCb3goKTsKLQotICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAg
YXV0byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoZmlsdGVyKSk7Ci0gICAgYnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVy
RWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5k
aW5nQm94KHRhcmdldEJvdW5kaW5nQm94KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZp
bHRlckVsZW1lbnQoKSkpIHsKLSAgICAgICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1
aWxkZXIuZ2V0KCksIGZpbHRlcik7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAg
ICBidWlsZGVyLT5jbGVhckVmZmVjdHMoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNl
cyhlZmZlY3QuY29weVJlZigpLCBlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50
LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNl
dEVmZmVjdEJvdW5kYXJpZXMoU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50
KCkucHJpbWl0aXZlVW5pdHMoKSwgdGFyZ2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVs
ZW1lbnQucmVuZGVyZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9M
SU5FQVJfU1JHQikKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShl
bGVtZW50LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25G
aWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsK
LSNlbHNlCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVp
bGRlci0+YWRkKGVsZW1lbnQucmVzdWx0KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAg
IHJldHVybiBidWlsZGVyOwotfQotCiBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBs
eVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+
IHJlc291cmNlTW9kZSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC0xMzcsNTIgKzEwMywz
OCBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGlmIChmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gRGV0ZXJtaW5l
IGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgZmlsdGVyLiAKLSAgICBBZmZpbmVU
cmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxh
dGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7Ci0g
ICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFn
ZXMgZm9yIGZlVGlsZS4KLSAgICBmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9y
bSA9IEFmZmluZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgMCwgMCwgYWJz
b2x1dGVUcmFuc2Zvcm0ueVNjYWxlKCksIDAsIDApOwotCiAgICAgLy8gRGV0ZXJtaW5lIGFic29s
dXRlIGJvdW5kYXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgogICAg
IGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24gPSByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgp
OwogICAgIGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJv
dW5kYXJpZXMpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJE
YXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRlckRhdGEtPmRyYXdp
bmdSZWdpb24pOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJv
b2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVu
aXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwot
ICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckRhdGEtPnNo
ZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIHRhcmdldEJv
dW5kaW5nQm94LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRpdmVCb3VuZGluZ0JveE1v
ZGUpOwogCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAg
ICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0
ZXIpOwotICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlcikKKyAgICAvLyBEZXRlcm1pbmUgYWJz
b2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZvciBmaWx0ZXIuCisgICAgQWZmaW5lVHJhbnNm
b3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJh
bnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOworICAgIGlm
ICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIC8vIERldGVybWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUg
b2YgaW50ZXJtZWRpYXRlIEltYWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01h
eEZpbHRlclNpemUuCi0gICAgRmxvYXRSZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3
aW5nUmVnaW9uOwotICAgIEZsb2F0U2l6ZSBzY2FsZSgxLCAxKTsKLSAgICBJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcodGVtcFNvdXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0gICAgdGVt
cFNvdXJjZVJlY3Quc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOworICAgIC8v
IEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0
byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCisg
ICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCBhYnNv
bHV0ZVRyYW5zZm9ybS55U2NhbGUoKSk7CiAKLSAgICAvLyBTZXQgdGhlIHNjYWxlIGxldmVsIGlu
IFNWR0ZpbHRlci4KLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24o
c2NhbGUpOworICAgIC8vIERldGVybWluZSBzY2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNp
emUgb2YgaW50ZXJtZWRpYXRlIEltYWdlQnVmZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4g
a01heEZpbHRlclNpemUuCisgICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRl
ckRhdGEtPmRyYXdpbmdSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSk7CiAKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKLSAgICBGaWx0ZXJF
ZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0g
ICAgaWYgKCFsYXN0RWZmZWN0IHx8IGxhc3RFZmZlY3QtPnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1
dHMoKSA+IG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMpCisgICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0
ZXIgb2JqZWN0LgorICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRl
ckJ1aWxkZXI+KCk7CisgICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUo
ZmlsdGVyRWxlbWVudCgpLCAqZmlsdGVyRGF0YS0+YnVpbGRlciwgZmlsdGVyU2NhbGUsIGZpbHRl
ckRhdGEtPmRyYXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdldEJvdW5k
aW5nQm94KTsKKyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGF1dG8gbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxh
c3RFZmZlY3QoKTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCk7CiAKICAgICBMT0dfV0lUSF9TVFJF
QU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKIAotICAgIGxh
c3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0
UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7CisgICAgRmxvYXRS
ZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPmNhbGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lv
bigqZmlsdGVyRGF0YS0+ZmlsdGVyKTsKKwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZl
Y3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAogICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBlZmZl
Y3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBpZiAoSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewotICAgICAgICBmaWx0
ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0
RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICB9CisgICAg
aWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBmaWx0
ZXJTY2FsZSkpCisgICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyU2NhbGUoZmls
dGVyU2NhbGUpOwogCiAgICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1wdHksIHdlIGhh
dmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KICAgICAvLyBFdmVuIGlmIHRoZSB0
YXJnZXQgb2JqZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0eSwgd2Ugc3RpbGwgaGF2ZSB0byBkcmF3
IHRoZSBsYXN0IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4gcG9zdEFwcGx5UmVzb3VyY2UuCkBAIC0x
OTQsOSArMTQ2LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICB9CiAKICAgICAvLyBD
aGFuZ2UgdGhlIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24gYXBwbGllZCB0byB0aGUgZmlsdGVy
ZWQgZWxlbWVudCB0byByZWZsZWN0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBmaWx0ZXIuCi0gICAg
QWZmaW5lVHJhbnNmb3JtIGVmZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zv
cm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7
CisgICAgQWZmaW5lVHJhbnNmb3JtIGVmZmVjdGl2ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9y
bShmaWx0ZXJTY2FsZS53aWR0aCgpLCAwLCAwLCBmaWx0ZXJTY2FsZS5oZWlnaHQoKSwgMCwgMCk7
CiAKICAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJh
dGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BB
Q0VfTElORUFSX1NSR0IpCkBAIC0yNjksMzMgKzIxOSwzMiBAQCB2b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3Jh
cGhpYwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RFZmZl
Y3QgPSBmaWx0ZXJEYXRhLmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsKKyAgICBhdXRvIGxhc3RFZmZl
Y3QgPSBmaWx0ZXJEYXRhLmZpbHRlci0+bGFzdEVmZmVjdCgpOwogCi0gICAgaWYgKGxhc3RFZmZl
Y3QgJiYgIWZpbHRlckRhdGEuYm91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3QtPmZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLmlzRW1wdHkoKSkgeworICAgIGlmIChsYXN0RWZmZWN0
ICYmICFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5jYWxj
dWxhdGVQcmltaXRpdmVTdWJyZWdpb24oKmZpbHRlckRhdGEuZmlsdGVyKS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBmaWx0ZXJpbmcgb2YgdGhlIG9iamVjdC4gSXQg
anVzdCBuZWVkcyB0byBiZSBjYWxsZWQgb24gdGhlCiAgICAgICAgIC8vIGluaXRpYWwgZmlsdGVy
aW5nIHByb2Nlc3MuIFdlIGp1c3QgdGFrZSB0aGUgc3RvcmVkIGZpbHRlciByZXN1bHQgb24gYQog
ICAgICAgICAvLyBzZWNvbmQgZHJhd2luZy4KICAgICAgICAgaWYgKGZpbHRlckRhdGEuc3RhdGUg
IT0gRmlsdGVyRGF0YTo6QnVpbHQpCiAgICAgICAgICAgICBmaWx0ZXJEYXRhLmZpbHRlci0+c2V0
U291cmNlSW1hZ2UoV1RGTW92ZShmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIpKTsKIAor
ICAgICAgICBhdXRvIGltYWdlID0gbGFzdEVmZmVjdC0+ZmlsdGVySW1hZ2UoKTsKKyAgICAKICAg
ICAgICAgLy8gQWx3YXlzIHRydWUgaWYgZmlsdGVyRGF0YSBpcyBqdXN0IGJ1aWx0IChmaWx0ZXJE
YXRhLT5zdGF0ZSA9PSBGaWx0ZXJEYXRhOjpCdWlsdCkuCi0gICAgICAgIGlmICghbGFzdEVmZmVj
dC0+aGFzUmVzdWx0KCkpIHsKKyAgICAgICAgaWYgKCFpbWFnZSkgewogICAgICAgICAgICAgZmls
dGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwotICAgICAgICAgICAgbGFzdEVm
ZmVjdC0+YXBwbHkoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1
bHRJZk5lZWRlZCgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgICAgICAgICBmaWx0
ZXJEYXRhLmZpbHRlci0+YXBwbHlGaWx0ZXIoKTsKKyAgICAgICAgICAgIGltYWdlID0gbGFzdEVm
ZmVjdC0+ZmlsdGVySW1hZ2UoKTsKKyAgICAgICAgICAgIGltYWdlLT50cmFuc2Zvcm1Ub0NvbG9y
U3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogICAgICAgICB9CisKICAgICAg
ICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkJ1aWx0OwogCi0gICAgICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPmltYWdlQnVmZmVyUmVzdWx0KCk7Cisg
ICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlID8gaW1hZ2UtPmltYWdlQnVm
ZmVyKCkgOiBudWxscHRyOwogICAgICAgICBpZiAocmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3Jt
LmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotCi0gICAgICAgICAgICBj
b250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNv
bHV0aW9uKCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9u
KCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVz
dWx0SW1hZ2UsIGxhc3RFZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29sdXRpb24oKSk7Ci0K
LSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8g
ZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEu
ZmlsdGVyLT5maWx0ZXJTY2FsZSgpLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT5k
cmF3SW1hZ2VCdWZmZXIoKnJlc3VsdEltYWdlLCBpbWFnZS0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2Nh
bGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVm
ZmVyID0gbnVsbHB0cjsKQEAgLTMyNyw3ICsyNzYsOCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
bwogICAgICAgICAvLyBvciBub25lIG9mIHRoZW0gd2lsbCBiZSBjaGFuZ2VkLgogICAgICAgICBp
ZiAoIXByaW1pdHZlLT5zZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoZWZmZWN0LCBhdHRyaWJ1dGUp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBidWlsZGVyLT5jbGVhclJlc3VsdHNSZWN1
cnNpdmUoZWZmZWN0KTsKKworICAgICAgICBidWlsZGVyLT5jbGVhckZpbHRlckltYWdlc1JlY3Vy
c2l2ZSgqZWZmZWN0KTsKIAogICAgICAgICAvLyBSZXBhaW50IHRoZSBpbWFnZSBvbiB0aGUgc2Ny
ZWVuLgogICAgICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKCpvYmplY3RGaWx0ZXJEYXRh
UGFpci5rZXksIFJlcGFpbnRJbnZhbGlkYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCmluZGV4IDhjZTBjN2Fi
YzE0M2JkYjY1Mzg1MGM5M2UzMjkyYWM5ZGE0OWJiYzcuLjY2OGRkYTMwNTg2ZjY5ZTZkNTQ0YzI2
MTBmMzA5OWNlOWViODNlZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTQ3LDEwICs0Nyw4IEBAIHB1Ymxp
YzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKICAgICBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7CiAgICAgR3JhcGhpY3NDb250
ZXh0KiBzYXZlZENvbnRleHQgeyBudWxscHRyIH07Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtOwogICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOwogICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0U2l6ZSBzY2FsZTsKICAgICBGaWx0ZXJE
YXRhU3RhdGUgc3RhdGUgeyBQYWludGluZ1NvdXJjZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYzY1
MDIxYmVlMDM1NTY1YWFiMzFjNjdmYjkzMTlmODhlNjE4MDdjNy4uNjRlM2FjNWFlYWM4MGFkZjll
MjZhYjRlZjZiODVhMjdjMjU0MmQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00MzIsMTEgKzQzMiwxMyBAQCB2
b2lkIHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
clNWR1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICB0cyA8PCAiXG4iOwogICAgICAgICAvLyBD
cmVhdGluZyBhIHBsYWNlaG9sZGVyIGZpbHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxk
ZXIuCiAgICAgICAgIEZsb2F0UmVjdCBkdW1teVJlY3Q7Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0
ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShBZmZpbmVUcmFuc2Zvcm0oKSwgZHVtbXlSZWN0LCBkdW1t
eVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChhdXRvIGJ1aWxkZXIgPSBmaWx0
ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAgICBGbG9hdFNp
emUgZHVtbXlTY2FsZSgxLCAxKTsKKyAgICAgICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOwor
ICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyLmZpbHRl
ckVsZW1lbnQoKSwgYnVpbGRlciwgZHVtbXlTY2FsZSwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIGR1
bW15UmVjdCk7CisgICAgICAgIGlmIChkdW1teUZpbHRlcikgewogICAgICAgICAgICAgVGV4dFN0
cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwogCi0gICAgICAgICAgICBpZiAoRmls
dGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQorICAgICAgICAg
ICAgaWYgKGF1dG8gbGFzdEVmZmVjdCA9IGR1bW15RmlsdGVyLT5sYXN0RWZmZWN0KCkpCiAgICAg
ICAgICAgICAgICAgbGFzdEVmZmVjdC0+ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKHJlc291cmNlLnJlc291cmNlVHlwZSgpID09IENsaXBwZXJS
ZXNvdXJjZVR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDIwYjhiNWU3YjA3YjMxYTEyYzVhYWNiYTM4NTg5
MmZiZjNhMjM1NzMuLjM5NzRjYTljM2Q4NGEzYjMyMDAwNzE5M2EyMDQ2ZWYyNjFhZWFlOTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250
ZXh0LmNwcApAQCAtMjM1LDggKzIzNSwxMSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFNWR1JlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgdGFyZwogICAg
IGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZl
cjo6Y2xhbXBlZFNpemUocGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOworICAgIEZsb2F0U2l6ZSBz
Y2FsZSB7IDEsIDEgfTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBwYWludFJlY3Quc2l6
ZSgpOworCisgICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhwYWludFJlY3Qu
c2l6ZSgpLCBzY2FsZSkpCisgICAgICAgIGNsYW1wZWRTaXplLnNjYWxlKHNjYWxlLndpZHRoKCks
IHNjYWxlLmhlaWdodCgpKTsKIAogI2lmIFVTRShESVJFQ1QyRCkKICAgICBhdXRvIGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVuZGVyaW5nTW9kZSwgY29u
dGV4dCwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCmluZGV4IDdiY2YwNDE4MDBmNzk5ZjExNzRjZmUwNGI4
MjJkNmQwNjQzMWY2ODYuLjA1NDBjOGU0NDA4MmQ1YzYxZjAwZjhmYjczNWMzNjE4MmQxMGZhN2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcApAQCAtMTAwLDE5ICsx
MDAsMTYgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRl
cikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQo
aW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGlu
MigpKTsKIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUoZmlsdGVyLCBtb2RlKCkp
OwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0
RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7
ICAgIAorICAgIGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKG1vZGUoKSk7CisgICAgZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0Mikg
fTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVCbGVuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxl
bWVudC5oCmluZGV4IDkwMzdjYjEyMWY5MzY3Yjc4OGQ5MjE2ZTBiOTQxZmM4YjA2ZGVjNjYuLmVi
YTlhYmI1ODMyOGY0ZGFiZjM0MjhiNmIxN2RiZjU4MjM3Njg0MDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUJsZW5kRWxlbWVudC5oCkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wg
c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0
eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbG9yTWF0cml4RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuY3BwCmluZGV4IDA1MjQ4NTc4YzI3NGM4ZmEyYjNlMWYyNDRlNDM2Nzg2OGY0
MmJhOWMuLmNkZWJlZjE4YTFmZGNiYjhmM2ZiMzVmYjgzOGFjNjA0YzlhMjNkNjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcApAQCAtMTAwLDkg
KzEwMCw5IEBAIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAot
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xNDEsOCArMTQxLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1
aWwKICAgICAgICAgZmlsdGVyVmFsdWVzLnNocmlua1RvRml0KCk7CiAgICAgfQogCi0gICAgYXV0
byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBXVEZN
b3ZlKGZpbHRlclZhbHVlcykpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0
MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlclR5cGUs
IFdURk1vdmUoZmlsdGVyVmFsdWVzKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
V1RGTW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAppbmRleCA3YWI0YWE0MTgxZTdhYjE5
OGIxMmU3N2JlMjA2YjljNWM0MTAyM2ZkLi45NzAxMWEwNDFlNDlhMTdmYjQ5OGExZjg0NmY4ODBk
YmRkNjk1MjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJp
eEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuaApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRl
ckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5k
ZXggOTBhNTViN2VmZmY3YTNmZTYwNmE5ZTA1NzlhNzZlZGU5Zjk2ODAxMS4uMjdkMTJiNWQwODgz
ZWJmMWVhYzBhZGFiMTExMmZlZWViYjExZjQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCkBAIC02Myw5ICs2Myw5IEBA
IHZvaWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg2LDggKzg2LDggQEAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHQKICAgICAgICAgICAgIGFscGhhID0gZG93bmNhc3Q8U1ZHRkVGdW5jQUVsZW1lbnQ+KGNo
aWxkKS50cmFuc2ZlckZ1bmN0aW9uKCk7CiAgICAgfQogICAgIAotICAgIGF1dG8gZWZmZWN0ID0g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8g
ZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsK
ICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCmluZGV4IGJiNTg5MzQ3ZDg4MjZkZmIzNjA5ZWRh
YzZlOGI5OTNhNGRkNTQ4NjMuLjYwMTcxMGY3ZDM1MzVhMTQxYTE1Nzg4NTRhZjJiMDM1MTEyOWU5
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5oCkBAIC00Myw3ICs0Myw3IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IHN2Z0F0
dHJpYnV0ZUNoYW5nZWQgbWlzc2luZy4KICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0
cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmlt
YXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwCmluZGV4IDNjYTk5Yjg3NTcwOGJiZDhhNmJhZjY1M2RjMDZmZTIw
NWFjOTgyMzUuLjdmY2VkMmU2NDU1NDBlM2I5ZGQwOTZjYmU0OTkxZjU4NDE1NTA1MTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCkBAIC0xMzEsMTkg
KzEzMSwxNiBAQCB2b2lkIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1S
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
JiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIu
Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdl
dEVmZmVjdEJ5SWQoaW4yKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6
Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7Ci0g
ICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0
cygpOwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZl
Y3RzLmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAg
CisgICAgYXV0byBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIGsx
KCksIGsyKCksIGszKCksIGs0KCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdU
Rk1vdmUoaW5wdXQxKSwgV1RGTW92ZShpbnB1dDIpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCmluZGV4IDgxYTc4
Yzg2NTdhMGZhMzA0NGRmNWI3YzVhMDgwZDZlNzc5NzIyZjYuLjc0ZDgxNGMzYzIwZTBmZDM3ZWI2
YThiNTNhZmY1NjlkOGQxMWRjYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbXBvc2l0ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmgKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3Bl
cnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAK
aW5kZXggZjc1MDU4MTVkZWNhYmI0ZWEzNGI0MzViNDdlYTVhODBjNmEyNmRmMS4uMWE4MTM0YTlj
OGI3ZmMwYTUwNzVlZGU4MWEwZDM2OTcwZTk4YzQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCkBAIC0xOTEsOSArMTkxLDkgQEAg
dm9pZCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmEKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTI0Niw4ICsyNDYsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQgog
ICAgICAgICAgICAgZGl2aXNvclZhbHVlID0gMTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEludFNpemUob3JkZXJYVmFsdWUsIG9y
ZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwg
dGFyZ2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZh
bHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRy
aXgpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8g
ZWZmZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKEludFNpemUob3JkZXJYVmFsdWUsIG9y
ZGVyWVZhbHVlKSwgZGl2aXNvclZhbHVlLCBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1ZSwg
dGFyZ2V0WVZhbHVlKSwgZWRnZU1vZGUoKSwgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWFZh
bHVlLCBrZXJuZWxVbml0TGVuZ3RoWVZhbHVlKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRy
aXgpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9Owog
ICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29u
dm9sdmVNYXRyaXhFbGVtZW50LmgKaW5kZXggODVjMDAyNjk4YzYyNzdlMDQzNzBkMzU5ODJhOTVi
OGQ5MDQ5YjMzOS4uMWI2YmJlNDg3MTI3NWM0MjFjOGRkNDQwOWMxYjQ4OTcyOTVhYTEwYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgKQEAg
LTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChj
b25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVj
dEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9w
cm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCAxNTJjOTg1
ZmQ4ZTk1YWU5OTU3ZTZlMjFkNmJmMmExMGM0NTRiZGQ1Li5kZDM5NDU5NWNmNzI2NDhhNjdkNTI4
YTEzNDE1MWRhMzY3ZjRjNjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcApAQCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFNWR0ZFTGlnaHRFCiAgICAgcHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1
dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0
MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0
MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNjIsNyArMTYyLDcgQEAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXIKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgCi0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRT
b3VyY2UoKmZpbHRlckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1l
bnQtPmxpZ2h0U291cmNlKGZpbHRlckJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE3MCw4ICsx
NzAsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlcgogCiAgICAgQ29sb3IgY29sb3IgPSByZW5k
ZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUo
KS5zdmdTdHlsZSgpLmxpZ2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlm
ZnVzZUxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1
c2VDb25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBX
VEZNb3ZlKGxpZ2h0U291cmNlKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5w
dXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbG9y
LCBzdXJmYWNlU2NhbGUoKSwgZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCks
IGtlcm5lbFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKKyAgICBlZmZlY3Qt
PmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmgKaW5kZXggNjg5OTk2MDlmNGI2YjU2YTc2Yzg4ZWE1Njk1ZjFlMGU5ZTIwNTU4MC4uYjJh
YWM4YjAzZWQyNGQyMWQ5OGI1MTlmYmE4ZTVmOTQ1Y2EzMDgwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0
ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAppbmRleCAwYzVlODI1YmM4MjU2MGYzNmEyNjll
YTZkNzIyZGZkMDUxNzNkOGMyLi42OTA3NTEzNzUwN2Q2YzY0NzQ5YTFjOGJjNDEyYTBhZWU1MWEx
YTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmNwcApAQCAtMTE1LDE5ICsxMTUsMTYgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck4K
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZp
bHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25z
dAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEo
KSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigp
KTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7
CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4yKCkpOwog
ICAgIAogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKGZpbHRlciwg
eENoYW5uZWxTZWxlY3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOwotICAgIEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsK
LSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5h
cHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAg
IGF1dG8gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSh4Q2hhbm5lbFNlbGVjdG9y
KCksIHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICByZXR1cm4g
ZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50LmgKaW5kZXggYWE5MWRmMzhiMzYyOThmMTIxYTE0MTFjNGQwYWU1ZWNkNTg2NjVk
My4uZjJjNmQwYjE4Zjg1Yzk0ZjM4NGY1YmQxYmVmYzM1OWVkZTgyM2U2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaApAQCAtOTEsNyAr
OTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9w
cm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDIyYmNlMWQzMzMxN2M5NTcx
ZmU1ZDc5ZjRiMzI2YTg5YmZjNWI2ODEuLmJkNjFjMjc0ZTE1MzRmZDkxYWMzOTgwYzY0NTYyOTg5
OWNmNjIxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dC5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRy
TmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBj
b25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAt
MTExLDEyICsxMTEsMTIgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGQKICAgICBDb2xvciBjb2xv
ciA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxl
LmZsb29kQ29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0
eSgpOwogCi0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEo
KSk7CiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0
byBlZmZlY3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwg
c3RkRGV2aWF0aW9uWSgpLCBkeCgpLCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7Ci0gICAgZWZmZWN0
LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRURyb3BT
aGFkb3c6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHko
KSwgY29sb3IsIG9wYWNpdHkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1v
dmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCmluZGV4IDliNjJkMjRiNDU0YmI3ZDI3NThlNzEy
YjYyMWI4Y2JlNDJmNzQ1MWQuLjNlNDA1ZGU0ODljNjgxYTc2YzQ0ZjlhODI5NzMzYTIwMjZiNGQ4
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaApAQCAt
NTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZs
b29kRWxlbWVudC5jcHAKaW5kZXggYzIyOGUyMmQ1NjVkMGUxNjNmZjg3ZDBiNGJjYWJkMjI0NDc1
OGZjMi4uZjMyOGNjN2MxNWVlNzkxYjRhYWJhM2E4ZTcxYTgwNGM4MDkzZGNmZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wg
U1ZHRkVGbG9vZEVsZW1lbnQ6OnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
IGVmZmVjdCwgY29uc3QgUXVhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC02OSw3ICs2
OSw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJl
ci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9vZENvbG9y
KCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsKIAotICAg
IHJldHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgb3BhY2l0eSk7CisgICAgcmV0
dXJuIEZFRmxvb2Q6OmNyZWF0ZShjb2xvciwgb3BhY2l0eSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKaW5kZXggYjk2YTQzYWEzMTNlNzVlNGEzMTY3MjQ4YTFi
NmY1Y2Y1MWZlZTkxMS4uYWVkNjY5MTkzM2JkMDJmMzMwMWE5MjM5N2I3NDA1OWZmNmJlYzRiZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAg
cHJpdmF0ZToKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJlZ2lzdHJ5
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKICAgICBib29s
IHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCmluZGV4
IDdhOTk4MjI0YzkyMTk1NTUyNDRhODY5Y2E3OGE4MzBkNTYzYzU5OWQuLmYxZTZiZjQ5YTRkYjNk
Y2E3NzVjOWI3ZWZhNWRiOWRjODY5ODg3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCkBAIC05NSwxNyArOTUsMTcgQEAgdm9pZCBTVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWls
ZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0
QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5
SWQoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGlmIChzdGREZXZpYXRpb25YKCkgPCAwIHx8IHN0ZERldmlhdGlvblkoKSA8IDApCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6
Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGVkZ2VNb2Rl
KCkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8g
ZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb25YKCksIHN0ZERldmlh
dGlvblkoKSwgZWRnZU1vZGUoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RG
TW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCmluZGV4IGQ4OWUxYTc0OGZiMmM1MDll
MjE0ZmU5NGFlNDEwMDFjZTQ4ZWUwYjIuLmY0MGViMzM3NzhjNDNkZjYxZWU1ODk2M2VlY2Y5ZWNk
YmE1NDljYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1f
cHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCmluZGV4IGUxNDY4OGE1ZWIxNzZmMDJhMTZjMDU1MGYw
ODExOTVkM2MyN2VjNGYuLjQyYTFjZTBlYTZhZTFkNDljYjZiYjdlYTk2NzQzYjNiZTA1YWY0NGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcApAQCAtMTc0LDE2ICsx
NzQsMTYgQEAgdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6
bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpwYXJlbnRSZW5kZXJl
cik7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7
CiAgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVX
aXRoSW1hZ2UoZmlsdGVyLCBtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVy
KCkpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aEltYWdlKG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSks
IHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CiAKICAgICBhdXRvIHRhcmdldCA9IFNWR1VSSVJlZmVy
ZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcoaHJlZigpLCB0cmVlU2NvcGUoKSk7CiAg
ICAgaWYgKGlzRGVzY2VuZGFudE9yU2hhZG93RGVzY2VuZGFudE9mKHRhcmdldC5lbGVtZW50Lmdl
dCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShmaWx0ZXIsIHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZl
QXNwZWN0UmF0aW8oKSk7CisgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVu
Y2UodHJlZVNjb3BlKCksIGhyZWYoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9p
ZCBTVkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNo
U2V0PFVSTD4mIHVybHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVJbWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5o
CmluZGV4IGQ5M2UwZDBkYjhiODg2NjU0ODBmMjEwMTVhMjU2YmFkYTE1NGM1YzcuLjJhM2U5ZjYw
ZWJmYzI3ZDAxMzliMmMzNzY4NWYzMzhiMWM4YjY3OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUltYWdlRWxlbWVudC5oCkBAIC01NSw3ICs1NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRp
ZEZpbmlzaEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIGNsZWFyUmVzb3VyY2VSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBy
ZXF1ZXN0SW1hZ2VSZXNvdXJjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTWVyZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVu
dC5jcHAKaW5kZXggYmUyZjZlMDMwN2RjNTUxNjAwNzkwZmQ1YmYxODJmMWQ5NDYyM2RkNi4uMWMw
ZDU4MmQwMTNiODdjZjBlM2MxMTA4Yjk2MmYyZDM2OWRjMzA0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCkBAIC00NSwxMyArNDUsMTIgQEAgUmVmPFNWR0ZFTWVy
Z2VFbGVtZW50PiBTVkdGRU1lcmdlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIEQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGRU1lcmdlRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdl
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBm
aWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGVm
ZmVjdCA9IEZFTWVyZ2U6OmNyZWF0ZShmaWx0ZXIpOwotICAgIGF1dG8mIG1lcmdlSW5wdXRzID0g
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKLQorICAgIEZpbHRlckVmZmVjdFZlY3RvciBtZXJnZUlu
cHV0czsKKyAgICAKICAgICBmb3IgKGF1dG8mIG1lcmdlTm9kZSA6IGNoaWxkcmVuT2ZUeXBlPFNW
R0ZFTWVyZ2VOb2RlRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGF1dG8gbWVyZ2VFZmZlY3Qg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEoKSk7CisgICAgICAg
IGF1dG8gbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQobWVyZ2VOb2Rl
LmluMSgpKTsKICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoV1RGTW92ZShtZXJnZUVmZmVjdCkp
OwpAQCAtNjIsNiArNjEsOCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1lcmdlRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRgogICAgIGlmIChtZXJn
ZUlucHV0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgYXV0byBl
ZmZlY3QgPSBGRU1lcmdlOjpjcmVhdGUoKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
V1RGTW92ZShtZXJnZUlucHV0cyk7CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAppbmRleCA3NDUwODY4MTZmNjk3NmM2Njk3ZGM1MTA3
NTgwMmQyODNjZjRlM2MyLi40MzdjZDcyNTYzMmM1ZjRjNTI0ODk0Y2MzMjZjYTA5YjQxOTg1MTdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaApAQCAtMzUsNyArMzUsNyBA
QCBwcml2YXRlOgogICAgIHVzaW5nIFByb3BlcnR5UmVnaXN0cnkgPSBTVkdQcm9wZXJ0eU93bmVy
UmVnaXN0cnk8U1ZHRkVNZXJnZUVsZW1lbnQsIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcz47CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3Ry
eSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCi0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5jcHAKaW5kZXggZDZmYjk1YzhlMzc3NmU2ZDIwOTNiZWFjZTM1ZTJlZDE3OTVk
MzIxYi4uOGIwNTYwYzRkYTgwMDM5NzAxNDhlMWUxNWUyZjMwOTdiOTE1MzE1NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcApAQCAtMTE0LDIwICsx
MTQsMTkgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7
Ci0gICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKLQorICAgIGF1dG8gaW5wdXQxID0gZmls
dGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOworICAg
IGZsb2F0IHlSYWRpdXMgPSByYWRpdXNZKCk7CiAgICAgaWYgKHhSYWRpdXMgPCAwIHx8IHlSYWRp
dXMgPCAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVN
b3JwaG9sb2d5OjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVz
KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVm
ZmVjdCA9IEZFTW9ycGhvbG9neTo6Y3JlYXRlKHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlSYWRp
dXMpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9Owog
ICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRU1vcnBob2xvZ3lFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9s
b2d5RWxlbWVudC5oCmluZGV4IDFhOTA4OGI3NWNmOGQ4NWFlMzhmMjkzZTExMTk4YTY2ZjY2YWE2
NjkuLmIyMWI2ZjVjNDdiNzg1ZGYyOGYwMTNlZGU1NDAxYzg2NmQ0MGU5ZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaApAQCAtODEsNyArODEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1l
Jikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJF
ZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFT2Zmc2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVt
ZW50LmNwcAppbmRleCAwMzgyNjhiODliMmYxOWY5YmU1Njg3MzlkMTIzMDM1NDEwMGE1ZWU3Li45
YjBkNzAyYTFkMjU4NTQyMDhiOTdmZjlkNmFkZDFmODI3ZTI5YWY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcApAQCAtODEsMTQgKzgxLDE0IEBAIHZvaWQgU1ZH
RkVPZmZzZXRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFT2Zmc2V0RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9mZnNldEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0g
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAg
ICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAg
ICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVj
dCA9IEZFT2Zmc2V0OjpjcmVhdGUoZmlsdGVyLCBkeCgpLCBkeSgpKTsKKyAgICBhdXRvIGVmZmVj
dCA9IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7CiAgICAgZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKSA9IHsgaW5wdXQxIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAppbmRleCA1NzQ3M2RjYzcyZGI2N2IxMjVlYTJlZDQ2NWUz
NWI1NzM3MDQ5YmVlLi44OTk2ZjI4MmIwMWU4ZDljZDY2N2JmMjBiNWNkOTg4YTU5OWFmODg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCkBAIC00Nyw3ICs0Nyw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhp
cyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmlu
Zzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggOWI3Y2U0MGFiOTcxNmFlNGYzMzVmNTRiMjRj
ZGE0NTlhODQyOWE1OS4uNTYzYjlmMTdiNGE5MTZiN2QyNjUxMjQyZDM3ZDNmYzBiZDc1MDJlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVt
ZW50LmNwcApAQCAtMTYwLDkgKzE2MCw5IEBAIHZvaWQgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdGRUxpZ2h0CiAgICAg
cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTE3MSw3ICsxNzEsNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZQog
ICAgIGlmICghbGlnaHRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAg
ICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNvdXJjZSgqZmlsdGVyQnVp
bGRlcik7CisgICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2Uo
ZmlsdGVyQnVpbGRlcik7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhpcy0+cmVu
ZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTc5LDcgKzE3OSw3IEBAIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlCiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlci0+c3R5bGUo
KS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgp
LmxpZ2h0aW5nQ29sb3IoKSk7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGlu
Zzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50
KCksIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExl
bmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOworICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVj
dWxhckxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0
YW50KCksIHNwZWN1bGFyRXhwb25lbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5p
dExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZl
Y3RzKCkgPSB7IGlucHV0MSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAppbmRleCA4OTdiOGRl
MTU2ZDFjNzlhMWQzZmQ4YjMxMThlMmFiNjNiNDdiMTQ2Li40ZDFiNTMxYzQyYmViOGNkZmEyMDE1
MjE2MjExNjUxMGQwMDliYzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwog
CiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAg
UmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUo
dGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAppbmRleCAzOWJk
Y2M3NzM1OTY2NTAzNmUxYWU3NDc2MTJlYWQ2ZjlhYzM3MzcwLi4wMDFkZDUwODkyMTQ5ODkxNTZk
NzI0NjdhYzIwZjRmZmY3ZDRkYzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVUaWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuY3BwCkBAIC03MCwxNSArNzAsMTUgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzdmdBdHRy
aWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFt
ZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoZmlsdGVyKTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVj
dCA9IEZFVGlsZTo6Y3JlYXRlKCk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RG
TW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVRpbGVFbGVtZW50LmgKaW5kZXggNDViMzI3MTg1MWQ3ZmMwZGMyZDNiY2M4NzlhMjJkYzQy
YTMzYTkxZi4uY2FiYWNlNmJkMDFjMmIxZDM1NjRhNWNlZTVjMjc1YjY2OTZmOWQ0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCkBAIC00Miw3ICs0Miw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAg
IFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRl
KHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5j
cHAKaW5kZXggMTE1NjExMTlkODNlM2ZjNzg4YTQyYjE0ODY3YzY1NjQxMjMzNGE0ZC4uMTUxYjdi
OWU4ZTA4YTQzZTdjY2NiNjgwOWFhNzI5MTQ2ZGJiZjBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgdm9p
ZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAgIGlmIChiYXNl
RnJlcXVlbmN5WCgpIDwgMCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKGZpbHRlciwgdHlwZSgp
LCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQo
KSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgIHJldHVybiBG
RVR1cmJ1bGVuY2U6OmNyZWF0ZSh0eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVu
Y3lZKCksIG51bU9jdGF2ZXMoKSwgc2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hU
WVBFX1NUSVRDSCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5oCmluZGV4IGJmOWRhMjJhZDQyZTQxMGExMDQzNWUwYTQwZTM0MjY3NzY5ZTE5OGEu
LjUwYWY5MTBlYjU4ZTJjOTIyNDFhOTBkYThjYmRmZGM2ODE0ZjkzMTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVl
bmN5WCB7IFNWR0FuaW1hdGVkTnVtYmVyOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5jcHAKaW5kZXggZmY1MjIzMDk0NjZiMDQwYmVmMDg5ZDE1N2IzODZkZmZiYjA1YzYxOS4uNjc4
ZGYwOTkwNmJlM2I4NDZhMDM2ZjIzYTM0ZGYxYzUzMjhiNzcyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5jcHAKQEAgLTkzLDIyICs5Myw2IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoCiAgICAgaW52
YWxpZGF0ZSgpOwogfQogCi12b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEZpbHRlckVmZmVjdCogZmlsdGVyRWZmZWN0KSBjb25z
dAotewotICAgIEFTU0VSVChmaWx0ZXJFZmZlY3QpOwotICAgIGlmICghZmlsdGVyRWZmZWN0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikp
Ci0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmli
dXRlKFNWR05hbWVzOjp5QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzWSh0cnVl
KTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQotICAgICAgICBm
aWx0ZXJFZmZlY3QtPnNldEhhc1dpZHRoKHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmhlaWdodEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc0hlaWdodCh0
cnVlKTsKLX0KLQogUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6Y3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5
bGUsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlPigqdGhpcywgV1RGTW92ZShzdHls
ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCmluZGV4IGM5OGIxM2VkOTYyNzZhZjllMTRmNjQyODExYTZm
ZDc0Njc3MmFjYTcuLjg3OGQxMTJjMDI5ODdkMWZiZjE2MTQxYWNlMmI4YjgxZjVlYjI5MmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmgKQEAgLTM2LDkgKzM2LDcgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRl
cjsKIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6IHB1YmxpYyBT
VkdFbGVtZW50IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcyk7CiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJp
YnV0ZXMoRmlsdGVyRWZmZWN0KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3QgPSAwOwogICAgIC8vIFJldHVybnMgdHJ1ZSwgaWYgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJl
bnQgZnJvbSB0aGUgb2xkIG9uZS4KICAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCAz
ODVhZjI5MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYyMzk2Li42OGQ0Yzc4MjIxNTY0OTJk
NTkwNjcwNzE1MmU0OGIzYTY3NmY4MTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMzUsNDYgKzM1LDQxIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVm
UHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1hZ2Up
CitGRUltYWdlOjpGRUltYWdlKFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKKyAgICA6IEZpbHRlckVmZmVj
dChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpCiAgICAgLCBtX2ltYWdlKGltYWdlKQogICAg
ICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLUZF
SW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25z
dCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2Vy
dmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQor
RkVJbWFnZTo6RkVJbWFnZShUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVm
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
CisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKQogICAgICwg
bV90cmVlU2NvcGUoJnRyZWVTY29wZSkKICAgICAsIG1faHJlZihocmVmKQogICAgICwgbV9wcmVz
ZXJ2ZUFzcGVjdFJhdGlvKHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7CiB9CiAKLVJlZjxGRUltYWdl
PiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4g
aW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RS
YXRpbykKK1JlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSW1hZ2UoUmVmUHRyPEltYWdl
PiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCBpbWFn
ZSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1h
Z2UoaW1hZ2UsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKIH0KIAotUmVmPEZFSW1hZ2U+IEZFSW1h
Z2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiBmaWx0ZXIsIFRyZWVTY29wZSYgdHJl
ZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9W
YWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKK1JlZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVX
aXRoSVJJUmVmZXJlbmNlKFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcmIGhyZWYs
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZpbHRlciwgdHJlZVNjb3BlLCBo
cmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJ
bWFnZSh0cmVlU2NvcGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKIH0KIAotdm9pZCBG
RUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRkVJbWFnZTo6
Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0g
ZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpKTsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdDsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0
ID0gcHJpbWl0aXZlU3VicmVnaW9uOworCiAgICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgc3Jj
UmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RS
YXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlmIChS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBz
cmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5y
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRz
KCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CisgICAgICAgIEZs
b2F0UmVjdCBzcmNSZWN0ID0geyB7IH0sIG1faW1hZ2UtPnNpemUoKSB9OworICAgICAgICBtX3By
ZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChpbWFnZVJlY3QsIHNyY1JlY3QpOworICAg
IH0KKworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdl
UmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAogUmVuZGVyRWxlbWVudCogRkVJbWFnZTo6
cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3QKQEAgLTg3LDM3ICs4MiwzNyBAQCBSZW5kZXJFbGVt
ZW50KiBGRUltYWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdAogICAgIHJldHVybiB0YXJn
ZXQuZWxlbWVudC0+cmVuZGVyZXIoKTsKIH0KIAotdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQorYm9vbCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiB7CiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2Vk
UmVuZGVyZXIoKTsKICAgICBpZiAoIW1faW1hZ2UgJiYgIXJlbmRlcmVyKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUg
YWx3YXlzIGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgYXV0byYgb3V0cHV0
ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IG91
dHB1dC5pbWFnZUJ1ZmZlcigpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmls
dGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpKTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9u
KCk7CisgICAgZGVzdFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogCiAgICAgRmxv
YXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBzcmNSZWN0ID0gZmls
dGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBlbHNlIHsKKyAgICBpZiAocmVuZGVyZXIpIHsKKyAg
ICAgICAgc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
OworICAgICAgICBzcmNSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9IGVs
c2UgewogICAgICAgICBzcmNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+
c2l6ZSgpKTsKICAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoZGVz
dFJlY3QsIHNyY1JlY3QpOwogICAgIH0KIAotICAgIEludFBvaW50IHBhaW50TG9jYXRpb24gPSBh
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgYXV0byBwYWludExvY2F0aW9uID0g
b3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkubG9jYXRpb24oKTsKICAgICBkZXN0UmVjdC5tb3Zl
KC1wYWludExvY2F0aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKIAogICAgIGF1dG8mIGNv
bnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogCiAgICAgaWYgKHJlbmRlcmVyKSB7Ci0g
ICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0gPSBmaWx0ZXIo
KS5hYnNvbHV0ZVRyYW5zZm9ybSgpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShhYnNvbHV0
ZVRyYW5zZm9ybSk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwogCiAgICAgICAgIFJlZlB0ciBjb250ZXh0Tm9kZSA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJl
bmRlcmVyLT5lbGVtZW50KCkpOwogICAgICAgICBpZiAoY29udGV4dE5vZGUtPmhhc1JlbGF0aXZl
TGVuZ3RocygpKSB7CkBAIC0xMzIsMTAgKzEyNywxMSBAQCB2b2lkIEZFSW1hZ2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiAKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRlbnRUcmFuc2Zv
cm1hdGlvbjsKICAgICAgICAgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyU3VidHJlZVRvQ29u
dGV4dChjb250ZXh0LCAqcmVuZGVyZXIsIGNvbnRlbnRUcmFuc2Zvcm1hdGlvbik7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgY29udGV4dC5kcmF3
SW1hZ2UoKm1faW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogVGV4dFN0cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGFjMTYw
ZWRjZTdjMGUwYTA2N2JkZWZiZDcwN2YyYWJlNTU5MDgxYjYuLjJkNGIzMzUyZTU4M2RmZDhjNWYz
OWQ1MzU4MGQwNzlkMzk1NzFkYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTM0LDIyICszNCwyMiBAQCBjbGFzcyBUcmVlU2Nv
cGU7CiAKIGNsYXNzIEZFSW1hZ2UgZmluYWwgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImLCBSZWZQ
dHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBzdGF0
aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoRmlsdGVyJiwgVHJlZVNjb3Bl
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Cisg
ICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoUmVmUHRyPEltYWdlPiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxGRUltYWdl
PiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
fkZFSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBSZWZQdHI8SW1hZ2U+
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKLSAgICBGRUltYWdlKEZpbHRl
ciYsIFRyZWVTY29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSYpOworICAgIEZFSW1hZ2UoUmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJik7CisgICAgRkVJbWFnZShUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAotICAgIGNvbnN0IGNoYXIq
IGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVJbWFnZSI7IH0KKyAgICBSZW5k
ZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKIAotICAgIEZpbHRlckVmZmVj
dFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEZpbHRlckVmZmVj
dFR5cGVJbWFnZTsgfQorICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpCisgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNl
KGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQogCi0gICAgUmVuZGVy
RWxlbWVudCogcmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IGNhbGN1
bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpIGZpbmFsOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBmaW5hbDsK
KyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBmaW5hbDsKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBmaW5hbDsKIAogICAgIFJlZlB0cjxJbWFnZT4g
bV9pbWFnZTsKQEAgLTYxLDMgKzYxLDUgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFSW1hZ2Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNw
cAppbmRleCA5YTk0YTQ2MDM1ODc5MDhhMzg0ZDE3NDI3YjM3MTkzNTkyYjdiY2U3Li42MjRmZWMz
NWE4ZDY5YjQ1OWEzNzExMzAyNWI2ZDljMGVhM2YwNGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTIyLDI5ICsyMiw5MiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmls
dGVyOjpTVkdGaWx0ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBi
b29sIGVmZmVjdEJCb3hNb2RlKQotICAgIDogRmlsdGVyKGFic29sdXRlVHJhbnNmb3JtKQotICAg
ICwgbV9hYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24oYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVn
aW9uKQorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVu
dCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRT
aXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24sIEZp
bHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0ZXJF
bGVtZW50LCBidWlsZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdp
b24sIGNsaXBPcGVyYXRpb24sIGZpbHRlclJlZ2lvbiwgJnByZXZpb3VzRWZmZWN0KTsKK30KKwor
UmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmls
dGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQor
eworICAgIHJldHVybiBjcmVhdGUoZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyU2NhbGUs
IHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3Qs
IHRhcmdldEJvdW5kaW5nQm94LCBudWxscHRyKTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZH
RmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVy
QnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBD
bGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gsIEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCit7CisgICAgYm9vbCBwcmltaXRp
dmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworCisgICAgYXV0byBm
aWx0ZXIgPSBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VS
ZWN0LCBmaWx0ZXJSZWdpb24sIGNsaXBPcGVyYXRpb24sIHRhcmdldEJvdW5kaW5nQm94LCBwcmlt
aXRpdmVCb3VuZGluZ0JveE1vZGUpKTsKKworICAgIGlmICghcHJldmlvdXNFZmZlY3QpCisgICAg
ICAgIGJ1aWxkZXIuc2V0dXBCdWlsdGluRWZmZWN0cyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSk7
CisgICAgZWxzZQorICAgICAgICBidWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoeyAqcHJldmlv
dXNFZmZlY3QgfSk7CisKKyAgICBidWlsZGVyLnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdldEJv
dW5kaW5nQm94KTsKKyAgICBidWlsZGVyLnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQu
cHJpbWl0aXZlVW5pdHMoKSk7CisKKyAgICBhdXRvIGxhc3RFZmZlY3QgPSBidWlsZGVyLmJ1aWxk
RmlsdGVyRWZmZWN0cyhmaWx0ZXJFbGVtZW50KTsKKyAgICBpZiAoIWxhc3RFZmZlY3QpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIEZpbHRlckVmZmVjdFZlY3RvciBleHByZXNz
aW9uOworICAgIGlmICghYnVpbGRlci5idWlsZEV4cHJlc3Npb24oZXhwcmVzc2lvbikpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgZmlsdGVyLT5zZXRMYXN0RWZmZWN0KFdURk1vdmUo
bGFzdEVmZmVjdCkpOworICAgIGZpbHRlci0+c2V0RXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Np
b24pKTsKKyAgICByZXR1cm4gZmlsdGVyOworfQorCitTVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25z
dCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJh
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgYm9vbCBlZmZlY3RCQm94
TW9kZSkKKyAgICA6IEZpbHRlcihGaWx0ZXI6OlR5cGU6OlNWR0ZpbHRlciwgZmlsdGVyU2NhbGUs
IHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBjbGlwT3BlcmF0aW9uKQogICAgICwgbV90
YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCkKLSAgICAsIG1fZmlsdGVyUmVnaW9u
KGZpbHRlclJlZ2lvbikKICAgICAsIG1fZWZmZWN0QkJveE1vZGUoZWZmZWN0QkJveE1vZGUpCiB7
Ci0gICAgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbiA9IGFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3Qo
ZmlsdGVyUmVnaW9uKTsKIH0KIAotRmxvYXRTaXplIFNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJS
ZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25zdAorRmxvYXRTaXplIFNWR0ZpbHRlcjo6c2Nh
bGVkU2l6ZUJ5RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAogeworICAg
IEZsb2F0U2l6ZSByZXNvbHZlZFNpemUgPSBzaXplOwogICAgIGlmIChtX2VmZmVjdEJCb3hNb2Rl
KQotICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOworICAg
ICAgICByZXNvbHZlZFNpemUgPSByZXNvbHZlZFNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNp
emUoKTsKKworICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZFNpemVCeUZpbHRlclNjYWxlKHJlc29s
dmVkU2l6ZSk7Cit9CisKK2Jvb2wgU1ZHRmlsdGVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRl
cikKK3sKKyAgICBzZXRTb3VyY2VJbWFnZSh7IGZpbHRlci5zb3VyY2VJbWFnZSgpIH0pOworICAg
IHJldHVybiBhcHBseUZpbHRlcigpOworfQogCi0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlG
aWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkgLyBt
X2ZpbHRlclJlZ2lvbi5zaXplKCk7Citib29sIFNWR0ZpbHRlcjo6YXBwbHlGaWx0ZXIoKQorewor
ICAgIGlmIChtX2V4cHJlc3Npb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZXhwcmVzc2lvbikgeworICAgICAgICBpZiAoIWVm
ZmVjdC0+YXBwbHkoKnRoaXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitJbnRPdXRzZXRzIFNWR0ZpbHRlcjo6b3V0c2V0cygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbGFzdEVmZmVjdC0+b3V0c2V0cygpOwogfQogCi1SZWY8U1ZH
RmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRl
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCit2b2lkIFNWR0ZpbHRlcjo6Y2xlYXJGaWx0
ZXJJbWFnZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGFic29sdXRl
VHJhbnNmb3JtLCBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94
LCBmaWx0ZXJSZWdpb24sIGVmZmVjdEJCb3hNb2RlKSk7CisgICAgbV9sYXN0RWZmZWN0LT5jbGVh
ckZpbHRlckltYWdlc1JlY3Vyc2l2ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4
IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2YuLmU0NmFmZTdiNTQ1NDE0
OWFhZjljZDhlMzQ5N2RmODU3NTI2M2ZmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0yMCw3ICsyMCw2IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCkBAIC0y
OSwzMiArMjgsNDEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBTVkdGaWx0ZXJC
dWlsZGVyOworY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKKwogY2xhc3MgU1ZHRmlsdGVyIGZpbmFs
IDogcHVibGljIEZpbHRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTVkdGaWx0ZXI+IGNy
ZWF0ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBib29sKTsKLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJS
ZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9
Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJz
b2x1dGVGaWx0ZXJSZWdpb247IH0KKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRl
KFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3Vz
RWZmZWN0KTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVs
ZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBzdGF0aWMg
UmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWls
ZGVyJiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHByZXZp
b3VzRWZmZWN0KTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxv
YXRTaXplKSBjb25zdCBmaW5hbDsKKyAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZUJ5RmlsdGVyU2Nh
bGUoY29uc3QgRmxvYXRTaXplJikgY29uc3QgZmluYWw7CisgICAgYm9vbCBhcHBseShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKKyAgICBib29sIGFwcGx5RmlsdGVyKCkgb3ZlcnJpZGU7CiAKLSAg
ICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdC
b3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKLSAgICBib29sIGlz
U1ZHRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0KKyAgICB2b2lk
IHNldExhc3RFZmZlY3QoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBsYXN0RWZmZWN0KSB7IG1fbGFz
dEVmZmVjdCA9IFdURk1vdmUobGFzdEVmZmVjdCk7IH0KKyAgICB2b2lkIHNldEV4cHJlc3Npb24o
RmlsdGVyRWZmZWN0VmVjdG9yJiYgZXhwcmVzc2lvbikgeyBtX2V4cHJlc3Npb24gPSBXVEZNb3Zl
KGV4cHJlc3Npb24pOyB9CiAKIHByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3Vy
Y2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CisgICAgU1ZH
RmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlv
biwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgYm9vbCBlZmZlY3RCQm94TW9k
ZSk7CisKKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGNsZWFyRmlsdGVySW1hZ2UoKSBvdmVycmlkZTsKIAotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRl
U291cmNlRHJhd2luZ1JlZ2lvbjsKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsK
LSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9m
aWx0ZXJSZWdpb247CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworCisgICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OworICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2V4cHJl
c3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6U1ZHRmlsdGVyKQogICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpGaWx0ZXImIGZpbHRlcikgeyByZXR1cm4gZmlsdGVyLmlzU1ZHRmlsdGVy
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi5pc1NWR0ZpbHRlcigpOyB9CiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDk2ZjNhODA1MDQyOTU1
NTgxMDM0ZDk4YTRmZGFjNGVhZjMwODdiOTQuLjE5MzY2ZTFlOTFiMzdjNzBkYWQ1NzU0MjU0YjFm
MGY3MTk0MjY0NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0yMCwyMCArMjAsMTExIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogCi0jaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU291
cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBFTkFCTEUoREVTVElOQVRJT05f
Q09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVp
bGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQordm9pZCBTVkdGaWx0ZXJC
dWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBo
aWMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFt
ZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBo
YTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpzb3VyY2VHcmFwaGljKSk7Cisg
ICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3Vy
Y2VHcmFwaGljLnB0cigpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6
ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKHNvdXJjZUdyYXBoaWMpKTsKICAgICBh
ZGRCdWlsdGluRWZmZWN0cygpOwogfQogCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQ
QUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50ZXJwb2xhdGlvbiBjb2xvckludGVycG9s
YXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKGF1dG8gcmVu
ZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+c3R5
bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKTsKKworICAgIC8vIFRy
eSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20gdGhlIGNvbXB1dGVkIHN0eWxl
LgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3RvcigmZWxlbWVudCku
cHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMpKSB7Cisg
ICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIH0KKworICAgIHJl
dHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87Cit9CisjZW5kaWYKKworc3RhdGljIHVuc2ln
bmVkIGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCogZWZmZWN0LCBIYXNoU2V0PGNv
bnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQoreworICAgIGFsbEVmZmVjdHMuYWRkKGVm
ZmVjdCk7CisgICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuc2l6ZSgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZlY3QoaSk7CisgICAgICAgIGNvbGxlY3RF
ZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbEVmZmVjdHMuc2l6
ZSgpOworfQorCitzdGF0aWMgdW5zaWduZWQgdG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKGNvbnN0
IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKK3sKKyAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVm
ZmVjdCo+IGFsbEVmZmVjdHM7CisgICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKCZsYXN0RWZmZWN0
LCBhbGxFZmZlY3RzKTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQpCit7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzID0gMTAw
OworCisgICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENo
aWxkTm9kZXMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gZWZmZWN0OworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5P
ZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50
KSkgeworICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKCp0aGlzKTsKKyAgICAg
ICAgaWYgKCFlZmZlY3QpIHsKKyAgICAgICAgICAgIGNsZWFyRWZmZWN0cygpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGVmZmVjdEJvdW5k
YXJpZXMgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMs
IG1fdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgICAgICAKKyAgICAgICAgT3B0aW9uU2V0PEZpbHRl
ckJvdW5kYXJ5U2V0OjpGbGFncz4gZmxhZ3M7CisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhh
c0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRl
ckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWCk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQu
aGFzQXR0cmlidXRlKFNWR05hbWVzOjp5QXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmls
dGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNZKTsKKworICAgICAgICBpZiAoZWZmZWN0RWxlbWVu
dC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCisgICAgICAgICAgICBmbGFncy5h
ZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNXaWR0aCk7CisKKyAgICAgICAgaWYgKGVm
ZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKKyAgICAgICAg
ICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc0hlaWdodCk7CisgICAg
ICAgIAorICAgICAgICBlZmZlY3QtPnNldEJvdW5kYXJ5U2V0KHsgZWZmZWN0Qm91bmRhcmllcywg
ZmxhZ3MgfSk7CisKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NS
R0IpCisgICAgICAgIGlmIChjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KGVmZmVjdEVsZW1l
bnQpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCKQorICAgICAgICAgICAgZWZmZWN0
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JH
QigpKTsKKyNlbmRpZgorICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IGVmZmVjdEVsZW1lbnQu
cmVuZGVyZXIoKSkKKyAgICAgICAgICAgIGFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhl
ZmZlY3QuY29weVJlZigpLCByZW5kZXJlcik7CisKKyAgICAgICAgYWRkKGVmZmVjdEVsZW1lbnQu
cmVzdWx0KCksIGVmZmVjdCk7CisgICAgfQorCisgICAgaWYgKCFlZmZlY3QgfHwgdG90YWxOdW1i
ZXJGaWx0ZXJFZmZlY3RzKCplZmZlY3QpID4gbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBlZmZlY3Q7Cit9CisKIHZvaWQg
U1ZHRmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBlZmZlY3QpCiB7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkgewpAQCAtOTIsMTUgKzE4
Myw0MyBAQCB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyRWZmZWN0cygpCiAgICAgYWRkQnVp
bHRpbkVmZmVjdHMoKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJlc3VsdHNS
ZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNs
ZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCYgZWZmZWN0KQogewotICAgIGlm
ICghZWZmZWN0LT5oYXNSZXN1bHQoKSkKKyAgICBpZiAoIWVmZmVjdC5maWx0ZXJJbWFnZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7CisgICAgZWZmZWN0
LmNsZWFyRmlsdGVySW1hZ2UoKTsKKworICAgIGZvciAoYXV0byYgcmVmZXJlbmNlIDogZWZmZWN0
UmVmZXJlbmNlcygmZWZmZWN0KSkKKyAgICAgICAgY2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUo
KnJlZmVyZW5jZSk7Cit9CisKK3N0YXRpYyBib29sIGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihjb25z
dCBSZWZQdHI8RmlsdGVyRWZmZWN0PiYgZWZmZWN0LCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNr
LCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGV4cHJlc3Npb24pCit7CisgICAgLy8gQSBjeWNsZSBpcyBk
ZXRlY3RlZC4KKyAgICBpZiAoc3RhY2suY29udGFpbnMoZWZmZWN0KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZXhwcmVzc2lvbi5pbnNlcnQoMCwgZWZmZWN0KTsKKworICAgIHN0YWNr
LmFwcGVuZChlZmZlY3QpOworCisgICAgZm9yIChhdXRvJiBpbnB1dEVmZmVjdCA6IGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkpIHsKKyAgICAgICAgaWYgKCFidWlsZEVmZmVjdEV4cHJlc3Npb24oaW5w
dXRFZmZlY3QsIHN0YWNrLCBleHByZXNzaW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHN0YWNr
Lmxhc3QoKSA9PSBlZmZlY3QpOworCisgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgIHJldHVy
biB0cnVlOworfQogCi0gICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2Vz
KGVmZmVjdCkpCi0gICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOworYm9v
bCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBl
eHByZXNzaW9uKSBjb25zdAoreworICAgIEZpbHRlckVmZmVjdFZlY3RvciBzdGFjazsKKyAgICBy
ZXR1cm4gYnVpbGRFZmZlY3RFeHByZXNzaW9uKG1fbGFzdEVmZmVjdCwgc3RhY2ssIGV4cHJlc3Np
b24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggYzc3YWUw
OGJhYzY1YzNjMmNmYzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4uNTZhZDY3MGMyOTdmNjc0ZmFhYjQz
OTdmZDEyZjUzZjA4Y2Y4NTk0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtMzcsNyArMzcsNyBAQCBjbGFz
cyBTVkdGaWx0ZXJCdWlsZGVyIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hTZXQ8RmlsdGVy
RWZmZWN0Kj4gRmlsdGVyRWZmZWN0U2V0OwogCi0gICAgU1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8
RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKTsKKyAgICBTVkdGaWx0ZXJCdWlsZGVyKCkgPSBk
ZWZhdWx0OwogCiAgICAgdm9pZCBzZXRUYXJnZXRCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3Qm
IHIpIHsgbV90YXJnZXRCb3VuZGluZ0JveCA9IHI7IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91
bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CkBAIC02Myw3
ICs2MywxMSBAQCBwdWJsaWM6CiAgICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZmZWN0QnlSZW5k
ZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5kZXJlci5nZXQo
b2JqZWN0KTsgfQogCiAgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKLSAgICB2b2lkIGNsZWFyUmVz
dWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqKTsKKyAgICB2b2lkIGNsZWFyRmlsdGVySW1hZ2Vz
UmVjdXJzaXZlKEZpbHRlckVmZmVjdCYpOworCisgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3Rz
KFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jik7CisgICAgYm9vbCBidWls
ZEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjYyZDRl
ZjI0NmJkNzM4YTgyNWZmYTBmN2NkNmE3OTFhMmQ5NDY0Ni4uODUxZTBlOTE0ZmI3MjQ1OTczZThi
ODlkZmUyZTM2ZGZkYjYxN2UwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTExLTA1ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVmYWN0b3IgdGhlIEZpbHRlckVmZmVjdCByZXN1bHQgYnVmZmVycyBpbnRvIGEgbmV3IGNs
YXNzIG5hbWVkICdGaWx0ZXJJbWFnZScKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKworMjAyMS0xMS0wMiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIFJl
bW92ZSB0aGUgcmVmZXJlbmNlIHRvIEZpbHRlciBmcm9tIEZpbHRlckVmZmVjdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNTUxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHR3byBmYWlsdXJlcyBy
ZWxhdGVkIHRvIHRoZSBjb2xvciBzcGFjZSB0byBUZXN0RXhwZWN0YXRpb25zLgorCisgICAgICAg
ICogVGVzdEV4cGVjdGF0aW9uczoKKworMjAyMS0xMC0zMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxz
YWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIE1ha2UgQ1NTRmlsdGVyIGhv
bGRzIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQ2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMS0xMS0wMSAg
TWljaGFlbCBTbWl0aCAgPG1pa2VAdzMub3JnPgogCiAgICAgICAgIFtXZWJJbnNwZWN0b3JdW0NP
UlNdIFNob3cgSFRUUCBzdGF0dXMgY29kZSBpbiBDT1JTIG1lc3NhZ2VzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443505</attachid>
            <date>2021-11-07 02:58:14 -0800</date>
            <delta_ts>2021-11-07 11:58:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211107025812.patch</filename>
            <type>text/plain</type>
            <size>404636</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Mzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFmY2VkZDdjN2I5YTYz
ZDEwOTAwZmNkMTRlOWNkODBlNDE0ZTU3NS4uOWRiNGFlNDljZGFmNGE2ZDU5ZGIxYjMzNmFiNjJl
YzY1NTZiMzk0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5MiBAQAorMjAyMS0xMS0wNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFNpbXBsaWZ5IEZpbHRlckVmZmVjdCBnZW9tZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJj
ZUdyYXBoaWMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFudExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmNhbGN1bGF0
ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojppc0FscGhhSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRVRpbGU6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29y
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmNsaXBPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpzY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6bWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6Y2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6Om1hcFBvaW50RnJvbVVz
ZXJTcGFjZVRvQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHlG
aWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6RmlsdGVyQm91bmRhcnlTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OnggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyQm91bmRhcnlTZXQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJv
dW5kYXJ5U2V0OjpoZWlnaHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRl
UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFp
bnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbGxlY3RFZmZlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVz
dGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3RzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVySW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRCb3VuZGFyeVNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cGxhdGZvcm1BcHBseUNvcmVJbWFnZSBjb25z
dCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpu
dW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldElzQWxwaGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmFic29sdXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6aGFzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpoYXNZIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6c2V0SGFzWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Omhhc1dpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6c2V0SGFzV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRIYXNIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZm
ZWN0Qm91bmRhcmllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1bHRDb2xvclNwYWNlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0UmVzdWx0
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpub3JtYWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFn
ZTo6cHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjppbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6Omlz
QWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50
TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6Om91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJj
ZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICog
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjphcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpidWlsZEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
cHBseUZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjp0b3Rh
bE51bWJlckZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxk
ZXI6OmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTExLTA3ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVmYWN0b3IgdGhlIEZpbHRlckVmZmVjdCByZXN1bHQgYnVmZmVycyBpbnRvIGEgbmV3IGNs
YXNzIG5hbWVkICdGaWx0ZXJJbWFnZScKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1vdmUgdGhlIHN0b3JhZ2UgYW5kIHRoZSBsb2dpYyBmb3IgbWFuYWdp
bmcgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUKKyAgICAgICAgRmlsdGVyRWZmZWN0IHRvIGl0
cyBpbnB1dHMgdG8gYSBuZXcgY2FsbHMgbmFtZWQgJ0ZpbHRlclJlc3VsdCcuIFRoaXMgd2lsbAor
ICAgICAgICBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgRmlsdGVyRWZmZWN0LiBJdCB3
aWxsIGFsc28gYWxsb3cgaW50ZWdyYXRpbmcKKyAgICAgICAgdGhlIENvcmVJbWFnZSBzZWFtbGVz
c2x5IGFuZCBzaW1wbGlmeWluZyB0aGUgZ2VvbWV0cnkgY2FsY3VsYXRpb24uCisKKyAgICAgICAg
SW5zdGVhZCBvZiBoYXZpbmcgdGhyZWUgd2F5cyB0byBjcmVhdGUgdGhlIHJlc3VsdCBvZiBhIEZp
bHRlckVmZmVjdCwgdGhlcmUKKyAgICAgICAgd2lsbCBiZSBvbmUgd2F5IHdoaWNoIGlzIGJ5IGNh
bGxpbmcgRmlsdGVySW1hZ2U6OmNyZWF0ZSgpLiBUaGlzIGNhbGwgd2lsbAorICAgICAgICBub3Qg
Y3JlYXRlIGEgY29uY3JldGUgcmVzdWx0LiBCdXQgcmVxdWVzdGluZyB0aGUgSW1hZ2VCdWZmZXIg
b3IgYSBQaXhlbEJ1ZmZlcgorICAgICAgICBmcm9tIEZpbHRlckltYWdlIHdpbGwgbWFrZSB0aGlz
IGNyZWF0aW9uIGhhcHBlbnMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIHJlcXVpcmVzVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgaXMgcmVwbGFjZWQgYnkgdGhlIG9wcG9zaXRlIAorICAg
ICAgICBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKS4gQ29ycmVjdGluZyB0
aGUgcHJlbXVsdGlwbGllZAorICAgICAgICByZXN1bHQgd2lsbCBiZSBkb25lIGJ5IEZpbHRlckVm
ZmVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Zmls
bFJlZ2lvbldvcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOgorICAgICAgICBDbGVh
cmluZyB0aGUgcmVzdWx0IGNhbiBiZSBkb25lIGJ5IG51bGxpZnlpbmcgYSBzaW5nbGUgcG9pbnRl
ci4KKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRVbnByZW11bHRpcGxpZWRSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRQcmVtdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVucHJlbXVsdGlwbGllZFJl
c3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29y
cmVjdFByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1
ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTog
RGVsZXRlZC4KKyAgICAgICAgQWxsIHRoZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMgd2FzIG1v
dmVkIHRvIEZpbHRlckltYWdlLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1Jlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVm
ZmVjdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXlQcm9kdWNlSW52
YWxpZFByZW11bHRpcGxpZWRQaXhlbHMgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0VHlw
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om91dHNl
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0
ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFn
ZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisyMDIxLTExLTAyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gRmlsdGVyIGZyb20gRmlsdGVyRWZmZWN0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI1NTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9mIGhh
dmluZyBhIHJlZmVyZW5jZSB0byB0aGUgRmlsdGVyIGluIHRoZSBGaWx0ZXJFZmZlY3QsIHdlIGFy
ZQorICAgICAgICBnb2luZyB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoZSBGaWx0ZXIgdG8gdGhl
IEZpbHRlckVmZmVjdCBmdW5jdGlvbnMKKyAgICAgICAgb25seSB3aGVuIG5lZWRlZC4KKworICAg
ICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9y
dHNDb3JlSW1hZ2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJs
ZW5kOjpGRUJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZF
Q29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFu
Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVN
ZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3Bl
Y3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OkZFVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OmZpbGxSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpmaWxsUmVnaW9uV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6c291cmNlSW1hZ2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJ
bWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpmaWx0ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBw
bHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VH
cmFwaGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3RO
YW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6IERlbGV0
ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlQ29jb2EuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZm
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpvdXRwdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5k
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVu
dDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAg
ICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWls
ZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAg
ICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRUZsb29kRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpi
dWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRUltYWdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdl
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVP
ZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRl
ckVmZmVjdHMpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaDoKKworMjAyMS0xMC0zMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4K
KworICAgICAgICBbR1BVIFByb2Nlc3NdIE1ha2UgQ1NTRmlsdGVyIGhvbGRzIGEgbGlzdCBvZiBG
aWx0ZXJGdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjQ2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEluIHRoaXMgcGF0Y2gsIHRoZSBDU1MgcmVmZXJlbmNlIGZpbHRlciBpcyBidWlsdCBh
cyBhbiBTVkdGaWx0ZXIgYW5kIGl0CisgICAgICAgIGlzIGtlcHQgYXMgYSBGaWx0ZXJGdW5jdGlv
biBpbiB0aGUgQ1NTRmlsdGVyIGZ1bmN0aW9ucycgbGlzdC4gVGhlIEZpbHRlciAKKyAgICAgICAg
YXNzb2NpYXRlZCB3aXRoIHRoZSBGaWx0ZXJFZmZlY3RzIG9mIHRoZSByZWZlcmVuY2VkIGZpbHRl
ciB3aWxsIGJlIGFuCisgICAgICAgIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyBhIENTU0Zp
bHRlci4gVGhpcyB3aWxsIGFsbG93IGhhdmluZyBjb2xvcgorICAgICAgICBzcGFjaW5nIGZvciB0
aGUgcmVmZXJlbmNlZCBmaWx0ZXJzIGRpZmZlcmVudCBmcm9tIHRoZSBjb2xvciBzcGFjaW5nIG9m
CisgICAgICAgIENTU0ZpbHRlci4gCisKKyAgICAgICAgQWxzbyB0aGlzIHBhdGNoIG1ha2VzIGEg
c2luZ2xlIGZ1bmN0aW9uIGZvciBidWlsZGluZyB0aGUgcHJpbWl0aXZlcyBvZgorICAgICAgICB0
aGUgU1ZHRmlsdGVyIGluc3RlYWQgb2YgaGF2aW5nIHR3byBmdW5jdGlvbnMuCisKKyAgICAgICAg
VG8gYWxsb3cgb3BlcmF0aW5nIHRocm91Z2ggdGhlIFNWR0ZpbHRlciBhcyBhIEZpbHRlckZ1bmN0
aW9uIG93bmVkIGJ5CisgICAgICAgIENTU0ZpbHRlciwgdGhlIFNWR0ZpbHRlciB3aWxsIGhhdmUg
YSBwb2ludGVyIHRvIGl0cyBsYXN0RWZmZWN0LgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVmZmVjdFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQmx1ckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCcmlnaHRuZXNz
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRyYXN0RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlR3JheVNjYWxlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUh1ZVJvdGF0
ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbnZlcnRFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlT3BhY2l0eUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTYXR1cmF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Omxhc3RFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6Om91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJjZUlt
YWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckludGVycG9s
YXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1
aWxkRmlsdGVyRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpT
VkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisKKzIwMjEtMTAtMjggIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIFNWR0ZpbHRlciBh
bmQgQ1NTRmlsdGVyIHdvcmsgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMgc3lzdGVtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgU1ZHRmls
dGVyIHNldHMgdGhlIGZvbGxvd2luZyBtZW1iZXJzIG9mIEZpbHRlcgorCisgICAgICAgIDEuIEFm
ZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOiB0aGlzIGlzIHRoZSBzY2FsaW5nIHBh
cnQgZnJvbSB0aGUKKyAgICAgICAgICAgdHJhbnNmb3JtYXRpb24gZnJvbSB0aGUgdGFyZ2V0IGVs
ZW1lbnQgdG8gdGhlIG91dGVybW9zdCBjb29yZGluYXRlIHN5c3RlbQorICAgICAgICAyLiBGbG9h
dFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOiB0aGlzIGlzIHRoZSBjbGFtcGluZyBzY2FsZSBpZiB0
aGUgc2l6ZQorICAgICAgICAgICBvZiB0aGUgcmVzdWx0IEltYWdlQnVmZmVycyBleGNlZWRzIE1h
eENsYW1wZWRBcmVhCisKKyAgICAgICAgQW5kIHRoZSBDU1NGaWx0ZXIgc2V0cyB0aGUgZm9sbG93
aW5nIG1lbWJlciBvZiBGaWx0ZXI6CisKKyAgICAgICAgMS4gZmxvYXQgbV9maWx0ZXJTY2FsZTog
dGhpcyBpcyB0aGUgZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpCisKKyAgICAgICAgVGhl
IGRpc2NyZXBhbmN5IGhhcHBlbnMgYWxzbyB3aGVuIGNyZWF0aW5nIHRoZSByZXN1bHQgSW1hZ2VC
dWZmZXJzLiBGb3IgCisgICAgICAgIFNWR0ZpbHRlciwgd2UgY3JlYXRlIHRoZW0gd2l0aCBzY2Fs
ZUZhY3Rvcj0xLiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZQorICAgICAgICA9PSBiYWNrZW5k
U2l6ZS4gQnV0IGZvciBDU1NGaWx0ZXIgd2UgY3JlYXRlIHRoZW0gd2l0aCBzY2FsZUZhY3Rvcgor
ICAgICAgICA9IG1fZmlsdGVyU2NhbGUuIFRoaXMgbWVhbnMgdGhlIGxvZ2ljYWxTaXplICE9IGJh
Y2tlbmRTaXplIGluIHRoaXMgY2FzZS4KKworICAgICAgICBXZSBuZWVkIHRvIHVuaWZ5IHRoZSBj
b29yZGluYXRlcyBzeXN0ZW0gZm9yIGJvdGggZmlsdGVycy4gV2UgbmVlZCBhbHNvIHRvCisgICAg
ICAgIHJlcGxhY2UgdGhlIHRocmVlIG1lbWJlcnMgYnkgYSBzaW5nbGUgRmxvYXRTaXplIGNhbGxl
ZCAibV9maWx0ZXJTY2FsZSIuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6
OmZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNldFNvdXJj
ZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2Nh
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpmaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyUmVzb2x1dGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpv
dXRwdXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondy
aXRlU1ZHUmVzb3VyY2VDb250YWluZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRl
clNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoK
KworMjAyMS0xMC0yNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAg
ICAgICBbR1BVIFByb2Nlc3NdIEludHJvZHVjZSBGaWx0ZXJGdW5jdGlvbiBhbmQgbWFrZSBpdCB0
aGUgYmFzZSBjbGFzcyBvZiBGaWx0ZXIgYW5kIEZpbHRlckVmZmVjdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDEzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhbGxvd3MgQ1NTRmlsdGVyIHRv
IGhvbGQgYSBsaXN0IG9mIEZpbHRlckZ1bmN0aW9ucy4gVGhlIEZpbHRlciBpbgorICAgICAgICB0
aGlzIGNhc2Ugd2lsbCBhY3QgbGlrZSBhIGNvbXBvc2l0ZSBwYXR0ZXJuIG9mIHRoZSBGaWx0ZXJF
ZmZlY3QuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvCisgICAgICAgIDEuIFJlbW92ZXMgdGhl
IHZpcnR1YWwgZnVuY3Rpb24gZmlsdGVyTmFtZSgpIGZyb20gYWxsIHRoZSBGaWx0ZXJFZmZlY3QK
KyAgICAgICAgICAgY2xhc3Nlcy4gSXQgcmVwbGFjZXMgaXQgd2l0aCBhIHN0YXRpYyBmdW5jdGlv
biBpbiBGaWx0ZXJGdW5jdGlvbi4KKyAgICAgICAgMi4gUmVtb3ZlcyB0aGUgdmlydHVhbCBmdW5j
dGlvbiBmaWx0ZXJFZmZlY3RUeXBlKCkgYW5kIHRoZSBmdW5jdGlvbgorICAgICAgICAgICBGaWx0
ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlwZSgpIHNpbmNlIHRoZXkgY2FuIGJvdGggYmUg
cmVwbGFjZWQKKyAgICAgICAgICAgYnkgRmlsdGVyRnVuY3Rpb246OmZpbHRlclR5cGUoKS4KKyAg
ICAgICAgMy4gQWRkcyB0cmFpdCBtYWNyb3MgZm9yIGFsbCBGaWx0ZXJFZmZlY3RzIGFuZCB0aGUg
U1ZHRmlsdGVycyBjbGFzcy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpGRUJsZW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRy
aXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
OgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChpc1R5
cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRN
YXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6RkVPZmZzZXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpGRVR1cmJ1bGVuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6Cisg
ICAgICAgIChpc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJF
ZmZlY3RUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6ZmlsdGVyTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZp
bHRlck5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVu
Y3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVy
VHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNDU1NGaWx0
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzU1ZHRmlsdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXJFZmZlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUFscGhhTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlR3JhcGhpY05hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlck5hbWUgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VB
bHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Yzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1h
Z2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorCiAyMDIxLTExLTA2ICBUeWxlciBXaWxjb2NrICA8dHls
ZXJfd0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFdlYktpdDEgUGx1Z2luVmlld0Jhc2Ugb2Jq
ZWN0cyB3aXRoIGFuIGFzc29jaWF0ZWQgd2lkZ2V0KCktPnBsYXRmb3JtV2lkZ2V0KCkgc2hvdWxk
IGJlIGNvbnNpZGVyZWQgYXR0YWNobWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNjQ5MzIxNWRiZDY4
ZTBmMTJiYTJiZjg3YzU0Yjg0MjdmYzdlZGU1Yy4uNmQ0MWIzOTE1MTI3NDZkNGRjMDhhZTFiZmZl
NTRmMjUwYTBhYmJlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwODksNiArMjA4OSw4IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGZkNTkxOGE4NTRkZThhOThmMmVmYjE0MDQ3ODFmY2Q3Y2FkOTQ3MGYuLmY5N2Zk
NmFjYTA4YzE5NmViYzk0NWY2MTgyM2I3YzVmMTE2ZDc5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTYsNiArMjI5Niw3
IEBACiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4
QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgw
RDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5
U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0
RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJG
QjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1h
Z2UuaCAqLzsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUx
MjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8q
IE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0
MDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwODQ0LDYgKzEwODQ1LDggQEAKIAkJNzI0RUU1
NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2Vy
dmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFu
Z2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENB
REMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZl
SW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQx
MDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2
QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAw
ODMzOTc1IC8qIFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNjZGMDE0MjI0MUJGQjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9y
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUg
LyogU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmlt
aXRpdmVQcm9wZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDg1NCw2ICsxMDg1Nyw5IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmlt
YXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
aW9uQWRkaXRpdmVMaXN0RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNjZGMDI5MjI0MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RG
dW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5
NzUgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjky
NzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI2QkUwMkIyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNkJFMDM5MjczMzRCNDIwMDczOEZGRCAvKiBGaWx0ZXJCb3VuZGFyeVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODg5OCwxMSArMTg5MDQsMTEgQEAKIAkJMUE1NjlDQzQwRDdFMkI2MDAw
N0MzOTgzIC8qIGJyaWRnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJNTlCNTk3NzExMTA4NjU1NjAwNzE1OUU4IC8qIGpzYyAqLywKIAkJCQkxQTU2OUNF
MjBEN0UyQjgyMDA3QzM5ODMgLyogb2JqYyAqLywKIAkJCQk1OTlFNzU4RjExMDU1QTFGMDBEOTA0
RkEgLyogQnJpZGdlLmggKi8sCiAJCQkJMUE3MUQ1NzkwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50
aWZpZXJSZXAuY3BwICovLAogCQkJCTFBNzFENTdBMEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlm
aWVyUmVwLmggKi8sCi0JCQkJNTlCNTk3NzExMTA4NjU1NjAwNzE1OUU4IC8qIGpzYyAqLywKIAkJ
CQkxQTU2OUNFRjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5jcHAgKi8sCiAJCQkJ
MUE1NjlDRjAwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXkuaCAqLywKIAkJCQkxQTU2
OUNGMTBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9tZXRob2QuY3BwICovLApAQCAtMjU4NDIs
MTAgKzI1ODQ4LDE1IEBACiAJCQkJODQ3MzBENkYxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVs
ZW5jZS5jcHAgKi8sCiAJCQkJODQ3MzBENzAxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5j
ZS5oICovLAogCQkJCTg0NUU3MkY3MEZEMjYxRUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKKwkJ
CQk3MjZCRTAzOTI3MzM0QjQyMDA3MzhGRkQgLyogRmlsdGVyQm91bmRhcnlTZXQuaCAqLywKIAkJ
CQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmNwcCAqLywKIAkJCQkw
OEM5MjUxODBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggKi8sCiAJCQkJMkM4NTY1
MzgyNEMxMEIwQjAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCAqLywKIAkJCQky
Qzg1NjUzMzI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCAqLywKKwkJ
CQk3MjYyRDc1NzI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uY3BwICovLAorCQkJ
CTcyNjJENzU2MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJGdW5jdGlvbi5oICovLAorCQkJCTcy
NkJFMDI5MjcyRkIxNzEwMDczOEZGRCAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8sCisJCQkJNzI2QkUw
MkIyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8sCiAJCQkJNDlFQ0VCNjMxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNDlFQ0VCNjQxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovLAogCQkJCTQ5RUNFQjY1MTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLywKQEAgLTMzMzMwLDYgKzMzMzQx
LDcgQEAKIAkJCQkwOEM5MjUxQTBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkyQzg1NjUzNDI0QzBGNzNDMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0
UmVuZGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJDQUE0QTNBMjRCRTE4QjcwMDlERUU3MCAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2
QkUwMkQyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUVDRUI2RTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OUVDRUI3MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzcyQzAwRDkxMjk2MTlGODAwNUM5NTc1IC8qIEZpbmRPcHRp
b25zLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
aWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcAppbmRleCBjNjdhMzViMDcxNWI3MjFlZDg5OTJkZWNkNDlmYThkMGI4MDY0NzcwLi4y
OWM3NmY4M2UzZTVkNGI0NzYzZDFiYjhiMGY5NjEwY2IyZTczODJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0xMTYsMjAgKzExNiwyMSBAQCBSZWZQ
dHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIEltYWdlIGludG8gSW1hZ2VC
dWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUg
dW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAo
IXRleHR1cmUpCisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsKKyAgICBhdXRvIHNvdXJjZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQogICAgICAgICByZXR1cm4gJklt
YWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9
LCBzaXplIH07Ci0gICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdl
UmVjdCk7CisgICAgYXV0byBzb3VyY2VJbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUg
fTsKKyAgICBzb3VyY2VJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIHNvdXJjZUlt
YWdlUmVjdCk7CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0g
ICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NG
aWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNzc0ZpbHRlci0+c2V0
RmlsdGVyUmVnaW9uKGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRl
cmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikp
CisgICAgYXV0byBjc3NGaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlciwgbV9maWx0
ZXJPcGVyYXRpb25zLCByZW5kZXJpbmdNb2RlKTsKKyAgICBpZiAoIWNzc0ZpbHRlcikKICAgICAg
ICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7Ci0gICAgY3NzRmlsdGVyLT5hcHBseSgpOwor
CisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKKyAg
ICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2UpKTsKKyAgICBj
c3NGaWx0ZXItPmFwcGx5RmlsdGVyKCk7CiAKICAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXIt
Pm91dHB1dCgpOwogICAgIGlmICghb3V0cHV0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDg4Y2U5NDI0OTczZjc4YmJmMTllYjNm
MWMzOTc4MDRlZDBlNzNmZjYuLmI4ZTk4ZDdhODI5ZWI5YmYyNGQ1NzM1YWFhOGQyNWFlYTk5OTlk
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAKQEAgLTEzMyw3ICsxMzMsNyBAQCBib29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUsIEZsb2F0U2l6ZSYgc2NhbGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vIFRoZSBhcmVhIG9mIHNjYWxlZCBzaXplIGlzIGJpZ2dlciB0
aGFuIHRoZSB1cHBlciBsaW1pdCwgYWRqdXN0IHRoZSBzY2FsZSB0byBmaXQuCi0gICAgc2NhbGUu
c2NhbGUoc3FydGYoTWF4Q2xhbXBlZEFyZWEgLyAoc2NhbGVkU2l6ZS53aWR0aCgpICogc2NhbGVk
U2l6ZS5oZWlnaHQoKSkpKTsKKyAgICBzY2FsZS5zY2FsZShzcXJ0ZihNYXhDbGFtcGVkQXJlYSAv
IHNjYWxlZFNpemUuYXJlYSgpKSk7CiAgICAgQVNTRVJUKCFzaXplTmVlZHNDbGFtcGluZyhzaXpl
LCBzY2FsZSkpOwogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaAppbmRleCBlNmM4ZGY0ZDU1YjQ1NjEzNTQ5ZTNhZjQ5
MTkyYTI2ZTJjMDQ0YWY3Li43Y2QxNmEyODVmZTllMDliYTFhZTQ3MjYxMGU5ODYwYzcyZmJjNzVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2Uv
RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaApA
QCAtNDcsMjAgKzQ3LDIwIEBAIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlIDog
cHVibGljIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlPiB0cnlDcmVhdGUoRmlsdGVy
RWZmZWN0Jik7CiAgICAgUmV0YWluUHRyPENJQ29udGV4dD4gc2hhcmVkQ0lDb250ZXh0KCk7Ci0g
ICAgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JikgZmluYWw7CisgICAgdm9pZCBhcHBs
eUVmZmVjdHMoY29uc3QgRmlsdGVyJiwgRmlsdGVyRWZmZWN0JikgZmluYWw7CiAgICAgYm9vbCBo
YXNSZXN1bHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX291dHB1dEltYWdlOyB9CiAgICAgSW1h
Z2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0IGZpbmFsOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChj
b25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3Qo
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7CiAgICAgdm9p
ZCBjbGVhclJlc3VsdCgpIGZpbmFsOwogICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
KCk7CiAgICAgCiBwcml2YXRlOgotICAgIFJldGFpblB0cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0
ZXJzKEZpbHRlckVmZmVjdCYpOwotICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJF
ZmZlY3QmKSBmaW5hbDsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gY29ubmVjdENJRmlsdGVycyhj
b25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKTsKKyAgICB2b2lkIHJlbmRlclRvSW1hZ2VCdWZm
ZXIoY29uc3QgRmlsdGVyJiwgRmlsdGVyRWZmZWN0JikgZmluYWw7CiAgICAgc3RhdGljIGJvb2wg
c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0Jik7CiAgICAgc3RhdGljIGJv
b2wgY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7CiAgICAgCi0gICAgUmV0
YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJik7Cisg
ICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yU291cmNlR3JhcGhpYyhjb25zdCBGaWx0ZXIm
KTsKICAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4KGNvbnN0IEZF
Q29sb3JNYXRyaXgmLCBjb25zdCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwogICAgIFJl
dGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgRkVDb21w
b25lbnRUcmFuc2ZlciYsIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+Jik7CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KaW5kZXggOTdl
MTEzN2IyOWQ3MWMyYjU0NDE1NzMwNjcyNDAwYjgyNDI4YjM2MS4uYmRkNTFmNTVhMzI4MmQ0OWFm
MDY4OWM5MGQ1ODhjZDVkZjk3NWQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZS5tbQpAQCAtNzIsMTEgKzcyLDExIEBAIHN0YXRpYyBib29sIGlz
TnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihjb25zdCBGRUNvbXBvbmVudFRy
YW5zZmVyJiBlCiBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpzdXBwb3J0c0Nv
cmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICAvLyBGSVhNRTog
Y2hhbmdlIHJldHVybiB2YWx1ZSB0byB0cnVlIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQKLSAg
ICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRjaCAo
ZWZmZWN0LmZpbHRlclR5cGUoKSkgewogICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3Vy
Y2VHcmFwaGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDogeworICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpGRUNvbG9yTWF0cml4OiB7CiAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8RkVDb2xv
ck1hdHJpeD4oZWZmZWN0KS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfVU5LTk9XTjoKICAgICAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9B
TFBIQToKQEAgLTg4LDkwICs4OCw1NSBAQCBib29sIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUlt
YWdlOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZlY3QmIGVmZgogICAgICAg
ICB9CiAgICAgfQogCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5z
ZmVyOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyOgog
ICAgICAgICByZXR1cm4gaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKGRv
d25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCkpOwogCi0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3Np
dGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlw
ZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5n
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zm
c2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBo
YToKKyAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlF
ZmZlY3RzKEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZm
ZWN0JiBsYXN0RWZmZWN0KQogewotICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJz
KGxhc3RFZmZlY3QpOworICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRl
ciwgbGFzdEVmZmVjdCk7CiAgICAgaWYgKCFtX291dHB1dEltYWdlKQogICAgICAgICByZXR1cm47
Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsKKyAgICByZW5kZXJUb0ltYWdl
QnVmZmVyKGZpbHRlciwgbGFzdEVmZmVjdCk7CiB9CiAKLVJldGFpblB0cjxDSUltYWdlPiBGaWx0
ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyhGaWx0ZXJFZmZlY3Qm
IGVmZmVjdCkKK1JldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZTo6Y29ubmVjdENJRmlsdGVycyhjb25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0JiBl
ZmZlY3QpCiB7CiAgICAgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4gaW5wdXRJbWFnZXM7CiAg
ICAgCiAgICAgZm9yIChhdXRvIGluIDogZWZmZWN0LmlucHV0RWZmZWN0cygpKSB7Ci0gICAgICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMoKmluKTsKKyAgICAgICAgYXV0byBp
bnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycyhmaWx0ZXIsICppbik7CiAgICAgICAgIGlmICgh
aW5wdXRJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpbnB1dElt
YWdlcy5hcHBlbmQoaW5wdXRJbWFnZSk7CiAgICAgfQotICAgIGVmZmVjdC5kZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpOwotICAgIGVmZmVjdC5zZXRSZXN1bHRDb2xvclNwYWNlKGVmZmVjdC5v
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIAotICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWlu
dFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVj
dC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpCisKKyAgICBhdXRvIGFic29sdXRlSW1hZ2VS
ZWN0ID0gZWZmZWN0LmNhbGN1bGF0ZUFic29sdXRlSW1hZ2VSZWN0KGZpbHRlcik7CisgICAgaWYg
KGFic29sdXRlSW1hZ2VSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCi0gICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKKyAg
ICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJUeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6U291cmNlR3JhcGhpYzoKLSAgICAgICAgcmV0dXJuIGltYWdlRm9yU291cmNlR3JhcGhp
Yyhkb3duY2FzdDxTb3VyY2VHcmFwaGljPihlZmZlY3QpKTsKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Q29sb3JNYXRyaXg6CisgICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBo
aWMoZmlsdGVyKTsKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeDoK
ICAgICAgICAgcmV0dXJuIGltYWdlRm9yRkVDb2xvck1hdHJpeChkb3duY2FzdDxGRUNvbG9yTWF0
cml4PihlZmZlY3QpLCBpbnB1dEltYWdlcyk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkNvbXBvbmVudFRyYW5zZmVyOgorICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBv
bmVudFRyYW5zZmVyOgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVy
KGRvd25jYXN0PEZFQ29tcG9uZW50VHJhbnNmZXI+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKIAot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhvc2UgZmlsdGVycyB1c2luZyBDSUZpbHRlciBzbyB0
aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsaWQgQ0lJbWFnZQotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9z
aXRlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGlu
ZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9m
ZnNldDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxw
aGE6CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljJiBlZmZlY3Qp
CitSZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmltYWdl
Rm9yU291cmNlR3JhcGhpYyhjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UgPSBlZmZlY3QuZmlsdGVyKCkuc291cmNlSW1hZ2UoKTsKKyAgICBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXNv
dXJjZUltYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTI3MywyMiArMjM4
LDIyIEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6b3V0cHV0
KCkgY29uc3QKICAgICByZXR1cm4gbV9vdXRwdXRJbWFnZUJ1ZmZlci5nZXQoKTsKIH0KICAgICAK
LXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIo
RmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQordm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihjb25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZm
ZWN0JiBsYXN0RWZmZWN0KQogewotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsK
LSAgICBtX291dHB1dEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
bGFtcGVkU2l6ZSwgbGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpLCBsYXN0RWZmZWN0
LnJlc3VsdENvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBJbnRTaXplIGRl
c3RTaXplID0gbGFzdEVmZmVjdC5jYWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVjdChmaWx0ZXIpLnNp
emUoKTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUoZGVzdFNpemUpOworICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAxLCBsYXN0RWZmZWN0LmltYWdlQ29sb3JTcGFjZSgp
LCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewog
ICAgICAgICBjbGVhclJlc3VsdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgW3No
YXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3Vy
ZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZlci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVz
dFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTpsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2Uo
KS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07CisgICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJl
bmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZl
ci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QoZmlsdGVyLCBsYXN0RWZmZWN0
KSBjb2xvclNwYWNlOmxhc3RFZmZlY3QuaW1hZ2VDb2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNw
YWNlKCldOwogfQogICAgIAotRmxvYXRSZWN0IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpIGNvbnN0CitGbG9hdFJl
Y3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpIGNvbnN0CiB7Ci0gICAgSW50
U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0g
ICAgZGVzdFNpemUuc2NhbGUobGFzdEVmZmVjdC5maWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKKyAg
ICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5jYWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVj
dChmaWx0ZXIpLnNpemUoKTsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBkZXN0U2l6ZSk7CiAgICAgcmV0dXJuIGRlc3RSZWN0OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxl
bmRORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRl
cnMvRkVCbGVuZE5FT04uaAppbmRleCAyNjExMGNkZmIwYmI2Y2Y0OTA0NTgzODc3ODdhYzEwZmEx
NzFjZjE4Li5kMzcwZjAyMmVhMTFhYWEwMWFjMjcwYmM0MjdiOTc4ZjU5NzY0NDRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVC
bGVuZE5FT04uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMvRkVCbGVuZE5FT04uaApAQCAtMjUsOCArMjUsNyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIEZFQmxlbmRORU9OX2gKLSNkZWZpbmUgRkVCbGVuZE5FT05faAorI3By
YWdtYSBvbmNlCiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAKQEAgLTEwNyw0MyAr
MTA2LDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0g
ICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLQotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEo
KTsKLQotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIHNvdXJj
ZVBpeGVsQXJyYXlBID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0
KTsKLQotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3Vy
Y2VQaXhlbEFycmF5QiA9IGluMi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1Jl
Y3QpOwotCi0gICAgdW5zaWduZWQgc291cmNlUGl4ZWxBcnJheUxlbmd0aCA9IHNvdXJjZVBpeGVs
QXJyYXlBLT5sZW5ndGgoKTsKLSAgICBBU1NFUlQocGl4ZWxBcnJheUxlbmd0aCA9PSBzb3VyY2VQ
aXhlbEFycmF5Qi0+bGVuZ3RoKCkpOwotCi0gICAgaWYgKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgg
Pj0gOCkgewotICAgICAgICBwbGF0Zm9ybUFwcGx5TkVPTihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0
YSgpLCBzb3VyY2VQaXhlbEFycmF5TGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgotICAg
IEFTU0VSVChzb3VyY2VQaXhlbEFycmF5TGVuZ3RoID4gMCk7Ci0gICAgdWludDMyX3Qgc291cmNl
QVsyXSA9IHswLCAwfTsKLSAgICB1aW50MzJfdCBzb3VyY2VCQW5kRGVzdFsyXSA9IHswLCAwfTsK
LQotICAgIHNvdXJjZUFbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc291cmNlUGl4
ZWxBcnJheUEtPmRhdGEoKSlbMF07Ci0gICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Kj4oc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSlbMF07Ci0gICAgcGxh
dGZvcm1BcHBseU5FT04ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oc291cmNlQkFuZERlc3QpLCA4KTsKLSAgICByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSlbMF0gPSBzb3VyY2VCQW5kRGVzdFsw
XTsKLX0KLQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBz
cmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNo
YXIqIGRzdFBpeGVsQXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNvbG9yQXJyYXlMZW5ndGgpCit2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKHVu
c2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5
QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0
aCkKIHsKICAgICB1aW50OF90KiBzb3VyY2VQaXhlbEEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihzcmNQaXhlbEFycmF5QSk7CiAgICAgdWludDhfdCogc291cmNlUGl4ZWxCID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oc3JjUGl4ZWxBcnJheUIpOwpAQCAtMjAyLDggKzE2NSw0NiBA
QCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVs
QXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcgogICAgIH0KIH0KIAorYm9vbCBGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICpp
bnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSAqaW5wdXRF
ZmZlY3QoMSktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdl
KCk7CisKKyAgICBhdXRvJiBvdXB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3VwdXRQaXhl
bEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxB
cnJheSA9IG91cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gaW5wdXRJbWFnZVJl
Y3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dCk7CisgICAgYXV0byBp
bnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCk7CisKKyAgICBhdXRvIGlucHV0SW1h
Z2VSZWN0MiA9IG91dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0Mik7CisgICAg
YXV0byBpbnB1dFBpeGVsQXJyYXkyID0gaW5wdXQyLmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0Mik7CisKKyAgICB1bnNp
Z25lZCBpbnB1dFBpeGVsQXJyYXlMZW5ndGggPSBpbnB1dFBpeGVsQXJyYXktPmxlbmd0aCgpOwor
ICAgIEFTU0VSVChpbnB1dFBpeGVsQXJyYXlMZW5ndGggPT0gaW5wdXRQaXhlbEFycmF5Mi0+bGVu
Z3RoKCkpOworCisgICAgaWYgKGlucHV0UGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7CisgICAgICAg
IHBsYXRmb3JtQXBwbHlORU9OKGlucHV0UGl4ZWxBcnJheS0+ZGF0YSgpLCBpbnB1dFBpeGVsQXJy
YXkyLT5kYXRhKCksIG91dHB1dFBpeGVsQXJyYXkuZGF0YSgpLCBpbnB1dFBpeGVsQXJyYXlMZW5n
dGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBpcyBq
dXN0IG9uZSBwaXhlbCB3ZSBleHBhbmQgaXQgdG8gdHdvLgorICAgIEFTU0VSVChpbnB1dFBpeGVs
QXJyYXlMZW5ndGggPiAwKTsKKyAgICB1aW50MzJfdCBzb3VyY2VBWzJdID0geyAwLCAwIH07Cisg
ICAgdWludDMyX3Qgc291cmNlQkFuZERlc3RbMl0gPSB7IDAsIDAgfTsKKworICAgIHNvdXJjZUFb
MF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oaW5wdXRQaXhlbEFycmF5LT5kYXRhKCkp
WzBdOworICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGlucHV0UGl4ZWxBcnJheTItPmRhdGEoKSlbMF07CisKKyAgICBwbGF0Zm9ybUFwcGx5TkVPTihy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oc291cmNlQkFuZERlc3QpLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VC
QW5kRGVzdCksIDgpOworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihvdXRwdXRQaXhl
bEFycmF5LmRhdGEoKSlbMF0gPSBzb3VyY2VCQW5kRGVzdFswXTsKKworICAgIHJldHVybiB0cnVl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi0KLSNlbmRpZiAvLyBGRUJsZW5kTkVPTl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdo
dFNvdXJjZS5jcHAKaW5kZXggZTVmYjFmZjY2NWQzZWIwN2Y0OGVlMWQwMmJiZmZjYzZiMDQ0MWY4
OS4uMWZiMDM3ZmUxMWY2NjkxZWQwMzk0YTQ0ZWFjY2QwMjc5YmI2ZDBiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlz
dGFudExpZ2h0U291cmNlLmNwcApAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZp
bHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQordm9pZCBEaXN0YW50TGln
aHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0JiwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiB7CiAgICAgZmxvYXQgYXppbXV0aCA9
IGRlZzJyYWQobV9hemltdXRoKTsKICAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFkKG1fZWxl
dmF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCmluZGV4IGMxZTMwZWRlNzU5ODM3Mjhh
NjMyYmNjZmZiMDk5NzNhM2E0ZTcyZmQuLjAwM2ZlMTljZDEyNjIzOTk2N2IxYjIyMjZmZDc5MDU1
NDJiZWJkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaApAQCAtNDEsNyArNDEsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzZXRBemltdXRoKGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNl
dEVsZXZhdGlvbihmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEo
Y29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAgdm9pZCBp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpIG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhl
bExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHop
IGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggNWFjN2Y0
OTBkNGNkYTUzM2E0MWY1YzNkODU0NTMyYzE4YWRjZGI2Ni4uOTg3NjU3M2NmZjI3NDE2NTRiYmQz
NTJhMjgwYWYzMDlhODRmYTZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC0zNCwxNSArMzQsMTUgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRUJsZW5kOjpGRUJsZW5kKEZpbHRlciYgZmlsdGVyLCBCbGVu
ZE1vZGUgbW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkJsZW5kKQorRkVC
bGVuZDo6RkVCbGVuZChCbGVuZE1vZGUgbW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFQmxlbmQpCiAgICAgLCBtX21vZGUobW9kZSkKIHsKIH0KIAotUmVmPEZF
QmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQmxlbmRNb2RlIG1vZGUpCitS
ZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEJsZW5kTW9kZSBtb2RlKQogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFQmxlbmQoZmlsdGVyLCBtb2RlKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVCbGVuZChtb2RlKSk7CiB9CiAKIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2Rl
KEJsZW5kTW9kZSBtb2RlKQpAQCAtNTQsMjMgKzU0LDI5IEBAIGJvb2wgRkVCbGVuZDo6c2V0Qmxl
bmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogfQogCiAjaWYgIUhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVCbGVuZDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZl
Y3QoMSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7
CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFnZSgpOworICAg
IGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdl
KQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0g
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFn
ZUJ1ZmZlcigpOworICAgIGF1dG8gaW5wdXRJbWFnZTIgPSBpbnB1dDIuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWlucHV0SW1hZ2UyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAg
aWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1hZ2VCdWZm
ZXIqIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZm
ZXIqIGltYWdlQnVmZmVyMiA9IGluMi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIWlt
YWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlu
cHV0SW1hZ2VSZWN0ID0gRmxvYXRSZWN0KGlucHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3Qo
b3V0cHV0KSk7CisgICAgYXV0byBpbnB1dEltYWdlUmVjdDIgPSBGbG9hdFJlY3QoaW5wdXQyLnJl
bGF0aXZlQWJzb2x1dGVJbWFnZVJlY3Qob3V0cHV0KSk7CiAKLSAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
Mi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7CisgICAgR3JhcGhpY3NDb250ZXh0
JiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIG91dHB1dENv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlMiwgaW5wdXRJbWFnZVJlY3QyKTsKKyAg
ICBvdXRwdXRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJl
Y3QsIHsgeyB9LCBpbnB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0
b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oCmluZGV4IDcwZTg0MDdiZjVjMjAwZDQ1MjE2YjhmOWMwODUxN2I1MDc5ZTc5NjYuLjMzNjkz
YzE5OTdiYmE3YmJkZTg4OTA1ODdiMTU2ZWVlMzM3NmM1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC0yMywyMiArMjMs
MjEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNs
dWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRkVCbGVuZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVCbGVuZD4gY3JlYXRlKEZpbHRlciYsIEJsZW5kTW9kZSk7Cisg
ICAgc3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoQmxlbmRNb2RlKTsKIAogICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KICAgICBib29sIHNldEJsZW5k
TW9kZShCbGVuZE1vZGUpOwogCiBwcml2YXRlOgotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVCbGVuZCI7IH0KKyAgICBGRUJsZW5kKEJsZW5kTW9k
ZSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJv
b2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIHZv
aWQgcGxhdGZvcm1BcHBseUdlbmVyaWModW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVu
c2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7
CiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5
QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVs
QXJyYXksCkBAIC00NiwxMCArNDUsOSBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBGRUJsZW5kKEZpbHRlciYsIEJsZW5kTW9kZSk7
Ci0KICAgICBCbGVuZE1vZGUgbV9tb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVCbGVuZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCmluZGV4IDE2NDIyZDZkYzViNTdlYzZmNzQ3YTQyMTBjMjg1NDMzMmJhMWQzZTUu
LmE5ZTUyMmE4ZWNjN2VhYzgzNTlmOTIzZjBkNzkzNTc3NzU2NGFkYmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcApAQCAtMzUsMTYgKzM1LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVD
b2xvck1hdHJpeDo6RkVDb2xvck1hdHJpeChGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBl
IHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpDb2xvck1hdHJpeCkKK0ZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoQ29sb3JN
YXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCisgICAgOiBGaWx0ZXJFZmZl
Y3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbG9yTWF0cml4KQogICAgICwgbV90eXBlKHR5cGUp
CiAgICAgLCBtX3ZhbHVlcyhXVEZNb3ZlKHZhbHVlcykpCiB7CiB9CiAKLVJlZjxGRUNvbG9yTWF0
cml4PiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlw
ZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorUmVmPEZFQ29sb3JNYXRyaXg+IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZShDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZh
bHVlcykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbG9yTWF0cml4KGZpbHRlciwg
dHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xv
ck1hdHJpeCh0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKIH0KIAogYm9vbCBGRUNvbG9yTWF0cml4
OjpzZXRUeXBlKENvbG9yTWF0cml4VHlwZSB0eXBlKQpAQCAtMjczLDIzICsyNzMsMzkgQEAgdm9p
ZCBlZmZlY3RUeXBlKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8
ZmxvYXQ+JiB2YWx1ZXMsIEludFMKICAgICB9CiB9CiAKLXZvaWQgRkVDb2xvck1hdHJpeDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVDb2xvck1hdHJpeDo6aXNBbHBoYUltYWdlKCkg
Y29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgcmV0
dXJuIG1fdHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQTsKK30KIAot
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworVmVjdG9yPGZsb2F0PiBG
RUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
cykKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKKyAgICBy
ZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKK30KKworYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1
dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1h
Z2UoKTsKKyAgICAKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1h
Z2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKGlu
QnVmZmVyKQotICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigq
aW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKKyAgICBhdXRvIGlucHV0QnVmZmVyID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoaW5wdXRCdWZmZXIpIHsKKyAgICAgICAgYXV0byBhYnNvbHV0ZUltYWdlUmVjdCA9IEZsb2F0
UmVjdChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOworICAgICAgICBv
dXRwdXRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRCdWZmZXIsIGFic29s
dXRlSW1hZ2VSZWN0KTsKKyAgICB9CiAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQo
KSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpOwotICAgIGF1dG8gcGl4ZWxC
dWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwor
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBvdXRwdXQuY29sb3JTcGFjZSgpIH07
CisgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgb3V0cHV0SW1hZ2UtPnRydW5jYXRl
ZExvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBvdXRwdXRJbWFnZS0+Z2V0
UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgcGl4ZWxB
cnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgYXV0byBwaXhlbEFycmF5RGltZW5zaW9u
cyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7CkBAIC0zMTAsMTEgKzMyNiwxMSBAQCB2b2lkIEZFQ29s
b3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CiAgICAgICAgIGVmZmVjdFR5
cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVl
cywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZl
cigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgb3V0cHV0SW1hZ2UtPnB1dFBpeGVsQnVm
ZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0
cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKaW5kZXggMjllNDFhOGFlZDFlNGYwYjUzOTcw
M2FjNGRiNTUyNGVmYTRjMTIzZi4uYzNmOGJkMGJjNGE4NTg1ZmIxMzYzMWNjN2RmZjFiZTRmMzg0
MjMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKQEAgLTIyLDggKzIyLDYgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM2LDcg
QEAgZW51bSBDb2xvck1hdHJpeFR5cGUgewogCiBjbGFzcyBGRUNvbG9yTWF0cml4IDogcHVibGlj
IEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBj
cmVhdGUoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOworICAgIHN0
YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4gY3JlYXRlKENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKIAogICAgIENvbG9yTWF0cml4VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CiAgICAgYm9vbCBzZXRUeXBlKENvbG9yTWF0cml4VHlwZSk7CkBAIC00OCwxMyArNDYs
MTQgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRl
Q29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOwogICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRz
LCBmbG9hdCB2YWx1ZSk7Ci0KKyAgICBzdGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxv
YXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcyk7CisgICAgCiBwcml2YXRlOgotICAgIEZF
Q29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwor
ICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCi0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbG9y
TWF0cml4IjsgfQorICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTkzLDcgKzkyLDQgQEAgaW5saW5lIHZv
aWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXgpCi0gICAgc3RhdGljIGJvb2wg
aXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZl
Y3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBl
OjpDb2xvck1hdHJpeDsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb2xvck1hdHJpeCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IDg0N2VhNThmNWY5YjAzODY2ZDllYWM1N2YxMGNjZjU3
NDAyZjllNjMuLjJjZDdjZmNiNTViNjVmNzhlOWE1YmY0MTFiOGI4YmVkMjUyZjk5YmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMzMsOSArMzMsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIo
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0
aW9uLAotICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OkNvbXBvbmVudFRyYW5zZmVyKQorRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRG
dW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQorICAgIDogRmlsdGVyRWZmZWN0
KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKICAgICAsIG1fcmVkRnVu
Y3Rpb24ocmVkRnVuY3Rpb24pCiAgICAgLCBtX2dyZWVuRnVuY3Rpb24oZ3JlZW5GdW5jdGlvbikK
ICAgICAsIG1fYmx1ZUZ1bmN0aW9uKGJsdWVGdW5jdGlvbikKQEAgLTQzLDEwICs0MiwxMCBAQCBG
RUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYgZmlsdGVyLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlcgogewogfQogCi1SZWY8RkVDb21wb25lbnRUcmFuc2Zlcj4g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKK1JlZjxGRUNvbXBvbmVudFRyYW5zZmVy
PiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgcmVkRnVuY3Rpb24sCiAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
Z3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0
aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIoZmlsdGVyLCByZWRG
dW5jdGlvbiwgZ3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihyZWRGdW5jdGlvbiwg
Z3JlZW5GdW5jdGlvbiwgYmx1ZUZ1bmN0aW9uLCBhbHBoYUZ1bmN0aW9uKSk7CiB9CiAKIHZvaWQg
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKQEAgLTEwNCwxMyArMTAzLDE0IEBAIHZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZh
bHVlcywgY29uc3QgQ29tcG9uZW50CiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+
ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKIAotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1
ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwogICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7CiAKQEAgLTEyMCw4ICsxMjAsOSBAQCB2b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgTG9va3VwVGFibGUgYWxwaGFU
YWJsZTsKICAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVlblRhYmxlLCBibHVl
VGFibGUsIGFscGhhVGFibGUpOwogCi0gICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
aW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBkcmF3aW5n
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0g
b3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOworICAgIGlucHV0LmNvcHlQ
aXhlbEJ1ZmZlcihkZXN0aW5hdGlvblBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
CisKICAgICB1bnNpZ25lZCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5hdGlv
blBpeGVsQXJyYXkubGVuZ3RoKCk7CiAgICAgdWludDhfdCogZGF0YSA9IGRlc3RpbmF0aW9uUGl4
ZWxBcnJheS5kYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVs
T2Zmc2V0IDwgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7
CkBAIC0xMzAsNiArMTMxLDggQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVb
ZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0g
YWxwaGFUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwogICAgIH0KKworICAgIHJldHVybiB0
cnVlOwogfQogCiB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMo
TG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFi
bGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5oCmluZGV4IDJiNTg2ZGVmN2ZiNDJhMzdiMmUxMjNlZGE4NzExOWM0ZWIzNDhhNTEu
LjZhZGE5YzBhYmJlNWMyZjlkNjViZDkxOWZmZWM0ZjE3M2QwMDM0MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5oCkBAIC0yMiw4ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Myw4ICs1MSw3IEBAIHN0cnVj
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHsKIAogY2xhc3MgRkVDb21wb25lbnRUcmFuc2Zl
ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb21w
b25lbnRUcmFuc2Zlcj4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVu
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYWxwaGFGdW5jKTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+
IGNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBh
bHBoYUZ1bmMpOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiByZWRGdW5jdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVkRnVuY3Rpb247IH0KICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIGdyZWVuRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuRnVuY3Rpb247IH0K
QEAgLTYyLDEwICs1OSw3IEBAIHB1YmxpYzoKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IGFscGhhRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FscGhhRnVuY3Rpb247IH0KIAogcHJp
dmF0ZToKLSAgICBGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYsIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGdyZWVuRnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBh
bHBoYUZ1bmMpOwotCi0gICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVDb21wb25lbnRUcmFuc2ZlciI7IH0KKyAgICBGRUNvbXBvbmVudFRyYW5zZmVy
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVu
Yyk7CiAKICAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsK
IApAQCAtNzcsNyArNzEsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21wdXRlTG9va3VwVGFi
bGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1
cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKTsKIAotICAgIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25U
eXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtODksNiArODMsNCBAQCBwcml2YXRlOgogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RD
bGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBvbmVudFRyYW5z
ZmVyOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb21wb25lbnRUcmFuc2ZlcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5k
ZXggODMzNTMwOTA4MWEyNmJhMmMzMWMzYmRhYzg4ODY2OWUyOGUzNDU2ZC4uMzRiZThhNzZjMjcw
ZWQ3YTk4ZWQ2ODJjMDFjN2FiNTE3ZTM4OTk4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTMyLDgg
KzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbXBvc2l0ZTo6RkVDb21wb3Np
dGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZs
b2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6Q29tcG9zaXRlKQorRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKGNvbnN0
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVD
b21wb3NpdGUpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fazEoazEpCiAgICAgLCBtX2sy
KGsyKQpAQCAtNDIsOSArNDIsOSBAQCBGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsbwogewogfQogCi1S
ZWY8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KQorUmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGNvbnN0
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQg
azMsIGZsb2F0IGs0KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9zaXRlKGZp
bHRlciwgdHlwZSwgazEsIGsyLCBrMywgazQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RUNvbXBvc2l0ZSh0eXBlLCBrMSwgazIsIGszLCBrNCkpOwogfQogCiBib29sIEZFQ29tcG9zaXRl
OjpzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB0eXBlKQpAQCAtODcsMTQgKzg3
LDYgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpCi17
Ci0gICAgaWYgKG1fdHlwZSAhPSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwotfQot
ICAgIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQogewogICAgIHVuc2ln
bmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAw
IH07CkBAIC0yMDEsMTAwICsxOTMsMTA3IEBAIGlubGluZSB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0
Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291CiAjZW5k
aWYKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQor
RmxvYXRSZWN0IEZFQ29tcG9zaXRlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKLSAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6CisgICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BVE9QOiB7CiAgICAgICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZm
ZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCiAgICAgICAgIC8vIHRoZSBzZWNvbmQg
ZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25k
IGVmZmVjdCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgx
KS0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIGlucHV0MiA9ICppbnB1dEVmZmVjdCgx
KS0+ZmlsdGVySW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRp
dmVTdWJyZWdpb24oaW5wdXQyLmltYWdlUmVjdCgpLCBwcmltaXRpdmVTdWJyZWdpb24pOworICAg
IH0KKwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKICAgICAgICAg
Ly8gQXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSBy
ZWdpb24uIFNvIHdlIGNhbid0CiAgICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24g
aGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhF
ZmZlY3RSZWN0KCkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmlsdGVyLm1h
eFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOworCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgLy8gVGFrZSB0aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAg
ICBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGZp
bHRlciwgcHJpbWl0aXZlU3VicmVnaW9uKTsKICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLQorICAg
IGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8m
IGlucHV0MiA9ICppbnB1dEVmZmVjdCgxKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRw
dXQgPSAqZmlsdGVySW1hZ2UoKTsKKyAgICAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1
ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgICAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8g
b3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgICAg
IGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0g
ICAgICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgYXV0byBzb3Vy
Y2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0
LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICAgICAgaW4yLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
LQotICAgICAgICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSgqc291cmNlUGl4ZWxBcnJheSwg
ZGVzdGluYXRpb25QaXhlbEFycmF5LCBtX2sxLCBtX2syLCBtX2szLCBtX2s0KTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJz
b2x1dGVJbWFnZVJlY3QoaW5wdXQpOworICAgICAgICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlu
cHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IGlucHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBpZiAoIWlu
cHV0UGl4ZWxBcnJheSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QyID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJl
Y3QoaW5wdXQyKTsKKyAgICAgICAgaW5wdXQyLmNvcHlQaXhlbEJ1ZmZlcihvdXRwdXRQaXhlbEFy
cmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVj
dDIsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIAorICAgICAgICBwbGF0Zm9ybUFy
aXRobWV0aWNTb2Z0d2FyZSgqaW5wdXRQaXhlbEFycmF5LCBvdXRwdXRQaXhlbEFycmF5LCBtX2sx
LCBtX2syLCBtX2szLCBtX2s0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAg
ICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBhdXRvIG91dHB1
dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW4t
PmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyMiA9IGlu
Mi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvJiBmaWx0ZXJDb250ZXh0ID0gb3V0cHV0
SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC5pbWFnZUJ1
ZmZlcigpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW5wdXQyLmltYWdlQnVmZmVyKCk7CiAg
ICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJl
Y3QoaW5wdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICBhdXRvIGlu
cHV0SW1hZ2VSZWN0MiA9IEZsb2F0UmVjdChpbnB1dDIucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVj
dChvdXRwdXQpKTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfT1ZFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGlucHV0SW1hZ2VSZWN0Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJlY3QpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7CiAgICAgICAgIC8vIEFwcGxpZXMgb25seSB0
byB0aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgotICAgICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dCA9IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50
ZXJzZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVj
dC5pbnRlcnNlY3QoYWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgICAgIGF1dG8gZGVzdGluYXRp
b25SZWN0ID0gaW5wdXQuYWJzb2x1dGVJbWFnZVJlY3QoKTsKKyAgICAgICAgZGVzdGluYXRpb25S
ZWN0LmludGVyc2VjdChpbnB1dDIuYWJzb2x1dGVJbWFnZVJlY3QoKSk7CisgICAgICAgIGRlc3Rp
bmF0aW9uUmVjdC5pbnRlcnNlY3Qob3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkpOwogICAgICAg
ICBpZiAoZGVzdGluYXRpb25SZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBJbnRSZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0IC0g
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigp
OwotICAgICAgICBJbnRSZWN0IHNvdXJjZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4yLT5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9u
UmVjdCksIEZsb2F0UmVjdChzb3VyY2UyUmVjdCkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0aW9u
UmVjdCksIEZsb2F0UmVjdChzb3VyY2VSZWN0KSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
SW4gfSk7CisgICAgICAgIGF1dG8gYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlv
blJlY3QgLSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBh
dXRvIHNvdXJjZVJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbnB1dC5hYnNvbHV0ZUltYWdlUmVj
dCgpLmxvY2F0aW9uKCk7CisgICAgICAgIGF1dG8gc291cmNlUmVjdDIgPSBkZXN0aW5hdGlvblJl
Y3QgLSBpbnB1dDIuYWJzb2x1dGVJbWFnZVJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBhZGp1c3RlZERlc3RpbmF0
aW9uUmVjdCwgc291cmNlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0LCB7
IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpIH0s
IENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJlY3QpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBpbnB1dEltYWdl
UmVjdDIsIHsgeyB9LCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0
b3I6OlNvdXJjZUF0b3ApOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIyLCBpbnB1dEltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0SW1hZ2VSZWN0LCB7IHsgfSwgaW1hZ2VC
dWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBpbnB1dEltYWdlUmVjdDIpOwor
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0
SW1hZ2VSZWN0LCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRl
T3BlcmF0b3I6OlhPUik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfTElHSFRFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwg
eyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpQ
bHVzTGlnaHRlcik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJlY3QsIHsgeyB9LCBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5k
ZXggN2QwOGUxZjcxMDdiNGI5NjhjNThlM2EzN2MzMmFlMmY3NmFlYTBjMy4uNmIwN2JhMWY5YjAw
NzE5YzBkNzliNWY3ZWNkY2YzYjNkYjMyMzQyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtMjIsOCArMjIs
NiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC00MSw3ICszOSw3IEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSB7CiAKIGNsYXNzIEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbXBv
c2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CisgICAgc3Rh
dGljIFJlZjxGRUNvbXBvc2l0ZT4gY3JlYXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUm
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CiAKICAgICBDb21wb3NpdGVPcGVyYXRpb25U
eXBlIG9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGJvb2wgc2V0T3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUpOwpAQCAtNTgsMTggKzU2LDEyIEBAIHB1Ymxp
YzoKICAgICBmbG9hdCBrNCgpIGNvbnN0IHsgcmV0dXJuIG1fazQ7IH0KICAgICBib29sIHNldEs0
KGZsb2F0KTsKIAotcHJvdGVjdGVkOgotICAgIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxp
ZWRQaXhlbHMoKSBvdmVycmlkZSB7IHJldHVybiBtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVJJVEhNRVRJQzsgfQotCiBwcml2YXRlOgotICAgIEZFQ29tcG9zaXRlKEZpbHRlciYsIGNv
bnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7
Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
Q29tcG9zaXRlIjsgfQorICAgIEZFQ29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5
cGUmLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7CiAKLSAgICB2b2lkIGNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBpbmxpbmUgdm9p
ZCBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KTsKQEAgLTkwLDMgKzgyLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
RkVDb21wb3NpdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCAzYmJlNzgzNTk4ZDcw
OTM1YTk1YzZmMTU2ZWMyOTMzYzBlOTlmMDUwLi4yNWY0YjQ5MmUzYjgyNTY4NzQ0NjlkYmVjZjlm
YTlkOGY2OTNjNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTMyLDEwICszMiw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2
ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBm
bG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExl
bmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRy
aXgpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb252b2x2ZU1hdHJpeCkKK0ZF
Q29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6
ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNl
dCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVu
Z3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJp
eCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29udm9sdmVNYXRy
aXgpCiAgICAgLCBtX2tlcm5lbFNpemUoa2VybmVsU2l6ZSkKICAgICAsIG1fZGl2aXNvcihkaXZp
c29yKQogICAgICwgbV9iaWFzKGJpYXMpCkBAIC00OSwxMSArNDcsOSBAQCBGRUNvbnZvbHZlTWF0
cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJu
ZWxTaXplLAogICAgIEFTU0VSVChtX2tlcm5lbFNpemUuaGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVm
PEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRl
ciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBi
aWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUs
Ci0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFs
cGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCitSZWY8RkVDb252b2x2ZU1h
dHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
IGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQs
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0
aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252b2x2ZU1hdHJpeChmaWx0ZXIsIGtl
cm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVu
aXRMZW5ndGgsCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb252b2x2ZU1hdHJpeChrZXJu
ZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0
TGVuZ3RoLAogICAgICAgICBwcmVzZXJ2ZUFscGhhLCBrZXJuZWxNYXRyaXgpKTsKIH0KIApAQCAt
MzY3LDQ5ICszNjMsNTUgQEAgQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNl
dE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLAogICAgICAgICBmYXN0U2V0
T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwogfQogCi12
b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3Qg
RkVDb252b2x2ZU1hdHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmlt
aXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KIAotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZlQWxwaGEgPyBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Citib29sIEZFQ29udm9s
dmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQoreworICAgIGF1
dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91
dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gb3V0cHV0UGl4ZWxC
dWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIobV9wcmVzZXJ2ZUFscGhhID8gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIDogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byYg
b3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7CisgICAgYXV0byBpbnB1dElt
YWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0KTsKKyAgICAK
KyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlucHV0UGl4ZWxBcnJheTsKICAgICBpZiAo
bV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlw
bGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAg
ICAgICAgaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKICAgICBlbHNlCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJl
bXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIElu
dFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRT
aXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAgICAgICBpbnB1dFBpeGVsQXJy
YXkgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBpbnB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKIAorICAgIGlm
ICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgSW50
U2l6ZSBpbWFnZVNpemUgPSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7CisgICAg
CiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKLSAgICAgICAgKnNvdXJjZVBpeGVs
QXJyYXksCi0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKLSAgICAgICAgcGFpbnRTaXpl
LndpZHRoKCksCi0gICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgKmlucHV0UGl4
ZWxBcnJheSwKKyAgICAgICAgb3V0cHV0UGl4ZWxBcnJheSwKKyAgICAgICAgaW1hZ2VTaXplLndp
ZHRoKCksCisgICAgICAgIGltYWdlU2l6ZS5oZWlnaHQoKSwKICAgICAgICAgbV9iaWFzICogMjU1
LAotICAgICAgICBub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4KQorICAgICAgICBGRUNv
bG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4KQogICAgIH07CiAKICAg
ICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVyZWQgcGl4ZWxzCi0gICAgaW50IGNsaXBSaWdodCA9IHBh
aW50U2l6ZS53aWR0aCgpIC0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgaW50IGNsaXBCb3R0
b20gPSBwYWludFNpemUuaGVpZ2h0KCkgLSBtX2tlcm5lbFNpemUuaGVpZ2h0KCk7CisgICAgaW50
IGNsaXBSaWdodCA9IGltYWdlU2l6ZS53aWR0aCgpIC0gbV9rZXJuZWxTaXplLndpZHRoKCk7Cisg
ICAgaW50IGNsaXBCb3R0b20gPSBpbWFnZVNpemUuaGVpZ2h0KCkgLSBtX2tlcm5lbFNpemUuaGVp
Z2h0KCk7CiAKICAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8fCBjbGlwQm90dG9tIDwgMCkgewogICAg
ICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXppZWQgZm9yIHNwZWVkCi0gICAgICAg
IHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCksIHBh
aW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgc2V0T3V0ZXJQaXhl
bHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGludCBpdGVyYXRp
b25zID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCku
aGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgeworICAgIGlmIChpbnQgaXRlcmF0
aW9ucyA9IChpbWFnZVNpemUud2lkdGgoKSAqIGltYWdlU2l6ZS5oZWlnaHQoKSkgLyBzX21pbmlt
YWxSZWN0RGltZW5zaW9uKSB7CiAgICAgICAgIGludCBzdHJpZGUgPSBjbGlwQm90dG9tIC8gaXRl
cmF0aW9uczsKICAgICAgICAgaW50IGNodW5rQ291bnQgPSAoY2xpcEJvdHRvbSArIHN0cmlkZSAt
IDEpIC8gc3RyaWRlOwogCkBAIC00MjUsMTMgKzQyNywxNSBAQCB2b2lkIEZFQ29udm9sdmVNYXRy
aXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zm
c2V0LngoKSArIDE7CiAgICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwog
ICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkp
OwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBzZXRP
dXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgp
LCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0Rh
dGEsIDAsIDAsIGltYWdlU2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOworICAgIGlm
IChjbGlwQm90dG9tIDwgaW1hZ2VTaXplLmhlaWdodCgpKQorICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNp
emUuaGVpZ2h0KCkpOwogICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQogICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJn
ZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXpl
LndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0
LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAg
ICBpZiAoY2xpcFJpZ2h0IDwgaW1hZ2VTaXplLndpZHRoKCkpCisgICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIGltYWdlU2l6
ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBl
JiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAppbmRleCA2N2Q0YzY1NjdmY2U2YjI3ZWU1YWI4
OTVhNmUxZTUwMDU0ZTEzZGJhLi5iOWE4MTgzYTFiOGZmY2VjMzU1NzhkM2NlMDVjNjI5NjUzNDky
MzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaApAQCAtMjQsNyArMjQsNiBAQAogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZp
bHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzgsOSArMzcsNyBAQCBlbnVtIEVkZ2VNb2RlVHlwZSB7CiAKIGNsYXNzIEZFQ29udm9sdmVN
YXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZF
Q29udm9sdmVNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBJbnRTaXplJiwKLSAgICAgICAg
ICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZs
b2F0UG9pbnQmLAotICAgICAgICAgICAgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAg
IHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKGNvbnN0IEludFNpemUmIGtlcm5l
bFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRP
ZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwg
Ym9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwog
CiAgICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxTaXplOyB9
CiAgICAgdm9pZCBzZXRLZXJuZWxTaXplKGNvbnN0IEludFNpemUmKTsKQEAgLTc3LDE0ICs3NCwx
MSBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKICAgICB9
OwogCi0gICAgRkVDb252b2x2ZU1hdHJpeChGaWx0ZXImLCBjb25zdCBJbnRTaXplJiwgZmxvYXQs
IGZsb2F0LAotICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0
IEZsb2F0UG9pbnQmLCBib29sLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CisgICAgRkVDb252b2x2
ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBi
aWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZs
b2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVj
dG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb252b2x2ZU1hdHJpeCI7IH0KKyAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVy
cmlkZTsKIApAQCAtMTE1LDMgKzEwOSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29udm9sdmVN
YXRyaXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCmluZGV4IGVlYjE3MjhkYjM1ZThhYzMw
MmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLmY3NmNlMmNlOTY0M2VmZGY2Y2UyNTZlOTU0NzM3OGE0
MDdkMTM0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCkBAIC0yNywxOCArMjcsMTYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNl
TGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9h
dCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExl
bmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRT
b3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGlu
Z0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExl
bmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgVHlwZTo6RGlm
ZnVzZUxpZ2h0aW5nKQorRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKERpZmZ1
c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQs
IDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdo
dFNvdXJjZSksIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCiB7CiB9CiAK
LVJlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXIm
IGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxGRURp
ZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0
U291cmNlPiYmIGxpZ2h0U291cmNlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlm
ZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNl
Q29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShs
aWdodFNvdXJjZSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGlu
ZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5p
dExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQog
Ci1GRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCiBi
b29sIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNv
bnN0YW50KQogewogICAgIGlmIChtX2RpZmZ1c2VDb25zdGFudCA9PSBkaWZmdXNlQ29uc3RhbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlmZnVzZUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1
ZTQ3NTEzYTBkZGRjMy4uOGExMGFlYzg3YzhmMTg5ZjlmMDU3Y2I5NDQzZWFhZWRkNTM4ZjY5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
ZmZ1c2VMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaApAQCAtMjksOCArMjksNyBAQCBjbGFzcyBMaWdodFNv
dXJjZTsKIAogY2xhc3MgRkVEaWZmdXNlTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKEZpbHRlciYs
IGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJj
ZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKKyAgICBzdGF0aWMgUmVm
PEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZs
b2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAK
ICAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2RpZmZ1c2VDb25z
dGFudDsgfQogICAgIGJvb2wgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0KTsKQEAgLTM4LDggKzM3
LDkgQEAgcHVibGljOgogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwog
CiBwcml2YXRlOgotICAgIEZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9yJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVE
aWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChG
RURpZmZ1c2VMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3NDkz
MzkyYmIyODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2M2ZhMS4uMDdmYzgzY2E3Y2I2NzU2ZThlM2U4
NTJhMTliZTQwYjFjOWM2MGU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTMx
LDE4ICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlzcGxhY2VtZW50TWFw
OjpGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4
Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZs
b2F0IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RGlzcGxhY2VtZW50
TWFwKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFRGlzcGxhY2VtZW50TWFwKQogICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2Vs
ZWN0b3IpCiAgICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoeUNoYW5uZWxTZWxlY3RvcikKICAgICAs
IG1fc2NhbGUoc2NhbGUpCiB7CiB9CiAKLVJlZjxGRURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFj
ZW1lbnRNYXA6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yLAotICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3Rvciwg
ZmxvYXQgc2NhbGUpCitSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpj
cmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQogewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFRGlzcGxhY2VtZW50TWFwKGZpbHRlciwgeENoYW5uZWxTZWxlY3RvciwgeUNo
YW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3Bs
YWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOwog
fQogCiBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENo
YW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvcikKQEAgLTY5LDIwICs2OCwxNCBAQCBi
b29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6c2V0UmVzdWx0Q29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKQorY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xvclNwYWNlKCkgY29uc3QKIHsKICAgICAvLyBT
cGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBs
aWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UKICAgICAvLyBhbmQgZG9lcyBub3QgYXBwbHkg
dG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUgJ2luJyBzb3VyY2UgaW1hZ2UgbXVzdCByZW1h
aW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBjb2xvciBzcGFjZS4KICAgICAvLyBUaGUgcmVzdWx0
IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50
IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFj
ZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpKTsKLX0KLQotdm9pZCBGRURpc3Bs
YWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBj
b25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJp
bWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAgICBp
bi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAg
IGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIHJldHVy
biBpbnB1dC5jb2xvclNwYWNlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9m
ZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCkBA
IC05MSwzNyArODQsNDEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhl
bCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXQKICAgICByZXR1cm4geCAq
IGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRN
YXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVEaXNwbGFjZW1lbnRNYXA6
OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Cisg
ICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9u
KTsKK30KIAorYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQorewogICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0g
Q0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5O
RUxfVU5LTk9XTik7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCkt
PmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0
ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgp
OworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJh
eSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1
bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBJbnRSZWN0IGlucHV0SW1hZ2VSZWN0ID0gb3V0
cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOworICAgIGF1dG8gaW5wdXRQaXhl
bEJ1ZmZlciA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0KTsKIAotICAgIEludFJlY3QgZWZmZWN0QkRyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFs
dWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQg
Y29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlw
bGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIEludFJlY3QgaW5wdXRJbWFnZVJl
Y3QyID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQyKTsKKyAgICAvLyBU
aGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSAnaW4yJyBhcmUgcGVy
Zm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KKyAgICBhdXRvIGlu
cHV0UGl4ZWxCdWZmZXIyID0gaW5wdXQyLmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QyKTsKICAgICAKLSAgICBpZiAo
IWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVudEltYWdlKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKCFpbnB1dFBpeGVsQnVmZmVyIHx8ICFpbnB1dFBpeGVsQnVmZmVyMikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNl
bWVudEltYWdlLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGlucHV0UGl4ZWxCdWZmZXItPmxlbmd0
aCgpID09IGlucHV0UGl4ZWxCdWZmZXIyLT5sZW5ndGgoKSk7CiAKLSAgICBGaWx0ZXImIGZpbHRl
ciA9IHRoaXMtPmZpbHRlcigpOwotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUo
KTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRp
b24oeyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5z
Y2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fc2NhbGUsIG1fc2NhbGUgfSk7CiAgICAgZmxvYXQg
c2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7CiAgICAgZmxvYXQgc2NhbGVG
b3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOwogICAgIGZsb2F0IHNjYWxlZE9mZnNl
dFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OwpAQCAtMTMwLDI2ICsxMjcsMjggQEAgdm9p
ZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpbnQgZGlz
cGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbEluZGV4KCk7CiAgICAgaW50IGRpc3BsYWNlbWVu
dENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOwogCi0gICAgaW50IHJvd0J5dGVzID0gcGFpbnRT
aXplLndpZHRoKCkgKiA0OworICAgIGludCByb3dCeXRlcyA9IGltYWdlU2l6ZS53aWR0aCgpICog
NDsKIAotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdlU2l6ZS5oZWlnaHQoKTsgKyt5KSB7CiAgICAg
ICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICogcm93Qnl0ZXM7CiAKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQg
ZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OworICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IGltYWdlU2l6ZS53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIGlu
dCBvdXRwdXRJbmRleCA9IGxpbmVTdGFydE9mZnNldCArIHggKiA0OwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JY
ICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwotICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVt
KGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZ
KTsKKyAgICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JD
b2xvclggKiBpbnB1dFBpeGVsQnVmZmVyMi0+aXRlbShvdXRwdXRJbmRleCArIGRpc3BsYWNlbWVu
dENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOworICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsg
c3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9yWSAqIGlucHV0UGl4ZWxCdWZmZXIyLT5pdGVt
KG91dHB1dEluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CiAK
LSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0aW5hdGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlv
bkluZGV4KTsKLSAgICAgICAgICAgIGlmIChzcmNYIDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53
aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gcGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAg
ICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAwOworICAgICAgICAgICAgdW5zaWdu
ZWQqIG91dHB1dFBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG91dHB1dFBp
eGVsQXJyYXkuZGF0YSgpICsgb3V0cHV0SW5kZXgpOworICAgICAgICAgICAgaWYgKHNyY1ggPCAw
IHx8IHNyY1ggPj0gaW1hZ2VTaXplLndpZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBpbWFn
ZVNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgICAgICAqb3V0cHV0UGl4ZWxQdHIgPSAwOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAq
ZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRJ
bWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsK
KyAgICAgICAgICAgICpvdXRwdXRQaXhlbFB0ciA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
Kj4oaW5wdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3Jj
WSwgcm93Qnl0ZXMpKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hh
bm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCBkZDcz
MmE4ODEwNzNlMjY2YmM4NDZhZmU2ODE5ZTY3NTE2MjNhM2EyLi5lMDYyYmJmYjc2YjFjOWU1MDUy
ZmQxMjNhZWY5MjViNWFkZTdjNGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC0yMiw3
ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw3ICszNiw3IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB7CiAKIGNsYXNzIEZFRGlzcGxhY2VtZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYs
IENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CisgICAgc3RhdGljIFJlZjxGRURpc3Bs
YWNlbWVudE1hcD4gY3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rvciwg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKICAg
ICBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3hDaGFubmVsU2VsZWN0b3I7IH0KICAgICBib29sIHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3Qg
Q2hhbm5lbFNlbGVjdG9yVHlwZSk7CkBAIC00OCwyMCArNDcsMTcgQEAgcHVibGljOgogICAgIGZs
b2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUo
ZmxvYXQpOwogCi0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwotCiBwcml2YXRlOgotICAgIEZF
RGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAg
RkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBD
aGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAotICAg
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEaXNwbGFj
ZW1lbnRNYXAiOyB9CisgICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hD
aGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1h
Z2VDb2xvclNwYWNlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KKyAgICBib29sIHBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC03MiwzICs2OCw0IEBAIHByaXZhdGU6CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKEZFRGlzcGxhY2VtZW50TWFwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDM1ZmJhYjQxZTgw
OTIxNmU0YjIyNDM1MTE4NjIzZTI4ZmZkNjFlZmEuLjkxOTkwZmUwMjVkNDUwY2Y0NWYyODVhZjNm
M2QyOTdmODEzYTE5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTMxLDggKzMxLDggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmls
dGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKK0ZFRHJvcFNoYWRvdzo6RkVEcm9w
U2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZm
ZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93KQogICAgICwgbV9zdGRYKHN0ZFgp
CiAgICAgLCBtX3N0ZFkoc3RkWSkKICAgICAsIG1fZHgoZHgpCkBAIC00Miw5MCArNDIsODUgQEAg
RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZs
b2F0IHN0ZFksIGZsb2F0IGR4LCBmbG8KIHsKIH0KIAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9w
U2hhZG93OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZs
b2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dP
cGFjaXR5KQorUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3Rk
WCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29s
b3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVE
cm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93
T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBz
dGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFkb3dPcGFjaXR5KSk7CiB9CiAKLXZvaWQgRkVE
cm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitJbnRPdXRzZXRzIEZFRHJv
cFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiB7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5m
aWx0ZXIoKTsKKyAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIHJldHVybiB7CisgICAgICAg
IHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpLAorICAgICAgICBz
dGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAorICAgICAgICBzdGQ6
Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKKyAgICAgICAgc3RkOjpt
YXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4KQorICAgIH07Cit9CisKK0Zsb2F0
UmVjdCBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgYXV0
byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CiAKLSAgICBGbG9hdFJl
Y3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3Qo
KTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1dGVQYWludFJl
Y3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LnVu
aXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0
LmltYWdlUmVjdCgpOworICAgIGF1dG8gaW1hZ2VSZWN0V2l0aE9mZnNldChpbWFnZVJlY3QpOwor
ICAgIGltYWdlUmVjdFdpdGhPZmZzZXQubW92ZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgaW1hZ2VS
ZWN0LnVuaXRlKGltYWdlUmVjdFdpdGhPZmZzZXQpOwogCi0gICAgSW50U2l6ZSBrZXJuZWxTaXpl
ID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwg
bV9zdGRZIH0pOworICAgIGF1dG8ga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxh
dGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKIAogICAgIC8vIFdlIHRh
a2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1
c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0Lmlu
ZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50
UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOwotCi0gICAgaWYg
KGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1h
eEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0
ZShtYXhFZmZlY3RSZWN0KCkpOworICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6
ZS53aWR0aCgpICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXpl
LmhlaWdodCgpICogMC41Zik7CiAKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQ
cmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12
b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0ID0gKmlu
cHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJ
bWFnZSgpOworICAgIAorICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFn
ZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
ICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIG91dHB1dEltYWdlID0g
b3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAK
LSAgICBGbG9hdFNpemUgYmx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNv
bHV0aW9uKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgYmx1clJhZGl1cy5zY2FsZShmaWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZp
bHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pOworICAgIGF1dG8gYmx1clJhZGl1cyA9IDIg
KiBmaWx0ZXIuc2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAg
ICBhdXRvIG9mZnNldCA9IGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1f
ZHkgfSk7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3aW5n
UmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0aE9m
ZnNldC5tb3ZlKG9mZnNldCk7CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IEZsb2F0UmVjdChp
bnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOwogCi0gICAgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFzb3Vy
Y2VJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3RXaXRoT2Zm
c2V0ID0gaW5wdXRJbWFnZVJlY3Q7CisgICAgaW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0Lm1vdmUo
b2Zmc2V0KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgcmVzdWx0Q29udGV4dCA9IHJlc3VsdElt
YWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNp
dHkpOwotICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJh
d2luZ1JlZ2lvbldpdGhPZmZzZXQpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEoMSk7Cisg
ICAgYXV0byYgb3V0cHV0Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0
cHV0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOworICAgIG91dHB1dENvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdFdpdGhPZmZzZXQpOwor
ICAgIG91dHB1dENvbnRleHQuc2V0QWxwaGEoMSk7CiAKICAgICBTaGFkb3dCbHVyIGNvbnRleHRT
aGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKIAotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBz
aGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgp
KTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZv
cm1hdCwgc2hhZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OworICAgIGF1dG8gZm9ybWF0ID0gUGl4ZWxCdWZmZXJGb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG91dHB1dC5jb2xvclNw
YWNlKCkgfTsKKyAgICBhdXRvIHNoYWRvd0FyZWEgPSBJbnRSZWN0IHsgSW50UG9pbnQoKSwgb3V0
cHV0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkgfTsKKyAgICBhdXRvIHNoYWRvd1BpeGVs
QnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7
CisgICAgaWYgKCFzaGFkb3dQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBj
b250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBwaXhl
bEJ1ZmZlci0+c2l6ZSgpLCA0ICogcGl4ZWxCdWZmZXItPnNpemUoKS53aWR0aCgpKTsKLSAgICAK
LSAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dBcmVh
KTsKKyAgICBhdXRvJiBzaGFkb3dQaXhlbEFycmF5ID0gc2hhZG93UGl4ZWxCdWZmZXItPmRhdGEo
KTsKKyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNoYWRvd1BpeGVsQXJyYXkuZGF0
YSgpLCBzaGFkb3dQaXhlbEJ1ZmZlci0+c2l6ZSgpLCA0ICogc2hhZG93UGl4ZWxCdWZmZXItPnNp
emUoKS53aWR0aCgpKTsKIAotICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC5maWxsUmVj
dChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1f
c2hhZG93Q29sb3IpOwotICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOworICAgIG91dHB1dEltYWdlLT5wdXRQ
aXhlbEJ1ZmZlcigqc2hhZG93UGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEpOwogCi0gICAgcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVn
aW9uKTsKLX0KKyAgICBvdXRwdXRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRvcjo6U291cmNlSW4pOworICAgIG91dHB1dENvbnRleHQuZmlsbFJlY3QoRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpKSwgbV9z
aGFkb3dDb2xvcik7CisgICAgb3V0cHV0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7CiAKLUludE91dHNldHMgRkVEcm9wU2hh
ZG93OjpvdXRzZXRzKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJl
dHVybiB7Ci0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1f
ZHkpLAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSArIG1fZHgp
LAotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwK
LSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgLSBtX2R4KQotICAg
IH07CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0
SW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVEcm9wU2hh
ZG93OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlv
blR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCBiNGUwYTIwMTJm
ZWRiN2I3N2JmM2UwNTczNGVlODhhMjllZmYzODRjLi5iMjU2ODg4YWQyNWQ3ZGY5Njg3MTU0OTJi
OGZjZDIzZTc2MDU4ZTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKQEAgLTIwLDE0ICsyMCwxMyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFz
cyBGRURyb3BTaGFkb3cgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZFRHJvcFNoYWRvdz4gY3JlYXRlKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IGZsb2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFRHJvcFNoYWRv
dz4gY3JlYXRlKGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAogICAgIGZsb2F0
IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2b2lkIHNldFN0
ZERldmlhdGlvblgoZmxvYXQgc3RkWCkgeyBtX3N0ZFggPSBzdGRYOyB9CkBAIC00OCwxNSArNDcs
MTMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2hhZG93T3BhY2l0eShmbG9hdCBzaGFkb3dPcGFj
aXR5KSB7IG1fc2hhZG93T3BhY2l0eSA9IHNoYWRvd09wYWNpdHk7IH0KIAogcHJpdmF0ZToKLSAg
ICBGRURyb3BTaGFkb3coRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJiwgZmxvYXQpOworICAgIEZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZ
LCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hh
ZG93T3BhY2l0eSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkZFRHJvcFNoYWRvdyI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkgb3ZlcnJpZGU7CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAg
RmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBJbnRPdXRzZXRz
IG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOwogCkBAIC03MCwzICs2Nyw0IEBAIHByaXZhdGU6CiAgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChG
RURyb3BTaGFkb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCBiNDIzNTUzNGMzOGIxZWJhMjExZWU4NDg2MTc5OTIz
ODBmM2I2YjAxLi5hNzZhOWEyM2M1NmFkZDJjMTc0YTAxODAzNzBkNmE4NWIzMjkzOTMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5jcHAKQEAgLTMwLDE2ICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRmxv
b2Q6OkZFRmxvb2QoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9h
dCBmbG9vZE9wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpGbG9vZCkK
K0ZFRmxvb2Q6OkZFRmxvb2QoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3Bh
Y2l0eSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRmxvb2QpCiAg
ICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKICAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29k
T3BhY2l0eSkKIHsKIH0KIAotUmVmPEZFRmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShGaWx0ZXImIGZp
bHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK1JlZjxG
RUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZs
b29kT3BhY2l0eSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZsb29kKGZpbHRlciwg
Zmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVG
bG9vZChmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAogYm9vbCBGRUZsb29kOjpzZXRG
bG9vZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTU4LDE0ICs1OCwyMSBAQCBib29sIEZF
Rmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVj
dCBGRUZsb29kOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1
bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0aXZl
U3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CiAKLSAgICBhdXRvIGNvbG9yID0gZmxv
b2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb29kT3BhY2l0eSgpKTsKLSAg
ICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgY29sb3IpOworYm9vbCBGRUZsb29kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK3sKKyAgICBhdXRvJiBvdXRwdXQgPSAq
ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byBjb2xvciA9IG1fZmxvb2RDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShtX2Zs
b29kT3BhY2l0eSk7CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdCh7IHsgfSwg
b3V0cHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkgfSwgY29sb3IpOworICAgIHJldHVybiB0cnVlOwog
fQogCiBUZXh0U3RyZWFtJiBGRUZsb29kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCmluZGV4
IGI3MDRkYzk2OWM2ZDc1ODhiY2ViMGFkOGIyNDY4MmZhMDYxNzM0OGUuLjlmYjE4OWU3YWRmMDcz
OTAzMWFjMmMwNmUwMzQ4YzVmMDE4ZDNlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCkBAIC0yMiwxNCArMjIsMTMgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBG
RUZsb29kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RUZsb29kPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCk7CisgICAgc3RhdGlj
IFJlZjxGRUZsb29kPiBjcmVhdGUoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29k
T3BhY2l0eSk7CiAKICAgICBjb25zdCBDb2xvciYgZmxvb2RDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fZmxvb2RDb2xvcjsgfQogICAgIGJvb2wgc2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYpOwpA
QCAtNDAsMTggKzM5LDE1IEBAIHB1YmxpYzoKICNpZiAhVVNFKENHKQogICAgIC8vIGZlRmxvb2Qg
ZG9lcyBub3QgcGVyZm9ybSBjb2xvciBpbnRlcnBvbGF0aW9uIG9mIGFueSBraW5kLCBzbyB0aGUg
cmVzdWx0IGlzIGFsd2F5cyBpbiB0aGUgY3VycmVudAogICAgIC8vIGNvbG9yIHNwYWNlIHJlZ2Fy
ZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy4KLSAgICB2
b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikg
b3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkpOyB9Ci0gICAgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQorICAgIHZvaWQg
c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVy
cmlkZSB7IH0KICNlbmRpZgogCiBwcml2YXRlOgotICAgIEZFRmxvb2QoRmlsdGVyJiwgY29uc3Qg
Q29sb3ImLCBmbG9hdCk7CisgICAgRkVGbG9vZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxv
YXQgZmxvb2RPcGFjaXR5KTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiRkVGbG9vZCI7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VS
ZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9
CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNjEsMyAr
NTcsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUZsb29kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApp
bmRleCAwZjZlZTg3Zjk1ZTc1NzUxODYzZmQyZTVmNTQ5ZTc0ZDk3MjlkYjFmLi4xMDcyMWZhYTdl
MGJjOTA0N2M0Y2EyNTQyNmE3MWZjZDgwMWRhODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApA
QCAtNzksMTcgKzc5LDE3IEBAIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRl
cmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwKICAgICB9CiB9CiAKLUZF
R2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihGaWx0ZXImIGZpbHRlciwgZmxvYXQgeCwgZmxv
YXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwg
VHlwZTo6R2F1c3NpYW5CbHVyKQorRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0
IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQogICAgICwgbV9zdGRYKHgpCiAgICAg
LCBtX3N0ZFkoeSkKICAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCiB7CiB9CiAKLVJlZjxGRUdh
dXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQg
eCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorUmVmPEZFR2F1c3NpYW5CbHVyPiBG
RUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cihmaWx0ZXIs
IHgsIHksIGVkZ2VNb2RlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJs
dXIoeCwgeSwgZWRnZU1vZGUpKTsKIH0KIAogdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2
aWF0aW9uWChmbG9hdCB4KQpAQCAtNDY1LDExICs0NjUsMTIgQEAgc3RhdGljIGludCBjbGFtcGVk
VG9LZXJuZWxTaXplKGZsb2F0IHZhbHVlKQogewogICAgIC8vIExpbWl0IHRoZSBrZXJuZWwgc2l6
ZSB0byA1MDAuIEEgYmlnZ2VyIHJhZGl1cyB3b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgZm9y
IHRoZSByZXN1bHQgaW1hZ2UgYnV0CiAgICAgLy8gaW5mbGF0ZXMgdGhlIGFic29sdXRlIHBhaW50
IHJlY3QgdG9vIG11Y2guIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJlaGF2aW9y
LgorICAgIHN0YXRpYyBjb25zdCBpbnQgZ01heEtlcm5lbFNpemUgPSA1MDA7CiAgICAgdW5zaWdu
ZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVkPigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxv
b3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKSArIDAuNWYpKSk7CiAgICAgcmV0dXJu
IGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXplLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ01heEtl
cm5lbFNpemUpKSk7CiB9CiAgICAgCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVV
bnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVz
c2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0
ZERldmlhdGlvbikKIHsKICAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBz
dGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7CiAgICAgSW50U2l6ZSBrZXJuZWxTaXplOwpAQCAt
NDgzLDEyICs0ODQsMTIgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIGtlcm5lbFNp
emU7CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2Fs
ZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9u
KSk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVk
U2l6ZUJ5RmlsdGVyU2NhbGUoc3RkRGV2aWF0aW9uKSk7CiB9CiAKLUludFNpemUgRkVHYXVzc2lh
bkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNp
emUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBz
dGREZXZpYXRpb24pCiB7CiAgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKHN0ZERldmlhdGlvbik7CiAKQEAgLTQ5Niw2MiArNDk3LDYxIEBAIEludFNpemUg
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlv
bikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNp
emUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlSW1h
Z2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3QKIHsKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJu
ZWxTaXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIGF1dG8mIGlucHV0ID0g
KmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5w
dXQuaW1hZ2VSZWN0KCk7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1
dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKICAgICAvLyBFZGdlIG1vZGVzIG90aGVy
IHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0LgotICAg
IGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgc2V0QWJzb2x1dGVQ
YWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpCisgICAg
ICAgIHJldHVybiBpbWFnZVJlY3Q7CiAKKyAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICAKICAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWlu
dFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKKyAgICBpbWFn
ZVJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOworICAgIGltYWdl
UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOwogCi0gICAgaWYg
KGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1h
eEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0
ZShtYXhFZmZlY3RSZWN0KCkpOworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZl
U3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKK30KIAotICAgIHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKK0lu
dE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAoreworICAgIEludFNpemUg
b3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAg
ICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCksIG91dHNl
dFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9OwogfQogCi12b2lkIEZFR2F1c3Np
YW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUdhdXNzaWFuQmx1cjo6aXNB
bHBoYUltYWdlKCkgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CisgICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5pc0FscGhhSW1hZ2UoKTsKK30KIAotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVy
SW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKworICAgIGF1dG8g
b3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkg
PSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5p
c0FscGhhSW1hZ2UoKSk7CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2
ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0KTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlu
cHV0LmNvcHlQaXhlbEJ1ZmZlcihvdXRwdXRQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVs
U2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBrZXJuZWxTaXplLnNjYWxl
KGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0
ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIGF1dG8gaW1hZ2VT
aXplID0gb3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpOwogCi0gICAgSW50U2l6ZSBw
YWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBwYWludFNpemUuc2Nh
bGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICog
NCk7CisgICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChpbWFnZVNpemUuYXJlYSgpICogNCk7CiAgICAgaWYgKCF0bXBJbWFnZURh
dGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhl
bEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVp
Z2h0KCksIHBhaW50U2l6ZSk7Ci19CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotSW50T3V0c2V0
cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBvdXRzZXRT
aXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVy
biB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5o
ZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CisgICAgcGxhdGZvcm1BcHBseShvdXRwdXRQ
aXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUu
aGVpZ2h0KCksIGltYWdlU2l6ZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0m
IEZFR2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgK
aW5kZXggYWQ3ZDk1MGI5YjcyM2RjNzQ0NjQ5Y2JhZjAwYTkxMzBhM2IxZDcwZS4uMWQ1ODI2NTRj
MDJiNGU1ZWUyNGQ1MDNjOGJkMTM5N2EyZWU3ZDU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAt
MjIsMTQgKzIyLDEzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRy
aXguaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUdhdXNzaWFuQmx1ciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0
ZShGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIFJlZjxG
RUdhdXNzaWFuQmx1cj4gY3JlYXRlKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSk7CiAK
ICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4gbV9zdGRYOyB9CiAgICAg
dm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0KTsKQEAgLTQwLDE0ICszOSwxMiBAQCBwdWJsaWM6
CiAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlTW9kZTsg
fQogICAgIHZvaWQgc2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlKTsKIAotICAgIHN0YXRpYyBJbnRT
aXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgRmxvYXRTaXplIHN0ZERldmlh
dGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZs
b2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91dHNl
dFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGljIEludFNpemUgY2FsY3Vs
YXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlv
bik7CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVP
dXRzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKTsKIAogcHJpdmF0ZToKLSAg
ICBGRUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7Ci0K
LSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFR2F1
c3NpYW5CbHVyIjsgfQorICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VN
b2RlVHlwZSk7CiAKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24g
PSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAK
QEAgLTYxLDEyICs1OCwxNCBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXpl
WTsKICAgICB9OwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMg
b3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpIG92ZXJyaWRlOworCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJh
bWV0ZXJzKik7CkBAIC04MCwzICs3OSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFR2F1c3NpYW5C
bHVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAKaW5kZXggNjU5YjEwNTVmNjFlYWFiYzVmMjk5OTFkYTBkYTFhNTg1
MDcxYWU5Mi4uNjdmOGUyOGU4YjE4MmU1NTYxOWE1ZDVhNTBjYTJhNzYyNjQyNmUzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwCkBAIC0zNSw4ICszNSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVM
aWdodGluZzo6RkVMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgTGlnaHRpbmdUeXBlIGxpZ2h0aW5n
VHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxv
YXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxh
ckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQotICAgIDogRmls
dGVyRWZmZWN0KGZpbHRlciwgdHlwZSkKK0ZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdU
eXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0eXBl
KQorICAgIDogRmlsdGVyRWZmZWN0KHR5cGUpCiAgICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGlu
Z1R5cGUpCiAgICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQogICAgICwg
bV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCkBAIC0zODgsMjYgKzM4OCwxNCBAQCBpbmxp
bmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0
YSwgY29uc3QgTGlnaHRTb3VyYwogI2VuZGlmCiB9CiAKLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xp
Z2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
K2Jvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBMaWdodGluZ0RhdGEmIGRhdGEpCiB7CiAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhNRTogZG8g
c29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAv
LyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBq
dXN0IHJldHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEucGl4ZWxzID0gJnBpeGVsczsKLSAgICBkYXRhLnN1
cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERl
Y3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUg
PSBoZWlnaHQgLSAxOwogCiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3Iu
dG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAg
ICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9p
bnQzRChyLCBnLCBiKTsKIAotICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRo
aXMsIHBhaW50aW5nRGF0YSk7CisgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YShm
aWx0ZXIsICp0aGlzLCBwYWludGluZ0RhdGEpOwogCiAgICAgLy8gVG9wIGxlZnQuCiAgICAgaW50
IG9mZnNldCA9IDA7CkBAIC00MjIsMTAgKzQxMCwxMCBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdM
aWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
CiAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxl
ZnROb3JtYWwob2Zmc2V0KSk7CiAKICAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0g
aGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Cisg
ICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwogICAgIHNldFBpeGVsKG9mZnNldCwg
ZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJp
Z2h0Tm9ybWFsKG9mZnNldCkpOwogCi0gICAgaWYgKHdpZHRoID49IDMpIHsKKyAgICBpZiAoZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lID49IDIpIHsKICAgICAgICAgLy8gVG9wIHJvdy4KICAgICAg
ICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKICAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRh
LndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCkBAIC00Mzcs
NyArNDI1LDcgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJy
YXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgICAgICAgICAgc2V0UGl4ZWwo
b2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUs
IGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChvZmZzZXQp
KTsKICAgICB9CiAKLSAgICBpZiAoaGVpZ2h0ID49IDMpIHsKKyAgICBpZiAoZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSA+PSAyKSB7CiAgICAgICAgIC8vIExlZnQgY29sdW1uLgogICAgICAgICBv
ZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwogICAgICAgICBmb3IgKGlu
dCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCkBAIC00NDksMTIgKzQzNywxMiBAQCBib29s
IEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiAgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBh
aW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNG
YWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKICAgICB9CiAKLSAg
ICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykgeworICAgIGlmIChkYXRhLndpZHRoRGVj
cmVhc2VkQnlPbmUgPj0gMiAmJiBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID49IDIpIHsKICAg
ICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzLgogICAgICAgICBwbGF0Zm9ybUFwcGx5KGRhdGEsIHBh
aW50aW5nRGF0YSk7CiAgICAgfQogCi0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKiBoZWlnaHQ7CisgICAgaW50IGxhc3RQaXhlbCA9IChkYXRhLmhl
aWdodERlY3JlYXNlZEJ5T25lICsgMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwogICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKICAgICAgICAg
Zm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1Bp
eGVsU2l6ZSkKICAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFscGhhKTsK
QEAgLTQ3MSwyNyArNDU5LDQ3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4
Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxv
YXRSZWN0IEZFTGlnaHRpbmc6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKK30K
KworYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1
dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91
dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRp
b25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZm
ZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRh
KCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2
ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0KTsKIAotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7
CisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4t
PmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJh
d2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgLy8gRklYTUU6IHN1cHBvcnQg
a2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhh
dCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQg
b3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKICAgICAvLyBvdXRwdXQg
Zm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJl
IHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1
c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKLSAgICBJbnRTaXplIGFic29sdXRlUGFpbnRTaXplID0g
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUu
aGVpZ2h0KCkpOworICAgIEludFNpemUgYWJzb2x1dGVJbWFnZVNpemUgPSBvdXRwdXQuYWJzb2x1
dGVJbWFnZVJlY3QoKS5zaXplKCk7CisKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdp
ZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KKyAgICAvLyBUaGUgVzMgc3BlYyBk
b2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCisg
ICAgaWYgKGFic29sdXRlSW1hZ2VTaXplLndpZHRoKCkgPD0gMiB8fCBhYnNvbHV0ZUltYWdlU2l6
ZS5oZWlnaHQoKSA8PSAyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIExpZ2h0aW5nRGF0
YSBkYXRhOworICAgIGRhdGEucGl4ZWxzID0gJm91dHB1dFBpeGVsQXJyYXk7CisgICAgZGF0YS5z
dXJmYWNlU2NhbGUgPSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKKyAgICBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplID0gYWJzb2x1dGVJbWFnZVNpemUud2lkdGgoKSAqIGNQaXhlbFNp
emU7CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gYWJzb2x1dGVJbWFnZVNpemUud2lk
dGgoKSAtIDE7CisgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGFic29sdXRlSW1hZ2VT
aXplLmhlaWdodCgpIC0gMTsKKworICAgIGRyYXdMaWdodGluZyhmaWx0ZXIsIGRhdGEpOworICAg
IHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4
IGIwYmI3MGExNGQxNzQ5NTA2NzM3ZTg4ZTA1MTRlZTc5NjgyMGE0NDkuLjBiNGQ4MDA0ZGI2OTY0
Zjk0OTA4Y2M2ZDI2MDU2NGJiMmI0YjAyMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0yNyw3ICsyNyw2IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+CkBAIC00MCw4ICszOSw2IEBAIHN0cnVj
dCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKIAogY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KLQogICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CiAgICAgYm9vbCBzZXRTdXJmYWNlU2NhbGUoZmxv
YXQpOwogCkBAIC0xMjgsMTYgKzEyNSwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQg
cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
Kik7CiAgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1Bh
aW50aW5nRGF0YUZvck5lb24qKTsKIAotICAgIEZFTGlnaHRpbmcoRmlsdGVyJiwgTGlnaHRpbmdU
eXBlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIFJlZjxMaWdodFNvdXJjZT4mJiwgVHlwZSk7Ci0KLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJO
YW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFTGlnaHRpbmciOyB9CisgICAgRkVMaWdodGlu
ZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwogCi0gICAgYm9vbCBkcmF3
TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmLCBpbnQsIGludCk7CisgICAgYm9vbCBkcmF3TGln
aHRpbmcoY29uc3QgRmlsdGVyJiwgY29uc3QgTGlnaHRpbmdEYXRhJik7CiAKICAgICB2b2lkIHNl
dFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rv
clksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKICAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50
IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6
ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhhKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBj
b25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDBhMjAwMDFi
MTczYmQ4ZmRmNmJiYTYzNmNkMjNjZTQ3MDI2ZTdiM2YuLjZmNWI3MTRiM2Q1YmM0ZDY4M2YzODE3
NGQ3YmFhNjkzNmMwNzk3N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAtMjgsMzkgKzI4LDQzIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRkVNZXJnZTo6RkVNZXJnZShGaWx0ZXImIGZpbHRlcikKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1lcmdlKQorRkVNZXJnZTo6RkVNZXJnZSgpCisg
ICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1lcmdlKQogewogfQogCi1S
ZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZFTWVyZ2U+
IEZFTWVyZ2U6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZShm
aWx0ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKCkpOwogfQogCi12b2lk
IEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFTWVyZ2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIHVuc2lnbmVkIHNpemUgPSBudW1i
ZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgQVNTRVJUKCFp
bnB1dEVmZmVjdHMoKS5pc0VtcHR5KCkpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFn
ZSgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgYXV0
byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEdyYXBoaWNzQ29udGV4dCYgb3V0cHV0
Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQm
IGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KGkpOwotICAgICAgICBpZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmlt
YWdlQnVmZmVyUmVzdWx0KCkpCi0gICAgICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpKTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGlucHV0RWZmZWN0cygpKSB7Cisg
ICAgICAgIGF1dG8mIGlucHV0ID0gKmVmZmVjdC0+ZmlsdGVySW1hZ2UoKTsKKyAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpKSB7CisgICAgICAgICAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0ID0gRmxvYXRSZWN0KGlucHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFn
ZVJlY3Qob3V0cHV0KSk7CisgICAgICAgICAgICBvdXRwdXRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIGlucHV0SW1hZ2VSZWN0KTsKKyAgICAgICAgfQogICAgIH0KKworICAg
IHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24p
IGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVNZXJnZSI7CiAgICAgRmlsdGVyRWZm
ZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7Ci0gICAgdW5z
aWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CisgICAgdW5zaWduZWQgc2l6ZSA9
IGlucHV0RWZmZWN0cygpLnNpemUoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwogICAgIHRzIDw8
ICIgbWVyZ2VOb2Rlcz1cIiIgPDwgc2l6ZSA8PCAiXCJdXG4iOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCmluZGV4IDVjZmM1Y2I3
OTgxOWNlY2VkNTA3M2U1N2IwMTk0ZWJjZjE4ZjI2MDcuLjg4N2JhMGZkMzNmODkzMmNiZjQzMzgy
NjhlN2FhYTQ4YWZhMmYwNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCkBAIC0yMiwyMyArMjIsMjEgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVNZXJnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNZXJnZT4gY3JlYXRlKEZpbHRlciYpOworICAg
IHN0YXRpYyBSZWY8RkVNZXJnZT4gY3JlYXRlKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVNZXJnZShG
aWx0ZXImKTsKKyAgICBGRU1lcmdlKCk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIkZFTWVyZ2UiOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qg
b3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU1lcmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDZh
ZTNkOTg5ODY2MjZlMDdjMDk0YzU4NmYzMTk4YzljNThkYWVkNmIuLjc0MDcwNGUyNzgxMjQ5ZjRi
NWMzZWEzZTEyNWI0MTU1NTg3ZjljODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTM1LDE3ICsz
NSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTW9ycGhvbG9neTo6RkVNb3JwaG9s
b2d5KEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJh
ZGl1c1gsIGZsb2F0IHJhZGl1c1kpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpN
b3JwaG9sb2d5KQorRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQorICAgIDogRmlsdGVyRWZm
ZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVNb3JwaG9sb2d5KQogICAgICwgbV90eXBlKHR5cGUp
CiAgICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKICAgICAsIG1fcmFkaXVzWShyYWRpdXNZKQogewog
fQogCi1SZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBob2xvZ3k6OmNyZWF0ZShGaWx0ZXImIGZpbHRl
ciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKQorUmVmPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKQogewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFTW9ycGhvbG9neShmaWx0ZXIsIHR5cGUsIHJhZGl1c1gsIHJh
ZGl1c1kpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU1vcnBob2xvZ3kodHlwZSwgcmFk
aXVzWCwgcmFkaXVzWSkpOwogfQogCiBib29sIEZFTW9ycGhvbG9neTo6c2V0TW9ycGhvbG9neU9w
ZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKQEAgLTcyLDE4ICs3Miw2IEBAIGJv
b2wgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
Ci17Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBh
aW50UmVjdCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFp
bnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVz
WCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWlu
dFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWlu
dFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBwaXhl
bEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCiB7CiAgICAgcmV0dXJuICh5ICog
d2lkdGggKyB4KSAqIDQ7CkBAIC0yMzMsNTIgKzIyMSw2NCBAQCB2b2lkIEZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIGJvb2wgRkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJh
ZGl1c1kpCiB7CiAgICAgaWYgKHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAwIHx8ICghcmFkaXVz
WCAmJiAhcmFkaXVzWSkpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOwotICAgICAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJheSwg
aW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBhdXRvJiBpbnB1dCA9
ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICAgICAgaW5wdXQuY29weVBpeGVs
QnVmZmVyKGRzdFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVNb3JwaG9sb2d5OjpjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgaW1hZ2VSZWN0
LmluZmxhdGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KTsKKyAgICByZXR1cm4gZmlsdGVyLmNs
aXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7
CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAg
ICByZXR1cm47Cit9CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Citib29sIEZFTW9ycGhvbG9neTo6aXNBbHBoYUltYWdl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPmlzQWxwaGFJbWFnZSgpOwor
fQorCitib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJ
bWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZl
ciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvJiBvdXRwdXRQ
aXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIGF1dG8gaW5wdXRJ
bWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dCk7CiAKICAg
ICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1f
cmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBp
eGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdo
dCgpKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShv
dXRwdXRQaXhlbEFycmF5LCBpbnB1dEltYWdlUmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5o
ZWlnaHQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0
aGlzLT5maWx0ZXIoKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlw
bGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAg
ICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlucHV0
UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwor
ICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
YWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsg
bV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZm
ZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKLSAgICBpbnQgcmFk
aXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhl
aWdodCgpKTsKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkU2l6ZUJ5
RmlsdGVyU2NhbGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7CisgICAgaW50IHJhZGl1c1gg
PSBzdGQ6Om1pbihpbnB1dEltYWdlUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwor
ICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oaW5wdXRJbWFnZVJlY3QuaGVpZ2h0KCkgLSAxLCBy
YWRpdXMuaGVpZ2h0KCkpOwogCi0gICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJhZGl1c1gsIHJhZGl1c1kpKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAg
ICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7Ci0g
ICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5Owot
ICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkg
KiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxm
KGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAg
IHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCAqIGZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kgKiBmaWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7CisgICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKG91dHB1dFBp
eGVsQXJyYXksIGlucHV0SW1hZ2VSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAKKyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworICAgIHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5ID0gaW5wdXRQaXhlbEFycmF5LmdldCgpOworICAgIHBhaW50aW5n
RGF0YS5kc3RQaXhlbEFycmF5ID0gJm91dHB1dFBpeGVsQXJyYXk7CisgICAgcGFpbnRpbmdEYXRh
LndpZHRoID0gY2VpbGYoaW5wdXRJbWFnZVJlY3Qud2lkdGgoKSk7CisgICAgcGFpbnRpbmdEYXRh
LmhlaWdodCA9IGNlaWxmKGlucHV0SW1hZ2VSZWN0LmhlaWdodCgpKTsKKyAgICBwYWludGluZ0Rh
dGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0g
Y2VpbGYocmFkaXVzWSk7CiAgICAgcGxhdGZvcm1BcHBseShwYWludGluZ0RhdGEpOworICAgIHJl
dHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmlu
ZGV4IDQ4ZmMzNTQxMTdmYzI3Y2NmYzhlOTNmMTRlZGYwNzVkZTM5YzVhMTEuLjA0N2EwY2FhMjUx
MjU0Y2Q0YzU1NzdlNTg4MmZhOThhZDY3MzU2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtMjIsNyAr
MjIsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCw3ICszMyw3IEBA
IGVudW0gTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB7CiAKIGNsYXNzIEZFTW9ycGhvbG9neSA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5
PiBjcmVhdGUoRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwg
ZmxvYXQgcmFkaXVzWSk7CisgICAgc3RhdGljIFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKIAogICAg
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CiAgICAgYm9vbCBzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSk7CkBAIC00NiwxMyArNDUsMTMgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UmFk
aXVzWShmbG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVNb3JwaG9sb2d5KEZpbHRlciYsIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOworICAgIEZF
TW9ycGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCBy
YWRpdXNZKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVNb3JwaG9sb2d5IjsgfQorICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTg2LDMgKzg1LDQgQEAgcHJpdmF0ZToKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoRkVNb3JwaG9sb2d5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjcwZGI5MjQ4MWEzMzkyZDNkNWExZTkx
N2MyZDY1YWE0MTQwZjY5Li45NmZmYTAxYWVhNDFhMDUxOTc3MTUxODVjZWYwNDgwN2U2ZjlkNGVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmNwcApAQCAtMzAsMTYgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRkVPZmZzZXQ6OkZFT2Zmc2V0KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBkeCwgZmxvYXQgZHkp
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpPZmZzZXQpCitGRU9mZnNldDo6RkVP
ZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVj
dDo6VHlwZTo6RkVPZmZzZXQpCiAgICAgLCBtX2R4KGR4KQogICAgICwgbV9keShkeSkKIHsKIH0K
IAotUmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCBk
eCwgZmxvYXQgZHkpCitSZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoZmxvYXQgZHgsIGZs
b2F0IGR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGZpbHRlciwgZHgs
IGR5KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVPZmZzZXQoZHgsIGR5KSk7CiB9CiAK
IHZvaWQgRkVPZmZzZXQ6OnNldER4KGZsb2F0IGR4KQpAQCAtNTIsMzMgKzUyLDM4IEBAIHZvaWQg
RkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQogICAgIG1fZHkgPSBkeTsKIH0KIAotdm9pZCBGRU9m
ZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZFT2Zmc2V0Ojpj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBp
bnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGaWx0ZXImIGZpbHRlciA9
IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRl
clJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQot
ICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIGF1dG8mIGlucHV0
ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0g
aW5wdXQuaW1hZ2VSZWN0KCk7CisgICAgaW1hZ2VSZWN0Lm1vdmUoeyBtX2R4LCBtX2R5IH0pOwor
ICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwg
cHJpbWl0aXZlU3VicmVnaW9uKTsKKworfQorCitib29sIEZFT2Zmc2V0Ojppc0FscGhhSW1hZ2Uo
KSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVmZmVjdCgwKS0+aXNBbHBoYUltYWdlKCk7CiB9
CiAKLXZvaWQgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFT2Zmc2V0
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0
RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFn
ZSgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFp
bnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2Uo
aW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdl
QnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZp
bHRlcigpOwotICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNv
bHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3
SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsKKyAgICBhdXRvIGlucHV0SW1h
Z2VSZWN0ID0gRmxvYXRSZWN0KGlucHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3Qob3V0cHV0
KSk7CisgICAgaW5wdXRJbWFnZVJlY3QubW92ZShmaWx0ZXIuc2NhbGVkU2l6ZUJ5RmlsdGVyU2Nh
bGUoeyBtX2R4LCBtX2R5IH0pKTsKKyAgICAKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3QpOworICAgIHJldHVybiB0
cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oCmluZGV4IDY1YWJkYTkwYTQ3YjFiZmU3NmFlNWM3NGFhYjVhYTE2N2ZiMWU2OWUuLmExMGEx
ODliMzBlM2MyZmRhNTMzMTM0YTM3MTc3ZWUxMzQ1NWRkNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTIyLDEzICsy
MiwxMiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU9mZnNldCA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVPZmZzZXQ+
IGNyZWF0ZShGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIHN0YXRpYyBSZWY8RkVP
ZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAgZmxvYXQgZHgoKSBjb25z
dCB7IHJldHVybiBtX2R4OyB9CiAgICAgdm9pZCBzZXREeChmbG9hdCk7CkBAIC0zNywxNCArMzYs
MTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RHkoZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZF
T2Zmc2V0KEZpbHRlciYsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgRkVPZmZzZXQoZmxvYXQg
ZHgsIGZsb2F0IGR5KTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiAiRkVPZmZzZXQiOyB9CisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0g
ICAgCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCisgICAgYm9vbCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgCiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX2R4OwpAQCAt
NTMsMyArNTIsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU9mZnNldCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcAppbmRleCA1OTk3MjMwNjg4NmE2M2ZhNDEyYjViNzE0MWY3NGY5YzQ4N2Ex
NDRjLi4zODcwN2IzMDFmZDExMGJlY2JiMDRlMjVjZmM5ODJhMjA1ZmU2NDY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBAIC0yNywxOCArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXIm
IGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+
JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgU3BlY3VsYXJMaWdodGlu
ZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVj
dWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpLCBUeXBlOjpTcGVjdWxhckxpZ2h0aW5nKQorRkVTcGVjdWxhckxpZ2h0
aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBv
bmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBS
ZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFy
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFu
dCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGln
aHRpbmcpCiB7CiB9CiAKLVJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGlu
Zzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4
cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxGRVNwZWN1bGFyTGlnaHRpbmc+
IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VT
Y2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0
aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNl
U2NhbGUsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0KIAotRkVT
cGVjdWxhckxpZ2h0aW5nOjp+RkVTcGVjdWxhckxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCiBib29s
IEZFU3BlY3VsYXJMaWdodGluZzo6c2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCBzcGVjdWxhckNv
bnN0YW50KQogewogICAgIGlmIChtX3NwZWN1bGFyQ29uc3RhbnQgPT0gc3BlY3VsYXJDb25zdGFu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCmluZGV4IGU5OThhNzYwNWQxZTQ3MzVkOWY0OTc5
OGQzOTgxOGJmM2IyNDk1OGEuLmFjNDUwZGJkYjYwY2Q2OTdjZDhkZmMzYzc5MzE4ZGJmNjRhZDUz
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaApAQCAtMjcsOCArMjcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0
aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRl
KEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0
LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygp
OworICAgIHN0YXRpYyBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgZmxvYXQgc3Bl
Y3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQogICAg
IGJvb2wgc2V0U3BlY3VsYXJDb25zdGFudChmbG9hdCk7CkBAIC0zOSw4ICszOCw5IEBAIHB1Ymxp
YzoKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToK
LSAgICBGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVTcGVj
dWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19GSUxURVJfRUZGRUNUKEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1
MWNiYjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRiMmZjYWMyMGFkLi4wNTM0YWJlMDA1MTcyMTYxMjQ1
NGY4N2IzODU3MGQwNDE5YTNkNzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0yNiw2NCArMjYsNzQgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVHJlZUFzVGV4dC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVUaWxlOjpGRVRpbGUoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpUaWxlKQorRkVUaWxlOjpGRVRpbGUoKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRl
ckVmZmVjdDo6VHlwZTo6RkVUaWxlKQogewogfQogCi1SZWY8RkVUaWxlPiBGRVRpbGU6OmNyZWF0
ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKCkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVUaWxlKCkpOwogfQogCi12b2lkIEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK2Jvb2wgRkVUaWxlOjppc0FscGhhSW1hZ2UoKSBjb25zdAogewotLy8gRklYTUU6IFNlZSBi
dWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZSBmYWlsdXJl
LCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9yIG90aGVyd2lzZS4KLSAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBj
cmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGlu
LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFn
ZSgpKTsKLQotICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBtb3JlIGF0dGVudGlvbi4gSXQgaGFz
IHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdpdmVzIHRoZQotICAgIC8vIHNpemUg
b2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBiYWNrLiBUaGlzIGlzIHBhcnQgb2YgdGhlIHNwZWNp
ZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4KLSAgICBGbG9hdFJlY3QgdGlsZVJlY3QgPSBpbi0+
bWF4RWZmZWN0UmVjdCgpOwotICAgIEZsb2F0UG9pbnQgaW5NYXhFZmZlY3RMb2NhdGlvbiA9IHRp
bGVSZWN0LmxvY2F0aW9uKCk7Ci0gICAgRmxvYXRQb2ludCBtYXhFZmZlY3RMb2NhdGlvbiA9IG1h
eEVmZmVjdFJlY3QoKS5sb2NhdGlvbigpOwotICAgIGlmIChpbi0+ZmlsdGVyRWZmZWN0VHlwZSgp
ID09IEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dCkgewotICAgICAgICBGaWx0ZXImIGZpbHRl
ciA9IHRoaXMtPmZpbHRlcigpOwotICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdp
b24oKTsKLSAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53
aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAg
ICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVy
KHRpbGVSZWN0LCB0aWxlUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIGZpbHRl
cigpLnJlbmRlcmluZ01vZGUoKSk7Ci0gICAgaWYgKCF0aWxlSW1hZ2UpCi0gICAgICAgIHJldHVy
bjsKKyAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPmlzQWxwaGFJbWFnZSgpOworfQorCitGbG9h
dFJlY3QgRkVUaWxlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBm
aWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CisKK2Jv
b2wgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7
CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAg
YXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBp
bnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgR3JhcGhpY3NDb250ZXh0JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUlt
YWdlLT5jb250ZXh0KCk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLWluTWF4RWZm
ZWN0TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwotICAgIHRpbGVJbWFn
ZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkubG9jYXRpb24oKSk7CisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGF1dG8gdGlsZUltYWdlQ29weSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdU
Rk1vdmUodGlsZUltYWdlKSk7Ci0gICAgaWYgKCF0aWxlSW1hZ2VDb3B5KQotICAgICAgICByZXR1
cm47CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IGlucHV0LmFic29sdXRlSW1hZ2VSZWN0KCk7
CisgICAgYXV0byBvdXRwdXRJbWFnZVJlY3QgPSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKTsK
KworICAgIGF1dG8gdGlsZVJlY3QgPSBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKGlucHV0
LnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICB0aWxlUmVjdCA9IGZpbHRlci5zY2FsZWRSZWN0
QnlGaWx0ZXJTY2FsZSh0aWxlUmVjdCk7CisKKyAgICBhdXRvIG1heE91dHB1dFJlY3QgPSBmaWx0
ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKG91dHB1dC5wcmltaXRpdmVTdWJyZWdpb24oKSk7Cisg
ICAgbWF4T3V0cHV0UmVjdCA9IGZpbHRlci5zY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShtYXhPdXRw
dXRSZWN0KTsKKworICAgIGF1dG8gdGlsZUltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZSh0aWxlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICgh
dGlsZUltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAg
ICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0ZSgtdGlsZVJlY3QubG9jYXRpb24oKSk7CisgICAg
dGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VS
ZWN0LmxvY2F0aW9uKCkpOworCisgICAgYXV0byB0aWxlSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKHRpbGVJbWFnZUJ1ZmZlcikpOworICAgIGlmICghdGls
ZUltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0
dGVyblRyYW5zZm9ybTsKLSAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVj
dExvY2F0aW9uIC0gbWF4RWZmZWN0TG9jYXRpb24pOworICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJh
bnNsYXRlKHRpbGVSZWN0LmxvY2F0aW9uKCkgLSBtYXhPdXRwdXRSZWN0LmxvY2F0aW9uKCkpOwor
CisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS5yZWxlYXNlTm9u
TnVsbCgpLCB7IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7CiAKLSAgICBhdXRvIHBh
dHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdlQ29weS5yZWxlYXNlTm9uTnVsbCgpLCB7
IHRydWUsIHRydWUsIHBhdHRlcm5UcmFuc2Zvcm0gfSk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBv
dXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBvdXRwdXRDb250ZXh0
LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmaWx0ZXJDb250
ZXh0LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwotICAgIGZpbHRlckNvbnRleHQu
ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpKTsKKyAgICBvdXRwdXRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IG91dHB1dEltYWdlUmVjdC5zaXplKCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0
cmVhbSYgRkVUaWxlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAppbmRleCA0OWJkOTlmMDk0NDdk
YWUxY2YwOWFmMTIzNThjNmRlODQwNjg3NzE0Li5mYmIwYTEwNjJjYjlkZjQyZWYwMjMwZTYyNDY3
NmExMWVhMjcyNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTIyLDI3ICsyMiwyNSBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0
aWMgUmVmPEZFVGlsZT4gY3JlYXRlKCk7CiAKIHByaXZhdGU6Ci0gICAgRkVUaWxlKEZpbHRlciYp
OworICAgIEZFVGlsZSgpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuICJGRVRpbGUiOyB9CisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVUaWxlOyB9CisgICAgRmxvYXRSZWN0
IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhF
ZmZlY3RSZWN0KCkpKTsgfQorICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRklMVEVSX0VGRkVDVChGRVRpbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggNzc0ZTY4MmUz
YjQ4NTliYjZlMjA2YTFkMmJmYWViMGNlYTkxOWYwYi4uMjJkNGY5OWM3MmU1MjcxN2I0ODgxOWI1
YzQ5YzNhZjNlNzRjN2RlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtNDgsOCArNDgsOCBAQCBz
dGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRp
dmUgcm9vdCBvZiBtCiBzdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBh
CiBzdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBtICUgYQogCi1GRVR1cmJ1bGVu
Y2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywg
ZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OlR1cmJ1bGVuY2UpCitGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShUdXJidWxlbmNl
VHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGlu
dCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQorICAgIDogRmlsdGVy
RWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVUdXJidWxlbmNlKQogICAgICwgbV90eXBlKHR5
cGUpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQogICAgICwgbV9iYXNl
RnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKQEAgLTU5LDkgKzU5LDkgQEAgRkVUdXJidWxlbmNl
OjpGRVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0
IGJhc2VGcmVxdWUKIHsKIH0KIAotUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVh
dGUoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJv
b2wgc3RpdGNoVGlsZXMpCitSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShU
dXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZShmaWx0ZXIsIHR5cGUsIGJhc2VG
cmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1
ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwog
fQogCiBib29sIEZFVHVyYnVsZW5jZTo6c2V0VHlwZShUdXJidWxlbmNlVHlwZSB0eXBlKQpAQCAt
MzY2LDIyICszNjYsMjAgQEAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5j
ZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QKICAgICByZXR1cm4gdG9J
bnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQpOwogfQogCi12
b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJh
eSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Cit2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJl
Z2lvbihjb25zdCBGaWx0ZXImIGZpbHRlciwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXks
IGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwogCi0gICAgSW50UmVjdCBmaWx0ZXJSZWdp
b24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIGZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXIo
KS5maWx0ZXJTY2FsZSgpKTsKICAgICBGbG9hdFBvaW50IHBvaW50KDAsIGZpbHRlclJlZ2lvbi55
KCkgKyBzdGFydFkpOwogICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gc3RhcnRZICogKGZp
bHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOwotICAgIEFmZmluZVRyYW5zZm9ybSBpbnZlcnNlVHJh
bnNmcm9tID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5pbnZlcnNlKCkudmFsdWVfb3Io
QWZmaW5lVHJhbnNmb3JtKCkpOworICAgIEZsb2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBm
aWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVp
Z2h0KCkgfTsKIAogICAgIGZvciAoaW50IHkgPSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKICAg
ICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKICAgICAgICAgcG9pbnQuc2V0WChmaWx0
ZXJSZWdpb24ueCgpKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24u
d2lkdGgoKTsgKyt4KSB7CiAgICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwot
ICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQ
b2ludChwb2ludCk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBwb2ludC5z
Y2FsZWQoaW52ZXJzZVNjYWxlLndpZHRoKCksIGludmVyc2VTY2FsZS5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICBhdXRvIHZhbHVlcyA9IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KHBh
aW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbG9jYWxQb2ludCk7CiAgICAgICAgICAgICBwaXhlbEFy
cmF5LnNldFJhbmdlKHZhbHVlcy5jb21wb25lbnRzLmRhdGEoKSwgNCwgaW5kZXhPZlBpeGVsQ2hh
bm5lbCk7CiAgICAgICAgICAgICBpbmRleE9mUGl4ZWxDaGFubmVsICs9IDQ7CkBAIC0zOTEsMjYg
KzM4OSwzMiBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJh
eSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJgogCiB2b2lkIEZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKLSAg
ICBwYXJhbWV0ZXJzLT5maWx0ZXItPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXks
ICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFt
ZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CisgICAgcGFyYW1ldGVycy0+ZWZmZWN0
LT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5maWx0ZXIsICpwYXJhbWV0ZXJzLT5waXhlbEFycmF5
LCBwYXJhbWV0ZXJzLT5maWx0ZXJSZWdpb24sICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBh
cmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5k
WSk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxv
YXRSZWN0IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
KyAgICByZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdp
b24pOworfQorCitib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQoreworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwor
CisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvJiBvdXRw
dXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIEludFNpemUg
cmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgcmVzdWx0U2l6ZS5z
Y2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKKyAgICBJbnRTaXplIG91dHB1dFNpemUob3V0
cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpKTsKIAotICAgIGlmIChyZXN1bHRTaXplLmlz
RW1wdHkoKSkgewotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKLSAg
ICAgICAgcmV0dXJuOworICAgIGlmIChvdXRwdXRTaXplLmlzRW1wdHkoKSkgeworICAgICAgICBv
dXRwdXRQaXhlbEFycmF5Lnplcm9GaWxsKCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIEludFNpemUgdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKS5zaXplKCkpOworICAgIEludFNpemUgdGlsZVNpemUgPSByb3VuZGVkSW50U2l6
ZShvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKIAogICAgIGZsb2F0IGJhc2VG
cmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9
IG1fYmFzZUZyZXF1ZW5jeVk7CkBAIC00MTksMTQgKzQyMywxNyBAQCB2b2lkIEZFVHVyYnVsZW5j
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
KG1fc2VlZCwgdGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7CiAgICAg
aW5pdFBhaW50KHBhaW50aW5nRGF0YSk7CiAKLSAgICBhdXRvIGFyZWEgPSByZXN1bHRTaXplLmFy
ZWEoKTsKKyAgICBhdXRvIGFyZWEgPSBvdXRwdXRTaXplLmFyZWEoKTsKICAgICBpZiAoYXJlYS5o
YXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7CisgICAgaW50IGhlaWdodCA9
IG91dHB1dFNpemUuaGVpZ2h0KCk7CiAKICAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVp
Z2h0IC8gODsKICAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5z
aWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKwor
ICAgIGF1dG8gZmlsdGVyUmVnaW9uID0gb3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCk7CisKICAg
ICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKICAgICAgICAgUGFyYWxsZWxKb2JzPEZp
bGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CiAKQEAgLTQ0MCw4ICs0NDcs
MTAgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFt
ZXRlcihpKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKLSAgICAgICAg
ICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9ICZmaWx0ZXI7CisgICAgICAgICAgICAgICAgcGFy
YW1zLmVmZmVjdCA9IHRoaXM7CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlclJlZ2lvbiA9
IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZvdXRw
dXRQaXhlbEFycmF5OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFp
bnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0
YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtNDUyLDEyICs0
NjEsMTMgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlzIG5v
IHJvb20gZm9yIGEgbmV3IHRocmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwuCi0g
ICAgZmlsbFJlZ2lvbihkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNo
RGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBmaWxsUmVnaW9uKGZpbHRlciwgb3V0cHV0UGl4ZWxBcnJh
eSwgZmlsdGVyUmVnaW9uLCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKaW5kZXggNjM3ZDI4
NDg5NWUyMzE1MjJhOWFjODU3ZjJjODNmZjcyMGQ0NTJlNS4uZGIwNmNhYjViNDNjYjA0YmRlZjA4
NzhiZWY2MDgwMDNiZGI1YzVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC0yNiw3ICsyNiw2IEBACiAK
ICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw3ICsz
Nyw3IEBAIGVudW0gY2xhc3MgVHVyYnVsZW5jZVR5cGUgewogCiBjbGFzcyBGRVR1cmJ1bGVuY2Ug
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVHVyYnVs
ZW5jZT4gY3JlYXRlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCwgZmxvYXQsIGludCwg
ZmxvYXQsIGJvb2wpOworICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoVHVyYnVs
ZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50
IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpOwogCiAgICAgVHVyYnVs
ZW5jZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGJvb2wgc2V0VHlw
ZShUdXJidWxlbmNlVHlwZSk7CkBAIC05Myw3ICs5Miw5IEBAIHByaXZhdGU6CiAgICAgfTsKIAog
ICAgIHN0cnVjdCBGaWxsUmVnaW9uUGFyYW1ldGVycyB7Ci0gICAgICAgIEZFVHVyYnVsZW5jZSog
ZmlsdGVyOworICAgICAgICBjb25zdCBGaWx0ZXIqIGZpbHRlcjsKKyAgICAgICAgRkVUdXJidWxl
bmNlKiBlZmZlY3Q7CisgICAgICAgIEludFJlY3QgZmlsdGVyUmVnaW9uOwogICAgICAgICBVaW50
OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKICAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGlu
Z0RhdGE7CiAgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKQEAgLTEwMywxOSArMTA0LDE3
IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdp
b25QYXJhbWV0ZXJzKik7CiAKLSAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5
cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgRkVUdXJidWxlbmNlKFR1
cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUdXJidWxlbmNl
IjsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsK
ICAgICBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQm
IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwogICAgIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBT
dGl0Y2hEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWlu
dGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9p
ZCBmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3Rp
dGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0OworICAgIHZvaWQgZmlsbFJlZ2lv
bihjb25zdCBGaWx0ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFJlY3QmIGZpbHRl
clJlZ2lvbiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50
IGVuZFkpIGNvbnN0OwogCiAgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7
CiAKQEAgLTEyOSwzICsxMjgsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRVR1cmJ1bGVuY2UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApp
bmRleCBhMmQ5OTc5M2IwZGIyMjU4YmM0NzZkZGNjMjljMGNlMjYxMTBiYzFmLi42ZDIxYTYzYTNl
NGJjZGMwMmFmMGZmZjA1YWQ5ZTMyMzhhZWNjZWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjEsNTggKzIyLDk3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRl
ckVmZmVjdDsKIAotY2xhc3MgRmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7Citj
bGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgotICAgIEZpbHRl
cihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBmbG9hdCBmaWx0ZXJT
Y2FsZSA9IDEpCi0gICAgICAgIDogbV9hYnNvbHV0ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9y
bSkKLSAgICAgICAgLCBtX2ZpbHRlclNjYWxlKGZpbHRlclNjYWxlKQotICAgIHsgfQotICAgIHZp
cnR1YWwgfkZpbHRlcigpID0gZGVmYXVsdDsKLQotICAgIHZvaWQgc2V0U291cmNlSW1hZ2UoUmVm
UHRyPEltYWdlQnVmZmVyPiYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1hZ2UgPSBXVEZNb3Zl
KHNvdXJjZUltYWdlKTsgfQotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIHsgcmV0dXJu
IG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KKyAgICBlbnVtIGNsYXNzIENsaXBPcGVyYXRpb24geyBJ
bnRlcnNlY3QsIFVuaXRlIH07CiAKLSAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVyUmVz
b2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29sdXRpb24pIHsgbV9maWx0ZXJSZXNv
bHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQorICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2NhbGU7IH0KKyAgICB2b2lkIHNldEZpbHRlclNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IGZpbHRlclNj
YWxlOyB9CiAKLSAgICBmbG9hdCBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVy
U2NhbGU7IH0KLSAgICB2b2lkIHNldEZpbHRlclNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fZmlsdGVy
U2NhbGUgPSBzY2FsZTsgfQorICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3NvdXJjZUltYWdlUmVjdDsgfQorICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KSB7IG1fc291cmNlSW1hZ2VSZWN0ID0g
c291cmNlSW1hZ2VSZWN0OyB9CisgICAgCisgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9CisgICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24o
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJS
ZWdpb247IH0KIAotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlVHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRTb3Vy
Y2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFn
ZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9CisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQogCiAgICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CiAg
ICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBt
X3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNT
VkdGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NT
U0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgQ2xpcE9wZXJhdGlvbiBjbGlw
T3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwT3BlcmF0aW9uOyB9CiAKLSAgICB2aXJ0
dWFsIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNv
bnN0IHsgcmV0dXJuIHNpemUgKiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICAKLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBG
bG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0
IGZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgRmxvYXRT
aXplIHNjYWxlZFNpemVCeUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3Qg
eyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyU2NhbGU7IH0KKworICAgIEZsb2F0UmVjdCBzY2FsZWRS
ZWN0QnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCkgY29uc3QKKyAgICB7
CisgICAgICAgIGF1dG8gc2NhbGVkSW1hZ2VSZWN0ID0gaW1hZ2VSZWN0OworICAgICAgICBzY2Fs
ZWRJbWFnZVJlY3Quc2NhbGUobV9maWx0ZXJTY2FsZSk7CisgICAgICAgIHJldHVybiBzY2FsZWRJ
bWFnZVJlY3Q7CisgICAgfQorCisgICAgRmxvYXRSZWN0IG1heFByaW1pdGl2ZVN1YnJlZ2lvbihj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpbnRlcnNlY3Rpb24ocHJpbWl0aXZlU3VicmVnaW9uLCBtX2ZpbHRlclJlZ2lvbik7
CisgICAgfQorCisgICAgRmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBG
bG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jbGlwT3BlcmF0aW9uID09IENsaXBPcGVy
YXRpb246OkludGVyc2VjdCA/IGludGVyc2VjdGlvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJl
Z2lvbikgOiB1bmlvblJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworICAgIH0K
KworICAgIEZsb2F0UmVjdCBjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRS
ZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNsaXBUb1ByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJl
Y3QsIG1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pKTsKKyAgICB9CisK
KyAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKGNvbnN0IEZsb2F0
UG9pbnQmIHVzZXJTcGFjZVBvaW50LCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CisgICAgeworICAgICAgICBGbG9h
dFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQb2ludCh1c2VyU3BhY2VQb2ludCwgcHJpbWl0aXZl
U3VicmVnaW9uLCBzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShwcmltaXRpdmVTdWJyZWdpb24pKTsK
KyAgICAgICAgRmxvYXRSZWN0IGFic29sdXRlSW1hZ2VSZWN0ID0gc2NhbGVkUmVjdEJ5RmlsdGVy
U2NhbGUoaW1hZ2VSZWN0KTsKKyAgICAgICAgYWJzb2x1dGVQb2ludC5tb3ZlQnkoLWFic29sdXRl
SW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVQb2ludDsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlGaWx0ZXIoKSB7IHJldHVybiBmYWxzZTsgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVy
UmVzb2x1dGlvbikKLSAgICAgICAgOiBtX2ZpbHRlclJlc29sdXRpb24oZmlsdGVyUmVzb2x1dGlv
bikKKyAgICBGaWx0ZXIoRmlsdGVyOjpUeXBlIGZpbHRlclR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYg
ZmlsdGVyU2NhbGUsIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKKyAgICAgICAgOiBGaWx0
ZXJGdW5jdGlvbihmaWx0ZXJUeXBlKQorICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpCisgICAgICAgICwgbV9jbGlwT3BlcmF0aW9uKGNsaXBPcGVyYXRpb24pCisgICAgeworICAg
IH0KKworICAgIEZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCisgICAg
ICAgIDogRmlsdGVyRnVuY3Rpb24oZmlsdGVyVHlwZSkKKyAgICAgICAgLCBtX2ZpbHRlclNjYWxl
KGZpbHRlclNjYWxlKQorICAgICAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVj
dCkKKyAgICAgICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCisgICAgICAgICwgbV9j
bGlwT3BlcmF0aW9uKGNsaXBPcGVyYXRpb24pCiAgICAgewogICAgIH0KIAogcHJpdmF0ZToKKyAg
ICBGbG9hdFNpemUgbV9maWx0ZXJTY2FsZTsKKyAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJl
Y3Q7CisgICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOworCiAgICAgUmVmUHRyPEltYWdlQnVm
ZmVyPiBtX3NvdXJjZUltYWdlOwotICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07CiAgICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07Ci0gICAg
ZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKKworICAgIENsaXBPcGVyYXRpb24gbV9jbGlwT3Bl
cmF0aW9uIHsgQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0IH07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhkZmI1NWE0MTgz
ZjdjNDYyNDQ3MzJhNzRkYmM5YzM5Y2NiNjEwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaApAQCAt
MCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckJvdW5k
YXJ5U2V0IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEZsYWdzIHsKKyAgICAgICAgSGFzWCAg
ICAgID0gMSA8PCAwLAorICAgICAgICBIYXNZICAgICAgPSAxIDw8IDEsCisgICAgICAgIEhhc1dp
ZHRoICA9IDEgPDwgMiwKKyAgICAgICAgSGFzSGVpZ2h0ID0gMSA8PCAzCisgICAgfTsKKworICAg
IEZpbHRlckJvdW5kYXJ5U2V0KCkgPSBkZWZhdWx0OworCisgICAgRmlsdGVyQm91bmRhcnlTZXQo
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGFyaWVzLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQorICAg
ICAgICA6IG1fYm91bmRhcmllcyhib3VuZGFyaWVzKQorICAgICAgICAsIG1fZmxhZ3MoZmxhZ3Mp
CisgICAgeworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1gpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fYm91bmRhcmllcy54KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4geSgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzWSkpCisgICAgICAgICAgICByZXR1
cm4gbV9ib3VuZGFyaWVzLnkoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB3aWR0aCgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzV2lkdGgpKQorICAgICAgICAgICAgcmV0
dXJuIG1fYm91bmRhcmllcy53aWR0aCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGhlaWdodCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9mbGFncy5jb250YWlucyhGbGFnczo6SGFzSGVpZ2h0KSkKKyAgICAgICAg
ICAgIHJldHVybiBtX2JvdW5kYXJpZXMuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2JvdW5kYXJpZXM7Cisg
ICAgT3B0aW9uU2V0PEZsYWdzPiBtX2ZsYWdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IGZiNjc3NTRlNGZjNWJiY2E1MWMzNDhlYzdmNjNlNGNj
OTI3ZGIxMDguLjJiZThjNzBiZjI4ZjM3ZGY5OTMzYWJhODdlZTE1OTJkYTM5NzllZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKQEAgLTI2LDExOCArMjYsMTQgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgi
CiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBl
ZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotI2lm
IEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgotI2VuZGlm
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUu
aD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlckVmZmVjdDo6RmlsdGVy
RWZmZWN0KEZpbHRlciYgZmlsdGVyLCBUeXBlIHR5cGUpCi0gICAgOiBtX2ZpbHRlcihmaWx0ZXIp
Ci0gICAgLCBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZSh0eXBlKQotewotfQotCi1GaWx0ZXJFZmZl
Y3Q6On5GaWx0ZXJFZmZlY3QoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IElu
dFJlY3QoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAg
ICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpj
bGlwQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIC8vIEZpbHRlcnMgaW4gU1ZHIGNsaXAgdG8g
cHJpbWl0aXZlIHN1YnJlZ2lvbiwgd2hpbGUgQ1NTIGRvZXNuJ3QuCi0gICAgaWYgKG1fY2xpcHNU
b0JvdW5kcykKLSAgICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5n
SW50UmVjdChtX21heEVmZmVjdFJlY3QpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYWJzb2x1dGVQ
YWludFJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdChtX21heEVmZmVjdFJlY3QpKTsKLX0KLQot
RmxvYXRQb2ludCBGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZs
b2F0UG9pbnQgdXNlclNwYWNlUG9pbnQpIGNvbnN0Ci17Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0
ZVBvaW50ID0gbWFwUG9pbnQodXNlclNwYWNlUG9pbnQsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uLCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uKTsKLSAgICBhYnNvbHV0ZVBvaW50Lm1v
dmVCeSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gYWJzb2x1
dGVQb2ludDsKLX0KLQotSW50UmVjdCBGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JiBlZmZlY3RSZWN0KSBjb25zdAotewotICAgIElu
dFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpOwotICAgIGxv
Y2F0aW9uLm1vdmVCeSgtZWZmZWN0UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gSW50UmVj
dChsb2NhdGlvbiwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotfQotCi1GbG9hdFJlY3Qg
RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpIGNvbnN0CitGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5
cGUgdHlwZSkKKyAgICA6IEZpbHRlckZ1bmN0aW9uKHR5cGUpCiB7Ci0gICAgQVNTRVJUKGhhc1Jl
c3VsdCgpKTsKLQotICAgIEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBJbWFnZUJ1ZmZlcjo6Y2xhbXBl
ZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIHNjYWxlKTsKLQotICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnNjYWxlKHNjYWxlKS50cmFuc2xhdGUo
LW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybS5t
YXBSZWN0KHNyY1JlY3QpOwotfQotCi1GbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQotewotICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNl
LCBGRUZsb29kIGRvbid0IGhhdmUgaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lv
biBhcyB1bml0ZSByZWN0LgotICAgIEZsb2F0UmVjdCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2ln
bmVkIG51bWJlck9mSW5wdXRFZmZlY3RzID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAg
ICAgIHN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bWJlck9mSW5w
dXRFZmZlY3RzOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdp
b24gPSBpbnB1dEVmZmVjdChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
Ci0gICAgICAgICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRl
clJlZ2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICAvLyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUgdGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1
YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0gICAgaWYgKGZpbHRlckVmZmVjdFR5cGUoKSA9
PSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkKLSAgICAgICAgc3VicmVnaW9uID0gbV9maWx0ZXIuZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJv
dW5kYXJpZXMoKTsKLSAgICBpZiAoaGFzWCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WChib3Vu
ZGFyaWVzLngoKSk7Ci0gICAgaWYgKGhhc1koKSkKLSAgICAgICAgc3VicmVnaW9uLnNldFkoYm91
bmRhcmllcy55KCkpOwotICAgIGlmIChoYXNXaWR0aCgpKQotICAgICAgICBzdWJyZWdpb24uc2V0
V2lkdGgoYm91bmRhcmllcy53aWR0aCgpKTsKLSAgICBpZiAoaGFzSGVpZ2h0KCkpCi0gICAgICAg
IHN1YnJlZ2lvbi5zZXRIZWlnaHQoYm91bmRhcmllcy5oZWlnaHQoKSk7Ci0KLSAgICBzZXRGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsKLQotICAgIGF1dG8gYWJzb2x1dGVTdWJy
ZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsK
LSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7
Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgLy8g
U2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGlu
ZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRV
bmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7Ci0KLSAgICAvLyBD
bGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24uCi0gICAgYXV0byBh
YnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAg
IGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24pOwotICAg
IGFic29sdXRlU3VicmVnaW9uLmludGVyc2VjdChhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbik7
Ci0KLSAgICBzZXRNYXhFZmZlY3RSZWN0KGFic29sdXRlU3VicmVnaW9uKTsKLSAgICByZXR1cm4g
c3VicmVnaW9uOwogfQogCiBGaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3Qo
dW5zaWduZWQgbnVtYmVyKSBjb25zdApAQCAtMTQ2LDUxNCArNDIsOTkgQEAgRmlsdGVyRWZmZWN0
KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKICAgICBy
ZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKIH0KIAotc3RhdGljIHVuc2ln
bmVkIGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCplZmZlY3QsIEhhc2hTZXQ8Y29u
c3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCi17Ci0gICAgYWxsRWZmZWN0cy5hZGQoZWZm
ZWN0KTsKLSAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0LT5udW1iZXJPZkVmZmVjdElucHV0cygp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmls
dGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGNvbGxlY3RF
ZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFsbEVmZmVjdHMuc2l6
ZSgpOwotfQotCi11bnNpZ25lZCBGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1
dHMoKSBjb25zdAotewotICAgIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4gYWxsRWZmZWN0
czsKLSAgICByZXR1cm4gY29sbGVjdEVmZmVjdHModGhpcywgYWxsRWZmZWN0cyk7Ci19Ci0KLXZv
aWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxh
dGVQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAg
aWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1f
aW5wdXRFZmZlY3RzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5n
ZXQoKTsKLSAgICAgICAgaW4tPmFwcGx5KCk7Ci0gICAgICAgIGlmICghaW4tPmhhc1Jlc3VsdCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIENvbnZlcnQgaW5wdXQgcmVzdWx0
cyB0byB0aGUgY3VycmVudCBlZmZlY3QncyBjb2xvciBzcGFjZS4KLSAgICAgICAgdHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShpbiwgaSk7Ci0gICAgfQotCi0gICAgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICBzZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFj
ZSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOlxuICBmaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA8PCAi
XG4gIGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuICBhYnNv
bHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24g
PDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWludFJlY3QgPDwgIlxu
ICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RSZWN0IDw8ICJcbiAgZmlsdGVyIHNjYWxl
ICIgPDwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSA8PCAiXG4gIGZpbHRlciByZXNvbHV0aW9uICIg
PDwgbV9maWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpKTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFp
bnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocmVxdWly
ZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgaW5wdXRFZmZlY3QoaSktPmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGltcGxl
bWVudHMgaHR0cHM6Ly93d3cudzMub3JnL1RSL2ZpbHRlci1lZmZlY3RzLTEvI0ZpbHRlclByaW1p
dGl2ZVN1YlJlZ2lvbi4KKyAgICBGbG9hdFJlY3QgZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbjsK
ICAgICAKLSAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUg
YW5kIHJldHVybiBlYXJsaWVyLgotICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwotfQotCi12
b2lkIEZpbHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQotewotICAg
IC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRz
IGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgotICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGltYWdlQXJyYXkgPSBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9
IGltYWdlQXJyYXkuZGF0YSgpOwotICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJh
eS5sZW5ndGgoKTsKLQotICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwg
YW5kIGNvbXBsZXRlIHBpeGVscwotICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7
Ci0KLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgaWYgKHBpeGVsQXJyYXlMZW5n
dGggPj0gNjQpIHsKLSAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBp
eGVsQXJyYXlMZW5ndGggJiB+MHgzZik7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIC8vIElu
Y3JlbWVudHMgcGl4ZWxEYXRhIGJ5IDY0LgotICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRl
ZW5QaXhlbHMgPSB2bGQ0cV91OChwaXhlbERhdGEpOwotICAgICAgICAgICAgc2l4dGVlblBpeGVs
cy52YWxbMF0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52
YWxbM10pOwotICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0
ZWVuUGl4ZWxzLnZhbFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgc2l4
dGVlblBpeGVscy52YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVl
blBpeGVscy52YWxbM10pOwotICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVu
UGl4ZWxzKTsKLSAgICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKLSAgICAgICAgfSB3aGlsZSAo
cGl4ZWxEYXRhIDwgbGFzdFBpeGVsKTsKLQotICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4
M2Y7Ci0gICAgICAgIGlmICghcGl4ZWxBcnJheUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8g
NDsKLQotICAgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQg
YWRqdXN0aW5nIGNvbG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5Ci0gICAgd2hpbGUgKC0tbnVt
UGl4ZWxzID49IDApIHsKLSAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4
ZWwKLSAgICAgICAgdWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKLSAgICAgICAgLy8gQ2xh
bXAgZWFjaCBjb21wb25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0
aW9uCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAoKnBpeGVsRGF0YSA+IGEpCi0gICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7Ci0gICAg
ICAgICAgICArK3BpeGVsRGF0YTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbmNyZW1lbnQgZm9y
IGFscGhhCi0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KLX0KLQotdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNsZWFyUmVzdWx0KCkKLXsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gbnVsbHB0cjsK
LSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotfQotCi12b2lkIEZpbHRlckVm
ZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKLXsKLSAgICAvLyBDbGVhciBhbGwgcmVzdWx0
cywgcmVnYXJkbGVzcyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKLSAgICAvLyBhIHJlc3Vs
dC4gQ2FuIGJlIHVzZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KLSAg
ICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIGNsZWFyUmVzdWx0KCk7Ci0KLSAgICB1bnNpZ25l
ZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgIG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpLT5jbGVh
clJlc3VsdHNSZWN1cnNpdmUoKTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1h
Z2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGlt
YWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZm
ZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8
PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghaGFzUmVzdWx0KCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCi0g
ICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotCi0gICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9y
ZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghbV9pbWFnZUJ1
ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gRG9uJ3QgdXNlIHRo
ZSBpbnB1dCdzIHN1YnJlZ2lvbiBmb3IgPGZlVGlsZT4uCisgICAgaWYgKCFtX2lucHV0RWZmZWN0
cy5pc0VtcHR5KCkgJiYgZmlsdGVyVHlwZSgpICE9IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVUaWxl
KSB7CisgICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCisgICAgICAg
ICAgICBkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLnVuaXRlKGVmZmVjdC0+Y2FsY3VsYXRlUHJp
bWl0aXZlU3VicmVnaW9uKGZpbHRlcikpOworICAgIH0gZWxzZQorICAgICAgICBkZWZhdWx0UHJp
bWl0aXZlU3VicmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwogCi0gICAgSW50UmVjdCBk
ZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwot
ICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0UGl4ZWxCdWZmZXIoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0
aW5hdGlvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0
UGl4ZWxCdWZmZXIoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7
Ci0gICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19CisgICAgRmxvYXRSZWN0
IHByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJF
ZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlv
bmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBJbnRTaXplIHNj
YWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVk
c0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkpOwotICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVj
b3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IFVpbnQ4Q2xh
bXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKLSAgICBpZiAo
IXBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlVbm11bHRpcGxp
ZWRSZXN1bHQoKnBpeGVsQXJyYXksIHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhl
bEFycmF5OworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRYKG1fYm91bmRhcnlTZXQueCgpLnZh
bHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ueCgpKSk7CisgICAgcHJpbWl0aXZlU3Vi
cmVnaW9uLnNldFkobV9ib3VuZGFyeVNldC55KCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1
YnJlZ2lvbi55KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0V2lkdGgobV9ib3VuZGFy
eVNldC53aWR0aCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ud2lkdGgoKSkp
OworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRIZWlnaHQobV9ib3VuZGFyeVNldC5oZWlnaHQo
KS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLmhlaWdodCgpKSk7CisgICAgCisg
ICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIH0KIAotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVj
dCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCitGbG9h
dFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVNYXhQcmltaXRpdmVTdWJyZWdpb24oY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6
ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRT
aXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICog
NDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxB
cnJheSwgcmVjdCwgY29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7CisgICAgYXV0
byBwcmltaXRpdmVTdWJyZWdpb24gPSBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVy
KTsKKyAgICByZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJy
ZWdpb24pOwogfQogCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Ci0g
ICAgc2NhbGVkUmVjdC5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBJbnRTaXpl
IHNjYWxlZFBhaW50U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgc2NhbGVk
UGFpbnRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotCi0gICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVs
eSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCi0gICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBz
Y2FsZWRSZWN0LnkoKSA8IDAgfHwgc2NhbGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUu
d2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1heFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGluYXRpb24ubGVuZ3Ro
KCkpOworICAgIGlmIChtX2ZpbHRlckltYWdlKQorICAgICAgICByZXR1cm4gbV9maWx0ZXJJbWFn
ZS0+aW1hZ2VSZWN0KCk7CiAKLSAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3QgZG9lcyBu
b3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KLSAgICBpZiAoc2NhbGVkUmVjdC5tYXhYKCkg
PD0gMCB8fCBzY2FsZWRSZWN0Lm1heFkoKSA8PSAwIHx8IHNjYWxlZFJlY3QueCgpID49IHNjYWxl
ZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QueSgpID49IHNjYWxlZFBhaW50U2l6ZS5o
ZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3Q7CiAKLSAg
ICBpbnQgeE9yaWdpbiA9IHNjYWxlZFJlY3QueCgpOwotICAgIGludCB4RGVzdCA9IDA7Ci0gICAg
aWYgKHhPcmlnaW4gPCAwKSB7Ci0gICAgICAgIHhEZXN0ID0gLXhPcmlnaW47Ci0gICAgICAgIHhP
cmlnaW4gPSAwOworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpIHsKKyAg
ICAgICAgYXV0byYgaW5wdXQgPSAqZWZmZWN0LT5maWx0ZXJJbWFnZSgpOworICAgICAgICBpbWFn
ZVJlY3QudW5pdGUoaW5wdXQuaW1hZ2VSZWN0KCkpOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHNj
YWxlZFJlY3QubWF4WCgpOwotICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkp
Ci0gICAgICAgIHhFbmQgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKTsKLQotICAgIGludCB5T3Jp
Z2luID0gc2NhbGVkUmVjdC55KCk7Ci0gICAgaW50IHlEZXN0ID0gMDsKLSAgICBpZiAoeU9yaWdp
biA8IDApIHsKLSAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKLSAgICAgICAgeU9yaWdpbiA9IDA7
Ci0gICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQg
PiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNp
emUuaGVpZ2h0KCk7Ci0KLSAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAg
IGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBp
bnQgc291cmNlU2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWlu
dDhfdCogZGVzdGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBz
Y2FsZWRSZWN0LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3Vy
Y2VQaXhlbCA9IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lk
dGgoKSkgKyB4T3JpZ2luKSAqIDQ7CiAKLSAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKLSAg
ICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKLSAgICAg
ICAgZGVzdGluYXRpb25QaXhlbCArPSBkZXN0aW5hdGlvblNjYW5saW5lOwotICAgICAgICBzb3Vy
Y2VQaXhlbCArPSBzb3VyY2VTY2FubGluZTsKLSAgICAgICAgKyt5T3JpZ2luOwotICAgIH0KKyAg
ICByZXR1cm4gZmlsdGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHBy
aW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0Fs
cGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQorSW50UmVjdCBGaWx0ZXJFZmZl
Y3Q6OmNhbGN1bGF0ZUFic29sdXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKSBjb25z
dAogewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6
ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9
IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7
Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsK
LSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWlnaHQgPSBp
bnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIGRl
c3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7Ci0K
LSAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VO
b0ZsYWdzKTsKLSNlbHNlCi0gICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291
cmNlLmRhdGEoKTsKLSAgICBjb25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAo
aW5wdXRTaXplLmFyZWEoKSAqIDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25D
b21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7Ci0KLSAgICB3aGlsZSAoc291cmNlQ29tcG9u
ZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKLSAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNv
bXBvbmVudFswXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
MV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsK
LSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJj
ZUNvbXBvbmVudFsyXSkgKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7Ci0gICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQotI2VuZGlmCisgICAgYXV0byBwcmltaXRp
dmVTdWJyZWdpb24gPSBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKKyAgICBp
ZiAocHJpbWl0aXZlU3VicmVnaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICBhdXRvIGltYWdlUmVjdCA9IGNhbGN1bGF0ZUltYWdlUmVjdChmaWx0ZXIsIHByaW1pdGl2ZVN1
YnJlZ2lvbik7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyLnNjYWxlZFJlY3RC
eUZpbHRlclNjYWxlKGltYWdlUmVjdCkpOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0
aXBseWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQordm9pZCBGaWx0
ZXJFZmZlY3Q6OmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKCkKIHsKLSNpZiBVU0UoQUNDRUxF
UkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsK
LSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAgIHNyYy5yb3dCeXRlcyA9
IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNl
LmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IGlu
cHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwot
ICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRhdGEgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAgdkltYWdlVW5wcmVtdWx0
aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0g
ICAgY29uc3QgdWludDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKLSAgICBj
b25zdCB1aW50OF90KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyAoaW5wdXRTaXplLmFyZWEoKSAq
IDQpLnZhbHVlKCk7Ci0gICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBkZXN0aW5h
dGlvbi5kYXRhKCk7Ci0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgewotICAgICAg
ICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAgIGlmIChhbHBoYSkgewot
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogMjU1
IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19j
YXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFscGhhOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSAwOwotICAgICAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOwotICAgICAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnRbMl0gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzNdID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgotfQotCi1zdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2UsIFBpeGVsQnVm
ZmVyJiBwaXhlbEJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIg
dG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2Ug
Y2FuIGRvIGl0IGRpcmVjdGx5LgotCi0gICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9p
bnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAv
IG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKLSAgICAvLyBD
cmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBh
dXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJl
bmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotICAgIGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIs
IGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JT
cGFjZSh0YXJnZXRDb2xvclNwYWNlLCAqYnVmZmVyLCBkZXN0aW5hdGlvblJlY3QsIHBpeGVsQnVm
ZmVyLmZvcm1hdCgpLmFscGhhRm9ybWF0KTsKKyAgICAvLyBDbGVhciBhbGwgcmVzdWx0cywgcmVn
YXJkbGVzcyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBoYXMKKyAgICAvLyBhIHJlc3VsdC4gQ2Fu
IGJlIHVzZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVycm9uZW91cyBzdGF0ZS4KKyAgICBjbGVh
ckZpbHRlckltYWdlKCk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykK
KyAgICAgICAgZWZmZWN0LT5jbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2ZSgpOwogfQogCi1zdGQ6
Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRv
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHRhcmdldENvbG9yU3BhY2Us
IEltYWdlQnVmZmVyJiBpbnB1dEJ1ZmZlciwgY29uc3QgSW50UmVjdCYgcmVjdCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRBbHBoYUZvcm1hdCkKK2Jvb2wgRmlsdGVyRWZmZWN0OjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgZG9u
ZSBtb3JlIGRpcmVjdGx5IHVzaW5nIFBpeGVsQnVmZmVyQ29udmVyc2lvbi4KKyAgICBpZiAobV9m
aWx0ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBGbG9hdFNpemUgY2xhbXBl
ZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworICAgIGF1dG8g
cHJpbWl0aXZlU3VicmVnaW9uID0gY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7
CisgICAgaWYgKHByaW1pdGl2ZVN1YnJlZ2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3JyZWN0IGNv
bG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9u
Ci0gICAgYXV0byBjb252ZXJ0ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRT
aXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIHRh
cmdldENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRC
dWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAvLyBDb2xvciBzcGFj
ZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1h
Z2UgYnVmZmVyIHRvIGFub3RoZXIKLSAgICBjb252ZXJ0ZWRCdWZmZXItPmNvbnRleHQoKS5kcmF3
SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJlY3QpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gY2Fs
Y3VsYXRlSW1hZ2VSZWN0KGZpbHRlciwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICBhdXRvIGFi
c29sdXRlSW1hZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmaWx0ZXIuc2NhbGVkUmVjdEJ5Rmls
dGVyU2NhbGUoaW1hZ2VSZWN0KSk7CiAgICAgCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgb3V0cHV0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgdGFyZ2V0Q29sb3JTcGFj
ZSB9OwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwg
cmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJU
b0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhl
IGRhdGEgc3RvcmVkIGluIG1faW1hZ2VCdWZmZXJSZXN1bHQsIGFuZCBzYXZlIHRvIGRlc3RpbmF0
aW9uCi0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRJbWFnZUJ1ZmZlclRv
Q29sb3JTcGFjZShjb2xvclNwYWNlLCAqbV9pbWFnZUJ1ZmZlclJlc3VsdCwgeyBJbnRQb2ludCgp
LCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBvdXRwdXRGb3JtYXQpOwotICAgIGlmICgh
Y29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VCeXRl
cyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3QpOwot
fQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5h
dGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlciwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC9tX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwKLSAgICAv
LyB3aGljaGV2ZXIgaXNuJ3QgbnVsbCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRv
IGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNv
bG9yU3BhY2UsIHBpeGVsQnVmZmVyKTsKLSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXIt
PmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
Y29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOworICAgIGlmIChhYnNvbHV0
ZUltYWdlUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFi
c29sdXRlSW1hZ2VSZWN0LnNpemUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBm
aWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCku
IEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwg
ICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0KTsKLQotICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAg
ICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAg
ICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBy
ZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5jb2xvclNwYWNlKCkgPT0gbV9yZXN1bHRD
b2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBt
X3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9p
bnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENv
bG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1f
cmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNpemUpOwotICAgICAgICAg
ICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEobV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBp
bnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVy
Q29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRl
ZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBjb3B5SW1hZ2VCeXRlcyhtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3Rp
bmF0aW9uLCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVj
dCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0g
ICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBz
dHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA8PCAiIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmICghbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVy
c2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252
ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdl
QnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4
ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICAgICAg
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRT
aXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAg
ICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgICAg
ICAgICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3Bh
Y2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0
IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9y
bWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBpbnB1dFNp
emUpOwotICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSht
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAg
ICAgIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKLX0KLQotSW1hZ2VCdWZmZXIqIEZpbHRl
ckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAi
RmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVy
TmFtZSgpLCB0aGlzLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQg
dHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGlmIChtX2Fi
c29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmls
dGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4
KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLX0KLQotc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9u
bHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7
Ci0gICAgQVNTRVJUKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KTsKLQotICAgIGlmIChtX2Fi
c29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJl
c3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2Ug
fTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0
ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0OwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQotewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVy
RWZmZWN0ICVzICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUo
KSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAg
IEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIEFTU0VSVCghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRTaXplIHJlc3Vs
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0dXJu
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotfQotCi1ib29sIEZpbHRlckVmZmVjdDo6cmVx
dWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAg
b2YgYW4gZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIC8vIFdlIG9ubHkgbmVlZCBl
eHRyYSBjb2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGlu
IHRoZSBpbnB1dAotICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcg
cGl4ZWxzCi0gICAgcmV0dXJuIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSAmJiByZXN1bHRDb2xvclNw
YWNlKCkgIT0gKmRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLSNlbHNlCi0gICAgLy8gQWRkaXRpb25h
bCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgb24gbm9uLUNHCi0gICAgVU5V
U0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lm
IFVTRShDRykKLSAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVy
bmFsbHkuCi0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7Ci0jZWxzZQot
ICAgIGlmICghaGFzUmVzdWx0KCkgfHwgZGVzdGluYXRpb25Db2xvclNwYWNlID09IG1fcmVzdWx0
Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFdlIGNhbiBhdm9p
ZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkg
YWRkaW5nCi0gICAgLy8gY29sb3Igc3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJl
LHVufW11bHRpcGxpZWQgYXJyYXlzLgotICAgIGltYWdlQnVmZmVyUmVzdWx0KCktPnRyYW5zZm9y
bVRvQ29sb3JTcGFjZShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotCi0gICAgbV9yZXN1bHRDb2xv
clNwYWNlID0gZGVzdGluYXRpb25Db2xvclNwYWNlOwotCi0gICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IHN0ZDo6bnVsbG9wdDsKLSNlbmRpZgorICAgIGF1dG8gaXNBbHBoYUltYWdlID0gdGhpcy0+aXNB
bHBoYUltYWdlKCk7CisgICAgYXV0byBpbWFnZUNvbG9yU3BhY2UgPSB0aGlzLT5pbWFnZUNvbG9y
U3BhY2UoKTsKKyAgICAKKyAgICBtX2ZpbHRlckltYWdlID0gRmlsdGVySW1hZ2U6OmNyZWF0ZShw
cmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgYWJzb2x1dGVJbWFnZVJlY3QsIGlzQWxwaGFJ
bWFnZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgaW1hZ2VDb2xvclNwYWNlKTsKKyAg
ICBpZiAoIW1fZmlsdGVySW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0KKyAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8
IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6IgorICAgICAgICA8PCAi
XG4gIHByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IHByaW1pdGl2ZVN1YnJlZ2lvbgorICAgICAgICA8
PCAiXG4gIG1heFByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IGZpbHRlci5tYXhQcmltaXRpdmVTdWJy
ZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAgICAgICA8PCAiXG4gIGltYWdlUmVjdCAiIDw8
IGltYWdlUmVjdAorICAgICAgICA8PCAiXG4gIGFic29sdXRlSW1hZ2VnUmVjdCAiIDw8IGFic29s
dXRlSW1hZ2VSZWN0KTsKKyAgICAKKyAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkg
ZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgorICAgIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShmaWx0ZXIpOworICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJF
ZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CkBAIC02NjMsOSArMTQ0LDcgQEAgVGV4
dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblQKICAgICAKICAgICBpZiAocmVwcmVzZW50YXRpb25UeXBlID09
IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7CiAgICAgICAgIFRleHRTdHJlYW06Oklu
ZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBo
YSBpbWFnZSIsIG1fYWxwaGFJbWFnZSk7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0
aW5nIGNvbG9yc3BhY2UiLCBtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgbV9yZXN1bHRDb2xvclNwYWNlKTsKICAgICAg
ICAgdHMgPDwgIlxuIiA8PCBpbmRlbnQ7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3N2UyY2YwNWI1Mjc3M2YyYjk2YjQ3MWMuLjUwY2Ni
MGE2ZGE2MGQzMjFlMTQwZGZhZDc0M2RiMDk5YzM5ZTJiZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAt
MjIsMTcgKzIyLDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBbHBoYVByZW11bHRp
cGxpY2F0aW9uLmgiCi0jaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNlLmgiCi0jaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3RF
eHRlbnQuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlICJGaWx0ZXJCb3VuZGFyeVNldC5oIgorI2luY2x1ZGUgIkZpbHRl
ckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdURiB7
CiBjbGFzcyBUZXh0U3RyZWFtOwpAQCAtNDIsMjE3ICszNCw2NCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsKLWNsYXNzIEltYWdlQnVm
ZmVyOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0
VmVjdG9yOwogCi1lbnVtIEZpbHRlckVmZmVjdFR5cGUgewotICAgIEZpbHRlckVmZmVjdFR5cGVV
bmtub3duLAotICAgIEZpbHRlckVmZmVjdFR5cGVJbWFnZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBl
VGlsZSwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQKLX07Ci0KLWNsYXNzIEZpbHRl
ckVmZmVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckVmZmVjdD4geworY2xhc3MgRmlsdGVy
RWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1YmxpYzoKLSAgICBlbnVtIGNsYXNz
IFR5cGUgOiB1aW50OF90IHsKLSAgICAgICAgQmxlbmQsCi0gICAgICAgIENvbG9yTWF0cml4LAot
ICAgICAgICBDb21wb25lbnRUcmFuc2ZlciwKLSAgICAgICAgQ29tcG9zaXRlLAotICAgICAgICBD
b252b2x2ZU1hdHJpeCwKLSAgICAgICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBEaXNwbGFj
ZW1lbnRNYXAsCi0gICAgICAgIERyb3BTaGFkb3csCi0gICAgICAgIEZsb29kLAotICAgICAgICBH
YXVzc2lhbkJsdXIsCi0gICAgICAgIEltYWdlLAotICAgICAgICBMaWdodGluZywKLSAgICAgICAg
TWVyZ2UsCi0gICAgICAgIE1vcnBob2xvZ3ksCi0gICAgICAgIE9mZnNldCwKLSAgICAgICAgU3Bl
Y3VsYXJMaWdodGluZywKLSAgICAgICAgVGlsZSwKLSAgICAgICAgVHVyYnVsZW5jZSwKLSAgICAg
ICAgU291cmNlQWxwaGEsCi0gICAgICAgIFNvdXJjZUdyYXBoaWMKLSAgICB9OwotICAgIHZpcnR1
YWwgfkZpbHRlckVmZmVjdCgpOwotCi0gICAgdm9pZCBjbGVhclJlc3VsdCgpOwotICAgIHZvaWQg
Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHVubXVsdGlwbGllZFJlc3Vs
dChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0g
c3RkOjpudWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxp
ZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgdm9pZCBjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51
bGxvcHQpOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4g
bV9pbnB1dEVmZmVjdHM7IH0KLSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVk
KSBjb25zdDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0
dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZF
ZmZlY3RJbnB1dHMoKSBjb25zdDsKLSAgICAKLSAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVj
aWZpYyBjaGVja3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRl
ckVmZmVjdC4KLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQKLSAgICAgICAgICAg
IHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKLSAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0OwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0IHJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgCi0gICAg
Ly8gUmVjdXJzZXMgb24gaW5wdXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKTsKLQotICAgIC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVy
ZW50IGFscGhhIHZhbHVlcy4KLSAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYWxwaGFJbWFnZTsgfQotICAgIHZvaWQgc2V0SXNBbHBoYUltYWdlKGJvb2wgYWxwaGFJbWFn
ZSkgeyBtX2FscGhhSW1hZ2UgPSBhbHBoYUltYWdlOyB9CisgICAgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQor
ICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdDsKIAot
ICAgIEludFJlY3QgYWJzb2x1dGVQYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRl
UGFpbnRSZWN0OyB9Ci0gICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBJbnRSZWN0
JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRSZWN0ID0gYWJzb2x1dGVQYWlu
dFJlY3Q7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0
IEZpbHRlciYpIGNvbnN0OworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVNYXhQcmltaXRpdmVTdWJy
ZWdpb24oY29uc3QgRmlsdGVyJikgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdDsKKyAgICBJbnRSZWN0IGNhbGN1bGF0ZUFic29sdXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlciYpIGNvbnN0OwogCi0gICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVm
ZmVjdFJlY3Q7IH0gCisgICAgRmlsdGVySW1hZ2UqIGZpbHRlckltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJJbWFnZS5nZXQoKTsgfQorICAgIHZvaWQgY2xlYXJGaWx0ZXJJbWFnZSgpIG92
ZXJyaWRlIHsgbV9maWx0ZXJJbWFnZSA9IG51bGxwdHI7IH0KKyAgICB2b2lkIGNsZWFyRmlsdGVy
SW1hZ2VzUmVjdXJzaXZlKCk7CiAKLSAgICB2b2lkIGFwcGx5KCk7CisgICAgdm9pZCBzZXRCb3Vu
ZGFyeVNldChjb25zdCBGaWx0ZXJCb3VuZGFyeVNldCYgYm91bmRhcnlTZXQpIHsgbV9ib3VuZGFy
eVNldCA9IGJvdW5kYXJ5U2V0OyB9CiAKLSAgICAvLyBDb3JyZWN0IGFueSBpbnZhbGlkIHBpeGVs
cywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVyIG9wZXJhdGlvbi4KLSAg
ICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBwaXhlbCB2YWx1ZXMgb24g
ZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAvLyBPbmx5IHRoZSBhcml0
aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNvcnJlY3Rpb24u
Ci0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIHsgfQorICAg
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRP
cGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFj
ZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9CiAKLSAgICB2aXJ0dWFs
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICAvLyBTb2xpZCBibGFjayBp
bWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCisgICAgdmlydHVhbCBib29sIGlzQWxw
aGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGltYWdlQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bl
cmF0aW5nQ29sb3JTcGFjZTsgfQogCi0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRl
ckVmZmVjdFR5cGUoKSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQor
ICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgPSAw
OwogCi0gICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRP
dXRzZXRzKCk7IH0KKyNpZiBVU0UoQ09SRV9JTUFHRSkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZv
cm1BcHBseUNvcmVJbWFnZShjb25zdCBGaWx0ZXImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
I2VuZGlmCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIGVu
dW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07CiAg
ICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0
T3V0cHV0KSBjb25zdDsKIAotICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBTVkcg
c3BlY2lmaWMgYW5kIHdpbGwgbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZS4KLSAgICAvLyBTZWUgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NTYxNC4KLSAgICBib29sIGhhc1goKSBjb25zdCB7IHJldHVybiBtX2hhc1g7IH0KLSAgICB2
b2lkIHNldEhhc1goYm9vbCB2YWx1ZSkgeyBtX2hhc1ggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBo
YXNZKCkgY29uc3QgeyByZXR1cm4gbV9oYXNZOyB9Ci0gICAgdm9pZCBzZXRIYXNZKGJvb2wgdmFs
dWUpIHsgbV9oYXNZID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2hhc1dpZHRoOyB9Ci0gICAgdm9pZCBzZXRIYXNXaWR0aChib29sIHZhbHVlKSB7IG1f
aGFzV2lkdGggPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBoYXNIZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2hhc0hlaWdodDsgfQotICAgIHZvaWQgc2V0SGFzSGVpZ2h0KGJvb2wgdmFsdWUpIHsgbV9o
YXNIZWlnaHQgPSB2YWx1ZTsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0gICAg
dm9pZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkg
Y29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RC
b3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJv
dW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRVbmNsaXBw
ZWRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xp
cHBlZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAKLSAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVz
ZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0OwotICAgIAotICAgIFR5cGUgZmlsdGVy
RWZmZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7
IH0KLQotICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KLSAgICBjb25z
dCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0KLSAgICBib29s
IGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2
b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1
ZTsgfQotCi0gICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAg
ICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX3Jlc3VsdENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0
Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9y
ZXN1bHRDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2
b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
Jik7Ci0gICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5v
cm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tp
XSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXpl
ZFZhbHVlczsKLSAgICB9Ci0KIHByb3RlY3RlZDoKLSAgICBGaWx0ZXJFZmZlY3QoRmlsdGVyJiwg
VHlwZSk7Ci0gICAgCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3Qg
PSAwOwotCi0gICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
c3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9u
bHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKLSAgICAvLyBh
bHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgot
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIHsgcmV0
dXJuIHRydWU7IH0KLQotICAgIC8vIElmIGEgcHJlLW11bHRpcGxpZWQgaW1hZ2UsIGNoZWNrIGV2
ZXJ5IHBpeGVsIGZvciB2YWxpZGl0eSBhbmQgY29ycmVjdCBpZiBuZWNlc3NhcnkuCi0gICAgdm9p
ZCBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwotCi0gICAgdm9pZCBjbGlwQWJzb2x1
dGVQYWludFJlY3QoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgPSAwOworICAgIEZpbHRlckVmZmVjdChUeXBlKTsKIAotICAgIHZvaWQgY29w
eUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCBjb3B5
Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3Qg
SW50UmVjdCYpOwotICAgIHZvaWQgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlv
bihVaW50OENsYW1wZWRBcnJheSYsIFBpeGVsQnVmZmVyJiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgY29uc3QgSW50UmVjdCYpOwotICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNv
bG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPik7
Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydEltYWdlQnVmZmVyVG9Db2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEltYWdlQnVmZmVyJiwgY29uc3Qg
SW50UmVjdCYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4
ZWxCdWZmZXI+IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBQaXhlbEJ1ZmZlciYpOwotICAgIAotCi0gICAgRmlsdGVyJiBtX2ZpbHRl
cjsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7Ci0KLSAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFJlY3QgbV9h
YnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmls
dGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gaW4g
YWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAvLyBUaGUgYWJzb2x1dGUgcGFpbnQgcmVj
dCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gbV9tYXhFZmZlY3RSZWN0LgotICAgIEZsb2F0
UmVjdCBtX21heEVmZmVjdFJlY3Q7CiAgICAgCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBhIGZp
bHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRpb24g
aW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5kIG5l
ZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAgRmxv
YXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOworICAgIEZpbHRlckJvdW5kYXJ5U2V0
IG1fYm91bmRhcnlTZXQ7CiAKLSAgICAvLyB4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBh
Y3R1YWwgU1ZHRkUqRWxlbWVudC4gSXMgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgc3VicmVnaW9u
IG9mIHRoZQotICAgIC8vIGZpbHRlciBwcmltaXRpdmUgb24gYSBsYXRlciBzdGVwLgotICAgIEZs
b2F0UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7Ci0gICAgCi0gICAgLy8gZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uIG1hcHBlZCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcyBiZWZvcmUgY2xpcHBpbmcu
Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb247CisgICAgUmVmUHRy
PEZpbHRlckltYWdlPiBtX2ZpbHRlckltYWdlOwogCi0gICAgYm9vbCBtX2FscGhhSW1hZ2UgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9oYXNYIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWSB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX2hhc1dpZHRoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzSGVp
Z2h0IHsgZmFsc2UgfTsKLQotICAgIC8vIFNob3VsZCB0aGUgZWZmZWN0IGNsaXAgdG8gaXRzIHBy
aW1pdGl2ZSByZWdpb24sIG9yIGV4cGFuZCB0byB1c2UgdGhlIGNvbWJpbmVkIHJlZ2lvbiBvZiBp
dHMgaW5wdXRzLgotICAgIGJvb2wgbV9jbGlwc1RvQm91bmRzIHsgdHJ1ZSB9OwotCi0jaWYgRU5B
QkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OkxpbmVhclNSR0IoKSB9OwotI2Vsc2UKICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVy
YXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKLSNlbmRp
ZgotICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX3Jlc3VsdENvbG9yU3BhY2UgeyBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotICAgIAotICAgIGNvbnN0IFR5cGUgbV9maWx0ZXJF
ZmZlY3RDbGFzc1R5cGU7CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3QpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNGaWx0ZXJFZmZlY3Qo
KTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZGVmaW5lIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChDbGFzc05hbWUpIFwKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6Q2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmls
dGVyVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlwZTo6Q2xhc3NOYW1lOyB9IFwK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aAppbmRleCA1NmJlMjQ3MzYxZjUzYjNjMDllY2I1NzEzMjJiNzVhNzU3M2U5Y2M0Li44MzcxYWEy
MGYyMGY3NGQwZWZhZTBiNjU2NjhmNDgxMTBkYzE0NmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RS
ZW5kZXJlci5oCkBAIC0zNiwxNyArMzYsMTcgQEAgY2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXIg
ewogICAgIAogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0
UmVuZGVyZXI+IHRyeUNyZWF0ZShib29sLCBGaWx0ZXJFZmZlY3QmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlFZmZlY3RzKGNvbnN0IEZpbHRlciYsIEZpbHRlckVmZmVjdCYpID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW1hZ2VCdWZmZXIqIG91
dHB1dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBG
aWx0ZXJFZmZlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3Qo
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBjbGVhclJlc3VsdCgpID0gMDsKICAgICAKICAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZl
Y3RSZW5kZXJlcigpID0gZGVmYXVsdDsKICAgICAKIHByb3RlY3RlZDoKICAgICBGaWx0ZXJFZmZl
Y3RSZW5kZXJlcigpID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1
ZmZlcihGaWx0ZXJFZmZlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclRvSW1hZ2VC
dWZmZXIoY29uc3QgRmlsdGVyJiwgRmlsdGVyRWZmZWN0JikgPSAwOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZjViYjE1NjM4
MWRlYzFlMGJhYzIyZDkxMTljMmUwZWQ4MGU0YWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKQEAg
LTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKwor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24oVHlwZSBmaWx0ZXJUeXBlKQor
ICAgIDogbV9maWx0ZXJUeXBlKGZpbHRlclR5cGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29u
c3QgYXV0byYgZmlsdGVyTmFtZXMoKQoreworICAgIHVzaW5nIEZpbHRlck5hbWVNYXAgPSBIYXNo
TWFwPEZpbHRlckZ1bmN0aW9uOjpUeXBlLCBBdG9tU3RyaW5nLCBXVEY6OkludEhhc2g8RmlsdGVy
RnVuY3Rpb246OlR5cGU+LCBXVEY6OlN0cm9uZ0VudW1IYXNoVHJhaXRzPEZpbHRlckZ1bmN0aW9u
OjpUeXBlPj47CisKKyAgICBzdGF0aWMgYXV0byBmaWx0ZXJOYW1lcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChbXSB7CisgICAgICAgIEZpbHRlck5hbWVNYXAgZmlsdGVyTmFtZXMgPSB7CisgICAgICAg
ICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsICAgICAgICAgICAiQ1NTRmls
dGVyIl9zICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
U1ZHRmlsdGVyLCAgICAgICAgICAgIlNWR0ZpbHRlciJfcyAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwgICAgICAg
ICAgICAgIkZFQmxlbmQiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgsICAgICAgICJGRUNvbG9yTWF0cml4Il9zICAgICAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyLCAiRkVDb21wb25lbnRUcmFuc2ZlciJfcyB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVDb21wb3NpdGUsICAgICAgICAgIkZFQ29tcG9zaXRlIl9zICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgs
ICAgICJGRUNvbnZvbHZlTWF0cml4Il9zICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywgICAiRkVEaWZmdXNlTGlnaHRpbmciX3MgICB9
LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAs
ICAgIkZFRGlzcGxhY2VtZW50TWFwIl9zICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFRHJvcFNoYWRvdywgICAgICAgICJGRURyb3BTaGFkb3ciX3MgICAgICAgIH0s
CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLCAgICAgICAgICAg
ICAiRkVGbG9vZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsICAgICAgIkZFR2F1c3NpYW5CbHVyIl9zICAgICAgfSwK
KyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsICAgICAgICAgICAg
ICJGRUltYWdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRU1lcmdlLCAgICAgICAgICAgICAiRkVNZXJnZSJfcyAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LCAgICAgICAg
IkZFTW9ycGhvbG9neSJfcyAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFT2Zmc2V0LCAgICAgICAgICAgICJGRU9mZnNldCJfcyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsICAi
RkVTcGVjdWxhckxpZ2h0aW5nIl9zICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVUaWxlLCAgICAgICAgICAgICAgIkZFVGlsZSJfcyAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZSwgICAgICAgICJG
RVR1cmJ1bGVuY2UiX3MgICAgICAgIH0sCisKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OlNvdXJjZUFscGhhLCAgICAgICAgICJTb3VyY2VBbHBoYSJfcyAgICAgICAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljLCAgICAgICAi
U291cmNlR3JhcGhpYyJfcyAgICAgICB9CisKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIGZp
bHRlck5hbWVzOworICAgIH0oKSk7CisgICAgCisgICAgcmV0dXJuIGZpbHRlck5hbWVzLmdldCgp
OworfQorCitjb25zdCBBdG9tU3RyaW5nJiBGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZShUeXBl
IGZpbHRlclR5cGUpCit7CisgICAgYXV0byBpdCA9IGZpbHRlck5hbWVzKCkuZmluZChmaWx0ZXJU
eXBlKTsKKyAgICBBU1NFUlQoaXQgIT0gZmlsdGVyTmFtZXMoKS5lbmQoKSk7CisgICAgcmV0dXJu
IGl0LT52YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIwNjU4Y2JhMDljYTFmMGM3YjQ3NDQ3NDllODAxODFlN2MxODU0OGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
VEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGaWx0ZXI7CisKK2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Rmls
dGVyRnVuY3Rpb24+IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsK
KyAgICAgICAgQ1NTRmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisKKyAgICAgICAgRkVNaW5p
bXVtLAorCisgICAgICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAgICAgIEZFQ29sb3JNYXRy
aXgsCisgICAgICAgIEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAgIEZFQ29tcG9zaXRlLAor
ICAgICAgICBGRUNvbnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1c2VMaWdodGluZywKKyAg
ICAgICAgRkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNoYWRvdywKKyAgICAgICAg
RkVGbG9vZCwKKyAgICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAgIEZFSW1hZ2UsCisgICAg
ICAgIEZFTWVyZ2UsCisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAgICAgRkVPZmZzZXQsCisg
ICAgICAgIEZFU3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxlLAorICAgICAgICBGRVR1
cmJ1bGVuY2UsCisgICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBTb3VyY2VHcmFwaGljLAor
CisgICAgICAgIEZFTWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9OworCisgICAgRmlsdGVy
RnVuY3Rpb24oVHlwZSk7CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7
CisKKyAgICBUeXBlIGZpbHRlclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGU7IH0K
KworICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGUgPT0g
VHlwZTo6Q1NTRmlsdGVyOyB9CisgICAgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmlsdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6OkNTU0ZpbHRlciB8fCBtX2ZpbHRl
clR5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRlckVmZmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA+PSBUeXBlOjpGRU1pbmltdW0gJiYgbV9maWx0ZXJU
eXBlIDw9IFR5cGU6OkZFTWF4aW11bTsgfQorCisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcm
IGZpbHRlck5hbWUoVHlwZSk7CisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUFs
cGhhTmFtZSgpIHsgcmV0dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNlQWxwaGEpOyB9CisgICAg
c3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4gZmls
dGVyTmFtZShUeXBlOjpTb3VyY2VHcmFwaGljKTsgfQorICAgIGNvbnN0IEF0b21TdHJpbmcmIGZp
bHRlck5hbWUoKSBjb25zdCB7IHJldHVybiBmaWx0ZXJOYW1lKG1fZmlsdGVyVHlwZSk7IH0KKwor
ICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4geyB9OyB9Cisg
ICAgdmlydHVhbCBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyRmlsdGVySW1hZ2UoKSB7IH0KKworcHJpdmF0ZToKKyAgICBU
eXBlIG1fZmlsdGVyVHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNw
YWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZSwKKworICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6Q1NTRmlsdGVyLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6U1ZHRmlsdGVyLAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRUJsZW5kLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVDb2xvck1hdHJpeCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Q29tcG9uZW50VHJhbnNmZXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpGRUNvbXBvc2l0ZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
Q29udm9sdmVNYXRyaXgsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RURpZmZ1c2VMaWdodGluZywKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OkZFRGlzcGxhY2VtZW50TWFwLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVEcm9wU2hhZG93LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVGbG9vZCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFR2F1c3Np
YW5CbHVyLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZSwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWVyZ2UsCisgICAgICAg
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3ksCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU9mZnNldCwKKyAgICAgICAgV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZywKKyAgICAgICAgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFVGlsZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFVHVyYnVsZW5jZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OlNvdXJjZUFscGhhLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6U291cmNlR3JhcGhpYworICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWM3MGE0OGUxMGU2NDEzYWVmNjlhNTA2Y2ExMWI5
NDU0YTY1YTkxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCkBAIC0wLDAgKzEsMzk0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgor
CisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgPGFybV9uZW9uLmg+Cisj
ZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxl
cmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEZpbHRlcklt
YWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJ
bWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbHRlckltYWdlKHByaW1pdGl2ZVN1YnJlZ2lv
biwgaW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdlUmVjdCwgaXNBbHBoYUltYWdlLCByZW5kZXJpbmdN
b2RlLCBjb2xvclNwYWNlKSk7Cit9CisKK0ZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UpCisgICAgOiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24p
CisgICAgLCBtX2ltYWdlUmVjdChpbWFnZVJlY3QpCisgICAgLCBtX2Fic29sdXRlSW1hZ2VSZWN0
KGFic29sdXRlSW1hZ2VSZWN0KQorICAgICwgbV9pc0FscGhhSW1hZ2UoaXNBbHBoYUltYWdlKQor
ICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCisgICAgLCBtX2NvbG9yU3BhY2Uo
Y29sb3JTcGFjZSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIEZpbHRlckltYWdlOjppbWFnZUJ1ZmZl
cigpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVyLmdldCgpOworCisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9h
YnNvbHV0ZUltYWdlUmVjdC5zaXplKCksIG1fcmVuZGVyaW5nTW9kZSwgMSwgbV9jb2xvclNwYWNl
LCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0IHJlY3QgeyB7IH0sIG1fYWJzb2x1dGVJbWFn
ZVJlY3Quc2l6ZSgpIH07CisKKyAgICBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFnZUJ1ZmZlci0+cHV0
UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCksIHJlY3QpOworICAgIGVsc2UgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAgICAgbV9pbWFn
ZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisKKyAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlci5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEUp
CisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OworCisgICAgdklt
YWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAg
c3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMucm93Qnl0ZXMgPSByb3dC
eXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRh
KCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qud2lkdGggPSBpbnB1dFNp
emUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBk
ZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJbWFnZVByZW11bHRpcGx5RGF0
YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBjb25z
dCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOworICAgIGNvbnN0IHVp
bnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnB1
dFNpemUuYXJlYSgpICogNCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25Db21wb25lbnQgPSBk
ZXN0aW5hdGlvbi5kYXRhKCk7CisKKyAgICB3aGlsZSAoc291cmNlQ29tcG9uZW50IDwgZW5kKSB7
CisgICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsKKyAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnRbMF0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkg
KiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNf
Y2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsxXSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVz
dGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFsy
XSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBo
YTsKKyAgICAgICAgc291cmNlQ29tcG9uZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29t
cG9uZW50ICs9IDQ7CisgICAgfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1dFNpemUpCit7CisjaWYg
VVNFKEFDQ0VMRVJBVEUpCisgICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkg
KiA0OworCisgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgc3JjLndpZHRoID0gaW5wdXRTaXpl
LndpZHRoKCk7CisgICAgc3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKKyAgICBzcmMu
cm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHNvdXJjZS5kYXRhKCkpOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3Qu
d2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5o
ZWlnaHQoKTsKKyAgICBkZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7CisgICAgZGVzdC5kYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKKworICAgIHZJbWFn
ZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRh
KCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGlucHV0U2l6ZS5hcmVhKCkgKiA0KTsKKyAgICB1aW50OF90KiBkZXN0aW5h
dGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKyAgICB3aGlsZSAoc291cmNlQ29t
cG9uZW50IDwgZW5kKSB7CisgICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFszXTsK
KyAgICAgICAgaWYgKGFscGhhKSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsw
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhhOwor
ICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+KHNv
dXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICogMjU1
IC8gYWxwaGE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFswXSA9IDA7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKKyAgICAgICAgc291cmNlQ29tcG9u
ZW50ICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7CisgICAgfQorI2Vu
ZGlmCit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJJbWFnZTo6cGl4ZWxC
dWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0KQoreworICAg
IHJldHVybiBhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQgPyBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyIDogbV9wcmVtdWx0aXBsaWVkUGl4
ZWxCdWZmZXI7Cit9CisKK1BpeGVsQnVmZmVyKiBGaWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXIoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICBhdXRvJiBwaXhlbEJ1ZmZl
ciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpOworICAgIGlmIChwaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworCisgICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9jb2xv
clNwYWNlIH07CisKKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlz
dHMoKSkgeworICAgICAgICBwaXhlbEJ1ZmZlciA9IGltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1ZmZl
cihmb3JtYXQsIHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSB9KTsKKyAgICAgICAg
aWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIEludFNpemUgbG9n
aWNhbFNpemUobV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGxvZ2ljYWxTaXplKSk7CisKKyAgICBwaXhlbEJ1ZmZl
ciA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCBsb2dpY2FsU2l6ZSk7CisgICAgaWYg
KCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoYWxwaGFG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAg
ICAgIGlmIChhdXRvJiBzb3VyY2VQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgICAgICBjb3B5VW5w
cmVtdWx0aXBseWluZ0FscGhhKHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCksIHBpeGVsQnVmZmVy
LT5kYXRhKCksIGxvZ2ljYWxTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXV0byYg
c291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdB
bHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBsb2dp
Y2FsU2l6ZSk7CisgICAgfQorCisgICAgcmV0dXJuICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworfQor
CitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBz
dGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sKKyAgICBJ
bnRTaXplIHNpemUocmVjdC5zaXplKCkpOworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHNpemUpKTsKKworICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzaXplLmFyZWE8
UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2Vk
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gcGl4ZWxCdWZmZXIg
PSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7
CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBj
b3B5UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgY29sb3JTcGFj
ZSk7CisgICAgcmV0dXJuIHBpeGVsQnVmZmVyOworfQorCitib29sIEZpbHRlckltYWdlOjpyZXF1
aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIC8v
IFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIHdlIG5lZWQgdGhlIHN0ZXAgb2YgYW4g
ZXh0cmEgY29sb3Igc3BhY2UgY29udmVyc2lvbgorICAgIC8vIFdlIG9ubHkgbmVlZCBleHRyYSBj
b2xvciBjb252ZXJzaW9uIHdoZW4gMSkgY29sb3Igc3BhY2UgaXMgZGlmZmVyZW50IGluIHRoZSBp
bnB1dAorICAgIC8vIEFORCAyKSB0aGUgZmlsdGVyIGlzIG1hbmlwdWxhdGluZyByYXcgcGl4ZWxz
CisgICAgcmV0dXJuIGNvbG9yU3BhY2UgJiYgbV9jb2xvclNwYWNlICE9ICpjb2xvclNwYWNlOwor
I2Vsc2UKKyAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90IG5l
ZWRlZCBvbiBub24tQ0cKKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlJbWFnZUJ5dGVzKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGxvZ2ljYWxT
aXplKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKworICAgIC8vIEluaXRpYWxpemUgdGhl
IGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292ZXJl
ZCBieSB0aGUgc291cmNlLgorICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8
IHJlY3QubWF4WCgpID4gbG9naWNhbFNpemUud2lkdGgoKSB8fCByZWN0Lm1heFkoKSA+IGxvZ2lj
YWxTaXplLmhlaWdodCgpKQorICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0YSgpLCAwLCBk
ZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisKKyAgICAvLyBFYXJseSByZXR1cm4gaWYgdGhlIHJlY3Qg
ZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggdGhlIHNvdXJjZS4KKyAgICBpZiAocmVjdC5tYXhYKCkg
PD0gMCB8fCByZWN0Lm1heFkoKSA8PSAwIHx8IHJlY3QueCgpID49IGxvZ2ljYWxTaXplLndpZHRo
KCkgfHwgcmVjdC55KCkgPj0gbG9naWNhbFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGludCB4T3JpZ2luID0gcmVjdC54KCk7CisgICAgaW50IHhEZXN0ID0gMDsKKyAgICBp
ZiAoeE9yaWdpbiA8IDApIHsKKyAgICAgICAgeERlc3QgPSAteE9yaWdpbjsKKyAgICAgICAgeE9y
aWdpbiA9IDA7CisgICAgfQorICAgIGludCB4RW5kID0gcmVjdC5tYXhYKCk7CisgICAgaWYgKHhF
bmQgPiBsb2dpY2FsU2l6ZS53aWR0aCgpKQorICAgICAgICB4RW5kID0gbG9naWNhbFNpemUud2lk
dGgoKTsKKworICAgIGludCB5T3JpZ2luID0gcmVjdC55KCk7CisgICAgaW50IHlEZXN0ID0gMDsK
KyAgICBpZiAoeU9yaWdpbiA8IDApIHsKKyAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKKyAgICAg
ICAgeU9yaWdpbiA9IDA7CisgICAgfQorICAgIGludCB5RW5kID0gcmVjdC5tYXhZKCk7CisgICAg
aWYgKHlFbmQgPiBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgeUVuZCA9IGxvZ2ljYWxT
aXplLmhlaWdodCgpOworCisgICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKKyAg
ICBpbnQgZGVzdGluYXRpb25TY2FubGluZSA9IHJlY3Qud2lkdGgoKSAqIDQ7CisgICAgaW50IHNv
dXJjZVNjYW5saW5lID0gbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgdWludDhfdCogZGVz
dGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiByZWN0LndpZHRo
KCkpICsgeERlc3QpICogNDsKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9IHNvdXJj
ZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBsb2dpY2FsU2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICog
NDsKKworICAgIHdoaWxlICh5T3JpZ2luIDwgeUVuZCkgeworICAgICAgICBtZW1jcHkoZGVzdGlu
YXRpb25QaXhlbCwgc291cmNlUGl4ZWwsIHNpemUpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVs
ICs9IGRlc3RpbmF0aW9uU2NhbmxpbmU7CisgICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNj
YW5saW5lOworICAgICAgICArK3lPcmlnaW47CisgICAgfQorfQorCitzdGQ6Om9wdGlvbmFsPFBp
eGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QK
K3sKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpOworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB3aXRoIHRoZSBjb3Jy
ZWN0IGNvbG9yIHNwYWNlIGFuZCB1dGlsaXplIENHIHRvIGhhbmRsZSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uCisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIGNvbG9yU3Bh
Y2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFjb252ZXJ0ZWRJbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJz
aW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVy
IHRvIGFub3RoZXIKKyAgICBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgcmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgY29sb3JTcGFjZSB9OworICAgIHJl
dHVybiBjb252ZXJ0ZWRJbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsK
K30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVySW1hZ2U6OmdldENvbnZlcnRl
ZFBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBhbHBoYUZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0
Cit7CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7Cisg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Qu
c2l6ZSgpKTsKKworICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWlu
ZyBQaXhlbEJ1ZmZlcgorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBtX2NvbG9yU3Bh
Y2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihw
aXhlbEJ1ZmZlciwgcmVjdCk7CisgICAgcmV0dXJuIGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOworfQorCit2b2lkIEZp
bHRlckltYWdlOjpjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkKK3sK
KyAgICBhdXRvKiBwaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQp
ID8gJnBpeGVsQnVmZmVySWZFeGlzdHMoYWxwaGFGb3JtYXQpLnZhbHVlKCkgOiBudWxscHRyOwor
CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikgeworICAgICAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZl
ckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7CisgICAgICAgICAgICAvLyBXZSBw
cmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KKyAgICAgICAgICAgIGlm
IChhdXRvIGltYWdlQnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgICAg
ICAgICAgSW50UmVjdCByZWN0IHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSB9Owor
ICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVy
dGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwgKmNvbG9yU3Bh
Y2UpKQorICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQaXhlbEJ1
ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSB0
aGlzLT5waXhlbEJ1ZmZlcihhbHBoYUZvcm1hdCk7CisgICAgfQorCisgICAgaWYgKCFwaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICBpZiAoYXV0byBjb252ZXJ0
ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxw
aGFGb3JtYXQsICpjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZl
cnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZUJ5dGVzKHBpeGVsQnVmZmVyLT5kYXRhKCks
IGRlc3RpbmF0aW9uLCBzcmNSZWN0KTsKK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6Y29ycmVjdFBy
ZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpCit7CisgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1t
dWx0aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhl
bHMuCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgVWludDhDbGFtcGVkQXJyYXkmIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRQ
aXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXku
ZGF0YSgpOworICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS5sZW5ndGgoKTsK
KworICAgIC8vIFdlIG11c3QgaGF2ZSBmb3VyIGJ5dGVzIHBlciBwaXhlbCwgYW5kIGNvbXBsZXRl
IHBpeGVscworICAgIEFTU0VSVCghKHBpeGVsQXJyYXlMZW5ndGggJSA0KSk7CisKKyNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgaWYgKHBpeGVsQXJyYXlMZW5ndGggPj0gNjQpIHsK
KyAgICAgICAgdWludDhfdCogbGFzdFBpeGVsID0gcGl4ZWxEYXRhICsgKHBpeGVsQXJyYXlMZW5n
dGggJiB+MHgzZik7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudHMgcGl4
ZWxEYXRhIGJ5IDY0LgorICAgICAgICAgICAgdWludDh4MTZ4NF90IHNpeHRlZW5QaXhlbHMgPSB2
bGQ0cV91OChwaXhlbERhdGEpOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMF0gPSB2
bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFswXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAg
ICAgICAgICAgc2l4dGVlblBpeGVscy52YWxbMV0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZh
bFsxXSwgc2l4dGVlblBpeGVscy52YWxbM10pOworICAgICAgICAgICAgc2l4dGVlblBpeGVscy52
YWxbMl0gPSB2bWlucV91OChzaXh0ZWVuUGl4ZWxzLnZhbFsyXSwgc2l4dGVlblBpeGVscy52YWxb
M10pOworICAgICAgICAgICAgdnN0NHFfdTgocGl4ZWxEYXRhLCBzaXh0ZWVuUGl4ZWxzKTsKKyAg
ICAgICAgICAgIHBpeGVsRGF0YSArPSA2NDsKKyAgICAgICAgfSB3aGlsZSAocGl4ZWxEYXRhIDwg
bGFzdFBpeGVsKTsKKworICAgICAgICBwaXhlbEFycmF5TGVuZ3RoICY9IDB4M2Y7CisgICAgICAg
IGlmICghcGl4ZWxBcnJheUxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKworICAgIGludCBudW1QaXhlbHMgPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsKKworICAgIC8v
IEl0ZXJhdGUgb3ZlciBlYWNoIHBpeGVsLCBjaGVja2luZyBhbHBoYSBhbmQgYWRqdXN0aW5nIGNv
bG9yIGNvbXBvbmVudHMgaWYgbmVjZXNzYXJ5CisgICAgd2hpbGUgKC0tbnVtUGl4ZWxzID49IDAp
IHsKKyAgICAgICAgLy8gQWxwaGEgaXMgdGhlIDR0aCBieXRlIGluIGEgcGl4ZWwKKyAgICAgICAg
dWludDhfdCBhID0gKihwaXhlbERhdGEgKyAzKTsKKyAgICAgICAgLy8gQ2xhbXAgZWFjaCBjb21w
b25lbnQgdG8gYWxwaGEsIGFuZCBpbmNyZW1lbnQgdGhlIHBpeGVsIGxvY2F0aW9uCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBpZiAoKnBpeGVsRGF0
YSA+IGEpCisgICAgICAgICAgICAgICAgKnBpeGVsRGF0YSA9IGE7CisgICAgICAgICAgICArK3Bp
eGVsRGF0YTsKKyAgICAgICAgfQorICAgICAgICAvLyBJbmNyZW1lbnQgZm9yIGFscGhhCisgICAg
ICAgICsrcGl4ZWxEYXRhOworICAgIH0KK30KKwordm9pZCBGaWx0ZXJJbWFnZTo6dHJhbnNmb3Jt
VG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworI2lmIFVT
RShDRykKKyAgICAvLyBDRyBoYW5kbGVzIGNvbG9yIHNwYWNlIGFkanVzdG1lbnRzIGludGVybmFs
bHkuCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworI2Vsc2UKKyAgICBpZiAoY29sb3JT
cGFjZSA9PSBtX2NvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBX
ZSBjYW4gYXZvaWQgdGhpcyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252
ZXJzaW9uIGJ5IGFkZGluZworICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZv
ciB0aGUge3ByZSx1bn1tdWx0aXBsaWVkIGFycmF5cy4KKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZl
ciA9IHRoaXMtPmltYWdlQnVmZmVyKCkpCisgICAgICAgIGltYWdlQnVmZmVyLT50cmFuc2Zvcm1U
b0NvbG9yU3BhY2UoY29sb3JTcGFjZSk7CisKKyAgICBtX2NvbG9yU3BhY2UgPSBjb2xvclNwYWNl
OworICAgIG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisgICAg
bV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIgPSBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiYThlNzZmMDQ5
ZmYyNGZhNWY4NDUwYmFhNDc2NWU2MDAyODNhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKQEAgLTAsMCAr
MSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBQaXhlbEJ1ZmZlcjsKKworY2xh
c3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4geworcHVibGlj
OgorICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9k
ZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBGbG9hdFJlY3QgcHJpbWl0
aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmltaXRpdmVTdWJyZWdpb247IH0KKyAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZVJlY3Q7IH0KKyAg
ICBJbnRSZWN0IGFic29sdXRlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUlt
YWdlUmVjdDsgfQorICAgIEludFJlY3QgcmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChjb25zdCBG
aWx0ZXJJbWFnZSYgb3JpZ2luKSBjb25zdCB7IHJldHVybiBtX2Fic29sdXRlSW1hZ2VSZWN0IC0g
b3JpZ2luLmFic29sdXRlSW1hZ2VSZWN0KCkubG9jYXRpb24oKTsgfQorCisgICAgYm9vbCBpc0Fs
cGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lzQWxwaGFJbWFnZTsgfQorICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQor
ICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZm
ZXJJZkV4aXN0cygpIHsgcmV0dXJuIG1faW1hZ2VCdWZmZXI7IH0KKyAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIoKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBwaXhlbEJ1
ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworICAgIFBpeGVsQnVmZmVyKiBw
aXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3Qg
SW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVs
bG9wdCk7CisgICAgdm9pZCBjb3B5UGl4ZWxCdWZmZXIoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRp
b25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICAKKyAgICB2
b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsKKyAgICB2b2lkIHRyYW5zZm9y
bVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UpOworCitwcml2YXRlOgorICAgIEZp
bHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wg
aXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
KTsKKworICAgIGJvb2wgcmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPikgY29uc3Q7CisgICAgdm9pZCBjb3B5
SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRB
cnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKFBpeGVsQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgRGVzdGluYXRp
b25Db2xvclNwYWNlKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBtX3ByaW1pdGl2ZVN1YnJlZ2lv
bjsKKyAgICBGbG9hdFJlY3QgbV9pbWFnZVJlY3Q7CisgICAgSW50UmVjdCBtX2Fic29sdXRlSW1h
Z2VSZWN0OworICAgIAorICAgIGJvb2wgbV9pc0FscGhhSW1hZ2UgeyBmYWxzZSB9OworICAgIFJl
bmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOworICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBt
X2NvbG9yU3BhY2U7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Cisg
ICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZl
cjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAppbmRleCA5NGQx
OTUwMTM5ZDZkMjQzYTg2NjFlNWVhNTVkMjM1YTczODlmNWQ1Li5mMTkxNzFmZjg0ZTkwNDkyNzI2
MmVhZDExYWM0MWUwODNjNThlZmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCkBAIC0zOCw2ICszOCw3IEBAIGVu
dW0gTGlnaHRUeXBlIHsKICAgICBMU19TUE9UCiB9OwogCitjbGFzcyBGaWx0ZXI7CiBjbGFzcyBG
aWx0ZXJFZmZlY3Q7CiAKIGNsYXNzIExpZ2h0U291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8TGln
aHRTb3VyY2U+IHsKQEAgLTY1LDcgKzY2LDcgQEAgcHVibGljOgogICAgIExpZ2h0VHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwogCi0g
ICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFp
bnRpbmdEYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0
IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpID0gMDsKICAgICAv
LyB6IGlzIGEgZmxvYXQgbnVtYmVyLCBzaW5jZSBpdCBpcyB0aGUgYWxwaGEgdmFsdWUgc2NhbGVk
IGJ5IGEgdXNlcgogICAgIC8vIHNwZWNpZmllZCAic3VyZmFjZVNjYWxlIiBjb25zdGFudCwgd2hp
Y2ggdHlwZSBpcyA8bnVtYmVyPiBpbiB0aGUgU1ZHIHN0YW5kYXJkLgogICAgIC8vIHggYW5kIHkg
YXJlIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgRmlsdGVyRWZmZWN0J3MgYnVmZmVyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
UG9pbnRMaWdodFNvdXJjZS5jcHAKaW5kZXggMWFiNWUxOWUxMWE0ZjM2ZWEyYTQyNmE3NTAzODc5
MTI4ZjU0YjQ0Yi4uZTliM2U1MzFjYjU5NGU1NWE4YjllZjA1MzNlNDM0Zjc1OTU1MmI4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCkBAIC0zNiwxMSArMzYsMTUgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29u
c3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCit2b2lkIFBvaW50
TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKQogewotICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVm
ZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOworICAgIGF1dG8mIGltYWdlID0gKmZpbHRl
ckVmZmVjdC5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW1hZ2UuaW1hZ2VS
ZWN0KCk7CisgICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBpbWFnZS5wcmltaXRpdmVTdWJy
ZWdpb24oKTsKKworICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyLm1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSwgaW1hZ2VSZWN0LCBw
cmltaXRpdmVTdWJyZWdpb24pKTsKICAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZz
ZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgotICAg
IEZsb2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VU
b0J1ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56
KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0pOworICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9
IGZpbHRlci5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRp
b24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgp
IH0sIGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKICAgICBtX2J1ZmZlclBvc2l0aW9u
LnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmgKaW5kZXggNjdhM2EwYmQzOWE4YTljYzE5NTQzNDk4NTk2ZDcxMTVmNGJiOTVh
NS4uYWRlYmY5NmFhMzEyN2VlNDVlZmE4NzA5M2QzMmRlZGMxYmFjN2E1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0WShmbG9h
dCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRaKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQg
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdodGlu
Z0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4
LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuY3BwCmluZGV4IDc2NDlmMDU4YWM4NjliNTU0YWYwZGM1MDdmZmY5MDkwYWQ2Y2Yz
YTMuLjZlYjYxOGM3M2FjOWYyYTMyOTNkYWI0NjJhODkzNjlkNDM1MTM4MzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxw
aGEuY3BwCkBAIC0yMywxMCArMjMsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNSwzMiArMzIsMzcgQEAgUmVmPFNvdXJjZUFs
cGhhPiBTb3VyY2VBbHBoYTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUFscGhhKHNvdXJjZUVmZmVjdCkpOwogfQogCi1j
b25zdCBBdG9tU3RyaW5nJiBTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpCitTb3VyY2VBbHBoYTo6
U291cmNlQWxwaGEoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCisgICAgOiBGaWx0ZXJFZmZl
Y3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMgTWFpblRo
cmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNl
QWxwaGEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNf
ZWZmZWN0TmFtZTsKKyAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKHNvdXJjZUVmZmVjdC5vcGVy
YXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlucHV0RWZmZWN0cygpLmFwcGVuZCgmc291cmNlRWZm
ZWN0KTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KQorRmxvYXRSZWN0IFNvdXJjZUFscGhhOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVm
ZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRF
ZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgcmV0dXJuIGlucHV0LmltYWdlUmVjdCgpOwog
fQogCi12b2lkIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBTb3Vy
Y2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7Ci0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBm
aWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBhdXRvJiBpbnB1dCA9
ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmls
dGVySW1hZ2UoKTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0
KDApLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAg
IGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRSZWN0
IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAg
ICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrKTsKLSAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEludFBvaW50KCksIENv
bXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKyAgICBhdXRvIG91dHB1dEltYWdlID0g
b3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIG91dHB1
dC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKSk7CisKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4
dCgpLmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrKTsKKyAgICBvdXRwdXRJbWFnZS0+
Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgSW50UG9pbnQoKSwgQ29tcG9z
aXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0
U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdApAQCAtNjksMTEgKzcxLDQgQEAgVGV4dFN0cmVh
bSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VB
bHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3Vy
Y2VFZmZlY3QuZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGlu
Z0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5w
dXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0
YTM5NDkwZi4uOTRmYTU2ZjUyYjg0NmU2M2FhZDI5ZWE0ZDZmNTE5OGZiZDAwMTg2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
QWxwaGEuaApAQCAtMTcsOCArMTcsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKQEAgLTI4LDE5ICsyNywx
NiBAQCBjbGFzcyBTb3VyY2VBbHBoYSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOiAg
ICAgICAgCiAgICAgc3RhdGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKEZpbHRlckVmZmVjdCYp
OwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKTsKKyAgICBzdGF0
aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpIHsgcmV0dXJuIEZpbHRlckVmZmVjdDo6
c291cmNlQWxwaGFOYW1lKCk7IH0KIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTb3VyY2VBbHBo
YShGaWx0ZXJFZmZlY3QmKTsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQ7IH0K
IAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291
cmNlQWxwaGEiOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gU291cmNlQWxwaGFfaAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZG
RUNUKFNvdXJjZUFscGhhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggODhhMzZhNDEwMjZiZDNh
NTg1NDQ3ODIwMjc0YzExMDdkNzgzOTJlOS4uNDUyZTY0NzRmZGNlZWE5MzFkYmI5OGZmYjViYjA2
YTlkZDgzZGNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0yMiw0MiArMjIsMzkgQEAKIAog
I2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNv
dXJjZUdyYXBoaWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBT
b3VyY2VHcmFwaGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJj
ZUdyYXBoaWMoZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhp
YygpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgp
CitTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBl
OjpTb3VyY2VHcmFwaGljKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VHcmFwaGljIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAK
LXZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRS
ZWN0IFNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMt
PmZpbHRlcigpOwotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIuc291cmNlSW1hZ2VS
ZWN0KCk7Ci0gICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lk
dGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1cm4gZmls
dGVyLnNvdXJjZUltYWdlUmVjdCgpOwogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCitib29sIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZp
bHRlcigpOworICAgIGF1dG8qIG91dHB1dCA9IGZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghcmVz
dWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47CisgICAgYXV0byogc291
cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIGF1dG8qIG91dHB1dElt
YWdlID0gb3V0cHV0LT5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIHJldHVybiB0cnVlOwog
fQogCiBUZXh0U3RyZWFtJiBTb3VyY2VHcmFwaGljOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmlu
ZGV4IDMwY2Q1NGYyNDUzYmJhOGEzNzc2MzIxMzI4ZWYyMTA2YjdmY2E1YmYuLmIxYzEzYjFjOThm
Mjc4MmM1M2JkN2Y1YTNlODliNTM3Yzk2MDdjOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCkBAIC0xOCw0
MSArMTgsMjYgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgU291cmNlR3JhcGhpY19oCi0jZGVmaW5lIFNvdXJjZUdyYXBoaWNfaAorI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VHcmFwaGljIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBoaWM+IGNy
ZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBoaWM+IGNyZWF0ZSgpOwog
Ci0gICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKTsKKyAgICBzdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpIHsgcmV0dXJuIEZpbHRlckVmZmVjdDo6c291
cmNlR3JhcGhpY05hbWUoKTsgfQogCiBwcml2YXRlOgotICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVy
JiBmaWx0ZXIpCi0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291cmNlR3Jh
cGhpYykKLSAgICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkpOwotICAgIH0KKyAgICBTb3VyY2VHcmFwaGljKCk7CiAKLSAgICBj
b25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdyYXBo
aWMiOyB9Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsg
fQogfTsKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6U291cmNlR3JhcGhpYykKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJF
ZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdy
YXBoaWM7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotCi0jZW5kaWYgLy8gU291
cmNlR3JhcGhpY19oCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoU291cmNl
R3JhcGhpYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAppbmRleCA3MTYwN2FiMDBmZjlkNmE2ZDAx
NjkxZDliYmI4NTUzZDFmMzQ4ZDAwLi42NTdiMThkNjg4ZWNjYjE1MmJkMDIwYWE2NmE1OTcyNDU3
YTA4ZDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCkBAIC00MSwxMSArNDEsMTUgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogLy8gYWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJl
Z3Jlc3Npb24gdGVzdHMKIHN0YXRpYyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAu
MDE2ZjsKIAotdm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmls
dGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQordm9p
ZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSkKIHsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2lu
dEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKKyAgICBh
dXRvJiBpbWFnZSA9ICpmaWx0ZXJFZmZlY3QuZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvIGltYWdl
UmVjdCA9IGltYWdlLmltYWdlUmVjdCgpOworICAgIGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0g
aW1hZ2UucHJpbWl0aXZlU3VicmVnaW9uKCk7CisgICAgCisgICAgbV9idWZmZXJQb3NpdGlvbi5z
ZXRYWShmaWx0ZXIubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3Np
dGlvbi54eSgpLCBpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbikpOwogICAgIC8vIFRvIHNj
YWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhl
IHggZGlyZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0
Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkg
KyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7Cisg
ICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyLm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVm
ZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwg
bV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSwgaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24p
OwogICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRp
b24ueCgpKTsKICAgICAKICAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yID0gbV91c2Vy
U3BhY2VQb2ludHNBdCAtIG1fdXNlclNwYWNlUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaApp
bmRleCAzNTE1MTYzNTA3N2VlZjBlNzNjMjZhZTQ0MmE1ZWE1MzRmZDFmM2JmLi5mZTNmMmYzZmM5
YjU4OGFiZjQyOGJlOWRlNmYzNjc5MTM2YjkzYmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKQEAg
LTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9h
dCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRMaW1pdGluZ0NvbmVBbmdsZShmbG9hdCkgb3ZlcnJp
ZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFp
bnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOwogICAg
IENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWlu
dGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VDb2NvYS5jcHAKaW5kZXggOWFlYTVmMWMwNzJjMDliZjA2M2Y0OTk5ZTAzYjIxOWU4NWQ3ZTJk
OS4uZDY3YjI5YjUxYzc5MWU1MjE1ZWI5ODk3NWZkOWNlYjZhYzRmYzA3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkNB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvRm9ybWF0
LmgiCisjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4K
ICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmNwcAppbmRleCA5ZDZjMmNkZDA1Zjk0OWI2MzRjYWZhMTdhYzE3ZGI1YzAyYjViNjExLi41
MDI5NzBiYjBiZmNmYjlmZWU5MjZkMTYwYzAxNDE2ODNhMWM1NjVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcApAQCAtMjcsOSArMjcsNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUg
IkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRl
ICJGRUNvbXBvbmVudFRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCkBAIC0z
OCw0NSArMzUsMTg1IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVmZXJlbmNlZFNWR1Jlc291cmNlcy5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUg
IlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1
ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVk
ZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8
YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpZiBVU0UoRElSRUNU
MkQpCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UmVmPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoKQorUmVmUHRyPENTU0ZpbHRlcj4gQ1NT
RmlsdGVyOjpjcmVhdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgc2Nh
bGVGYWN0b3IsIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBDU1NGaWx0ZXIpOworICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
ID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKKyAgICBib29sIGhhc0Zp
bHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5o
YXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworCisgICAg
YXV0byBmaWx0ZXIgPSBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcihoYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMsIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luLCBz
Y2FsZUZhY3RvciwgY2xpcE9wZXJhdGlvbikpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRmls
dGVyRnVuY3Rpb25zKHJlbmRlcmVyLCBvcGVyYXRpb25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBmaWx0ZXItPnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CisgICAg
cmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVy
KEZsb2F0U2l6ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoKnRoaXMpKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJp
dHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24p
CisgICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpDU1NGaWx0ZXIsIEZsb2F0U2l6ZSB7IHNjYWxl
RmFjdG9yLCBzY2FsZUZhY3RvciB9LCBjbGlwT3BlcmF0aW9uKQorICAgICwgbV9oYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMoaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQorICAgICwgbV9oYXNGaWx0
ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbihoYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbikKIHsKIH0KIAotQ1NTRmlsdGVyOjp+Q1NT
RmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJs
dXJFZmZlY3QoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiwgRmlsdGVy
OjpDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkRGV2aWF0aW9u
ID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsK
KyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlh
dGlvbiwgY2xpcE9wZXJhdGlvbiA9PSBGaWx0ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRlID8gRURH
RU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCog
Q1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUJyaWdodG5lc3NFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgcmV0dXJuIHNvdXJj
ZUltYWdlKCkgPyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5j
dGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICB0cmFuc2Zl
ckZ1bmN0aW9uLnNsb3BlID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAw
OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0
dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2Zl
ckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMg
UmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24p
Cit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAg
IHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7
CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFu
c2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFt
b3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAw
LjU7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICBy
ZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRp
YyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGNvbnN0IERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7CisgICAgZmxvYXQg
c3RkID0gZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKKyAgICByZXR1cm4gRkVE
cm9wU2hhZG93OjpjcmVhdGUoc3RkLCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9w
U2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsKK30K
Kworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChjb25z
dCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikK
K3sKKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9w
ZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53
My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dyYXlzY2FsZUVx
dWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZl
Y3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQp
LAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAg
ICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0
UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSHVl
Um90YXRlRWZmZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9y
TWF0cml4T3BlcmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsg
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsK
KyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBjcmVhdGVJbnZlcnRFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVu
Y3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQg
YW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OworCisgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFu
c2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBD
U1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBG
aWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZp
bHRlck9wZXJhdGlvbikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVPcGFjaXR5
RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZW5k
ZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVsZW1l
bnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKyAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50
eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3Vu
dCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVy
RnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
bnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUobnVs
bEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7
Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTYXR1cmF0ZUVmZmVjdChj
b25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlv
bikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZF
Q29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUo
aW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVh
dGVTZXBpYUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xv
ck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRv
KDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8g
U2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRl
eC5odG1sI3NlcGlhRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0
ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWlu
dXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAw
LAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1h
dHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJh
bWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIo
Q1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVy
T3BlcmF0aW9uLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZmZWN0JiBwcmV2aW91
c0VmZmVjdCkKK3sKKyAgICBhdXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIu
ZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNlcygpOworICAgIGF1dG8qIGZpbHRlckVsZW1lbnQg
PSByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVy
LmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlvbik7CisKICAgICBpZiAoIWZpbHRlckVsZW1lbnQp
IHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVy
ICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0
ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9u
LmZyYWdtZW50KCkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRlciByZW5kZXJlciwg
YWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSk7
CiAgICAgICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUgcmVmZXJlbmNlZCBmaWx0
ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4KICAgICAgICAgLy8gRklY
TUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxodHRwczovL3dlYmtpdC5v
cmcvYi8xMzEwODU+CiAgICAgICAgIC8vIEZJWE1FOiBVbmNsZWFyIGlmIHRoaXMgZG9lcyBhbnl0
aGluZy4KQEAgLTg1LDIzMSArMjIyLDEwOSBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0
ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5p
cXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBo
YSA9IGJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7Ci0K
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgVmVjdG9yPFJlZjxGaWx0ZXJF
ZmZlY3Q+PiByZWZlcmVuY2VFZmZlY3RzOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50
IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigq
ZmlsdGVyRWxlbWVudCkpIHsKLSAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5idWlsZChi
dWlsZGVyLmdldCgpLCAqdGhpcyk7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8PCB0aGlz
IDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBidWlsZCBlZmZlY3QgZnJvbSAi
IDw8IGVmZmVjdEVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLQotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3Qu
Z2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5B
QkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZm
ZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5
bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVy
cG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigp
IDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVm
ZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0RWxlbWVu
dC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNlRWZmZWN0cy5hcHBlbmQoKmVm
ZmVjdCk7Ci0gICAgfQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShy
ZWZlcmVuY2VFZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBTVkdGaWx0ZXJCdWls
ZGVyIGJ1aWxkZXI7CisgICAgcmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRlKCpmaWx0ZXJFbGVtZW50
LCBidWlsZGVyLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgp
LCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCksIGZpbHRlci5jbGlwT3BlcmF0aW9uKCksIHByZXZpb3Vz
RWZmZWN0KTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBj
b25zdW1lcikKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZpbHRlckZ1bmN0aW9ucyhSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKIHsKLSAg
ICBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW4oKTsKLQotICAgIG1fZWZmZWN0cy5jbGVhcigpOworICAgIG1fZnVuY3Rp
b25zLmNsZWFyKCk7CiAgICAgbV9vdXRzZXRzID0geyB9OwogCi0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsK
KyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqcHJldmlvdXNFZmZlY3QgfSk7CisKKyAgICBSZWZQ
dHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVj
dDsKLSAgICAgICAgYXV0byYgZmlsdGVyT3BlcmF0aW9uID0gKm9wZXJhdGlvbjsKLSAgICAgICAg
c3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZU9wZXJhdGlv
biA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCAqcHJl
dmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9wZXJhdGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKG9wZXJhdGlvbi0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpB
UFBMRV9JTlZFUlRfTElHSFRORVNTOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1m
aWx0ZXIuCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRv
KDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAg
ICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0
ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGlu
Zm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5w
dXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAg
ICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1p
bnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9u
ZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
NzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAg
ICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9u
ZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4
OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQ
YXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCTFVSOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2Fz
dDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY2xpcE9wZXJhdGlvbigpKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTRVBJQTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwot
ICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRy
aXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0
dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1s
I3NlcGlhRXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFt
ZXRlcnMuCi0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2
OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2
OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4y
NzIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAxLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBl
ZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVCcmlnaHRuZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAg
YXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3Bl
cmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6
Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQ
YXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgor
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9S
T1RBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9u
VG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVm
ZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX0hV
RVJPVEFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3Qg
PSBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVu
Y3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAg
ICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVy
T3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSAxIC0gMiAqIGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0
ID0gYW1vdW50OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxG
dW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5j
dGlvbiwgbnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxl
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRp
b24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1h
cHBsZS1jb2xvci1maWx0ZXIuCisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkhVRV9ST1RBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVF
ZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlv
bikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVy
RnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0g
ICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24s
IG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVj
dChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50
eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50
ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZm
ZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50
eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0
IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3Vu
dDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3Vu
dCArIDAuNTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0
KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8
Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZsb2F0
IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZp
YXRpb24oKSwgMCk7Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRl
KCp0aGlzLCBzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29u
c3VtZXI6OkZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FU
RSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgor
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7
Ci0gICAgICAgICAgICBhdXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNo
YWRvd0ZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVj
dCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERl
dmlhdGlvbigpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAg
ICAgICAgIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwg
ZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9
IGNyZWF0ZVNWR0ZpbHRlcigqdGhpcywgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
Pigqb3BlcmF0aW9uKSwgcmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCk7CisgICAgICAgICAgICBl
ZmZlY3QgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAo
ZmlsdGVyKSB7CisgICAgICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKKyAg
ICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVm
ZmVjdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBD
U1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAg
ICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmlt
aXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhj
b25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwogICAgICAgICAgICAg
ZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi50eXBl
KCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwotICAgICAg
ICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0
KSB9OworICAgICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKICAgICAg
ICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgLy8gSWYgd2UgZGlkbid0IG1ha2UgYW55IGVmZmVjdHMsIHRlbGwgb3VyIGNhbGxl
ciB3ZSBhcmUgbm90IHZhbGlkLgotICAgIGlmIChtX2VmZmVjdHMuaXNFbXB0eSgpKQorICAgIGlm
IChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1f
ZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZnVuY3Rpb25zLnNocmlua1RvRml0KCk7CiAK
LSAgICBzZXRNYXhFZmZlY3RSZWN0cyhtX3NvdXJjZURyYXdpbmdSZWdpb24pOwotI2lmIFVTRShD
T1JFX0lNQUdFKQotICAgIGlmICghbV9maWx0ZXJSZW5kZXJlcikKLSAgICAgICAgbV9maWx0ZXJS
ZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGlu
Z3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRlckVuYWJsZWQoKSwgbV9lZmZlY3Rz
Lmxhc3QoKS5nZXQoKSk7Ci0jZW5kaWYKKyAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24gYW5kIG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZlY3Qg
Y2hhaW4uCisgICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK0dyYXBoaWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQo
KQoreworICAgIHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQo
KSA6IG51bGxwdHI7Cit9CisKIGJvb2wgQ1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCkKIHsKICAgICBpZiAoZmlsdGVyUmVjdC5pc0Vt
cHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlclJlY3Quc2l6ZSgp
KSkKQEAgLTMzMSw1MyArMzQ2LDcyIEBAIHZvaWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4CiAgICAgaWYg
KG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBs
b2dpY2FsU2l6ZSA9IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5zaXplKCk7CisgICAgYXV0byBsb2dp
Y2FsU2l6ZSA9IHNvdXJjZUltYWdlUmVjdCgpLnNpemUoKSAqIGZpbHRlclNjYWxlKCk7CisKICAg
ICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAhPSBs
b2dpY2FsU2l6ZSkgewogI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1hZ2Uo
SW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0
Q29udGV4dCwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBp
eGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZWxz
ZQogICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIFJlbmRlcmlu
Z01vZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCA6IHJlbmRlcmluZ01vZGUoKTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJ
bWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCAxLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZW5kaWYKKyAgICAg
ICAgaWYgKGF1dG8gY29udGV4dCA9IGlucHV0Q29udGV4dCgpKQorICAgICAgICAgICAgY29udGV4
dC0+c2NhbGUoZmlsdGVyU2NhbGUoKSk7CiAgICAgfQorCiAgICAgbV9ncmFwaGljc0J1ZmZlckF0
dGFjaGVkID0gdHJ1ZTsKIH0KIAorUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpsYXN0
RWZmZWN0KCkKK3sKKyAgICBpZiAobV9mdW5jdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIGZ1bmN0aW9uID0gbV9mdW5jdGlvbnMubGFzdCgpOwor
ICAgIGlmIChmdW5jdGlvbi0+aXNTVkdGaWx0ZXIoKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFNWR0ZpbHRlcj4oZnVuY3Rpb24ucHRyKCkpLT5sYXN0RWZmZWN0KCk7CisKKyAgICByZXR1cm4g
ZG93bmNhc3Q8RmlsdGVyRWZmZWN0PihmdW5jdGlvbi5wdHIoKSk7Cit9CisKIHZvaWQgQ1NTRmls
dGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQogewotICAgIGF1dG8mIGxh
c3RFZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGxhc3RFZmZlY3QuZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9
IGxhc3RFZmZlY3QubWF4RWZmZWN0UmVjdCgpOworICAgIGF1dG8gbGFzdEVmZmVjdCA9IHRoaXMt
Pmxhc3RFZmZlY3QoKTsKKyAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+Y2Fs
Y3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uKCp0aGlzKTsKKwogICAgIC8vIEF0IGxlYXN0IG9u
ZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0aGUg
ZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgRmxvYXRTaXplIHNjYWxl
OwotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUo
KSwgc2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAgICAg
ICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0K
KyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGUgeyAxLCAxIH07CisgICAgaWYgKEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSkpCisgICAg
ICAgIHNldEZpbHRlclNjYWxlKGZpbHRlclNjYWxlKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6OmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpCiB7Ci0gICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJl
c3VsdCgpOwotICAgIGlmIChtX3NvdXJjZUFscGhhKQotICAgICAgICBtX3NvdXJjZUFscGhhLT5j
bGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAg
ICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVu
Y3Rpb25zKQorICAgICAgICBmdW5jdGlvbi0+Y2xlYXJGaWx0ZXJJbWFnZSgpOwogfQogCi12b2lk
IENTU0ZpbHRlcjo6YXBwbHkoKQorYm9vbCBDU1NGaWx0ZXI6OmFwcGx5RmlsdGVyKCkKIHsKLSAg
ICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmIChtX2ZpbHRl
clJlbmRlcmVyKSB7Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZl
Y3QpOwotICAgICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKLSAgICAg
ICAgICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGVmZmVjdCA9IGxh
c3RFZmZlY3QoKTsKKworICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKQorICAgICAgICBtX2ZpbHRl
clJlbmRlcmVyLT5hcHBseUVmZmVjdHMoKnRoaXMsICplZmZlY3QpOworCisgICAgaWYgKCFtX2Zp
bHRlclJlbmRlcmVyIHx8ICFtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgeworICAgICAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgICAgIGlmICgh
ZnVuY3Rpb24tPmFwcGx5KCp0aGlzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgZWZmZWN0LmFwcGx5KCk7Ci0gICAgZWZmZWN0LnRyYW5zZm9y
bVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworCisgICAg
aWYgKGF1dG8gaW1hZ2UgPSBlZmZlY3QtPmZpbHRlckltYWdlKCkpIHsKKyAgICAgICAgaW1hZ2Ut
PnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogTGF5
b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0
KQpAQCAtMzkwLDM1ICs0MjQsMzQgQEAgTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3Vy
Y2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGUKICAgICByZXR1
cm4gcmVjdEZvclJlcGFpbnQ7CiB9CiAKLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgp
IGNvbnN0CitJbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQoKQogewogICAgIGlmIChtX2Zp
bHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKQogICAgICAgICBy
ZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0cHV0KCk7CiAgICAgCi0gICAgcmV0dXJuIG1fZWZm
ZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBs
YXN0RWZmZWN0KCktPmZpbHRlckltYWdlKCkpCisgICAgICAgIHJldHVybiBpbWFnZS0+aW1hZ2VC
dWZmZXIoKTsKKyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6
OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkKIHsK
LSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJbWFnZVJlY3Q7Ci0gICAgc2V0TWF4
RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRGaWx0ZXJSZWdpb24oc291cmNl
SW1hZ2VSZWN0KTsKKyAgICBGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3Qp
OworICAgIEZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7CisgICAg
Zm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGlmIChmdW5jdGlv
bi0+aXNTVkdGaWx0ZXIoKSkgeworICAgICAgICAgICAgZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5j
dGlvbi5wdHIoKSktPnNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOworICAgICAgICAg
ICAgZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5jdGlvbi5wdHIoKSktPnNldFNvdXJjZUltYWdlUmVj
dChzb3VyY2VJbWFnZVJlY3QpOworICAgICAgICB9CisgICAgfQogICAgIG1fZ3JhcGhpY3NCdWZm
ZXJBdHRhY2hlZCA9IGZhbHNlOwogfQogCi12b2lkIENTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVj
dHMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQorSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1
dFJlY3QoKQogewotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBl
ZmZlY3QtPnNldE1heEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7Ci19Ci0KLUludFJlY3QgQ1NTRmls
dGVyOjpvdXRwdXRSZWN0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZl
Y3RzLmxhc3QoKS5nZXQoKTsKLSAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8
fCAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0g
ICAgICAgIHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihJbnRSZWN0IHsgbV9maWx0ZXJSZWdpb24gfSk7Ci0gICAgCisgICAgaWYgKGF1dG8gaW1hZ2Ug
PSBsYXN0RWZmZWN0KCktPmZpbHRlckltYWdlKCkpCisgICAgICAgIHJldHVybiBpbWFnZS0+YWJz
b2x1dGVJbWFnZVJlY3QoKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC00MzAsOCArNDYzLDkg
QEAgSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogICAgIGlmICghbV9vdXRz
ZXRzLmlzWmVybygpKQogICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAgZm9yIChhdXRv
JiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91dHNl
dHMoKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1f
b3V0c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygpOworCiAgICAgcmV0dXJuIG1fb3V0c2V0czsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4IDAwYjkxOTE3YjgwNGM5
MmQ5NDA4Yjc1OGUzNzVjMjUyZjI5ZGIwYzUuLmQ0NWNkNzVkOGE0NjMzMGVlYTUyYzIzNDQ3Y2Q5
OTY0MmIxZWIxZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKQEAgLTM4LDY5
ICszOCw0NyBAQCBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOwogY2xhc3MgUmVuZGVyRWxlbWVudDsK
LWNsYXNzIFNvdXJjZUFscGhhOwogY2xhc3MgU291cmNlR3JhcGhpYzsKIAotZW51bSBjbGFzcyBG
aWx0ZXJDb25zdW1lciB7IEZpbHRlclByb3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwotCiBjbGFz
cyBDU1NGaWx0ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q1NTRmlsdGVyPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUmVmUHRyPENT
U0ZpbHRlcj4gY3JlYXRlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwg
UmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLCBDbGlwT3BlcmF0aW9uID0gQ2xp
cE9wZXJhdGlvbjo6SW50ZXJzZWN0KTsKIAogICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVj
dCYgZmlsdGVyUmVnaW9uKSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9Ci0KLSAg
ICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3Q7Ci0KLSAgICBib29sIGJ1aWxkKFJlbmRlckVs
ZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwotICAgIHZv
aWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7Ci0gICAgdm9pZCBhcHBseSgpOwogCiAgICAg
Ym9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVsczsgfQogICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRTaG91
bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIENTU0ZpbHRlcigpOwotICAgIHZpcnR1YWwgfkNTU0ZpbHRlcigp
OwotCi0gICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
LQotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3NvdXJjZURyYXdpbmdSZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBmaWx0
ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9u
OyB9Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5k
ZXJFbGVtZW50JiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uJik7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpOworICAg
IEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgSW50T3V0c2V0cyBvdXRzZXRz
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CisgICAgYm9v
bCBhcHBseUZpbHRlcigpIG92ZXJyaWRlOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENv
bnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCk7CisgICAgSW50UmVjdCBvdXRwdXRS
ZWN0KCk7CiAKICAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWN0KTsKICAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29u
c3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBjb25zdDsK
LQogICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25z
dCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3Qp
OwogCi0gICAgRmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3Qg
bV9maWx0ZXJSZWdpb247Ci0KLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1fZWZmZWN0
czsKLSAgICBSZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VHcmFwaGljOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IG1fc291cmNlQWxwaGE7Citwcml2YXRlOgorICAgIENTU0ZpbHRlcihib29s
IGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IsIENsaXBPcGVyYXRpb24p
OwogCi0gICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKKyAgICBib29sIGJ1aWxkRmls
dGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7Cisg
ICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKIAogICAgIGJvb2wg
bV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVyVGhhdFNob3Vs
ZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAgIAorCisgICAgVmVj
dG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOworCisgICAgbXV0YWJsZSBJbnRP
dXRzZXRzIG1fb3V0c2V0czsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5k
ZXJlcj4gbV9maWx0ZXJSZW5kZXJlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCmluZGV4IDYyMzNiNWNjNTZmYjk4N2Y2MGRjNjY5YTc4NTQ1OGU3MjdkYjI4
ZjUuLjUxMWFmZTM4ZGVhYmIyYWZiNmZmNDg3Y2Q4NDhmMGFiYTYwYjM4MjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzIzMCw3ICszMjMwLDcgQEAgR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdGluYXRpb25Db250ZXh0LAogCiAgICAgYXV0byByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxj
dWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCwg
eyB9KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmls
dGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOworICAg
IEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5G
aWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigpLCBlbmNsb3NpbmdJbnRS
ZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBh
aW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOwogICAg
IGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXggMjUwYTdk
NWMwYmFhMGFjNzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uMWM2MzM1NDYyODE1NWFiOTZkNzFi
ZGIyNmQxMWNjZGM0ZTI2OTE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTExOCwyMyArMTE4LDEzIEBAIHZvaWQgUmVuZGVyTGF5
ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKIAogdm9pZCBSZW5kZXJM
YXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBz
Y2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIGlmICghbV9m
aWx0ZXIpIHsKLSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICAg
ICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRl
ci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fZmls
dGVyLT5maWx0ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1fZmlsdGVyLT5z
ZXRGaWx0ZXJTY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5jbGVhckludGVy
bWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB9Ci0KICAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRv
IGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0
bwogICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNvbXBvc2l0aW5n
KSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgogICAgIC8vIEZJWE1FOiB0aGlzIHJlYnVpbGRz
IHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5bGUgZGlkbid0
IGNoYW5nZS4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJlciwgcmVuZGVyZXIuc3R5
bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkKLSAgICAgICAg
bV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVu
ZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIHJlbmRlcmluZ01vZGUsIHNjYWxlRmFj
dG9yLCBGaWx0ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRlKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0
KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYg
ZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJl
Y3QpCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZl
Y3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRlckVsZW1lbnQmLCBj
b25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJl
Y3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFtX2Zp
bHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNTksOCArMTQ5LDYgQEAgR3JhcGhp
Y3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNz
Q29udGV4dCYgZGVzdGluYXQKICAgICBtX3BhaW50T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5s
b2NhdGlvbigpOwogICAgIHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KICAgICBmaWx0ZXIuYWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChkZXN0aW5hdGlvbkNvbnRleHQpOwogICAgIGF1dG8qIHNvdXJj
ZUdyYXBoaWNzQ29udGV4dCA9IGZpbHRlci5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJj
ZUdyYXBoaWNzQ29udGV4dCB8fCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgp
KSkKQEAgLTE4NCwxNCArMTcyLDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZp
bHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICBhdXRv
JiBmaWx0ZXIgPSAqbV9maWx0ZXI7CiAgICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3Jl
KCk7CiAKLSAgICBmaWx0ZXIuYXBwbHkoKTsKKyAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoKTsKIAog
ICAgIC8vIEdldCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAg
IExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0
Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKKyAgICBhdXRvIGRl
c3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKIAotICAgIGlmIChhdXRvKiBvdXRwdXRCdWZm
ZXIgPSBmaWx0ZXIub3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwg
bV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOworICAg
IGlmIChhdXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpIHsKKyAgICAgICAgZGVz
dGluYXRpb25Db250ZXh0LnNjYWxlKHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCks
IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9KTsKKyAgICAgICAgZGVzdGluYXRp
b25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0QnVmZmVyLCBkZXN0UmVjdCk7CisgICAg
ICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAg
fQogCiAgICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKaW5kZXggM2RhMTQwYTVjODhm
MTU1MzE5MGI3MDAzZDdlNzg0NGM5MTk0NWJmNy4uM2E3NDk5NWYxZjg0YmQ5NzNlZDJiODhkMzA0
Mzk3YjRjNDRkYTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUGVyIHJlbmRlcgog
ICAgIExheW91dFJlY3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRSZWN0
OyB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0
LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVw
YWludFJlY3QpOworICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlv
dXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpOwogICAgIHZvaWQgYXBwbHlGaWx0ZXJFZmZl
Y3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpOwogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcAppbmRleCAxOTUwOWQ5NzE4YWZmMTEwZjg0MWVjNDk3NmY5N2ZiMWE5MzRkOGE1
Li4xZWM5ZDY2ZDVmMzc4YzZjZTc1YjQwMGRhMjU1ZTc0ZjAxNDA1OWU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcApAQCAtODIsNDAgKzgyLDYgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVt
b3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAogICAgIG1hcmtD
bGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRh
cmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQogCi1zdGQ6OnVu
aXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxk
UHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0ZXJFbGVtZW50
KCkuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLnRh
cmdldEJvdW5kaW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVpbGRlcgot
ICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oU291cmNlR3Jh
cGhpYzo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2ZVVuaXRzKGZp
bHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5zZXRUYXJnZXRC
b3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBlbGVt
ZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxlbWVudC5idWls
ZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAg
ICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVy
ZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAgICAgICAgZWxl
bWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgZWZmZWN0
LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwgZmlsdGVyRWxl
bWVudCgpLnByaW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0gICAgICAgIGlm
IChlbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BB
Q0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0
aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRp
b25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAg
IGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwotICAgIH0K
LSAgICByZXR1cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUm
LCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VN
b2RlPiByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwpAQCAtMTM3LDUyICsx
MDMsMzggQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5k
ZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBpZiAoZmlsdGVyRGF0YS0+Ym91
bmRhcmllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIERldGVy
bWluZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4gCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2Fs
Y3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIp
OwotICAgIGlmICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJh
bnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUg
aW1hZ2VzIGZvciBmZVRpbGUuCi0gICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAs
IGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKLQogICAgIC8vIERldGVybWluZSBh
YnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4K
ICAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdC
b3goKTsKICAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRh
LT5ib3VuZGFyaWVzKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmls
dGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5k
cmF3aW5nUmVnaW9uKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KLSAg
ICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQoKS5wcmltaXRp
dmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WDsKLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJEYXRh
LT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCB0YXJn
ZXRCb3VuZGluZ0JveCwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgcHJpbWl0aXZlQm91bmRpbmdC
b3hNb2RlKTsKIAotICAgIC8vIENyZWF0ZSBhbGwgcmVsZXZhbnQgZmlsdGVyIHByaW1pdGl2ZXMu
Ci0gICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IGJ1aWxkUHJpbWl0aXZlcygqZmlsdGVyRGF0YS0+
ZmlsdGVyKTsKLSAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZXIpCisgICAgLy8gRGV0ZXJtaW5l
IGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgZmlsdGVyLgorICAgIEFmZmluZVRy
YW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0
ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKKyAg
ICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBz
aXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFu
IGtNYXhGaWx0ZXJTaXplLgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRl
RHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUpOwotICAg
IHRlbXBTb3VyY2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKyAg
ICAvLyBFbGltaW5hdGUgc2hlYXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJp
eCwgdG8gYmUgYWJsZSB0byBwcm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxl
LgorICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwg
YWJzb2x1dGVUcmFuc2Zvcm0ueVNjYWxlKCkpOwogCi0gICAgLy8gU2V0IHRoZSBzY2FsZSBsZXZl
bCBpbiBTVkdGaWx0ZXIuCi0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0
aW9uKHNjYWxlKTsKKyAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRo
ZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0
aGFuIGtNYXhGaWx0ZXJTaXplLgorICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpOwogCi0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmls
dGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgp
OwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0
SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQorICAgIC8vIENyZWF0ZSB0aGUgU1ZH
RmlsdGVyIG9iamVjdC4KKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdG
aWx0ZXJCdWlsZGVyPigpOworICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3Jl
YXRlKGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIGZpbHRlclNjYWxlLCBm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCB0YXJnZXRC
b3VuZGluZ0JveCk7CisgICAgaWYgKCFmaWx0ZXJEYXRhLT5maWx0ZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBhdXRvIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVy
LT5sYXN0RWZmZWN0KCk7CisgICAgQVNTRVJUKGxhc3RFZmZlY3QpOwogCiAgICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5
UmVzb3VyY2VcbiIgPDwgKmZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKSk7CiAKLSAg
ICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBG
bG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOworICAgIEZs
b2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5jYWxjdWxhdGVNYXhQcmltaXRpdmVTdWJy
ZWdpb24oKmZpbHRlckRhdGEtPmZpbHRlcik7CisKICAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVy
RWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKICAgICAvLyByZWNhbGN1bGF0ZSB0aGUg
ZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgaWYgKEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAg
ZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAg
bGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQor
ICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwg
ZmlsdGVyU2NhbGUpKQorICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclNjYWxl
KGZpbHRlclNjYWxlKTsKIAogICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3
ZSBoYXZlIHNvbWV0aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4uCiAgICAgLy8gRXZlbiBpZiB0
aGUgdGFyZ2V0IG9iamVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8g
ZHJhdyB0aGUgbGFzdCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgpA
QCAtMTk0LDkgKzE0Niw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVz
b3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgfQogCiAgICAg
Ly8gQ2hhbmdlIHRoZSBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQgdG8gdGhlIGZp
bHRlcmVkIGVsZW1lbnQgdG8gcmVmbGVjdCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgZmlsdGVyLgot
ICAgIEFmZmluZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zvcm07Ci0gICAgZWZmZWN0aXZlVHJh
bnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKLSAgICBlZmZlY3Rp
dmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zv
cm0pOworICAgIEFmZmluZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFu
c2Zvcm0oZmlsdGVyU2NhbGUud2lkdGgoKSwgMCwgMCwgZmlsdGVyU2NhbGUuaGVpZ2h0KCksIDAs
IDApOwogCiAgICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2Nl
bGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9S
X1NQQUNFX0xJTkVBUl9TUkdCKQpAQCAtMjY5LDMzICsyMTksMzIgQEAgdm9pZCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IEdyYXBoaWMKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRmlsdGVyRWZmZWN0KiBsYXN0
RWZmZWN0ID0gZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0KCk7CisgICAgYXV0byBsYXN0
RWZmZWN0ID0gZmlsdGVyRGF0YS5maWx0ZXItPmxhc3RFZmZlY3QoKTsKIAotICAgIGlmIChsYXN0
RWZmZWN0ICYmICFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0
LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkpIHsKKyAgICBpZiAobGFzdEVm
ZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+
Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKCpmaWx0ZXJEYXRhLmZpbHRlcikuaXNFbXB0eSgp
KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3Qu
IEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQogICAgICAgICAvLyBpbml0aWFsIGZp
bHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9u
IGEKICAgICAgICAgLy8gc2Vjb25kIGRyYXdpbmcuCiAgICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0
YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0KQogICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXIt
PnNldFNvdXJjZUltYWdlKFdURk1vdmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7
CiAKKyAgICAgICAgYXV0byBpbWFnZSA9IGxhc3RFZmZlY3QtPmZpbHRlckltYWdlKCk7CisgICAg
CiAgICAgICAgIC8vIEFsd2F5cyB0cnVlIGlmIGZpbHRlckRhdGEgaXMganVzdCBidWlsdCAoZmls
dGVyRGF0YS0+c3RhdGUgPT0gRmlsdGVyRGF0YTo6QnVpbHQpLgotICAgICAgICBpZiAoIWxhc3RF
ZmZlY3QtPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgIGlmICghaW1hZ2UpIHsKICAgICAgICAgICAg
IGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAgICAgICAgIGxh
c3RFZmZlY3QtPmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVy
UmVzdWx0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgICAgICAgICAg
ZmlsdGVyRGF0YS5maWx0ZXItPmFwcGx5RmlsdGVyKCk7CisgICAgICAgICAgICBpbWFnZSA9IGxh
c3RFZmZlY3QtPmZpbHRlckltYWdlKCk7CisgICAgICAgICAgICBpbWFnZS0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgfQorCiAg
ICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJ
bWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OworICAgICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZSA/IGltYWdlLT5pbWFn
ZUJ1ZmZlcigpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKHJlc3VsdEltYWdlKSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5z
Zm9ybS5pbnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpKTsKLQotICAgICAgICAg
ICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVy
UmVzb2x1dGlvbigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1
dGlvbigpLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIo
KnJlc3VsdEltYWdlLCBsYXN0RWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkp
OwotCi0gICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUo
MSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXJE
YXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4
dC0+ZHJhd0ltYWdlQnVmZmVyKCpyZXN1bHRJbWFnZSwgaW1hZ2UtPmFic29sdXRlSW1hZ2VSZWN0
KCkpOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRl
clNjYWxlKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhp
Y0J1ZmZlciA9IG51bGxwdHI7CkBAIC0zMjcsNyArMjc2LDggQEAgdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVj
dCwgY28KICAgICAgICAgLy8gb3Igbm9uZSBvZiB0aGVtIHdpbGwgYmUgY2hhbmdlZC4KICAgICAg
ICAgaWYgKCFwcmltaXR2ZS0+c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKGVmZmVjdCwgYXR0cmli
dXRlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnVpbGRlci0+Y2xlYXJSZXN1bHRz
UmVjdXJzaXZlKGVmZmVjdCk7CisKKyAgICAgICAgYnVpbGRlci0+Y2xlYXJGaWx0ZXJJbWFnZXNS
ZWN1cnNpdmUoKmVmZmVjdCk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUgaW1hZ2Ugb24gdGhl
IHNjcmVlbi4KICAgICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbigqb2JqZWN0RmlsdGVy
RGF0YVBhaXIua2V5LCBSZXBhaW50SW52YWxpZGF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCA4Y2Uw
YzdhYmMxNDNiZGI2NTM4NTBjOTNlMzI5MmFjOWRhNDliYmM3Li42NjhkZGEzMDU4NmY2OWU2ZDU0
NGMyNjEwZjMwOTljZTllYjgzZWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBAIC00NywxMCArNDcsOCBAQCBw
dWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkZXI7CiAg
ICAgUmVmUHRyPEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwogICAgIEdyYXBoaWNz
Q29udGV4dCogc2F2ZWRDb250ZXh0IHsgbnVsbHB0ciB9OwotICAgIEFmZmluZVRyYW5zZm9ybSBz
aGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3QgYm91bmRhcmllczsKICAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGU7CiAgICAgRmls
dGVyRGF0YVN0YXRlIHN0YXRlIHsgUGFpbnRpbmdTb3VyY2UgfTsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4
IGM2NTAyMWJlZTAzNTU2NWFhYjMxYzY3ZmI5MzE5Zjg4ZTYxODA3YzcuLjY0ZTNhYzVhZWFjODBh
ZGY5ZTI2YWI0ZWY2Yjg1YTI3YzI1NDJkMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDMyLDExICs0MzIsMTMg
QEAgdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICAgICAg
Ly8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBi
dWlsZGVyLgogICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OwotICAgICAgICBhdXRvIGR1bW15
RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwg
ZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUpOwotICAgICAgICBpZiAoYXV0byBidWlsZGVyID0g
ZmlsdGVyLmJ1aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKKyAgICAgICAgRmxv
YXRTaXplIGR1bW15U2NhbGUoMSwgMSk7CisgICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRl
cjsKKyAgICAgICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlci5m
aWx0ZXJFbGVtZW50KCksIGJ1aWxkZXIsIGR1bW15U2NhbGUsIGR1bW15UmVjdCwgZHVtbXlSZWN0
LCBkdW1teVJlY3QpOworICAgICAgICBpZiAoZHVtbXlGaWx0ZXIpIHsKICAgICAgICAgICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKIAotICAgICAgICAgICAgaWYg
KEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3QoKSkKKyAgICAg
ICAgICAgIGlmIChhdXRvIGxhc3RFZmZlY3QgPSBkdW1teUZpbHRlci0+bGFzdEVmZmVjdCgpKQog
ICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBDbGlw
cGVyUmVzb3VyY2VUeXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAyMGI4YjVlN2IwN2IzMWExMmM1YWFjYmEz
ODU4OTJmYmYzYTIzNTczLi4zOTc0Y2E5YzNkODRhM2IzMjAwMDcxOTNhMjA0NmVmMjYxYWVhZTk4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5n
Q29udGV4dC5jcHAKQEAgLTIzNSw4ICsyMzUsMTEgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmcK
ICAgICBpZiAocGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VC
dWZmZXI6OmNsYW1wZWRTaXplKHBhaW50UmVjdC5zaXplKCksIHNjYWxlKTsKKyAgICBGbG9hdFNp
emUgc2NhbGUgeyAxLCAxIH07CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gcGFpbnRSZWN0
LnNpemUoKTsKKworICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocGFpbnRS
ZWN0LnNpemUoKSwgc2NhbGUpKQorICAgICAgICBjbGFtcGVkU2l6ZS5zY2FsZShzY2FsZS53aWR0
aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAKICNpZiBVU0UoRElSRUNUMkQpCiAgICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUs
IGNvbnRleHQsIDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAppbmRleCA3YmNmMDQxODAwZjc5OWYxMTc0Y2Zl
MDRiODIyZDZkMDY0MzFmNjg2Li4wNTQwYzhlNDQwODJkNWM2MWYwMGY4ZmI3MzVjMzYxODJkMTBm
YTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKQEAgLTEwMCwx
OSArMTAwLDE2IEBAIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1
aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVj
dEJ5SWQoaW4yKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJ
ZChpbjIoKSk7CiAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRlciwgbW9k
ZSgpKTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBp
bnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1
dDIpOyAgICAKKyAgICBhdXRvIGVmZmVjdCA9IEZFQmxlbmQ6OmNyZWF0ZShtb2RlKCkpOworICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSwgV1RGTW92ZShpbnB1
dDIpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVu
ZEVsZW1lbnQuaAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUwYjk0MWZjOGIwNmRlYzY2
Li5lYmE5YWJiNTgzMjhmNGRhYmYzNDI4YjZiMTdkYmY1ODIzNzY4NDA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaApAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJp
bmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKICAgICBi
b29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJv
cGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCAwNTI0ODU3OGMyNzRjOGZhMmIzZTFmMjQ0ZTQzNjc4
NjhmNDJiYTljLi5jZGViZWYxOGExZmRjYmI4ZjNmYjM1ZmI4MzhhYzYwNGM5YTIzZDY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKQEAgLTEw
MCw5ICsxMDAsOSBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1Jl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmls
dGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0
ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMTQxLDggKzE0MSw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0
ZXJCdWlsCiAgICAgICAgIGZpbHRlclZhbHVlcy5zaHJpbmtUb0ZpdCgpOwogICAgIH0KIAotICAg
IGF1dG8gZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlciwgZmlsdGVyVHlwZSwg
V1RGTW92ZShmaWx0ZXJWYWx1ZXMpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBp
bnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXJU
eXBlLCBXVEZNb3ZlKGZpbHRlclZhbHVlcykpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkg
PSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5kZXggN2FiNGFhNDE4MWU3
YWIxOThiMTJlNzdiZTIwNmI5YzVjNDEwMjNmZC4uOTcwMTFhMDQxZTQ5YTE3ZmI0OThhMWY4NDZm
ODgwZGJkZDY5NTI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmgKQEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRG
aWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJl
Z2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVk
U3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
CmluZGV4IDkwYTU1YjdlZmZmN2EzZmU2MDZhOWUwNTc5YTc2ZWRlOWY5NjgwMTEuLjI3ZDEyYjVk
MDg4M2ViZjFlYWMwYWRhYjExMTJmZWVlYmIxMWY0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcApAQCAtNjMsOSArNjMs
OSBAQCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZp
bHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmls
dGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC04Niw4ICs4Niw4IEBAIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0CiAgICAgICAgICAgICBhbHBoYSA9IGRvd25jYXN0PFNWR0ZFRnVuY0FFbGVtZW50
PihjaGlsZCkudHJhbnNmZXJGdW5jdGlvbigpOwogICAgIH0KICAgICAKLSAgICBhdXRvIGVmZmVj
dCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShmaWx0ZXIsIHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBh
dXRvIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEp
IH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRleCBiYjU4OTM0N2Q4ODI2ZGZiMzYw
OWVkYWM2ZThiOTkzYTRkZDU0ODYzLi42MDE3MTBmN2QzNTM1YTE0MWExNTc4ODU0YWYyYjAzNTEx
MjllOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBz
dmdBdHRyaWJ1dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJl
Z2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZH
QW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmNwcAppbmRleCAzY2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2
ZmUyMDVhYzk4MjM1Li43ZmNlZDJlNjQ1NTQwZTNiOWRkMDk2Y2JlNDk5MWY1ODQxNTUwNTE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtMTMx
LDE5ICsxMzEsMTYgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0K
IAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVp
bGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWls
ZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRl
ci5nZXRFZmZlY3RCeUlkKGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb3Np
dGU6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkp
OwotICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKTsKLSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0
RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7
ICAgIAorICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb3NpdGU6OmNyZWF0ZShzdmdPcGVyYXRvcigp
LCBrMSgpLCBrMigpLCBrMygpLCBrNCgpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBXVEZNb3ZlKGlucHV0MSksIFdURk1vdmUoaW5wdXQyKSB9OwogICAgIHJldHVybiBlZmZlY3Q7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4
MWE3OGM4NjU3YTBmYTMwNDRkZjViN2M1YTA4MGQ2ZTc3OTcyMmY2Li43NGQ4MTRjM2MyMGUwZmQz
N2ViNmE4YjUzYWZmNTY5ZDhkMTFkY2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29t
cG9zaXRlRWxlbWVudC5oCkBAIC0xMDksNyArMTA5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNW
R0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQu
Y3BwCmluZGV4IGY3NTA1ODE1ZGVjYWJiNGVhMzRiNDM1YjQ3ZWE1YTgwYzZhMjZkZjEuLjFhODEz
NGE5YzhiN2ZjMGE1MDc1ZWRlODFhMGQzNjk3MGU5OGM0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApAQCAtMTkxLDkgKzE5MSw5
IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0yNDYsOCArMjQ2LDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckIKICAgICAgICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAgfQogCi0gICAgYXV0byBlZmZl
Y3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBJbnRTaXplKG9yZGVyWFZhbHVl
LCBvcmRlcllWYWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRYVmFs
dWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0
aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVs
TWF0cml4KTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBh
dXRvIGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShJbnRTaXplKG9yZGVyWFZhbHVl
LCBvcmRlcllWYWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRYVmFs
dWUsIHRhcmdldFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0
aFhWYWx1ZSwga2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVs
TWF0cml4KTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkg
fTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCmluZGV4IDg1YzAwMjY5OGM2Mjc3ZTA0MzcwZDM1OTgy
YTk1YjhkOTA0OWIzMzkuLjFiNmJiZTQ4NzEyNzVjNDIxYzhkZDQ0MDljMWI0ODk3Mjk1YWExMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5o
CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJF
ZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5n
PiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggMTUy
Yzk4NWZkOGU5NWFlOTk1N2U2ZTIxZDZiZjJhMTBjNDU0YmRkNS4uZGQzOTQ1OTVjZjcyNjQ4YTY3
ZDUyOGExMzQxNTFkYTM2N2Y0YzY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTE1MSw5ICsxNTEsOSBAQCB2b2lkIFNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChj
b25zdCBTVkdGRUxpZ2h0RQogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBj
b25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8g
aW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBp
bnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFp
bnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTYyLDcgKzE2Miw3IEBAIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciogZmlsdGVyCiAgICAgaWYgKCFsaWdodEVsZW1lbnQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxp
Z2h0U291cmNlKCpmaWx0ZXJCdWlsZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRF
bGVtZW50LT5saWdodFNvdXJjZShmaWx0ZXJCdWlsZGVyKTsKIAogICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC0xNzAs
OCArMTcwLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXIKIAogICAgIENvbG9yIGNvbG9yID0g
cmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0
eWxlKCkuc3ZnU3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBG
RURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBk
aWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFko
KSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7
IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShj
b2xvciwgc3VyZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3Ro
WCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7CisgICAgZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVm
ZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudC5oCmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAu
LmIyYWFjOGIwM2VkMjRkMjFkOThiNTE5ZmJhOGU1Zjk0NWNhMzA4MGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUo
RmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBv
dmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVy
JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdp
c3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0Fu
aW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKaW5kZXggMGM1ZTgyNWJjODI1NjBmMzZh
MjY5ZWE2ZDcyMmRmZDA1MTczZDhjMi4uNjkwNzUxMzc1MDdkNmM2NDc0OWExYzhiYzQxMmEwYWVl
NTFhMWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5jcHAKQEAgLTExNSwxOSArMTE1LDE2IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNw
bGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
LCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4x
KCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMigp
KTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShmaWx0
ZXIsIHhDaGFubmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKTsKLSAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVj
dHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAK
KyAgICBhdXRvIGVmZmVjdCA9IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoeENoYW5uZWxTZWxl
Y3RvcigpLCB5Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOworICAgIGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSwgV1RGTW92ZShpbnB1dDIpIH07CiAgICAgcmV0
dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudC5oCmluZGV4IGFhOTFkZjM4YjM2Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4
NjY1ZDMuLmYyYzZkMGIxOGY4NWM5NGYzODRmNWJkMWJlZmMzNTllZGU4MjNlNmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkx
LDcgKzkxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJy
aWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5
IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5n
PiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAppbmRleCAyMmJjZTFkMzMzMTdj
OTU3MWZlNWQ3OWY0YjMyNmE4OWJmYzViNjgxLi5iZDYxYzI3NGUxNTM0ZmQ5MWFjMzk4MGM2NDU2
Mjk4OTljZjYyMTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hh
ZG93RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRl
cikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7CiAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikK
QEAgLTExMSwxMiArMTExLDEyIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRv
d0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkCiAgICAgQ29sb3Ig
Y29sb3IgPSByZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdT
dHlsZS5mbG9vZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9w
YWNpdHkoKTsKIAotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJ
ZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQo
aW4xKCkpOwogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IGF1dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25Y
KCksIHN0ZERldmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpOwotICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVE
cm9wU2hhZG93OjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCks
IGR5KCksIGNvbG9yLCBvcGFjaXR5KTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBX
VEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAppbmRleCA5YjYyZDI0YjQ1NGJiN2QyNzU4
ZTcxMmI2MjFiOGNiZTQyZjc0NTFkLi4zZTQwNWRlNDg5YzY4MWE3NmM0NGY5YTgyOTczM2EyMDI2
YjRkOGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgK
QEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7
IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVGbG9vZEVsZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJkNTY1ZDBlMTYzZmY4N2QwYjRiY2FiZDIy
NDQ3NThmYzIuLmYzMjhjYzdjMTVlZTc5MWI0YWFiYTNhOGU3MWE4MDRjODA5M2RjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcApAQCAtNTgsNyArNTgsNyBAQCBi
b29sIFNWR0ZFRmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiBlZmZlY3QsIGNvbnN0IFF1YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtNjks
NyArNjksNyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKQogICAgIENvbG9yIGNvbG9yID0gcmVu
ZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3ZnU3R5bGUuZmxvb2RD
b2xvcigpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RPcGFjaXR5KCk7CiAK
LSAgICByZXR1cm4gRkVGbG9vZDo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIG9wYWNpdHkpOworICAg
IHJldHVybiBGRUZsb29kOjpjcmVhdGUoY29sb3IsIG9wYWNpdHkpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCmluZGV4IGI5NmE0M2FhMzEzZTc1ZTRhMzE2NzI0
OGExYjZmNWNmNTFmZWU5MTEuLmFlZDY2OTE5MzNiZDAyZjMzMDFhOTIzOTdiNzQwNTlmZjZiZWM0
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCkBAIC0zNiw3ICszNiw3
IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdp
c3RyeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcApp
bmRleCA3YTk5ODIyNGM5MjE5NTU1MjQ0YTg2OWNhNzhhODMwZDU2M2M1OTlkLi5mMWU2YmY0OWE0
ZGIzZGNhNzc1YzliN2VmYTVkYjlkYzg2OTg4NzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcApAQCAtOTUsMTcgKzk1LDE3IEBAIHZvaWQg
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVy
QnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBpZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVHYXVzc2lhbkJs
dXI6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBlZGdl
TW9kZSgpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBh
dXRvIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGRE
ZXZpYXRpb25ZKCksIGVkZ2VNb2RlKCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7
IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCBkODllMWE3NDhmYjJj
NTA5ZTIxNGZlOTRhZTQxMDAxY2U0OGVlMGIyLi5mNDBlYjMzNzc4YzQzZGY2MWVlNTg5NjNlZWNm
OWVjZGJhNTQ5Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRleCBkZGNlZDJlZDllOWZlM2Y2NDMzMThk
YzU5NTgwZWYxYzMzNjY2MWIwLi44MjZiYjA0Y2I5ZTMwNjZhZTZjZDllOGVkZGQ4NzkzNzU0NDAz
ZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTE3NSwx
NiArMTc1LDE2IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hl
ZFJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVzb3Vy
Y2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50UmVu
ZGVyZXIpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dAogewogICAgIGlmIChtX2NhY2hlZEltYWdlKQotICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aEltYWdlKGZpbHRlciwgbV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5k
ZXJlcigpKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICAgICAgcmV0dXJuIEZFSW1hZ2U6
OmNyZWF0ZVdpdGhJbWFnZShtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVy
KCkpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogCiAgICAgYXV0byB0YXJnZXQgPSBTVkdVUklS
ZWZlcmVuY2U6OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgdHJlZVNjb3BlKCkp
OwogICAgIGlmIChpc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRhbnRPZih0YXJnZXQuZWxlbWVu
dC5nZXQoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIEZFSW1hZ2U6
OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoZmlsdGVyLCB0cmVlU2NvcGUoKSwgaHJlZigpLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVm
ZXJlbmNlKHRyZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CiB9CiAK
IHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0
SGFzaFNldDxVUkw+JiB1cmxzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuaAppbmRleCBkOTNlMGQwZGI4Yjg4NjY1NDgwZjIxMDE1YTI1NmJhZGExNTRjNWM3Li4yYTNl
OWY2MGViZmMyN2QwMTM5YjJjMzc2ODVmMzM4YjFjOGI2NzlmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVJbWFnZUVsZW1lbnQuaApAQCAtNTUsNyArNTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogICAgIHZv
aWQgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVs
ZW1lbnQuY3BwCmluZGV4IGJlMmY2ZTAzMDdkYzU1MTYwMDc5MGZkNWJmMTgyZjFkOTQ2MjNkZDYu
LjFjMGQ1ODJkMDEzYjg3Y2YwZTNjMTEwOGI5NjJmMmQzNjlkYzMwNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAtNDUsMTMgKzQ1LDEyIEBAIFJlZjxTVkdG
RU1lcmdlRWxlbWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVN
ZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0
byBlZmZlY3QgPSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBhdXRvJiBtZXJnZUlucHV0
cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0KKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbWVy
Z2VJbnB1dHM7CisgICAgCiAgICAgZm9yIChhdXRvJiBtZXJnZU5vZGUgOiBjaGlsZHJlbk9mVHlw
ZTxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+KCp0aGlzKSkgewotICAgICAgICBhdXRvIG1lcmdlRWZm
ZWN0ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChtZXJnZU5vZGUuaW4xKCkpOworICAg
ICAgICBhdXRvIG1lcmdlRWZmZWN0ID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKG1lcmdl
Tm9kZS5pbjEoKSk7CiAgICAgICAgIGlmICghbWVyZ2VFZmZlY3QpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKFdURk1vdmUobWVyZ2VFZmZl
Y3QpKTsKQEAgLTYyLDYgKzYxLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEYKICAgICBpZiAo
bWVyZ2VJbnB1dHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIGF1
dG8gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKCk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMo
KSA9IFdURk1vdmUobWVyZ2VJbnB1dHMpOwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5kZXggNzQ1MDg2ODE2ZjY5NzZjNjY5N2Rj
NTEwNzU4MDJkMjgzY2Y0ZTNjMi4uNDM3Y2Q3MjU2MzJjNWY0YzUyNDg5NGNjMzI2Y2EwOWI0MTk4
NTE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKQEAgLTM1LDcgKzM1
LDcgQEAgcHJpdmF0ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlP
d25lclJlZ2lzdHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM+OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVn
aXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuY3BwCmluZGV4IGQ2ZmI5NWM4ZTM3NzZlNmQyMDkzYmVhY2UzNWUyZWQx
Nzk1ZDMyMWIuLjhiMDU2MGM0ZGE4MDAzOTcwMTQ4ZTFlMTVlMmYzMDk3YjkxNTMxNTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKQEAgLTExNCwy
MCArMTE0LDE5IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQog
Ci1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVz
WCgpOwotICAgIGZsb2F0IHlSYWRpdXMgPSByYWRpdXNZKCk7Ci0KKyAgICBhdXRvIGlucHV0MSA9
IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1goKTsK
KyAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVzWSgpOwogICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5
UmFkaXVzIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9
IEZFTW9ycGhvbG9neTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywgeVJh
ZGl1cyk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0
byBlZmZlY3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5
UmFkaXVzKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkg
fTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuaAppbmRleCAxYTkwODhiNzVjZjhkODVhZTM4ZjI5M2UxMTE5OGE2NmY2
NmFhNjY5Li5iMjFiNmY1YzQ3Yjc4NWRmMjhmMDEzZWRlNTQwMWM4NjZkNDBlOWRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTgxLDcgKzgxLDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1h
dGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5jcHAKaW5kZXggMDM4MjY4Yjg5YjJmMTlmOWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVl
Ny4uOWIwZDcwMmExZDI1ODU0MjA4Yjk3ZmY5ZDZhZGQxZjgyN2UyOWFmNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKQEAgLTgxLDE0ICs4MSwxNCBAQCB2b2lk
IFNWR0ZFT2Zmc2V0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRU9mZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxk
ZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZz
ZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAog
ewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwog
CiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBl
ZmZlY3QgPSBGRU9mZnNldDo6Y3JlYXRlKGZpbHRlciwgZHgoKSwgZHkoKSk7CisgICAgYXV0byBl
ZmZlY3QgPSBGRU9mZnNldDo6Y3JlYXRlKGR4KCksIGR5KCkpOwogICAgIGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCkgPSB7IGlucHV0MSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3MmRiNjdiMTI1ZWEyZWQ0
NjVlMzViNTczNzA0OWJlZS4uODk5NmYyODJiMDFlOGQ5Y2Q2NjdiZjIwYjVjZDk4OGE1OTlhZjg4
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApAQCAtNDcsNyArNDcs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4IDliN2NlNDBhYjk3MTZhZTRmMzM1ZjU0
YjI0Y2RhNDU5YTg0MjlhNTkuLjU2M2I5ZjE3YjRhOTE2YjdkMjY1MTI0MmQzN2QzZmMwYmQ3NTAy
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5jcHAKQEAgLTE2MCw5ICsxNjAsOSBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodAog
ICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xNzEsNyArMTcxLDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGUKICAgICBpZiAoIWxpZ2h0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
Ci0gICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRl
ckJ1aWxkZXIpOworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291
cmNlKGZpbHRlckJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE3OSw3ICsxNzksNyBAQCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZQogICAgIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0
eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5
bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVNwZWN1bGFyTGln
aHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25z
dGFudCgpLCBzcGVjdWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVu
aXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKKyAgICBhdXRvIGVmZmVjdCA9IEZF
U3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJD
b25zdGFudCgpLCBzcGVjdWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5l
bFVuaXRMZW5ndGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKICAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBpbnB1dDEgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKaW5kZXggODk3
YjhkZTE1NmQxYzc5YTFkM2ZkOGIzMTE4ZTJhYjYzYjQ3YjE0Ni4uNGQxYjUzMWM0MmJlYjhjZGZh
MjAxNTIxNjIxMTY1MTBkMDA5YmM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlk
ZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
ICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3Jl
YXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKaW5kZXgg
MzliZGNjNzczNTk2NjUwMzZlMWFlNzQ3NjEyZWFkNmY5YWMzNzM3MC4uMDAxZGQ1MDg5MjE0OTg5
MTU2ZDcyNDY3YWMyMGY0ZmZmN2Q0ZGM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVGlsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVF
bGVtZW50LmNwcApAQCAtNzAsMTUgKzcwLDE1IEBAIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6c3Zn
QXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0
ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVRpbGVFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3JlYXRlKGZpbHRl
cik7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBl
ZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZSgpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7
IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVUaWxlRWxlbWVudC5oCmluZGV4IDQ1YjMyNzE4NTFkN2ZjMGRjMmQzYmNjODc5YTIy
ZGM0MmEzM2E5MWYuLmNhYmFjZTZiZDAxYzJiMWQzNTY0YTVjZWU1YzI3NWI2Njk2ZjlkNDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaApAQCAtNDIsNyArNDIsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQuY3BwCmluZGV4IDExNTYxMTE5ZDgzZTNmYzc4OGE0MmIxNDg2N2M2NTY0MTIzMzRhNGQuLjE1
MWI3YjllOGUwOGE0M2U3Y2NjYjY4MDlhYTcyOTE0NmRiYmYwZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKQEAgLTExNywxMSArMTE3LDExIEBA
IHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
KiwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1
bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBpZiAo
YmFzZUZyZXF1ZW5jeVgoKSA8IDAgfHwgYmFzZUZyZXF1ZW5jeVkoKSA8IDApCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShmaWx0ZXIsIHR5
cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBz
ZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRDSFRZUEVfU1RJVENIKTsKKyAgICByZXR1
cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUodHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJl
cXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJ
VENIVFlQRV9TVElUQ0gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuaAppbmRleCBiZjlkYTIyYWQ0MmU0MTBhMTA0MzVlMGE0MGUzNDI2Nzc2OWUx
OThhLi41MGFmOTEwZWI1OGUyYzkyMjQxYTkwZGE4Y2JkZmRjNjgxNGY5MzE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKQEAgLTExOSw3ICsxMTksNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0
ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNv
bnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0
eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZy
ZXF1ZW5jeVggeyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMuY3BwCmluZGV4IDlhZDJjOWU5NWUwN2QyYTdjMjk3ZjU2ZWZkMWJiZmZlN2MyNjk3YTAu
LjAwZTRlNjk4NjY0NTMyOTIyZDYzNzVlNzdhZDQzYjI4NWM3NDQ5NGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMuY3BwCkBAIC05NCwyMiArOTQsNiBAQCB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaAogICAg
IGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoZmlsdGVyRWZmZWN0KTsKLSAgICBpZiAoIWZpbHRlckVmZmVj
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0
dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1godHJ1ZSk7Ci0gICAgaWYgKGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1ko
dHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAg
ICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNXaWR0aCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRl
KFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWln
aHQodHJ1ZSk7Ci19Ci0KIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYm
IHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQogewogICAgIHJldHVybiBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZT4oKnRoaXMsIFdURk1vdmUo
c3R5bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0Mjgx
MWE2ZmQ3NDY3NzJhY2E3Li44NzhkMTEyYzAyOTg3ZDFmYmYxNjE0MWFjZTJiOGI4MWY1ZWIyOTJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCkBAIC0zNiw5ICszNiw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1
aWxkZXI7CiBjbGFzcyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJs
aWMgU1ZHRWxlbWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMpOwogcHVibGljOgotICAgIHZvaWQgc2V0U3RhbmRhcmRB
dHRyaWJ1dGVzKEZpbHRlckVmZmVjdCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0ID0gMDsKICAgICAvLyBSZXR1cm5zIHRydWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlm
ZmVyZW50IGZyb20gdGhlIG9sZCBvbmUuCiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVj
dEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5k
ZXggMzg1YWYyOTA4NDhhM2QwYjgzZjEyYWM5NjE5ZTZiZjk2YzlmMjM5Ni4uNjhkNGM3ODIyMTU2
NDkyZDU5MDY3MDcxNTJlNDhiM2E2NzZmODE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTM1LDQ2ICszNSw0MSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIs
IFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYg
cHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Oklt
YWdlKQorRkVJbWFnZTo6RkVJbWFnZShSZWZQdHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgOiBGaWx0ZXJF
ZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKQogICAgICwgbV9pbWFnZShpbWFnZSkK
ICAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQog
Ci1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwg
Y29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHBy
ZXNlcnZlQXNwZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFn
ZSkKK0ZFSW1hZ2U6OkZFSW1hZ2UoVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYg
aHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJh
dGlvKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAg
ICAsIG1fdHJlZVNjb3BlKCZ0cmVlU2NvcGUpCiAgICAgLCBtX2hyZWYoaHJlZikKICAgICAsIG1f
cHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCi1SZWY8RkVJ
bWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1h
Z2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNw
ZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKFJlZlB0cjxJ
bWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVB
c3BlY3RSYXRpbykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZpbHRlciwg
aW1hZ2UsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
RUltYWdlKGltYWdlLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLVJlZjxGRUltYWdlPiBG
RUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUm
IHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBo
cmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0
aW8pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIHRyZWVTY29w
ZSwgaHJlZiwgcHJlc2VydmVBc3BlY3RSYXRpbykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFSW1hZ2UodHJlZVNjb3BlLCBocmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLXZv
aWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZFSW1h
Z2U6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVj
dCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7CisgICAgRmxvYXRSZWN0IGltYWdl
UmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKKwogICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAg
IHNyY1JlY3Quc2V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNw
ZWN0UmF0aW8udHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOwotICAgIH0gZWxzZSBp
ZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAg
ICAgc3JjUmVjdCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJl
ci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0KLSAgICBpZiAoY2xpcHNUb0Jv
dW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgICAg
ICBGbG9hdFJlY3Qgc3JjUmVjdCA9IHsgeyB9LCBtX2ltYWdlLT5zaXplKCkgfTsKKyAgICAgICAg
bV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoaW1hZ2VSZWN0LCBzcmNSZWN0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihp
bWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIFJlbmRlckVsZW1lbnQqIEZFSW1h
Z2U6OnJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0CkBAIC04NywzNyArODIsMzcgQEAgUmVuZGVy
RWxlbWVudCogRkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3QKICAgICByZXR1cm4g
dGFyZ2V0LmVsZW1lbnQtPnJlbmRlcmVyKCk7CiB9CiAKLXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogewogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJl
bmNlZFJlbmRlcmVyKCk7CiAgICAgaWYgKCFtX2ltYWdlICYmICFyZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBGRUltYWdlIHJlc3VsdHMg
YXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNldFJlc3Vs
dENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIGF1dG8mIG91
dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9
IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gb3V0cHV0LnByaW1pdGl2ZVN1YnJl
Z2lvbigpOworICAgIGRlc3RSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAg
IEZsb2F0UmVjdCBzcmNSZWN0OwotICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgc3JjUmVjdCA9
IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJl
Y3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0gICAgZWxzZSB7CisgICAgaWYgKHJlbmRlcmVyKSB7
CisgICAgICAgIHNyY1JlY3QgPSByZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0
ZXMoKTsKKyAgICAgICAgc3JjUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAg
fSBlbHNlIHsKICAgICAgICAgc3JjUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1faW1h
Z2UtPnNpemUoKSk7CiAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0
KGRlc3RSZWN0LCBzcmNSZWN0KTsKICAgICB9CiAKLSAgICBJbnRQb2ludCBwYWludExvY2F0aW9u
ID0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAgIGF1dG8gcGFpbnRMb2NhdGlv
biA9IG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgZGVzdFJlY3Qu
bW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7CiAKICAgICBhdXRv
JiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAogICAgIGlmIChyZW5kZXJlcikg
ewotICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0gZmls
dGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oYWJz
b2x1dGVUcmFuc2Zvcm0pOworICAgICAgICBjb250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKIAogICAgICAgICBSZWZQdHIgY29udGV4dE5vZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50
PihyZW5kZXJlci0+ZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGNvbnRleHROb2RlLT5oYXNSZWxh
dGl2ZUxlbmd0aHMoKSkgewpAQCAtMTMyLDEwICsxMjcsMTEgQEAgdm9pZCBGRUltYWdlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZW50VHJh
bnNmb3JtYXRpb247CiAgICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVU
b0NvbnRleHQoY29udGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGNvbnRleHQu
ZHJhd0ltYWdlKCptX2ltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIFRleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRleCBh
YzE2MGVkY2U3YzBlMGEwNjdiZGVmYmQ3MDdmMmFiZTU1OTA4MWI2Li4yZDRiMzM1MmU1ODNkZmQ4
YzVmMzlkNTM1ODBkMDc5ZDM5NTcxZGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zNCwyMiArMzQsMjIgQEAgY2xhc3MgVHJl
ZVNjb3BlOwogCiBjbGFzcyBGRUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwg
UmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAg
c3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVT
Y29wZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYp
OworICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKFJlZlB0cjxJbWFnZT4s
IGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHN0YXRpYyBSZWY8RkVJ
bWFnZT4gY3JlYXRlV2l0aElSSVJlZmVyZW5jZShUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIH5GRUltYWdlKCkgPSBkZWZhdWx0OwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPElt
YWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgRkVJbWFnZShG
aWx0ZXImLCBUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUmKTsKKyAgICBGRUltYWdlKFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIEZFSW1hZ2UoVHJlZVNjb3BlJiwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKLSAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFSW1hZ2UiOyB9CisgICAg
UmVuZGVyRWxlbWVudCogcmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3Q7CiAKLSAgICBGaWx0ZXJF
ZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBGaWx0ZXJF
ZmZlY3RUeXBlSW1hZ2U7IH0KKyAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JT
cGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KIAotICAgIFJl
bmRlckVsZW1lbnQqIHJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0OworICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBmaW5hbDsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmlu
YWw7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgZmluYWw7
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CiAKICAgICBSZWZQdHI8SW1h
Z2U+IG1faW1hZ2U7CkBAIC02MSwzICs2MSw1IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUlt
YWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ci5jcHAKaW5kZXggOWE5NGE0NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5MmI3YmNlNy4uNjI0
ZmVjMzVhOGQ2OWI0NTlhMzcxMTMwMjViNmQ5YzBlYTNmMDRmNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yMiwyOSArMjIs
OTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2lu
Y2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNW
R0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihhYnNvbHV0ZVRyYW5zZm9ybSkK
LSAgICAsIG1fYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFic29sdXRlU291cmNlRHJhd2lu
Z1JlZ2lvbikKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVs
ZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9u
LCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KQoreworICAgIHJldHVybiBjcmVhdGUoZmls
dGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
UmVnaW9uLCBjbGlwT3BlcmF0aW9uLCBmaWx0ZXJSZWdpb24sICZwcmV2aW91c0VmZmVjdCk7Cit9
CisKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQm
IGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6
ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0Jv
eCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlclNj
YWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbjo6SW50ZXJz
ZWN0LCB0YXJnZXRCb3VuZGluZ0JveCwgbnVsbHB0cik7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+
IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0Zp
bHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJv
dW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KQoreworICAgIGJvb2wgcHJp
bWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpID09
IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKKworICAgIGF1
dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoZmlsdGVyU2NhbGUsIHNvdXJjZUlt
YWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBjbGlwT3BlcmF0aW9uLCB0YXJnZXRCb3VuZGluZ0JveCwg
cHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKSk7CisKKyAgICBpZiAoIXByZXZpb3VzRWZmZWN0KQor
ICAgICAgICBidWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoU291cmNlR3JhcGhpYzo6Y3JlYXRl
KCkpOworICAgIGVsc2UKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKHsgKnBy
ZXZpb3VzRWZmZWN0IH0pOworCisgICAgYnVpbGRlci5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJn
ZXRCb3VuZGluZ0JveCk7CisgICAgYnVpbGRlci5zZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJFbGVt
ZW50LnByaW1pdGl2ZVVuaXRzKCkpOworCisgICAgYXV0byBsYXN0RWZmZWN0ID0gYnVpbGRlci5i
dWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7CisgICAgaWYgKCFsYXN0RWZmZWN0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgZXhw
cmVzc2lvbjsKKyAgICBpZiAoIWJ1aWxkZXIuYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24pKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGZpbHRlci0+c2V0TGFzdEVmZmVjdChXVEZN
b3ZlKGxhc3RFZmZlY3QpKTsKKyAgICBmaWx0ZXItPnNldEV4cHJlc3Npb24oV1RGTW92ZShleHBy
ZXNzaW9uKSk7CisgICAgcmV0dXJuIGZpbHRlcjsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIo
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uIGNsaXBP
cGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGJvb2wgZWZmZWN0
QkJveE1vZGUpCisgICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpTVkdGaWx0ZXIsIGZpbHRlclNj
YWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgY2xpcE9wZXJhdGlvbikKICAgICAs
IG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpCi0gICAgLCBtX2ZpbHRlclJl
Z2lvbihmaWx0ZXJSZWdpb24pCiAgICAgLCBtX2VmZmVjdEJCb3hNb2RlKGVmZmVjdEJCb3hNb2Rl
KQogewotICAgIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBS
ZWN0KGZpbHRlclJlZ2lvbik7CiB9CiAKLUZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QKK0Zsb2F0U2l6ZSBTVkdGaWx0ZXI6
OnNjYWxlZFNpemVCeUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKIHsK
KyAgICBGbG9hdFNpemUgcmVzb2x2ZWRTaXplID0gc2l6ZTsKICAgICBpZiAobV9lZmZlY3RCQm94
TW9kZSkKLSAgICAgICAgc2l6ZSA9IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKTsK
KyAgICAgICAgcmVzb2x2ZWRTaXplID0gcmVzb2x2ZWRTaXplICogbV90YXJnZXRCb3VuZGluZ0Jv
eC5zaXplKCk7CisKKyAgICByZXR1cm4gRmlsdGVyOjpzY2FsZWRTaXplQnlGaWx0ZXJTY2FsZShy
ZXNvbHZlZFNpemUpOworfQorCitib29sIFNWR0ZpbHRlcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCit7CisgICAgc2V0U291cmNlSW1hZ2UoeyBmaWx0ZXIuc291cmNlSW1hZ2UoKSB9KTsK
KyAgICByZXR1cm4gYXBwbHlGaWx0ZXIoKTsKK30KIAotICAgIHJldHVybiBGaWx0ZXI6OnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbihzaXplKSAqIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24uc2l6ZSgp
IC8gbV9maWx0ZXJSZWdpb24uc2l6ZSgpOworYm9vbCBTVkdGaWx0ZXI6OmFwcGx5RmlsdGVyKCkK
K3sKKyAgICBpZiAobV9leHByZXNzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2V4cHJlc3Npb24pIHsKKyAgICAgICAgaWYg
KCFlZmZlY3QtPmFwcGx5KCp0aGlzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworSW50T3V0c2V0cyBTVkdGaWx0ZXI6Om91dHNldHMo
KSBjb25zdAoreworICAgIHJldHVybiBtX2xhc3RFZmZlY3QtPm91dHNldHMoKTsKIH0KIAotUmVm
PFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNv
bHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdp
b24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQordm9pZCBTVkdGaWx0ZXI6OmNsZWFy
RmlsdGVySW1hZ2UoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihhYnNv
bHV0ZVRyYW5zZm9ybSwgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGlu
Z0JveCwgZmlsdGVyUmVnaW9uLCBlZmZlY3RCQm94TW9kZSkpOworICAgIG1fbGFzdEVmZmVjdC0+
Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApp
bmRleCA4MDkzMTQ2ZDY0YWY4ODg1YmMzZGE0OTMwMmY1YWVhMGZiMTcwMGNmLi5lNDZhZmU3YjU0
NTQxNDlhYWY5Y2Q4ZTM0OTdkZjg1NzUyNjNmZjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMjAsNyArMjAsNiBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpA
QCAtMjksMzIgKzI4LDQxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmls
dGVyQnVpbGRlcjsKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRlciBm
aW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVy
PiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCk7Ci0KLSAgICBGbG9hdFJlY3QgZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lv
bjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2Fic29sdXRlRmlsdGVyUmVnaW9uOyB9CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNy
ZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6
ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbiwgRmlsdGVyRWZmZWN0JiBwcmV2
aW91c0VmZmVjdCk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0
ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2Nh
bGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZp
bHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgc3Rh
dGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVy
QnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJh
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVyRWZmZWN0KiBw
cmV2aW91c0VmZmVjdCk7CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9u
KEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemVCeUZpbHRl
clNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgYXBwbHkoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseUZpbHRlcigpIG92ZXJyaWRlOwog
Ci0gICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOyB9CiAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQogCi0gICAgYm9v
bCBpc1NWR0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkgeyByZXR1cm4gbV9sYXN0RWZmZWN0OyB9CisgICAg
dm9pZCBzZXRMYXN0RWZmZWN0KFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYgbGFzdEVmZmVjdCkgeyBt
X2xhc3RFZmZlY3QgPSBXVEZNb3ZlKGxhc3RFZmZlY3QpOyB9CisgICAgdm9pZCBzZXRFeHByZXNz
aW9uKEZpbHRlckVmZmVjdFZlY3RvciYmIGV4cHJlc3Npb24pIHsgbV9leHByZXNzaW9uID0gV1RG
TW92ZShleHByZXNzaW9uKTsgfQogCiBwcml2YXRlOgotICAgIFNWR0ZpbHRlcihjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRl
U291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwg
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOworICAg
IFNWR0ZpbHRlcihjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVy
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGJvb2wgZWZmZWN0QkJv
eE1vZGUpOworCisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBjbGVhckZpbHRlckltYWdlKCkgb3ZlcnJpZGU7CiAKLSAgICBGbG9hdFJlY3QgbV9hYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb247CiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdC
b3g7Ci0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVGaWx0ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0
IG1fZmlsdGVyUmVnaW9uOwogICAgIGJvb2wgbV9lZmZlY3RCQm94TW9kZTsKKworICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9l
eHByZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKICAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci5pc1NWR0Zp
bHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNTVkdGaWx0ZXIoKTsgfQogU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA5NmYzYTgwNTA0
Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li4xOTM2NmUxZTkxYjM3YzcwZGFkNTc1NDI1
NGIxZjBmNzE5NDI2NDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMjAsMjAgKzIwLDExMSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKIAotI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUg
IlNvdXJjZUFscGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCisjaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRl
ckJ1aWxkZXIoUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKK3ZvaWQgU1ZHRmls
dGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyhSZWY8RmlsdGVyRWZmZWN0PiBzb3VyY2VH
cmFwaGljKQogewotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVj
dE5hbWUoKSwgc291cmNlR3JhcGhpYyk7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNl
QWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgqc291cmNlR3JhcGhpYykp
OworICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwg
c291cmNlR3JhcGhpYy5wdHIoKSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxw
aGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZShzb3VyY2VHcmFwaGljKSk7CiAg
ICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKIH0KIAorI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKK3N0YXRpYyBDb2xvckludGVycG9sYXRpb24gY29sb3JJbnRl
cnBvbGF0aW9uRm9yRWxlbWVudChTVkdFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlmIChhdXRv
IHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIt
PnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCk7CisKKyAgICAv
LyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHRoZSBjb21wdXRlZCBz
dHlsZS4KKyAgICBpZiAoYXV0byB2YWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IoJmVsZW1l
bnQpLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJzKSkg
eworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gQ29sb3JJbnRlcnBvbGF0aW9uOjpBdXRvOworfQorI2VuZGlmCisKK3N0YXRpYyB1
bnNpZ25lZCBjb2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgSGFzaFNl
dDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykKK3sKKyAgICBhbGxFZmZlY3RzLmFk
ZChlZmZlY3QpOworICAgIHVuc2lnbmVkIHNpemUgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
IEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOworICAgICAgICBjb2xs
ZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7CisgICAgfQorICAgIHJldHVybiBhbGxFZmZlY3Rz
LnNpemUoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cyhj
b25zdCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCit7CisgICAgSGFzaFNldDxjb25zdCBGaWx0
ZXJFZmZlY3QqPiBhbGxFZmZlY3RzOworICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cygmbGFzdEVm
ZmVjdCwgYWxsRWZmZWN0cyk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1
aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50
KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cyA9
IDEwMDsKKworICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291
bnRDaGlsZE5vZGVzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGVmZmVjdDsKKworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxk
cmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxl
bWVudCkpIHsKKyAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5idWlsZCgqdGhpcyk7Cisg
ICAgICAgIGlmICghZWZmZWN0KSB7CisgICAgICAgICAgICBjbGVhckVmZmVjdHMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBlZmZlY3RC
b3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlZmZlY3RFbGVtZW50LCBtX3ByaW1pdGl2ZVVu
aXRzLCBtX3RhcmdldEJvdW5kaW5nQm94KTsKKyAgICAgICAgCisgICAgICAgIE9wdGlvblNldDxG
aWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M+IGZsYWdzOworICAgICAgICBpZiAoZWZmZWN0RWxlbWVu
dC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChG
aWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1gpOworCisgICAgICAgIGlmIChlZmZlY3RFbGVt
ZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRk
KEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWSk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVs
ZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQorICAgICAgICAgICAgZmxh
Z3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzV2lkdGgpOworCisgICAgICAgIGlm
IChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCisgICAg
ICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNIZWlnaHQpOwor
ICAgICAgICAKKyAgICAgICAgZWZmZWN0LT5zZXRCb3VuZGFyeVNldCh7IGVmZmVjdEJvdW5kYXJp
ZXMsIGZsYWdzIH0pOworCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVB
Ul9TUkdCKQorICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZlY3RF
bGVtZW50KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVm
ZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVh
clNSR0IoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlZmZlY3RFbGVt
ZW50LnJlbmRlcmVyKCkpCisgICAgICAgICAgICBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5j
ZXMoZWZmZWN0LmNvcHlSZWYoKSwgcmVuZGVyZXIpOworCisgICAgICAgIGFkZChlZmZlY3RFbGVt
ZW50LnJlc3VsdCgpLCBlZmZlY3QpOworICAgIH0KKworICAgIGlmICghZWZmZWN0IHx8IHRvdGFs
TnVtYmVyRmlsdGVyRWZmZWN0cygqZWZmZWN0KSA+IG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0
cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZWZmZWN0OworfQorCiB2
b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZp
bHRlckVmZmVjdD4gZWZmZWN0KQogewogICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKQEAgLTkyLDE1
ICsxODMsNDMgQEAgdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMoKQogICAgIGFk
ZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQordm9pZCBTVkdGaWx0ZXJCdWlsZGVy
OjpjbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKLSAg
ICBpZiAoIWVmZmVjdC0+aGFzUmVzdWx0KCkpCisgICAgaWYgKCFlZmZlY3QuZmlsdGVySW1hZ2Uo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIGVm
ZmVjdC5jbGVhckZpbHRlckltYWdlKCk7CisKKyAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IGVm
ZmVjdFJlZmVyZW5jZXMoJmVmZmVjdCkpCisgICAgICAgIGNsZWFyRmlsdGVySW1hZ2VzUmVjdXJz
aXZlKCpyZWZlcmVuY2UpOworfQorCitzdGF0aWMgYm9vbCBidWlsZEVmZmVjdEV4cHJlc3Npb24o
Y29uc3QgUmVmUHRyPEZpbHRlckVmZmVjdD4mIGVmZmVjdCwgRmlsdGVyRWZmZWN0VmVjdG9yJiBz
dGFjaywgRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKQoreworICAgIC8vIEEgY3ljbGUg
aXMgZGV0ZWN0ZWQuCisgICAgaWYgKHN0YWNrLmNvbnRhaW5zKGVmZmVjdCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGV4cHJlc3Npb24uaW5zZXJ0KDAsIGVmZmVjdCk7CisKKyAgICBz
dGFjay5hcHBlbmQoZWZmZWN0KTsKKworICAgIGZvciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpKSB7CisgICAgICAgIGlmICghYnVpbGRFZmZlY3RFeHByZXNzaW9u
KGlucHV0RWZmZWN0LCBzdGFjaywgZXhwcmVzc2lvbikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChz
dGFjay5sYXN0KCkgPT0gZWZmZWN0KTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KIAotICAgIGZvciAoYXV0byYgcmVmZXJlbmNlIDogZWZmZWN0UmVmZXJl
bmNlcyhlZmZlY3QpKQotICAgICAgICBjbGVhclJlc3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsK
K2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKEZpbHRlckVmZmVjdFZlY3Rv
ciYgZXhwcmVzc2lvbikgY29uc3QKK3sKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7Cisg
ICAgcmV0dXJuIGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihtX2xhc3RFZmZlY3QsIHN0YWNrLCBleHBy
ZXNzaW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGM3
N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEzM2U3NjQ2MGNlOTdmYTcuLjU2YWQ2NzBjMjk3ZjY3NGZh
YWI0Mzk3ZmQxMmY1M2YwOGNmODU5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTM3LDcgKzM3LDcgQEAg
Y2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoU2V0PEZp
bHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKIAotICAgIFNWR0ZpbHRlckJ1aWxkZXIoUmVm
UHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAgU1ZHRmlsdGVyQnVpbGRlcigp
ID0gZGVmYXVsdDsKIAogICAgIHZvaWQgc2V0VGFyZ2V0Qm91bmRpbmdCb3goY29uc3QgRmxvYXRS
ZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSByOyB9CiAgICAgRmxvYXRSZWN0IHRhcmdl
dEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQpAQCAt
NjMsNyArNjMsMTEgQEAgcHVibGljOgogICAgIGlubGluZSBGaWx0ZXJFZmZlY3QqIGVmZmVjdEJ5
UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QpIHsgcmV0dXJuIG1fZWZmZWN0UmVuZGVyZXIu
Z2V0KG9iamVjdCk7IH0KIAogICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7Ci0gICAgdm9pZCBjbGVh
clJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CisgICAgdm9pZCBjbGVhckZpbHRlcklt
YWdlc1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QmKTsKKworICAgIHZvaWQgc2V0dXBCdWlsdGluRWZm
ZWN0cyhSZWY8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKTsKKyAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZEZpbHRlckVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYpOworICAgIGJvb2wg
YnVpbGRFeHByZXNzaW9uKEZpbHRlckVmZmVjdFZlY3RvciYgZXhwcmVzc2lvbikgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMoKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGRl
MGQ5ZjI3MTFkNGZmNWQyNzk5NTBhMTI0NTA5Njc3ZDQ1ZDk3ZjguLmEwYmM3NTdkNGZlNTMwMDdl
Y2FmOTEyZGEwMzYyYTBkMzRmMmIxZTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0xMS0w
NyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFBy
b2Nlc3NdIFJlZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5l
dyBjbGFzcyBuYW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTEtMDIgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBSZW1vdmUgdGhlIHJlZmVyZW5jZSB0byBGaWx0ZXIgZnJvbSBGaWx0ZXJFZmZlY3QKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjU1MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0d28gZmFpbHVy
ZXMgcmVsYXRlZCB0byB0aGUgY29sb3Igc3BhY2UgdG8gVGVzdEV4cGVjdGF0aW9ucy4KKworICAg
ICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTAtMzEgIFNhaWQgQWJvdS1IYWxsYXdh
ICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRl
ciBob2xkcyBhIGxpc3Qgb2YgRmlsdGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjEtMTEt
MDYgIFR5bGVyIFdpbGNvY2sgIDx0eWxlcl93QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogV2Vi
S2l0MSBQbHVnaW5WaWV3QmFzZSBvYmplY3RzIHdpdGggYW4gYXNzb2NpYXRlZCB3aWRnZXQoKS0+
cGxhdGZvcm1XaWRnZXQoKSBzaG91bGQgYmUgY29uc2lkZXJlZCBhdHRhY2htZW50cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443516</attachid>
            <date>2021-11-07 11:58:14 -0800</date>
            <delta_ts>2021-11-07 12:45:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211107115813.patch</filename>
            <type>text/plain</type>
            <size>404912</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Mzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFmY2VkZDdjN2I5YTYz
ZDEwOTAwZmNkMTRlOWNkODBlNDE0ZTU3NS4uOWRiNGFlNDljZGFmNGE2ZDU5ZGIxYjMzNmFiNjJl
YzY1NTZiMzk0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5MiBAQAorMjAyMS0xMS0wNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFNpbXBsaWZ5IEZpbHRlckVmZmVjdCBnZW9tZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJj
ZUdyYXBoaWMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFudExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmNhbGN1bGF0
ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojppc0FscGhhSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRVRpbGU6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29y
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmNsaXBPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpzY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6bWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6Y2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6Om1hcFBvaW50RnJvbVVz
ZXJTcGFjZVRvQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHlG
aWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6RmlsdGVyQm91bmRhcnlTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OnggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyQm91bmRhcnlTZXQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJv
dW5kYXJ5U2V0OjpoZWlnaHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRl
UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFp
bnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbGxlY3RFZmZlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVz
dGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3RzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVySW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRCb3VuZGFyeVNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cGxhdGZvcm1BcHBseUNvcmVJbWFnZSBjb25z
dCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpu
dW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldElzQWxwaGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmFic29sdXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6aGFzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpoYXNZIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6c2V0SGFzWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Omhhc1dpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6c2V0SGFzV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRIYXNIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZm
ZWN0Qm91bmRhcmllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1bHRDb2xvclNwYWNlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0UmVzdWx0
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpub3JtYWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFn
ZTo6cHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjppbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6Omlz
QWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50
TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6Om91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJj
ZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICog
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjphcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpidWlsZEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
cHBseUZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjp0b3Rh
bE51bWJlckZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxk
ZXI6OmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTExLTA3ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVmYWN0b3IgdGhlIEZpbHRlckVmZmVjdCByZXN1bHQgYnVmZmVycyBpbnRvIGEgbmV3IGNs
YXNzIG5hbWVkICdGaWx0ZXJJbWFnZScKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1vdmUgdGhlIHN0b3JhZ2UgYW5kIHRoZSBsb2dpYyBmb3IgbWFuYWdp
bmcgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUKKyAgICAgICAgRmlsdGVyRWZmZWN0IHRvIGl0
cyBpbnB1dHMgdG8gYSBuZXcgY2FsbHMgbmFtZWQgJ0ZpbHRlclJlc3VsdCcuIFRoaXMgd2lsbAor
ICAgICAgICBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgRmlsdGVyRWZmZWN0LiBJdCB3
aWxsIGFsc28gYWxsb3cgaW50ZWdyYXRpbmcKKyAgICAgICAgdGhlIENvcmVJbWFnZSBzZWFtbGVz
c2x5IGFuZCBzaW1wbGlmeWluZyB0aGUgZ2VvbWV0cnkgY2FsY3VsYXRpb24uCisKKyAgICAgICAg
SW5zdGVhZCBvZiBoYXZpbmcgdGhyZWUgd2F5cyB0byBjcmVhdGUgdGhlIHJlc3VsdCBvZiBhIEZp
bHRlckVmZmVjdCwgdGhlcmUKKyAgICAgICAgd2lsbCBiZSBvbmUgd2F5IHdoaWNoIGlzIGJ5IGNh
bGxpbmcgRmlsdGVySW1hZ2U6OmNyZWF0ZSgpLiBUaGlzIGNhbGwgd2lsbAorICAgICAgICBub3Qg
Y3JlYXRlIGEgY29uY3JldGUgcmVzdWx0LiBCdXQgcmVxdWVzdGluZyB0aGUgSW1hZ2VCdWZmZXIg
b3IgYSBQaXhlbEJ1ZmZlcgorICAgICAgICBmcm9tIEZpbHRlckltYWdlIHdpbGwgbWFrZSB0aGlz
IGNyZWF0aW9uIGhhcHBlbnMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIHJlcXVpcmVzVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgaXMgcmVwbGFjZWQgYnkgdGhlIG9wcG9zaXRlIAorICAg
ICAgICBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKS4gQ29ycmVjdGluZyB0
aGUgcHJlbXVsdGlwbGllZAorICAgICAgICByZXN1bHQgd2lsbCBiZSBkb25lIGJ5IEZpbHRlckVm
ZmVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Zmls
bFJlZ2lvbldvcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOgorICAgICAgICBDbGVh
cmluZyB0aGUgcmVzdWx0IGNhbiBiZSBkb25lIGJ5IG51bGxpZnlpbmcgYSBzaW5nbGUgcG9pbnRl
ci4KKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRVbnByZW11bHRpcGxpZWRSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRQcmVtdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVucHJlbXVsdGlwbGllZFJl
c3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29y
cmVjdFByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1
ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTog
RGVsZXRlZC4KKyAgICAgICAgQWxsIHRoZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMgd2FzIG1v
dmVkIHRvIEZpbHRlckltYWdlLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1Jlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVm
ZmVjdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXlQcm9kdWNlSW52
YWxpZFByZW11bHRpcGxpZWRQaXhlbHMgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0VHlw
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om91dHNl
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0
ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFn
ZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisyMDIxLTExLTAyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gRmlsdGVyIGZyb20gRmlsdGVyRWZmZWN0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI1NTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9mIGhh
dmluZyBhIHJlZmVyZW5jZSB0byB0aGUgRmlsdGVyIGluIHRoZSBGaWx0ZXJFZmZlY3QsIHdlIGFy
ZQorICAgICAgICBnb2luZyB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoZSBGaWx0ZXIgdG8gdGhl
IEZpbHRlckVmZmVjdCBmdW5jdGlvbnMKKyAgICAgICAgb25seSB3aGVuIG5lZWRlZC4KKworICAg
ICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9y
dHNDb3JlSW1hZ2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJs
ZW5kOjpGRUJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZF
Q29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFu
Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVN
ZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3Bl
Y3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OkZFVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OmZpbGxSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpmaWxsUmVnaW9uV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6c291cmNlSW1hZ2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJ
bWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpmaWx0ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBw
bHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VH
cmFwaGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3RO
YW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6IERlbGV0
ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlQ29jb2EuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZm
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpvdXRwdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5k
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVu
dDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAg
ICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWls
ZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAg
ICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRUZsb29kRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpi
dWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRUltYWdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdl
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVP
ZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRl
ckVmZmVjdHMpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaDoKKworMjAyMS0xMC0zMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4K
KworICAgICAgICBbR1BVIFByb2Nlc3NdIE1ha2UgQ1NTRmlsdGVyIGhvbGRzIGEgbGlzdCBvZiBG
aWx0ZXJGdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjQ2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEluIHRoaXMgcGF0Y2gsIHRoZSBDU1MgcmVmZXJlbmNlIGZpbHRlciBpcyBidWlsdCBh
cyBhbiBTVkdGaWx0ZXIgYW5kIGl0CisgICAgICAgIGlzIGtlcHQgYXMgYSBGaWx0ZXJGdW5jdGlv
biBpbiB0aGUgQ1NTRmlsdGVyIGZ1bmN0aW9ucycgbGlzdC4gVGhlIEZpbHRlciAKKyAgICAgICAg
YXNzb2NpYXRlZCB3aXRoIHRoZSBGaWx0ZXJFZmZlY3RzIG9mIHRoZSByZWZlcmVuY2VkIGZpbHRl
ciB3aWxsIGJlIGFuCisgICAgICAgIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyBhIENTU0Zp
bHRlci4gVGhpcyB3aWxsIGFsbG93IGhhdmluZyBjb2xvcgorICAgICAgICBzcGFjaW5nIGZvciB0
aGUgcmVmZXJlbmNlZCBmaWx0ZXJzIGRpZmZlcmVudCBmcm9tIHRoZSBjb2xvciBzcGFjaW5nIG9m
CisgICAgICAgIENTU0ZpbHRlci4gCisKKyAgICAgICAgQWxzbyB0aGlzIHBhdGNoIG1ha2VzIGEg
c2luZ2xlIGZ1bmN0aW9uIGZvciBidWlsZGluZyB0aGUgcHJpbWl0aXZlcyBvZgorICAgICAgICB0
aGUgU1ZHRmlsdGVyIGluc3RlYWQgb2YgaGF2aW5nIHR3byBmdW5jdGlvbnMuCisKKyAgICAgICAg
VG8gYWxsb3cgb3BlcmF0aW5nIHRocm91Z2ggdGhlIFNWR0ZpbHRlciBhcyBhIEZpbHRlckZ1bmN0
aW9uIG93bmVkIGJ5CisgICAgICAgIENTU0ZpbHRlciwgdGhlIFNWR0ZpbHRlciB3aWxsIGhhdmUg
YSBwb2ludGVyIHRvIGl0cyBsYXN0RWZmZWN0LgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVmZmVjdFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQmx1ckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCcmlnaHRuZXNz
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRyYXN0RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlR3JheVNjYWxlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUh1ZVJvdGF0
ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbnZlcnRFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlT3BhY2l0eUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTYXR1cmF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Omxhc3RFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6Om91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJjZUlt
YWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckludGVycG9s
YXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1
aWxkRmlsdGVyRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpT
VkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisKKzIwMjEtMTAtMjggIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIFNWR0ZpbHRlciBh
bmQgQ1NTRmlsdGVyIHdvcmsgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMgc3lzdGVtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgU1ZHRmls
dGVyIHNldHMgdGhlIGZvbGxvd2luZyBtZW1iZXJzIG9mIEZpbHRlcgorCisgICAgICAgIDEuIEFm
ZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOiB0aGlzIGlzIHRoZSBzY2FsaW5nIHBh
cnQgZnJvbSB0aGUKKyAgICAgICAgICAgdHJhbnNmb3JtYXRpb24gZnJvbSB0aGUgdGFyZ2V0IGVs
ZW1lbnQgdG8gdGhlIG91dGVybW9zdCBjb29yZGluYXRlIHN5c3RlbQorICAgICAgICAyLiBGbG9h
dFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOiB0aGlzIGlzIHRoZSBjbGFtcGluZyBzY2FsZSBpZiB0
aGUgc2l6ZQorICAgICAgICAgICBvZiB0aGUgcmVzdWx0IEltYWdlQnVmZmVycyBleGNlZWRzIE1h
eENsYW1wZWRBcmVhCisKKyAgICAgICAgQW5kIHRoZSBDU1NGaWx0ZXIgc2V0cyB0aGUgZm9sbG93
aW5nIG1lbWJlciBvZiBGaWx0ZXI6CisKKyAgICAgICAgMS4gZmxvYXQgbV9maWx0ZXJTY2FsZTog
dGhpcyBpcyB0aGUgZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpCisKKyAgICAgICAgVGhl
IGRpc2NyZXBhbmN5IGhhcHBlbnMgYWxzbyB3aGVuIGNyZWF0aW5nIHRoZSByZXN1bHQgSW1hZ2VC
dWZmZXJzLiBGb3IgCisgICAgICAgIFNWR0ZpbHRlciwgd2UgY3JlYXRlIHRoZW0gd2l0aCBzY2Fs
ZUZhY3Rvcj0xLiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZQorICAgICAgICA9PSBiYWNrZW5k
U2l6ZS4gQnV0IGZvciBDU1NGaWx0ZXIgd2UgY3JlYXRlIHRoZW0gd2l0aCBzY2FsZUZhY3Rvcgor
ICAgICAgICA9IG1fZmlsdGVyU2NhbGUuIFRoaXMgbWVhbnMgdGhlIGxvZ2ljYWxTaXplICE9IGJh
Y2tlbmRTaXplIGluIHRoaXMgY2FzZS4KKworICAgICAgICBXZSBuZWVkIHRvIHVuaWZ5IHRoZSBj
b29yZGluYXRlcyBzeXN0ZW0gZm9yIGJvdGggZmlsdGVycy4gV2UgbmVlZCBhbHNvIHRvCisgICAg
ICAgIHJlcGxhY2UgdGhlIHRocmVlIG1lbWJlcnMgYnkgYSBzaW5nbGUgRmxvYXRTaXplIGNhbGxl
ZCAibV9maWx0ZXJTY2FsZSIuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6
OmZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNldFNvdXJj
ZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2Nh
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpmaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyUmVzb2x1dGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpv
dXRwdXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondy
aXRlU1ZHUmVzb3VyY2VDb250YWluZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRl
clNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoK
KworMjAyMS0xMC0yNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAg
ICAgICBbR1BVIFByb2Nlc3NdIEludHJvZHVjZSBGaWx0ZXJGdW5jdGlvbiBhbmQgbWFrZSBpdCB0
aGUgYmFzZSBjbGFzcyBvZiBGaWx0ZXIgYW5kIEZpbHRlckVmZmVjdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDEzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhbGxvd3MgQ1NTRmlsdGVyIHRv
IGhvbGQgYSBsaXN0IG9mIEZpbHRlckZ1bmN0aW9ucy4gVGhlIEZpbHRlciBpbgorICAgICAgICB0
aGlzIGNhc2Ugd2lsbCBhY3QgbGlrZSBhIGNvbXBvc2l0ZSBwYXR0ZXJuIG9mIHRoZSBGaWx0ZXJF
ZmZlY3QuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvCisgICAgICAgIDEuIFJlbW92ZXMgdGhl
IHZpcnR1YWwgZnVuY3Rpb24gZmlsdGVyTmFtZSgpIGZyb20gYWxsIHRoZSBGaWx0ZXJFZmZlY3QK
KyAgICAgICAgICAgY2xhc3Nlcy4gSXQgcmVwbGFjZXMgaXQgd2l0aCBhIHN0YXRpYyBmdW5jdGlv
biBpbiBGaWx0ZXJGdW5jdGlvbi4KKyAgICAgICAgMi4gUmVtb3ZlcyB0aGUgdmlydHVhbCBmdW5j
dGlvbiBmaWx0ZXJFZmZlY3RUeXBlKCkgYW5kIHRoZSBmdW5jdGlvbgorICAgICAgICAgICBGaWx0
ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlwZSgpIHNpbmNlIHRoZXkgY2FuIGJvdGggYmUg
cmVwbGFjZWQKKyAgICAgICAgICAgYnkgRmlsdGVyRnVuY3Rpb246OmZpbHRlclR5cGUoKS4KKyAg
ICAgICAgMy4gQWRkcyB0cmFpdCBtYWNyb3MgZm9yIGFsbCBGaWx0ZXJFZmZlY3RzIGFuZCB0aGUg
U1ZHRmlsdGVycyBjbGFzcy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpGRUJsZW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRy
aXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
OgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChpc1R5
cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRN
YXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6RkVPZmZzZXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpGRVR1cmJ1bGVuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6Cisg
ICAgICAgIChpc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJF
ZmZlY3RUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6ZmlsdGVyTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZp
bHRlck5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVu
Y3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVy
VHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNDU1NGaWx0
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzU1ZHRmlsdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXJFZmZlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUFscGhhTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlR3JhcGhpY05hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlck5hbWUgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VB
bHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Yzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1h
Z2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorCiAyMDIxLTExLTA2ICBUeWxlciBXaWxjb2NrICA8dHls
ZXJfd0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFdlYktpdDEgUGx1Z2luVmlld0Jhc2Ugb2Jq
ZWN0cyB3aXRoIGFuIGFzc29jaWF0ZWQgd2lkZ2V0KCktPnBsYXRmb3JtV2lkZ2V0KCkgc2hvdWxk
IGJlIGNvbnNpZGVyZWQgYXR0YWNobWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNjQ5MzIxNWRiZDY4
ZTBmMTJiYTJiZjg3YzU0Yjg0MjdmYzdlZGU1Yy4uNmQ0MWIzOTE1MTI3NDZkNGRjMDhhZTFiZmZl
NTRmMjUwYTBhYmJlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwODksNiArMjA4OSw4IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGZkNTkxOGE4NTRkZThhOThmMmVmYjE0MDQ3ODFmY2Q3Y2FkOTQ3MGYuLmNmNTU5
ZTZkZGM5OTdhMjYyZGFjMDNkYWZkZTVhYjdiN2M4MDg3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTYsNiArMjI5Niw3
IEBACiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4
QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgw
RDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5
U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0
RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJG
QjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1h
Z2UuaCAqLzsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUx
MjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8q
IE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0
MDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwODQ0LDYgKzEwODQ1LDggQEAKIAkJNzI0RUU1
NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2Vy
dmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFu
Z2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENB
REMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZl
SW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQx
MDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2
QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAw
ODMzOTc1IC8qIFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNjZGMDE0MjI0MUJGQjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9y
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUg
LyogU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmlt
aXRpdmVQcm9wZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDg1NCw2ICsxMDg1Nyw5IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmlt
YXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
aW9uQWRkaXRpdmVMaXN0RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNjZGMDI5MjI0MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RG
dW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5
NzUgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjky
NzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI2QkUwMkIyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNkJFMDM5MjczMzRCNDIwMDczOEZGRCAvKiBGaWx0ZXJCb3VuZGFyeVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODg5OCwxMSArMTg5MDQsMTEgQEAKIAkJMUE1NjlDQzQwRDdFMkI2MDAw
N0MzOTgzIC8qIGJyaWRnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCi0JCQkJMUE1NjlDRTIwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamMgKi8sCiAJCQkJNTk5RTc1
OEYxMTA1NUExRjAwRDkwNEZBIC8qIEJyaWRnZS5oICovLAogCQkJCTFBNzFENTc5MEYzMzgxOTAw
MEY5Q0U0RSAvKiBJZGVudGlmaWVyUmVwLmNwcCAqLywKIAkJCQkxQTcxRDU3QTBGMzM4MTkwMDBG
OUNFNEUgLyogSWRlbnRpZmllclJlcC5oICovLAogCQkJCTU5QjU5NzcxMTEwODY1NTYwMDcxNTlF
OCAvKiBqc2MgKi8sCisJCQkJMUE1NjlDRTIwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamMgKi8sCiAJ
CQkJMUE1NjlDRUYwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXkuY3BwICovLAogCQkJ
CTFBNTY5Q0YwMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5LmggKi8sCiAJCQkJMUE1
NjlDRjEwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9kLmNwcCAqLywKQEAgLTI1ODQy
LDEwICsyNTg0OCwxNSBAQAogCQkJCTg0NzMwRDZGMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1
bGVuY2UuY3BwICovLAogCQkJCTg0NzMwRDcwMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVu
Y2UuaCAqLywKIAkJCQk4NDVFNzJGNzBGRDI2MUVFMDBBODdENzkgLyogRmlsdGVyLmggKi8sCisJ
CQkJNzI2QkUwMzkyNzMzNEI0MjAwNzM4RkZEIC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8sCiAJ
CQkJMDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8sCiAJCQkJ
MDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAogCQkJCTJDODU2
NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJ
MkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJ
CQkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLywKKwkJ
CQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKKwkJCQk3
MjZCRTAyOTI3MkZCMTcxMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuY3BwICovLAorCQkJCTcyNkJF
MDJCMjcyRkIxNzIwMDczOEZGRCAvKiBGaWx0ZXJJbWFnZS5oICovLAogCQkJCTQ5RUNFQjYzMTQ5
OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uY3BwICovLAogCQkJCTQ5RUNFQjY0MTQ5
OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLywKIAkJCQk0OUVDRUI2NTE0OTk3
OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8sCkBAIC0zMzMzMCw2ICszMzM0
MSw3IEBACiAJCQkJMDhDOTI1MUEwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkM4NTY1MzQyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVj
dFJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQ0FBNEEzQTI0QkUxOEI3MDA5REVFNzAg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
NkJFMDJEMjcyRkIxNzIwMDczOEZGRCAvKiBGaWx0ZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTM3MkMwMEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
RmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5jcHAKaW5kZXggYzY3YTM1YjA3MTViNzIxZWQ4OTkyZGVjZDQ5ZmE4ZDBiODA2NDc3MC4u
MjljNzZmODNlM2U1ZDRiNDc2M2QxYmI4YjBmOTYxMGNiMmU3MzgyYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2LDIwICsxMTYsMjEgQEAgUmVm
UHRyPEltYWdlPiBDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgRmxvYXRTaXoKIAogICAgIC8vIFRyYW5zZm9ybSBJbWFnZSBpbnRvIEltYWdl
QnVmZmVyLgogICAgIC8vIEZJWE1FICgxNDk0MjQpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIGF1dG8gdGV4dHVyZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAgaWYg
KCF0ZXh0dXJlKQorICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7CisgICAgYXV0byBzb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgcmVuZGVyaW5nTW9kZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKICAgICAgICAgcmV0dXJuICZJ
bWFnZTo6bnVsbEltYWdlKCk7CiAKLSAgICBhdXRvIGltYWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsg
fSwgc2l6ZSB9OwotICAgIHRleHR1cmUtPmNvbnRleHQoKS5kcmF3SW1hZ2UoKmltYWdlLCBpbWFn
ZVJlY3QpOworICAgIGF1dG8gc291cmNlSW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXpl
IH07CisgICAgc291cmNlSW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2UoKmltYWdlLCBzb3VyY2VJ
bWFnZVJlY3QpOwogCi0gICAgYXV0byBjc3NGaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwot
ICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2UoV1RGTW92ZSh0ZXh0dXJlKSk7Ci0gICAgY3Nz
RmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJlY3QoaW1hZ2VSZWN0KTsKLSAgICBjc3NGaWx0ZXItPnNl
dEZpbHRlclJlZ2lvbihpbWFnZVJlY3QpOwotICAgIGlmICghY3NzRmlsdGVyLT5idWlsZChyZW5k
ZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24p
KQorICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVuZGVyZXIsIG1fZmls
dGVyT3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7CisgICAgaWYgKCFjc3NGaWx0ZXIpCiAgICAg
ICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwotICAgIGNzc0ZpbHRlci0+YXBwbHkoKTsK
KworICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7Cisg
ICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHNvdXJjZUltYWdlKSk7CisgICAg
Y3NzRmlsdGVyLT5hcHBseUZpbHRlcigpOwogCiAgICAgYXV0byogb3V0cHV0ID0gY3NzRmlsdGVy
LT5vdXRwdXQoKTsKICAgICBpZiAoIW91dHB1dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCA4OGNlOTQyNDk3M2Y3OGJiZjE5ZWIz
ZjFjMzk3ODA0ZWQwZTczZmY2Li5iOGU5OGQ3YTgyOWViOWJmMjRkNTczNWFhYThkMjVhZWE5OTk5
ZGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwCkBAIC0xMzMsNyArMTMzLDcgQEAgYm9vbCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplLCBGbG9hdFNpemUmIHNjYWxlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBUaGUgYXJlYSBvZiBzY2FsZWQgc2l6ZSBpcyBiaWdnZXIg
dGhhbiB0aGUgdXBwZXIgbGltaXQsIGFkanVzdCB0aGUgc2NhbGUgdG8gZml0LgotICAgIHNjYWxl
LnNjYWxlKHNxcnRmKE1heENsYW1wZWRBcmVhIC8gKHNjYWxlZFNpemUud2lkdGgoKSAqIHNjYWxl
ZFNpemUuaGVpZ2h0KCkpKSk7CisgICAgc2NhbGUuc2NhbGUoc3FydGYoTWF4Q2xhbXBlZEFyZWEg
LyBzY2FsZWRTaXplLmFyZWEoKSkpOwogICAgIEFTU0VSVCghc2l6ZU5lZWRzQ2xhbXBpbmcoc2l6
ZSwgc2NhbGUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKaW5kZXggZTZjOGRmNGQ1NWI0NTYxMzU0OWUzYWY0
OTE5MmEyNmUyYzA0NGFmNy4uN2NkMTZhMjg1ZmU5ZTA5YmExYWU0NzI2MTBlOTg2MGM3MmZiYzc1
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgK
QEAgLTQ3LDIwICs0NywyMCBAQCBjbGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZSA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZT4gdHJ5Q3JlYXRlKEZpbHRl
ckVmZmVjdCYpOwogICAgIFJldGFpblB0cjxDSUNvbnRleHQ+IHNoYXJlZENJQ29udGV4dCgpOwot
ICAgIHZvaWQgYXBwbHlFZmZlY3RzKEZpbHRlckVmZmVjdCYpIGZpbmFsOworICAgIHZvaWQgYXBw
bHlFZmZlY3RzKGNvbnN0IEZpbHRlciYsIEZpbHRlckVmZmVjdCYpIGZpbmFsOwogICAgIGJvb2wg
aGFzUmVzdWx0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vdXRwdXRJbWFnZTsgfQogICAgIElt
YWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCBmaW5hbDsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3Qo
Y29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0IGZpbmFsOwogICAgIHZv
aWQgY2xlYXJSZXN1bHQoKSBmaW5hbDsKICAgICBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZSgpOwogICAgIAogcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gY29ubmVjdENJRmls
dGVycyhGaWx0ZXJFZmZlY3QmKTsKLSAgICB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVy
RWZmZWN0JikgZmluYWw7CisgICAgUmV0YWluUHRyPENJSW1hZ2U+IGNvbm5lY3RDSUZpbHRlcnMo
Y29uc3QgRmlsdGVyJiwgRmlsdGVyRWZmZWN0Jik7CisgICAgdm9pZCByZW5kZXJUb0ltYWdlQnVm
ZmVyKGNvbnN0IEZpbHRlciYsIEZpbHRlckVmZmVjdCYpIGZpbmFsOwogICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYpOwogICAgIHN0YXRpYyBi
b29sIGNhblJlbmRlclVzaW5nQ0lGaWx0ZXJzKEZpbHRlckVmZmVjdCYpOwogICAgIAotICAgIFJl
dGFpblB0cjxDSUltYWdlPiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYpOwor
ICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoY29uc3QgRmlsdGVy
Jik7CiAgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb2xvck1hdHJpeChjb25zdCBG
RUNvbG9yTWF0cml4JiwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxDSUltYWdlPj4mKTsKICAgICBS
ZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IEZFQ29t
cG9uZW50VHJhbnNmZXImLCBWZWN0b3I8UmV0YWluUHRyPENJSW1hZ2U+PiYpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCmluZGV4IDk3
ZTExMzdiMjlkNzFjMmI1NDQxNTczMDY3MjQwMGI4MjQyOGIzNjEuLmJkZDUxZjU1YTMyODJkNDlh
ZjA2ODljOTBkNTg4Y2Q1ZGY5NzVkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KQEAgLTcyLDExICs3MiwxMSBAQCBzdGF0aWMgYm9vbCBp
c051bGxPckxpbmVhckNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25lbnRU
cmFuc2ZlciYgZQogYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHND
b3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiB7CiAgICAgLy8gRklYTUU6
IGNoYW5nZSByZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0g
ICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKKyAgICBzd2l0Y2gg
KGVmZmVjdC5maWx0ZXJUeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291
cmNlR3JhcGhpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKKyAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6RkVDb2xvck1hdHJpeDogewogICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29s
b3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1VOS05PV046CiAgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEE6CkBAIC04OCw5MCArODgsNTUgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmYKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFu
c2ZlcjoKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcjoK
ICAgICAgICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihk
b3duY2FzdDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKIAotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9z
aXRlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGlu
ZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9m
ZnNldDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxw
aGE6CisgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmFwcGx5
RWZmZWN0cyhGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCit2b2lkIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlckVm
ZmVjdCYgbGFzdEVmZmVjdCkKIHsKLSAgICBtX291dHB1dEltYWdlID0gY29ubmVjdENJRmlsdGVy
cyhsYXN0RWZmZWN0KTsKKyAgICBtX291dHB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycyhmaWx0
ZXIsIGxhc3RFZmZlY3QpOwogICAgIGlmICghbV9vdXRwdXRJbWFnZSkKICAgICAgICAgcmV0dXJu
OwotICAgIHJlbmRlclRvSW1hZ2VCdWZmZXIobGFzdEVmZmVjdCk7CisgICAgcmVuZGVyVG9JbWFn
ZUJ1ZmZlcihmaWx0ZXIsIGxhc3RFZmZlY3QpOwogfQogCi1SZXRhaW5QdHI8Q0lJbWFnZT4gRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0
JiBlZmZlY3QpCitSZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OmNvbm5lY3RDSUZpbHRlcnMoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlckVmZmVjdCYg
ZWZmZWN0KQogewogICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0lJbWFnZT4+IGlucHV0SW1hZ2VzOwog
ICAgIAogICAgIGZvciAoYXV0byBpbiA6IGVmZmVjdC5pbnB1dEVmZmVjdHMoKSkgewotICAgICAg
ICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKCppbik7CisgICAgICAgIGF1dG8g
aW5wdXRJbWFnZSA9IGNvbm5lY3RDSUZpbHRlcnMoZmlsdGVyLCAqaW4pOwogICAgICAgICBpZiAo
IWlucHV0SW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaW5wdXRJ
bWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwogICAgIH0KLSAgICBlZmZlY3QuZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKTsKLSAgICBlZmZlY3Quc2V0UmVzdWx0Q29sb3JTcGFjZShlZmZlY3Qu
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAKLSAgICBpZiAoZWZmZWN0LmFic29sdXRlUGFp
bnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhlZmZl
Y3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpKQorCisgICAgYXV0byBhYnNvbHV0ZUltYWdl
UmVjdCA9IGVmZmVjdC5jYWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVjdChmaWx0ZXIpOworICAgIGlm
IChhYnNvbHV0ZUltYWdlUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKGFic29sdXRlSW1hZ2VSZWN0LnNpemUoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpKSB7Cisg
ICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyVHlwZSgpKSB7CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNvdXJjZUdyYXBoaWM6Ci0gICAgICAgIHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBo
aWMoZG93bmNhc3Q8U291cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkNvbG9yTWF0cml4OgorICAgICAgICByZXR1cm4gaW1hZ2VGb3JTb3VyY2VHcmFw
aGljKGZpbHRlcik7CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29sb3JNYXRyaXg6
CiAgICAgICAgIHJldHVybiBpbWFnZUZvckZFQ29sb3JNYXRyaXgoZG93bmNhc3Q8RkVDb2xvck1h
dHJpeD4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpDb21wb25lbnRUcmFuc2ZlcjoKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21w
b25lbnRUcmFuc2ZlcjoKICAgICAgICAgcmV0dXJuIGltYWdlRm9yRkVDb21wb25lbnRUcmFuc2Zl
cihkb3duY2FzdDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpLCBpbnB1dEltYWdlcyk7CiAK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRob3NlIGZpbHRlcnMgdXNpbmcgQ0lGaWx0ZXIgc28g
dGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHZhbGlkIENJSW1hZ2UKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbXBv
c2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29udm9sdmVNYXRyaXg6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpZmZ1c2VMaWdodGluZzoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50TWFwOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGbG9vZDoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6R2F1c3NpYW5CbHVyOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TGlnaHRp
bmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok1lcmdlOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpP
ZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNwZWN1bGFyTGlnaHRpbmc6Ci0g
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFs
cGhhOgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYyYgZWZmZWN0
KQorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFn
ZUZvclNvdXJjZUdyYXBoaWMoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlID0gZWZmZWN0LmZpbHRlcigpLnNvdXJjZUltYWdlKCk7CisgICAgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CiAgICAgaWYgKCFz
b3VyY2VJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0yNzMsMjIgKzIz
OCwyMiBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6Om91dHB1
dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fb3V0cHV0SW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAgICAg
Ci12b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVy
KEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKK3ZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlckVm
ZmVjdCYgbGFzdEVmZmVjdCkKIHsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUobGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7
Ci0gICAgbV9vdXRwdXRJbWFnZUJ1ZmZlciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVhdGUo
Y2xhbXBlZFNpemUsIGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSwgbGFzdEVmZmVj
dC5yZXN1bHRDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgSW50U2l6ZSBk
ZXN0U2l6ZSA9IGxhc3RFZmZlY3QuY2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJlY3QoZmlsdGVyKS5z
aXplKCk7CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRT
aXplKGRlc3RTaXplKTsKKyAgICBtX291dHB1dEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgMSwgbGFzdEVmZmVjdC5pbWFnZUNvbG9yU3BhY2Uo
KSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIW1fb3V0cHV0SW1hZ2VCdWZmZXIpIHsK
ICAgICAgICAgY2xlYXJSZXN1bHQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFtz
aGFyZWRDSUNvbnRleHQoKS5nZXQoKSByZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0KCkgdG9JT1N1
cmZhY2U6IG1fb3V0cHV0SW1hZ2VCdWZmZXItPnN1cmZhY2UoKS5zdXJmYWNlKCkgYm91bmRzOmRl
c3RSZWN0KGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5yZXN1bHRDb2xvclNwYWNl
KCkucGxhdGZvcm1Db2xvclNwYWNlKCldOworICAgIFtzaGFyZWRDSUNvbnRleHQoKS5nZXQoKSBy
ZW5kZXI6IG1fb3V0cHV0SW1hZ2UuZ2V0KCkgdG9JT1N1cmZhY2U6IG1fb3V0cHV0SW1hZ2VCdWZm
ZXItPnN1cmZhY2UoKS5zdXJmYWNlKCkgYm91bmRzOmRlc3RSZWN0KGZpbHRlciwgbGFzdEVmZmVj
dCkgY29sb3JTcGFjZTpsYXN0RWZmZWN0LmltYWdlQ29sb3JTcGFjZSgpLnBsYXRmb3JtQ29sb3JT
cGFjZSgpXTsKIH0KICAgICAKLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFn
ZTo6ZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdAorRmxvYXRS
ZWN0IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpkZXN0UmVjdChjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KSBjb25zdAogewotICAgIElu
dFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwot
ICAgIGRlc3RTaXplLnNjYWxlKGxhc3RFZmZlY3QuZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7Cisg
ICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3QuY2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJl
Y3QoZmlsdGVyKS5zaXplKCk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgZGVzdFNpemUpOwogICAgIHJldHVybiBkZXN0UmVjdDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggMjYxMTBjZGZiMGJiNmNmNDkwNDU4Mzg3Nzg3YWMxMGZh
MTcxY2YxOC4uZDM3MGYwMjJlYTExYWFhMDFhYzI3MGJjNDI3Yjk3OGY1OTc2NDQ0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2Fy
bS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTI1LDggKzI1LDcgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBGRUJsZW5kTkVPTl9oCi0jZGVmaW5lIEZFQmxlbmRORU9OX2gKKyNw
cmFnbWEgb25jZQogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogCkBAIC0xMDcsNDMg
KzEwNiw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwot
ICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0g
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRh
KCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3Vy
Y2VQaXhlbEFycmF5QSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVj
dCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8gc291
cmNlUGl4ZWxBcnJheUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdS
ZWN0KTsKLQotICAgIHVuc2lnbmVkIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPSBzb3VyY2VQaXhl
bEFycmF5QS0+bGVuZ3RoKCk7Ci0gICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPT0gc291cmNl
UGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKLQotICAgIGlmIChzb3VyY2VQaXhlbEFycmF5TGVuZ3Ro
ID49IDgpIHsKLSAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oc291cmNlUGl4ZWxBcnJheUEtPmRh
dGEoKSwgc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5LmRh
dGEoKSwgc291cmNlUGl4ZWxBcnJheUxlbmd0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgLy8gSWYgdGhlcmUgaXMganVzdCBvbmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KLSAg
ICBBU1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwotICAgIHVpbnQzMl90IHNvdXJj
ZUFbMl0gPSB7MCwgMH07Ci0gICAgdWludDMyX3Qgc291cmNlQkFuZERlc3RbMl0gPSB7MCwgMH07
Ci0KLSAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBp
eGVsQXJyYXlBLT5kYXRhKCkpWzBdOwotICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOwotICAgIHBs
YXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUEpLCByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7Ci0gICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERlc3Rb
MF07Ci19Ci0KLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciog
c3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBj
aGFyKiBkc3RQaXhlbEFycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjb2xvckFycmF5TGVuZ3RoKQordm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1
bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJh
eUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5n
dGgpCiB7CiAgICAgdWludDhfdCogc291cmNlUGl4ZWxBID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oc3JjUGl4ZWxBcnJheUEpOwogICAgIHVpbnQ4X3QqIHNvdXJjZVBpeGVsQiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNyY1BpeGVsQXJyYXlCKTsKQEAgLTIwMiw4ICsxNjUsNDYg
QEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhl
bEFycmF5QSwgdW5zaWduZWQgY2hhciogc3IKICAgICB9CiB9CiAKK2Jvb2wgRkVCbGVuZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCit7CisgICAgYXV0byYgaW5wdXQgPSAq
aW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0
RWZmZWN0KDEpLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFn
ZSgpOworCisgICAgYXV0byYgb3VwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91cHV0UGl4
ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVs
QXJyYXkgPSBvdXB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VS
ZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOworICAgIGF1dG8g
aW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QpOworCisgICAgYXV0byBpbnB1dElt
YWdlUmVjdDIgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dDIpOworICAg
IGF1dG8gaW5wdXRQaXhlbEFycmF5MiA9IGlucHV0Mi5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdDIpOworCisgICAgdW5z
aWduZWQgaW5wdXRQaXhlbEFycmF5TGVuZ3RoID0gaW5wdXRQaXhlbEFycmF5LT5sZW5ndGgoKTsK
KyAgICBBU1NFUlQoaW5wdXRQaXhlbEFycmF5TGVuZ3RoID09IGlucHV0UGl4ZWxBcnJheTItPmxl
bmd0aCgpKTsKKworICAgIGlmIChpbnB1dFBpeGVsQXJyYXlMZW5ndGggPj0gOCkgeworICAgICAg
ICBwbGF0Zm9ybUFwcGx5TkVPTihpbnB1dFBpeGVsQXJyYXktPmRhdGEoKSwgaW5wdXRQaXhlbEFy
cmF5Mi0+ZGF0YSgpLCBvdXRwdXRQaXhlbEFycmF5LmRhdGEoKSwgaW5wdXRQaXhlbEFycmF5TGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUgaXMg
anVzdCBvbmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KKyAgICBBU1NFUlQoaW5wdXRQaXhl
bEFycmF5TGVuZ3RoID4gMCk7CisgICAgdWludDMyX3Qgc291cmNlQVsyXSA9IHsgMCwgMCB9Owor
ICAgIHVpbnQzMl90IHNvdXJjZUJBbmREZXN0WzJdID0geyAwLCAwIH07CisKKyAgICBzb3VyY2VB
WzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGlucHV0UGl4ZWxBcnJheS0+ZGF0YSgp
KVswXTsKKyAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihpbnB1dFBpeGVsQXJyYXkyLT5kYXRhKCkpWzBdOworCisgICAgcGxhdGZvcm1BcHBseU5FT04o
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNl
QkFuZERlc3QpLCA4KTsKKyAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ob3V0cHV0UGl4
ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERlc3RbMF07CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQotCi0jZW5kaWYgLy8gRkVCbGVuZE5FT05faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGln
aHRTb3VyY2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkM2ViMDdmNDhlZTFkMDJiYmZmY2M2YjA0NDFm
ODkuLjFmYjAzN2ZlMTFmNjY5MWVkMDM5NGE0NGVhY2NkMDI3OWJiNmQwYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rp
c3RhbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBG
aWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRGlzdGFudExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdCYsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewogICAgIGZsb2F0IGF6aW11dGgg
PSBkZWcycmFkKG1fYXppbXV0aCk7CiAgICAgZmxvYXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2Vs
ZXZhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCBjMWUzMGVkZTc1OTgzNzI4
YTYzMmJjY2ZmYjA5OTczYTNhNGU3MmZkLi4wMDNmZTE5Y2QxMjYyMzk5NjdiMWIyMjI2ZmQ3OTA1
NTQyYmViZDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAgLTQxLDcgKzQxLDcgQEAg
cHVibGljOgogICAgIGJvb2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBz
ZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRh
KGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQg
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWlu
dGluZ0RhdGEmKSBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4
ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6
KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmluZGV4IDVhYzdm
NDkwZDRjZGE1MzNhNDFmNWMzZDg1NDUzMmMxOGFkY2RiNjYuLjk4NzY1NzNjZmYyNzQxNjU0YmJk
MzUyYTI4MGFmMzA5YTg0ZmE2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMzQsMTUgKzM0LDE1IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRkVCbGVuZDo6RkVCbGVuZChGaWx0ZXImIGZpbHRlciwgQmxl
bmRNb2RlIG1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpCbGVuZCkKK0ZF
QmxlbmQ6OkZFQmxlbmQoQmxlbmRNb2RlIG1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVy
RWZmZWN0OjpUeXBlOjpGRUJsZW5kKQogICAgICwgbV9tb2RlKG1vZGUpCiB7CiB9CiAKLVJlZjxG
RUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQor
UmVmPEZFQmxlbmQ+IEZFQmxlbmQ6OmNyZWF0ZShCbGVuZE1vZGUgbW9kZSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKGZpbHRlciwgbW9kZSkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFQmxlbmQobW9kZSkpOwogfQogCiBib29sIEZFQmxlbmQ6OnNldEJsZW5kTW9k
ZShCbGVuZE1vZGUgbW9kZSkKQEAgLTU0LDIzICs1NCwyOSBAQCBib29sIEZFQmxlbmQ6OnNldEJs
ZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKIH0KIAogI2lmICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJ
Q1MpCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgp
OworICAgIGF1dG8mIGlucHV0MiA9ICppbnB1dEVmZmVjdCgxKS0+ZmlsdGVySW1hZ2UoKTsKKyAg
ICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFn
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9
IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1h
Z2VCdWZmZXIoKTsKKyAgICBhdXRvIGlucHV0SW1hZ2UyID0gaW5wdXQyLmltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFpbnB1dEltYWdlIHx8ICFpbnB1dEltYWdlMikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAg
IGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFp
bWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBp
bnB1dEltYWdlUmVjdCA9IEZsb2F0UmVjdChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0
KG91dHB1dCkpOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QyID0gRmxvYXRSZWN0KGlucHV0Mi5y
ZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOwogCi0gICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIEdyYXBoaWNzQ29udGV4
dCYgb3V0cHV0Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBvdXRwdXRD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZTIsIGlucHV0SW1hZ2VSZWN0Mik7Cisg
ICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VS
ZWN0LCB7IHsgfSwgaW5wdXRJbWFnZS0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBvc2l0ZU9wZXJh
dG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuaAppbmRleCA3MGU4NDA3YmY1YzIwMGQ0NTIxNmI4ZjljMDg1MTdiNTA3OWU3OTY2Li4zMzY5
M2MxOTk3YmJhN2JiZGU4ODkwNTg3YjE1NmVlZTMzNzZjNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtMjMsMjIgKzIz
LDIxIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZFQmxlbmQgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShGaWx0ZXImLCBCbGVuZE1vZGUpOwor
ICAgIHN0YXRpYyBSZWY8RkVCbGVuZD4gY3JlYXRlKEJsZW5kTW9kZSk7CiAKICAgICBCbGVuZE1v
ZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBzZXRCbGVu
ZE1vZGUoQmxlbmRNb2RlKTsKIAogcHJpdmF0ZToKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQmxlbmQiOyB9CisgICAgRkVCbGVuZChCbGVuZE1v
ZGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBi
b29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICB2
b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1
bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJh
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgp
OwogICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJh
eUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhl
bEFycmF5LApAQCAtNDYsMTAgKzQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRkVCbGVuZChGaWx0ZXImLCBCbGVuZE1vZGUp
OwotCiAgICAgQmxlbmRNb2RlIG1fbW9kZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQmxlbmQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAppbmRleCAxNjQyMmQ2ZGM1YjU3ZWM2Zjc0N2E0MjEwYzI4NTQzMzJiYTFkM2U1
Li5hOWU1MjJhOGVjYzdlYWM4MzU5ZjkyM2YwZDc5MzU3Nzc1NjRhZGJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAKQEAgLTM1LDE2ICszNSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
Q29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIENvbG9yTWF0cml4VHlw
ZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRl
ciwgVHlwZTo6Q29sb3JNYXRyaXgpCitGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KENvbG9y
TWF0cml4VHlwZSB0eXBlLCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQorICAgIDogRmlsdGVyRWZm
ZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeCkKICAgICAsIG1fdHlwZSh0eXBl
KQogICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1ZXMpKQogewogfQogCi1SZWY8RkVDb2xvck1h
dHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBDb2xvck1hdHJpeFR5
cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKK1JlZjxGRUNvbG9yTWF0cml4PiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2
YWx1ZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb2xvck1hdHJpeChmaWx0ZXIs
IHR5cGUsIFdURk1vdmUodmFsdWVzKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29s
b3JNYXRyaXgodHlwZSwgV1RGTW92ZSh2YWx1ZXMpKSk7CiB9CiAKIGJvb2wgRkVDb2xvck1hdHJp
eDo6c2V0VHlwZShDb2xvck1hdHJpeFR5cGUgdHlwZSkKQEAgLTI3MywyMyArMjczLDM5IEBAIHZv
aWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgfQogfQogCi12b2lkIEZFQ29sb3JNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFQ29sb3JNYXRyaXg6OmlzQWxwaGFJbWFnZSgp
IGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIHJl
dHVybiBtX3R5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE7Cit9CiAK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKK1ZlY3RvcjxmbG9hdD4g
RkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1
ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQorICAgICAg
ICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7CisgICAg
cmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCit7CisgICAgYXV0byYgaW5wdXQgPSAqaW5w
dXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlcklt
YWdlKCk7CisgICAgCisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigp
OworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIElt
YWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmIChp
bkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIo
KmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7CisgICAgYXV0byBpbnB1dEJ1ZmZlciA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAg
aWYgKGlucHV0QnVmZmVyKSB7CisgICAgICAgIGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBGbG9h
dFJlY3QoaW5wdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICAgICAg
b3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0QnVmZmVyLCBhYnNv
bHV0ZUltYWdlUmVjdCk7CisgICAgfQogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdC
QTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50
KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVs
QnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsK
KyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgb3V0cHV0LmNvbG9yU3BhY2UoKSB9
OworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIG91dHB1dEltYWdlLT50cnVuY2F0
ZWRMb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdl
dFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIHBpeGVs
QXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwogICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwpAQCAtMzEwLDExICszMjYsMTEgQEAgdm9pZCBGRUNv
bG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgogICAgICAgICBlZmZlY3RU
eXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFycmF5LCB2YWx1
ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgc2V0SXNBbHBoYUltYWdlKHRydWUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworICAgIG91dHB1dEltYWdlLT5wdXRQaXhlbEJ1
ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1h
dHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDI5ZTQxYThhZWQxZTRmMGI1Mzk3
MDNhYzRkYjU1MjRlZmE0YzEyM2YuLmMzZjhiZDBiYzRhODU4NWZiMTM2MzFjYzdkZmYxYmU0ZjM4
NDIzMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC0yMiw4ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszNiw3
IEBAIGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVDb2xvck1hdHJpeCA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVDb2xvck1hdHJpeD4g
Y3JlYXRlKEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKKyAgICBz
dGF0aWMgUmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShDb2xvck1hdHJpeFR5cGUsIFZlY3Rvcjxm
bG9hdD4mJik7CiAKICAgICBDb2xvck1hdHJpeFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQogICAgIGJvb2wgc2V0VHlwZShDb2xvck1hdHJpeFR5cGUpOwpAQCAtNDgsMTMgKzQ2
LDE0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0
ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKICAgICBzdGF0aWMg
aW5saW5lIHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50
cywgZmxvYXQgdmFsdWUpOwotCisgICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZs
b2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpOworICAgIAogcHJpdmF0ZToKLSAgICBG
RUNvbG9yTWF0cml4KEZpbHRlciYsIENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsK
KyAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKIAot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb2xv
ck1hdHJpeCI7IH0KKyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC05Myw3ICs5Miw0IEBAIGlubGluZSB2
b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNv
bXBvbmVudHMsIGZsb2F0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpGRUNvbG9yTWF0cml4KQotICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZm
ZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6VHlw
ZTo6Q29sb3JNYXRyaXg7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29sb3JNYXRyaXgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCA4NDdlYTU4ZjVmOWIwMzg2NmQ5ZWFjNTdmMTBjY2Y1
NzQwMmY5ZTYzLi4yY2Q3Y2ZjYjU1YjY1Zjc4ZTlhNWJmNDExYjhiOGJlZDI1MmY5OWJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTMzLDkgKzMzLDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVy
KEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
dGlvbiwKLSAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9u
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24pCi0gICAgOiBGaWx0ZXJFZmZl
Y3QoZmlsdGVyLCBUeXBlOjpDb21wb25lbnRUcmFuc2ZlcikKK0ZFQ29tcG9uZW50VHJhbnNmZXI6
OkZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVk
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuY3Rpb24s
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKKyAgICA6IEZpbHRlckVmZmVj
dChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXIpCiAgICAgLCBtX3JlZEZ1
bmN0aW9uKHJlZEZ1bmN0aW9uKQogICAgICwgbV9ncmVlbkZ1bmN0aW9uKGdyZWVuRnVuY3Rpb24p
CiAgICAgLCBtX2JsdWVGdW5jdGlvbihibHVlRnVuY3Rpb24pCkBAIC00MywxMCArNDIsMTAgQEAg
RkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXIKIHsKIH0KIAotUmVmPEZFQ29tcG9uZW50VHJhbnNmZXI+
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCitSZWY8RkVDb21wb25lbnRUcmFuc2Zl
cj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmN0aW9uLAogICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGdyZWVuRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5j
dGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jdGlvbikKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVudFRyYW5zZmVyKGZpbHRlciwgcmVk
RnVuY3Rpb24sIGdyZWVuRnVuY3Rpb24sIGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9uZW50VHJhbnNmZXIocmVkRnVuY3Rpb24s
IGdyZWVuRnVuY3Rpb24sIGJsdWVGdW5jdGlvbiwgYWxwaGFGdW5jdGlvbikpOwogfQogCiB2b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCkBAIC0xMDQsMTMgKzEwMywxNCBAQCB2
b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudAogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKLSAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCkt
PmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKICAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOwogCkBAIC0xMjAsOCArMTIwLDkgQEAgdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIExvb2t1cFRhYmxlIGFscGhh
VGFibGU7CiAgICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1
ZVRhYmxlLCBhbHBoYVRhYmxlKTsKIAotICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0
ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGluLT5jb3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2lu
Z1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9
IG91dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0KTsKKyAgICBpbnB1dC5jb3B5
UGl4ZWxCdWZmZXIoZGVzdGluYXRpb25QaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OworCiAgICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoID0gZGVzdGluYXRp
b25QaXhlbEFycmF5Lmxlbmd0aCgpOwogICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBp
eGVsQXJyYXkuZGF0YSgpOwogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhl
bE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkg
ewpAQCAtMTMwLDYgKzEzMSw4IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxl
W2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9
IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKICAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVz
KExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRh
YmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuaAppbmRleCAyYjU4NmRlZjdmYjQyYTM3YjJlMTIzZWRhODcxMTljNGViMzQ4YTUx
Li42YWRhOWMwYWJiZTVjMmY5ZDY1YmQ5MTlmZmVjNGYxNzNkMDAzNDE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuaApAQCAtMjIsOCArMjIsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsOCArNTEsNyBAQCBzdHJ1
Y3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB7CiAKIGNsYXNzIEZFQ29tcG9uZW50VHJhbnNm
ZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29t
cG9uZW50VHJhbnNmZXI+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1
bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIGFscGhhRnVuYyk7CisgICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVy
PiBjcmVhdGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jKTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gcmVkRnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3JlZEZ1bmN0aW9uOyB9CiAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiBncmVlbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmVlbkZ1bmN0aW9uOyB9
CkBAIC02MiwxMCArNTksNyBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biBhbHBoYUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUZ1bmN0aW9uOyB9CiAKIHBy
aXZhdGU6Ci0gICAgRkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBncmVlbkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
YWxwaGFGdW5jKTsKLQotICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkZFQ29tcG9uZW50VHJhbnNmZXIiOyB9CisgICAgRkVDb21wb25lbnRUcmFuc2Zl
cihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1
bmMpOwogCiAgICAgdXNpbmcgTG9va3VwVGFibGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47
CiAKQEAgLTc3LDcgKzcxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcHV0ZUxvb2t1cFRh
YmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29r
dXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJsZSk7CiAKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTg5LDYgKzgzLDQgQEAgcHJpdmF0ZToKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXIpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0
Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFu
c2ZlcjsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19GSUxURVJfRUZGRUNUKEZFQ29tcG9uZW50VHJhbnNmZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmlu
ZGV4IDgzMzUzMDkwODFhMjZiYTJjMzFjM2JkYWM4ODg2NjllMjhlMzQ1NmQuLjM0YmU4YTc2YzI3
MGVkN2E5OGVkNjgyYzAxYzdhYjUxN2UzODk5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0zMiw4
ICszMiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb3NpdGU6OkZFQ29tcG9z
aXRlKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBm
bG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OkNvbXBvc2l0ZSkKK0ZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShjb25z
dCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
Q29tcG9zaXRlKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX2sxKGsxKQogICAgICwgbV9r
MihrMikKQEAgLTQyLDkgKzQyLDkgQEAgRkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG8KIHsKIH0KIAot
UmVmPEZFQ29tcG9zaXRlPiBGRUNvbXBvc2l0ZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBjb25z
dCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCkKK1JlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShjb25z
dCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0
IGszLCBmbG9hdCBrNCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvc2l0ZShm
aWx0ZXIsIHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVDb21wb3NpdGUodHlwZSwgazEsIGsyLCBrMywgazQpKTsKIH0KIAogYm9vbCBGRUNvbXBvc2l0
ZTo6c2V0T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgdHlwZSkKQEAgLTg3LDE0ICs4
Nyw2IEBAIGJvb2wgRkVDb21wb3NpdGU6OnNldEs0KGZsb2F0IGs0KQogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKQot
ewotICAgIGlmIChtX3R5cGUgIT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLX0K
LSAgICAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykKIHsKICAgICB1bnNp
Z25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwg
MCB9OwpAQCAtMjAxLDEwMCArMTkzLDEwNyBAQCBpbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZTo6cGxh
dGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdQogI2Vu
ZGlmCiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkK
K0Zsb2F0UmVjdCBGRUNvbXBvc2l0ZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46Ci0g
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfQVRPUDogewogICAgICAgICAvLyBGb3IgSW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVm
ZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgogICAgICAgICAvLyB0aGUgc2Vjb25k
IGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29u
ZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3Qo
MSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBjbGlwQWJzb2x1dGVQYWludFJlY3Qo
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiBpbnB1dDIgPSAqaW5wdXRFZmZlY3Qo
MSktPmZpbHRlckltYWdlKCk7CisgICAgICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0
aXZlU3VicmVnaW9uKGlucHV0Mi5pbWFnZVJlY3QoKSwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKyAg
ICB9CisKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6CiAgICAgICAg
IC8vIEFyaXRobWV0aWMgbWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUg
cmVnaW9uLiBTbyB3ZSBjYW4ndAogICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9u
IGhlcmUuCi0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4
RWZmZWN0UmVjdCgpKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZpbHRlci5t
YXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKKwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KLSAgICAg
ICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdChm
aWx0ZXIsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KKyAg
ICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRv
JiBpbnB1dDIgPSAqaW5wdXRFZmZlY3QoMSktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0
cHV0ID0gKmZpbHRlckltYWdlKCk7CisgICAgCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICAgICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRv
IG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpOworICAgICAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgICAg
ICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAot
ICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291
cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVj
dCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRp
b25QaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
Ci0KLSAgICAgICAgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoKnNvdXJjZVBpeGVsQXJyYXks
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFi
c29sdXRlSW1hZ2VSZWN0KGlucHV0KTsKKyAgICAgICAgYXV0byBpbnB1dFBpeGVsQXJyYXkgPSBp
bnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBpbnB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgaWYgKCFp
bnB1dFBpeGVsQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICBhdXRvIGlucHV0SW1hZ2VSZWN0MiA9IG91dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VS
ZWN0KGlucHV0Mik7CisgICAgICAgIGlucHV0Mi5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxB
cnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJl
Y3QyLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICAKKyAgICAgICAgcGxhdGZvcm1B
cml0aG1ldGljU29mdHdhcmUoKmlucHV0UGl4ZWxBcnJheSwgb3V0cHV0UGl4ZWxBcnJheSwgbV9r
MSwgbV9rMiwgbV9rMywgbV9rNCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0g
ICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4
dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAgYXV0byBvdXRw
dXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGlu
LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBp
bjItPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byYgZmlsdGVyQ29udGV4dCA9IG91dHB1
dEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gaW5wdXQuaW1hZ2VC
dWZmZXIoKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyMiA9IGlucHV0Mi5pbWFnZUJ1ZmZlcigpOwog
ICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gRmxvYXRS
ZWN0KGlucHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3Qob3V0cHV0KSk7CisgICAgYXV0byBp
bnB1dEltYWdlUmVjdDIgPSBGbG9hdFJlY3QoaW5wdXQyLnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJl
Y3Qob3V0cHV0KSk7CisgICAgCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09N
UE9TSVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIyLCBpbnB1dEltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0SW1hZ2VSZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogewogICAgICAgICAvLyBBcHBsaWVzIG9ubHkg
dG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KLSAgICAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJl
Y3QgPSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0Lmlu
dGVyc2VjdChpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBkZXN0aW5hdGlvblJl
Y3QuaW50ZXJzZWN0KGFic29sdXRlUGFpbnRSZWN0KCkpOworICAgICAgICBhdXRvIGRlc3RpbmF0
aW9uUmVjdCA9IGlucHV0LmFic29sdXRlSW1hZ2VSZWN0KCk7CisgICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5pbnRlcnNlY3QoaW5wdXQyLmFic29sdXRlSW1hZ2VSZWN0KCkpOworICAgICAgICBkZXN0
aW5hdGlvblJlY3QuaW50ZXJzZWN0KG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKICAgICAg
ICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAt
IGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2VS
ZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24o
KTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluMi0+
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlv
blJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5hdGlv
blJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZUluIH0pOworICAgICAgICBhdXRvIGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRp
b25SZWN0IC0gb3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkubG9jYXRpb24oKTsKKyAgICAgICAg
YXV0byBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW5wdXQuYWJzb2x1dGVJbWFnZVJl
Y3QoKS5sb2NhdGlvbigpOworICAgICAgICBhdXRvIHNvdXJjZVJlY3QyID0gZGVzdGluYXRpb25S
ZWN0IC0gaW5wdXQyLmFic29sdXRlSW1hZ2VSZWN0KCkubG9jYXRpb24oKTsKKyAgICAgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgYWRqdXN0ZWREZXN0aW5h
dGlvblJlY3QsIHNvdXJjZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCwgc291cmNlUmVjdCwg
eyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4gfSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09VVDoKLSAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSB9
LCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0SW1hZ2VSZWN0KTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW5wdXRJbWFn
ZVJlY3QyLCB7IHsgfSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9w
ZXJhdG9yOjpEZXN0aW5hdGlvbk91dCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJh
dG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyMiwgaW5wdXRJbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdlUmVjdCwgeyB7IH0sIGltYWdl
QnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW5wdXRJbWFnZVJlY3QyKTsK
KyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1
dEltYWdlUmVjdCwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0
ZU9wZXJhdG9yOjpYT1IpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSks
IHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6
UGx1c0xpZ2h0ZXIpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIyLCBpbnB1dEltYWdlUmVjdDIpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0SW1hZ2VSZWN0LCB7IHsgfSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmlu
ZGV4IDdkMDhlMWY3MTA3YjRiOTY4YzU4ZTNhMzdjMzJhZTJmNzZhZWEwYzMuLjZiMDdiYTFmOWIw
MDcxOWMwZDc5YjVmN2VjZGNmM2IzZGIzMjM0MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTIyLDggKzIy
LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNs
dWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDEsNyArMzksNyBAQCBlbnVtIENvbXBvc2l0ZU9wZXJhdGlvblR5
cGUgewogCiBjbGFzcyBGRUNvbXBvc2l0ZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb21w
b3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIHN0
YXRpYyBSZWY8RkVDb21wb3NpdGU+IGNyZWF0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBl
JiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwogCiAgICAgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSBvcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldE9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBlKTsKQEAgLTU4LDE4ICs1NiwxMiBAQCBwdWJs
aWM6CiAgICAgZmxvYXQgazQoKSBjb25zdCB7IHJldHVybiBtX2s0OyB9CiAgICAgYm9vbCBzZXRL
NChmbG9hdCk7CiAKLXByb3RlY3RlZDoKLSAgICBib29sIHJlcXVpcmVzVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FSSVRITUVUSUM7IH0KLQogcHJpdmF0ZToKLSAgICBGRUNvbXBvc2l0ZShGaWx0ZXImLCBj
b25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQp
OwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RUNvbXBvc2l0ZSI7IH0KKyAgICBGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25U
eXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwogCi0gICAgdm9pZCBjb3JyZWN0Rmls
dGVyUmVzdWx0SWZOZWVkZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChj
b25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwor
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgaW5saW5lIHZv
aWQgcGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIs
IGZsb2F0IGszLCBmbG9hdCBrNCk7CkBAIC05MCwzICs4Miw0IEBAIHByaXZhdGU6CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNU
KEZFQ29tcG9zaXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggM2JiZTc4MzU5OGQ3
MDkzNWE5NWM2ZjE1NmVjMjkzM2MwZTk5ZjA1MC4uMjVmNGI0OTJlM2I4MjU2ODc0NDY5ZGJlY2Y5
ZmE5ZDhmNjkzYzQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0zMiwxMCArMzIs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9s
dmVNYXRyaXgoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAg
ZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwg
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRM
ZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0
cml4KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29udm9sdmVNYXRyaXgpCitG
RUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNp
emUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZz
ZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExl
bmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRy
aXgpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbnZvbHZlTWF0
cml4KQogICAgICwgbV9rZXJuZWxTaXplKGtlcm5lbFNpemUpCiAgICAgLCBtX2Rpdmlzb3IoZGl2
aXNvcikKICAgICAsIG1fYmlhcyhiaWFzKQpAQCAtNDksMTEgKzQ3LDkgQEAgRkVDb252b2x2ZU1h
dHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2Vy
bmVsU2l6ZSwKICAgICBBU1NFUlQobV9rZXJuZWxTaXplLmhlaWdodCgpID4gMCk7CiB9CiAKLVJl
ZjxGRUNvbnZvbHZlTWF0cml4PiBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCi0gICAgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
LAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVB
bHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KQorUmVmPEZFQ29udm9sdmVN
YXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJuZWxTaXpl
LCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5n
dGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoZmlsdGVyLCBr
ZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRPZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxV
bml0TGVuZ3RoLAorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFQ29udm9sdmVNYXRyaXgoa2Vy
bmVsU2l6ZSwgZGl2aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5p
dExlbmd0aCwKICAgICAgICAgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7CiB9CiAKQEAg
LTM2Nyw0OSArMzYzLDU1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4Ojpz
ZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKICAgICAgICAgZmFzdFNl
dE91dGVyUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKIH0KIAot
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0
IEZFQ29udm9sdmVNYXRyaXg6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIHJldHVybiBmaWx0ZXIubWF4UHJp
bWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CiAKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gY3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlm
ICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworYm9vbCBGRUNvbnZv
bHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK3sKKyAgICBh
dXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBv
dXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvIG91dHB1dFBpeGVs
QnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKG1fcHJlc2VydmVBbHBoYSA/IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8m
IG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VQaXhlbEFycmF5OworICAgIGF1dG8gaW5wdXRJ
bWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dCk7CisgICAg
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpbnB1dFBpeGVsQXJyYXk7CiAgICAgaWYg
KG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT51bm11bHRp
cGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Cisg
ICAgICAgIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CiAgICAgZWxzZQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnBy
ZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7Ci0gICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50
U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKKyAgICAgICAgaW5wdXRQaXhlbEFy
cmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAKKyAgICBp
ZiAoIWlucHV0UGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIElu
dFNpemUgaW1hZ2VTaXplID0gb3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpOworICAg
IAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7Ci0gICAgICAgICpzb3VyY2VQaXhl
bEFycmF5LAotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXksCi0gICAgICAgIHBhaW50U2l6
ZS53aWR0aCgpLAotICAgICAgICBwYWludFNpemUuaGVpZ2h0KCksCisgICAgICAgICppbnB1dFBp
eGVsQXJyYXksCisgICAgICAgIG91dHB1dFBpeGVsQXJyYXksCisgICAgICAgIGltYWdlU2l6ZS53
aWR0aCgpLAorICAgICAgICBpbWFnZVNpemUuaGVpZ2h0KCksCiAgICAgICAgIG1fYmlhcyAqIDI1
NSwKLSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKKyAgICAgICAgRkVD
b2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKICAgICB9OwogCiAg
ICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlwUmlnaHQgPSBw
YWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGludCBjbGlwQm90
dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgpOworICAgIGlu
dCBjbGlwUmlnaHQgPSBpbWFnZVNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOwor
ICAgIGludCBjbGlwQm90dG9tID0gaW1hZ2VTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhl
aWdodCgpOwogCiAgICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKICAg
ICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6aWVkIGZvciBzcGVlZAotICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBw
YWludFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChpbnQgaXRlcmF0
aW9ucyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgp
LmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKKyAgICBpZiAoaW50IGl0ZXJh
dGlvbnMgPSAoaW1hZ2VTaXplLndpZHRoKCkgKiBpbWFnZVNpemUuaGVpZ2h0KCkpIC8gc19taW5p
bWFsUmVjdERpbWVuc2lvbikgewogICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0
ZXJhdGlvbnM7CiAgICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUg
LSAxKSAvIHN0cmlkZTsKIApAQCAtNDI1LDEzICs0MjcsMTUgQEAgdm9pZCBGRUNvbnZvbHZlTWF0
cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGNsaXBSaWdodCArPSBtX3RhcmdldE9m
ZnNldC54KCkgKyAxOwogICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsK
ICAgICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMo
cGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgp
KTsKLSAgICBpZiAoY2xpcEJvdHRvbSA8IHBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgc2V0
T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdE
YXRhLCAwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKKyAgICBp
ZiAoY2xpcEJvdHRvbSA8IGltYWdlU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgc2V0T3V0ZXJQaXhl
bHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VT
aXplLmhlaWdodCgpKTsKICAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKICAgICAgICAg
c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFy
Z2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgaWYgKGNsaXBSaWdodCA8IHBhaW50U2l6
ZS53aWR0aCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdo
dCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xpcEJvdHRvbSk7Cisg
ICAgaWYgKGNsaXBSaWdodCA8IGltYWdlU2l6ZS53aWR0aCgpKQorICAgICAgICBzZXRPdXRlclBp
eGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBpbWFnZVNp
emUud2lkdGgoKSwgY2xpcEJvdHRvbSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlw
ZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2VlNWFi
ODk1YTZlMWU1MDA1NGUxM2RiYS4uYjlhODE4M2ExYjhmZmNlYzM1NTc4ZDNjZTA1YzYyOTY1MzQ5
MjMyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM4LDkgKzM3LDcgQEAgZW51bSBFZGdlTW9kZVR5cGUgewogCiBjbGFzcyBGRUNvbnZvbHZl
TWF0cml4IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxG
RUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsCi0gICAgICAg
ICAgICBmbG9hdCwgZmxvYXQsIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25zdCBG
bG9hdFBvaW50JiwKLSAgICAgICAgICAgIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAg
ICBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBrZXJu
ZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0
T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgs
IGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsK
IAogICAgIEludFNpemUga2VybmVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsU2l6ZTsg
fQogICAgIHZvaWQgc2V0S2VybmVsU2l6ZShjb25zdCBJbnRTaXplJik7CkBAIC03NywxNCArNzQs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7CiAgICAg
fTsKIAotICAgIEZFQ29udm9sdmVNYXRyaXgoRmlsdGVyJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0
LCBmbG9hdCwKLSAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiwgRWRnZU1vZGVUeXBlLCBjb25z
dCBGbG9hdFBvaW50JiwgYm9vbCwgY29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgIEZFQ29udm9s
dmVNYXRyaXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBG
bG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQ29udm9sdmVNYXRyaXgiOyB9CisgICAgRmxvYXRS
ZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKQEAgLTExNSwzICsxMDksNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbnZvbHZl
TWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCBlZWIxNzI4ZGIzNWU4YWMz
MDJiMjdlNGMzZmYzNGNiODg1NWI5ZDA5Li5mNzZjZTJjZTk2NDNlZmRmNmNlMjU2ZTk1NDczNzhh
NDA3ZDEzNDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMjcsMTggKzI3LDE2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVz
ZUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxv
YXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0
U291cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIERpZmZ1c2VMaWdodGluZywgbGlnaHRp
bmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRM
ZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OkRp
ZmZ1c2VMaWdodGluZykKK0ZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhjb25z
dCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQorICAgIDogRkVMaWdodGluZyhEaWZm
dXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50
LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGln
aHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQogewogfQog
Ci1SZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUs
IGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitSZWY8RkVE
aWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURp
ZmZ1c2VMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVz
ZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUo
bGlnaHRTb3VyY2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRp
bmcobGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVu
aXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKIH0K
IAotRkVEaWZmdXNlTGlnaHRpbmc6On5GRURpZmZ1c2VMaWdodGluZygpID0gZGVmYXVsdDsKLQog
Ym9vbCBGRURpZmZ1c2VMaWdodGluZzo6c2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0IGRpZmZ1c2VD
b25zdGFudCkKIHsKICAgICBpZiAobV9kaWZmdXNlQ29uc3RhbnQgPT0gZGlmZnVzZUNvbnN0YW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpZmZ1c2VMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpZmZ1c2VMaWdodGluZy5oCmluZGV4IGRmNjExNGQwZmI4ZTJmM2UxMTI4Yjg0MjYx
NWU0NzUxM2EwZGRkYzMuLjhhMTBhZWM4N2M4ZjE4OWY5ZjA1N2NiOTQ0M2VhYWVkZDUzOGY2OTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKQEAgLTI5LDggKzI5LDcgQEAgY2xhc3MgTGlnaHRT
b3VyY2U7CiAKIGNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXIm
LCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3Vy
Y2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJl
ZjxGRURpZmZ1c2VMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwog
CiAgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZmdXNlQ29u
c3RhbnQ7IH0KICAgICBib29sIHNldERpZmZ1c2VDb25zdGFudChmbG9hdCk7CkBAIC0zOCw4ICsz
Nyw5IEBAIHB1YmxpYzoKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsK
IAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGluZyhGaWx0ZXImLCBjb25zdCBDb2xvciYs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIEZF
RGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
RkVEaWZmdXNlTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDA0NzQ5
MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIxNmM1NjNmYTEuLjA3ZmM4M2NhN2NiNjc1NmU4ZTNl
ODUyYTE5YmU0MGIxYzljNjBlNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0z
MSwxOCArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRURpc3BsYWNlbWVudE1h
cDo6RkVEaXNwbGFjZW1lbnRNYXAoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUg
eENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBm
bG9hdCBzY2FsZSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRpc3BsYWNlbWVu
dE1hcCkKK0ZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxl
Y3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBl
OjpGRURpc3BsYWNlbWVudE1hcCkKICAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNl
bGVjdG9yKQogICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCiAgICAg
LCBtX3NjYWxlKHNjYWxlKQogewogfQogCi1SZWY8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxh
Y2VtZW50TWFwOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIENoYW5uZWxTZWxlY3RvclR5cGUgeENo
YW5uZWxTZWxlY3RvciwKLSAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3Is
IGZsb2F0IHNjYWxlKQorUmVmPEZFRGlzcGxhY2VtZW50TWFwPiBGRURpc3BsYWNlbWVudE1hcDo6
Y3JlYXRlKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVj
dG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRURpc3BsYWNlbWVudE1hcChmaWx0ZXIsIHhDaGFubmVsU2VsZWN0b3IsIHlD
aGFubmVsU2VsZWN0b3IsIHNjYWxlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaXNw
bGFjZW1lbnRNYXAoeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsK
IH0KIAogYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0WENoYW5uZWxTZWxlY3Rvcihjb25zdCBD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IpCkBAIC02OSwyMCArNjgsMTQgQEAg
Ym9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2Uo
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikKK2NvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgRkVEaXNwbGFjZW1lbnRNYXA6OmltYWdlQ29sb3JTcGFjZSgpIGNvbnN0CiB7CiAgICAgLy8g
U3BlYzogVGhlICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnIHByb3BlcnR5IG9ubHkgYXBw
bGllcyB0byB0aGUgJ2luMicgc291cmNlIGltYWdlCiAgICAgLy8gYW5kIGRvZXMgbm90IGFwcGx5
IHRvIHRoZSAnaW4nIHNvdXJjZSBpbWFnZS4gVGhlICdpbicgc291cmNlIGltYWdlIG11c3QgcmVt
YWluIGluIGl0cwogICAgIC8vIGN1cnJlbnQgY29sb3Igc3BhY2UuCiAgICAgLy8gVGhlIHJlc3Vs
dCBpcyBpbiB0aGF0IHNtYWUgY29sb3Igc3BhY2UgYmVjYXVzZSBpdCBpcyBhIGRpc3BsYWNlbWVu
dCBvZiB0aGUgJ2luJyBpbWFnZS4KLSAgICBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3Bh
Y2UoaW5wdXRFZmZlY3QoMCktPnJlc3VsdENvbG9yU3BhY2UoKSk7Ci19Ci0KLXZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwg
Y29uc3QgaW50IGluZGV4KQotewotICAgIC8vIERvIG5vdCB0cmFuc2Zvcm0gdGhlIGZpcnN0IHBy
aW1pdGl2ZSBpbnB1dCwgYXMgcGVyIHRoZSBzcGVjLgotICAgIGlmIChpbmRleCkKLSAgICAgICAg
aW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAg
ICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICByZXR1
cm4gaW5wdXQuY29sb3JTcGFjZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVP
ZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQpA
QCAtOTEsMzcgKzg0LDQxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4
ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0CiAgICAgcmV0dXJuIHgg
KiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50
TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFRGlzcGxhY2VtZW50TWFw
OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwor
ICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lv
bik7Cit9CiAKK2Jvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKK3sKICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9
IENIQU5ORUxfVU5LTk9XTik7CiAgICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFO
TkVMX1VOS05PV04pOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDAp
LT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIGlucHV0MiA9ICppbnB1dEVmZmVjdCgxKS0+Zmls
dGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKIAotICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEo
KTsKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxC
dWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJy
YXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgSW50UmVjdCBlZmZlY3RBRHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVz
dWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CisgICAgSW50UmVjdCBpbnB1dEltYWdlUmVjdCA9IG91
dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0KTsKKyAgICBhdXRvIGlucHV0UGl4
ZWxCdWZmZXIgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpOwotICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMgdXNpbmcgdGhlIHBpeGVsIHZh
bHVlcyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVk
IGNvbG9yIHZhbHVlcy4KLSAgICBhdXRvIGRpc3BsYWNlbWVudEltYWdlID0gaW4yLT51bm11bHRp
cGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdpbmdSZWN0KTsKKyAgICBJbnRSZWN0IGlucHV0SW1hZ2VS
ZWN0MiA9IG91dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0Mik7CisgICAgLy8g
VGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20gJ2luMicgYXJlIHBl
cmZvcm1lZCB1c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCisgICAgYXV0byBp
bnB1dFBpeGVsQnVmZmVyMiA9IGlucHV0Mi5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0Mik7CiAgICAgCi0gICAgaWYg
KCFpbnB1dEltYWdlIHx8ICFkaXNwbGFjZW1lbnRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAg
IGlmICghaW5wdXRQaXhlbEJ1ZmZlciB8fCAhaW5wdXRQaXhlbEJ1ZmZlcjIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFj
ZW1lbnRJbWFnZS0+bGVuZ3RoKCkpOworICAgIEFTU0VSVChpbnB1dFBpeGVsQnVmZmVyLT5sZW5n
dGgoKSA9PSBpbnB1dFBpeGVsQnVmZmVyMi0+bGVuZ3RoKCkpOwogCi0gICAgRmlsdGVyJiBmaWx0
ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CisgICAgYXV0byBpbWFnZVNpemUgPSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXpl
KCk7CiAKLSAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0
aW9uKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKKyAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIu
c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUoeyBtX3NjYWxlLCBtX3NjYWxlIH0pOwogICAgIGZsb2F0
IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOwogICAgIGZsb2F0IHNjYWxl
Rm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKICAgICBmbG9hdCBzY2FsZWRPZmZz
ZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAqIDAuNTsKQEAgLTEzMCwyNiArMTI3LDI4IEBAIHZv
aWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaW50IGRp
c3BsYWNlbWVudENoYW5uZWxYID0geENoYW5uZWxJbmRleCgpOwogICAgIGludCBkaXNwbGFjZW1l
bnRDaGFubmVsWSA9IHlDaGFubmVsSW5kZXgoKTsKIAotICAgIGludCByb3dCeXRlcyA9IHBhaW50
U2l6ZS53aWR0aCgpICogNDsKKyAgICBpbnQgcm93Qnl0ZXMgPSBpbWFnZVNpemUud2lkdGgoKSAq
IDQ7CiAKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBhaW50U2l6ZS5oZWlnaHQoKTsgKyt5KSB7
CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBpbWFnZVNpemUuaGVpZ2h0KCk7ICsreSkgewogICAg
ICAgICBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0geSAqIHJvd0J5dGVzOwogCi0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgcGFpbnRTaXplLndpZHRoKCk7ICsreCkgewotICAgICAgICAgICAgaW50
IGRlc3RpbmF0aW9uSW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKKyAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBpbWFnZVNpemUud2lkdGgoKTsgKyt4KSB7CisgICAgICAgICAgICBp
bnQgb3V0cHV0SW5kZXggPSBsaW5lU3RhcnRPZmZzZXQgKyB4ICogNDsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9y
WCAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1l
bnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKLSAgICAgICAgICAgIGludCBzcmNZID0geSAr
IHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRl
bShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50Q2hhbm5lbFkpICsgc2NhbGVkT2Zmc2V0
WSk7CisgICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9y
Q29sb3JYICogaW5wdXRQaXhlbEJ1ZmZlcjItPml0ZW0ob3V0cHV0SW5kZXggKyBkaXNwbGFjZW1l
bnRDaGFubmVsWCkgKyBzY2FsZWRPZmZzZXRYKTsKKyAgICAgICAgICAgIGludCBzcmNZID0geSAr
IHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclkgKiBpbnB1dFBpeGVsQnVmZmVyMi0+aXRl
bShvdXRwdXRJbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkpOwog
Ci0gICAgICAgICAgICB1bnNpZ25lZCogZGVzdGluYXRpb25QaXhlbFB0ciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpICsgZGVzdGluYXRp
b25JbmRleCk7Ci0gICAgICAgICAgICBpZiAoc3JjWCA8IDAgfHwgc3JjWCA+PSBwYWludFNpemUu
d2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IHBhaW50U2l6ZS5oZWlnaHQoKSkgewotICAg
ICAgICAgICAgICAgICpkZXN0aW5hdGlvblBpeGVsUHRyID0gMDsKKyAgICAgICAgICAgIHVuc2ln
bmVkKiBvdXRwdXRQaXhlbFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihvdXRwdXRQ
aXhlbEFycmF5LmRhdGEoKSArIG91dHB1dEluZGV4KTsKKyAgICAgICAgICAgIGlmIChzcmNYIDwg
MCB8fCBzcmNYID49IGltYWdlU2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0gaW1h
Z2VTaXplLmhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gMDsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
KmRlc3RpbmF0aW9uUGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGlucHV0
SW1hZ2UtPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNyY1ksIHJvd0J5dGVzKSk7
CisgICAgICAgICAgICAqb3V0cHV0UGl4ZWxQdHIgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KGlucHV0UGl4ZWxCdWZmZXItPmRhdGEoKSArIGJ5dGVPZmZzZXRPZlBpeGVsKHNyY1gsIHNy
Y1ksIHJvd0J5dGVzKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENo
YW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3
MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uZTA2MmJiZmI3NmIxYzllNTA1
MmZkMTIzYWVmOTI1YjVhZGU3YzRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtMjIs
NyArMjIsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNyArMzYsNyBAQCBlbnVtIENoYW5uZWxTZWxlY3RvclR5
cGUgewogCiBjbGFzcyBGRURpc3BsYWNlbWVudE1hcCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShGaWx0ZXIm
LCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOworICAgIHN0YXRpYyBSZWY8RkVEaXNw
bGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3Is
IENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpOwogCiAg
ICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV94Q2hhbm5lbFNlbGVjdG9yOyB9CiAgICAgYm9vbCBzZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0
IENoYW5uZWxTZWxlY3RvclR5cGUpOwpAQCAtNDgsMjAgKzQ3LDE3IEBAIHB1YmxpYzoKICAgICBm
bG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KICAgICBib29sIHNldFNjYWxl
KGZsb2F0KTsKIAotICAgIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3Bh
Y2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBvdmVycmlkZTsKLQogcHJpdmF0ZToKLSAgICBG
RURpc3BsYWNlbWVudE1hcChGaWx0ZXImLCBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2Vs
ZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOworICAg
IEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3Rvciwg
Q2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxh
Y2VtZW50TWFwIjsgfQorICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94
Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQorICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGlt
YWdlQ29sb3JTcGFjZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0gICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgYm9vbCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNzIsMyArNjgsNCBAQCBwcml2YXRlOgogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VG
RkVDVChGRURpc3BsYWNlbWVudE1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAzNWZiYWI0MWU4
MDkyMTZlNGIyMjQzNTExODYyM2UyOGZmZDYxZWZhLi40MDJiMmExMDg4ZTg0NDhiMTg1NjYyZDIw
ODA4MWMxMWI5MjU3YTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0zMSw4ICszMSw4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLUZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZp
bHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkRyb3BTaGFkb3cpCitGRURyb3BTaGFkb3c6OkZFRHJv
cFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0eSkKKyAgICA6IEZpbHRlckVm
ZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRHJvcFNoYWRvdykKICAgICAsIG1fc3RkWChzdGRY
KQogICAgICwgbV9zdGRZKHN0ZFkpCiAgICAgLCBtX2R4KGR4KQpAQCAtNDIsOTAgKzQyLDg1IEBA
IEZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBm
bG9hdCBzdGRZLCBmbG9hdCBkeCwgZmxvCiB7CiB9CiAKLVJlZjxGRURyb3BTaGFkb3c+IEZFRHJv
cFNoYWRvdzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBm
bG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93
T3BhY2l0eSkKK1JlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0IHN0
ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0Nv
bG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
RHJvcFNoYWRvdyhmaWx0ZXIsIHN0ZFgsIHN0ZFksIGR4LCBkeSwgc2hhZG93Q29sb3IsIHNoYWRv
d09wYWNpdHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURyb3BTaGFkb3coc3RkWCwg
c3RkWSwgZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOwogfQogCi12b2lkIEZF
RHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorSW50T3V0c2V0cyBGRURy
b3BTaGFkb3c6Om91dHNldHMoKSBjb25zdAogewotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+
ZmlsdGVyKCk7CisgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1
bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICByZXR1cm4geworICAgICAg
ICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKKyAgICAgICAg
c3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkgKyBtX2R4KSwKKyAgICAgICAgc3Rk
OjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpICsgbV9keSksCisgICAgICAgIHN0ZDo6
bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpIC0gbV9keCkKKyAgICB9OworfQorCitGbG9h
dFJlY3QgRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIGF1
dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOwogCi0gICAgRmxvYXRS
ZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0
KCk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRS
ZWN0KTsKLSAgICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZp
bHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC51
bml0ZShhYnNvbHV0ZU9mZnNldFBhaW50UmVjdCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1
dC5pbWFnZVJlY3QoKTsKKyAgICBhdXRvIGltYWdlUmVjdFdpdGhPZmZzZXQoaW1hZ2VSZWN0KTsK
KyAgICBpbWFnZVJlY3RXaXRoT2Zmc2V0Lm1vdmUoeyBtX2R4LCBtX2R5IH0pOworICAgIGltYWdl
UmVjdC51bml0ZShpbWFnZVJlY3RXaXRoT2Zmc2V0KTsKIAotICAgIEludFNpemUga2VybmVsU2l6
ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKKyAgICBhdXRvIGtlcm5lbFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CiAKICAgICAvLyBXZSB0
YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNh
dXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWlu
dFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlm
IChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdCht
YXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5p
dGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNp
emUud2lkdGgoKSAqIDAuNWYpOworICAgIGltYWdlUmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6
ZS5oZWlnaHQoKSAqIDAuNWYpOwogCi0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4
UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
dm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFRHJvcFNo
YWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBhdXRvJiBpbnB1dCA9ICpp
bnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVy
SW1hZ2UoKTsKKyAgICAKKyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigp
OworICAgIGlmICghaW5wdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBp
ZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBvdXRwdXRJbWFnZSA9
IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAg
Ci0gICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbih7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIGJsdXJSYWRpdXMuc2NhbGUoZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBmaWx0ZXIuc2NhbGVkQnlG
aWx0ZXJSZXNvbHV0aW9uKHsgbV9keCwgbV9keSB9KTsKKyAgICBhdXRvIGJsdXJSYWRpdXMgPSAy
ICogZmlsdGVyLnNjYWxlZFNpemVCeUZpbHRlclNjYWxlKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Cisg
ICAgYXV0byBvZmZzZXQgPSBmaWx0ZXIuc2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBt
X2R5IH0pOwogCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBGbG9hdFJlY3QgZHJhd2lu
Z1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7Ci0gICAgZHJhd2luZ1JlZ2lvbldpdGhP
ZmZzZXQubW92ZShvZmZzZXQpOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3Qo
aW5wdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKIAotICAgIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghc291
cmNlSW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0V2l0aE9m
ZnNldCA9IGlucHV0SW1hZ2VSZWN0OworICAgIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldC5tb3Zl
KG9mZnNldCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFj
aXR5KTsKLSAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRy
YXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwor
ICAgIGF1dG8mIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIG91
dHB1dENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5KTsKKyAgICBvdXRwdXRDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0KTsK
KyAgICBvdXRwdXRDb250ZXh0LnNldEFscGhhKDEpOwogCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0
U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CiAKLSAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAgIEludFJlY3Qg
c2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUo
KSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihm
b3JtYXQsIHNoYWRvd0FyZWEpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVy
bjsKKyAgICBhdXRvIGZvcm1hdCA9IFBpeGVsQnVmZmVyRm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBvdXRwdXQuY29sb3JT
cGFjZSgpIH07CisgICAgYXV0byBzaGFkb3dBcmVhID0gSW50UmVjdCB7IEludFBvaW50KCksIG91
dHB1dEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpIH07CisgICAgYXV0byBzaGFkb3dQaXhl
bEJ1ZmZlciA9IG91dHB1dEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRvd0FyZWEp
OworICAgIGlmICghc2hhZG93UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIGNv
bnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIHBpeGVs
QnVmZmVyLT5zaXplKCksIDQgKiBwaXhlbEJ1ZmZlci0+c2l6ZSgpLndpZHRoKCkpOwotICAgIAot
ICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0FyZWEp
OworICAgIGF1dG8mIHNoYWRvd1BpeGVsQXJyYXkgPSBzaGFkb3dQaXhlbEJ1ZmZlci0+ZGF0YSgp
OworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc2hhZG93UGl4ZWxBcnJheS5kYXRh
KCksIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXplKCksIDQgKiBzaGFkb3dQaXhlbEJ1ZmZlci0+c2l6
ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24o
Q29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0
KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9z
aGFkb3dDb2xvcik7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7CisgICAgb3V0cHV0SW1hZ2UtPnB1dFBp
eGVsQnVmZmVyKCpzaGFkb3dQaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CiAKLSAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdp
b24pOwotfQorICAgIG91dHB1dENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VJbik7CisgICAgb3V0cHV0Q29udGV4dC5maWxsUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCkpLCBtX3No
YWRvd0NvbG9yKTsKKyAgICBvdXRwdXRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKIAotSW50T3V0c2V0cyBGRURyb3BTaGFk
b3c6Om91dHNldHMoKSBjb25zdAotewotICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0
dXJuIHsKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdodCgpIC0gbV9k
eSksCi0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgpICsgbV9keCks
Ci0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSArIG1fZHkpLAot
ICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lkdGgoKSAtIG1fZHgpCi0gICAg
fTsKKyAgICBvdXRwdXRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJ
bWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRURyb3BTaGFk
b3c6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9u
VHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IGI0ZTBhMjAxMmZl
ZGI3Yjc3YmYzZTA1NzM0ZWU4OGEyOWVmZjM4NGMuLmIyNTY4ODhhZDI1ZDdkZjk2ODcxNTQ5MmI4
ZmNkMjNlNzYwNThlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtMjAsMTQgKzIwLDEzIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNz
IEZFRHJvcFNoYWRvdyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RkVEcm9wU2hhZG93PiBjcmVhdGUoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVEcm9wU2hhZG93
PiBjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpOwogCiAgICAgZmxvYXQg
c3RkRGV2aWF0aW9uWCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RkWDsgfQogICAgIHZvaWQgc2V0U3Rk
RGV2aWF0aW9uWChmbG9hdCBzdGRYKSB7IG1fc3RkWCA9IHN0ZFg7IH0KQEAgLTQ4LDE1ICs0Nywx
MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaGFkb3dPcGFjaXR5KGZsb2F0IHNoYWRvd09wYWNp
dHkpIHsgbV9zaGFkb3dPcGFjaXR5ID0gc2hhZG93T3BhY2l0eTsgfQogCiBwcml2YXRlOgotICAg
IEZFRHJvcFNoYWRvdyhGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
Q29sb3ImLCBmbG9hdCk7CisgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFks
IGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFk
b3dPcGFjaXR5KTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBG
bG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEludE91dHNldHMg
b3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKQEAgLTcwLDMgKzY3LDQgQEAgcHJpdmF0ZToKICAgICAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZF
RHJvcFNoYWRvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5MjM4
MGYzYjZiMDEuLmE3NmE5YTIzYzU2YWRkMmMxNzRhMDE4MDM3MGQ2YTg1YjMyOTM5MzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcApAQCAtMzAsMTYgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVGbG9v
ZDo6RkVGbG9vZChGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0
IGZsb29kT3BhY2l0eSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkZsb29kKQor
RkVGbG9vZDo6RkVGbG9vZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFj
aXR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVGbG9vZCkKICAg
ICAsIG1fZmxvb2RDb2xvcihmbG9vZENvbG9yKQogICAgICwgbV9mbG9vZE9wYWNpdHkoZmxvb2RP
cGFjaXR5KQogewogfQogCi1SZWY8RkVGbG9vZD4gRkVGbG9vZDo6Y3JlYXRlKEZpbHRlciYgZmls
dGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQorUmVmPEZF
Rmxvb2Q+IEZFRmxvb2Q6OmNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxv
b2RPcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoZmlsdGVyLCBm
bG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUZs
b29kKGZsb29kQ29sb3IsIGZsb29kT3BhY2l0eSkpOwogfQogCiBib29sIEZFRmxvb2Q6OnNldEZs
b29kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNTgsMTQgKzU4LDIxIEBAIGJvb2wgRkVG
bG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0
IEZFRmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3Vs
dEltYWdlKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVT
dWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KIAotICAgIGF1dG8gY29sb3IgPSBmbG9v
ZENvbG9yKCkuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvb2RPcGFjaXR5KCkpOwotICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7Citib29sIEZFRmxvb2Q6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQoreworICAgIGF1dG8mIG91dHB1dCA9ICpm
aWx0ZXJJbWFnZSgpOworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIo
KTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGNvbG9yID0gbV9mbG9vZENvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KG1fZmxv
b2RPcGFjaXR5KTsKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KHsgeyB9LCBv
dXRwdXRJbWFnZS0+bG9naWNhbFNpemUoKSB9LCBjb2xvcik7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIFRleHRTdHJlYW0mIEZFRmxvb2Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXgg
YjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4uOWZiMTg5ZTdhZGYwNzM5
MDMxYWMyYzA2ZTAzNDhjNWYwMThkM2VlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTIyLDE0ICsyMiwxMyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZF
Rmxvb2QgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZF
Rmxvb2Q+IGNyZWF0ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBzdGF0aWMg
UmVmPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RP
cGFjaXR5KTsKIAogICAgIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9mbG9vZENvbG9yOyB9CiAgICAgYm9vbCBzZXRGbG9vZENvbG9yKGNvbnN0IENvbG9yJik7CkBA
IC00MCwxOCArMzksMTUgQEAgcHVibGljOgogI2lmICFVU0UoQ0cpCiAgICAgLy8gZmVGbG9vZCBk
b2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVycG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRoZSBy
ZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJyZW50CiAgICAgLy8gY29sb3Igc3BhY2UgcmVnYXJk
bGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAgIHZv
aWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBv
dmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSk7IH0KLSAgICB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3Vs
dENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOyB9CisgICAgdm9pZCBz
ZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJy
aWRlIHsgfQogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgRkVGbG9vZChGaWx0ZXImLCBjb25zdCBD
b2xvciYsIGZsb2F0KTsKKyAgICBGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9h
dCBmbG9vZE9wYWNpdHkpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuICJGRUZsb29kIjsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0K
KyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
IAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC02MSwzICs1
Nyw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRmxvb2QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmlu
ZGV4IDBmNmVlODdmOTVlNzU3NTE4NjNmZDJlNWY1NDllNzRkOTcyOWRiMWYuLjEwNzIxZmFhN2Uw
YmM5MDQ3YzRjYTI1NDI2YTcxZmNkODAxZGE4N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBA
IC03OSwxNyArNzksMTcgQEAgaW5saW5lIHZvaWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVy
YXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LAogICAgIH0KIH0KIAotRkVH
YXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4LCBmbG9h
dCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBU
eXBlOjpHYXVzc2lhbkJsdXIpCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQg
eCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogRmlsdGVyRWZmZWN0KEZp
bHRlckVmZmVjdDo6VHlwZTo6RkVHYXVzc2lhbkJsdXIpCiAgICAgLCBtX3N0ZFgoeCkKICAgICAs
IG1fc3RkWSh5KQogICAgICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKIHsKIH0KIAotUmVmPEZFR2F1
c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBmbG9hdCB4
LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitSZWY8RkVHYXVzc2lhbkJsdXI+IEZF
R2F1c3NpYW5CbHVyOjpjcmVhdGUoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKGZpbHRlciwg
eCwgeSwgZWRnZU1vZGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1
cih4LCB5LCBlZGdlTW9kZSkpOwogfQogCiB2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZp
YXRpb25YKGZsb2F0IHgpCkBAIC00NjUsMTEgKzQ2NSwxMiBAQCBzdGF0aWMgaW50IGNsYW1wZWRU
b0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7CiAgICAgLy8gTGltaXQgdGhlIGtlcm5lbCBzaXpl
IHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcgZGlmZmVyZW5jZSBmb3Ig
dGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAvLyBpbmZsYXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQg
cmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmlyZWZveCcgYmVoYXZpb3Iu
CisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKICAgICB1bnNpZ25l
ZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmbG9v
cmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsgMC41ZikpKTsKICAgICByZXR1cm4g
Y2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnTWF4S2Vy
bmVsU2l6ZSkpKTsKIH0KICAgICAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVu
c2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3Rk
RGV2aWF0aW9uKQogewogICAgIEFTU0VSVChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0
ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAwKTsKICAgICBJbnRTaXplIGtlcm5lbFNpemU7CkBAIC00
ODMsMTIgKzQ4NCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICByZXR1cm4ga2VybmVsU2l6
ZTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25z
dCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK0ludFNpemUgRkVHYXVz
c2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihzdGREZXZpYXRpb24p
KTsKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRT
aXplQnlGaWx0ZXJTY2FsZShzdGREZXZpYXRpb24pKTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorSW50U2l6
ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0
ZERldmlhdGlvbikKIHsKICAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVVbnNjYWxlZEtl
cm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKIApAQCAtNDk2LDYyICs0OTcsNjEgQEAgSW50U2l6ZSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9u
KQogICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXplLndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6
ZS5oZWlnaHQoKSAvIDIgfTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdAogewotICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5l
bFNpemUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgYXV0byYgaW5wdXQgPSAq
aW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1
dC5pbWFnZVJlY3QoKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIC8vIEVkZ2UgbW9kZXMgb3RoZXIg
dGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3QuCi0gICAg
aWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGltYWdlUmVjdDsKIAorICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtl
cm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIAogICAgIC8vIFdlIHRh
a2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1
c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0Lmlu
ZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50
UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOworICAgIGltYWdl
UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgaW1hZ2VS
ZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CiAKLSAgICBpZiAo
Y2xpcHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4
RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRl
KG1heEVmZmVjdFJlY3QoKSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVT
dWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworfQogCi0gICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOworSW50
T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBv
dXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOworICAg
IHJldHVybiB7IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0
U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CiB9CiAKLXZvaWQgRkVHYXVzc2lh
bkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitib29sIEZFR2F1c3NpYW5CbHVyOjppc0Fs
cGhhSW1hZ2UoKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKKyAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPmlzQWxwaGFJbWFnZSgpOworfQogCi0gICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OworYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJ
bWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworCisgICAgYXV0byBv
dXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9
IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZl
QWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW5w
dXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxT
aXplKGZpbHRlcigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIGtlcm5lbFNpemUuc2NhbGUo
ZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRl
S2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgYXV0byBpbWFnZVNp
emUgPSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7CiAKLSAgICBJbnRTaXplIHBh
aW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2Fs
ZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKLSAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4
Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkgKiA0
KTsKKyAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGltYWdlU2l6ZS5hcmVhKCkgKiA0KTsKICAgICBpZiAoIXRtcEltYWdlRGF0
YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVs
QXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWln
aHQoKSwgcGFpbnRTaXplKTsKLX0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1JbnRPdXRzZXRz
IEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIG91dHNldFNp
emUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgcmV0dXJu
IHsgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhl
aWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCkgfTsKKyAgICBwbGF0Zm9ybUFwcGx5KG91dHB1dFBp
eGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5o
ZWlnaHQoKSwgaW1hZ2VTaXplKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYg
RkVHYXVzc2lhbkJsdXI6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJl
cHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApp
bmRleCBhZDdkOTUwYjliNzIzZGM3NDQ2NDljYmFmMDBhOTEzMGEzYjFkNzBlLi4xZDU4MjY1NGMw
MmI0ZTVlZTI0ZDUwM2M4YmQxMzk3YTJlZTdkNThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBAIC0y
MiwxNCArMjIsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJp
eC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGljIEZpbHRl
ckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUdhdXNzaWFuQmx1cj4gY3JlYXRl
KEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgUmVmPEZF
R2F1c3NpYW5CbHVyPiBjcmVhdGUoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsKIAog
ICAgIGZsb2F0IHN0ZERldmlhdGlvblgoKSBjb25zdCB7IHJldHVybiBtX3N0ZFg7IH0KICAgICB2
b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOwpAQCAtNDAsMTQgKzM5LDEyIEBAIHB1YmxpYzoK
ICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VNb2RlOyB9
CiAgICAgdm9pZCBzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUpOwogCi0gICAgc3RhdGljIEludFNp
emUgY2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImLCBGbG9hdFNpemUgc3RkRGV2aWF0
aW9uKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbik7Ci0gICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0c2V0
U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxh
dGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9u
KTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoY29uc3Qg
RmxvYXRTaXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZU91
dHNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOwogCiBwcml2YXRlOgotICAg
IEZFR2F1c3NpYW5CbHVyKEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgRWRnZU1vZGVUeXBlKTsKLQot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVHYXVz
c2lhbkJsdXIiOyB9CisgICAgRkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1v
ZGVUeXBlKTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9
IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKIApA
QCAtNjEsMTIgKzU4LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZ
OwogICAgIH07CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBv
dXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7CisKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFt
ZXRlcnMqKTsKQEAgLTgwLDMgKzc5LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVHYXVzc2lhbkJs
dXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAppbmRleCA2NTliMTA1NWY2MWVhYWJjNWYyOTk5MWRhMGRhMWE1ODUw
NzFhZTkyLi5lMzIzMzc2Njg0ZWEwZTdjM2RmMDU2YmI4ZWJlN2RkYzNlYWE5Mjk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAKQEAgLTMwLDEzICszMCwxNCBAQAogCiAjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9u
LmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKEZpbHRlciYgZmls
dGVyLCBMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291
cmNlLCBUeXBlIHR5cGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCB0eXBlKQorRkVMaWdo
dGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmIGxpZ2h0U291cmNlLCBUeXBlIHR5cGUpCisgICAgOiBGaWx0ZXJFZmZlY3QodHlwZSkKICAg
ICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlwZSkKICAgICAsIG1fbGlnaHRTb3VyY2UoV1RG
TW92ZShsaWdodFNvdXJjZSkpCiAgICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcikK
QEAgLTM4OCwyNiArMzg5LDE0IEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBw
bHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjCiAjZW5kaWYKIH0K
IAotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
cywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmco
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKIHsKICAgICBM
aWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdodGluZ0RhdGEg
ZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChv
ciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0
aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0g
MiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGF0YS5waXhl
bHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAy
NTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICogY1Bp
eGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAg
ZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAKICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdE
YXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogCi0gICAgbV9saWdodFNv
dXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKKyAgICBtX2xpZ2h0
U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKGZpbHRlciwgKnRoaXMsIHBhaW50aW5nRGF0YSk7CiAK
ICAgICAvLyBUb3AgbGVmdC4KICAgICBpbnQgb2Zmc2V0ID0gMDsKQEAgLTQyMiwxMCArNDExLDEw
IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhl
bHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBh
aW50aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBj
RmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKIAogICAgIC8vIEJv
dHRvbSByaWdodC4KLSAgICBvZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICBvZmZzZXQgPSAoZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZSArIDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNp
emU7CiAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhE
ZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBj
RmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7CiAKLSAgICBpZiAo
d2lkdGggPj0gMykgeworICAgIGlmIChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPj0gMikgewog
ICAgICAgICAvLyBUb3Agcm93LgogICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwogICAgICAg
ICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZz
ZXQgKz0gY1BpeGVsU2l6ZSkKQEAgLTQzNyw3ICs0MjYsNyBAQCBib29sIEZFTGlnaHRpbmc6OmRy
YXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwg
ZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRh
dGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmIChoZWlnaHQgPj0g
MykgeworICAgIGlmIChkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID49IDIpIHsKICAgICAgICAg
Ly8gTGVmdCBjb2x1bW4uCiAgICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CiAgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkK
QEAgLTQ0OSwxMiArNDM4LDEyIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4
Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9y
bWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAz
KSB7CisgICAgaWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyICYmIGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUgPj0gMikgewogICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCiAgICAg
ICAgIHBsYXRmb3JtQXBwbHkoZGF0YSwgcGFpbnRpbmdEYXRhKTsKICAgICB9CiAKLSAgICBpbnQg
bGFzdFBpeGVsID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKKyAg
ICBpbnQgbGFzdFBpeGVsID0gKGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEu
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CiAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERp
ZmZ1c2VMaWdodGluZykgewogICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNl
dDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQogICAgICAgICAgICAgZGF0YS5waXhl
bHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwpAQCAtNDcxLDI3ICs0NjAsNDcgQEAgYm9vbCBGRUxp
Z2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVMaWdodGluZzo6Y2FsY3VsYXRlSW1h
Z2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lv
bihwcmltaXRpdmVTdWJyZWdpb24pOworfQorCitib29sIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZp
bHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
CisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5
ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvIGlucHV0
SW1hZ2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOwogCi0g
ICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0
cHV0UGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5w
dXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAKLSAgICBJbnRSZWN0IGVmZmVj
dERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgx
LDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBu
byB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBo
YXMgc3RyYW5nZQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3Rocywg
YW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBmZUNv
bnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAotICAgIElu
dFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAg
ICBkcmF3TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53
aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBhYnNvbHV0
ZUltYWdlU2l6ZSA9IG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKTsKKworICAgIC8v
IEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBp
eGVsLgorICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0
aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KKyAgICBpZiAoYWJzb2x1dGVJbWFnZVNpemUud2lkdGgo
KSA8PSAyIHx8IGFic29sdXRlSW1hZ2VTaXplLmhlaWdodCgpIDw9IDIpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgTGlnaHRpbmdEYXRhIGRhdGE7CisgICAgZGF0YS5waXhlbHMgPSAmb3V0
cHV0UGl4ZWxBcnJheTsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8g
MjU1LjBmOworICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSBhYnNvbHV0ZUlt
YWdlU2l6ZS53aWR0aCgpICogY1BpeGVsU2l6ZTsKKyAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmUgPSBhYnNvbHV0ZUltYWdlU2l6ZS53aWR0aCgpIC0gMTsKKyAgICBkYXRhLmhlaWdodERlY3Jl
YXNlZEJ5T25lID0gYWJzb2x1dGVJbWFnZVNpemUuaGVpZ2h0KCkgLSAxOworCisgICAgZHJhd0xp
Z2h0aW5nKGZpbHRlciwgZGF0YSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggYjBiYjcwYTE0ZDE3NDk1MDY3MzdlODhlMDUxNGVl
Nzk2ODIwYTQ0OS4uMGI0ZDgwMDRkYjY5NjRmOTQ5MDhjYzZkMjYwNTY0YmIyYjRiMDIwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmgKQEAgLTI3LDcgKzI3LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29s
b3IuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNp
bmNsdWRlICJMaWdodFNvdXJjZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQu
aD4KQEAgLTQwLDggKzM5LDYgQEAgc3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9u
OwogCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotCiAgICAg
ZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KICAg
ICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKQEAgLTEyOCwxNiArMTI1LDE2IEBAIHBy
b3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0
Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKICAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFw
cGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiopOwogCi0gICAgRkVM
aWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBlKTsK
LQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVM
aWdodGluZyI7IH0KKyAgICBGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
JiwgVHlwZSk7CiAKLSAgICBib29sIGRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYsIGlu
dCwgaW50KTsKKyAgICBib29sIGRyYXdMaWdodGluZyhjb25zdCBGaWx0ZXImLCBjb25zdCBMaWdo
dGluZ0RhdGEmKTsKIAogICAgIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRp
bmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwg
ZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IpOwogICAg
IHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBj
b25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0
b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3RvciwgZmxvYXQgYWxwaGEpOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9ybUFw
cGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAKaW5kZXggMGEyMDAwMWIxNzNiZDhmZGY2YmJhNjM2Y2QyM2NlNDcwMjZlN2Iz
Zi4uNmY1YjcxNGIzZDViYzRkNjgzZjM4MTc0ZDdiYWE2OTM2YzA3OTc3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBA
IC0yOCwzOSArMjgsNDMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1lcmdlOjpGRU1l
cmdlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TWVy
Z2UpCitGRU1lcmdlOjpGRU1lcmdlKCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFTWVyZ2UpCiB7CiB9CiAKLVJlZjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIpCitSZWY8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGRU1lcmdlKGZpbHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFTWVyZ2UoKSk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKK2Jvb2wgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgQVNTRVJU
KHNpemUgPiAwKTsKKyAgICBBU1NFUlQoIWlucHV0RWZmZWN0cygpLmlzRW1wdHkoKSk7CisgICAg
YXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVm
ZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgR3JhcGhpY3NDb250ZXh0JiBvdXRwdXRDb250ZXh0ID0gb3V0cHV0SW1hZ2UtPmNvbnRleHQo
KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5j
b250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChJbWFn
ZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKSkKLSAgICAgICAgICAg
IGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIGZvciAoYXV0byYgZWZm
ZWN0IDogaW5wdXRFZmZlY3RzKCkpIHsKKyAgICAgICAgYXV0byYgaW5wdXQgPSAqZWZmZWN0LT5m
aWx0ZXJJbWFnZSgpOworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IGlucHV0LmltYWdl
QnVmZmVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3Qo
aW5wdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICAgICAgICAgIG91
dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJlY3Qp
OworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0m
IEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2Vu
dGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwg
IltmZU1lcmdlIjsKICAgICBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMs
IHJlcHJlc2VudGF0aW9uKTsKLSAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1
dHMoKTsKKyAgICB1bnNpZ25lZCBzaXplID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpOwogICAgIEFT
U0VSVChzaXplID4gMCk7CiAgICAgdHMgPDwgIiBtZXJnZU5vZGVzPVwiIiA8PCBzaXplIDw8ICJc
Il1cbiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNZXJnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmgKaW5kZXggNWNmYzVjYjc5ODE5Y2VjZWQ1MDczZTU3YjAxOTRlYmNmMThmMjYw
Ny4uODg3YmEwZmQzM2Y4OTMyY2JmNDMzODI2OGU3YWFhNDhhZmEyZjA0MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgKQEAgLTIy
LDIzICsyMiwyMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRU1l
cmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRU1l
cmdlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUoKTsK
IAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKEZpbHRlciYpOworICAgIEZFTWVyZ2UoKTsKIAotICAg
IGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJnZSI7
IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgYm9v
bCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwg
UmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFTWVyZ2Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggNmFlM2Q5ODk4NjYyNmUwN2MwOTRjNTg2ZjMxOThjOWM1
OGRhZWQ2Yi4uNzQwNzA0ZTI3ODEyNDlmNGI1YzNlYTNlMTI1YjQxNTU1ODdmOWM4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmNwcApAQCAtMzUsMTcgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3koRmlsdGVyJiBmaWx0ZXIsIE1vcnBob2xvZ3lP
cGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKLSAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1vcnBob2xvZ3kpCitGRU1vcnBob2xvZ3k6OkZFTW9y
cGhvbG9neShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0
IHJhZGl1c1kpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBo
b2xvZ3kpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQogICAg
ICwgbV9yYWRpdXNZKHJhZGl1c1kpCiB7CiB9CiAKLVJlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhv
bG9neTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUs
IGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCitSZWY8RkVNb3JwaG9sb2d5PiBGRU1vcnBo
b2xvZ3k6OmNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5
KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFTW9ycGhvbG9neSh0eXBlLCByYWRpdXNYLCByYWRpdXNZKSk7CiB9CiAKIGJvb2wgRkVN
b3JwaG9sb2d5OjpzZXRNb3JwaG9sb2d5T3BlcmF0b3IoTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0
eXBlKQpAQCAtNzIsMTggKzcyLDYgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1koZmxv
YXQgcmFkaXVzWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0g
aW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIg
PSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlG
aWx0ZXJSZXNvbHV0aW9uKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlw
c1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7Ci19
Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3
aWR0aCkKIHsKICAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKQEAgLTIzMyw1MiArMjIx
LDY0IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhKQogYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVy
YXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFn
ZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKICAgICBpZiAocmFkaXVzWCA8IDAg
fHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAgICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5UHJlbXVsdGlw
bGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CisgICAgICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgp
OworICAgICAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIoZHN0UGl4ZWxBcnJheSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVj
dCBGRU1vcnBob2xvZ3k6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZm
ZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSBpbnB1dC5p
bWFnZVJlY3QoKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZ
IH0pOworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdl
UmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKK30KIAotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKK2Jvb2wg
RkVNb3JwaG9sb2d5Ojppc0FscGhhSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVm
ZmVjdCgwKS0+aXNBbHBoYUltYWdlKCk7Cit9CisKK2Jvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgYXV0byYgaW5wdXQg
PSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZp
bHRlckltYWdlKCk7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsK
KyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZm
ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+
ZGF0YSgpOworCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFic29s
dXRlSW1hZ2VSZWN0KGlucHV0KTsKIAogICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNp
emUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3JtQXBw
bHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJh
ZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47CisgICAgaWYg
KHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKG91dHB1dFBpeGVsQXJyYXksIGlucHV0SW1hZ2VSZWN0
LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIGF1dG8gc291cmNl
UGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZm
ZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaWYgKCFpbnB1dFBpeGVsQXJyYXkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5z
Y2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAg
aW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFk
aXVzLndpZHRoKCkpOwotICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1Jl
Y3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOworICAgIHJhZGl1cyA9IGZsb29yZWRJ
bnRTaXplKGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRp
dXNZIH0pKTsKKyAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGlucHV0SW1hZ2VSZWN0LndpZHRo
KCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CisgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihpbnB1
dEltYWdlUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAocGxh
dGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5n
UmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBQYWlu
dGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0g
c291cmNlUGl4ZWxBcnJheS5nZXQoKTsKLSAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9
ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0gICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYo
ZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBw
YWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgKiBm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihy
YWRpdXNYICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZ
ID0gY2VpbGYocmFkaXVzWSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICBpZiAocGxhdGZv
cm1BcHBseURlZ2VuZXJhdGUob3V0cHV0UGl4ZWxBcnJheSwgaW5wdXRJbWFnZVJlY3QsIHJhZGl1
c1gsIHJhZGl1c1kpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGE7CisgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBpbnB1dFBpeGVs
QXJyYXkuZ2V0KCk7CisgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmb3V0cHV0UGl4
ZWxBcnJheTsKKyAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihpbnB1dEltYWdlUmVjdC53
aWR0aCgpKTsKKyAgICBwYWludGluZ0RhdGEuaGVpZ2h0ID0gY2VpbGYoaW5wdXRJbWFnZVJlY3Qu
aGVpZ2h0KCkpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2VpbGYocmFkaXVzWCk7Cisg
ICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZKTsKICAgICBwbGF0Zm9ybUFw
cGx5KHBhaW50aW5nRGF0YSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVk
ZjA3NWRlMzljNWExMS4uMDQ3YTBjYWEyNTEyNTRjZDRjNTU3N2U1ODgyZmE5OGFkNjczNTZlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM0LDcgKzMzLDcgQEAgZW51bSBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHsK
IAogY2xhc3MgRkVNb3JwaG9sb2d5IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRU1vcnBob2xvZ3k+IGNyZWF0ZShGaWx0ZXImLCBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBzdGF0aWMgUmVm
PEZFTW9ycGhvbG9neT4gY3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1
c1gsIGZsb2F0IHJhZGl1c1kpOwogCiAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9s
b2d5T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldE1vcnBo
b2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKQEAgLTQ2LDEzICs0NSwxMyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBzZXRSYWRpdXNZKGZsb2F0KTsKIAogcHJpdmF0ZToKLSAgICBG
RU1vcnBob2xvZ3koRmlsdGVyJiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSk7CisgICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0gICAgY29uc3QgY2hhciogZmls
dGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBob2xvZ3kiOyB9CisgICAgYm9v
bCBpc0FscGhhSW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChj
b25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtODYs
MyArODUsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU1vcnBob2xvZ3kpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4
IDAyNzBkYjkyNDgxYTMzOTJkM2Q1YTFlOTE3YzJkNjVhYTQxNDBmNjkuLjk2ZmZhMDFhZWE0MWEw
NTE5NzcxNTE4NWNlZjA0ODA3ZTZmOWQ0ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0zMCwxNiArMzAsMTYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU9mZnNldDo6RkVPZmZzZXQoRmlsdGVyJiBm
aWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5
cGU6Ok9mZnNldCkKK0ZFT2Zmc2V0OjpGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpCisgICAg
OiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU9mZnNldCkKICAgICAsIG1fZHgo
ZHgpCiAgICAgLCBtX2R5KGR5KQogewogfQogCi1SZWY8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVh
dGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK1JlZjxGRU9mZnNldD4gRkVP
ZmZzZXQ6OmNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVPZmZzZXQoZmlsdGVyLCBkeCwgZHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRU9mZnNldChkeCwgZHkpKTsKIH0KIAogdm9pZCBGRU9mZnNldDo6c2V0RHgoZmxvYXQgZHgp
CkBAIC01MiwzMyArNTIsMzggQEAgdm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkpCiAgICAg
bV9keSA9IGR5OwogfQogCi12b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpCitGbG9hdFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0g
ICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVj
dCgpOwotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0
Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwot
ICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4
RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZl
Y3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdl
KCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBpbWFnZVJl
Y3QubW92ZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQcmlt
aXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOworCit9CisKK2Jv
b2wgRkVPZmZzZXQ6OmlzQWxwaGFJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlucHV0RWZm
ZWN0KDApLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAotdm9pZCBGRU9mZnNldDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKK2Jvb2wgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAg
YXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbkJ1
ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UgfHwg
IWluQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQu
aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIGF1dG8g
b3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3Zl
KGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdS
ZWdpb24pOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3QoaW5wdXQucmVsYXRp
dmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICBpbnB1dEltYWdlUmVjdC5tb3ZlKGZp
bHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIAorICAg
IG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1
dEltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZFT2Zmc2V0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5
cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKaW5kZXggNjVhYmRhOTBhNDdiMWJmZTc2YWU1
Yzc0YWFiNWFhMTY3ZmIxZTY5ZS4uYTEwYTE4OWIzMGUzYzJmZGE1MzMxMzRhMzcxNzdlZTEzNDU1
ZGQ1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuaApAQCAtMjIsMTMgKzIyLDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKEZpbHRlciYsIGZsb2F0IGR4LCBmbG9h
dCBkeSk7CisgICAgc3RhdGljIFJlZjxGRU9mZnNldD4gY3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBk
eSk7CiAKICAgICBmbG9hdCBkeCgpIGNvbnN0IHsgcmV0dXJuIG1fZHg7IH0KICAgICB2b2lkIHNl
dER4KGZsb2F0KTsKQEAgLTM3LDE0ICszNiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREeShm
bG9hdCk7CiAKIHByaXZhdGU6Ci0gICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0
IGR5KTsKKyAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgY29uc3QgY2hh
ciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU9mZnNldCI7IH0KKyAgICBi
b29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChj
b25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKKyAgICAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIGZsb2F0IG1fZHg7CkBAIC01MywzICs1Miw0IEBAIHByaXZhdGU6CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNU
KEZFT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDU5OTcyMzA2ODg2
YTYzZmE0MTJiNWI3MTQxZjc0ZjljNDg3YTE0NGMuLjM4NzA3YjMwMWZkMTEwYmVjYmIwNGUyNWNm
Yzk4MmEyMDVmZTY0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAgLTI3LDE4
ICsyNywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFU3BlY3VsYXJMaWdodGluZzo6
RkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRp
bmcoZmlsdGVyLCBTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUs
IDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhY
LCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OlNwZWN1bGFy
TGlnaHRpbmcpCitGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBD
b2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNv
bnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwg
ZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkK
KyAgICA6IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFj
ZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0
TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZykKIHsKIH0KIAotUmVmPEZFU3BlY3VsYXJM
aWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNl
KQorUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3Vs
YXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3Vy
Y2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGZpbHRl
ciwgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxh
ckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUo
bGlnaHRTb3VyY2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVTcGVjdWxhckxpZ2h0
aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3Vs
YXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3Zl
KGxpZ2h0U291cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFyTGln
aHRpbmcoKSA9IGRlZmF1bHQ7Ci0KIGJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxh
ckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCiB7CiAgICAgaWYgKG1fc3BlY3VsYXJD
b25zdGFudCA9PSBzcGVjdWxhckNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5k
ZXggZTk5OGE3NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4YmYzYjI0OTU4YS4uYWM0NTBkYmRiNjBj
ZDY5N2NkOGRmYzNjNzkzMThkYmY2NGFkNTMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5o
CkBAIC0yNyw4ICsyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVTcGVjdWxh
ckxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RkVTcGVjdWxhckxpZ2h0aW5nPiBjcmVhdGUoRmlsdGVyJiwgY29uc3QgQ29sb3ImLCBmbG9hdCwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmly
dHVhbCB+RkVTcGVjdWxhckxpZ2h0aW5nKCk7CisgICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGln
aHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNv
dXJjZT4mJik7CiAKICAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4g
bV9zcGVjdWxhckNvbnN0YW50OyB9CiAgICAgYm9vbCBzZXRTcGVjdWxhckNvbnN0YW50KGZsb2F0
KTsKQEAgLTM5LDggKzM4LDkgQEAgcHVibGljOgogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXIm
LCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExp
Z2h0U291cmNlPiYmKTsKKyAgICBGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0
aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVTcGVjdWxh
ckxpZ2h0aW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuY3BwCmluZGV4IDM1YzUxY2JiMjI5ZGVlOTY0MmRjMWU3ZGNhMGM1ZGIyZmNh
YzIwYWQuLjA1MzRhYmUwMDUxNzIxNjEyNDU0Zjg3YjM4NTcwZDA0MTlhM2Q3NzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAK
QEAgLTI2LDY0ICsyNiw3NCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAi
U1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRVRpbGU6OkZFVGlsZShGaWx0ZXImIGZpbHRlcikK
LSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OlRpbGUpCitGRVRpbGU6OkZFVGlsZSgp
CisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCiB7CiB9CiAK
LVJlZjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVmPEZFVGlsZT4g
RkVUaWxlOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFVGlsZShmaWx0
ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAKLXZvaWQgRkVU
aWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRVRpbGU6OmlzQWxwaGFJbWFnZSgp
IGNvbnN0CiB7Ci0vLyBGSVhNRTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29y
ayBhcm91bmQgYSBjb21waWxlIGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3Ro
ZXJ3aXNlLgotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQotICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
SW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYg
KCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldElz
QWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwotCi0gICAgLy8gU291cmNlIGlucHV0IG5l
ZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBi
dXQgZ2l2ZXMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2su
IFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgb3B0aW1pemF0aW9uLgotICAg
IEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0KCk7Ci0gICAgRmxvYXRQb2lu
dCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBv
aW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAg
aWYgKGluLT5maWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0
KSB7Ci0gICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgICAgIHRp
bGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShm
aWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9u
KCkuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgZmlsdGVyKCkucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAo
IXRpbGVJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBpbnB1dEVmZmVjdCgwKS0+
aXNBbHBoYUltYWdlKCk7Cit9CisKK0Zsb2F0UmVjdCBGRVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJp
bWl0aXZlU3VicmVnaW9uKTsKK30KKworYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVj
dCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsK
KworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFp
bnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHcmFwaGljc0NvbnRleHQm
IHRpbGVJbWFnZUNvbnRleHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VD
b250ZXh0LnRyYW5zbGF0ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExv
Y2F0aW9uLnkoKSk7Ci0gICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVm
ZmVyLCBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICBhdXRvIG91dHB1
dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB0aWxlSW1hZ2VDb3B5ID0gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2UpKTsKLSAgICBpZiAoIXRp
bGVJbWFnZUNvcHkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0g
aW5wdXQuYWJzb2x1dGVJbWFnZVJlY3QoKTsKKyAgICBhdXRvIG91dHB1dEltYWdlUmVjdCA9IG91
dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpOworCisgICAgYXV0byB0aWxlUmVjdCA9IGZpbHRlci5t
YXhQcmltaXRpdmVTdWJyZWdpb24oaW5wdXQucHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIHRp
bGVSZWN0ID0gZmlsdGVyLnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKHRpbGVSZWN0KTsKKworICAg
IGF1dG8gbWF4T3V0cHV0UmVjdCA9IGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ob3V0cHV0
LnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKKyAgICBtYXhPdXRwdXRSZWN0ID0gZmlsdGVyLnNjYWxl
ZFJlY3RCeUZpbHRlclNjYWxlKG1heE91dHB1dFJlY3QpOworCisgICAgYXV0byB0aWxlSW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRpbGVSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVs
Rm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCF0aWxlSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJ
bWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIHRpbGVJbWFnZUNvbnRleHQudHJhbnNsYXRlKC10
aWxlUmVjdC5sb2NhdGlvbigpKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRvIHRp
bGVJbWFnZSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUlt
YWdlQnVmZmVyKSk7CisgICAgaWYgKCF0aWxlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBhdHRlcm5UcmFu
c2Zvcm0udHJhbnNsYXRlKGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2NhdGlvbik7
CisgICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUodGlsZVJlY3QubG9jYXRpb24oKSAtIG1h
eE91dHB1dFJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpj
cmVhdGUodGlsZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRy
YW5zZm9ybSB9KTsKIAotICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1h
Z2VDb3B5LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9
KTsKKyAgICBHcmFwaGljc0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29u
dGV4dCgpOworICAgIG91dHB1dENvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJu
KSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOwotICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0
ZXJuKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOworICAgIG91dHB1dENvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0SW1hZ2VSZWN0LnNpemUoKSkpOworICAg
IHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5oCmluZGV4IDQ5YmQ5OWYwOTQ0N2RhZTFjZjA5YWYxMjM1OGM2ZGU4NDA2ODc3MTQuLmZi
YjBhMTA2MmNiOWRmNDJlZjAyMzBlNjI0Njc2YTExZWEyNzI3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMjIsMjcgKzIy
LDI1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1
ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFVGlsZT4g
Y3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoKTsKIAogcHJp
dmF0ZToKLSAgICBGRVRpbGUoRmlsdGVyJik7CisgICAgRkVUaWxlKCk7CiAKLSAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVGlsZSI7IH0KKyAgICBi
b29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgRmlsdGVyRWZmZWN0VHlw
ZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0
VHlwZVRpbGU7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFVGlsZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcAppbmRleCA3NzRlNjgyZTNiNDg1OWJiNmUyMDZhMWQyYmZhZWIwY2VhOTE5ZjBi
Li4yMmQ0Zjk5YzcyZTUyNzE3YjQ4ODE5YjVjNDljM2FmM2U3NGM3ZGUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCkBAIC00OCw4ICs0OCw4IEBAIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRl
ID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KIHN0YXRpYyBjb25zdCBpbnQg
c19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4
MzY7IC8vIG0gJSBhCiAKLUZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVy
LCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQot
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKK0ZFVHVyYnVsZW5j
ZTo6RkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lY
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wg
c3RpdGNoVGlsZXMpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVR1
cmJ1bGVuY2UpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVgoYmFz
ZUZyZXF1ZW5jeVgpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQpAQCAt
NTksOSArNTksOSBAQCBGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShGaWx0ZXImIGZpbHRlciwg
VHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZQogewogfQogCi1SZWY8RkVUdXJi
dWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgVHVyYnVsZW5jZVR5
cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQg
bnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKK1JlZjxGRVR1cmJ1bGVu
Y2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VG
cmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNl
ZWQsIGJvb2wgc3RpdGNoVGlsZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJi
dWxlbmNlKGZpbHRlciwgdHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1P
Y3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
VHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2
ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7CiB9CiAKIGJvb2wgRkVUdXJidWxlbmNlOjpzZXRUeXBl
KFR1cmJ1bGVuY2VUeXBlIHR5cGUpCkBAIC0zNjYsMjIgKzM2NiwyMCBAQCBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQ
b2ludChjb25zdAogICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVu
Y2VGdW5jdGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3QK
K3ZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBVaW50
OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBj
b25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBp
bnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3QKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7
CiAKLSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAg
ZmlsdGVyUmVnaW9uLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0UG9p
bnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7CiAgICAgaW50IGluZGV4T2ZQ
aXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAg
QWZmaW5lVHJhbnNmb3JtIGludmVyc2VUcmFuc2Zyb20gPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5z
Zm9ybSgpLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgRmxvYXRT
aXplIGludmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEg
LyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9IHN0
YXJ0WTsgeSA8IGVuZFk7ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEp
OwogICAgICAgICBwb2ludC5zZXRYKGZpbHRlclJlZ2lvbi54KCkpOwogICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGZpbHRlclJlZ2lvbi53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIHBv
aW50LnNldFgocG9pbnQueCgpICsgMSk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9p
bnQgPSBpbnZlcnNlVHJhbnNmcm9tLm1hcFBvaW50KHBvaW50KTsKKyAgICAgICAgICAgIEZsb2F0
UG9pbnQgbG9jYWxQb2ludCA9IHBvaW50LnNjYWxlZChpbnZlcnNlU2NhbGUud2lkdGgoKSwgaW52
ZXJzZVNjYWxlLmhlaWdodCgpKTsKICAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRl
VHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBv
aW50KTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMu
ZGF0YSgpLCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKICAgICAgICAgICAgIGluZGV4T2ZQaXhl
bENoYW5uZWwgKz0gNDsKQEAgLTM5MSwyNiArMzg5LDMyIEBAIHZvaWQgRkVUdXJidWxlbmNlOjpm
aWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0Rh
dGEmCiAKIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJh
bWV0ZXJzKiBwYXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+ZmlsbFJlZ2lv
bigqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFy
YW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZ
KTsKKyAgICBwYXJhbWV0ZXJzLT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRl
ciwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmZpbHRlclJlZ2lvbiwgKnBh
cmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVy
cy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdAogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0aXZl
U3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgYXV0byYg
b3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0g
b3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOworICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZl
ci0+ZGF0YSgpOwogCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpKTsKLSAgICByZXN1bHRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwor
ICAgIEludFNpemUgb3V0cHV0U2l6ZShvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCkp
OwogCi0gICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS56ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG91dHB1dFNp
emUuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dHB1dFBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5k
ZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7CisgICAgSW50U2l6
ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG91dHB1dC5wcmltaXRpdmVTdWJyZWdpb24oKS5z
aXplKCkpOwogCiAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVggPSBtX2Jhc2VGcmVxdWVuY3lYOwog
ICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZID0gbV9iYXNlRnJlcXVlbmN5WTsKQEAgLTQxOSwxNCAr
NDIzLDE3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAg
IFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5j
eVgsIGJhc2VGcmVxdWVuY3lZKTsKICAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKIAotICAg
IGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOworICAgIGF1dG8gYXJlYSA9IG91dHB1dFNp
emUuYXJlYSgpOwogICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgaGVpZ2h0ID0gcmVzdWx0U2l6ZS5o
ZWlnaHQoKTsKKyAgICBpbnQgaGVpZ2h0ID0gb3V0cHV0U2l6ZS5oZWlnaHQoKTsKIAogICAgIHVu
c2lnbmVkIG1heE51bVRocmVhZHMgPSBoZWlnaHQgLyA4OwogICAgIHVuc2lnbmVkIG9wdGltYWxU
aHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIHNfbWluaW1hbFJlY3REaW1l
bnNpb24sIG1heE51bVRocmVhZHMpOworCisgICAgYXV0byBmaWx0ZXJSZWdpb24gPSBvdXRwdXQu
YWJzb2x1dGVJbWFnZVJlY3QoKTsKKwogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkg
ewogICAgICAgICBQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFk
TnVtYmVyKTsKIApAQCAtNDQwLDggKzQ0NywxMCBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUpvYnM7ICsraSkgewogICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBw
YXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAgIHBhcmFt
cy5maWx0ZXIgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRl
c3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gJmZp
bHRlcjsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZWZmZWN0ID0gdGhpczsKKyAgICAgICAgICAg
ICAgICBwYXJhbXMuZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOworICAgICAgICAgICAgICAg
IHBhcmFtcy5waXhlbEFycmF5ID0gJm91dHB1dFBpeGVsQXJyYXk7CiAgICAgICAgICAgICAgICAg
cGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAgICAgcGFy
YW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFy
dFkgPSBzdGFydFk7CkBAIC00NTIsMTIgKzQ2MSwxMyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRo
cmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBw
YWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIGZpbGxSZWdp
b24oZmlsdGVyLCBvdXRwdXRQaXhlbEFycmF5LCBmaWx0ZXJSZWdpb24sIHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1bGVuY2VUeXBlIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaAppbmRleCA2MzdkMjg0ODk1ZTIzMTUyMmE5YWM4NTdmMmM4M2ZmNzIwZDQ1
MmU1Li5kYjA2Y2FiNWI0M2NiMDRiZGVmMDg3OGJlZjYwODAwM2JkYjVjNWM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmgKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM4LDcgKzM3LDcgQEAgZW51bSBjbGFzcyBUdXJidWxlbmNlVHlw
ZSB7CiAKIGNsYXNzIEZFVHVyYnVsZW5jZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVUdXJidWxlbmNlPiBjcmVhdGUoRmlsdGVyJiwgVHVyYnVsZW5j
ZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CisgICAgc3RhdGljIFJlZjxG
RVR1cmJ1bGVuY2U+IGNyZWF0ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgs
IGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBz
dGl0Y2hUaWxlcyk7CiAKICAgICBUdXJidWxlbmNlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CiAgICAgYm9vbCBzZXRUeXBlKFR1cmJ1bGVuY2VUeXBlKTsKQEAgLTkzLDcgKzky
LDkgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJz
IHsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBmaWx0ZXI7CisgICAgICAgIGNvbnN0IEZpbHRlciog
ZmlsdGVyOworICAgICAgICBGRVR1cmJ1bGVuY2UqIGVmZmVjdDsKKyAgICAgICAgSW50UmVjdCBm
aWx0ZXJSZWdpb247CiAgICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwogICAg
ICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKICAgICAgICAgU3RpdGNoRGF0YSBzdGl0
Y2hEYXRhOwpAQCAtMTAzLDE5ICsxMDQsMTcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lk
IGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqKTsKIAotICAgIEZFVHVyYnVs
ZW5jZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBi
b29sKTsKKyAgICBGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJv
b2wgc3RpdGNoVGlsZXMpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuICJGRVR1cmJ1bGVuY2UiOyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZm
ZWN0UmVjdCgpKSk7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlk
ZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
aW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwogICAgIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGlu
ZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJl
cXVlbmN5WSkgY29uc3Q7CiAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBub2lzZTJEKGNv
bnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CiAgICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkm
LCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkg
Y29uc3Q7CisgICAgdm9pZCBmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiwgY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBQYWludGluZ0RhdGEmLCBT
dGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CiAKICAgICBzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uV29ya2VyKHZvaWQqKTsKIApAQCAtMTI5LDMgKzEyOCw0IEBAIHByaXZhdGU6
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxU
RVJfRUZGRUNUKEZFVHVyYnVsZW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IGEyZDk5NzkzYjBkYjIyNThiYzQ3NmRkY2My
OWMwY2UyNjExMGJjMWYuLjZkMjFhNjNhM2U0YmNkYzAyYWYwZmZmMDVhZDllMzIzOGFlY2NlYmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw1OCArMjIsOTcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
ZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyRWZmZWN0OwogCi1jbGFzcyBGaWx0ZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxGaWx0ZXI+IHsKK2NsYXNzIEZpbHRlciA6IHB1YmxpYyBGaWx0ZXJGdW5j
dGlvbiB7CiBwdWJsaWM6Ci0gICAgRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1
dGVUcmFuc2Zvcm0sIGZsb2F0IGZpbHRlclNjYWxlID0gMSkKLSAgICAgICAgOiBtX2Fic29sdXRl
VHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtKQotICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmls
dGVyU2NhbGUpCi0gICAgeyB9Ci0gICAgdmlydHVhbCB+RmlsdGVyKCkgPSBkZWZhdWx0OwotCi0g
ICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2Up
IHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9Ci0gICAgSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQorICAgIGVu
dW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7IEludGVyc2VjdCwgVW5pdGUgfTsKIAotICAgIEZsb2F0
U2l6ZSBmaWx0ZXJSZXNvbHV0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZXNvbHV0aW9u
OyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZXNvbHV0aW9uKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVy
UmVzb2x1dGlvbikgeyBtX2ZpbHRlclJlc29sdXRpb24gPSBmaWx0ZXJSZXNvbHV0aW9uOyB9Cisg
ICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsg
fQorICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSkg
eyBtX2ZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7IH0KIAotICAgIGZsb2F0IGZpbHRlclNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJTY2FsZTsgfQotICAgIHZvaWQgc2V0RmlsdGVyU2Nh
bGUoZmxvYXQgc2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IHNjYWxlOyB9CisgICAgRmxvYXRSZWN0
IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9Cisg
ICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QpIHsgbV9zb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3Q7IH0KKyAgICAKKyAgICBG
bG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
KyAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikg
eyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQogCi0gICAgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVUcmFu
c2Zvcm07IH0KKyAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBz
b3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KKyAg
ICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdl
LmdldCgpOyB9CiAKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3JlbmRlcmluZ01vZGU7IH0KICAgICB2b2lkIHNldFJlbmRlcmluZ01vZGUoUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmluZ01vZGU7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Ns
aXBPcGVyYXRpb247IH0KIAotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVz
b2x1dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVz
b2x1dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBGbG9hdFNpemUgc2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKSBjb25zdCB7IHJldHVybiBzaXplICogbV9maWx0ZXJTY2FsZTsg
fQorCisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0UmVj
dCYgaW1hZ2VSZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBzY2FsZWRJbWFnZVJlY3Qg
PSBpbWFnZVJlY3Q7CisgICAgICAgIHNjYWxlZEltYWdlUmVjdC5zY2FsZShtX2ZpbHRlclNjYWxl
KTsKKyAgICAgICAgcmV0dXJuIHNjYWxlZEltYWdlUmVjdDsKKyAgICB9CisKKyAgICBGbG9hdFJl
Y3QgbWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbihwcmltaXRpdmVT
dWJyZWdpb24sIG1fZmlsdGVyUmVnaW9uKTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgY2xpcFRv
UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2NsaXBPcGVyYXRpb24gPT0gQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0ID8gaW50ZXJzZWN0aW9u
KGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKSA6IHVuaW9uUmVjdChpbWFnZVJlY3QsIHBy
aW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgfQorCisgICAgRmxvYXRSZWN0IGNsaXBUb01heFByaW1p
dGl2ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY2xpcFRv
UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgbWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1p
dGl2ZVN1YnJlZ2lvbikpOworICAgIH0KKworICAgIEZsb2F0UG9pbnQgbWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIoY29uc3QgRmxvYXRQb2ludCYgdXNlclNwYWNlUG9pbnQsIGNvbnN0IEZs
b2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3QKKyAgICB7CisgICAgICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludCA9IG1hcFBvaW50
KHVzZXJTcGFjZVBvaW50LCBwcmltaXRpdmVTdWJyZWdpb24sIHNjYWxlZFJlY3RCeUZpbHRlclNj
YWxlKHByaW1pdGl2ZVN1YnJlZ2lvbikpOworICAgICAgICBGbG9hdFJlY3QgYWJzb2x1dGVJbWFn
ZVJlY3QgPSBzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShpbWFnZVJlY3QpOworICAgICAgICBhYnNv
bHV0ZVBvaW50Lm1vdmVCeSgtYWJzb2x1dGVJbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAg
IHJldHVybiBhYnNvbHV0ZVBvaW50OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBhcHBseUZp
bHRlcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0
ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVy
UmVzb2x1dGlvbihmaWx0ZXJSZXNvbHV0aW9uKQorICAgIEZpbHRlcihGaWx0ZXI6OlR5cGUgZmls
dGVyVHlwZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiBjbGlw
T3BlcmF0aW9uKQorICAgICAgICA6IEZpbHRlckZ1bmN0aW9uKGZpbHRlclR5cGUpCisgICAgICAg
ICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAgICAgLCBtX2NsaXBPcGVyYXRpb24o
Y2xpcE9wZXJhdGlvbikKKyAgICB7CisgICAgfQorCisgICAgRmlsdGVyKEZpbHRlcjo6VHlwZSBm
aWx0ZXJUeXBlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVy
YXRpb24gY2xpcE9wZXJhdGlvbikKKyAgICAgICAgOiBGaWx0ZXJGdW5jdGlvbihmaWx0ZXJUeXBl
KQorICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCisgICAgICAgICwgbV9zb3Vy
Y2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KQorICAgICAgICAsIG1fZmlsdGVyUmVnaW9uKGZp
bHRlclJlZ2lvbikKKyAgICAgICAgLCBtX2NsaXBPcGVyYXRpb24oY2xpcE9wZXJhdGlvbikKICAg
ICB7CiAgICAgfQogCiBwcml2YXRlOgorICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclNjYWxlOworICAg
IEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdp
b247CisKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7Ci0gICAgRmxvYXRT
aXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRy
YW5zZm9ybTsKICAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQgfTsKLSAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OworCisg
ICAgQ2xpcE9wZXJhdGlvbiBtX2NsaXBPcGVyYXRpb24geyBDbGlwT3BlcmF0aW9uOjpJbnRlcnNl
Y3QgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mOGRmYjU1YTQxODNmN2M0NjI0NDczMmE3NGRiYzljMzljY2I2MTAxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJCb3VuZGFyeVNldC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRmlsdGVyQm91bmRhcnlTZXQgeworcHVibGljOgorICAgIGVudW0gY2xh
c3MgRmxhZ3MgeworICAgICAgICBIYXNYICAgICAgPSAxIDw8IDAsCisgICAgICAgIEhhc1kgICAg
ICA9IDEgPDwgMSwKKyAgICAgICAgSGFzV2lkdGggID0gMSA8PCAyLAorICAgICAgICBIYXNIZWln
aHQgPSAxIDw8IDMKKyAgICB9OworCisgICAgRmlsdGVyQm91bmRhcnlTZXQoKSA9IGRlZmF1bHQ7
CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldChjb25zdCBGbG9hdFJlY3QmIGJvdW5kYXJpZXMsIE9w
dGlvblNldDxGbGFncz4gZmxhZ3MpCisgICAgICAgIDogbV9ib3VuZGFyaWVzKGJvdW5kYXJpZXMp
CisgICAgICAgICwgbV9mbGFncyhmbGFncykKKyAgICB7CisgICAgfQorCisgICAgc3RkOjpvcHRp
b25hbDxmbG9hdD4geCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mbGFncy5jb250YWlu
cyhGbGFnczo6SGFzWCkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVzLngoKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZs
b2F0PiB5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdz
OjpIYXNZKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMueSgpOworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHdp
ZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpI
YXNXaWR0aCkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVzLndpZHRoKCk7CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9h
dD4gaGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZs
YWdzOjpIYXNIZWlnaHQpKQorICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy5oZWlnaHQo
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
RmxvYXRSZWN0IG1fYm91bmRhcmllczsKKyAgICBPcHRpb25TZXQ8RmxhZ3M+IG1fZmxhZ3M7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggZmI2Nzc1
NGU0ZmM1YmJjYTUxYzM0OGVjN2Y2M2U0Y2M5MjdkYjEwOC4uMmJlOGM3MGJmMjhmMzdkZjk5MzNh
YmE4N2VlMTU5MmRhMzk3OWVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjYsMTE4ICsyNiwx
NCBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRl
ICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotI2lu
Y2x1ZGUgPGFybV9uZW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyJiBmaWx0ZXIsIFR5cGUgdHlw
ZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikKLSAgICAsIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBl
KHR5cGUpCi17Ci19Ci0KLUZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgpID0gZGVmYXVsdDsK
LQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAg
ICBtX2Fic29sdXRlUGFpbnRSZWN0ID0gSW50UmVjdCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0
IDogbV9pbnB1dEVmZmVjdHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QudW5pdGUoZWZm
ZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsK
LX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpCi17Ci0gICAg
Ly8gRmlsdGVycyBpbiBTVkcgY2xpcCB0byBwcmltaXRpdmUgc3VicmVnaW9uLCB3aGlsZSBDU1Mg
ZG9lc24ndC4KLSAgICBpZiAobV9jbGlwc1RvQm91bmRzKQotICAgICAgICBtX2Fic29sdXRlUGFp
bnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KG1fbWF4RWZmZWN0UmVjdCkpOwotICAg
IGVsc2UKLSAgICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0
KG1fbWF4RWZmZWN0UmVjdCkpOwotfQotCi1GbG9hdFBvaW50IEZpbHRlckVmZmVjdDo6bWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCB1c2VyU3BhY2VQb2ludCkgY29uc3QK
LXsKLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQb2ludCh1c2VyU3BhY2VQb2lu
dCwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdp
b24pOwotICAgIGFic29sdXRlUG9pbnQubW92ZUJ5KC1tX2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0
aW9uKCkpOwotICAgIHJldHVybiBhYnNvbHV0ZVBvaW50OwotfQotCi1JbnRSZWN0IEZpbHRlckVm
ZmVjdDo6cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IEludFJlY3QmIGVm
ZmVjdFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgbG9jYXRpb24gPSBtX2Fic29sdXRlUGFp
bnRSZWN0LmxvY2F0aW9uKCk7Ci0gICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0LmxvY2F0
aW9uKCkpOwotICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7Ci19Ci0KLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK0ZpbHRlckVmZmVjdDo6Rmls
dGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZSB0eXBlKQorICAgIDogRmlsdGVyRnVuY3Rpb24o
dHlwZSkKIHsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAgRmxvYXRTaXplIHNjYWxl
OwotICAgIEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSwgc2NhbGUpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKLSAgICB0cmFuc2Zv
cm0uc2NhbGUoc2NhbGUpLnRyYW5zbGF0ZSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigp
KTsKLSAgICByZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3Qoc3JjUmVjdCk7Ci19Ci0KLUZsb2F0UmVj
dCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCi17Ci0g
ICAgLy8gRkVUaWxlLCBGRVR1cmJ1bGVuY2UsIEZFRmxvb2QgZG9uJ3QgaGF2ZSBpbnB1dCBlZmZl
Y3RzLCB0YWtlIHRoZSBmaWx0ZXIgcmVnaW9uIGFzIHVuaXRlIHJlY3QuCi0gICAgRmxvYXRSZWN0
IHN1YnJlZ2lvbjsKLSAgICBpZiAodW5zaWduZWQgbnVtYmVyT2ZJbnB1dEVmZmVjdHMgPSBpbnB1
dEVmZmVjdHMoKS5zaXplKCkpIHsKLSAgICAgICAgc3VicmVnaW9uID0gaW5wdXRFZmZlY3QoMCkt
PmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkgewotICAgICAgICAgICAg
YXV0byBpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGlucHV0RWZmZWN0KGkpLT5kZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICAgICAgICAgIHN1YnJlZ2lvbi51bml0ZShp
bnB1dFByaW1pdGl2ZVN1YnJlZ2lvbik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAg
c3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKLQotICAgIC8v
IEFmdGVyIGNhbGxpbmcgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIG9uIHRoZSB0
YXJnZXQgZWZmZWN0LCByZXNldCB0aGUgc3VicmVnaW9uIGFnYWluIGZvciA8ZmVUaWxlPi4KLSAg
ICBpZiAoZmlsdGVyRWZmZWN0VHlwZSgpID09IEZpbHRlckVmZmVjdFR5cGVUaWxlKQotICAgICAg
ICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpOwotCi0gICAg
YXV0byBib3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwotICAgIGlmIChoYXNYKCkpCi0g
ICAgICAgIHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsKLSAgICBpZiAoaGFzWSgpKQot
ICAgICAgICBzdWJyZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7Ci0gICAgaWYgKGhhc1dpZHRo
KCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFyaWVzLndpZHRoKCkpOwotICAg
IGlmIChoYXNIZWlnaHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldEhlaWdodChib3VuZGFyaWVz
LmhlaWdodCgpKTsKLQotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24p
OwotCi0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNm
b3JtKCkubWFwUmVjdChzdWJyZWdpb24pOwotICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1f
ZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShm
aWx0ZXJSZXNvbHV0aW9uKTsKLSAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdl
IGNhbiB1c2UgaXQgdG8gbWFwIGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVm
ZmVyIGNvb3JkaW5hdGVzLgotICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29s
dXRlU3VicmVnaW9uKTsKLQotICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUg
ZmlsdGVyIHJlZ2lvbi4KLSAgICBhdXRvIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9m
aWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0gICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2Nh
bGUoZmlsdGVyUmVzb2x1dGlvbik7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFi
c29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uKTsKLQotICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1
dGVTdWJyZWdpb24pOwotICAgIHJldHVybiBzdWJyZWdpb247CiB9CiAKIEZpbHRlckVmZmVjdCog
RmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0CkBAIC0xNDYs
NTE0ICs0Miw5OSBAQCBGaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5z
aWduZWQgbnVtYmVyKSBjb25zdAogICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIp
LmdldCgpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVy
RWZmZWN0KmVmZmVjdCwgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykK
LXsKLSAgICBhbGxFZmZlY3RzLmFkZChlZmZlY3QpOwotICAgIHVuc2lnbmVkIHNpemUgPSBlZmZl
Y3QtPm51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVm
ZmVjdChpKTsKLSAgICAgICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMpOwotICAgIH0K
LSAgICByZXR1cm4gYWxsRWZmZWN0cy5zaXplKCk7Ci19Ci0KLXVuc2lnbmVkIEZpbHRlckVmZmVj
dDo6dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxjb25z
dCBGaWx0ZXJFZmZlY3QqPiBhbGxFZmZlY3RzOwotICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cyh0
aGlzLCBhbGxFZmZlY3RzKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKK0Zsb2F0
UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICB1bnNpZ25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBp
biA9IG1faW5wdXRFZmZlY3RzLmF0KGkpLmdldCgpOwotICAgICAgICBpbi0+YXBwbHkoKTsKLSAg
ICAgICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgLy8gQ29udmVydCBpbnB1dCByZXN1bHRzIHRvIHRoZSBjdXJyZW50IGVmZmVjdCdzIGNvbG9y
IHNwYWNlLgotICAgICAgICB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGluLCBpKTsKLSAgICB9
Ci0KLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldFJlc3VsdENvbG9y
U3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZm
ZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9h
YnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwg
bV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVj
dFJlY3QgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpIDw8
ICJcbiAgZmlsdGVyIHJlc29sdXRpb24gIiA8PCBtX2ZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkp
OwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpKSB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAg
ICBpbnB1dEVmZmVjdChpKS0+Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCk7Ci0gICAgfQor
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBodHRwczovL3d3dy53My5vcmcvVFIvZmls
dGVyLWVmZmVjdHMtMS8jRmlsdGVyUHJpbWl0aXZlU3ViUmVnaW9uLgorICAgIEZsb2F0UmVjdCBk
ZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uOwogICAgIAotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVj
aWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCi0gICAgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJl
TXVsdGlwbGllZFBpeGVscygpCi17Ci0gICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBs
aWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCi0g
ICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7
Ci0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7Ci0gICAgaW50IHBp
eGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOwotCi0gICAgLy8gV2UgbXVzdCBo
YXZlIGZvdXIgYnl0ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCi0gICAgQVNTRVJU
KCEocGl4ZWxBcnJheUxlbmd0aCAlIDQpKTsKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKLSAgICBpZiAocGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgewotICAgICAgICB1aW50OF90KiBs
YXN0UGl4ZWwgPSBwaXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKLSAgICAg
ICAgZG8gewotICAgICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCi0gICAg
ICAgICAgICB1aW50OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7
Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhl
bHMudmFsWzBdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4
ZWxzLnZhbFsxXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxz
LnZhbFszXSk7Ci0gICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNp
eHRlZW5QaXhlbHMudmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Ci0gICAgICAgICAgICB2
c3Q0cV91OChwaXhlbERhdGEsIHNpeHRlZW5QaXhlbHMpOwotICAgICAgICAgICAgcGl4ZWxEYXRh
ICs9IDY0OwotICAgICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOwotCi0gICAg
ICAgIHBpeGVsQXJyYXlMZW5ndGggJj0gMHgzZjsKLSAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG51bVBp
eGVscyA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OwotCi0gICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2gg
cGl4ZWwsIGNoZWNraW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBu
ZWNlc3NhcnkKLSAgICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgewotICAgICAgICAvLyBBbHBo
YSBpcyB0aGUgNHRoIGJ5dGUgaW4gYSBwaXhlbAotICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVs
RGF0YSArIDMpOwotICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5k
IGluY3JlbWVudCB0aGUgcGl4ZWwgbG9jYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCAzOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKLSAgICAgICAgICAg
ICAgICAqcGl4ZWxEYXRhID0gYTsKLSAgICAgICAgICAgICsrcGl4ZWxEYXRhOwotICAgICAgICB9
Ci0gICAgICAgIC8vIEluY3JlbWVudCBmb3IgYWxwaGEKLSAgICAgICAgKytwaXhlbERhdGE7Ci0g
ICAgfQotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQotewotICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBudWxscHRyOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6Om51
bGxvcHQ7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQot
ewotICAgIC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQg
ZWZmZWN0IGhhcwotICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMg
aW4gYW4gZXJyb25lb3VzIHN0YXRlLgotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgY2xl
YXJSZXN1bHQoKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgbV9pbnB1
dEVmZmVjdHMuYXQoaSkuZ2V0KCktPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotfQotCi1JbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgTE9HX1dJ
VEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFt
ZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1h
Z2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwot
Ci0gICAgaWYgKCFoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBp
ZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1
bHQuZ2V0KCk7Ci0KLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBt
X2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpC
R1JBOCk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAvLyBEb24ndCB1c2UgdGhlIGlucHV0J3Mgc3VicmVnaW9uIGZvciA8ZmVUaWxl
Pi4KKyAgICBpZiAoIW1faW5wdXRFZmZlY3RzLmlzRW1wdHkoKSAmJiBmaWx0ZXJUeXBlKCkgIT0g
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBlZmZlY3Qg
OiBtX2lucHV0RWZmZWN0cykKKyAgICAgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24u
dW5pdGUoZWZmZWN0LT5jYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKSk7CisgICAg
fSBlbHNlCisgICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXIuZmlsdGVy
UmVnaW9uKCk7CiAKLSAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRQaXhlbEJ1ZmZlcigqbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3Vs
dC5nZXQoKTsKLX0KKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uOwogCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0
IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xv
clNwYWNlKQotewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNT
RVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNj
YWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0byBjaGVja2Vk
QXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKGNo
ZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
YXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgY29weVVubXVsdGlwbGllZFJlc3VsdCgqcGl4ZWxBcnJheSwgcmVjdCwgY29s
b3JTcGFjZSk7Ci0gICAgcmV0dXJuIHBpeGVsQXJyYXk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9u
LnNldFgobV9ib3VuZGFyeVNldC54KCkudmFsdWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lv
bi54KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0WShtX2JvdW5kYXJ5U2V0LnkoKS52
YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLnkoKSkpOworICAgIHByaW1pdGl2ZVN1
YnJlZ2lvbi5zZXRXaWR0aChtX2JvdW5kYXJ5U2V0LndpZHRoKCkudmFsdWVfb3IoZGVmYXVsdFBy
aW1pdGl2ZVN1YnJlZ2lvbi53aWR0aCgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldEhl
aWdodChtX2JvdW5kYXJ5U2V0LmhlaWdodCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJy
ZWdpb24uaGVpZ2h0KCkpKTsKKyAgICAKKyAgICByZXR1cm4gcHJpbWl0aXZlU3VicmVnaW9uOwog
fQogCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGll
ZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gY29sb3JTcGFjZSkKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZU1h
eFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBJ
bnRTaXplIHNjYWxlZFNpemUocmVjdC5zaXplKCkpOwotICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXpl
LmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsK
LSAgICBpZiAoIXBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICBy
ZXR1cm4gcGl4ZWxBcnJheTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0
ZVByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOworICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0
aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitGbG9h
dFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIElu
dFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkpOwotICAgIEludFNpemUgc2NhbGVkUGFpbnRTaXplKG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKTsKLSAgICBzY2FsZWRQYWludFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0aW5hdGlvbiB0byB0cmFuc3Bh
cmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkgdGhlIHNvdXJjZS4KLSAgICBp
ZiAoc2NhbGVkUmVjdC54KCkgPCAwIHx8IHNjYWxlZFJlY3QueSgpIDwgMCB8fCBzY2FsZWRSZWN0
Lm1heFgoKSA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpIHx8IHNjYWxlZFJlY3QubWF4WSgpID4g
c2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24uZGF0
YSgpLCAwLCBkZXN0aW5hdGlvbi5sZW5ndGgoKSk7CisgICAgaWYgKG1fZmlsdGVySW1hZ2UpCisg
ICAgICAgIHJldHVybiBtX2ZpbHRlckltYWdlLT5pbWFnZVJlY3QoKTsKIAotICAgIC8vIEVhcmx5
IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgot
ICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAwIHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAg
fHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVj
dC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm47CisgICAg
RmxvYXRSZWN0IGltYWdlUmVjdDsKIAotICAgIGludCB4T3JpZ2luID0gc2NhbGVkUmVjdC54KCk7
Ci0gICAgaW50IHhEZXN0ID0gMDsKLSAgICBpZiAoeE9yaWdpbiA8IDApIHsKLSAgICAgICAgeERl
c3QgPSAteE9yaWdpbjsKLSAgICAgICAgeE9yaWdpbiA9IDA7CisgICAgZm9yIChhdXRvJiBlZmZl
Y3QgOiBtX2lucHV0RWZmZWN0cykgeworICAgICAgICBhdXRvJiBpbnB1dCA9ICplZmZlY3QtPmZp
bHRlckltYWdlKCk7CisgICAgICAgIGltYWdlUmVjdC51bml0ZShpbnB1dC5pbWFnZVJlY3QoKSk7
CiAgICAgfQotICAgIGludCB4RW5kID0gc2NhbGVkUmVjdC5tYXhYKCk7Ci0gICAgaWYgKHhFbmQg
PiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkKLSAgICAgICAgeEVuZCA9IHNjYWxlZFBhaW50U2l6
ZS53aWR0aCgpOwotCi0gICAgaW50IHlPcmlnaW4gPSBzY2FsZWRSZWN0LnkoKTsKLSAgICBpbnQg
eURlc3QgPSAwOwotICAgIGlmICh5T3JpZ2luIDwgMCkgewotICAgICAgICB5RGVzdCA9IC15T3Jp
Z2luOwotICAgICAgICB5T3JpZ2luID0gMDsKLSAgICB9Ci0gICAgaW50IHlFbmQgPSBzY2FsZWRS
ZWN0Lm1heFkoKTsKLSAgICBpZiAoeUVuZCA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKLSAg
ICAgICAgeUVuZCA9IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKTsKLQotICAgIGludCBzaXplID0g
KHhFbmQgLSB4T3JpZ2luKSAqIDQ7Ci0gICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSBzY2Fs
ZWRSZWN0LndpZHRoKCkgKiA0OwotICAgIGludCBzb3VyY2VTY2FubGluZSA9IHNjYWxlZFBhaW50
U2l6ZS53aWR0aCgpICogNDsKLSAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGlu
YXRpb24uZGF0YSgpICsgKCh5RGVzdCAqIHNjYWxlZFJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0
OwotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9y
aWdpbiAqIHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKSArIHhPcmlnaW4pICogNDsKIAotICAgIHdo
aWxlICh5T3JpZ2luIDwgeUVuZCkgewotICAgICAgICBtZW1jcHkoZGVzdGluYXRpb25QaXhlbCwg
c291cmNlUGl4ZWwsIHNpemUpOwotICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IGRlc3RpbmF0
aW9uU2NhbmxpbmU7Ci0gICAgICAgIHNvdXJjZVBpeGVsICs9IHNvdXJjZVNjYW5saW5lOwotICAg
ICAgICArK3lPcmlnaW47Ci0gICAgfQorICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0
aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotc3RhdGlj
IHZvaWQgY29weVByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBpbnB1
dFNpemUpCitJbnRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJlY3Qo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAg
c2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgc3JjLmhl
aWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dCeXRlczsK
LSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRhKCkpOwot
Ci0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNpemUud2lk
dGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBkZXN0LnJv
d0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50
OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3Qq
IGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsK
LSAgICB1aW50OF90KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsK
LQotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50IGFscGhh
ID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9
IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OwotICAg
ICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29t
cG9uZW50WzFdKSAqIGFscGhhIC8gMjU1OwotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsy
XSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1Owot
ICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOwotICAgICAgICBzb3VyY2VD
b21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKLSAgICB9
Ci0jZW5kaWYKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2
ZVN1YnJlZ2lvbihmaWx0ZXIpOworICAgIGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gaW1hZ2VSZWN0ID0gY2FsY3VsYXRlSW1h
Z2VSZWN0KGZpbHRlciwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChmaWx0ZXIuc2NhbGVkUmVjdEJ5RmlsdGVyU2NhbGUoaW1hZ2VSZWN0KSk7CiB9CiAK
LXN0YXRpYyB2b2lkIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRT
aXplJiBpbnB1dFNpemUpCit2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1
cnNpdmUoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIHNpemVfdCByb3dCeXRlcyA9IGlu
cHV0U2l6ZS53aWR0aCgpICogNDsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53
aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVp
Z2h0KCk7Ci0gICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgc3JjLmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsKLQotICAgIHZJbWFnZV9CdWZmZXIg
ZGVzdDsKLSAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAgZGVzdC5oZWln
aHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOwot
ICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEo
KSk7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwg
a3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25l
bnQgPSBzb3VyY2UuZGF0YSgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBv
bmVudCArIChpbnB1dFNpemUuYXJlYSgpICogNCkudmFsdWUoKTsKLSAgICB1aW50OF90KiBkZXN0
aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKLSAgICB3aGlsZSAoc291cmNl
Q29tcG9uZW50IDwgZW5kKSB7Ci0gICAgICAgIGludCBhbHBoYSA9IHNvdXJjZUNvbXBvbmVudFsz
XTsKLSAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFswXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsxXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICog
MjU1IC8gYWxwaGE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudFswXSA9IDA7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsxXSA9IDA7
Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbM10gPSBhbHBoYTsKLSAgICAgICAgc291cmNlQ29t
cG9uZW50ICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ICs9IDQ7Ci0gICAgfQot
I2VuZGlmCi19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVmZmVjdDo6Y29u
dmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
dGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKQotewotICAgIC8vIEZJ
WE1FOiBVc2luZyBhbiBJbWFnZUJ1ZmZlciB0byBwZXJmb3JtIHRoZSBjb2xvciBzcGFjZSBjb252
ZXJzaW9uIGlzIHVubmVjZXNzYXJ5LiBXZSBjYW4gZG8gaXQgZGlyZWN0bHkuCi0KLSAgICBJbnRS
ZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOwotICAg
IGRlc3RpbmF0aW9uUmVjdC5zY2FsZSgxIC8gbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
RmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGRlc3RpbmF0
aW9uUmVjdC5zaXplKCkpOwotICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBp
bmNvbWluZyBQaXhlbEJ1ZmZlcgotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpLCBvcGVyYXRpbmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0gICAg
aWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgYnVmZmVyLT5w
dXRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICByZXR1cm4g
Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKHRhcmdldENvbG9yU3BhY2UsICpidWZmZXIs
IGRlc3RpbmF0aW9uUmVjdCwgcGl4ZWxCdWZmZXIuZm9ybWF0KCkuYWxwaGFGb3JtYXQpOworICAg
IC8vIENsZWFyIGFsbCByZXN1bHRzLCByZWdhcmRsZXNzIHRoYXQgdGhlIGN1cnJlbnQgZWZmZWN0
IGhhcworICAgIC8vIGEgcmVzdWx0LiBDYW4gYmUgdXNlZCBpZiBhbiBlZmZlY3QgaXMgaW4gYW4g
ZXJyb25lb3VzIHN0YXRlLgorICAgIGNsZWFyRmlsdGVySW1hZ2UoKTsKKyAgICBmb3IgKGF1dG8m
IGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQorICAgICAgICBlZmZlY3QtPmNsZWFyRmlsdGVySW1h
Z2VzUmVjdXJzaXZlKCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVm
ZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVyLCBjb25z
dCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEFscGhhRm9ybWF0
KQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAg
IC8vIEZJWE1FOiBUaGlzIGNhbiBiZSBkb25lIG1vcmUgZGlyZWN0bHkgdXNpbmcgUGl4ZWxCdWZm
ZXJDb252ZXJzaW9uLgorICAgIGlmIChtX2ZpbHRlckltYWdlKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6
ZShyZWN0LnNpemUoKSk7CisgICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBjYWxjdWxhdGVQ
cmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKKyAgICBpZiAocHJpbWl0aXZlU3VicmVnaW9uLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gQ3JlYXRlIGFuIEltYWdl
QnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFu
ZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwg
bV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJH
UkE4KTsKLSAgICBpZiAoIWNvbnZlcnRlZEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5
IHdoZW4gZHJhd2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgotICAgIGNvbnZl
cnRlZEJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcihpbnB1dEJ1ZmZlciwgcmVjdCk7
CisgICAgYXV0byBpbWFnZVJlY3QgPSBjYWxjdWxhdGVJbWFnZVJlY3QoZmlsdGVyLCBwcmltaXRp
dmVTdWJyZWdpb24pOworICAgIGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGZpbHRlci5zY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShpbWFnZVJlY3QpKTsKICAgICAKLSAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBvdXRwdXRBbHBoYUZvcm1hdCwgUGl4ZWxGb3Jt
YXQ6OlJHQkE4LCB0YXJnZXRDb2xvclNwYWNlIH07Ci0gICAgcmV0dXJuIGNvbnZlcnRlZEJ1ZmZl
ci0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCByZWN0KTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRpb24oVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkKLXsKLSAgICAvLyBDb252ZXJ0cyB0aGUgZGF0YSBzdG9yZWQgaW4gbV9pbWFnZUJ1ZmZlclJl
c3VsdCwgYW5kIHNhdmUgdG8gZGVzdGluYXRpb24KLSAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVm
ZmVyID0gY29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UsICptX2ltYWdl
QnVmZmVyUmVzdWx0LCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0s
IG91dHB1dEZvcm1hdCk7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCks
IGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5Q29u
dmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIENvbnZl
cnRzIHRoZSBkYXRhIHN0b3JlZCBpbiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0L21fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LAotICAgIC8vIHdoaWNoZXZlciBpc24ndCBudWxsLCBhbmQgc2F2
ZSB0byBkZXN0aW5hdGlvbgotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0
UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29sb3JTcGFjZSwgcGl4ZWxCdWZmZXIpOwotICAgIGlm
ICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3B5SW1hZ2VC
eXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgZGVzdFJlY3Qp
OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9u
YWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEFTU0VSVChoYXNS
ZXN1bHQoKSk7CisgICAgaWYgKGFic29sdXRlSW1hZ2VSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAi
IGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9p
bWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAi
IDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24g
ZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkg
ewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHJlY3QpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQt
PmNvbG9yU3BhY2UoKSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgICAgICAgICAgUGl4ZWxC
dWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAg
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBp
eGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSB9KTsKLSAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXpl
IGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAg
ICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgQVNTRVJUKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQo
KS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1
ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAg
ICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3Jt
YXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVVucHJlbXVsdGlw
bHlpbmdBbHBoYShtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNl
KSkgewotICAgICAgICBjb3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKmNvbG9yU3BhY2UsIHJlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwotfQotCi12b2lkIEZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29s
b3JTcGFjZT4gY29sb3JTcGFjZSkKLXsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwotCi0gICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmls
dGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4g
RXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAg
IiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0IDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpOwotCi0gICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewotICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KLSAg
ICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXF1aXJl
c1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAg
ICAgICAgICBjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
LCAqY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVj
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBBU1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29s
b3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVz
dWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHsgSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAg
ICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2Ug
fTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxCdWZmZXI6
OnRyeUNyZWF0ZShmb3JtYXQsIGlucHV0U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZl
cnNpb24oY29sb3JTcGFjZSkpIHsKLSAgICAgICAgY29weUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9E
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqY29s
b3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29weUltYWdlQnl0
ZXMobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3Qp
OwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQgJWR4JWQiLCBmaWx0ZXJOYW1lKCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpLndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsK
LQotICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFo
YXNSZXN1bHQoKSk7Ci0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdl
QnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmls
dGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRDb2xv
clNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpOwotfQotCi1zdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17Ci0gICAgTE9HKEZpbHRlcnMsICJG
aWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJO
YW1lKCksIHRoaXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4K
LSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpOwotCi0gICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLQotICAgIEludFNpemUgcmVz
dWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2Nh
bGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgcmVzdWx0U2l6ZSk7Ci0gICAgcmV0
dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8UGl4ZWxC
dWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCi17
Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKLQotICAgIC8vIE9ubHkgb25lIHJl
c3VsdCB0eXBlIGlzIGFsbG93ZWQuCi0gICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7Ci0gICAgQVNT
RVJUKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBh
aW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdDsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6
ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
UGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKLSAgICBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0
LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci19
Ci0KLWJvb2wgRmlsdGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZl
cnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGRlc3RpbmF0aW9uQ29s
b3JTcGFjZSkKLXsKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVz
IHdoZXRoZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJz
aW9uCi0gICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBj
b2xvciBzcGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0Ci0gICAgLy8gQU5EIDIpIHRoZSBm
aWx0ZXIgaXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKLSAgICByZXR1cm4gZGVzdGluYXRpb25D
b2xvclNwYWNlICYmIHJlc3VsdENvbG9yU3BhY2UoKSAhPSAqZGVzdGluYXRpb25Db2xvclNwYWNl
OwotI2Vsc2UKLSAgICAvLyBBZGRpdGlvbmFsIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgbm90
IG5lZWRlZCBvbiBub24tQ0cKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25Db2xvclNwYWNl
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBkZXN0
aW5hdGlvbkNvbG9yU3BhY2UpCi17Ci0jaWYgVVNFKENHKQotICAgIC8vIENHIGhhbmRsZXMgY29s
b3Igc3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KLSAgICBVTlVTRURfUEFSQU0oZGVzdGlu
YXRpb25Db2xvclNwYWNlKTsKLSNlbHNlCi0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCBkZXN0aW5h
dGlvbkNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3Nhcnkg
SW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKLSAgICAvLyBjb2xvciBzcGFjZSB0cmFu
c2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaW1h
Z2VCdWZmZXJSZXN1bHQoKS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JT
cGFjZSk7Ci0KLSAgICBtX3Jlc3VsdENvbG9yU3BhY2UgPSBkZXN0aW5hdGlvbkNvbG9yU3BhY2U7
Ci0KLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotICAgIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gc3RkOjpudWxsb3B0OwotI2VuZGlmCisgICAgYXV0
byBpc0FscGhhSW1hZ2UgPSB0aGlzLT5pc0FscGhhSW1hZ2UoKTsKKyAgICBhdXRvIGltYWdlQ29s
b3JTcGFjZSA9IHRoaXMtPmltYWdlQ29sb3JTcGFjZSgpOworICAgIAorICAgIG1fZmlsdGVySW1h
Z2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBh
YnNvbHV0ZUltYWdlUmVjdCwgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLCBpbWFnZUNvbG9yU3BhY2UpOworICAgIGlmICghbV9maWx0ZXJJbWFnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAg
ICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgYXBwbHkoKToiCisgICAgICAgIDw8ICJcbiAgcHJpbWl0aXZlU3VicmVnaW9uICIgPDwgcHJp
bWl0aXZlU3VicmVnaW9uCisgICAgICAgIDw8ICJcbiAgbWF4UHJpbWl0aXZlU3VicmVnaW9uICIg
PDwgZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pCisgICAg
ICAgIDw8ICJcbiAgaW1hZ2VSZWN0ICIgPDwgaW1hZ2VSZWN0CisgICAgICAgIDw8ICJcbiAgYWJz
b2x1dGVJbWFnZWdSZWN0ICIgPDwgYWJzb2x1dGVJbWFnZVJlY3QpOworICAgIAorICAgIC8vIEFk
ZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBhbmQgcmV0dXJuIGVhcmxp
ZXIuCisgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGZpbHRlcik7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3QKQEAgLTY2Myw5ICsxNDQsNyBAQCBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVAogICAgIAogICAg
IGlmIChyZXByZXNlbnRhdGlvblR5cGUgPT0gUmVwcmVzZW50YXRpb25UeXBlOjpEZWJ1Z2dpbmcp
IHsKICAgICAgICAgVGV4dFN0cmVhbTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwotICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIGltYWdlIiwgbV9hbHBoYUltYWdlKTsKICAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcgY29sb3JzcGFjZSIsIG1fb3BlcmF0aW5nQ29s
b3JTcGFjZSk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCBt
X3Jlc3VsdENvbG9yU3BhY2UpOwogICAgICAgICB0cyA8PCAiXG4iIDw8IGluZGVudDsKICAgICB9
CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggMTJkZWQyNjVhNjU1YzM3ZTc3ZTJj
ZjA1YjUyNzczZjJiOTZiNDcxYy4uNTBjY2IwYTZkYTYwZDMyMWUxNDBkZmFkNzQzZGIwOTljMzll
MmJlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMiwxNyArMjIsOSBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJEZXN0aW5h
dGlvbkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIkZpbHRlckJvdW5k
YXJ5U2V0LmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJJ
bWFnZS5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CkBAIC00MiwyMTcg
KzM0LDY0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVyOwogY2xhc3MgRmls
dGVyRWZmZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7CiAKLWVudW0gRmlsdGVyRWZmZWN0VHlw
ZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVua25vd24sCi0gICAgRmlsdGVyRWZmZWN0VHlwZUlt
YWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVUaWxlLAotICAgIEZpbHRlckVmZmVjdFR5cGVTb3Vy
Y2VJbnB1dAotfTsKLQotY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8Rmls
dGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24g
ewogcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBCbGVu
ZCwKLSAgICAgICAgQ29sb3JNYXRyaXgsCi0gICAgICAgIENvbXBvbmVudFRyYW5zZmVyLAotICAg
ICAgICBDb21wb3NpdGUsCi0gICAgICAgIENvbnZvbHZlTWF0cml4LAotICAgICAgICBEaWZmdXNl
TGlnaHRpbmcsCi0gICAgICAgIERpc3BsYWNlbWVudE1hcCwKLSAgICAgICAgRHJvcFNoYWRvdywK
LSAgICAgICAgRmxvb2QsCi0gICAgICAgIEdhdXNzaWFuQmx1ciwKLSAgICAgICAgSW1hZ2UsCi0g
ICAgICAgIExpZ2h0aW5nLAotICAgICAgICBNZXJnZSwKLSAgICAgICAgTW9ycGhvbG9neSwKLSAg
ICAgICAgT2Zmc2V0LAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nLAotICAgICAgICBUaWxlLAot
ICAgICAgICBUdXJidWxlbmNlLAotICAgICAgICBTb3VyY2VBbHBoYSwKLSAgICAgICAgU291cmNl
R3JhcGhpYwotICAgIH07Ci0gICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7Ci0KLSAgICB2b2lk
IGNsZWFyUmVzdWx0KCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKLQotICAg
IEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFs
PERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICB2b2lk
IGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3Rk
OjpudWxsb3B0KTsKLSAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9y
JiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQotICAgIEZpbHRlckVm
ZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwotICAgIHVuc2lnbmVkIG51bWJlck9m
RWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9Ci0g
ICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0OwotICAgIAotICAg
IGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1
bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5h
Z21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdAotICAgICAgICAgICAgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdAot
ICAgICAgICAgICAgfHwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgfQotCi0gICAg
RmxvYXRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNvbnN0
OwotICAgIEludFJlY3QgcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKLSAgICAKLSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAgRmxv
YXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotCi0gICAgLy8gU29s
aWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgotICAgIGJvb2wgaXNB
bHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYUltYWdlOyB9Ci0gICAgdm9pZCBzZXRJ
c0FscGhhSW1hZ2UoYm9vbCBhbHBoYUltYWdlKSB7IG1fYWxwaGFJbWFnZSA9IGFscGhhSW1hZ2U7
IH0KKyAgICBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIGNvbnN0IHsg
cmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CisgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1
bnNpZ25lZCBudW1iZXIpIGNvbnN0OwogCi0gICAgSW50UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVQYWludFJlY3Q7IH0KLSAgICB2b2lkIHNldEFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1
dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50UmVjdDsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxh
dGVQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJikgY29uc3Q7CisgICAgRmxvYXRSZWN0
IGNhbGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OworICAgIEludFJlY3QgY2Fs
Y3VsYXRlQWJzb2x1dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJikgY29uc3Q7CiAKLSAgICBGbG9h
dFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQot
ICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3Qp
IHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAKKyAgICBGaWx0ZXJJbWFnZSog
ZmlsdGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckltYWdlLmdldCgpOyB9CisgICAg
dm9pZCBjbGVhckZpbHRlckltYWdlKCkgb3ZlcnJpZGUgeyBtX2ZpbHRlckltYWdlID0gbnVsbHB0
cjsgfQorICAgIHZvaWQgY2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoKTsKIAotICAgIHZvaWQg
YXBwbHkoKTsKKyAgICB2b2lkIHNldEJvdW5kYXJ5U2V0KGNvbnN0IEZpbHRlckJvdW5kYXJ5U2V0
JiBib3VuZGFyeVNldCkgeyBtX2JvdW5kYXJ5U2V0ID0gYm91bmRhcnlTZXQ7IH0KIAotICAgIC8v
IENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQg
b2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5z
dXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVz
dWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5l
ZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRl
clJlc3VsdElmTmVlZGVkKCkgeyB9CisgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBv
cGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNl
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNv
bG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpOworICAgIC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVl
cy4KKyAgICB2aXJ0dWFsIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1hZ2VDb2xvclNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAKLSAgICB2aXJ0
dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZp
bHRlckVmZmVjdFR5cGVVbmtub3duOyB9CisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKSA9IDA7CiAKLSAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0
c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMoKTsgfQorI2lmIFVTRShDT1JFX0lNQUdF
KQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5Q29yZUltYWdlKGNvbnN0IEZpbHRlciYp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKyAgICBib29sIGFwcGx5KGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlOwogCiAgICAgZW51bSBjbGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBU
ZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUg
PSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRwdXQpIGNvbnN0OwogCi0gICAgLy8gVGhlIGZv
bGxvd2luZyBmdW5jdGlvbnMgYXJlIFNWRyBzcGVjaWZpYyBhbmQgd2lsbCBtb3ZlIHRvIFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgotICAgIC8vIFNlZSBidWcgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NjE0LgotICAgIGJvb2wgaGFzWCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzWDsgfQotICAgIHZvaWQgc2V0SGFzWChib29sIHZhbHVlKSB7IG1faGFz
WCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1koKSBjb25zdCB7IHJldHVybiBtX2hhc1k7IH0K
LSAgICB2b2lkIHNldEhhc1koYm9vbCB2YWx1ZSkgeyBtX2hhc1kgPSB2YWx1ZTsgfQotCi0gICAg
Ym9vbCBoYXNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzV2lkdGg7IH0KLSAgICB2b2lkIHNl
dEhhc1dpZHRoKGJvb2wgdmFsdWUpIHsgbV9oYXNXaWR0aCA9IHZhbHVlOyB9Ci0KLSAgICBib29s
IGhhc0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRI
YXNIZWlnaHQoYm9vbCB2YWx1ZSkgeyBtX2hhc0hlaWdodCA9IHZhbHVlOyB9Ci0KLSAgICBGbG9h
dFJlY3QgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbikgeyBtX2ZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotCi0gICAgRmxv
YXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdEJvdW5kYXJp
ZXM7IH0KLSAgICB2b2lkIHNldEVmZmVjdEJvdW5kYXJpZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZl
Y3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0K
LSAgICAKLSAgICB2b2lkIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGNvbnN0IEZsb2F0
UmVjdCYgcikgeyBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uID0gcjsgfQotICAgIAotICAg
IEZsb2F0UG9pbnQgbWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2ludCkgY29u
c3Q7Ci0gICAgCi0gICAgVHlwZSBmaWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsgfQotCi0gICAgRmlsdGVyJiBmaWx0ZXIoKSB7IHJl
dHVybiBtX2ZpbHRlcjsgfQotICAgIGNvbnN0IEZpbHRlciYgZmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXI7IH0KLQotICAgIGJvb2wgY2xpcHNUb0JvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2xpcHNUb0JvdW5kczsgfQotICAgIHZvaWQgc2V0Q2xpcHNUb0JvdW5kcyhib29sIHZhbHVl
KSB7IG1fY2xpcHNUb0JvdW5kcyA9IHZhbHVlOyB9Ci0KLSAgICBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGlu
Z0NvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xv
clNwYWNlID0gY29sb3JTcGFjZTsgfQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
cmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0Q29sb3JTcGFjZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRSZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX3Jlc3VsdENvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVy
YXRpbmdDb2xvclNwYWNlKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKLSAgICAKLSAgICBzdGF0aWMgVmVjdG9yPGZs
b2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcykKLSAgICB7
Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tpXSk7
Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOwotICAgIH0KLQogcHJvdGVjdGVkOgot
ICAgIEZpbHRlckVmZmVjdChGaWx0ZXImLCBUeXBlKTsKLSAgICAKLSAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7Ci0KLSAgICBJbWFnZUJ1ZmZlciogY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0KLSAgICAvLyBSZXR1cm4g
dHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBS
R0JBIHZhbHVlcywgd2l0aAotICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3Ig
Y29tcG9uZW50IGluIFswLCBhbHBoYV0uCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzVmFsaWRQ
cmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gSWYgYSBwcmUt
bXVsdGlwbGllZCBpbWFnZSwgY2hlY2sgZXZlcnkgcGl4ZWwgZm9yIHZhbGlkaXR5IGFuZCBjb3Jy
ZWN0IGlmIG5lY2Vzc2FyeS4KLSAgICB2b2lkIGZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxz
KCk7Ci0KLSAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotCi1wcml2YXRlOgotICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7CisgICAgRmlsdGVyRWZm
ZWN0KFR5cGUpOwogCi0gICAgdm9pZCBjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZlclRvRGVzdGluYXRp
b24oVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjb3B5Q29udmVy
dGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiwgUGl4ZWxCdWZm
ZXImLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
Ym9vbCByZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25h
bDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiwgSW1hZ2VCdWZmZXImLCBjb25zdCBJbnRSZWN0JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bik7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gY29udmVydFBpeGVsQnVmZmVyVG9D
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIFBpeGVsQnVmZmVyJik7Ci0g
ICAgCi0KLSAgICBGaWx0ZXImIG1fZmlsdGVyOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lu
cHV0RWZmZWN0czsKLQotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3Vs
dDsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0OwotCi0gICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0OwotICAgIAotICAgIC8v
IFRoZSBtYXhpbXVtIHNpemUgb2YgYSBmaWx0ZXIgcHJpbWl0aXZlLiBJbiBTVkcgdGhpcyBpcyB0
aGUgcHJpbWl0aXZlIHN1YnJlZ2lvbiBpbiBhYnNvbHV0ZSBjb29yZGluYXRlIHNwYWNlLgotICAg
IC8vIFRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHNob3VsZCBuZXZlciBiZSBiaWdnZXIgdGhhbiBt
X21heEVmZmVjdFJlY3QuCi0gICAgRmxvYXRSZWN0IG1fbWF4RWZmZWN0UmVjdDsKICAgICAKLSAg
ICAvLyBUaGUgc3VicmVnaW9uIG9mIGEgZmlsdGVyIHByaW1pdGl2ZSBhY2NvcmRpbmcgdG8gdGhl
IFNWRyBGaWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBU
aGlzIGlzIFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS4KLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b247CisgICAgRmlsdGVyQm91bmRhcnlTZXQgbV9ib3VuZGFyeVNldDsKIAotICAgIC8vIHgsIHks
IHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFjdHVhbCBTVkdGRSpFbGVtZW50LiBJcyBuZWVkZWQg
dG8gZGV0ZXJtaW5lIHRoZSBzdWJyZWdpb24gb2YgdGhlCi0gICAgLy8gZmlsdGVyIHByaW1pdGl2
ZSBvbiBhIGxhdGVyIHN0ZXAuCi0gICAgRmxvYXRSZWN0IG1fZWZmZWN0Qm91bmRhcmllczsKLSAg
ICAKLSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gbWFwcGVkIHRvIGFic29sdXRlIGNv
b3JkaW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVVuY2xp
cHBlZFN1YnJlZ2lvbjsKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IG1fZmlsdGVySW1hZ2U7CiAK
LSAgICBib29sIG1fYWxwaGFJbWFnZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1ggeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9oYXNZIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzV2lkdGggeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9oYXNIZWlnaHQgeyBmYWxzZSB9OwotCi0gICAgLy8gU2hvdWxk
IHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJpbWl0aXZlIHJlZ2lvbiwgb3IgZXhwYW5kIHRvIHVz
ZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMuCi0gICAgYm9vbCBtX2NsaXBzVG9C
b3VuZHMgeyB0cnVlIH07Ci0KLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElO
RUFSX1NSR0IpCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFj
ZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIH07Ci0jZWxzZQogICAgIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSB9OwotI2VuZGlmCi0gICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1f
cmVzdWx0Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Ci0gICAg
Ci0gICAgY29uc3QgVHlwZSBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsKIH07CiAKIFdFQkNPUkVf
RVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBGaWx0ZXJFZmZlY3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkZpbHRlckVmZmVjdCkKKyAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVy
biBmdW5jdGlvbi5pc0ZpbHRlckVmZmVjdCgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKENsYXNz
TmFtZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDbGFzc05hbWUp
IFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBl
ZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpUeXBlOjpDbGFzc05hbWU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3RSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCmluZGV4IDU2YmUyNDczNjFmNTNiM2MwOWVjYjU3
MTMyMmI3NWE3NTczZTljYzQuLjgzNzFhYTIwZjIwZjc0ZDBlZmFlMGI2NTY2OGY0ODExMGRjMTQ2
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKQEAgLTM2LDE3ICszNiwxNyBAQCBj
bGFzcyBGaWx0ZXJFZmZlY3RSZW5kZXJlciB7CiAgICAgCiBwdWJsaWM6CiAgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gdHJ5Q3JlYXRlKGJvb2wsIEZpbHRl
ckVmZmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0Jikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUVmZmVjdHMoY29uc3QgRmlsdGVyJiwgRmlsdGVy
RWZmZWN0JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
RmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3QmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyUmVzdWx0KCkgPSAwOwogICAg
IAogICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0OwogICAgIAog
cHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdFJlbmRlcmVyKCkgPSBkZWZhdWx0OwotICAgIHZp
cnR1YWwgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZl
Y3QmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJmNWJiMTU2MzgxZGVjMWUwYmFjMjJkOTExOWMyZTBlZDgwZTRhZjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGaWx0ZXJGdW5jdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5n
SGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJG
dW5jdGlvbihUeXBlIGZpbHRlclR5cGUpCisgICAgOiBtX2ZpbHRlclR5cGUoZmlsdGVyVHlwZSkK
K3sKK30KKworc3RhdGljIGlubGluZSBjb25zdCBhdXRvJiBmaWx0ZXJOYW1lcygpCit7CisgICAg
dXNpbmcgRmlsdGVyTmFtZU1hcCA9IEhhc2hNYXA8RmlsdGVyRnVuY3Rpb246OlR5cGUsIEF0b21T
dHJpbmcsIFdURjo6SW50SGFzaDxGaWx0ZXJGdW5jdGlvbjo6VHlwZT4sIFdURjo6U3Ryb25nRW51
bUhhc2hUcmFpdHM8RmlsdGVyRnVuY3Rpb246OlR5cGU+PjsKKworICAgIHN0YXRpYyBhdXRvIGZp
bHRlck5hbWVzID0gbWFrZU5ldmVyRGVzdHJveWVkKFtdIHsKKyAgICAgICAgRmlsdGVyTmFtZU1h
cCBmaWx0ZXJOYW1lcyA9IHsKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkNT
U0ZpbHRlciwgICAgICAgICAgICJDU1NGaWx0ZXIiX3MgICAgICAgICAgIH0sCisgICAgICAgICAg
ICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsICAgICAgICAgICAiU1ZHRmlsdGVy
Il9zICAgICAgICAgICB9LAorICAgICAgICAgICAgCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRUJsZW5kLCAgICAgICAgICAgICAiRkVCbGVuZCJfcyAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb2xvck1hdHJpeCwgICAg
ICAgIkZFQ29sb3JNYXRyaXgiX3MgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXIsICJGRUNvbXBvbmVudFRyYW5zZmVyIl9zIH0s
CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0ZSwgICAgICAg
ICAiRkVDb21wb3NpdGUiX3MgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwgICAgIkZFQ29udm9sdmVNYXRyaXgiX3MgICAgfSwK
KyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLCAg
ICJGRURpZmZ1c2VMaWdodGluZyJfcyAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCwgICAiRkVEaXNwbGFjZW1lbnRNYXAiX3MgICB9LAor
ICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEcm9wU2hhZG93LCAgICAgICAg
IkZFRHJvcFNoYWRvdyJfcyAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFRmxvb2QsICAgICAgICAgICAgICJGRUZsb29kIl9zICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1ciwgICAgICAi
RkVHYXVzc2lhbkJsdXIiX3MgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVJbWFnZSwgICAgICAgICAgICAgIkZFSW1hZ2UiX3MgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTWVyZ2UsICAgICAgICAgICAgICJG
RU1lcmdlIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpGRU1vcnBob2xvZ3ksICAgICAgICAiRkVNb3JwaG9sb2d5Il9zICAgICAgICB9LAorICAg
ICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQsICAgICAgICAgICAgIkZF
T2Zmc2V0Il9zICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFU3BlY3VsYXJMaWdodGluZywgICJGRVNwZWN1bGFyTGlnaHRpbmciX3MgIH0sCisgICAg
ICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVRpbGUsICAgICAgICAgICAgICAiRkVU
aWxlIl9zICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVUdXJidWxlbmNlLCAgICAgICAgIkZFVHVyYnVsZW5jZSJfcyAgICAgICAgfSwKKworICAg
ICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEsICAgICAgICAgIlNv
dXJjZUFscGhhIl9zICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5
cGU6OlNvdXJjZUdyYXBoaWMsICAgICAgICJTb3VyY2VHcmFwaGljIl9zICAgICAgIH0KKworICAg
ICAgICB9OworICAgICAgICByZXR1cm4gZmlsdGVyTmFtZXM7CisgICAgfSgpKTsKKyAgICAKKyAg
ICByZXR1cm4gZmlsdGVyTmFtZXMuZ2V0KCk7Cit9CisKK2NvbnN0IEF0b21TdHJpbmcmIEZpbHRl
ckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKFR5cGUgZmlsdGVyVHlwZSkKK3sKKyAgICBhdXRvIGl0ID0g
ZmlsdGVyTmFtZXMoKS5maW5kKGZpbHRlclR5cGUpOworICAgIEFTU0VSVChpdCAhPSBmaWx0ZXJO
YW1lcygpLmVuZCgpKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjA2NThjYmEwOWNhMWYwYzdi
NDc0NDc0OWU4MDE4MWU3YzE4NTQ4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDEy
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRl
bnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21TdHJpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlcjsKKworY2xhc3MgRmlsdGVyRnVuY3Rp
b24gOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJGdW5jdGlvbj4geworcHVibGljOgorICAgIGVu
dW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBDU1NGaWx0ZXIsCisgICAgICAgIFNW
R0ZpbHRlciwKKworICAgICAgICBGRU1pbmltdW0sCisKKyAgICAgICAgRkVCbGVuZCA9IEZFTWlu
aW11bSwKKyAgICAgICAgRkVDb2xvck1hdHJpeCwKKyAgICAgICAgRkVDb21wb25lbnRUcmFuc2Zl
ciwKKyAgICAgICAgRkVDb21wb3NpdGUsCisgICAgICAgIEZFQ29udm9sdmVNYXRyaXgsCisgICAg
ICAgIEZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBGRURpc3BsYWNlbWVudE1hcCwKKyAgICAg
ICAgRkVEcm9wU2hhZG93LAorICAgICAgICBGRUZsb29kLAorICAgICAgICBGRUdhdXNzaWFuQmx1
ciwKKyAgICAgICAgRkVJbWFnZSwKKyAgICAgICAgRkVNZXJnZSwKKyAgICAgICAgRkVNb3JwaG9s
b2d5LAorICAgICAgICBGRU9mZnNldCwKKyAgICAgICAgRkVTcGVjdWxhckxpZ2h0aW5nLAorICAg
ICAgICBGRVRpbGUsCisgICAgICAgIEZFVHVyYnVsZW5jZSwKKyAgICAgICAgU291cmNlQWxwaGEs
CisgICAgICAgIFNvdXJjZUdyYXBoaWMsCisKKyAgICAgICAgRkVNYXhpbXVtID0gU291cmNlR3Jh
cGhpYworICAgIH07CisKKyAgICBGaWx0ZXJGdW5jdGlvbihUeXBlKTsKKyAgICB2aXJ0dWFsIH5G
aWx0ZXJGdW5jdGlvbigpID0gZGVmYXVsdDsKKworICAgIFR5cGUgZmlsdGVyVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyVHlwZTsgfQorCisgICAgYm9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpDU1NGaWx0ZXI7IH0KKyAgICBib29sIGlz
U1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6OlNWR0ZpbHRl
cjsgfQorICAgIGJvb2wgaXNGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGUgPT0g
VHlwZTo6Q1NTRmlsdGVyIHx8IG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAg
ICBib29sIGlzRmlsdGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID49IFR5
cGU6OkZFTWluaW11bSAmJiBtX2ZpbHRlclR5cGUgPD0gVHlwZTo6RkVNYXhpbXVtOyB9CisKKyAg
ICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVyTmFtZShUeXBlKTsKKyAgICBzdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgc291cmNlQWxwaGFOYW1lKCkgeyByZXR1cm4gZmlsdGVyTmFtZShU
eXBlOjpTb3VyY2VBbHBoYSk7IH0KKyAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgc291cmNl
R3JhcGhpY05hbWUoKSB7IHJldHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUdyYXBoaWMpOyB9
CisgICAgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGZpbHRl
ck5hbWUobV9maWx0ZXJUeXBlKTsgfQorCisgICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMo
KSBjb25zdCB7IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoY29uc3QgRmls
dGVyJikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGaWx0ZXJJbWFn
ZSgpIHsgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV9maWx0ZXJUeXBlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBl
LAorCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsCisKKyAgICAg
ICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAgICAgIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAgV2ViQ29y
ZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAgICAgIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUZsb29kLAorICAgICAgICBXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVNZXJnZSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OkZFTW9ycGhvbG9neSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
T2Zmc2V0LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxh
ckxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxl
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLAor
ICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljCisgICAgPjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzcw
YTQ4ZTEwZTY0MTNhZWY2OWE1MDZjYTExYjk0NTRhNjVhOTEzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAK
QEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgor
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
CisjaW5jbHVkZSA8YXJtX25lb24uaD4KKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisj
aW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBj
b2xvclNwYWNlKQoreworICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KGFic29sdXRlSW1hZ2VSZWN0LnNpemUoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmls
dGVySW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGFic29sdXRlSW1hZ2VSZWN0
LCBpc0FscGhhSW1hZ2UsIHJlbmRlcmluZ01vZGUsIGNvbG9yU3BhY2UpKTsKK30KKworRmlsdGVy
SW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJl
Y3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKKyAgICA6IG1fcHJpbWl0aXZlU3Vi
cmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikKKyAgICAsIG1faW1hZ2VSZWN0KGltYWdlUmVjdCkK
KyAgICAsIG1fYWJzb2x1dGVJbWFnZVJlY3QoYWJzb2x1dGVJbWFnZVJlY3QpCisgICAgLCBtX2lz
QWxwaGFJbWFnZShpc0FscGhhSW1hZ2UpCisgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5n
TW9kZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbWFnZUJ1ZmZl
ciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CisKKyAgICBtX2ltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSwgbV9yZW5k
ZXJpbmdNb2RlLCAxLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYg
KCFtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3Qg
cmVjdCB7IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkgfTsKKworICAgIGlmIChwaXhl
bEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQor
ICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXJJZkV4aXN0
cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSwgcmVjdCk7CisgICAgZWxz
ZSBpZiAocGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxC
dWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpLCBy
ZWN0KTsKKworICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOworfQorCitzdGF0aWMgdm9p
ZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6
ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNp
emUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBzcmMud2lkdGgg
PSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgp
OworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5kYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIGRlc3QuaGVpZ2h0ID0g
aW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKKyAgICBk
ZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwor
CisgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7CisjZWxzZQorICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNv
dXJjZS5kYXRhKCk7CisgICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlucHV0U2l6ZS5hcmVhKCkgKiA0KTsKKyAgICB1aW50OF90
KiBkZXN0aW5hdGlvbkNvbXBvbmVudCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKworICAgIHdoaWxl
IChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFscGhhID0gc291cmNlQ29t
cG9uZW50WzNdOworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFswXSA9IHN0YXRpY19jYXN0
PGludD4oc291cmNlQ29tcG9uZW50WzBdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAq
IGFscGhhIC8gMjU1OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFsyXSA9IHN0YXRpY19j
YXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIGFscGhhIC8gMjU1OworICAgICAgICBkZXN0
aW5hdGlvbkNvbXBvbmVudFszXSA9IGFscGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0g
NDsKKyAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30K
Kworc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYShjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IElu
dFNpemUmIGlucHV0U2l6ZSkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICBzaXplX3Qgcm93
Qnl0ZXMgPSBpbnB1dFNpemUud2lkdGgoKSAqIDQ7CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsK
KyAgICBzcmMud2lkdGggPSBpbnB1dFNpemUud2lkdGgoKTsKKyAgICBzcmMuaGVpZ2h0ID0gaW5w
dXRTaXplLmhlaWdodCgpOworICAgIHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIHNyYy5k
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc291cmNlLmRhdGEoKSk7CisKKyAgICB2SW1h
Z2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAg
IGRlc3QuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOworICAgIGRlc3Qucm93Qnl0ZXMgPSBy
b3dCeXRlczsKKyAgICBkZXN0LmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5h
dGlvbi5kYXRhKCkpOworCisgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWludDhfdCogc291
cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90KiBlbmQgPSBz
b3VyY2VDb21wb25lbnQgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5wdXRTaXplLmFyZWEoKSAq
IDQpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24uZGF0
YSgpOworICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKKyAgICAgICAgaW50IGFs
cGhhID0gc291cmNlQ29tcG9uZW50WzNdOworICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMF0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFscGhh
OworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKKyAgICAgICAgICAgIGRlc3Rp
bmF0aW9uQ29tcG9uZW50WzFdID0gMDsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50
WzJdID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9IGFs
cGhhOworICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb25D
b21wb25lbnQgKz0gNDsKKyAgICB9CisjZW5kaWYKK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4mIEZpbHRlckltYWdlOjpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgcmV0dXJuIGFscGhhRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA/IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxC
dWZmZXIgOiBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcjsKK30KKworUGl4ZWxCdWZmZXIqIEZp
bHRlckltYWdlOjpwaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0
KQoreworICAgIGF1dG8mIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZv
cm1hdCk7CisgICAgaWYgKHBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gJnBpeGVsQnVmZmVy
LnZhbHVlKCk7CisKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX2NvbG9yU3BhY2UgfTsKKworICAgIGlmIChhdXRvIGltYWdl
QnVmZmVyID0gaW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7CisgICAgICAgIHBpeGVsQnVmZmVyID0g
aW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyB7IH0sIG1fYWJzb2x1dGVJbWFn
ZVJlY3Quc2l6ZSgpIH0pOworICAgICAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKyAg
ICB9CisgICAgCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZShtX2Fic29sdXRlSW1hZ2VSZWN0LnNp
emUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobG9naWNh
bFNpemUpKTsKKworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3Jt
YXQsIGxvZ2ljYWxTaXplKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGlmIChhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgaWYgKGF1dG8mIHNvdXJjZVBpeGVsQnVmZmVy
ID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKSkKKyAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoc291cmNlUGl4ZWxC
dWZmZXItPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgbG9naWNhbFNpemUpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChhdXRvJiBzb3VyY2VQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVy
SWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSkKKyAgICAg
ICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCks
IHBpeGVsQnVmZmVyLT5kYXRhKCksIGxvZ2ljYWxTaXplKTsKKyAgICB9CisKKyAgICByZXR1cm4g
JnBpeGVsQnVmZmVyLnZhbHVlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmls
dGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNw
YWNlPiBjb2xvclNwYWNlKQoreworICAgIEludFNpemUgc2l6ZShyZWN0LnNpemUoKSk7CisgICAg
QVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2l6ZSkpOworCisgICAgYXV0
byBjaGVja2VkQXJlYSA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7CisgICAgaWYg
KGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGNoZWNrZWRBcmVhKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvcHlQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGFs
cGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gcGl4ZWxCdWZmZXI7Cit9
CisKK2Jvb2wgRmlsdGVySW1hZ2U6OnJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVy
c2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gY29sb3JTcGFjZSkgY29u
c3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZXRo
ZXIgd2UgbmVlZCB0aGUgc3RlcCBvZiBhbiBleHRyYSBjb2xvciBzcGFjZSBjb252ZXJzaW9uCisg
ICAgLy8gV2Ugb25seSBuZWVkIGV4dHJhIGNvbG9yIGNvbnZlcnNpb24gd2hlbiAxKSBjb2xvciBz
cGFjZSBpcyBkaWZmZXJlbnQgaW4gdGhlIGlucHV0CisgICAgLy8gQU5EIDIpIHRoZSBmaWx0ZXIg
aXMgbWFuaXB1bGF0aW5nIHJhdyBwaXhlbHMKKyAgICByZXR1cm4gY29sb3JTcGFjZSAmJiBtX2Nv
bG9yU3BhY2UgIT0gKmNvbG9yU3BhY2U7CisjZWxzZQorICAgIC8vIEFkZGl0aW9uYWwgY29sb3Ig
c3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRworICAgIFVOVVNFRF9QQVJB
TShjb2xvclNwYWNlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBGaWx0
ZXJJbWFnZTo6Y29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KSBjb25z
dAoreworICAgIEludFNpemUgbG9naWNhbFNpemUobV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkp
OworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8gdHJhbnNwYXJlbnQgYmxh
Y2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2UuCisgICAgaWYgKHJlY3Qu
eCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhYKCkgPiBsb2dpY2FsU2l6ZS53aWR0
aCgpIHx8IHJlY3QubWF4WSgpID4gbG9naWNhbFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1lbXNl
dChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsKKworICAgIC8v
IEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc291
cmNlLgorICAgIGlmIChyZWN0Lm1heFgoKSA8PSAwIHx8IHJlY3QubWF4WSgpIDw9IDAgfHwgcmVj
dC54KCkgPj0gbG9naWNhbFNpemUud2lkdGgoKSB8fCByZWN0LnkoKSA+PSBsb2dpY2FsU2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHhPcmlnaW4gPSByZWN0LngoKTsK
KyAgICBpbnQgeERlc3QgPSAwOworICAgIGlmICh4T3JpZ2luIDwgMCkgeworICAgICAgICB4RGVz
dCA9IC14T3JpZ2luOworICAgICAgICB4T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50IHhFbmQg
PSByZWN0Lm1heFgoKTsKKyAgICBpZiAoeEVuZCA+IGxvZ2ljYWxTaXplLndpZHRoKCkpCisgICAg
ICAgIHhFbmQgPSBsb2dpY2FsU2l6ZS53aWR0aCgpOworCisgICAgaW50IHlPcmlnaW4gPSByZWN0
LnkoKTsKKyAgICBpbnQgeURlc3QgPSAwOworICAgIGlmICh5T3JpZ2luIDwgMCkgeworICAgICAg
ICB5RGVzdCA9IC15T3JpZ2luOworICAgICAgICB5T3JpZ2luID0gMDsKKyAgICB9CisgICAgaW50
IHlFbmQgPSByZWN0Lm1heFkoKTsKKyAgICBpZiAoeUVuZCA+IGxvZ2ljYWxTaXplLmhlaWdodCgp
KQorICAgICAgICB5RW5kID0gbG9naWNhbFNpemUuaGVpZ2h0KCk7CisKKyAgICBpbnQgc2l6ZSA9
ICh4RW5kIC0geE9yaWdpbikgKiA0OworICAgIGludCBkZXN0aW5hdGlvblNjYW5saW5lID0gcmVj
dC53aWR0aCgpICogNDsKKyAgICBpbnQgc291cmNlU2NhbmxpbmUgPSBsb2dpY2FsU2l6ZS53aWR0
aCgpICogNDsKKyAgICB1aW50OF90KiBkZXN0aW5hdGlvblBpeGVsID0gZGVzdGluYXRpb24uZGF0
YSgpICsgKCh5RGVzdCAqIHJlY3Qud2lkdGgoKSkgKyB4RGVzdCkgKiA0OworICAgIGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZVBpeGVsID0gc291cmNlLmRhdGEoKSArICgoeU9yaWdpbiAqIGxvZ2ljYWxT
aXplLndpZHRoKCkpICsgeE9yaWdpbikgKiA0OworCisgICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5k
KSB7CisgICAgICAgIG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7
CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKKyAgICAg
ICAgc291cmNlUGl4ZWwgKz0gc291cmNlU2NhbmxpbmU7CisgICAgICAgICsreU9yaWdpbjsKKyAg
ICB9Cit9CisKK3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckltYWdlOjpnZXRDb252
ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9
IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CisgICAgLy8gQ3JlYXRlIGFu
IEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cg
dG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICBhdXRvIGNvbnZlcnRlZEltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBp
ZiAoIWNvbnZlcnRlZEltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIC8vIENvbG9yIHNwYWNlIGNvbnZlcnNpb24gaGFwcGVucyBpbnRlcm5hbGx5IHdoZW4gZHJh
d2luZyBmcm9tIG9uZSBpbWFnZSBidWZmZXIgdG8gYW5vdGhlcgorICAgIGNvbnZlcnRlZEltYWdl
QnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCByZWN0KTsKKyAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJH
QkE4LCBjb2xvclNwYWNlIH07CisgICAgcmV0dXJuIGNvbnZlcnRlZEltYWdlQnVmZmVyLT5nZXRQ
aXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3QpOworfQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVs
QnVmZmVyLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQo
KSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFn
ZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOworCisgICAgLy8gQ3JlYXRlIGFuIElt
YWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCisgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIDEsIG1fY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaW1h
Z2VCdWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCByZWN0KTsKKyAgICByZXR1cm4g
Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZvcm1hdCwgcmVjdCwg
Y29sb3JTcGFjZSk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKQoreworICAgIGF1dG8qIHBpeGVsQnVmZmVyID0gcGl4ZWxC
dWZmZXJJZkV4aXN0cyhhbHBoYUZvcm1hdCkgPyAmcGl4ZWxCdWZmZXJJZkV4aXN0cyhhbHBoYUZv
cm1hdCkudmFsdWUoKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKSB7CisgICAg
ICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFj
ZSkpIHsKKyAgICAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1h
Z2UgYnVmZmVyLgorICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZl
cklmRXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgeyB7IH0sIG1fYWJz
b2x1dGVJbWFnZVJlY3Quc2l6ZSgpIH07CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gY29udmVy
dGVkUGl4ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGFs
cGhhRm9ybWF0LCByZWN0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGNvcHlJ
bWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRhKCksIGRlc3RpbmF0aW9uLCBzcmNS
ZWN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBwaXhlbEJ1ZmZlciA9IHRoaXMtPnBpeGVsQnVmZmVyKGFscGhhRm9ybWF0KTsK
KyAgICB9CisKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7
CisgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4
ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBhbHBoYUZvcm1hdCwgKmNvbG9yU3BhY2UpKQorICAgICAg
ICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGlu
YXRpb24sIHNyY1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29weUltYWdl
Qnl0ZXMocGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworfQorCit2
b2lkIEZpbHRlckltYWdlOjpjb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCkKK3sKKyAg
ICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0
cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KKyAgICBpZiAoIW1fcHJlbXVsdGlwbGllZFBp
eGVsQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBVaW50OENsYW1wZWRBcnJheSYgaW1h
Z2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgdWludDhf
dCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS5kYXRhKCk7CisgICAgaW50IHBpeGVsQXJyYXlMZW5n
dGggPSBpbWFnZUFycmF5Lmxlbmd0aCgpOworCisgICAgLy8gV2UgbXVzdCBoYXZlIGZvdXIgYnl0
ZXMgcGVyIHBpeGVsLCBhbmQgY29tcGxldGUgcGl4ZWxzCisgICAgQVNTRVJUKCEocGl4ZWxBcnJh
eUxlbmd0aCAlIDQpKTsKKworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBpZiAo
cGl4ZWxBcnJheUxlbmd0aCA+PSA2NCkgeworICAgICAgICB1aW50OF90KiBsYXN0UGl4ZWwgPSBw
aXhlbERhdGEgKyAocGl4ZWxBcnJheUxlbmd0aCAmIH4weDNmKTsKKyAgICAgICAgZG8geworICAg
ICAgICAgICAgLy8gSW5jcmVtZW50cyBwaXhlbERhdGEgYnkgNjQuCisgICAgICAgICAgICB1aW50
OHgxNng0X3Qgc2l4dGVlblBpeGVscyA9IHZsZDRxX3U4KHBpeGVsRGF0YSk7CisgICAgICAgICAg
ICBzaXh0ZWVuUGl4ZWxzLnZhbFswXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzBdLCBz
aXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsxXSA9
IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMudmFsWzFdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7Cisg
ICAgICAgICAgICBzaXh0ZWVuUGl4ZWxzLnZhbFsyXSA9IHZtaW5xX3U4KHNpeHRlZW5QaXhlbHMu
dmFsWzJdLCBzaXh0ZWVuUGl4ZWxzLnZhbFszXSk7CisgICAgICAgICAgICB2c3Q0cV91OChwaXhl
bERhdGEsIHNpeHRlZW5QaXhlbHMpOworICAgICAgICAgICAgcGl4ZWxEYXRhICs9IDY0OworICAg
ICAgICB9IHdoaWxlIChwaXhlbERhdGEgPCBsYXN0UGl4ZWwpOworCisgICAgICAgIHBpeGVsQXJy
YXlMZW5ndGggJj0gMHgzZjsKKyAgICAgICAgaWYgKCFwaXhlbEFycmF5TGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgaW50IG51bVBpeGVscyA9IHBpeGVs
QXJyYXlMZW5ndGggLyA0OworCisgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggcGl4ZWwsIGNoZWNr
aW5nIGFscGhhIGFuZCBhZGp1c3RpbmcgY29sb3IgY29tcG9uZW50cyBpZiBuZWNlc3NhcnkKKyAg
ICB3aGlsZSAoLS1udW1QaXhlbHMgPj0gMCkgeworICAgICAgICAvLyBBbHBoYSBpcyB0aGUgNHRo
IGJ5dGUgaW4gYSBwaXhlbAorICAgICAgICB1aW50OF90IGEgPSAqKHBpeGVsRGF0YSArIDMpOwor
ICAgICAgICAvLyBDbGFtcCBlYWNoIGNvbXBvbmVudCB0byBhbHBoYSwgYW5kIGluY3JlbWVudCB0
aGUgcGl4ZWwgbG9jYXRpb24KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsK
KyAgICAgICAgICAgIGlmICgqcGl4ZWxEYXRhID4gYSkKKyAgICAgICAgICAgICAgICAqcGl4ZWxE
YXRhID0gYTsKKyAgICAgICAgICAgICsrcGl4ZWxEYXRhOworICAgICAgICB9CisgICAgICAgIC8v
IEluY3JlbWVudCBmb3IgYWxwaGEKKyAgICAgICAgKytwaXhlbERhdGE7CisgICAgfQorfQorCit2
b2lkIEZpbHRlckltYWdlOjp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNw
YWNlIGNvbG9yU3BhY2UpCit7CisjaWYgVVNFKENHKQorICAgIC8vIENHIGhhbmRsZXMgY29sb3Ig
c3BhY2UgYWRqdXN0bWVudHMgaW50ZXJuYWxseS4KKyAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFj
ZSk7CisjZWxzZQorICAgIGlmIChjb2xvclNwYWNlID09IG1fY29sb3JTcGFjZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVu
bmVjZXNzYXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCisgICAgLy8gY29sb3Ig
c3BhY2UgdHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlz
LgorICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKSkKKyAgICAg
ICAgaW1hZ2VCdWZmZXItPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb2xvclNwYWNlKTsKKworICAg
IG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlciA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX3ByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA9IHN0
ZDo6bnVsbG9wdDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWJhOGU3NmYwNDlmZjI0ZmE1Zjg0NTBiYWE0NzY1ZTYwMDI4M2E4Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVySW1hZ2UuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsK
K2NsYXNzIFBpeGVsQnVmZmVyOworCitjbGFzcyBGaWx0ZXJJbWFnZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEZpbHRlckltYWdlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFn
ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wg
aXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
KTsKKworICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBt
X3ByaW1pdGl2ZVN1YnJlZ2lvbjsgfQorICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlUmVjdDsgfQorICAgIEludFJlY3QgYWJzb2x1dGVJbWFnZVJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2Fic29sdXRlSW1hZ2VSZWN0OyB9CisgICAgSW50UmVjdCByZWxhdGl2
ZUFic29sdXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlckltYWdlJiBvcmlnaW4pIGNvbnN0IHsgcmV0
dXJuIG1fYWJzb2x1dGVJbWFnZVJlY3QgLSBvcmlnaW4uYWJzb2x1dGVJbWFnZVJlY3QoKS5sb2Nh
dGlvbigpOyB9CisKKyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNB
bHBoYUltYWdlOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CisgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICBSZWZQ
dHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkgeyByZXR1cm4gbV9pbWFnZUJ1
ZmZlcjsgfQorICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcigpOworCisgICAgc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbik7CisgICAgUGl4ZWxCdWZmZXIqIHBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRp
b24pOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5h
dGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGNvcHlQaXhlbEJ1ZmZl
cihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwbGljYXRpb24s
IGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBz
dGQ6Om51bGxvcHQpOworICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1
ZmZlcigpOworICAgIHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZSk7CisKK3ByaXZhdGU6CisgICAgRmlsdGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgYm9vbCByZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U+KSBjb25zdDsKKyAgICB2b2lkIGNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKEltYWdlQnVmZmVyJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50
UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0OworCisgICAgRmxv
YXRSZWN0IG1fcHJpbWl0aXZlU3VicmVnaW9uOworICAgIEZsb2F0UmVjdCBtX2ltYWdlUmVjdDsK
KyAgICBJbnRSZWN0IG1fYWJzb2x1dGVJbWFnZVJlY3Q7CisgICAgCisgICAgYm9vbCBtX2lzQWxw
aGFJbWFnZSB7IGZhbHNlIH07CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Cisg
ICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29sb3JTcGFjZTsKKworICAgIFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBt
X3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9MaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9MaWdodFNvdXJjZS5oCmluZGV4IDk0ZDE5NTAxMzlkNmQyNDNhODY2MWU1ZWE1NWQyMzVhNzM4
OWY1ZDUuLmYxOTE3MWZmODRlOTA0OTI3MjYyZWFkMTFhYzQxZTA4M2M1OGVmYmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291
cmNlLmgKQEAgLTM4LDYgKzM4LDcgQEAgZW51bSBMaWdodFR5cGUgewogICAgIExTX1NQT1QKIH07
CiAKK2NsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsKIAogY2xhc3MgTGlnaHRTb3Vy
Y2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMaWdodFNvdXJjZT4gewpAQCAtNjUsNyArNjYsNyBAQCBw
dWJsaWM6CiAgICAgTGlnaHRUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAg
ICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0Jiwg
UGFpbnRpbmdEYXRhJikgPSAwOwogICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0
IGlzIHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJz
dXJmYWNlU2NhbGUiIGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcg
c3RhbmRhcmQuCiAgICAgLy8geCBhbmQgeSBhcmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBG
aWx0ZXJFZmZlY3QncyBidWZmZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1
ZTE5ZTExYTRmMzZlYTJhNDI2YTc1MDM4NzkxMjhmNTRiNDRiLi5iMTc2NDIwNDQyOTg5YTUyZTIy
ZmE5YmJkMDBhMmEzYWE0NTljODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTMx
LDE2ICszMSwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBvaW50TGlnaHRT
b3VyY2UuaCIKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVy
RWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCit2b2lkIFBvaW50TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVm
ZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKQogewotICAgIG1fYnVmZmVyUG9zaXRp
b24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNl
clNwYWNlUG9zaXRpb24ueHkoKSkpOworICAgIGF1dG8mIGltYWdlID0gKmZpbHRlckVmZmVjdC5m
aWx0ZXJJbWFnZSgpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW1hZ2UuaW1hZ2VSZWN0KCk7Cisg
ICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBpbWFnZS5wcmltaXRpdmVTdWJyZWdpb24oKTsK
KworICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyLm1hcFBvaW50RnJvbVVzZXJTcGFj
ZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSwgaW1hZ2VSZWN0LCBwcmltaXRpdmVT
dWJyZWdpb24pKTsKICAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBt
X3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgotICAgIEZsb2F0UG9p
bnQgbWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7
IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNl
clNwYWNlUG9zaXRpb24ueSgpIH0pOworICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlci5t
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsg
bV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0sIGltYWdl
UmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKICAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFw
cGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmgKaW5kZXggNjdhM2EwYmQzOWE4YTljYzE5NTQzNDk4NTk2ZDcxMTVmNGJiOTVhNS4uYWRlYmY5
NmFhMzEyN2VlNDVlZmE4NzA5M2QzMmRlZGMxYmFjN2E1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0WShmbG9hdCkgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzZXRaKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50
aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgY29t
cHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwg
ZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
Y3BwCmluZGV4IDc2NDlmMDU4YWM4NjliNTU0YWYwZGM1MDdmZmY5MDkwYWQ2Y2YzYTMuLjZlYjYx
OGM3M2FjOWYyYTMyOTNkYWI0NjJhODkzNjlkNDM1MTM4MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCkBA
IC0yMywxMCArMjMsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zNSwzMiArMzIsMzcgQEAgUmVmPFNvdXJjZUFscGhhPiBTb3Vy
Y2VBbHBoYTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQogICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNvdXJjZUFscGhhKHNvdXJjZUVmZmVjdCkpOwogfQogCi1jb25zdCBBdG9t
U3RyaW5nJiBTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpCitTb3VyY2VBbHBoYTo6U291cmNlQWxw
aGEoRmlsdGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVy
RWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEiLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFt
ZTsKKyAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKHNvdXJjZUVmZmVjdC5vcGVyYXRpbmdDb2xv
clNwYWNlKCkpOworICAgIGlucHV0RWZmZWN0cygpLmFwcGVuZCgmc291cmNlRWZmZWN0KTsKIH0K
IAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRS
ZWN0IFNvdXJjZUFscGhhOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmxvYXRSZWN0JikgY29uc3QKIHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCkt
PmZpbHRlckltYWdlKCk7CisgICAgcmV0dXJuIGlucHV0LmltYWdlUmVjdCgpOwogfQogCi12b2lk
IFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBTb3VyY2VBbHBoYTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7Ci0gICAgSW1hZ2VCdWZmZXIq
IHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3Vs
dEltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250
ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVm
ZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2Uo
KTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0KDApLT5pbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsK
KyAgICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5w
dXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVj
dChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLSAgICBmaWx0ZXJD
b250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrKTsKLSAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEludFBvaW50KCksIENvbXBvc2l0ZU9w
ZXJhdG9yOjpEZXN0aW5hdGlvbkluKTsKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0Lmlt
YWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIG91dHB1dC5hYnNvbHV0
ZUltYWdlUmVjdCgpLnNpemUoKSk7CisKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmZpbGxS
ZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrKTsKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgp
LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0
b3I6OkRlc3RpbmF0aW9uSW4pOworICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBT
b3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdApAQCAtNjksMTEgKzcxLDQgQEAgVGV4dFN0cmVhbSYgU291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0
ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVjdChzb3VyY2VFZmZlY3Qu
ZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaW5wdXRFZmZlY3Rz
KCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1NjFlODY0YTM5NDkwZi4u
OTRmYTU2ZjUyYjg0NmU2M2FhZDI5ZWE0ZDZmNTE5OGZiZDAwMTg2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApA
QCAtMTcsOCArMTcsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAot
I2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5lIFNvdXJjZUFscGhhX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKQEAgLTI4LDE5ICsyNywxNiBAQCBjbGFz
cyBTb3VyY2VBbHBoYSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOiAgICAgICAgCiAg
ICAgc3RhdGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKEZpbHRlckVmZmVjdCYpOwogCi0gICAg
c3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3Qg
QXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpIHsgcmV0dXJuIEZpbHRlckVmZmVjdDo6c291cmNlQWxw
aGFOYW1lKCk7IH0KIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTb3VyY2VBbHBoYShGaWx0ZXJF
ZmZlY3QmKTsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQ7IH0KIAotICAgIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU291cmNlQWxwaGEi
OyB9Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
U291cmNlQWxwaGFfaAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKFNvdXJj
ZUFscGhhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggODhhMzZhNDEwMjZiZDNhNTg1NDQ3ODIw
Mjc0YzExMDdkNzgzOTJlOS4uNDUyZTY0NzRmZGNlZWE5MzFkYmI5OGZmYjViYjA2YTlkZDgzZGNj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0yMiw0MiArMjIsMzkgQEAKIAogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBo
aWM6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFw
aGljOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMo
ZmlsdGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYygpKTsKIH0K
IAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpCitTb3VyY2VH
cmFwaGljOjpTb3VyY2VHcmFwaGljKCkKKyAgICA6IEZpbHRlckVmZmVjdChUeXBlOjpTb3VyY2VH
cmFwaGljKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gc19lZmZlY3ROYW1lKCJTb3VyY2VHcmFwaGljIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHJldHVybiBzX2VmZmVjdE5hbWU7CiB9CiAKLXZvaWQgU291
cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IFNvdXJj
ZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RmxvYXRSZWN0JikgY29uc3QKIHsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigp
OwotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCk7Ci0g
ICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmls
dGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1cm4gZmlsdGVyLnNvdXJj
ZUltYWdlUmVjdCgpOwogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCitib29sIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKIHsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwor
ICAgIGF1dG8qIG91dHB1dCA9IGZpbHRlckltYWdlKCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwotICAgIGlmICghcmVzdWx0SW1hZ2Ug
fHwgIXNvdXJjZUltYWdlKQotICAgICAgICByZXR1cm47CisgICAgYXV0byogc291cmNlSW1hZ2Ug
PSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIGF1dG8qIG91dHB1dEltYWdlID0gb3V0
cHV0LT5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBvdXRwdXRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZl
cigqc291cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0
U3RyZWFtJiBTb3VyY2VHcmFwaGljOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4IDMwY2Q1
NGYyNDUzYmJhOGEzNzc2MzIxMzI4ZWYyMTA2YjdmY2E1YmYuLmIxYzEzYjFjOThmMjc4MmM1M2Jk
N2Y1YTNlODliNTM3Yzk2MDdjOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCkBAIC0xOCw0MSArMTgsMjYg
QEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNl
R3JhcGhpY19oCi0jZGVmaW5lIFNvdXJjZUdyYXBoaWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJGaWx0ZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTb3VyY2VHcmFwaGljIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBw
dWJsaWM6ICAgICAgICAKLSAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0
ZXImKTsKKyAgICBzdGF0aWMgUmVmPFNvdXJjZUdyYXBoaWM+IGNyZWF0ZSgpOwogCi0gICAgc3Rh
dGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRv
bVN0cmluZyYgZWZmZWN0TmFtZSgpIHsgcmV0dXJuIEZpbHRlckVmZmVjdDo6c291cmNlR3JhcGhp
Y05hbWUoKTsgfQogCiBwcml2YXRlOgotICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0ZXIp
Ci0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291cmNlR3JhcGhpYykKLSAg
ICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotICAgIH0KKyAgICBTb3VyY2VHcmFwaGljKCk7CiAKLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdyYXBoaWMiOyB9Ci0K
LSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQogfTsKIAog
fSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2Vi
Q29yZTo6U291cmNlR3JhcGhpYykKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFz
c1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM7IH0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotCi0jZW5kaWYgLy8gU291cmNlR3JhcGhp
Y19oCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoU291cmNlR3JhcGhpYykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmNwcAppbmRleCA3MTYwN2FiMDBmZjlkNmE2ZDAxNjkxZDliYmI4
NTUzZDFmMzQ4ZDAwLi42NTdiMThkNjg4ZWNjYjE1MmJkMDIwYWE2NmE1OTcyNDU3YTA4ZDdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCkBAIC00MSwxMSArNDEsMTUgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogLy8gYWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24g
dGVzdHMKIHN0YXRpYyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKIAot
dm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0
JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQordm9pZCBTcG90TGln
aHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZp
bHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsK
LSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2Vy
U3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKKyAgICBhdXRvJiBpbWFn
ZSA9ICpmaWx0ZXJFZmZlY3QuZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlt
YWdlLmltYWdlUmVjdCgpOworICAgIGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gaW1hZ2UucHJp
bWl0aXZlU3VicmVnaW9uKCk7CisgICAgCisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0
ZXIubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgp
LCBpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbikpOwogICAgIC8vIFRvIHNjYWxlIFosIG1h
cCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0
aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50
RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJT
cGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisgICAgRmxvYXRQ
b2ludCBtYXBwZWRaID0gZmlsdGVyLm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91
c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3Bh
Y2VQb3NpdGlvbi55KCkgfSwgaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIG1f
YnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsK
ICAgICAKICAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yID0gbV91c2VyU3BhY2VQb2lu
dHNBdCAtIG1fdXNlclNwYWNlUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAppbmRleCAzNTE1
MTYzNTA3N2VlZjBlNzNjMjZhZTQ0MmE1ZWE1MzRmZDFmM2JmLi5mZTNmMmYzZmM5YjU4OGFiZjQy
OGJlOWRlNmYzNjc5MTM2YjkzYmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKQEAgLTUwLDcgKzUw
LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCkgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzZXRMaW1pdGluZ0NvbmVBbmdsZShmbG9hdCkgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRh
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOwogICAgIENvbXB1dGVk
TGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEm
LCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VDb2NvYS5j
cHAKaW5kZXggOWFlYTVmMWMwNzJjMDliZjA2M2Y0OTk5ZTAzYjIxOWU4NWQ3ZTJkOS4uZDY3YjI5
YjUxYzc5MWU1MjE1ZWI5ODk3NWZkOWNlYjZhYzRmYzA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlQ29jb2EuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkNBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvRm9ybWF0LmgiCisjaW5j
bHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcApp
bmRleCA5ZDZjMmNkZDA1Zjk0OWI2MzRjYWZhMTdhYzE3ZGI1YzAyYjViNjExLi41MDI5NzBiYjBi
ZmNmYjlmZWU5MjZkMTYwYzAxNDE2ODNhMWM1NjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmNwcApAQCAtMjcsOSArMjcsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNTU0ZpbHRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkVsZW1lbnRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJGRUNvbXBv
bmVudFRyYW5zZmVyLmgiCiAjaW5jbHVkZSAiRkVEcm9wU2hhZG93LmgiCkBAIC0zOCw0NSArMzUs
MTg1IEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiUmVmZXJlbmNlZFNWR1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0Zp
bHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAi
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU291cmNl
QWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGht
PgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNpZiBVU0UoRElSRUNUMkQpCi0jaW5j
bHVkZSA8ZDJkMS5oPgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPENTU0Zp
bHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoKQorUmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpj
cmVhdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9w
ZXJhdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3Is
IENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDU1NGaWx0ZXIpOworICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0
aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKKyAgICBib29sIGhhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworCisgICAgYXV0byBmaWx0
ZXIgPSBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcihoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGhh
c0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luLCBzY2FsZUZhY3Rv
ciwgY2xpcE9wZXJhdGlvbikpOworCisgICAgaWYgKCFmaWx0ZXItPmJ1aWxkRmlsdGVyRnVuY3Rp
b25zKHJlbmRlcmVyLCBvcGVyYXRpb25zKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBmaWx0ZXItPnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CisgICAgcmV0dXJuIGZp
bHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6
ZSB7IDEsIDEgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUo
KnRoaXMpKQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4s
IGZsb2F0IHNjYWxlRmFjdG9yLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCisgICAgOiBG
aWx0ZXIoRmlsdGVyOjpUeXBlOjpDU1NGaWx0ZXIsIEZsb2F0U2l6ZSB7IHNjYWxlRmFjdG9yLCBz
Y2FsZUZhY3RvciB9LCBjbGlwT3BlcmF0aW9uKQorICAgICwgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMoaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQorICAgICwgbV9oYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbihoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbikKIHsKIH0KIAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkg
PSBkZWZhdWx0Oworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3Qo
Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiwgRmlsdGVyOjpDbGlwT3Bl
cmF0aW9uIGNsaXBPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRW
YWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAgICByZXR1
cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY2xp
cE9wZXJhdGlvbiA9PSBGaWx0ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRlID8gRURHRU1PREVfTk9O
RSA6IEVER0VNT0RFX0RVUExJQ0FURSk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCogQ1NTRmlsdGVy
OjppbnB1dENvbnRleHQoKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJyaWdo
dG5lc3NFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYg
Y29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCiB7Ci0gICAgcmV0dXJuIHNvdXJjZUltYWdlKCkg
PyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBl
ID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnNsb3BlID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
bi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9u
LCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZp
bHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVy
RnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxv
YXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJh
dGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAg
ICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisKKyAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0KGNvbnN0IERyb3BTaGFkb3dGaWx0
ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkID0gZHJv
cFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKKyAgICByZXR1cm4gRkVEcm9wU2hhZG93
OjpjcmVhdGUoc3RkLCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3Bl
cmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsKK30KKworc3RhdGlj
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChjb25zdCBCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBk
b3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcv
RlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQK
KyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9h
dD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIx
MjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEy
NiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2
IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAg
ICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6
OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVy
cykpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSHVlUm90YXRlRWZm
ZWN0KGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3Bl
cmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICByZXR1
cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIFdU
Rk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBjcmVhdGVJbnZlcnRFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0g
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQo
KSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OworICAgIHRy
YW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OworCisgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24pOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6
OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZl
Y3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJh
dGlvbikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVPcGFjaXR5RWZmZWN0KGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZW5kZXJlci5lbnN1
cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVy
ZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24u
aW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0
aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUobnVsbEZ1bmN0aW9u
LCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7Cit9CisKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTYXR1cmF0ZUVmZmVjdChjb25zdCBCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAg
ICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRy
aXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJh
bWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTZXBpYUVm
ZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBz
Oi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3Nl
cGlhRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisg
ICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3
MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwK
KyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAg
ICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7
Cit9CisKK3N0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoQ1NTRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9u
LCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCkK
K3sKKyAgICBhdXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIuZW5zdXJlUmVm
ZXJlbmNlZFNWR1Jlc291cmNlcygpOworICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZWZlcmVu
Y2VkU1ZHUmVzb3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50
KCksIGZpbHRlck9wZXJhdGlvbik7CisKICAgICBpZiAoIWZpbHRlckVsZW1lbnQpIHsKLSAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhp
cyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVy
ZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50
KCkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICIgYnVpbGRS
ZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRlciByZW5kZXJlciwgYWRkaW5nIHBl
bmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSk7CiAgICAgICAg
IC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIsIGl0IG1p
Z2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4KICAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzEw
ODU+CiAgICAgICAgIC8vIEZJWE1FOiBVbmNsZWFyIGlmIHRoaXMgZG9lcyBhbnl0aGluZy4KQEAg
LTg1LDIzMSArMjIyLDEwOSBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1aWxk
UmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0Zp
bHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7Ci0KLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBy
ZWZlcmVuY2VFZmZlY3RzOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRy
ZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigqZmlsdGVyRWxl
bWVudCkpIHsKLSAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5idWlsZChidWlsZGVyLmdl
dCgpLCAqdGhpcyk7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgYnVp
bGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBidWlsZCBlZmZlY3QgZnJvbSAiIDw8IGVmZmVj
dEVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwot
ICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJ
TkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRP
cGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdT
dHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246
OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0
T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5k
aWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQo
KSwgZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNlRWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0g
ICAgfQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VF
ZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgcmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRlKCpmaWx0ZXJFbGVtZW50LCBidWlsZGVy
LCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpLCBmaWx0ZXIu
ZmlsdGVyUmVnaW9uKCksIGZpbHRlci5jbGlwT3BlcmF0aW9uKCksIHByZXZpb3VzRWZmZWN0KTsK
IH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikK
K2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZpbHRlckZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKIHsKLSAgICBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
KCk7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
biA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4oKTsKLQotICAgIG1fZWZmZWN0cy5jbGVhcigpOworICAgIG1fZnVuY3Rpb25zLmNsZWFy
KCk7CiAgICAgbV9vdXRzZXRzID0geyB9OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJl
dmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKTsKKyAgICBtX2Z1
bmN0aW9ucy5hcHBlbmQoeyAqcHJldmlvdXNFZmZlY3QgfSk7CisKKyAgICBSZWZQdHI8U1ZHRmls
dGVyPiBmaWx0ZXI7CisKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAg
ICAgYXV0byYgZmlsdGVyT3BlcmF0aW9uID0gKm9wZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChm
aWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpS
RUZFUkVOQ0U6IHsKLSAgICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25j
YXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZl
Y3QsIHJlZmVyZW5jZU9wZXJhdGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG9wZXJh
dGlvbi0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZF
UlRfTElHSFRORVNTOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQUExF
X0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIuCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBT
ZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4
Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9u
IG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0
ZXJzIHsKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAu
Nzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50
KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAu
Mjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAu
OTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUo
KnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJz
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY2xpcE9wZXJhdGlvbigpKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTog
ewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAg
ICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRp
b24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZj
cy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1
aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0K
LSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3Vu
dCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAotICAg
ICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1p
bnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUz
NCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdU
Rk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmln
aHRuZXNzRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewotICAgICAgICAgICAgYXV0byYgY29s
b3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBh
cmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFt
b3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0
aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJz
KSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICAg
ICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsK
LSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAg
IFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChj
b2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZF
Q29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwg
V1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVE
cm9wU2hhZG93RWZmZWN0KGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlw
ZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAq
IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50
OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
R1JBWVNDQUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KGRv
d25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xv
ci1maWx0ZXIuCisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7
Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247
Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJG
dW5jdGlvbi5pbnRlcmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5j
dGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OklOVkVSVDoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVjdChkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0g
MDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247
Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMs
IHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51
bGxGdW5jdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50
KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRV
UkFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVS
OiB7Ci0gICAgICAgICAgICBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZsb2F0IHN0ZERldmlh
dGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwg
MCk7Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKCp0aGlzLCBz
dGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZp
bHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICAg
ICAgZWZmZWN0ID0gY3JlYXRlU2VwaWFFZmZlY3QoZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAg
ICAgICBhdXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJv
cFNoYWRvdzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigp
LCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRy
b3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRv
d09wZXJhdGlvbi5jb2xvcigpLCAxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNW
R0ZpbHRlcigqdGhpcywgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSwgcmVuZGVyZXIsICpwcmV2aW91c0VmZmVjdCk7CisgICAgICAgICAgICBlZmZlY3QgPSBu
dWxscHRyOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmlsdGVyKSB7
CisgICAgICAgICAgICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKKyAgICAgICAgICAg
IGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSk7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25O
dWxsKCkpOworICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYgKGVm
ZmVjdCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJ
bWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJv
cGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3Vi
cmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9
PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwogICAgICAgICAgICAgZWZmZWN0LT5z
ZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0gRmls
dGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwotICAgICAgICAgICAgICAg
IG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBl
ZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OworICAg
ICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKICAgICAgICAgICAgIHBy
ZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
Ly8gSWYgd2UgZGlkbid0IG1ha2UgYW55IGVmZmVjdHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUg
bm90IHZhbGlkLgotICAgIGlmIChtX2VmZmVjdHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2Z1bmN0
aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5z
aHJpbmtUb0ZpdCgpOworICAgIG1fZnVuY3Rpb25zLnNocmlua1RvRml0KCk7CiAKLSAgICBzZXRN
YXhFZmZlY3RSZWN0cyhtX3NvdXJjZURyYXdpbmdSZWdpb24pOwotI2lmIFVTRShDT1JFX0lNQUdF
KQotICAgIGlmICghbV9maWx0ZXJSZW5kZXJlcikKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9
IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3Jl
SW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRlckVuYWJsZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5n
ZXQoKSk7Ci0jZW5kaWYKKyAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24gYW5kIG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZlY3QgY2hhaW4uCisg
ICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK0dyYXBoaWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQoreworICAg
IHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxw
dHI7Cit9CisKIGJvb2wgQ1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVjdCkKIHsKICAgICBpZiAoZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwg
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlclJlY3Quc2l6ZSgpKSkKQEAgLTMz
MSw1MyArMzQ2LDcyIEBAIHZvaWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4CiAgICAgaWYgKG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBsb2dpY2FsU2l6
ZSA9IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5zaXplKCk7CisgICAgYXV0byBsb2dpY2FsU2l6ZSA9
IHNvdXJjZUltYWdlUmVjdCgpLnNpemUoKSAqIGZpbHRlclNjYWxlKCk7CisKICAgICBpZiAoIXNv
dXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6
ZSkgewogI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwg
ZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxv
Z2ljYWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZWxzZQogICAgICAg
ICBVTlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIFJlbmRlcmluZ01vZGUgbW9k
ZSA9IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJlbmRl
cmluZ01vZGUoKTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShs
b2dpY2FsU2l6ZSwgbW9kZSwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZW5kaWYKKyAgICAgICAgaWYgKGF1
dG8gY29udGV4dCA9IGlucHV0Q29udGV4dCgpKQorICAgICAgICAgICAgY29udGV4dC0+c2NhbGUo
ZmlsdGVyU2NhbGUoKSk7CiAgICAgfQorCiAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0g
dHJ1ZTsKIH0KIAorUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpsYXN0RWZmZWN0KCkK
K3sKKyAgICBpZiAobV9mdW5jdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8mIGZ1bmN0aW9uID0gbV9mdW5jdGlvbnMubGFzdCgpOworICAgIGlmIChm
dW5jdGlvbi0+aXNTVkdGaWx0ZXIoKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR0ZpbHRl
cj4oZnVuY3Rpb24ucHRyKCkpLT5sYXN0RWZmZWN0KCk7CisKKyAgICByZXR1cm4gZG93bmNhc3Q8
RmlsdGVyRWZmZWN0PihmdW5jdGlvbi5wdHIoKSk7Cit9CisKIHZvaWQgQ1NTRmlsdGVyOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQogewotICAgIGF1dG8mIGxhc3RFZmZlY3Qg
PSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZl
Y3QubWF4RWZmZWN0UmVjdCgpOworICAgIGF1dG8gbGFzdEVmZmVjdCA9IHRoaXMtPmxhc3RFZmZl
Y3QoKTsKKyAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+Y2FsY3VsYXRlTWF4
UHJpbWl0aXZlU3VicmVnaW9uKCp0aGlzKTsKKwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJF
ZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNp
emVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIGlm
IChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUp
KSB7Ci0gICAgICAgIHNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAgICAgICBsYXN0RWZm
ZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0KKyAgICBGbG9h
dFNpemUgZmlsdGVyU2NhbGUgeyAxLCAxIH07CisgICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSkpCisgICAgICAgIHNldEZp
bHRlclNjYWxlKGZpbHRlclNjYWxlKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6OmNsZWFySW50ZXJt
ZWRpYXRlUmVzdWx0cygpCiB7Ci0gICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwot
ICAgIGlmIChtX3NvdXJjZUFscGhhKQotICAgICAgICBtX3NvdXJjZUFscGhhLT5jbGVhclJlc3Vs
dCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3Qt
PmNsZWFyUmVzdWx0KCk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQor
ICAgICAgICBmdW5jdGlvbi0+Y2xlYXJGaWx0ZXJJbWFnZSgpOwogfQogCi12b2lkIENTU0ZpbHRl
cjo6YXBwbHkoKQorYm9vbCBDU1NGaWx0ZXI6OmFwcGx5RmlsdGVyKCkKIHsKLSAgICBhdXRvJiBl
ZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGlmIChtX2ZpbHRlclJlbmRlcmVy
KSB7Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZlY3QpOwotICAg
ICAgICBpZiAobV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGVm
ZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGVmZmVjdCA9IGxhc3RFZmZlY3Qo
KTsKKworICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKQorICAgICAgICBtX2ZpbHRlclJlbmRlcmVy
LT5hcHBseUVmZmVjdHMoKnRoaXMsICplZmZlY3QpOworCisgICAgaWYgKCFtX2ZpbHRlclJlbmRl
cmVyIHx8ICFtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgeworICAgICAgICBmb3IgKGF1
dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsKKyAgICAgICAgICAgIGlmICghZnVuY3Rpb24t
PmFwcGx5KCp0aGlzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgZWZmZWN0LmFwcGx5KCk7Ci0gICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworCisgICAgaWYgKGF1dG8g
aW1hZ2UgPSBlZmZlY3QtPmZpbHRlckltYWdlKCkpIHsKKyAgICAgICAgaW1hZ2UtPnRyYW5zZm9y
bVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogTGF5b3V0UmVjdCBD
U1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0
UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQpAQCAtMzkw
LDM1ICs0MjQsMzQgQEAgTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJl
Y3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGUKICAgICByZXR1cm4gcmVjdEZv
clJlcGFpbnQ7CiB9CiAKLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpIGNvbnN0CitJ
bWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQoKQogewogICAgIGlmIChtX2ZpbHRlclJlbmRl
cmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbV9m
aWx0ZXJSZW5kZXJlci0+b3V0cHV0KCk7CiAgICAgCi0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0
KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBsYXN0RWZmZWN0
KCktPmZpbHRlckltYWdlKCkpCisgICAgICAgIHJldHVybiBpbWFnZS0+aW1hZ2VCdWZmZXIoKTsK
KyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6OnNldFNvdXJj
ZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkKIHsKLSAgICBtX3Nv
dXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJbWFnZVJlY3Q7Ci0gICAgc2V0TWF4RWZmZWN0UmVj
dHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0
KTsKKyAgICBGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOworICAgIEZp
bHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7CisgICAgZm9yIChhdXRv
JiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGlmIChmdW5jdGlvbi0+aXNTVkdG
aWx0ZXIoKSkgeworICAgICAgICAgICAgZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5jdGlvbi5wdHIo
KSktPnNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOworICAgICAgICAgICAgZG93bmNh
c3Q8U1ZHRmlsdGVyPihmdW5jdGlvbi5wdHIoKSktPnNldFNvdXJjZUltYWdlUmVjdChzb3VyY2VJ
bWFnZVJlY3QpOworICAgICAgICB9CisgICAgfQogICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hl
ZCA9IGZhbHNlOwogfQogCi12b2lkIENTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMoY29uc3Qg
RmxvYXRSZWN0JiBlZmZlY3RSZWN0KQorSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKQog
ewotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPnNl
dE1heEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7Ci19Ci0KLUludFJlY3QgQ1NTRmlsdGVyOjpvdXRw
dXRSZWN0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3Qo
KS5nZXQoKTsKLSAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8fCAobV9maWx0
ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0gICAgICAgIHJl
dHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0
IHsgbV9maWx0ZXJSZWdpb24gfSk7Ci0gICAgCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBsYXN0RWZm
ZWN0KCktPmZpbHRlckltYWdlKCkpCisgICAgICAgIHJldHVybiBpbWFnZS0+YWJzb2x1dGVJbWFn
ZVJlY3QoKTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC00MzAsOCArNDYzLDkgQEAgSW50T3V0
c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogICAgIGlmICghbV9vdXRzZXRzLmlzWmVy
bygpKQogICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAgZm9yIChhdXRvJiBlZmZlY3Qg
OiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91dHNldHMoKTsKKyAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1fb3V0c2V0cyAr
PSBmdW5jdGlvbi0+b3V0c2V0cygpOworCiAgICAgcmV0dXJuIG1fb3V0c2V0czsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4IDAwYjkxOTE3YjgwNGM5MmQ5NDA4Yjc1
OGUzNzVjMjUyZjI5ZGIwYzUuLmQ0NWNkNzVkOGE0NjMzMGVlYTUyYzIzNDQ3Y2Q5OTY0MmIxZWIx
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKQEAgLTM4LDY5ICszOCw0NyBA
QCBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3Mg
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOwogY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFNv
dXJjZUFscGhhOwogY2xhc3MgU291cmNlR3JhcGhpYzsKIAotZW51bSBjbGFzcyBGaWx0ZXJDb25z
dW1lciB7IEZpbHRlclByb3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwotCiBjbGFzcyBDU1NGaWx0
ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LSAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q1NTRmlsdGVyPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4g
Y3JlYXRlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5n
TW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLCBDbGlwT3BlcmF0aW9uID0gQ2xpcE9wZXJhdGlv
bjo6SW50ZXJzZWN0KTsKIAogICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOwotICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVnaW9uKSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBJbWFnZUJ1
ZmZlciogb3V0cHV0KCkgY29uc3Q7Ci0KLSAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwotICAgIHZvaWQgY2xlYXJJ
bnRlcm1lZGlhdGVSZXN1bHRzKCk7Ci0gICAgdm9pZCBhcHBseSgpOwogCiAgICAgYm9vbCBoYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVsczsgfQogICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbigpOwotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIENTU0ZpbHRlcigpOwotICAgIHZpcnR1YWwgfkNTU0ZpbHRlcigpOwotCi0gICAg
Ym9vbCBpc0NTU0ZpbHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIEZs
b2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NvdXJjZURy
YXdpbmdSZWdpb247IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb25J
blVzZXJTcGFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0KLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50
JiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
Jik7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpOworICAgIEdyYXBoaWNz
Q29udGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CisgICAgYm9vbCBhcHBseUZp
bHRlcigpIG92ZXJyaWRlOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsK
KyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCk7CisgICAgSW50UmVjdCBvdXRwdXRSZWN0KCk7CiAK
ICAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJS
ZWN0KTsKICAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBjb25zdDsKLQogICAgIExh
eW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRS
ZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOwogCi0gICAg
RmxvYXRSZWN0IG1fc291cmNlRHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJS
ZWdpb247Ci0KLSAgICBWZWN0b3I8UmVmPEZpbHRlckVmZmVjdD4+IG1fZWZmZWN0czsKLSAgICBS
ZWY8U291cmNlR3JhcGhpYz4gbV9zb3VyY2VHcmFwaGljOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IG1fc291cmNlQWxwaGE7Citwcml2YXRlOgorICAgIENTU0ZpbHRlcihib29sIGhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlT
ZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IsIENsaXBPcGVyYXRpb24pOwogCi0gICAg
bXV0YWJsZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKKyAgICBib29sIGJ1aWxkRmlsdGVyRnVuY3Rp
b25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CisgICAgdm9pZCBk
ZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKIAogICAgIGJvb2wgbV9ncmFwaGlj
c0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAgIAorCisgICAgVmVjdG9yPFJlZjxG
aWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOworCisgICAgbXV0YWJsZSBJbnRPdXRzZXRzIG1f
b3V0c2V0czsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RSZW5kZXJlcj4gbV9m
aWx0ZXJSZW5kZXJlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCmluZGV4IDYyMzNiNWNjNTZmYjk4N2Y2MGRjNjY5YTc4NTQ1OGU3MjdkYjI4ZjUuLjUxMWFm
ZTM4ZGVhYmIyYWZiNmZmNDg3Y2Q4NDhmMGFiYTYwYjM4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzIzMCw3ICszMjMwLDcgQEAgR3JhcGhpY3NDb250
ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRp
b25Db250ZXh0LAogCiAgICAgYXV0byByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXll
ckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCwgeyB9KTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVn
aW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJvb3RS
ZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOworICAgIEdyYXBoaWNz
Q29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZl
Y3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigpLCBlbmNsb3NpbmdJbnRSZWN0KHJvb3RS
ZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBhaW50RGlydHlS
ZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkpOwogICAgIGlmICghZmls
dGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXggMjUwYTdkNWMwYmFhMGFj
NzQxYTkwYzgxOGI2MWEwNWY5NWI5NjRhNC4uMWM2MzM1NDYyODE1NWFiOTZkNzFiZGIyNmQxMWNj
ZGM0ZTI2OTE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
RmlsdGVycy5jcHAKQEAgLTExOCwyMyArMTE4LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJz
OjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKIAogdm9pZCBSZW5kZXJMYXllckZpbHRl
cnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2FsZUZhY3Rv
ciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIGlmICghbV9maWx0ZXIpIHsK
LSAgICAgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZSgpOwotICAgICAgICBtX2ZpbHRl
ci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+c2V0UmVu
ZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKLSAgICB9IGVsc2UgaWYgKG1fZmlsdGVyLT5maWx0
ZXJTY2FsZSgpICE9IHNjYWxlRmFjdG9yKSB7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJT
Y2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5jbGVhckludGVybWVkaWF0ZVJl
c3VsdHMoKTsKLSAgICB9Ci0KICAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCBy
ZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bwogICAgIC8v
IGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNvbXBvc2l0aW5nKSwgYnV0IG5l
dmVyIGFwcGx5IGFueXRoaW5nLgogICAgIC8vIEZJWE1FOiB0aGlzIHJlYnVpbGRzIHRoZSBlbnRp
cmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4K
LSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0
ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkKLSAgICAgICAgbV9maWx0ZXIg
PSBudWxscHRyOworICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVuZGVyZXIsIHJl
bmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIHJlbmRlcmluZ01vZGUsIHNjYWxlRmFjdG9yLCBGaWx0
ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRlKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJM
YXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRp
b25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFw
aGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlv
dXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFtX2ZpbHRlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNTksOCArMTQ5LDYgQEAgR3JhcGhpY3NDb250ZXh0
KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYg
ZGVzdGluYXQKICAgICBtX3BhaW50T2Zmc2V0ID0gZmlsdGVyU291cmNlUmVjdC5sb2NhdGlvbigp
OwogICAgIHJlc2V0RGlydHlTb3VyY2VSZWN0KCk7CiAKLSAgICBmaWx0ZXIuZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KICAgICBmaWx0ZXIuYWxsb2NhdGVCYWNraW5nU3Rv
cmVJZk5lZWRlZChkZXN0aW5hdGlvbkNvbnRleHQpOwogICAgIGF1dG8qIHNvdXJjZUdyYXBoaWNz
Q29udGV4dCA9IGZpbHRlci5pbnB1dENvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWNz
Q29udGV4dCB8fCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXIuZmlsdGVyUmVnaW9uKCkuc2l6ZSgpKSkKQEAgLTE4
NCwxNCArMTcyLDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVj
dChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICBhdXRvJiBmaWx0ZXIg
PSAqbV9maWx0ZXI7CiAgICAgZmlsdGVyLmlucHV0Q29udGV4dCgpLT5yZXN0b3JlKCk7CiAKLSAg
ICBmaWx0ZXIuYXBwbHkoKTsKKyAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIoKTsKIAogICAgIC8vIEdl
dCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNlLgotICAgIExheW91dFJl
Y3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRlc3RSZWN0Lm1vdmUobV9w
YWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKKyAgICBhdXRvIGRlc3RSZWN0ID0g
ZmlsdGVyLm91dHB1dFJlY3QoKTsKIAotICAgIGlmIChhdXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0
ZXIub3V0cHV0KCkpCi0gICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
Km91dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwgbV9sYXllci5y
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOworICAgIGlmIChhdXRv
KiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpIHsKKyAgICAgICAgZGVzdGluYXRpb25D
b250ZXh0LnNjYWxlKHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0
ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9KTsKKyAgICAgICAgZGVzdGluYXRpb25Db250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0QnVmZmVyLCBkZXN0UmVjdCk7CisgICAgICAgIGRlc3Rp
bmF0aW9uQ29udGV4dC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgfQogCiAgICAg
ZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKaW5kZXggM2RhMTQwYTVjODhmMTU1MzE5MGI3
MDAzZDdlNzg0NGM5MTk0NWJmNy4uM2E3NDk5NWYxZjg0YmQ5NzNlZDJiODhkMzA0Mzk3YjRjNDRk
YTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
aApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUGVyIHJlbmRlcgogICAgIExheW91
dFJlY3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRSZWN0OyB9CiAKLSAg
ICBHcmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBM
YXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3Qp
OworICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0
JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyUmVwYWludFJlY3QpOwogICAgIHZvaWQgYXBwbHlGaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNw
cAppbmRleCAxOTUwOWQ5NzE4YWZmMTEwZjg0MWVjNDk3NmY5N2ZiMWE5MzRkOGE1Li4xZWM5ZDY2
ZDVmMzc4YzZjZTc1YjQwMGRhMjU1ZTc0ZjAxNDA1OWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAt
ODIsNDAgKzgyLDYgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50
RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAogICAgIG1hcmtDbGllbnRGb3JJ
bnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFs
aWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZl
cyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0ZXJFbGVtZW50KCkuY291bnRD
aGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLnRhcmdldEJvdW5k
aW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVpbGRlcgotICAgIGF1dG8g
YnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oU291cmNlR3JhcGhpYzo6Y3Jl
YXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1l
bnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0Jv
eCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hp
bGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJF
bGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxlbWVudC5idWlsZChidWlsZGVy
LmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgYnVp
bGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZm
ZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAgICAgICAgZWxlbWVudC5zZXRT
dGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5zZXRFZmZl
Y3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwgZmlsdGVyRWxlbWVudCgpLnBy
aW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0gICAgICAgIGlmIChlbGVtZW50
LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFS
X1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVu
dC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVy
cygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxz
ZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXIt
PmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwotICAgIH0KLSAgICByZXR1
cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNv
dXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwpAQCAtMTM3LDUyICsxMDMsMzggQEAg
Ym9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBpZiAoZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIERldGVybWluZSBhYnNv
bHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4gCi0gICAgQWZmaW5lVHJhbnNm
b3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJh
bnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0ocmVuZGVyZXIpOwotICAgIGlm
ICghYWJzb2x1dGVUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUgdHJhbnNmb3JtYXRp
b24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRpbGUgaW1hZ2VzIGZv
ciBmZVRpbGUuCi0gICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0gPSBB
ZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAsIDAsIGFic29sdXRl
VHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKLQogICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSBi
b3VuZGFyaWVzIG9mIHRoZSBmaWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KICAgICBmaWx0
ZXJEYXRhLT5kcmF3aW5nUmVnaW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKICAg
ICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmlsdGVyRGF0YS0+
c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KLSAgICBib29sIHBy
aW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygp
ID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKLSAgICBm
aWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJEYXRhLT5zaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGlu
Z0JveCwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKTsK
IAotICAgIC8vIENyZWF0ZSBhbGwgcmVsZXZhbnQgZmlsdGVyIHByaW1pdGl2ZXMuCi0gICAgZmls
dGVyRGF0YS0+YnVpbGRlciA9IGJ1aWxkUHJpbWl0aXZlcygqZmlsdGVyRGF0YS0+ZmlsdGVyKTsK
LSAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZXIpCisgICAgLy8gRGV0ZXJtaW5lIGFic29sdXRl
IHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBmb3IgZmlsdGVyLgorICAgIEFmZmluZVRyYW5zZm9ybSBh
YnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9y
bWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKKyAgICBpZiAoIWFi
c29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9mIGlu
dGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhGaWx0
ZXJTaXplLgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1Jl
Z2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUpOwotICAgIHRlbXBTb3Vy
Y2VSZWN0LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKKyAgICAvLyBFbGlt
aW5hdGUgc2hlYXIgb2YgdGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUg
YWJsZSB0byBwcm9kdWNlIHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgorICAgIEZs
b2F0U2l6ZSBmaWx0ZXJTY2FsZShhYnNvbHV0ZVRyYW5zZm9ybS54U2NhbGUoKSwgYWJzb2x1dGVU
cmFuc2Zvcm0ueVNjYWxlKCkpOwogCi0gICAgLy8gU2V0IHRoZSBzY2FsZSBsZXZlbCBpbiBTVkdG
aWx0ZXIuCi0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxl
KTsKKyAgICAvLyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9m
IGludGVybWVkaWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhG
aWx0ZXJTaXplLgorICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJEYXRh
LT5kcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpOwogCi0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0
KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlm
ICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkg
PiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQorICAgIC8vIENyZWF0ZSB0aGUgU1ZHRmlsdGVyIG9i
amVjdC4KKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWls
ZGVyPigpOworICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRl
ckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIGZpbHRlclNjYWxlLCBmaWx0ZXJEYXRh
LT5kcmF3aW5nUmVnaW9uLCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCB0YXJnZXRCb3VuZGluZ0Jv
eCk7CisgICAgaWYgKCFmaWx0ZXJEYXRhLT5maWx0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBhdXRvIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZm
ZWN0KCk7CisgICAgQVNTRVJUKGxhc3RFZmZlY3QpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZp
bHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2Vc
biIgPDwgKmZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKSk7CiAKLSAgICBsYXN0RWZm
ZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qg
c3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOworICAgIEZsb2F0UmVjdCBz
dWJSZWdpb24gPSBsYXN0RWZmZWN0LT5jYWxjdWxhdGVNYXhQcmltaXRpdmVTdWJyZWdpb24oKmZp
bHRlckRhdGEtPmZpbHRlcik7CisKICAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhh
cyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKICAgICAvLyByZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNp
emVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2FsZSkpIHsKLSAgICAgICAgZmlsdGVyRGF0
YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAgbGFzdEVmZmVj
dC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgfQorICAgIGlmIChJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgZmlsdGVyU2Nh
bGUpKQorICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclNjYWxlKGZpbHRlclNj
YWxlKTsKIAogICAgIC8vIElmIHRoZSBkcmF3aW5nUmVnaW9uIGlzIGVtcHR5LCB3ZSBoYXZlIHNv
bWV0aGluZyBsaWtlIDxnIGZpbHRlcj0iLi4iLz4uCiAgICAgLy8gRXZlbiBpZiB0aGUgdGFyZ2V0
IG9iamVjdEJvdW5kaW5nQm94KCkgaXMgZW1wdHksIHdlIHN0aWxsIGhhdmUgdG8gZHJhdyB0aGUg
bGFzdCBlZmZlY3QgcmVzdWx0IGltYWdlIGluIHBvc3RBcHBseVJlc291cmNlLgpAQCAtMTk0LDkg
KzE0Niw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgfQogCiAgICAgLy8gQ2hhbmdl
IHRoZSBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQgdG8gdGhlIGZpbHRlcmVkIGVs
ZW1lbnQgdG8gcmVmbGVjdCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgZmlsdGVyLgotICAgIEFmZmlu
ZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zvcm07Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNj
YWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zv
cm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOworICAg
IEFmZmluZVRyYW5zZm9ybSBlZmZlY3RpdmVUcmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oZmls
dGVyU2NhbGUud2lkdGgoKSwgMCwgMCwgZmlsdGVyU2NhbGUuaGVpZ2h0KCksIDAsIDApOwogCiAg
ICAgYXV0byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZp
bHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJ
TkVBUl9TUkdCKQpAQCAtMjY5LDMzICsyMTksMzIgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0g
ZmlsdGVyRGF0YS5idWlsZGVyLT5sYXN0RWZmZWN0KCk7CisgICAgYXV0byBsYXN0RWZmZWN0ID0g
ZmlsdGVyRGF0YS5maWx0ZXItPmxhc3RFZmZlY3QoKTsKIAotICAgIGlmIChsYXN0RWZmZWN0ICYm
ICFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFsYXN0RWZmZWN0LT5maWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkpIHsKKyAgICBpZiAobGFzdEVmZmVjdCAmJiAh
ZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVjdC0+Y2FsY3VsYXRl
UHJpbWl0aXZlU3VicmVnaW9uKCpmaWx0ZXJEYXRhLmZpbHRlcikuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRoZSBvYmplY3QuIEl0IGp1c3Qg
bmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQogICAgICAgICAvLyBpbml0aWFsIGZpbHRlcmluZyBw
cm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIgcmVzdWx0IG9uIGEKICAgICAg
ICAgLy8gc2Vjb25kIGRyYXdpbmcuCiAgICAgICAgIGlmIChmaWx0ZXJEYXRhLnN0YXRlICE9IEZp
bHRlckRhdGE6OkJ1aWx0KQogICAgICAgICAgICAgZmlsdGVyRGF0YS5maWx0ZXItPnNldFNvdXJj
ZUltYWdlKFdURk1vdmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyKSk7CiAKKyAgICAg
ICAgYXV0byBpbWFnZSA9IGxhc3RFZmZlY3QtPmZpbHRlckltYWdlKCk7CisgICAgCiAgICAgICAg
IC8vIEFsd2F5cyB0cnVlIGlmIGZpbHRlckRhdGEgaXMganVzdCBidWlsdCAoZmlsdGVyRGF0YS0+
c3RhdGUgPT0gRmlsdGVyRGF0YTo6QnVpbHQpLgotICAgICAgICBpZiAoIWxhc3RFZmZlY3QtPmhh
c1Jlc3VsdCgpKSB7CisgICAgICAgIGlmICghaW1hZ2UpIHsKICAgICAgICAgICAgIGZpbHRlckRh
dGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PmFwcGx5KCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT5jb3JyZWN0RmlsdGVyUmVzdWx0SWZO
ZWVkZWQoKTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgICAgICAgICAgZmlsdGVyRGF0
YS5maWx0ZXItPmFwcGx5RmlsdGVyKCk7CisgICAgICAgICAgICBpbWFnZSA9IGxhc3RFZmZlY3Qt
PmZpbHRlckltYWdlKCk7CisgICAgICAgICAgICBpbWFnZS0+dHJhbnNmb3JtVG9Db2xvclNwYWNl
KERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgfQorCiAgICAgICAgIGZp
bHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIAotICAgICAgICBJbWFnZUJ1ZmZl
ciogcmVzdWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgICAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZSA/IGltYWdlLT5pbWFnZUJ1ZmZlcigp
IDogbnVsbHB0cjsKICAgICAgICAgaWYgKHJlc3VsdEltYWdlKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZl
cnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpKTsKLQotICAgICAgICAgICAgY29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlv
bigpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhl
aWdodCgpKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoKnJlc3VsdElt
YWdlLCBsYXN0RWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnNjYWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAg
ICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRy
YW5zZm9ybSk7CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRl
ckRhdGEuZmlsdGVyLT5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLmZpbHRl
ci0+ZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0lt
YWdlQnVmZmVyKCpyZXN1bHRJbWFnZSwgaW1hZ2UtPmFic29sdXRlSW1hZ2VSZWN0KCkpOworICAg
ICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkp
OwogICAgICAgICB9CiAgICAgfQogICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9
IG51bGxwdHI7CkBAIC0zMjcsNyArMjc2LDggQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY28KICAg
ICAgICAgLy8gb3Igbm9uZSBvZiB0aGVtIHdpbGwgYmUgY2hhbmdlZC4KICAgICAgICAgaWYgKCFw
cmltaXR2ZS0+c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKGVmZmVjdCwgYXR0cmlidXRlKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYnVpbGRlci0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZl
KGVmZmVjdCk7CisKKyAgICAgICAgYnVpbGRlci0+Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUo
KmVmZmVjdCk7CiAKICAgICAgICAgLy8gUmVwYWludCB0aGUgaW1hZ2Ugb24gdGhlIHNjcmVlbi4K
ICAgICAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbigqb2JqZWN0RmlsdGVyRGF0YVBhaXIu
a2V5LCBSZXBhaW50SW52YWxpZGF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAppbmRleCA4Y2UwYzdhYmMxNDNi
ZGI2NTM4NTBjOTNlMzI5MmFjOWRhNDliYmM3Li42NjhkZGEzMDU4NmY2OWU2ZDU0NGMyNjEwZjMw
OTljZTllYjgzZWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCkBAIC00NywxMCArNDcsOCBAQCBwdWJsaWM6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkZXI7CiAgICAgUmVmUHRy
PEltYWdlQnVmZmVyPiBzb3VyY2VHcmFwaGljQnVmZmVyOwogICAgIEdyYXBoaWNzQ29udGV4dCog
c2F2ZWRDb250ZXh0IHsgbnVsbHB0ciB9OwotICAgIEFmZmluZVRyYW5zZm9ybSBzaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3QgYm91bmRhcmllczsKICAgICBGbG9hdFJl
Y3QgZHJhd2luZ1JlZ2lvbjsKLSAgICBGbG9hdFNpemUgc2NhbGU7CiAgICAgRmlsdGVyRGF0YVN0
YXRlIHN0YXRlIHsgUGFpbnRpbmdTb3VyY2UgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGM2NTAyMWJl
ZTAzNTU2NWFhYjMxYzY3ZmI5MzE5Zjg4ZTYxODA3YzcuLjY0ZTNhYzVhZWFjODBhZGY5ZTI2YWI0
ZWY2Yjg1YTI3YzI1NDJkMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDMyLDExICs0MzIsMTMgQEAgdm9pZCB3
cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdS
ZXNvdXJjZUNvbnRhaW5lciYKICAgICAgICAgdHMgPDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRp
bmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgog
ICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OwotICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0g
U1ZHRmlsdGVyOjpjcmVhdGUoQWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0
LCBkdW1teVJlY3QsIHRydWUpOwotICAgICAgICBpZiAoYXV0byBidWlsZGVyID0gZmlsdGVyLmJ1
aWxkUHJpbWl0aXZlcyhkdW1teUZpbHRlci5nZXQoKSkpIHsKKyAgICAgICAgRmxvYXRTaXplIGR1
bW15U2NhbGUoMSwgMSk7CisgICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICAg
ICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlci5maWx0ZXJFbGVt
ZW50KCksIGJ1aWxkZXIsIGR1bW15U2NhbGUsIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJl
Y3QpOworICAgICAgICBpZiAoZHVtbXlGaWx0ZXIpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW06
OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKIAotICAgICAgICAgICAgaWYgKEZpbHRlckVm
ZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3QoKSkKKyAgICAgICAgICAgIGlm
IChhdXRvIGxhc3RFZmZlY3QgPSBkdW1teUZpbHRlci0+bGFzdEVmZmVjdCgpKQogICAgICAgICAg
ICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBDbGlwcGVyUmVzb3Vy
Y2VUeXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJpbmdDb250ZXh0LmNwcAppbmRleCAyMGI4YjVlN2IwN2IzMWExMmM1YWFjYmEzODU4OTJmYmYz
YTIzNTczLi4zOTc0Y2E5YzNkODRhM2IzMjAwMDcxOTNhMjA0NmVmMjYxYWVhZTk4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5j
cHAKQEAgLTIzNSw4ICsyMzUsMTEgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHRhcmcKICAgICBpZiAo
cGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBGbG9h
dFNpemUgc2NhbGU7Ci0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKHBhaW50UmVjdC5zaXplKCksIHNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGUg
eyAxLCAxIH07CisgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gcGFpbnRSZWN0LnNpemUoKTsK
KworICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocGFpbnRSZWN0LnNpemUo
KSwgc2NhbGUpKQorICAgICAgICBjbGFtcGVkU2l6ZS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2Fs
ZS5oZWlnaHQoKSk7CiAKICNpZiBVU0UoRElSRUNUMkQpCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQs
IDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQmxlbmRFbGVtZW50LmNwcAppbmRleCA3YmNmMDQxODAwZjc5OWYxMTc0Y2ZlMDRiODIyZDZk
MDY0MzFmNjg2Li4wNTQwYzhlNDQwODJkNWM2MWYwMGY4ZmI3MzVjMzYxODJkMTBmYTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKQEAgLTEwMCwxOSArMTAwLDE2
IEBAIHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4y
KCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKKyAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjIoKSk7
CiAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGF1dG8gZWZmZWN0ID0gRkVCbGVuZDo6Y3JlYXRlKGZpbHRlciwgbW9kZSgpKTsKLSAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVj
dHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAK
KyAgICBhdXRvIGVmZmVjdCA9IEZFQmxlbmQ6OmNyZWF0ZShtb2RlKCkpOworICAgIGVmZmVjdC0+
aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSwgV1RGTW92ZShpbnB1dDIpIH07CiAg
ICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQmxlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
aAppbmRleCA5MDM3Y2IxMjFmOTM2N2I3ODhkOTIxNmUwYjk0MWZjOGIwNmRlYzY2Li5lYmE5YWJi
NTgzMjhmNGRhYmYzNDI4YjZiMTdkYmY1ODIzNzY4NDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuaApAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFy
c2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVy
cmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHNldEZp
bHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdp
c3RyeSB7ICp0aGlzIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmNwcAppbmRleCAwNTI0ODU3OGMyNzRjOGZhMmIzZTFmMjQ0ZTQzNjc4NjhmNDJiYTlj
Li5jZGViZWYxOGExZmRjYmI4ZjNmYjM1ZmI4MzhhYzYwNGM5YTIzZDY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKQEAgLTEwMCw5ICsxMDAs
OSBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVy
JiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVy
LmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMTQxLDggKzE0MSw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsCiAg
ICAgICAgIGZpbHRlclZhbHVlcy5zaHJpbmtUb0ZpdCgpOwogICAgIH0KIAotICAgIGF1dG8gZWZm
ZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlciwgZmlsdGVyVHlwZSwgV1RGTW92ZShm
aWx0ZXJWYWx1ZXMpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsK
KyAgICBhdXRvIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXJUeXBlLCBXVEZN
b3ZlKGZpbHRlclZhbHVlcykpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1v
dmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKaW5kZXggN2FiNGFhNDE4MWU3YWIxOThiMTJl
NzdiZTIwNmI5YzVjNDEwMjNmZC4uOTcwMTFhMDQxZTQ5YTE3ZmI0OThhMWY4NDZmODgwZGJkZDY5
NTI0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgK
QEAgLTg2LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRl
OwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1f
cHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCmluZGV4IDkw
YTU1YjdlZmZmN2EzZmU2MDZhOWUwNTc5YTc2ZWRlOWY5NjgwMTEuLjI3ZDEyYjVkMDg4M2ViZjFl
YWMwYWRhYjExMTJmZWVlYmIxMWY0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcApAQCAtNjMsOSArNjMsOSBAQCB2b2lk
IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjbwogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxk
ZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC04Niw4ICs4Niw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0
CiAgICAgICAgICAgICBhbHBoYSA9IGRvd25jYXN0PFNWR0ZFRnVuY0FFbGVtZW50PihjaGlsZCku
dHJhbnNmZXJGdW5jdGlvbigpOwogICAgIH0KICAgICAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZShmaWx0ZXIsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVj
dCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpIH07CiAgICAg
cmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuaAppbmRleCBiYjU4OTM0N2Q4ODI2ZGZiMzYwOWVkYWM2ZThi
OTkzYTRkZDU0ODYzLi42MDE3MTBmN2QzNTM1YTE0MWExNTc4ODU0YWYyYjAzNTExMjllOTgyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQuaApAQCAtNDMsNyArNDMsNyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBzdmdBdHRyaWJ1
dGVDaGFuZ2VkIG1pc3NpbmcuCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsg
KnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmNwcAppbmRleCAzY2E5OWI4NzU3MDhiYmQ4YTZiYWY2NTNkYzA2ZmUyMDVhYzk4
MjM1Li43ZmNlZDJlNjQ1NTQwZTNiOWRkMDk2Y2JlNDk5MWY1ODQxNTUwNTE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtMTMxLDE5ICsxMzEs
MTYgQEAgdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmls
dGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEVmZmVjdEJ5SWQoaW4xKCkpOwotICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0
RWZmZWN0QnlJZChpbjIoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZl
Y3RCeUlkKGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVDb21wb3NpdGU6OmNyZWF0
ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIGsxKCksIGsyKCksIGszKCksIGs0KCkpOwotICAgIEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsK
LSAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwotICAgIGlucHV0RWZmZWN0cy5h
cHBlbmQoaW5wdXQxKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5kKGlucHV0Mik7ICAgIAorICAg
IGF1dG8gZWZmZWN0ID0gRkVDb21wb3NpdGU6OmNyZWF0ZShzdmdPcGVyYXRvcigpLCBrMSgpLCBr
MigpLCBrMygpLCBrNCgpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3Zl
KGlucHV0MSksIFdURk1vdmUoaW5wdXQyKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAppbmRleCA4MWE3OGM4NjU3
YTBmYTMwNDRkZjViN2M1YTA4MGQ2ZTc3OTcyMmY2Li43NGQ4MTRjM2MyMGUwZmQzN2ViNmE4YjUz
YWZmNTY5ZDhkMTFkY2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxl
bWVudC5oCkBAIC0xMDksNyArMTA5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRG
aWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJl
Z2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVk
U3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCmluZGV4
IGY3NTA1ODE1ZGVjYWJiNGVhMzRiNDM1YjQ3ZWE1YTgwYzZhMjZkZjEuLjFhODEzNGE5YzhiN2Zj
MGE1MDc1ZWRlODFhMGQzNjk3MGU5OGM0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApAQCAtMTkxLDkgKzE5MSw5IEBAIHZvaWQg
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
IGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZp
bHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0
RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0yNDYsOCArMjQ2LDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckIKICAgICAg
ICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAgfQogCi0gICAgYXV0byBlZmZlY3QgPSBGRUNv
bnZvbHZlTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllW
YWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdl
dFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwg
a2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVj
dCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShJbnRTaXplKG9yZGVyWFZhbHVlLCBvcmRlcllW
YWx1ZSksIGRpdmlzb3JWYWx1ZSwgYmlhcygpLCBJbnRQb2ludCh0YXJnZXRYVmFsdWUsIHRhcmdl
dFlWYWx1ZSksIGVkZ2VNb2RlKCksIEZsb2F0UG9pbnQoa2VybmVsVW5pdExlbmd0aFhWYWx1ZSwg
a2VybmVsVW5pdExlbmd0aFlWYWx1ZSksIHByZXNlcnZlQWxwaGEoKSwga2VybmVsTWF0cml4KTsK
KyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICBy
ZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudC5oCmluZGV4IDg1YzAwMjY5OGM2Mjc3ZTA0MzcwZDM1OTgyYTk1YjhkOTA0
OWIzMzkuLjFiNmJiZTQ4NzEyNzVjNDIxYzhkZDQ0MDljMWI0ODk3Mjk1YWExMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCkBAIC0xMDMs
NyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRy
aWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7
IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggMTUyYzk4NWZkOGU5
NWFlOTk1N2U2ZTIxZDZiZjJhMTBjNDU0YmRkNS4uZGQzOTQ1OTVjZjcyNjQ4YTY3ZDUyOGExMzQx
NTFkYTM2N2Y0YzY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTE1MSw5ICsxNTEsOSBAQCB2b2lkIFNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6bGlnaHRFbGVtZW50QXR0cmlidXRlQ2hhbmdlZChjb25zdCBTVkdG
RUxpZ2h0RQogICAgIHByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1S
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBm
aWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTYyLDcgKzE2Miw3IEBAIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciogZmlsdGVyCiAgICAgaWYgKCFsaWdodEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNl
KCpmaWx0ZXJCdWlsZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5s
aWdodFNvdXJjZShmaWx0ZXJCdWlsZGVyKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC0xNzAsOCArMTcwLDgg
QEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXIKIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXIt
PnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3Zn
U3R5bGUoKS5saWdodGluZ0NvbG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRURpZmZ1c2VM
aWdodGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29u
c3RhbnQoKSwga2VybmVsVW5pdExlbmd0aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92
ZShsaWdodFNvdXJjZSkpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9
OworICAgIGF1dG8gZWZmZWN0ID0gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3Vy
ZmFjZVNjYWxlKCksIGRpZmZ1c2VDb25zdGFudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJu
ZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7CisgICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5o
CmluZGV4IDY4OTk5NjA5ZjRiNmI1NmE3NmM4OGVhNTY5NWYxZTBlOWUyMDU1ODAuLmIyYWFjOGIw
M2VkMjRkMjFkOThiNTE5ZmJhOGU1Zjk0NWNhMzA4MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZm
ZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsK
KyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0
aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3Ry
aW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5jcHAKaW5kZXggMGM1ZTgyNWJjODI1NjBmMzZhMjY5ZWE2ZDcy
MmRmZDA1MTczZDhjMi4uNjkwNzUxMzc1MDdkNmM2NDc0OWExYzhiYzQxMmEwYWVlNTFhMWEyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5jcHAKQEAgLTExNSwxOSArMTE1LDE2IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIm
IGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsK
LSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwot
ICAgIGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjIoKSk7Cisg
ICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAg
IGF1dG8gaW5wdXQyID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMigpKTsKICAgICAK
ICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIGF1dG8gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShmaWx0ZXIsIHhDaGFu
bmVsU2VsZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKTsKLSAgICBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7Ci0gICAg
aW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1dEVmZmVjdHMuYXBwZW5k
KGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIpOyAgICAKKyAgICBhdXRv
IGVmZmVjdCA9IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoeENoYW5uZWxTZWxlY3RvcigpLCB5
Q2hhbm5lbFNlbGVjdG9yKCksIHNjYWxlKCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkg
PSB7IFdURk1vdmUoaW5wdXQxKSwgV1RGTW92ZShpbnB1dDIpIH07CiAgICAgcmV0dXJuIGVmZmVj
dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oCmluZGV4IGFhOTFkZjM4YjM2Mjk4ZjEyMWExNDExYzRkMGFlNWVjZDU4NjY1ZDMuLmYy
YzZkMGIxOGY4NWM5NGYzODRmNWJkMWJlZmMzNTllZGU4MjNlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKQEAgLTkxLDcgKzkxLDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7
IFNWR0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcAppbmRleCAyMmJjZTFkMzMzMTdjOTU3MWZlNWQ3
OWY0YjMyNmE4OWJmYzViNjgxLi5iZDYxYzI3NGUxNTM0ZmQ5MWFjMzk4MGM2NDU2Mjk4OTljZjYy
MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuY3Bw
CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU1ZHRkVEcm9wU2hhZG93RWxlbWVudDo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUp
OwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QK
K1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTExMSwx
MiArMTExLDEyIEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkCiAgICAgQ29sb3IgY29sb3IgPSBy
ZW5kZXJlci0+c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdmdTdHlsZS5mbG9v
ZENvbG9yKCkpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBzdmdTdHlsZS5mbG9vZE9wYWNpdHkoKTsK
IAotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7
CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwog
ICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZm
ZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERl
dmlhdGlvblkoKSwgZHgoKSwgZHkoKSwgY29sb3IsIG9wYWNpdHkpOwotICAgIGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8gZWZmZWN0ID0gRkVEcm9wU2hhZG93
OjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNv
bG9yLCBvcGFjaXR5KTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlu
cHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRHJvcFNoYWRvd0VsZW1lbnQuaAppbmRleCA5YjYyZDI0YjQ1NGJiN2QyNzU4ZTcxMmI2MjFi
OGNiZTQyZjc0NTFkLi4zZTQwNWRlNDg5YzY4MWE3NmM0NGY5YTgyOTczM2EyMDI2YjRkOGZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKQEAgLTUzLDcg
KzUzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1h
dGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVs
ZW1lbnQuY3BwCmluZGV4IGMyMjhlMjJkNTY1ZDBlMTYzZmY4N2QwYjRiY2FiZDIyNDQ3NThmYzIu
LmYzMjhjYzdjMTVlZTc5MWI0YWFiYTNhOGU3MWE4MDRjODA5M2RjZmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcApAQCAtNTgsNyArNTgsNyBAQCBib29sIFNWR0ZF
Rmxvb2RFbGVtZW50OjpzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiBlZmZl
Y3QsIGNvbnN0IFF1YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtNjksNyArNjksNyBA
QCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciosIEZpbHRlciYgZmlsdGVyKQogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0
eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3ZnU3R5bGUuZmxvb2RDb2xvcigpKTsK
ICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RPcGFjaXR5KCk7CiAKLSAgICByZXR1
cm4gRkVGbG9vZDo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIG9wYWNpdHkpOworICAgIHJldHVybiBG
RUZsb29kOjpjcmVhdGUoY29sb3IsIG9wYWNpdHkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRUZsb29kRWxlbWVudC5oCmluZGV4IGI5NmE0M2FhMzEzZTc1ZTRhMzE2NzI0OGExYjZmNWNm
NTFmZWU5MTEuLmFlZDY2OTE5MzNiZDAyZjMzMDFhOTIzOTdiNzQwNTlmZjZiZWM0YmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCkBAIC0zNiw3ICszNiw3IEBAIHByaXZh
dGU6CiAgICAgY29uc3QgU1ZHUHJvcGVydHlSZWdpc3RyeSYgcHJvcGVydHlSZWdpc3RyeSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3RyeTsgfQogCiAgICAgYm9vbCBzZXRG
aWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQ
cm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAppbmRleCA3YTk5
ODIyNGM5MjE5NTU1MjQ0YTg2OWNhNzhhODMwZDU2M2M1OTlkLi5mMWU2YmY0OWE0ZGIzZGNhNzc1
YzliN2VmYTVkYjlkYzg2OTg4NzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcApAQCAtOTUsMTcgKzk1LDE3IEBAIHZvaWQgU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWls
ZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikg
Y29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBp
ZiAoc3RkRGV2aWF0aW9uWCgpIDwgMCB8fCBzdGREZXZpYXRpb25ZKCkgPCAwKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZShmaWx0ZXIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBlZGdlTW9kZSgpKTsK
LSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVj
dCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25Z
KCksIGVkZ2VNb2RlKCkpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUo
aW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAppbmRleCBkODllMWE3NDhmYjJjNTA5ZTIxNGZl
OTRhZTQxMDAxY2U0OGVlMGIyLi5mNDBlYjMzNzc4YzQzZGY2MWVlNTg5NjNlZWNmOWVjZGJhNTQ5
Y2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5o
CkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQg
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEg
eyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFSW1hZ2VFbGVtZW50LmNwcAppbmRleCBkZGNlZDJlZDllOWZlM2Y2NDMzMThkYzU5NTgwZWYx
YzMzNjY2MWIwLi44MjZiYjA0Y2I5ZTMwNjZhZTZjZDllOGVkZGQ4NzkzNzU0NDAzZTNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKQEAgLTE3NSwxNiArMTc1LDE2
IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
JiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzCiAgICAgUmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtG
b3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRhdGlvbigqcGFyZW50UmVuZGVyZXIpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdAogewogICAg
IGlmIChtX2NhY2hlZEltYWdlKQotICAgICAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElt
YWdlKGZpbHRlciwgbV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJlcigpKSwg
cHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICAgICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdp
dGhJbWFnZShtX2NhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpLCBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvKCkpOwogCiAgICAgYXV0byB0YXJnZXQgPSBTVkdVUklSZWZlcmVuY2U6
OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGhyZWYoKSwgdHJlZVNjb3BlKCkpOwogICAgIGlm
IChpc0Rlc2NlbmRhbnRPclNoYWRvd0Rlc2NlbmRhbnRPZih0YXJnZXQuZWxlbWVudC5nZXQoKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIEZFSW1hZ2U6OmNyZWF0ZVdp
dGhJUklSZWZlcmVuY2UoZmlsdGVyLCB0cmVlU2NvcGUoKSwgaHJlZigpLCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkpOworICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKHRy
ZWVTY29wZSgpLCBocmVmKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CiB9CiAKIHZvaWQgU1ZH
RkVJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxV
Ukw+JiB1cmxzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAppbmRl
eCBkOTNlMGQwZGI4Yjg4NjY1NDgwZjIxMDE1YTI1NmJhZGExNTRjNWM3Li4yYTNlOWY2MGViZmMy
N2QwMTM5YjJjMzc2ODVmMzM4YjFjOGI2NzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFn
ZUVsZW1lbnQuaApAQCAtNTUsNyArNTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRGaW5p
c2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgdm9pZCBjbGVhclJlc291cmNlUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVxdWVz
dEltYWdlUmVzb3VyY2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3Bw
CmluZGV4IGJlMmY2ZTAzMDdkYzU1MTYwMDc5MGZkNWJmMTgyZjFkOTQ2MjNkZDYuLjFjMGQ1ODJk
MDEzYjg3Y2YwZTNjMTEwOGI5NjJmMmQzNjlkYzMwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFTWVyZ2VFbGVtZW50LmNwcApAQCAtNDUsMTMgKzQ1LDEyIEBAIFJlZjxTVkdGRU1lcmdlRWxl
bWVudD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBECiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRkVNZXJnZUVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1l
bnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVy
KSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBlZmZlY3Qg
PSBGRU1lcmdlOjpjcmVhdGUoZmlsdGVyKTsKLSAgICBhdXRvJiBtZXJnZUlucHV0cyA9IGVmZmVj
dC0+aW5wdXRFZmZlY3RzKCk7Ci0KKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbWVyZ2VJbnB1dHM7
CisgICAgCiAgICAgZm9yIChhdXRvJiBtZXJnZU5vZGUgOiBjaGlsZHJlbk9mVHlwZTxTVkdGRU1l
cmdlTm9kZUVsZW1lbnQ+KCp0aGlzKSkgewotICAgICAgICBhdXRvIG1lcmdlRWZmZWN0ID0gZmls
dGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChtZXJnZU5vZGUuaW4xKCkpOworICAgICAgICBhdXRv
IG1lcmdlRWZmZWN0ID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKG1lcmdlTm9kZS5pbjEo
KSk7CiAgICAgICAgIGlmICghbWVyZ2VFZmZlY3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKFdURk1vdmUobWVyZ2VFZmZlY3QpKTsKQEAg
LTYyLDYgKzYxLDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEYKICAgICBpZiAobWVyZ2VJbnB1
dHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIGF1dG8gZWZmZWN0
ID0gRkVNZXJnZTo6Y3JlYXRlKCk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IFdURk1v
dmUobWVyZ2VJbnB1dHMpOwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFTWVyZ2VFbGVtZW50LmgKaW5kZXggNzQ1MDg2ODE2ZjY5NzZjNjY5N2RjNTEwNzU4MDJk
MjgzY2Y0ZTNjMi4uNDM3Y2Q3MjU2MzJjNWY0YzUyNDg5NGNjMzI2Y2EwOWI0MTk4NTE3ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKQEAgLTM1LDcgKzM1LDcgQEAgcHJp
dmF0ZToKICAgICB1c2luZyBQcm9wZXJ0eVJlZ2lzdHJ5ID0gU1ZHUHJvcGVydHlPd25lclJlZ2lz
dHJ5PFNWR0ZFTWVyZ2VFbGVtZW50LCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM+OwogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVnaXN0cnkoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3Ry
eSB7ICp0aGlzIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9y
cGhvbG9neUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuY3BwCmluZGV4IGQ2ZmI5NWM4ZTM3NzZlNmQyMDkzYmVhY2UzNWUyZWQxNzk1ZDMyMWIu
LjhiMDU2MGM0ZGE4MDAzOTcwMTQ4ZTFlMTVlMmYzMDk3YjkxNTMxNTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKQEAgLTExNCwyMCArMTE0LDE5
IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZp
bHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBmbG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOwotICAg
IGZsb2F0IHlSYWRpdXMgPSByYWRpdXNZKCk7Ci0KKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCisgICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1c1goKTsKKyAgICBmbG9h
dCB5UmFkaXVzID0gcmFkaXVzWSgpOwogICAgIGlmICh4UmFkaXVzIDwgMCB8fCB5UmFkaXVzIDwg
MCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFTW9ycGhv
bG9neTo6Y3JlYXRlKGZpbHRlciwgc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywgeVJhZGl1cyk7Ci0g
ICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3Qg
PSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShzdmdPcGVyYXRvcigpLCB4UmFkaXVzLCB5UmFkaXVzKTsK
KyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICBy
ZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVN
b3JwaG9sb2d5RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuaAppbmRleCAxYTkwODhiNzVjZjhkODVhZTM4ZjI5M2UxMTE5OGE2NmY2NmFhNjY5Li5i
MjFiNmY1YzQ3Yjc4NWRmMjhmMDEzZWRlNTQwMWM4NjZkNDBlOWRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmgKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92
ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwotICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlz
IH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5n
OjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5j
cHAKaW5kZXggMDM4MjY4Yjg5YjJmMTlmOWJlNTY4NzM5ZDEyMzAzNTQxMDBhNWVlNy4uOWIwZDcw
MmExZDI1ODU0MjA4Yjk3ZmY5ZDZhZGQxZjgyN2UyOWFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKQEAgLTgxLDE0ICs4MSwxNCBAQCB2b2lkIFNWR0ZFT2Zm
c2V0RWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRU9m
ZnNldEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRl
ciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1
dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0
byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYg
KCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBG
RU9mZnNldDo6Y3JlYXRlKGZpbHRlciwgZHgoKSwgZHkoKSk7CisgICAgYXV0byBlZmZlY3QgPSBG
RU9mZnNldDo6Y3JlYXRlKGR4KCksIGR5KCkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkg
PSB7IGlucHV0MSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmgKaW5kZXggNTc0NzNkY2M3MmRiNjdiMTI1ZWEyZWQ0NjVlMzViNTcz
NzA0OWJlZS4uODk5NmYyODJiMDFlOGQ5Y2Q2NjdiZjIwYjVjZDk4OGE1OTlhZjg4OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaApAQCAtNDcsNyArNDcsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0
IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuY3BwCmluZGV4IDliN2NlNDBhYjk3MTZhZTRmMzM1ZjU0YjI0Y2RhNDU5
YTg0MjlhNTkuLjU2M2I5ZjE3YjRhOTE2YjdkMjY1MTI0MmQzN2QzZmMwYmQ3NTAyZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5j
cHAKQEAgLTE2MCw5ICsxNjAsOSBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6
OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgU1ZHRkVMaWdodAogICAgIHByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBm
aWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZp
bHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0
RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0xNzEsNyArMTcxLDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGUKICAgICBp
ZiAoIWxpZ2h0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgYXV0
byBsaWdodFNvdXJjZSA9IGxpZ2h0RWxlbWVudC0+bGlnaHRTb3VyY2UoKmZpbHRlckJ1aWxkZXIp
OworICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKGZpbHRl
ckJ1aWxkZXIpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTE3OSw3ICsxNzksNyBAQCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZQogICAgIAogICAgIENvbG9yIGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29s
b3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVuZGVyZXItPnN0eWxlKCkuc3ZnU3R5bGUoKS5saWdo
dGluZ0NvbG9yKCkpOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVNwZWN1bGFyTGlnaHRpbmc6OmNy
ZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgpLCBz
cGVjdWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZ
KCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFU3BlY3VsYXJM
aWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwgc3BlY3VsYXJDb25zdGFudCgp
LCBzcGVjdWxhckV4cG9uZW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5n
dGhZKCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygp
ID0geyBpbnB1dDEgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKaW5kZXggODk3YjhkZTE1NmQx
Yzc5YTFkM2ZkOGIzMTE4ZTJhYjYzYjQ3YjE0Ni4uNGQxYjUzMWM0MmJlYjhjZGZhMjAxNTIxNjIx
MTY1MTBkMDA5YmM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudC5oCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAg
IGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
UHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMp
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKaW5kZXggMzliZGNjNzcz
NTk2NjUwMzZlMWFlNzQ3NjEyZWFkNmY5YWMzNzM3MC4uMDAxZGQ1MDg5MjE0OTg5MTU2ZDcyNDY3
YWMyMGY0ZmZmN2Q0ZGM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGls
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNw
cApAQCAtNzAsMTUgKzcwLDE1IEBAIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZp
bHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0
RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFVGlsZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAg
ZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBG
RVRpbGU6OmNyZWF0ZSgpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUo
aW5wdXQxKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5oCmluZGV4IDQ1YjMyNzE4NTFkN2ZjMGRjMmQzYmNjODc5YTIyZGM0MmEzM2E5
MWYuLmNhYmFjZTZiZDAxYzJiMWQzNTY0YTVjZWU1YzI3NWI2Njk2ZjlkNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaApAQCAtNDIsNyArNDIsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJp
bmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8
U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlz
KSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCmlu
ZGV4IDExNTYxMTE5ZDgzZTNmYzc4OGE0MmIxNDg2N2M2NTY0MTIzMzRhNGQuLjE1MWI3YjllOGUw
OGE0M2U3Y2NjYjY4MDlhYTcyOTE0NmRiYmYwZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKQEAgLTExNywxMSArMTE3LDExIEBAIHZvaWQgU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3QKIHsKICAgICBpZiAoYmFzZUZyZXF1
ZW5jeVgoKSA8IDAgfHwgYmFzZUZyZXF1ZW5jeVkoKSA8IDApCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShmaWx0ZXIsIHR5cGUoKSwgYmFz
ZUZyZXF1ZW5jeVgoKSwgYmFzZUZyZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0
aXRjaFRpbGVzKCkgPT0gU1ZHX1NUSVRDSFRZUEVfU1RJVENIKTsKKyAgICByZXR1cm4gRkVUdXJi
dWxlbmNlOjpjcmVhdGUodHlwZSgpLCBiYXNlRnJlcXVlbmN5WCgpLCBiYXNlRnJlcXVlbmN5WSgp
LCBudW1PY3RhdmVzKCksIHNlZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9T
VElUQ0gpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQuaAppbmRleCBiZjlkYTIyYWQ0MmU0MTBhMTA0MzVlMGE0MGUzNDI2Nzc2OWUxOThhLi41MGFm
OTEwZWI1OGUyYzkyMjQxYTkwZGE4Y2JkZmRjNjgxNGY5MzE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKQEAgLTExOSw3ICsxMTksNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3Zl
cnJpZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3Qq
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5
IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVgg
eyBTVkdBbmltYXRlZE51bWJlcjo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
CmluZGV4IDlhZDJjOWU5NWUwN2QyYTdjMjk3ZjU2ZWZkMWJiZmZlN2MyNjk3YTAuLjAwZTRlNjk4
NjY0NTMyOTIyZDYzNzVlNzdhZDQzYjI4NWM3NDQ5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3Bw
CkBAIC05NCwyMiArOTQsNiBAQCB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaAogICAgIGludmFsaWRh
dGUoKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNl
dFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0ZXJFZmZlY3QqIGZpbHRlckVmZmVjdCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoZmlsdGVyRWZmZWN0KTsKLSAgICBpZiAoIWZpbHRlckVmZmVjdCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eEF0dHIpKQotICAg
ICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1godHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6eUF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1kodHJ1ZSk7Ci0g
ICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKLSAgICAgICAgZmlsdGVy
RWZmZWN0LT5zZXRIYXNXaWR0aCh0cnVlKTsKLSAgICBpZiAoaGFzQXR0cmlidXRlKFNWR05hbWVz
OjpoZWlnaHRBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNIZWlnaHQodHJ1ZSk7
Ci19Ci0KIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmIHN0eWxlLCBj
b25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQogewogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZT4oKnRoaXMsIFdURk1vdmUoc3R5bGUpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuaAppbmRleCBjOThiMTNlZDk2Mjc2YWY5ZTE0ZjY0MjgxMWE2ZmQ3NDY3
NzJhY2E3Li44NzhkMTEyYzAyOTg3ZDFmYmYxNjE0MWFjZTJiOGI4MWY1ZWIyOTJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5oCkBAIC0zNiw5ICszNiw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CiBj
bGFzcyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMgOiBwdWJsaWMgU1ZHRWxl
bWVudCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMpOwogcHVibGljOgotICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVz
KEZpbHRlckVmZmVjdCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0ID0g
MDsKICAgICAvLyBSZXR1cm5zIHRydWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50IGZy
b20gdGhlIG9sZCBvbmUuCiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggMzg1YWYy
OTA4NDhhM2QwYjgzZjEyYWM5NjE5ZTZiZjk2YzlmMjM5Ni4uNjhkNGM3ODIyMTU2NDkyZDU5MDY3
MDcxNTJlNDhiM2E2NzZmODE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTM1LDQ2ICszNSw0MSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVB
c3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkltYWdlKQorRkVJ
bWFnZTo6RkVJbWFnZShSZWZQdHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCisgICAgOiBGaWx0ZXJFZmZlY3QoRmls
dGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1f
cHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCi1GRUltYWdl
OjpGRUltYWdlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3Ry
aW5nJiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNw
ZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKK0ZFSW1h
Z2U6OkZFSW1hZ2UoVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAg
IDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAgICAsIG1fdHJl
ZVNjb3BlKCZ0cmVlU2NvcGUpCiAgICAgLCBtX2hyZWYoaHJlZikKICAgICAsIG1fcHJlc2VydmVB
c3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCi1SZWY8RkVJbWFnZT4gRkVJ
bWFnZTo6Y3JlYXRlV2l0aEltYWdlKEZpbHRlciYgZmlsdGVyLCBSZWZQdHI8SW1hZ2U+IGltYWdl
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8p
CitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKFJlZlB0cjxJbWFnZT4gaW1h
Z2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRp
bykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGZpbHRlciwgaW1hZ2UsIHBy
ZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUltYWdlKGlt
YWdlLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLVJlZjxGRUltYWdlPiBGRUltYWdlOjpj
cmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29w
ZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUm
IHByZXNlcnZlQXNwZWN0UmF0aW8pCitSZWY8RkVJbWFnZT4gRkVJbWFnZTo6Y3JlYXRlV2l0aElS
SVJlZmVyZW5jZShUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIsIHRyZWVTY29wZSwgaHJlZiwg
cHJlc2VydmVBc3BlY3RSYXRpbykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2Uo
dHJlZVNjb3BlLCBocmVmLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CiB9CiAKLXZvaWQgRkVJbWFn
ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQorRmxvYXRSZWN0IEZFSW1hZ2U6OmNhbGN1
bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRl
cigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
KSk7Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3Q7CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHBy
aW1pdGl2ZVN1YnJlZ2lvbjsKKwogICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIHNyY1JlY3Qu
c2V0U2l6ZShtX2ltYWdlLT5zaXplKCkpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8u
dHJhbnNmb3JtUmVjdChwYWludFJlY3QsIHNyY1JlY3QpOwotICAgIH0gZWxzZSBpZiAoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKSkKLSAgICAgICAgc3JjUmVj
dCA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWlu
dFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQot
ICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQot
ICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdCA9IHsgeyB9LCBtX2ltYWdlLT5zaXplKCkgfTsKKyAgICAgICAgbV9wcmVzZXJ2
ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoaW1hZ2VSZWN0LCBzcmNSZWN0KTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3Qs
IHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIFJlbmRlckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVy
ZW5jZWRSZW5kZXJlcigpIGNvbnN0CkBAIC04NywzNyArODIsMzcgQEAgUmVuZGVyRWxlbWVudCog
RkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3QKICAgICByZXR1cm4gdGFyZ2V0LmVs
ZW1lbnQtPnJlbmRlcmVyKCk7CiB9CiAKLXZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKK2Jvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogewogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRl
cmVyKCk7CiAgICAgaWYgKCFtX2ltYWdlICYmICFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5
cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQotICAgIHNldFJlc3VsdENvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIGF1dG8mIG91dHB1dCA9ICpm
aWx0ZXJJbWFnZSgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBvdXRwdXQu
aW1hZ2VCdWZmZXIoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlcigp
LmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSk7
CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gb3V0cHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpOwor
ICAgIGRlc3RSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIEZsb2F0UmVj
dCBzcmNSZWN0OwotICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgc3JjUmVjdCA9IGZpbHRlcigp
LmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKSk7Ci0gICAgZWxzZSB7CisgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgICAg
IHNyY1JlY3QgPSByZW5kZXJlci0+cmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKKyAg
ICAgICAgc3JjUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgfSBlbHNlIHsK
ICAgICAgICAgc3JjUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2UtPnNpemUo
KSk7CiAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0
LCBzcmNSZWN0KTsKICAgICB9CiAKLSAgICBJbnRQb2ludCBwYWludExvY2F0aW9uID0gYWJzb2x1
dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAgIGF1dG8gcGFpbnRMb2NhdGlvbiA9IG91dHB1
dC5hYnNvbHV0ZUltYWdlUmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgZGVzdFJlY3QubW92ZSgtcGFp
bnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7CiAKICAgICBhdXRvJiBjb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAogICAgIGlmIChyZW5kZXJlcikgewotICAgICAg
ICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCkuYWJz
b2x1dGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVUcmFu
c2Zvcm0pOworICAgICAgICBjb250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAog
ICAgICAgICBSZWZQdHIgY29udGV4dE5vZGUgPSBkb3duY2FzdDxTVkdFbGVtZW50PihyZW5kZXJl
ci0+ZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGNvbnRleHROb2RlLT5oYXNSZWxhdGl2ZUxlbmd0
aHMoKSkgewpAQCAtMTMyLDEwICsxMjcsMTEgQEAgdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQogCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZW50VHJhbnNmb3JtYXRp
b247CiAgICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnJlbmRlclN1YnRyZWVUb0NvbnRleHQo
Y29udGV4dCwgKnJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGNvbnRleHQuZHJhd0ltYWdl
KCptX2ltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRl
eHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRleCBhYzE2MGVkY2U3
YzBlMGEwNjdiZGVmYmQ3MDdmMmFiZTU1OTA4MWI2Li4yZDRiMzM1MmU1ODNkZmQ4YzVmMzlkNTM1
ODBkMDc5ZDM5NTcxZGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC0zNCwyMiArMzQsMjIgQEAgY2xhc3MgVHJlZVNjb3BlOwog
CiBjbGFzcyBGRUltYWdlIGZpbmFsIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUltYWdlPiBjcmVhdGVXaXRoSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPElt
YWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgc3RhdGljIFJl
ZjxGRUltYWdlPiBjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYsIFRyZWVTY29wZSYsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHN0
YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOworICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3Jl
YXRlV2l0aElSSVJlZmVyZW5jZShUcmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5GRUlt
YWdlKCkgPSBkZWZhdWx0OwotICAgIEZFSW1hZ2UoRmlsdGVyJiwgUmVmUHRyPEltYWdlPiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7Ci0gICAgRkVJbWFnZShGaWx0ZXImLCBU
cmVlU2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFs
dWUmKTsKKyAgICBGRUltYWdlKFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSYpOworICAgIEZFSW1hZ2UoVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFSW1hZ2UiOyB9CisgICAgUmVuZGVyRWxl
bWVudCogcmVmZXJlbmNlZFJlbmRlcmVyKCkgY29uc3Q7CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBl
IGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBl
SW1hZ2U7IH0KKyAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0KIAotICAgIFJlbmRlckVsZW1l
bnQqIHJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0OworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBm
aW5hbDsKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgZmluYWw7CisgICAg
Ym9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgZmluYWw7CiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3QgZmluYWw7CiAKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1h
Z2U7CkBAIC02MSwzICs2MSw1IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUltYWdlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5k
ZXggOWE5NGE0NjAzNTg3OTA4YTM4NGQxNzQyN2IzNzE5MzU5MmI3YmNlNy4uNjI0ZmVjMzVhOGQ2
OWI0NTlhMzcxMTMwMjViNmQ5YzBlYTNmMDRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yMiwyOSArMjIsOTIgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiU291cmNlR3JhcGhpYy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlcjo6
U1ZHRmlsdGVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBl
ZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAsIG1f
YWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uKGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbikK
K1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZp
bHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYg
ZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uLCBGaWx0ZXJF
ZmZlY3QmIHByZXZpb3VzRWZmZWN0KQoreworICAgIHJldHVybiBjcmVhdGUoZmlsdGVyRWxlbWVu
dCwgYnVpbGRlciwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBj
bGlwT3BlcmF0aW9uLCBmaWx0ZXJSZWdpb24sICZwcmV2aW91c0VmZmVjdCk7Cit9CisKK1JlZlB0
cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVs
ZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVy
U2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCkKK3sKKyAg
ICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlclNjYWxlLCBzb3Vy
Y2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0LCB0YXJn
ZXRCb3VuZGluZ0JveCwgbnVsbHB0cik7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRl
cjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxk
ZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9w
ZXJhdGlvbiBjbGlwT3BlcmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94
LCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KQoreworICAgIGJvb2wgcHJpbWl0aXZlQm91
bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRU
eXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKKworICAgIGF1dG8gZmlsdGVy
ID0gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwg
ZmlsdGVyUmVnaW9uLCBjbGlwT3BlcmF0aW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZl
Qm91bmRpbmdCb3hNb2RlKSk7CisKKyAgICBpZiAoIXByZXZpb3VzRWZmZWN0KQorICAgICAgICBi
dWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoU291cmNlR3JhcGhpYzo6Y3JlYXRlKCkpOworICAg
IGVsc2UKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKHsgKnByZXZpb3VzRWZm
ZWN0IH0pOworCisgICAgYnVpbGRlci5zZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGlu
Z0JveCk7CisgICAgYnVpbGRlci5zZXRQcmltaXRpdmVVbml0cyhmaWx0ZXJFbGVtZW50LnByaW1p
dGl2ZVVuaXRzKCkpOworCisgICAgYXV0byBsYXN0RWZmZWN0ID0gYnVpbGRlci5idWlsZEZpbHRl
ckVmZmVjdHMoZmlsdGVyRWxlbWVudCk7CisgICAgaWYgKCFsYXN0RWZmZWN0KQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgZXhwcmVzc2lvbjsK
KyAgICBpZiAoIWJ1aWxkZXIuYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24pKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGZpbHRlci0+c2V0TGFzdEVmZmVjdChXVEZNb3ZlKGxhc3RF
ZmZlY3QpKTsKKyAgICBmaWx0ZXItPnNldEV4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSk7
CisgICAgcmV0dXJuIGZpbHRlcjsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGJvb2wgZWZmZWN0QkJveE1vZGUp
CisgICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpTVkdGaWx0ZXIsIGZpbHRlclNjYWxlLCBzb3Vy
Y2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgY2xpcE9wZXJhdGlvbikKICAgICAsIG1fdGFyZ2V0
Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpCi0gICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0
ZXJSZWdpb24pCiAgICAgLCBtX2VmZmVjdEJCb3hNb2RlKGVmZmVjdEJCb3hNb2RlKQogewotICAg
IG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVRyYW5zZm9ybS5tYXBSZWN0KGZpbHRl
clJlZ2lvbik7CiB9CiAKLUZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QKK0Zsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZFNp
emVCeUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKIHsKKyAgICBGbG9h
dFNpemUgcmVzb2x2ZWRTaXplID0gc2l6ZTsKICAgICBpZiAobV9lZmZlY3RCQm94TW9kZSkKLSAg
ICAgICAgc2l6ZSA9IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKTsKKyAgICAgICAg
cmVzb2x2ZWRTaXplID0gcmVzb2x2ZWRTaXplICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXplKCk7
CisKKyAgICByZXR1cm4gRmlsdGVyOjpzY2FsZWRTaXplQnlGaWx0ZXJTY2FsZShyZXNvbHZlZFNp
emUpOworfQorCitib29sIFNWR0ZpbHRlcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7
CisgICAgc2V0U291cmNlSW1hZ2UoeyBmaWx0ZXIuc291cmNlSW1hZ2UoKSB9KTsKKyAgICByZXR1
cm4gYXBwbHlGaWx0ZXIoKTsKK30KIAotICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVy
UmVzb2x1dGlvbihzaXplKSAqIG1fYWJzb2x1dGVGaWx0ZXJSZWdpb24uc2l6ZSgpIC8gbV9maWx0
ZXJSZWdpb24uc2l6ZSgpOworYm9vbCBTVkdGaWx0ZXI6OmFwcGx5RmlsdGVyKCkKK3sKKyAgICBp
ZiAobV9leHByZXNzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Zm9yIChhdXRvJiBlZmZlY3QgOiBtX2V4cHJlc3Npb24pIHsKKyAgICAgICAgaWYgKCFlZmZlY3Qt
PmFwcGx5KCp0aGlzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworSW50T3V0c2V0cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xhc3RFZmZlY3QtPm91dHNldHMoKTsKIH0KIAotUmVmPFNWR0ZpbHRl
cj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVn
aW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQordm9pZCBTVkdGaWx0ZXI6OmNsZWFyRmlsdGVySW1h
Z2UoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihhYnNvbHV0ZVRyYW5z
Zm9ybSwgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgZmls
dGVyUmVnaW9uLCBlZmZlY3RCQm94TW9kZSkpOworICAgIG1fbGFzdEVmZmVjdC0+Y2xlYXJGaWx0
ZXJJbWFnZXNSZWN1cnNpdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA4MDkz
MTQ2ZDY0YWY4ODg1YmMzZGE0OTMwMmY1YWVhMGZiMTcwMGNmLi5lNDZhZmU3YjU0NTQxNDlhYWY5
Y2Q4ZTM0OTdkZjg1NzUyNjNmZjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMjAsNyArMjAsNiBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgpAQCAtMjksMzIg
KzI4LDQxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyQnVpbGRl
cjsKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1
YmxpYyBGaWx0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgYm9vbCk7Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9u
SW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQotICAg
IEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Fic29sdXRl
RmlsdGVyUmVnaW9uOyB9CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdG
aWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVy
U2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVj
dCk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50
JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgc3RhdGljIFJlZlB0
cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYs
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0Vm
ZmVjdCk7CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6
ZSkgY29uc3QgZmluYWw7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemVCeUZpbHRlclNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBseUZpbHRlcigpIG92ZXJyaWRlOwogCi0gICAgRmxv
YXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYWJzb2x1dGVT
b3VyY2VEcmF3aW5nUmVnaW9uOyB9CiAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQogCi0gICAgYm9vbCBpc1NWR0Zp
bHRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBsYXN0RWZmZWN0KCkgeyByZXR1cm4gbV9sYXN0RWZmZWN0OyB9CisgICAgdm9pZCBzZXRM
YXN0RWZmZWN0KFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYgbGFzdEVmZmVjdCkgeyBtX2xhc3RFZmZl
Y3QgPSBXVEZNb3ZlKGxhc3RFZmZlY3QpOyB9CisgICAgdm9pZCBzZXRFeHByZXNzaW9uKEZpbHRl
ckVmZmVjdFZlY3RvciYmIGV4cHJlc3Npb24pIHsgbV9leHByZXNzaW9uID0gV1RGTW92ZShleHBy
ZXNzaW9uKTsgfQogCiBwcml2YXRlOgotICAgIFNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJh
d2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxv
YXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOworICAgIFNWR0ZpbHRl
cihjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGJvb2wgZWZmZWN0QkJveE1vZGUpOwor
CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVh
ckZpbHRlckltYWdlKCkgb3ZlcnJpZGU7CiAKLSAgICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVNvdXJj
ZURyYXdpbmdSZWdpb247CiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAg
RmxvYXRSZWN0IG1fYWJzb2x1dGVGaWx0ZXJSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVy
UmVnaW9uOwogICAgIGJvb2wgbV9lZmZlY3RCQm94TW9kZTsKKworICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IG1fbGFzdEVmZmVjdDsKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9leHByZXNzaW9u
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci5pc1NWR0ZpbHRlcigpOyB9
CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uJiBm
dW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNTVkdGaWx0ZXIoKTsgfQogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA5NmYzYTgwNTA0Mjk1NTU4MTAz
NGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li4xOTM2NmUxZTkxYjM3YzcwZGFkNTc1NDI1NGIxZjBmNzE5
NDI2NDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMjAsMjAgKzIwLDExMSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKIAotI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIlNvdXJjZUFs
cGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9S
X1NQQUNFX0xJTkVBUl9TUkdCKQorI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIo
UmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRl
cjo6c2V0dXBCdWlsdGluRWZmZWN0cyhSZWY8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQog
ewotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwg
c291cmNlR3JhcGhpYyk7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVm
ZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgqc291cmNlR3JhcGhpYykpOworICAgIG1f
YnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgc291cmNlR3Jh
cGhpYy5wdHIoKSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVj
dE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZShzb3VyY2VHcmFwaGljKSk7CiAgICAgYWRkQnVp
bHRpbkVmZmVjdHMoKTsKIH0KIAorI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9M
SU5FQVJfU1JHQikKK3N0YXRpYyBDb2xvckludGVycG9sYXRpb24gY29sb3JJbnRlcnBvbGF0aW9u
Rm9yRWxlbWVudChTVkdFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlmIChhdXRvIHJlbmRlcmVy
ID0gZWxlbWVudC5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCku
c3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCk7CisKKyAgICAvLyBUcnkgdG8g
ZGV0ZXJtaW5lIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHRoZSBjb21wdXRlZCBzdHlsZS4KKyAg
ICBpZiAoYXV0byB2YWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IoJmVsZW1lbnQpLnByb3Bl
cnR5VmFsdWUoQ1NTUHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJzKSkgeworICAgICAg
ICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Q29sb3JJbnRlcnBvbGF0aW9uOjpBdXRvOworfQorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBj
b2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqIGVmZmVjdCwgSGFzaFNldDxjb25zdCBG
aWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykKK3sKKyAgICBhbGxFZmZlY3RzLmFkZChlZmZlY3Qp
OworICAgIHVuc2lnbmVkIHNpemUgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOworICAgICAgICBjb2xsZWN0RWZmZWN0
cyhpbiwgYWxsRWZmZWN0cyk7CisgICAgfQorICAgIHJldHVybiBhbGxFZmZlY3RzLnNpemUoKTsK
K30KKworc3RhdGljIHVuc2lnbmVkIHRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cyhjb25zdCBGaWx0
ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCit7CisgICAgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3Qq
PiBhbGxFZmZlY3RzOworICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cygmbGFzdEVmZmVjdCwgYWxs
RWZmZWN0cyk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1
aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQoreworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cyA9IDEwMDsKKwor
ICAgIGlmIChmaWx0ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5v
ZGVzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGVmZmVjdDsKKworICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBl
PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsK
KyAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5idWlsZCgqdGhpcyk7CisgICAgICAgIGlm
ICghZWZmZWN0KSB7CisgICAgICAgICAgICBjbGVhckVmZmVjdHMoKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBlZmZlY3RCb3VuZGFyaWVz
ID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM+KCZlZmZlY3RFbGVtZW50LCBtX3ByaW1pdGl2ZVVuaXRzLCBtX3Rh
cmdldEJvdW5kaW5nQm94KTsKKyAgICAgICAgCisgICAgICAgIE9wdGlvblNldDxGaWx0ZXJCb3Vu
ZGFyeVNldDo6RmxhZ3M+IGZsYWdzOworICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKKyAgICAgICAgICAgIGZsYWdzLmFkZChGaWx0ZXJCb3Vu
ZGFyeVNldDo6RmxhZ3M6Okhhc1gpOworCisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJv
dW5kYXJ5U2V0OjpGbGFnczo6SGFzWSk7CisKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFz
QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQorICAgICAgICAgICAgZmxhZ3MuYWRkKEZp
bHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzV2lkdGgpOworCisgICAgICAgIGlmIChlZmZlY3RF
bGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCisgICAgICAgICAgICBm
bGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNIZWlnaHQpOworICAgICAgICAK
KyAgICAgICAgZWZmZWN0LT5zZXRCb3VuZGFyeVNldCh7IGVmZmVjdEJvdW5kYXJpZXMsIGZsYWdz
IH0pOworCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQor
ICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZlY3RFbGVtZW50KSA9
PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVmZmVjdC0+c2V0
T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSk7
CisjZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlZmZlY3RFbGVtZW50LnJlbmRl
cmVyKCkpCisgICAgICAgICAgICBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0
LmNvcHlSZWYoKSwgcmVuZGVyZXIpOworCisgICAgICAgIGFkZChlZmZlY3RFbGVtZW50LnJlc3Vs
dCgpLCBlZmZlY3QpOworICAgIH0KKworICAgIGlmICghZWZmZWN0IHx8IHRvdGFsTnVtYmVyRmls
dGVyRWZmZWN0cygqZWZmZWN0KSA+IG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cykKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZWZmZWN0OworfQorCiB2b2lkIFNWR0Zp
bHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0KQogewogICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKQEAgLTkyLDE1ICsxODMsNDMg
QEAgdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMoKQogICAgIGFkZEJ1aWx0aW5F
ZmZlY3RzKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJz
aXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckZp
bHRlckltYWdlc1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKLSAgICBpZiAoIWVm
ZmVjdC0+aGFzUmVzdWx0KCkpCisgICAgaWYgKCFlZmZlY3QuZmlsdGVySW1hZ2UoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIGVmZmVjdC5jbGVh
ckZpbHRlckltYWdlKCk7CisKKyAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IGVmZmVjdFJlZmVy
ZW5jZXMoJmVmZmVjdCkpCisgICAgICAgIGNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKCpyZWZl
cmVuY2UpOworfQorCitzdGF0aWMgYm9vbCBidWlsZEVmZmVjdEV4cHJlc3Npb24oY29uc3QgUmVm
UHRyPEZpbHRlckVmZmVjdD4mIGVmZmVjdCwgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjaywgRmls
dGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKQoreworICAgIC8vIEEgY3ljbGUgaXMgZGV0ZWN0
ZWQuCisgICAgaWYgKHN0YWNrLmNvbnRhaW5zKGVmZmVjdCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGV4cHJlc3Npb24uaW5zZXJ0KDAsIGVmZmVjdCk7CisKKyAgICBzdGFjay5hcHBl
bmQoZWZmZWN0KTsKKworICAgIGZvciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3QtPmlucHV0
RWZmZWN0cygpKSB7CisgICAgICAgIGlmICghYnVpbGRFZmZlY3RFeHByZXNzaW9uKGlucHV0RWZm
ZWN0LCBzdGFjaywgZXhwcmVzc2lvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChzdGFjay5sYXN0
KCkgPT0gZWZmZWN0KTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KIAotICAgIGZvciAoYXV0byYgcmVmZXJlbmNlIDogZWZmZWN0UmVmZXJlbmNlcyhlZmZl
Y3QpKQotICAgICAgICBjbGVhclJlc3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsKK2Jvb2wgU1ZH
RmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKEZpbHRlckVmZmVjdFZlY3RvciYgZXhwcmVz
c2lvbikgY29uc3QKK3sKKyAgICBGaWx0ZXJFZmZlY3RWZWN0b3Igc3RhY2s7CisgICAgcmV0dXJu
IGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihtX2xhc3RFZmZlY3QsIHN0YWNrLCBleHByZXNzaW9uKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGM3N2FlMDhiYWM2
NWMzYzJjZmM4OTc0ZmEzM2U3NjQ2MGNlOTdmYTcuLjU2YWQ2NzBjMjk3ZjY3NGZhYWI0Mzk3ZmQx
MmY1M2YwOGNmODU5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgU1ZH
RmlsdGVyQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVmZmVj
dCo+IEZpbHRlckVmZmVjdFNldDsKIAotICAgIFNWR0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZpbHRl
ckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAgU1ZHRmlsdGVyQnVpbGRlcigpID0gZGVmYXVs
dDsKIAogICAgIHZvaWQgc2V0VGFyZ2V0Qm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiByKSB7
IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSByOyB9CiAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQpAQCAtNjMsNyArNjMs
MTEgQEAgcHVibGljOgogICAgIGlubGluZSBGaWx0ZXJFZmZlY3QqIGVmZmVjdEJ5UmVuZGVyZXIo
UmVuZGVyT2JqZWN0KiBvYmplY3QpIHsgcmV0dXJuIG1fZWZmZWN0UmVuZGVyZXIuZ2V0KG9iamVj
dCk7IH0KIAogICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNS
ZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CisgICAgdm9pZCBjbGVhckZpbHRlckltYWdlc1JlY3Vy
c2l2ZShGaWx0ZXJFZmZlY3QmKTsKKworICAgIHZvaWQgc2V0dXBCdWlsdGluRWZmZWN0cyhSZWY8
RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZEZpbHRlckVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYpOworICAgIGJvb2wgYnVpbGRFeHBy
ZXNzaW9uKEZpbHRlckVmZmVjdFZlY3RvciYgZXhwcmVzc2lvbikgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGRlMGQ5ZjI3MTFk
NGZmNWQyNzk5NTBhMTI0NTA5Njc3ZDQ1ZDk3ZjguLmEwYmM3NTdkNGZlNTMwMDdlY2FmOTEyZGEw
MzYyYTBkMzRmMmIxZTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAyMS0xMS0wNyAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIFJl
ZmFjdG9yIHRoZSBGaWx0ZXJFZmZlY3QgcmVzdWx0IGJ1ZmZlcnMgaW50byBhIG5ldyBjbGFzcyBu
YW1lZCAnRmlsdGVySW1hZ2UnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjUwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTEtMDIgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBSZW1vdmUg
dGhlIHJlZmVyZW5jZSB0byBGaWx0ZXIgZnJvbSBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjU1MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0d28gZmFpbHVyZXMgcmVsYXRl
ZCB0byB0aGUgY29sb3Igc3BhY2UgdG8gVGVzdEV4cGVjdGF0aW9ucy4KKworICAgICAgICAqIFRl
c3RFeHBlY3RhdGlvbnM6CisKKzIwMjEtMTAtMzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBh
cHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBob2xkcyBh
IGxpc3Qgb2YgRmlsdGVyRnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjEtMTEtMDYgIFR5bGVy
IFdpbGNvY2sgIDx0eWxlcl93QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogV2ViS2l0MSBQbHVn
aW5WaWV3QmFzZSBvYmplY3RzIHdpdGggYW4gYXNzb2NpYXRlZCB3aWRnZXQoKS0+cGxhdGZvcm1X
aWRnZXQoKSBzaG91bGQgYmUgY29uc2lkZXJlZCBhdHRhY2htZW50cwo=
</data>
<flag name="commit-queue"
          id="468264"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443517</attachid>
            <date>2021-11-07 12:17:53 -0800</date>
            <delta_ts>2021-12-04 01:49:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211107121752.patch</filename>
            <type>text/plain</type>
            <size>404694</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1Mzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFmY2VkZDdjN2I5YTYz
ZDEwOTAwZmNkMTRlOWNkODBlNDE0ZTU3NS4uOWRiNGFlNDljZGFmNGE2ZDU5ZGIxYjMzNmFiNjJl
YzY1NTZiMzk0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5MiBAQAorMjAyMS0xMS0wNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFNpbXBsaWZ5IEZpbHRlckVmZmVjdCBnZW9tZXRyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjppbWFnZUZvclNvdXJj
ZUdyYXBoaWMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlORU9OKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFudExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojppc0FscGhhSW1hZ2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmNhbGN1bGF0
ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2Vt
ZW50TWFwOjppbWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNw
bGFjZW1lbnRNYXA6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojppc0FscGhhSW1hZ2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRVRpbGU6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRp
bGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29y
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmNsaXBPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpzY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6bWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6Y2xpcFRvUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6Y2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6Om1hcFBvaW50RnJvbVVz
ZXJTcGFjZVRvQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHlG
aWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlTZXQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6RmlsdGVyQm91bmRhcnlTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OnggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyQm91bmRhcnlTZXQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJv
dW5kYXJ5U2V0OjpoZWlnaHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRl
UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcEFic29sdXRlUGFp
bnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbGxlY3RFZmZlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVk
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJS
ZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJl
c3VsdHNSZWN1cnNpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVm
ZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVz
dGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3RzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVySW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRCb3VuZGFyeVNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZXJhdGluZ0NvbG9yU3BhY2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVyYXRpbmdDb2xvclNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VDb2xvclNwYWNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cGxhdGZvcm1BcHBseUNvcmVJbWFnZSBjb25z
dCk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpu
dW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldElzQWxwaGFJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmFic29sdXRlUGFpbnRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0QWJzb2x1dGVQYWludFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXhFZmZlY3RSZWN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0TWF4RWZmZWN0
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RG
aWx0ZXJSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmZpbHRlckVmZmVjdFR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6aGFzWCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OnNldEhhc1gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpoYXNZIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6c2V0SGFzWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Omhhc1dpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6c2V0SGFzV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpoYXNIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpzZXRIYXNIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjplZmZlY3RCb3VuZGFyaWVz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0RWZm
ZWN0Qm91bmRhcmllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xpcHNUb0JvdW5kcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldENsaXBzVG9Cb3VuZHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1bHRDb2xvclNwYWNlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0UmVzdWx0
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpub3JtYWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFn
ZTo6cHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcklt
YWdlOjppbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6Omlz
QWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50
TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpTb3VyY2VBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXI6Om91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJj
ZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cHJpbWl0aXZlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICog
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJk
QXR0cmlidXRlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjphcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpidWlsZEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjph
cHBseUZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6
CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjp0b3Rh
bE51bWJlckZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxk
ZXI6OmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zp
bHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorCisyMDIxLTExLTA3ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVmYWN0b3IgdGhlIEZpbHRlckVmZmVjdCByZXN1bHQgYnVmZmVycyBpbnRvIGEgbmV3IGNs
YXNzIG5hbWVkICdGaWx0ZXJJbWFnZScKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1vdmUgdGhlIHN0b3JhZ2UgYW5kIHRoZSBsb2dpYyBmb3IgbWFuYWdp
bmcgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUKKyAgICAgICAgRmlsdGVyRWZmZWN0IHRvIGl0
cyBpbnB1dHMgdG8gYSBuZXcgY2FsbHMgbmFtZWQgJ0ZpbHRlclJlc3VsdCcuIFRoaXMgd2lsbAor
ICAgICAgICBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgRmlsdGVyRWZmZWN0LiBJdCB3
aWxsIGFsc28gYWxsb3cgaW50ZWdyYXRpbmcKKyAgICAgICAgdGhlIENvcmVJbWFnZSBzZWFtbGVz
c2x5IGFuZCBzaW1wbGlmeWluZyB0aGUgZ2VvbWV0cnkgY2FsY3VsYXRpb24uCisKKyAgICAgICAg
SW5zdGVhZCBvZiBoYXZpbmcgdGhyZWUgd2F5cyB0byBjcmVhdGUgdGhlIHJlc3VsdCBvZiBhIEZp
bHRlckVmZmVjdCwgdGhlcmUKKyAgICAgICAgd2lsbCBiZSBvbmUgd2F5IHdoaWNoIGlzIGJ5IGNh
bGxpbmcgRmlsdGVySW1hZ2U6OmNyZWF0ZSgpLiBUaGlzIGNhbGwgd2lsbAorICAgICAgICBub3Qg
Y3JlYXRlIGEgY29uY3JldGUgcmVzdWx0LiBCdXQgcmVxdWVzdGluZyB0aGUgSW1hZ2VCdWZmZXIg
b3IgYSBQaXhlbEJ1ZmZlcgorICAgICAgICBmcm9tIEZpbHRlckltYWdlIHdpbGwgbWFrZSB0aGlz
IGNyZWF0aW9uIGhhcHBlbnMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3Np
dGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0
ZTo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgIHJlcXVpcmVzVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgaXMgcmVwbGFjZWQgYnkgdGhlIG9wcG9zaXRlIAorICAg
ICAgICBtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKS4gQ29ycmVjdGluZyB0
aGUgcHJlbXVsdGlwbGllZAorICAgICAgICByZXN1bHQgd2lsbCBiZSBkb25lIGJ5IEZpbHRlckVm
ZmVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Zmls
bFJlZ2lvbldvcmtlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUpOgorICAgICAgICBDbGVh
cmluZyB0aGUgcmVzdWx0IGNhbiBiZSBkb25lIGJ5IG51bGxpZnlpbmcgYSBzaW5nbGUgcG9pbnRl
ci4KKworICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnVucHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRVbnByZW11bHRpcGxpZWRSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpnZXRQcmVtdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVucHJlbXVsdGlwbGllZFJl
c3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29y
cmVjdFByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp1bm11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xv
clNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1
ZmZlclRvRGVzdGluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKTog
RGVsZXRlZC4KKyAgICAgICAgQWxsIHRoZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMgd2FzIG1v
dmVkIHRvIEZpbHRlckltYWdlLmNwcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhh
c1Jlc3VsdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVm
ZmVjdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjptYXlQcm9kdWNlSW52
YWxpZFByZW11bHRpcGxpZWRQaXhlbHMgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0VHlw
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om91dHNl
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0
ZXJFZmZlY3RDbGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpmaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpyZXF1aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OmltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWluZ0FscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVySWZFeGlzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckltYWdlOjpnZXRQaXhlbEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFn
ZTo6cmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Z2V0Q29udmVydGVkUGl4ZWxCdWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmxvZ2ljYWxTaXplIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckltYWdlOjppbWFnZUJ1ZmZlcklmRXhpc3RzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6Cisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisyMDIxLTExLTAyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gRmlsdGVyIGZyb20gRmlsdGVyRWZmZWN0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI1NTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9mIGhh
dmluZyBhIHJlZmVyZW5jZSB0byB0aGUgRmlsdGVyIGluIHRoZSBGaWx0ZXJFZmZlY3QsIHdlIGFy
ZQorICAgICAgICBnb2luZyB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoZSBGaWx0ZXIgdG8gdGhl
IEZpbHRlckVmZmVjdCBmdW5jdGlvbnMKKyAgICAgICAgb25seSB3aGVuIG5lZWRlZC4KKworICAg
ICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9y
dHNDb3JlSW1hZ2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmFwcGx5RWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmlsdGVycyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJs
ZW5kOjpGRUJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpGRUNvbXBvbmVudFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZF
Q29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRURp
c3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6RkVGbG9vZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUZsb29kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFu
Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVN
ZXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3k6OkZFTW9ycGhvbG9neSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVP
ZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3Bl
Y3VsYXJMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OkZFVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
RVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1
bGVuY2U6OmZpbGxSZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpmaWxsUmVnaW9uV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6c291cmNlSW1hZ2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJl
bXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJ
bWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVy
dFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbHRlck5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uOjpmaWx0ZXJOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBw
bHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdy
YXBoaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VH
cmFwaGljKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3RO
YW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6IERlbGV0
ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlQ29jb2EuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZm
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
U2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHlGaWx0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpvdXRwdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5k
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQg
Y29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5oOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVu
dDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAg
ICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZv
bHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpidWls
ZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAg
ICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9T
VkdGRURyb3BTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRUZsb29kRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpi
dWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRUltYWdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdl
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQgY29uc3QpOgorICAgICAgICAqIHN2
Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxk
IGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVP
ZmZzZXRFbGVtZW50OjpidWlsZCBjb25zdCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkIGNv
bnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
VGlsZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkIGNvbnN0KToKKyAgICAgICAg
KiBzdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6Y3JlYXRlV2l0aEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFSW1hZ2U6OmNyZWF0ZVdpdGhJUklSZWZlcmVuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRl
ckVmZmVjdHMpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuaDoKKworMjAyMS0xMC0zMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4K
KworICAgICAgICBbR1BVIFByb2Nlc3NdIE1ha2UgQ1NTRmlsdGVyIGhvbGRzIGEgbGlzdCBvZiBG
aWx0ZXJGdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjQ2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEluIHRoaXMgcGF0Y2gsIHRoZSBDU1MgcmVmZXJlbmNlIGZpbHRlciBpcyBidWlsdCBh
cyBhbiBTVkdGaWx0ZXIgYW5kIGl0CisgICAgICAgIGlzIGtlcHQgYXMgYSBGaWx0ZXJGdW5jdGlv
biBpbiB0aGUgQ1NTRmlsdGVyIGZ1bmN0aW9ucycgbGlzdC4gVGhlIEZpbHRlciAKKyAgICAgICAg
YXNzb2NpYXRlZCB3aXRoIHRoZSBGaWx0ZXJFZmZlY3RzIG9mIHRoZSByZWZlcmVuY2VkIGZpbHRl
ciB3aWxsIGJlIGFuCisgICAgICAgIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyBhIENTU0Zp
bHRlci4gVGhpcyB3aWxsIGFsbG93IGhhdmluZyBjb2xvcgorICAgICAgICBzcGFjaW5nIGZvciB0
aGUgcmVmZXJlbmNlZCBmaWx0ZXJzIGRpZmZlcmVudCBmcm9tIHRoZSBjb2xvciBzcGFjaW5nIG9m
CisgICAgICAgIENTU0ZpbHRlci4gCisKKyAgICAgICAgQWxzbyB0aGlzIHBhdGNoIG1ha2VzIGEg
c2luZ2xlIGZ1bmN0aW9uIGZvciBidWlsZGluZyB0aGUgcHJpbWl0aXZlcyBvZgorICAgICAgICB0
aGUgU1ZHRmlsdGVyIGluc3RlYWQgb2YgaGF2aW5nIHR3byBmdW5jdGlvbnMuCisKKyAgICAgICAg
VG8gYWxsb3cgb3BlcmF0aW5nIHRocm91Z2ggdGhlIFNWR0ZpbHRlciBhcyBhIEZpbHRlckZ1bmN0
aW9uIG93bmVkIGJ5CisgICAgICAgIENTU0ZpbHRlciwgdGhlIFNWR0ZpbHRlciB3aWxsIGhhdmUg
YSBwb2ludGVyIHRvIGl0cyBsYXN0RWZmZWN0LgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVmZmVjdFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQmx1ckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCcmlnaHRuZXNz
RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRyYXN0RWZmZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlR3JheVNjYWxlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUh1ZVJvdGF0
ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbnZlcnRFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlT3BhY2l0eUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTYXR1cmF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Omxhc3RFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6Om91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJjZUlt
YWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckludGVycG9s
YXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1
aWxkRmlsdGVyRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpT
VkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisKKzIwMjEtMTAtMjggIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIFNWR0ZpbHRlciBh
bmQgQ1NTRmlsdGVyIHdvcmsgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMgc3lzdGVtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgU1ZHRmls
dGVyIHNldHMgdGhlIGZvbGxvd2luZyBtZW1iZXJzIG9mIEZpbHRlcgorCisgICAgICAgIDEuIEFm
ZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOiB0aGlzIGlzIHRoZSBzY2FsaW5nIHBh
cnQgZnJvbSB0aGUKKyAgICAgICAgICAgdHJhbnNmb3JtYXRpb24gZnJvbSB0aGUgdGFyZ2V0IGVs
ZW1lbnQgdG8gdGhlIG91dGVybW9zdCBjb29yZGluYXRlIHN5c3RlbQorICAgICAgICAyLiBGbG9h
dFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOiB0aGlzIGlzIHRoZSBjbGFtcGluZyBzY2FsZSBpZiB0
aGUgc2l6ZQorICAgICAgICAgICBvZiB0aGUgcmVzdWx0IEltYWdlQnVmZmVycyBleGNlZWRzIE1h
eENsYW1wZWRBcmVhCisKKyAgICAgICAgQW5kIHRoZSBDU1NGaWx0ZXIgc2V0cyB0aGUgZm9sbG93
aW5nIG1lbWJlciBvZiBGaWx0ZXI6CisKKyAgICAgICAgMS4gZmxvYXQgbV9maWx0ZXJTY2FsZTog
dGhpcyBpcyB0aGUgZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpCisKKyAgICAgICAgVGhl
IGRpc2NyZXBhbmN5IGhhcHBlbnMgYWxzbyB3aGVuIGNyZWF0aW5nIHRoZSByZXN1bHQgSW1hZ2VC
dWZmZXJzLiBGb3IgCisgICAgICAgIFNWR0ZpbHRlciwgd2UgY3JlYXRlIHRoZW0gd2l0aCBzY2Fs
ZUZhY3Rvcj0xLiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZQorICAgICAgICA9PSBiYWNrZW5k
U2l6ZS4gQnV0IGZvciBDU1NGaWx0ZXIgd2UgY3JlYXRlIHRoZW0gd2l0aCBzY2FsZUZhY3Rvcgor
ICAgICAgICA9IG1fZmlsdGVyU2NhbGUuIFRoaXMgbWVhbnMgdGhlIGxvZ2ljYWxTaXplICE9IGJh
Y2tlbmRTaXplIGluIHRoaXMgY2FzZS4KKworICAgICAgICBXZSBuZWVkIHRvIHVuaWZ5IHRoZSBj
b29yZGluYXRlcyBzeXN0ZW0gZm9yIGJvdGggZmlsdGVycy4gV2UgbmVlZCBhbHNvIHRvCisgICAg
ICAgIHJlcGxhY2UgdGhlIHRocmVlIG1lbWJlcnMgYnkgYSBzaW5nbGUgRmxvYXRTaXplIGNhbGxl
ZCAibV9maWx0ZXJTY2FsZSIuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29y
ZUltYWdlLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6
OmZpbHRlclJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNldFNvdXJj
ZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2Nh
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpmaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0RmlsdGVyUmVzb2x1dGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFic29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0
aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpv
dXRwdXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondy
aXRlU1ZHUmVzb3VyY2VDb250YWluZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRl
clNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoK
KworMjAyMS0xMC0yNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAg
ICAgICBbR1BVIFByb2Nlc3NdIEludHJvZHVjZSBGaWx0ZXJGdW5jdGlvbiBhbmQgbWFrZSBpdCB0
aGUgYmFzZSBjbGFzcyBvZiBGaWx0ZXIgYW5kIEZpbHRlckVmZmVjdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDEzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhbGxvd3MgQ1NTRmlsdGVyIHRv
IGhvbGQgYSBsaXN0IG9mIEZpbHRlckZ1bmN0aW9ucy4gVGhlIEZpbHRlciBpbgorICAgICAgICB0
aGlzIGNhc2Ugd2lsbCBhY3QgbGlrZSBhIGNvbXBvc2l0ZSBwYXR0ZXJuIG9mIHRoZSBGaWx0ZXJF
ZmZlY3QuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvCisgICAgICAgIDEuIFJlbW92ZXMgdGhl
IHZpcnR1YWwgZnVuY3Rpb24gZmlsdGVyTmFtZSgpIGZyb20gYWxsIHRoZSBGaWx0ZXJFZmZlY3QK
KyAgICAgICAgICAgY2xhc3Nlcy4gSXQgcmVwbGFjZXMgaXQgd2l0aCBhIHN0YXRpYyBmdW5jdGlv
biBpbiBGaWx0ZXJGdW5jdGlvbi4KKyAgICAgICAgMi4gUmVtb3ZlcyB0aGUgdmlydHVhbCBmdW5j
dGlvbiBmaWx0ZXJFZmZlY3RUeXBlKCkgYW5kIHRoZSBmdW5jdGlvbgorICAgICAgICAgICBGaWx0
ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlwZSgpIHNpbmNlIHRoZXkgY2FuIGJvdGggYmUg
cmVwbGFjZWQKKyAgICAgICAgICAgYnkgRmlsdGVyRnVuY3Rpb246OmZpbHRlclR5cGUoKS4KKyAg
ICAgICAgMy4gQWRkcyB0cmFpdCBtYWNyb3MgZm9yIGFsbCBGaWx0ZXJFZmZlY3RzIGFuZCB0aGUg
U1ZHRmlsdGVycyBjbGFzcy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1h
Z2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpGRUJsZW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRy
aXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
OgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChpc1R5
cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRN
YXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6RkVPZmZzZXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1
bGFyTGlnaHRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNl
OjpGRVR1cmJ1bGVuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6Cisg
ICAgICAgIChpc1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJF
ZmZlY3RUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6ZmlsdGVyTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZp
bHRlck5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVu
Y3Rpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVy
VHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNDU1NGaWx0
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzU1ZHRmlsdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXJFZmZlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OnNvdXJjZUFscGhhTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6c291cmNlR3JhcGhpY05hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlck5hbWUgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUFscGhhOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VB
bHBoYTo6ZWZmZWN0TmFtZSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Yzo6U291cmNlR3JhcGhpYyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBl
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1h
Z2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorCiAyMDIxLTExLTA2ICBUeWxlciBXaWxjb2NrICA8dHls
ZXJfd0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFdlYktpdDEgUGx1Z2luVmlld0Jhc2Ugb2Jq
ZWN0cyB3aXRoIGFuIGFzc29jaWF0ZWQgd2lkZ2V0KCktPnBsYXRmb3JtV2lkZ2V0KCkgc2hvdWxk
IGJlIGNvbnNpZGVyZWQgYXR0YWNobWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNjQ5MzIxNWRiZDY4
ZTBmMTJiYTJiZjg3YzU0Yjg0MjdmYzdlZGU1Yy4uNmQ0MWIzOTE1MTI3NDZkNGRjMDhhZTFiZmZl
NTRmMjUwYTBhYmJlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwODksNiArMjA4OSw4IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGZkNTkxOGE4NTRkZThhOThmMmVmYjE0MDQ3ODFmY2Q3Y2FkOTQ3MGYuLjlkYmMz
Y2U3MmM4ZmM4YWE3YzhkZGE4NjEyNzQ1MTc3YzNiYTBjMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyOTYsNiArMjI5Niw3
IEBACiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4
QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgw
RDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5
U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0
RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI2QkUwMkQyNzJG
QjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1h
Z2UuaCAqLzsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUx
MjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8q
IE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjdBN0YzQTI0MDc4Qjg0
MDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwODQ0LDYgKzEwODQ1LDggQEAKIAkJNzI0RUU1
NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2Vy
dmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGVDaGFu
Z2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjUyMzk2QjI1NENB
REMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF0aXZl
SW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjYyRDc1NjI3MkExNzQx
MDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2
QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRlckZ1bmN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQxQkNFMjAw
ODMzOTc1IC8qIFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNjZGMDE0MjI0MUJGQjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9y
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4MzM5NzUg
LyogU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmlt
aXRpdmVQcm9wZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDg1NCw2ICsxMDg1Nyw5IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmlt
YXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
aW9uQWRkaXRpdmVMaXN0RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNjZGMDI5MjI0MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RG
dW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5
NzUgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0
ZWRQcm9wZXJ0eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMjky
NzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI2QkUwMkIyNzJGQjE3MjAwNzM4RkZEIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNkJFMDM5MjczMzRCNDIwMDczOEZGRCAvKiBGaWx0ZXJCb3VuZGFyeVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJCb3VuZGFyeVNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTg0MiwxMCArMjU4NDgsMTUgQEAKIAkJCQk4NDczMEQ2RjEyNDhGMEIz
MDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLywKIAkJCQk4NDczMEQ3MDEyNDhGMEIzMDBE
M0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi8sCiAJCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5
IC8qIEZpbHRlci5oICovLAorCQkJCTcyNkJFMDM5MjczMzRCNDIwMDczOEZGRCAvKiBGaWx0ZXJC
b3VuZGFyeVNldC5oICovLAogCQkJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJF
ZmZlY3QuY3BwICovLAogCQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZl
Y3QuaCAqLywKIAkJCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmlsdGVyRWZmZWN0UmVu
ZGVyZXIuY3BwICovLAogCQkJCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAvKiBGaWx0ZXJFZmZl
Y3RSZW5kZXJlci5oICovLAorCQkJCTcyNjJENzU3MjcyQTE3NDEwMEM1NkEwOSAvKiBGaWx0ZXJG
dW5jdGlvbi5jcHAgKi8sCisJCQkJNzI2MkQ3NTYyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1
bmN0aW9uLmggKi8sCisJCQkJNzI2QkUwMjkyNzJGQjE3MTAwNzM4RkZEIC8qIEZpbHRlckltYWdl
LmNwcCAqLywKKwkJCQk3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuaCAq
LywKIAkJCQk0OUVDRUI2MzE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAq
LywKIAkJCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8s
CiAJCQkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICov
LApAQCAtMzMzMzAsNiArMzMzNDEsNyBAQAogCQkJCTA4QzkyNTFBMEZDQzdDNEEwMDQ4MERFQyAv
KiBGaWx0ZXJFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJDODU2NTM0MjRDMEY3M0MwMEEz
NzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkNBQTRB
M0EyNEJFMThCNzAwOURFRTcwIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjZCRTAyRDI3MkZCMTcyMDA3MzhGRkQgLyogRmlsdGVySW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJP
cGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAv
KiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzJDMDBEOTEyOTYxOUY4
MDA1Qzk1NzUgLyogRmluZE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGM2N2EzNWIwNzE1YjcyMWVkODk5MmRl
Y2Q0OWZhOGQwYjgwNjQ3NzAuLjI5Yzc2ZjgzZTNlNWQ0YjQ3NjNkMWJiOGIwZjk2MTBjYjJlNzM4
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTEx
NiwyMCArMTE2LDIxIEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2Uo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zv
cm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBi
dWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBh
dXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOwotICAgIGlmICghdGV4dHVyZSkKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworICAgIGF1dG8gc291cmNlSW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIDEsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghc291cmNlSW1hZ2Up
CiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAgYXV0byBpbWFnZVJl
Y3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKLSAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJh
d0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBhdXRvIHNvdXJjZUltYWdlUmVjdCA9IEZs
b2F0UmVjdCB7IHsgfSwgc2l6ZSB9OworICAgIHNvdXJjZUltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlKCppbWFnZSwgc291cmNlSW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NT
RmlsdGVyOjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUo
dGV4dHVyZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KGltYWdlUmVjdCk7
Ci0gICAgY3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsKLSAgICBpZiAoIWNz
c0ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3Vt
ZXI6OkZpbHRlckZ1bmN0aW9uKSkKKyAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3Jl
YXRlKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUpOworICAgIGlm
ICghY3NzRmlsdGVyKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKLSAgICBj
c3NGaWx0ZXItPmFwcGx5KCk7CisKKyAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChz
b3VyY2VJbWFnZVJlY3QpOworICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2UoV1RGTW92ZShz
b3VyY2VJbWFnZSkpOworICAgIGNzc0ZpbHRlci0+YXBwbHlGaWx0ZXIoKTsKIAogICAgIGF1dG8q
IG91dHB1dCA9IGNzc0ZpbHRlci0+b3V0cHV0KCk7CiAgICAgaWYgKCFvdXRwdXQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggODhj
ZTk0MjQ5NzNmNzhiYmYxOWViM2YxYzM5NzgwNGVkMGU3M2ZmNi4uYjhlOThkN2E4MjllYjliZjI0
ZDU3MzVhYWE4ZDI1YWVhOTk5OWRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMTMzLDcgKzEzMyw3IEBAIGJvb2wgSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRTaXpl
JiBzY2FsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gVGhlIGFyZWEgb2Ygc2Nh
bGVkIHNpemUgaXMgYmlnZ2VyIHRoYW4gdGhlIHVwcGVyIGxpbWl0LCBhZGp1c3QgdGhlIHNjYWxl
IHRvIGZpdC4KLSAgICBzY2FsZS5zY2FsZShzcXJ0ZihNYXhDbGFtcGVkQXJlYSAvIChzY2FsZWRT
aXplLndpZHRoKCkgKiBzY2FsZWRTaXplLmhlaWdodCgpKSkpOworICAgIHNjYWxlLnNjYWxlKHNx
cnRmKE1heENsYW1wZWRBcmVhIC8gc2NhbGVkU2l6ZS5hcmVhKCkpKTsKICAgICBBU1NFUlQoIXNp
emVOZWVkc0NsYW1waW5nKHNpemUsIHNjYWxlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCmluZGV4IGU2Yzhk
ZjRkNTViNDU2MTM1NDllM2FmNDkxOTJhMjZlMmMwNDRhZjcuLjdjZDE2YTI4NWZlOWUwOWJhMWFl
NDcyNjEwZTk4NjBjNzJmYmM3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5oCkBAIC00NywyMCArNDcsMjAgQEAgY2xhc3MgRmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0UmVuZGVyZXIgewogcHVibGlj
OgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U+IHRyeUNyZWF0ZShGaWx0ZXJFZmZlY3QmKTsKICAgICBSZXRhaW5QdHI8Q0lDb250ZXh0PiBz
aGFyZWRDSUNvbnRleHQoKTsKLSAgICB2b2lkIGFwcGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIGFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3Qm
KSBmaW5hbDsKICAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fb3V0
cHV0SW1hZ2U7IH0KICAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3QgZmluYWw7Ci0gICAg
RmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0IGZpbmFsOworICAg
IEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmKSBj
b25zdCBmaW5hbDsKICAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7CiAgICAgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2UoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgUmV0YWluUHRyPENJ
SW1hZ2U+IGNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0Jik7Ci0gICAgdm9pZCByZW5kZXJU
b0ltYWdlQnVmZmVyKEZpbHRlckVmZmVjdCYpIGZpbmFsOworICAgIFJldGFpblB0cjxDSUltYWdl
PiBjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYsIEZpbHRlckVmZmVjdCYpOworICAgIHZv
aWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSBmaW5h
bDsKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyhGaWx0ZXJFZmZl
Y3QmKTsKICAgICBzdGF0aWMgYm9vbCBjYW5SZW5kZXJVc2luZ0NJRmlsdGVycyhGaWx0ZXJFZmZl
Y3QmKTsKICAgICAKLSAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VHcmFwaGlj
KFNvdXJjZUdyYXBoaWMmKTsKKyAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2VGb3JTb3VyY2VH
cmFwaGljKGNvbnN0IEZpbHRlciYpOwogICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFnZUZvckZF
Q29sb3JNYXRyaXgoY29uc3QgRkVDb2xvck1hdHJpeCYsIGNvbnN0IFZlY3RvcjxSZXRhaW5QdHI8
Q0lJbWFnZT4+Jik7CiAgICAgUmV0YWluUHRyPENJSW1hZ2U+IGltYWdlRm9yRkVDb21wb25lbnRU
cmFuc2Zlcihjb25zdCBGRUNvbXBvbmVudFRyYW5zZmVyJiwgVmVjdG9yPFJldGFpblB0cjxDSUlt
YWdlPj4mKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZS5tbQppbmRleCA5N2UxMTM3YjI5ZDcxYzJiNTQ0MTU3MzA2NzI0MDBiODI0MjhiMzYx
Li5iZGQ1MWY1NWEzMjgyZDQ5YWYwNjg5YzkwZDU4OGNkNWRmOTc1ZDRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCkBAIC03MiwxMSArNzIs
MTEgQEAgc3RhdGljIGJvb2wgaXNOdWxsT3JMaW5lYXJDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
KGNvbnN0IEZFQ29tcG9uZW50VHJhbnNmZXImIGUKIGJvb2wgRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRlckVmZmVjdCYgZWZmZWN0
KQogewogICAgIC8vIEZJWE1FOiBjaGFuZ2UgcmV0dXJuIHZhbHVlIHRvIHRydWUgb25jZSB0aGV5
IGFyZSBpbXBsZW1lbnRlZAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlw
ZSgpKSB7CisgICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyVHlwZSgpKSB7CiAgICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OiB7Cisg
ICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29sb3JNYXRyaXg6IHsKICAgICAgICAgc3dp
dGNoIChkb3duY2FzdDxGRUNvbG9yTWF0cml4PihlZmZlY3QpLnR5cGUoKSkgewogICAgICAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgpAQCAtODgsOTAgKzg4LDU1IEBAIGJvb2wgRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKEZpbHRl
ckVmZmVjdCYgZWZmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6
VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6CiAgICAgICAgIHJldHVybiBpc051bGxPckxpbmVhckNvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24oZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0KSk7
CiAKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6QmxlbmQ6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkNvbXBvc2l0ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29u
dm9sdmVNYXRyaXg6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpZmZ1c2VMaWdodGlu
ZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlzcGxhY2VtZW50TWFwOgotICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEcm9wU2hhZG93OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpGbG9vZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6R2F1c3NpYW5CbHVy
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpJbWFnZToKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok1lcmdl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNb3JwaG9sb2d5OgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpPZmZzZXQ6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNw
ZWN1bGFyTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlRpbGU6Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlR1cmJ1bGVuY2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUFscGhhOgorICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQordm9p
ZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6YXBwbHlFZmZlY3RzKGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCiB7Ci0gICAgbV9vdXRwdXRJbWFn
ZSA9IGNvbm5lY3RDSUZpbHRlcnMobGFzdEVmZmVjdCk7CisgICAgbV9vdXRwdXRJbWFnZSA9IGNv
bm5lY3RDSUZpbHRlcnMoZmlsdGVyLCBsYXN0RWZmZWN0KTsKICAgICBpZiAoIW1fb3V0cHV0SW1h
Z2UpCiAgICAgICAgIHJldHVybjsKLSAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGxhc3RFZmZlY3Qp
OworICAgIHJlbmRlclRvSW1hZ2VCdWZmZXIoZmlsdGVyLCBsYXN0RWZmZWN0KTsKIH0KIAotUmV0
YWluUHRyPENJSW1hZ2U+IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lG
aWx0ZXJzKEZpbHRlckVmZmVjdCYgZWZmZWN0KQorUmV0YWluUHRyPENJSW1hZ2U+IEZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYgZmls
dGVyLCBGaWx0ZXJFZmZlY3QmIGVmZmVjdCkKIHsKICAgICBWZWN0b3I8UmV0YWluUHRyPENJSW1h
Z2U+PiBpbnB1dEltYWdlczsKICAgICAKICAgICBmb3IgKGF1dG8gaW4gOiBlZmZlY3QuaW5wdXRF
ZmZlY3RzKCkpIHsKLSAgICAgICAgYXV0byBpbnB1dEltYWdlID0gY29ubmVjdENJRmlsdGVycygq
aW4pOworICAgICAgICBhdXRvIGlucHV0SW1hZ2UgPSBjb25uZWN0Q0lGaWx0ZXJzKGZpbHRlciwg
KmluKTsKICAgICAgICAgaWYgKCFpbnB1dEltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIGlucHV0SW1hZ2VzLmFwcGVuZChpbnB1dEltYWdlKTsKICAgICB9Ci0gICAg
ZWZmZWN0LmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgZWZmZWN0LnNldFJlc3Vs
dENvbG9yU3BhY2UoZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgCi0gICAgaWYg
KGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSkKKworICAg
IGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBlZmZlY3QuY2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJl
Y3QoZmlsdGVyKTsKKyAgICBpZiAoYWJzb2x1dGVJbWFnZVJlY3QuaXNFbXB0eSgpIHx8IEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBzd2l0Y2ggKGVmZmVjdC5maWx0ZXJFZmZl
Y3RDbGFzc1R5cGUoKSkgeworICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlclR5cGUoKSkgewogICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOgotICAgICAgICByZXR1cm4g
aW1hZ2VGb3JTb3VyY2VHcmFwaGljKGRvd25jYXN0PFNvdXJjZUdyYXBoaWM+KGVmZmVjdCkpOwot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb2xvck1hdHJpeDoKKyAgICAgICAgcmV0dXJu
IGltYWdlRm9yU291cmNlR3JhcGhpYyhmaWx0ZXIpOworICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUNvbG9yTWF0cml4OgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9yTWF0cml4
KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAgICBjYXNl
IEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CiAgICAgICAgIHJldHVybiBpbWFnZUZv
ckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4oZWZmZWN0
KSwgaW5wdXRJbWFnZXMpOwogCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBmaWx0ZXJz
IHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBDSUlt
YWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNv
bnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNlTGlnaHRp
bmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNzaWFuQmx1
cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpNZXJn
ZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpT
cGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxlOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJldGFpblB0cjxDSUltYWdl
PiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKFNv
dXJjZUdyYXBoaWMmIGVmZmVjdCkKK1JldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5k
ZXJlckNvcmVJbWFnZTo6aW1hZ2VGb3JTb3VyY2VHcmFwaGljKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogewotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGVmZmVjdC5maWx0ZXIoKS5zb3Vy
Y2VJbWFnZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJ
bWFnZSgpOwogICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIApAQCAtMjczLDIyICsyMzgsMjIgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAogICAgIHJldHVybiBtX291dHB1dEltYWdlQnVm
ZmVyLmdldCgpOwogfQogICAgIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6
cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCit2b2lkIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVyKGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCiB7Ci0gICAgRmxvYXRTaXplIGNs
YW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRl
clNjYWxlKCksIGxhc3RFZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOworICAgIEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmNhbGN1bGF0ZUFic29sdXRl
SW1hZ2VSZWN0KGZpbHRlcikuc2l6ZSgpOworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0U2l6ZSk7CisgICAgbV9vdXRwdXRJbWFnZUJ1ZmZl
ciA9IElPU3VyZmFjZUltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIDEsIGxhc3RFZmZl
Y3QuaW1hZ2VDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFtX291
dHB1dEltYWdlQnVmZmVyKSB7CiAgICAgICAgIGNsZWFyUmVzdWx0KCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBbc2hhcmVkQ0lDb250ZXh0KCkuZ2V0KCkgcmVuZGVyOiBtX291dHB1
dEltYWdlLmdldCgpIHRvSU9TdXJmYWNlOiBtX291dHB1dEltYWdlQnVmZmVyLT5zdXJmYWNlKCku
c3VyZmFjZSgpIGJvdW5kczpkZXN0UmVjdChsYXN0RWZmZWN0KSBjb2xvclNwYWNlOmxhc3RFZmZl
Y3QucmVzdWx0Q29sb3JTcGFjZSgpLnBsYXRmb3JtQ29sb3JTcGFjZSgpXTsKKyAgICBbc2hhcmVk
Q0lDb250ZXh0KCkuZ2V0KCkgcmVuZGVyOiBtX291dHB1dEltYWdlLmdldCgpIHRvSU9TdXJmYWNl
OiBtX291dHB1dEltYWdlQnVmZmVyLT5zdXJmYWNlKCkuc3VyZmFjZSgpIGJvdW5kczpkZXN0UmVj
dChmaWx0ZXIsIGxhc3RFZmZlY3QpIGNvbG9yU3BhY2U6bGFzdEVmZmVjdC5pbWFnZUNvbG9yU3Bh
Y2UoKS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07CiB9CiAgICAgCi1GbG9hdFJlY3QgRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVm
ZmVjdCkgY29uc3QKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZGVz
dFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVj
dCkgY29uc3QKIHsKLSAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigp
LmZpbHRlclNjYWxlKCkpOworICAgIEludFNpemUgZGVzdFNpemUgPSBsYXN0RWZmZWN0LmNhbGN1
bGF0ZUFic29sdXRlSW1hZ2VSZWN0KGZpbHRlcikuc2l6ZSgpOwogICAgIEZsb2F0UmVjdCBkZXN0
UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKICAgICByZXR1cm4gZGVz
dFJlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
cHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IDI2MTEwY2RmYjBiYjZj
ZjQ5MDQ1ODM4Nzc4N2FjMTBmYTE3MWNmMTguLmQzNzBmMDIyZWExMWFhYTAxYWMyNzBiYzQyN2I5
NzhmNTk3NjQ0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0yNSw4ICsyNSw3
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRkVCbGVuZE5FT05faAotI2RlZmlu
ZSBGRUJsZW5kTkVPTl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKIApAQCAtMTA3LDQzICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQotewotICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEp
OwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheUEgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QpOwotCi0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXlCID0gaW4yLT5wcmVtdWx0aXBsaWVkUmVz
dWx0KGVmZmVjdEJEcmF3aW5nUmVjdCk7Ci0KLSAgICB1bnNpZ25lZCBzb3VyY2VQaXhlbEFycmF5
TGVuZ3RoID0gc291cmNlUGl4ZWxBcnJheUEtPmxlbmd0aCgpOwotICAgIEFTU0VSVChwaXhlbEFy
cmF5TGVuZ3RoID09IHNvdXJjZVBpeGVsQXJyYXlCLT5sZW5ndGgoKSk7Ci0KLSAgICBpZiAoc291
cmNlUGl4ZWxBcnJheUxlbmd0aCA+PSA4KSB7Ci0gICAgICAgIHBsYXRmb3JtQXBwbHlORU9OKHNv
dXJjZVBpeGVsQXJyYXlBLT5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCksIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheS5kYXRhKCksIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVsIHdlIGV4
cGFuZCBpdCB0byB0d28uCi0gICAgQVNTRVJUKHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPiAwKTsK
LSAgICB1aW50MzJfdCBzb3VyY2VBWzJdID0gezAsIDB9OwotICAgIHVpbnQzMl90IHNvdXJjZUJB
bmREZXN0WzJdID0gezAsIDB9OwotCi0gICAgc291cmNlQVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5QS0+ZGF0YSgpKVswXTsKLSAgICBzb3VyY2VCQW5k
RGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzb3VyY2VQaXhlbEFycmF5Qi0+
ZGF0YSgpKVswXTsKLSAgICBwbGF0Zm9ybUFwcGx5TkVPTihyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihzb3VyY2VBKSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQkFuZERlc3Qp
LCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIDgpOwotICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpKVsw
XSA9IHNvdXJjZUJBbmREZXN0WzBdOwotfQotCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlO
RU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhl
bEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCkKK3ZvaWQgRkVCbGVuZDo6
cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVk
IGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LCB1bnNp
Z25lZCBjb2xvckFycmF5TGVuZ3RoKQogewogICAgIHVpbnQ4X3QqIHNvdXJjZVBpeGVsQSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNyY1BpeGVsQXJyYXlBKTsKICAgICB1aW50OF90KiBz
b3VyY2VQaXhlbEIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzcmNQaXhlbEFycmF5Qik7
CkBAIC0yMDIsOCArMTY1LDQ2IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5z
aWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyCiAgICAgfQogfQog
Citib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorewor
ICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1
dG8mIGlucHV0MiA9ICppbnB1dEVmZmVjdCgxKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBv
dXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKworICAgIGF1dG8mIG91cHV0UGl4ZWxCdWZmZXIgPSBv
dXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CisgICAgaWYgKCFvdXB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3VwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisg
ICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0
KGlucHV0KTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheSA9IGlucHV0LmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0KTsK
KworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QyID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFn
ZVJlY3QoaW5wdXQyKTsKKyAgICBhdXRvIGlucHV0UGl4ZWxBcnJheTIgPSBpbnB1dDIuZ2V0UGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFn
ZVJlY3QyKTsKKworICAgIHVuc2lnbmVkIGlucHV0UGl4ZWxBcnJheUxlbmd0aCA9IGlucHV0UGl4
ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgQVNTRVJUKGlucHV0UGl4ZWxBcnJheUxlbmd0aCA9PSBp
bnB1dFBpeGVsQXJyYXkyLT5sZW5ndGgoKSk7CisKKyAgICBpZiAoaW5wdXRQaXhlbEFycmF5TGVu
Z3RoID49IDgpIHsKKyAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oaW5wdXRQaXhlbEFycmF5LT5k
YXRhKCksIGlucHV0UGl4ZWxBcnJheTItPmRhdGEoKSwgb3V0cHV0UGl4ZWxBcnJheS5kYXRhKCks
IGlucHV0UGl4ZWxBcnJheUxlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIC8vIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBpeGVsIHdlIGV4cGFuZCBpdCB0byB0d28uCisg
ICAgQVNTRVJUKGlucHV0UGl4ZWxBcnJheUxlbmd0aCA+IDApOworICAgIHVpbnQzMl90IHNvdXJj
ZUFbMl0gPSB7IDAsIDAgfTsKKyAgICB1aW50MzJfdCBzb3VyY2VCQW5kRGVzdFsyXSA9IHsgMCwg
MCB9OworCisgICAgc291cmNlQVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihpbnB1
dFBpeGVsQXJyYXktPmRhdGEoKSlbMF07CisgICAgc291cmNlQkFuZERlc3RbMF0gPSByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oaW5wdXRQaXhlbEFycmF5Mi0+ZGF0YSgpKVswXTsKKworICAg
IHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUEpLCBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7CisgICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdCo+KG91dHB1dFBpeGVsQXJyYXkuZGF0YSgpKVswXSA9IHNvdXJjZUJBbmREZXN0WzBd
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLQotI2VuZGlmIC8vIEZFQmxlbmRORU9O
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RGlzdGFudExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAppbmRleCBlNWZiMWZmNjY1ZDNlYjA3ZjQ4
ZWUxZDAyYmJmZmNjNmIwNDQxZjg5Li4xZmIwMzdmZTExZjY2OTFlZDAzOTRhNDRlYWNjZDAyNzli
YjZkMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCkBAIC0zNSw3ICszNSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQ
YWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEpCit2b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsK
ICAgICBmbG9hdCBhemltdXRoID0gZGVnMnJhZChtX2F6aW11dGgpOwogICAgIGZsb2F0IGVsZXZh
dGlvbiA9IGRlZzJyYWQobV9lbGV2YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKaW5k
ZXggYzFlMzBlZGU3NTk4MzcyOGE2MzJiY2NmZmIwOTk3M2EzYTRlNzJmZC4uMDAzZmUxOWNkMTI2
MjM5OTY3YjFiMjIyNmZkNzkwNTU0MmJlYmQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5o
CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldEF6aW11dGgoZmxvYXQpIG92
ZXJyaWRlOwogICAgIGJvb2wgc2V0RWxldmF0aW9uKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZv
aWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3Qg
RmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdo
dGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcAppbmRleCA1YWM3ZjQ5MGQ0Y2RhNTMzYTQxZjVjM2Q4NTQ1MzJjMThhZGNkYjY2Li45
ODc2NTczY2ZmMjc0MTY1NGJiZDM1MmEyODBhZjMwOWE4NGZhNmMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAgLTM0
LDE1ICszNCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQmxlbmQ6OkZFQmxlbmQo
RmlsdGVyJiBmaWx0ZXIsIEJsZW5kTW9kZSBtb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRl
ciwgVHlwZTo6QmxlbmQpCitGRUJsZW5kOjpGRUJsZW5kKEJsZW5kTW9kZSBtb2RlKQorICAgIDog
RmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVCbGVuZCkKICAgICAsIG1fbW9kZSht
b2RlKQogewogfQogCi1SZWY8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRlciYgZmlsdGVy
LCBCbGVuZE1vZGUgbW9kZSkKK1JlZjxGRUJsZW5kPiBGRUJsZW5kOjpjcmVhdGUoQmxlbmRNb2Rl
IG1vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVCbGVuZChmaWx0ZXIsIG1vZGUp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUJsZW5kKG1vZGUpKTsKIH0KIAogYm9vbCBG
RUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCkBAIC01NCwyMyArNTQsMjkgQEAg
Ym9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRNb2RlIG1vZGUpCiB9CiAKICNpZiAhSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQorYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikK
IHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVj
dCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBpbnB1dDIgPSAqaW5wdXRFZmZlY3QoMSkt
PmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAKLSAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwot
ICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRl
eHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gaW5w
dXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbnB1dEltYWdlMiA9IGlu
cHV0Mi5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJbWFnZSB8fCAhaW5wdXRJbWFnZTIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQu
aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOwotICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKLSAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3QoaW5wdXQucmVsYXRp
dmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0MiA9
IEZsb2F0UmVjdChpbnB1dDIucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChvdXRwdXQpKTsKIAot
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dp
Y2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsK
KyAgICBHcmFwaGljc0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4
dCgpOworCisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UyLCBp
bnB1dEltYWdlUmVjdDIpOworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1
dEltYWdlLCBpbnB1dEltYWdlUmVjdCwgeyB7IH0sIGlucHV0SW1hZ2UtPmxvZ2ljYWxTaXplKCkg
fSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIHJldHVy
biB0cnVlOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKaW5kZXggNzBlODQwN2JmNWMyMDBkNDUyMTZiOGY5YzA4
NTE3YjUwNzllNzk2Ni4uMzM2OTNjMTk5N2JiYTdiYmRlODg5MDU4N2IxNTZlZWUzMzc2YzVjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmgKQEAgLTIzLDIyICsyMywyMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKLQotI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGRUJsZW5kIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRUJsZW5kPiBjcmVhdGUoRmls
dGVyJiwgQmxlbmRNb2RlKTsKKyAgICBzdGF0aWMgUmVmPEZFQmxlbmQ+IGNyZWF0ZShCbGVuZE1v
ZGUpOwogCiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQogICAgIGJvb2wgc2V0QmxlbmRNb2RlKEJsZW5kTW9kZSk7CiAKIHByaXZhdGU6Ci0gICAgY29u
c3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUJsZW5kIjsgfQor
ICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNpZ25lZCBjaGFy
KiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVuc2lnbmVk
IGNoYXIqIGRzdFBpeGVsQXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjb2xvckFycmF5TGVuZ3RoKTsKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9OKHVuc2lnbmVk
IGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5z
aWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKQEAgLTQ2LDEwICs0NSw5IEBAIHByaXZhdGU6CiAK
ICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIEZFQmxlbmQo
RmlsdGVyJiwgQmxlbmRNb2RlKTsKLQogICAgIEJsZW5kTW9kZSBtX21vZGU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVD
VChGRUJsZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggMTY0MjJkNmRjNWI1N2VjNmY3NDdh
NDIxMGMyODU0MzMyYmExZDNlNS4uYTllNTIyYThlY2M3ZWFjODM1OWY5MjNmMGQ3OTM1Nzc3NTY0
YWRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0zNSwxNiArMzUsMTYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KEZpbHRlciYgZmls
dGVyLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVlcykKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNvbG9yTWF0cml4KQorRkVDb2xvck1hdHJpeDo6
RkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUgdHlwZSwgVmVjdG9yPGZsb2F0PiYmIHZhbHVl
cykKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29sb3JNYXRyaXgp
CiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fdmFsdWVzKFdURk1vdmUodmFsdWVzKSkKIHsK
IH0KIAotUmVmPEZFQ29sb3JNYXRyaXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZp
bHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCitSZWY8
RkVDb2xvck1hdHJpeD4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKENvbG9yTWF0cml4VHlwZSB0eXBl
LCBWZWN0b3I8ZmxvYXQ+JiYgdmFsdWVzKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZF
Q29sb3JNYXRyaXgoZmlsdGVyLCB0eXBlLCBXVEZNb3ZlKHZhbHVlcykpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRUNvbG9yTWF0cml4KHR5cGUsIFdURk1vdmUodmFsdWVzKSkpOwogfQog
CiBib29sIEZFQ29sb3JNYXRyaXg6OnNldFR5cGUoQ29sb3JNYXRyaXhUeXBlIHR5cGUpCkBAIC0y
NzMsMjMgKzI3MywzOSBAQCB2b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
QXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50UwogICAgIH0KIH0KIAotdm9p
ZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRUNvbG9yTWF0
cml4Ojppc0FscGhhSW1hZ2UoKSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKKyAgICByZXR1cm4gbV90eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1J
TkFOQ0VUT0FMUEhBOworfQogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1
cm47CitWZWN0b3I8ZmxvYXQ+IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMoY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzKQoreworICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZh
bHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9h
dCh2YWx1ZXNbaV0pOworICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOworfQorCitib29sIEZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQoreworICAg
IGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8m
IG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIAorICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBv
dXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKLSAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0
KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIGF1dG8gaW5wdXRCdWZmZXIgPSBpbnB1dC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmIChpbnB1dEJ1ZmZlcikgeworICAgICAgICBhdXRvIGFic29s
dXRlSW1hZ2VSZWN0ID0gRmxvYXRSZWN0KGlucHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3Qo
b3V0cHV0KSk7CisgICAgICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbnB1dEJ1ZmZlciwgYWJzb2x1dGVJbWFnZVJlY3QpOworICAgIH0KIAotICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKLSAgICBJbnRSZWN0
IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUo
KSk7Ci0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihm
b3JtYXQsIGltYWdlUmVjdCk7CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG91
dHB1dC5jb2xvclNwYWNlKCkgfTsKKyAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCBv
dXRwdXRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IG91dHB1dEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIGltYWdlUmVjdCk7CiAgICAg
aWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICBhdXRv
IHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKQEAgLTMxMCwxMSAr
MzI2LDExIEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QToKICAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBI
QT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIHNl
dElzQWxwaGFJbWFnZSh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0
SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKKyAgICBvdXRw
dXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOworICAgIHJl
dHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAy
OWU0MWE4YWVkMWU0ZjBiNTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi5jM2Y4YmQwYmM0YTg1ODVm
YjEzNjMxY2M3ZGZmMWJlNGYzODQyMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtMjIsOCArMjIs
NiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLQotI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzgsNyArMzYsNyBAQCBlbnVtIENvbG9yTWF0cml4VHlwZSB7CiAKIGNsYXNzIEZF
Q29sb3JNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFQ29sb3JNYXRyaXg+IGNyZWF0ZShGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUsIFZlY3Rv
cjxmbG9hdD4mJik7CisgICAgc3RhdGljIFJlZjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoQ29sb3JN
YXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoQ29sb3JNYXRyaXhU
eXBlKTsKQEAgLTQ4LDEzICs0NiwxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2
YWx1ZSk7CiAgICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVu
dHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLQorICAgIHN0YXRpYyBWZWN0b3I8
ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKTsKKyAg
ICAKIHByaXZhdGU6Ci0gICAgRkVDb2xvck1hdHJpeChGaWx0ZXImLCBDb2xvck1hdHJpeFR5cGUs
IFZlY3RvcjxmbG9hdD4mJik7CisgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZl
Y3RvcjxmbG9hdD4mJik7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIkZFQ29sb3JNYXRyaXgiOyB9CisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtOTMs
NyArOTIsNCBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVD
b21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb2xvck1hdHJp
eCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBl
ZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCi0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9y
TWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODQ3ZWE1OGY1Zjli
MDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uMmNkN2NmY2I1NWI2NWY3OGU5YTViZjQxMWI4
YjhiZWQyNTJmOTliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0zMyw5
ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1
ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9u
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitG
RUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVl
RnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuY3Rpb24p
CisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyKQogICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5j
dGlvbihncmVlbkZ1bmN0aW9uKQogICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpA
QCAtNDMsMTAgKzQyLDEwIEBAIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29tcG9uZW50VHJhbnNm
ZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyCiB7CiB9CiAKLVJlZjxG
RUNvbXBvbmVudFRyYW5zZmVyPiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmN0aW9uLAorUmVm
PEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwKICAgICBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBibHVlRnVuY3Rpb24sIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24m
IGFscGhhRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVDb21wb25lbnRU
cmFuc2ZlcihmaWx0ZXIsIHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24s
IGFscGhhRnVuY3Rpb24pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUNvbXBvbmVudFRy
YW5zZmVyKHJlZEZ1bmN0aW9uLCBncmVlbkZ1bmN0aW9uLCBibHVlRnVuY3Rpb24sIGFscGhhRnVu
Y3Rpb24pKTsKIH0KIAogdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlU
YWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQpAQCAt
MTA0LDEzICsxMDMsMTQgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFU
YWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9CiB9CiAKLXZv
aWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVD
b21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7
Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0
ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpm
aWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gb3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIApAQCAtMTIwLDggKzEyMCw5
IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAg
ICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwogICAgIGNvbXB1dGVMb29rdXBUYWJsZXMocmVkVGFi
bGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CiAKLSAgICBJbnRSZWN0IGRy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGF1
dG8gaW5wdXRJbWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1
dCk7CisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKICAgICB1aW50OF90KiBk
YXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIHBp
eGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsT2Zmc2V0ICs9IDQpIHsKQEAgLTEzMCw2ICsxMzEsOCBAQCB2b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIGRhdGFbcGl4ZWxPZmZz
ZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwogICAgICAgICBkYXRh
W3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAzXV07CiAg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExvb2t1cFRhYmxlJiBn
cmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJsZSYgYWxwaGFUYWJs
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggMmI1ODZkZWY3ZmI0MmEzN2IyZTEy
M2VkYTg3MTE5YzRlYjM0OGE1MS4uNmFkYTljMGFiYmU1YzJmOWQ2NWJkOTE5ZmZlYzRmMTczZDAw
MzQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKQEAgLTIyLDggKzIyLDYgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0KLSNpbmNsdWRlICJGaWx0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUzLDggKzUxLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFz
cyBGRUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGRUNvbXBvbmVudFRyYW5zZmVyPiBjcmVhdGUoRmlsdGVyJiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpOworICAgIHN0YXRpYyBSZWY8
RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CiAKICAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIHJlZEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWRGdW5jdGlvbjsgfQogICAg
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gZ3JlZW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZ3JlZW5GdW5jdGlvbjsgfQpAQCAtNjIsMTAgKzU5LDcgQEAgcHVibGljOgogICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gYWxwaGFGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxw
aGFGdW5jdGlvbjsgfQogCiBwcml2YXRlOgotICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVy
JiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7Ci0KLSAgICAgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvbmVudFRyYW5zZmVyIjsgfQorICAg
IEZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVk
RnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKIAogICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjph
cnJheTx1aW50OF90LCAyNTY+OwogCkBAIC03Nyw3ICs3MSw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJs
ZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhh
VGFibGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAg
ICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04OSw2ICs4Myw0
IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQotICAgIHN0YXRpYyBi
b29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4g
ZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBvbmVudFRyYW5zZmVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAppbmRleCA4MzM1MzA5MDgxYTI2YmEyYzMxYzNiZGFjODg4NjY5ZTI4
ZTM0NTZkLi4zNGJlOGE3NmMyNzBlZDdhOThlZDY4MmMwMWM3YWI1MTdlMzg5OThkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmNwcApAQCAtMzIsOCArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
Q29tcG9zaXRlOjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCitGRUNvbXBvc2l0
ZTo6RkVDb21wb3NpdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmls
dGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvc2l0ZSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwg
bV9rMShrMSkKICAgICAsIG1fazIoazIpCkBAIC00Miw5ICs0Miw5IEBAIEZFQ29tcG9zaXRlOjpG
RUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYg
dHlwZSwgZmxvCiB7CiB9CiAKLVJlZjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShG
aWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCitSZWY8RkVDb21wb3NpdGU+IEZFQ29t
cG9zaXRlOjpjcmVhdGUoY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxvYXQg
azEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVDb21wb3NpdGUoZmlsdGVyLCB0eXBlLCBrMSwgazIsIGszLCBrNCkpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFQ29tcG9zaXRlKHR5cGUsIGsxLCBrMiwgazMsIGs0KSk7CiB9
CiAKIGJvb2wgRkVDb21wb3NpdGU6OnNldE9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRpb25UeXBl
IHR5cGUpCkBAIC04NywxNCArODcsNiBAQCBib29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBr
NCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6Y29ycmVjdEZpbHRl
clJlc3VsdElmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FSSVRITUVUSUMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvcmNlVmFsaWRQcmVNdWx0
aXBsaWVkUGl4ZWxzKCk7Ci19Ci0gICAgCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjbGFtcEJ5dGUo
aW50IGMpCiB7CiAgICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKQEAgLTIwMSwxMDAgKzE5MywxMDcgQEAgaW5saW5lIHZv
aWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3UKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRkVDb21wb3NpdGU6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX0lOOgotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6IHsKICAgICAgICAgLy8gRm9yIEluIGFu
ZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKICAg
ICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0ZSBwYWlu
dCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCi0gICAgICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgY2xp
cEFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgaW5w
dXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFnZSgpOworICAgICAgICByZXR1cm4gZmls
dGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dDIuaW1hZ2VSZWN0KCksIHByaW1p
dGl2ZVN1YnJlZ2lvbik7CisgICAgfQorCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9B
UklUSE1FVElDOgogICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVs
ZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKICAgICAgICAgLy8gb3B0aW1p
emUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lv
bik7CisKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlu
cHV0IGVmZmVjdHMuCi0gICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gRmlsdGVyRWZmZWN0Ojpj
YWxjdWxhdGVJbWFnZVJlY3QoZmlsdGVyLCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIH0KIH0K
IAotdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgRkVDb21w
b3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOwotCisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRl
ckltYWdlKCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFn
ZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIAogICAgIGlmICht
X3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgaWYgKCFv
dXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0g
ICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKKyAgICAgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVs
QnVmZmVyLT5kYXRhKCk7CiAKLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3Vs
dChlZmZlY3RBRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgICAgIGlm
ICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBJbnRS
ZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBpbjItPmNvcHlQcmVtdWx0aXBs
aWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0QkRyYXdpbmdSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwotCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KCpzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1f
azMsIG1fazQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaW5wdXRJbWFnZVJlY3Qg
PSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dCk7CisgICAgICAgIGF1dG8g
aW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CisgICAgICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAKKyAgICAgICAgYXV0byBpbnB1dEltYWdlUmVjdDIgPSBvdXRwdXQucmVs
YXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dDIpOworICAgICAgICBpbnB1dDIuY29weVBpeGVs
QnVmZmVyKG91dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGlucHV0SW1hZ2VSZWN0Miwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAg
CisgICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCppbnB1dFBpeGVsQXJyYXksIG91
dHB1dFBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4
dCgpOworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBp
ZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8mIGZp
bHRlckNvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworCisgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbnB1
dDIuaW1hZ2VCdWZmZXIoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYXV0byBpbnB1
dEltYWdlUmVjdCA9IEZsb2F0UmVjdChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91
dHB1dCkpOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QyID0gRmxvYXRSZWN0KGlucHV0Mi5yZWxh
dGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOworICAgIAogICAgIHN3aXRjaCAobV90eXBl
KSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW5wdXRJbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdlUmVjdCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKICAgICAg
ICAgLy8gQXBwbGllcyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIElu
dFJlY3QgZGVzdGluYXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAg
IGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAg
ICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAg
ICAgICAgYXV0byBkZXN0aW5hdGlvblJlY3QgPSBpbnB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpOwor
ICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGlucHV0Mi5hYnNvbHV0ZUltYWdlUmVj
dCgpKTsKKyAgICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChvdXRwdXQuYWJzb2x1dGVJ
bWFnZVJlY3QoKSk7CiAgICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3Qg
PSBkZXN0aW5hdGlvblJlY3QgLSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAg
ICAgIEludFJlY3Qgc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0
aW5hdGlvblJlY3QgLSBpbjItPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0
KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0
KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKKyAgICAgICAgYXV0byBhZGp1c3RlZERlc3RpbmF0
aW9uUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpLmxv
Y2F0aW9uKCk7CisgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGlu
cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkubG9jYXRpb24oKTsKKyAgICAgICAgYXV0byBzb3VyY2VS
ZWN0MiA9IGRlc3RpbmF0aW9uUmVjdCAtIGlucHV0Mi5hYnNvbHV0ZUltYWdlUmVjdCgpLmxvY2F0
aW9uKCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGFkanVzdGVkRGVzdGluYXRpb25SZWN0LCBzb3VyY2VSZWN0Mik7CisgICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWRqdXN0ZWREZXN0aW5hdGlv
blJlY3QsIHNvdXJjZVJlY3QsIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZl
cjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsK
KyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1
dEltYWdlUmVjdCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0MiwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNp
emUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUo
KSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CisgICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0Mik7CisgICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFn
ZVJlY3QsIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVy
YXRvcjo6U291cmNlQXRvcCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfWE9SOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7
IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlhP
Uik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGlucHV0SW1hZ2VSZWN0Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJlY3QsIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9MSUdIVEVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdl
KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwg
Q29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdodGVyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgaW5wdXRJbWFnZVJlY3QyKTsKKyAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdlUmVj
dCwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9y
OjpQbHVzTGlnaHRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYg
dHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2
YWVhMGMzLi42YjA3YmExZjliMDA3MTljMGQ3OWI1ZjdlY2RjZjNiM2RiMzIzNDJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oCkBAIC0yMiw4ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgotCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzM5LDcgQEAgZW51bSBD
b21wb3NpdGVPcGVyYXRpb25UeXBlIHsKIAogY2xhc3MgRkVDb21wb3NpdGUgOiBwdWJsaWMgRmls
dGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUo
RmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIGZsb2F0KTsKKyAgICBzdGF0aWMgUmVmPEZFQ29tcG9zaXRlPiBjcmVhdGUoY29uc3QgQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAogICAg
IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUgb3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CiAgICAgYm9vbCBzZXRPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSk7CkBAIC01
OCwxOCArNTYsMTIgQEAgcHVibGljOgogICAgIGZsb2F0IGs0KCkgY29uc3QgeyByZXR1cm4gbV9r
NDsgfQogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCByZXF1
aXJlc1ZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdHlwZSAh
PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Ci0KIHByaXZhdGU6Ci0gICAgRkVD
b21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0KTsKLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9CisgICAgRkVDb21wb3NpdGUoY29uc3Qg
Q29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAot
ICAgIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
ZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwpAQCAtOTAsMyArODIsNCBA
QCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBvc2l0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CmluZGV4IDNiYmU3ODM1OThkNzA5MzVhOTVjNmYxNTZlYzI5MzNjMGU5OWYwNTAuLjZmOThmMGI2
MDYzY2Y5MzUyMDkwM2ViMDg5MjlmOTQ0YjcwOGE4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZF
Q29udm9sdmVNYXRyaXguaCIKIAorI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRl
ICJGaWx0ZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJh
bGxlbEpvYnMuaD4KQEAgLTMyLDEwICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3Qg
SW50U2l6ZSYga2VybmVsU2l6ZSwKLSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25z
dCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29u
c3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpDb252b2x2ZU1hdHJpeCkKK0ZFQ29udm9sdmVNYXRyaXg6OkZFQ29udm9sdmVNYXRy
aXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlLCBjb25z
dCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0
IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgpCiAgICAgLCBtX2tlcm5lbFNpemUoa2VybmVs
U2l6ZSkKICAgICAsIG1fZGl2aXNvcihkaXZpc29yKQogICAgICwgbV9iaWFzKGJpYXMpCkBAIC00
OSwxMSArNDgsOSBAQCBGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAogICAgIEFTU0VSVChtX2tlcm5lbFNp
emUuaGVpZ2h0KCkgPiAwKTsKIH0KIAotUmVmPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVN
YXRyaXg6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwK
LSAgICBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zm
c2V0LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUsCi0gICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVs
VW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJu
ZWxNYXRyaXgpCitSZWY8RkVDb252b2x2ZU1hdHJpeD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRl
KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNv
bnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwgY29uc3Qg
RmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVDb252b2x2ZU1hdHJpeChmaWx0ZXIsIGtlcm5lbFNpemUsIGRpdmlzb3IsIGJpYXMsIHRhcmdl
dE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRkVDb252b2x2ZU1hdHJpeChrZXJuZWxTaXplLCBkaXZpc29yLCBiaWFzLCB0YXJnZXRP
ZmZzZXQsIGVkZ2VNb2RlLCBrZXJuZWxVbml0TGVuZ3RoLAogICAgICAgICBwcmVzZXJ2ZUFscGhh
LCBrZXJuZWxNYXRyaXgpKTsKIH0KIApAQCAtMzY3LDQ5ICszNjQsNTUgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLAogICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0
YSwgeDEsIHkxLCB4MiwgeTIpOwogfQogCi12b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVDb252b2x2ZU1hdHJpeDo6Y2FsY3VsYXRlSW1h
Z2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVn
aW9uKTsKK30KIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZl
QWxwaGEgPyBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAg
ICAgICByZXR1cm47Citib29sIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQoreworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5m
aWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAg
YXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0
YSgpOworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIobV9w
cmVzZXJ2ZUFscGhhID8gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIDog
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQ
aXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UmVjdCBlZmZlY3RE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7CisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVs
QnVmZmVyLT5kYXRhKCk7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZVBp
eGVsQXJyYXk7CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFic29s
dXRlSW1hZ2VSZWN0KGlucHV0KTsKKyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGlucHV0UGl4ZWxBcnJheTsKICAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBzb3Vy
Y2VQaXhlbEFycmF5ID0gaW4tPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwg
b3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQu
Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBp
bnB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBlbHNlCi0gICAgICAg
IHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5n
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxl
KCkpOworICAgICAgICBpbnB1dFBpeGVsQXJyYXkgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKIAorICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBvdXRwdXQuYWJzb2x1
dGVJbWFnZVJlY3QoKS5zaXplKCk7CisgICAgCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0
YSA9IHsKLSAgICAgICAgKnNvdXJjZVBpeGVsQXJyYXksCi0gICAgICAgIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwKLSAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCi0gICAgICAgIHBhaW50U2l6ZS5o
ZWlnaHQoKSwKKyAgICAgICAgKmlucHV0UGl4ZWxBcnJheSwKKyAgICAgICAgb3V0cHV0UGl4ZWxB
cnJheSwKKyAgICAgICAgaW1hZ2VTaXplLndpZHRoKCksCisgICAgICAgIGltYWdlU2l6ZS5oZWln
aHQoKSwKICAgICAgICAgbV9iaWFzICogMjU1LAotICAgICAgICBub3JtYWxpemVkRmxvYXRzKG1f
a2VybmVsTWF0cml4KQorICAgICAgICBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKG1f
a2VybmVsTWF0cml4KQogICAgIH07CiAKICAgICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVyZWQgcGl4
ZWxzCi0gICAgaW50IGNsaXBSaWdodCA9IHBhaW50U2l6ZS53aWR0aCgpIC0gbV9rZXJuZWxTaXpl
LndpZHRoKCk7Ci0gICAgaW50IGNsaXBCb3R0b20gPSBwYWludFNpemUuaGVpZ2h0KCkgLSBtX2tl
cm5lbFNpemUuaGVpZ2h0KCk7CisgICAgaW50IGNsaXBSaWdodCA9IGltYWdlU2l6ZS53aWR0aCgp
IC0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgaW50IGNsaXBCb3R0b20gPSBpbWFnZVNpemUu
aGVpZ2h0KCkgLSBtX2tlcm5lbFNpemUuaGVpZ2h0KCk7CiAKICAgICBpZiAoY2xpcFJpZ2h0IDwg
MCB8fCBjbGlwQm90dG9tIDwgMCkgewogICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9w
dGltaXppZWQgZm9yIHNwZWVkCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
MCwgMCwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVNp
emUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lk
dGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVu
c2lvbikgeworICAgIGlmIChpbnQgaXRlcmF0aW9ucyA9IChpbWFnZVNpemUud2lkdGgoKSAqIGlt
YWdlU2l6ZS5oZWlnaHQoKSkgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uKSB7CiAgICAgICAgIGlu
dCBzdHJpZGUgPSBjbGlwQm90dG9tIC8gaXRlcmF0aW9uczsKICAgICAgICAgaW50IGNodW5rQ291
bnQgPSAoY2xpcEJvdHRvbSArIHN0cmlkZSAtIDEpIC8gc3RyaWRlOwogCkBAIC00MjUsMTMgKzQy
OCwxNSBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAg
ICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7CiAgICAgY2xpcEJvdHRvbSAr
PSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwogICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAw
KQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53
aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRT
aXplLmhlaWdodCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNs
aXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIGltYWdlU2l6ZS53aWR0aCgpLCBt
X3RhcmdldE9mZnNldC55KCkpOworICAgIGlmIChjbGlwQm90dG9tIDwgaW1hZ2VTaXplLmhlaWdo
dCgpKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20s
IGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpOwogICAgIGlmIChtX3Rhcmdl
dE9mZnNldC54KCkgPiAwKQogICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAg
ICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6
ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgaW1hZ2VTaXplLndp
ZHRoKCkpCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBt
X3RhcmdldE9mZnNldC55KCksIGltYWdlU2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKworICAg
IHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaApp
bmRleCA2N2Q0YzY1NjdmY2U2YjI3ZWU1YWI4OTVhNmUxZTUwMDU0ZTEzZGJhLi5iOWE4MTgzYTFi
OGZmY2VjMzU1NzhkM2NlMDVjNjI5NjUzNDkyMzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaApA
QCAtMjQsNyArMjQsNiBAQAogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsOSArMzcsNyBAQCBlbnVtIEVkZ2VNb2Rl
VHlwZSB7CiAKIGNsYXNzIEZFQ29udm9sdmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFQ29udm9sdmVNYXRyaXg+IGNyZWF0ZShGaWx0ZXIm
LCBjb25zdCBJbnRTaXplJiwKLSAgICAgICAgICAgIGZsb2F0LCBmbG9hdCwgY29uc3QgSW50UG9p
bnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLAotICAgICAgICAgICAgYm9vbCwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYpOworICAgIHN0YXRpYyBSZWY8RkVDb252b2x2ZU1hdHJpeD4g
Y3JlYXRlKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJp
YXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxv
YXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCiAgICAgSW50U2l6ZSBrZXJuZWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9rZXJuZWxTaXplOyB9CiAgICAgdm9pZCBzZXRLZXJuZWxTaXplKGNvbnN0
IEludFNpemUmKTsKQEAgLTc3LDE0ICs3NCwxMSBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8
ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKICAgICB9OwogCi0gICAgRkVDb252b2x2ZU1hdHJpeChGaWx0
ZXImLCBjb25zdCBJbnRTaXplJiwgZmxvYXQsIGZsb2F0LAotICAgICAgICAgICAgY29uc3QgSW50
UG9pbnQmLCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+Jik7CisgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxT
aXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zm
c2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJv
b2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb252
b2x2ZU1hdHJpeCI7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0K
LQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtMTE1LDMgKzEwOSw0IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19GSUxURVJfRUZGRUNUKEZFQ29udm9sdmVNYXRyaXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcu
Y3BwCmluZGV4IGVlYjE3MjhkYjM1ZThhYzMwMmIyN2U0YzNmZjM0Y2I4ODU1YjlkMDkuLmY3NmNl
MmNlOTY0M2VmZGY2Y2UyNTZlOTU0NzM3OGE0MDdkMTM0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGln
aHRpbmcuY3BwCkBAIC0yNywxOCArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VD
b25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRl
ciwgRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VD
b25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSwgVHlwZTo6RGlmZnVzZUxpZ2h0aW5nKQorRkVEaWZmdXNlTGlnaHRp
bmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3Vy
Y2UpCisgICAgOiBGRUxpZ2h0aW5nKERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3Vy
ZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJu
ZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVEaWZmdXNlTGlnaHRpbmcpCiB7CiB9CiAKLVJlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZm
dXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5n
Q29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJj
ZT4mJiBsaWdodFNvdXJjZSkKK1JlZjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRp
bmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxl
LCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGZpbHRlciwgbGlnaHRpbmdD
b2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBr
ZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRURpZmZ1c2VMaWdodGluZyhsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUs
IGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBX
VEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVz
ZUxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCiBib29sIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZm
dXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNvbnN0YW50KQogewogICAgIGlmIChtX2RpZmZ1c2VD
b25zdGFudCA9PSBkaWZmdXNlQ29uc3RhbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKaW5kZXgg
ZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4uOGExMGFlYzg3YzhmMTg5
ZjlmMDU3Y2I5NDQzZWFhZWRkNTM4ZjY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaApAQCAt
MjksOCArMjksNyBAQCBjbGFzcyBMaWdodFNvdXJjZTsKIAogY2xhc3MgRkVEaWZmdXNlTGlnaHRp
bmcgOiBwdWJsaWMgRkVMaWdodGluZyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpZmZ1
c2VMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIFJlZjxMaWdodFNvdXJjZT4mJik7Ci0gICAgdmlydHVhbCB+RkVEaWZmdXNl
TGlnaHRpbmcoKTsKKyAgICBzdGF0aWMgUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKICAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBj
b25zdCB7IHJldHVybiBtX2RpZmZ1c2VDb25zdGFudDsgfQogICAgIGJvb2wgc2V0RGlmZnVzZUNv
bnN0YW50KGZsb2F0KTsKQEAgLTM4LDggKzM3LDkgQEAgcHVibGljOgogICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEZFRGlmZnVzZUxpZ2h0
aW5nKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIFJl
ZjxMaWdodFNvdXJjZT4mJik7CisgICAgRkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdo
dFNvdXJjZT4mJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRURpZmZ1c2VMaWdodGluZykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5jcHAKaW5kZXggMDQ3NDkzMzkyYmIyODE0NmQ4YjE2OWJhMGE3YzMyYjE2YzU2
M2ZhMS4uMDdmYzgzY2E3Y2I2NzU2ZThlM2U4NTJhMTliZTQwYjFjOWM2MGU1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTMxLDE4ICszMSwxNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImIGZp
bHRlciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlciwgVHlwZTo6RGlzcGxhY2VtZW50TWFwKQorRkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlz
cGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5l
bFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2FsZSkKKyAgICA6IEZpbHRl
ckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwKQogICAgICwgbV94
Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2VsZWN0b3IpCiAgICAgLCBtX3lDaGFubmVsU2VsZWN0
b3IoeUNoYW5uZWxTZWxlY3RvcikKICAgICAsIG1fc2NhbGUoc2NhbGUpCiB7CiB9CiAKLVJlZjxG
RURpc3BsYWNlbWVudE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShGaWx0ZXImIGZpbHRl
ciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLAotICAgIENoYW5uZWxTZWxl
Y3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCitSZWY8RkVEaXNwbGFjZW1l
bnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0
IHNjYWxlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFRGlzcGxhY2VtZW50TWFwKGZp
bHRlciwgeENoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvciwgc2NhbGUpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRURpc3BsYWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5
Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOwogfQogCiBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpz
ZXRYQ2hhbm5lbFNlbGVjdG9yKGNvbnN0IENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvcikKQEAgLTY5LDIwICs2OCwxNCBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2Fs
ZShmbG9hdCBzY2FsZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRURpc3BsYWNlbWVu
dE1hcDo6c2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKQor
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBGRURpc3BsYWNlbWVudE1hcDo6aW1hZ2VDb2xv
clNwYWNlKCkgY29uc3QKIHsKICAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRpb24t
ZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1hZ2UK
ICAgICAvLyBhbmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBUaGUg
J2luJyBzb3VyY2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBjb2xv
ciBzcGFjZS4KICAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc21hZSBjb2xvciBzcGFjZSBi
ZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIEZpbHRl
ckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JT
cGFjZSgpKTsKLX0KLQotdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCi17Ci0gICAgLy8gRG8g
bm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBwZXIgdGhlIHNwZWMu
Ci0gICAgaWYgKGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDAp
LT5maWx0ZXJJbWFnZSgpOworICAgIHJldHVybiBpbnB1dC5jb2xvclNwYWNlKCk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWdu
ZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCkBAIC05MSwzNyArODQsNDEgQEAgc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNp
Z25lZCByb3dCeXQKICAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7
CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCitG
bG9hdFJlY3QgRkVEaXNwbGFjZW1lbnRNYXA6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0
ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7
Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVj
dCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVT
dWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KIAorYm9vbCBGRURpc3BsYWNlbWVudE1h
cDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorewogICAgIEFT
U0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQo
bV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0g
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0
byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgaW5w
dXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9
ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIg
PSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7
CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dElt
YWdlID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBJ
bnRSZWN0IGlucHV0SW1hZ2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3Qo
aW5wdXQpOworICAgIGF1dG8gaW5wdXRQaXhlbEJ1ZmZlciA9IGlucHV0LmdldFBpeGVsQnVmZmVy
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0KTsK
IAotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgLy8gVGhlIGNhbGN1
bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3Jt
ZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxh
Y2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3Qp
OworICAgIEludFJlY3QgaW5wdXRJbWFnZVJlY3QyID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJ
bWFnZVJlY3QoaW5wdXQyKTsKKyAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhl
bCB2YWx1ZXMgZnJvbSAnaW4yJyBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVk
IGNvbG9yIHZhbHVlcy4KKyAgICBhdXRvIGlucHV0UGl4ZWxCdWZmZXIyID0gaW5wdXQyLmdldFBp
eGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW5wdXRJ
bWFnZVJlY3QyKTsKICAgICAKLSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVudElt
YWdlKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFpbnB1dFBpeGVsQnVmZmVyIHx8ICFpbnB1
dFBpeGVsQnVmZmVyMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGlucHV0
SW1hZ2UtPmxlbmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLT5sZW5ndGgoKSk7CisgICAgQVNT
RVJUKGlucHV0UGl4ZWxCdWZmZXItPmxlbmd0aCgpID09IGlucHV0UGl4ZWxCdWZmZXIyLT5sZW5n
dGgoKSk7CiAKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIEludFNp
emUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXpl
LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IG91dHB1
dC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZp
bHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAg
IEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSh7IG1fc2Nh
bGUsIG1fc2NhbGUgfSk7CiAgICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgp
IC8gMjU1LjA7CiAgICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1
NS4wOwogICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41
OwpAQCAtMTMwLDI2ICsxMjcsMjggQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hhbm5lbElu
ZGV4KCk7CiAgICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRleCgpOwog
Ci0gICAgaW50IHJvd0J5dGVzID0gcGFpbnRTaXplLndpZHRoKCkgKiA0OworICAgIGludCByb3dC
eXRlcyA9IGltYWdlU2l6ZS53aWR0aCgpICogNDsKIAotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
cGFpbnRTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGltYWdl
U2l6ZS5oZWlnaHQoKTsgKyt5KSB7CiAgICAgICAgIGludCBsaW5lU3RhcnRPZmZzZXQgPSB5ICog
cm93Qnl0ZXM7CiAKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYWludFNpemUud2lkdGgo
KTsgKyt4KSB7Ci0gICAgICAgICAgICBpbnQgZGVzdGluYXRpb25JbmRleCA9IGxpbmVTdGFydE9m
ZnNldCArIHggKiA0OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGltYWdlU2l6ZS53aWR0
aCgpOyArK3gpIHsKKyAgICAgICAgICAgIGludCBvdXRwdXRJbmRleCA9IGxpbmVTdGFydE9mZnNl
dCArIHggKiA0OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgc3JjWCA9IHggKyBzdGF0
aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JYICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0oZGVz
dGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwot
ICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9y
WSAqIGRpc3BsYWNlbWVudEltYWdlLT5pdGVtKGRlc3RpbmF0aW9uSW5kZXggKyBkaXNwbGFjZW1l
bnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKKyAgICAgICAgICAgIGludCBzcmNYID0geCAr
IHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclggKiBpbnB1dFBpeGVsQnVmZmVyMi0+aXRl
bShvdXRwdXRJbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxYKSArIHNjYWxlZE9mZnNldFgpOwor
ICAgICAgICAgICAgaW50IHNyY1kgPSB5ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNvbG9y
WSAqIGlucHV0UGl4ZWxCdWZmZXIyLT5pdGVtKG91dHB1dEluZGV4ICsgZGlzcGxhY2VtZW50Q2hh
bm5lbFkpICsgc2NhbGVkT2Zmc2V0WSk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0aW5h
dGlvblBpeGVsUHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRlc3RpbmF0aW9uUGl4
ZWxBcnJheS5kYXRhKCkgKyBkZXN0aW5hdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGlmIChzcmNY
IDwgMCB8fCBzcmNYID49IHBhaW50U2l6ZS53aWR0aCgpIHx8IHNyY1kgPCAwIHx8IHNyY1kgPj0g
cGFpbnRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUGl4ZWxQ
dHIgPSAwOworICAgICAgICAgICAgdW5zaWduZWQqIG91dHB1dFBpeGVsUHRyID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCo+KG91dHB1dFBpeGVsQXJyYXkuZGF0YSgpICsgb3V0cHV0SW5kZXgp
OworICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gaW1hZ2VTaXplLndpZHRoKCkg
fHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBpbWFnZVNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAg
ICAgICAqb3V0cHV0UGl4ZWxQdHIgPSAwOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9ICpyZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRJbWFnZS0+ZGF0YSgpICsgYnl0ZU9mZnNldE9mUGl4
ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKKyAgICAgICAgICAgICpvdXRwdXRQaXhlbFB0ciA9
ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oaW5wdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpICsg
Ynl0ZU9mZnNldE9mUGl4ZWwoc3JjWCwgc3JjWSwgcm93Qnl0ZXMpKTsKICAgICAgICAgfQogICAg
IH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaAppbmRleCBkZDczMmE4ODEwNzNlMjY2YmM4NDZhZmU2ODE5ZTY3NTE2
MjNhM2EyLi5lMDYyYmJmYjc2YjFjOWU1MDUyZmQxMjNhZWY5MjViNWFkZTdjNGRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5oCkBAIC0yMiw3ICsyMiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw3ICszNiw3
IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNzIEZFRGlzcGxhY2VtZW50TWFw
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURpc3Bs
YWNlbWVudE1hcD4gY3JlYXRlKEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxT
ZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCBzY2Fs
ZSk7CisgICAgc3RhdGljIFJlZjxGRURpc3BsYWNlbWVudE1hcD4gY3JlYXRlKENoYW5uZWxTZWxl
Y3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNl
bGVjdG9yLCBmbG9hdCBzY2FsZSk7CiAKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVs
U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3I7IH0KICAgICBib29s
IHNldFhDaGFubmVsU2VsZWN0b3IoY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSk7CkBAIC00OCwy
MCArNDcsMTcgQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
Y2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0gICAgdm9pZCBzZXRSZXN1bHRD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlOwotICAgIHZv
aWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92
ZXJyaWRlOwotCiBwcml2YXRlOgotICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENoYW5u
ZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hh
bm5lbFNlbGVjdG9yLCBmbG9hdCk7CisgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVj
dG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2Vs
ZWN0b3IsIGZsb2F0IHNjYWxlKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiRkVEaXNwbGFjZW1lbnRNYXAiOyB9CisgICAgaW50IHhDaGFubmVs
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50
IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9
CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1hZ2VDb2xvclNwYWNlKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGUgeyBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Cisg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBpbnQgeENo
YW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAg
ICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAt
IDE7IH0KKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC03
MiwzICs2OCw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRGlzcGxhY2VtZW50TWFwKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCmluZGV4IDM1ZmJhYjQxZTgwOTIxNmU0YjIyNDM1MTE4NjIzZTI4ZmZkNjFlZmEu
LjQwMmIyYTEwODhlODQ0OGIxODU2NjJkMjA4MDgxYzExYjkyNTdhNzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAKQEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotRkVE
cm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0
IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9h
dCBzaGFkb3dPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNo
YWRvdykKK0ZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFks
IGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFk
b3dPcGFjaXR5KQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEcm9w
U2hhZG93KQogICAgICwgbV9zdGRYKHN0ZFgpCiAgICAgLCBtX3N0ZFkoc3RkWSkKICAgICAsIG1f
ZHgoZHgpCkBAIC00Miw5MCArNDIsODUgQEAgRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3coRmls
dGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG8KIHsKIH0K
IAotUmVmPEZFRHJvcFNoYWRvdz4gRkVEcm9wU2hhZG93OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIs
IGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3Im
IHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQorUmVmPEZFRHJvcFNoYWRvdz4gRkVE
cm9wU2hhZG93OjpjcmVhdGUoZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0
IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEcm9wU2hhZG93KGZpbHRlciwgc3RkWCwgc3RkWSwg
ZHgsIGR5LCBzaGFkb3dDb2xvciwgc2hhZG93T3BhY2l0eSkpOworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZFRHJvcFNoYWRvdyhzdGRYLCBzdGRZLCBkeCwgZHksIHNoYWRvd0NvbG9yLCBzaGFk
b3dPcGFjaXR5KSk7CiB9CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCitJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CiB7Ci0g
ICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKKyAgICBJbnRTaXplIG91dHNldFNp
emUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZ
IH0pOworICAgIHJldHVybiB7CisgICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS5o
ZWlnaHQoKSAtIG1fZHkpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUud2lk
dGgoKSArIG1fZHgpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUuaGVpZ2h0
KCkgKyBtX2R5KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndpZHRoKCkg
LSBtX2R4KQorICAgIH07Cit9CisKK0Zsb2F0UmVjdCBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0Cit7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZp
bHRlckltYWdlKCk7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVm
ZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZz
ZXRQYWludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRS
ZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkp
OwotICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsK
KyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0LmltYWdlUmVjdCgpOworICAgIGF1dG8gaW1hZ2VS
ZWN0V2l0aE9mZnNldChpbWFnZVJlY3QpOworICAgIGltYWdlUmVjdFdpdGhPZmZzZXQubW92ZSh7
IG1fZHgsIG1fZHkgfSk7CisgICAgaW1hZ2VSZWN0LnVuaXRlKGltYWdlUmVjdFdpdGhPZmZzZXQp
OwogCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtl
cm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIGF1dG8ga2VybmVsU2l6
ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKIAogICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11
bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVz
LgotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkg
KiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5o
ZWlnaHQoKSAqIDAuNWYpOwotCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJz
b2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworICAgIGltYWdl
UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgaW1hZ2VS
ZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CiAKLSAgICBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Cisg
ICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBw
cmltaXRpdmVTdWJyZWdpb24pOwogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKK2Jvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOwor
ICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIAorICAgIGF1dG8gaW5wdXRJ
bWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVy
bjsKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYg
KCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmlsdGVyJiBmaWx0
ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICAKLSAgICBGbG9hdFNpemUgYmx1clJhZGl1cyA9IDIg
KiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0g
ICAgYmx1clJhZGl1cy5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxvYXRTaXpl
IG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBtX2R5IH0p
OworICAgIGF1dG8gYmx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkU2l6ZUJ5RmlsdGVyU2Nh
bGUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBhdXRvIG9mZnNldCA9IGZpbHRlci5zY2FsZWRT
aXplQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSk7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2lu
Z1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9u
KTsKLSAgICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisgICAgYXV0byBp
bnB1dEltYWdlUmVjdCA9IEZsb2F0UmVjdChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0
KG91dHB1dCkpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gaW4tPmltYWdlQnVm
ZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gaW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0ID0gaW5wdXRJbWFnZVJlY3Q7CisgICAgaW5w
dXRJbWFnZVJlY3RXaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKIAotICAgIEdyYXBoaWNzQ29udGV4
dCYgcmVzdWx0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29u
dGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOwotICAgIHJlc3VsdENvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQpOwotICAgIHJl
c3VsdENvbnRleHQuc2V0QWxwaGEoMSk7CisgICAgYXV0byYgb3V0cHV0Q29udGV4dCA9IG91dHB1
dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09w
YWNpdHkpOworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBp
bnB1dEltYWdlUmVjdFdpdGhPZmZzZXQpOworICAgIG91dHB1dENvbnRleHQuc2V0QWxwaGEoMSk7
CiAKICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3No
YWRvd0NvbG9yKTsKIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29s
b3JTcGFjZSgpIH07Ci0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdElt
YWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVz
dWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7Ci0gICAgaWYgKCFw
aXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZm9ybWF0ID0gUGl4ZWxCdWZm
ZXJGb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZv
cm1hdDo6UkdCQTgsIG91dHB1dC5jb2xvclNwYWNlKCkgfTsKKyAgICBhdXRvIHNoYWRvd0FyZWEg
PSBJbnRSZWN0IHsgSW50UG9pbnQoKSwgb3V0cHV0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXpl
KCkgfTsKKyAgICBhdXRvIHNoYWRvd1BpeGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7CisgICAgaWYgKCFzaGFkb3dQaXhlbEJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBp
eGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3Vy
Y2VQaXhlbEFycmF5LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVy
LT5zaXplKCkud2lkdGgoKSk7Ci0gICAgCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CisgICAgYXV0byYgc2hhZG93UGl4ZWxBcnJheSA9
IHNoYWRvd1BpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJ
bWFnZShzaGFkb3dQaXhlbEFycmF5LmRhdGEoKSwgc2hhZG93UGl4ZWxCdWZmZXItPnNpemUoKSwg
NCAqIHNoYWRvd1BpeGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CiAKLSAgICByZXN1bHRDb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwot
ICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKLSAgICByZXN1bHRDb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVy
KTsKKyAgICBvdXRwdXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnNoYWRvd1BpeGVsQnVmZmVyLCBz
aGFkb3dBcmVhKTsKIAotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7Ci19CisgICAgb3V0cHV0Q29udGV4dC5zZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKKyAgICBvdXRw
dXRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dC5hYnNvbHV0
ZUltYWdlUmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOworICAgIG91dHB1dENvbnRleHQu
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIp
OwogCi1JbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgSW50
U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoeyBt
X3N0ZFgsIG1fc3RkWSB9KTsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAs
IG91dHNldFNpemUuaGVpZ2h0KCkgLSBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBv
dXRzZXRTaXplLndpZHRoKCkgKyBtX2R4KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRz
ZXRTaXplLmhlaWdodCgpICsgbV9keSksCi0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0
U2l6ZS53aWR0aCgpIC0gbV9keCkKLSAgICB9OworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIFRleHRTdHJlYW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmgKaW5kZXggYjRlMGEyMDEyZmVkYjdiNzdiZjNlMDU3MzRlZTg4YTI5ZWZmMzg0Yy4u
YjI1Njg4OGFkMjVkN2RmOTY4NzE1NDkyYjhmY2QyM2U3NjA1OGU3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5o
CkBAIC0yMCwxNCArMjAsMTMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIAogY2xhc3MgRkVEcm9wU2hhZG93IDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShGaWx0
ZXImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImLCBmbG9hdCk7Cisg
ICAgc3RhdGljIFJlZjxGRURyb3BTaGFkb3c+IGNyZWF0ZShmbG9hdCBzdGRYLCBmbG9hdCBzdGRZ
LCBmbG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hh
ZG93T3BhY2l0eSk7CiAKICAgICBmbG9hdCBzdGREZXZpYXRpb25YKCkgY29uc3QgeyByZXR1cm4g
bV9zdGRYOyB9CiAgICAgdm9pZCBzZXRTdGREZXZpYXRpb25YKGZsb2F0IHN0ZFgpIHsgbV9zdGRY
ID0gc3RkWDsgfQpAQCAtNDgsMTUgKzQ3LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNoYWRv
d09wYWNpdHkoZmxvYXQgc2hhZG93T3BhY2l0eSkgeyBtX3NoYWRvd09wYWNpdHkgPSBzaGFkb3dP
cGFjaXR5OyB9CiAKIHByaXZhdGU6Ci0gICAgRkVEcm9wU2hhZG93KEZpbHRlciYsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBGRURyb3BTaGFk
b3coZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xv
ciYgc2hhZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpOwogCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRURyb3BTaGFkb3ciOyB9Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOworICAgIEludE91dHNldHMg
b3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNzAsMyArNjcsNCBA
QCBwcml2YXRlOgogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEcm9wU2hhZG93KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggYjQyMzU1
MzRjMzhiMWViYTIxMWVlODQ4NjE3OTkyMzgwZjNiNmIwMS4uYTc2YTlhMjNjNTZhZGQyYzE3NGEw
MTgwMzcwZDZhODViMzI5MzkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCkBAIC0zMCwxNiArMzAsMTYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmlsdGVyLCBjb25z
dCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6Rmxvb2QpCitGRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9yJiBm
bG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVy
RWZmZWN0OjpUeXBlOjpGRUZsb29kKQogICAgICwgbV9mbG9vZENvbG9yKGZsb29kQ29sb3IpCiAg
ICAgLCBtX2Zsb29kT3BhY2l0eShmbG9vZE9wYWNpdHkpCiB7CiB9CiAKLVJlZjxGRUZsb29kPiBG
RUZsb29kOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBm
bG9hdCBmbG9vZE9wYWNpdHkpCitSZWY8RkVGbG9vZD4gRkVGbG9vZDo6Y3JlYXRlKGNvbnN0IENv
bG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRkVGbG9vZChmaWx0ZXIsIGZsb29kQ29sb3IsIGZsb29kT3BhY2l0eSkpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZFRmxvb2QoZmxvb2RDb2xvciwgZmxvb2RPcGFjaXR5KSk7
CiB9CiAKIGJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBA
IC01OCwxNCArNTgsMjEgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxv
b2RPcGFjaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRmxvb2Q6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCitGbG9hdFJlY3QgRkVGbG9vZDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3QKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBy
ZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwor
fQogCi0gICAgYXV0byBjb2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVj
dChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNv
bG9yKTsKK2Jvb2wgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
Cit7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CisgICAgYXV0byBvdXRwdXRJ
bWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29sb3IgPSBtX2Zsb29kQ29sb3IuY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkobV9mbG9vZE9wYWNpdHkpOworICAgIG91dHB1dEltYWdlLT5j
b250ZXh0KCkuZmlsbFJlY3QoeyB7IH0sIG91dHB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpIH0sIGNv
bG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJl
c2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCBiNzA0ZGM5NjljNmQ3NTg4YmNlYjBhZDhiMjQ2ODJm
YTA2MTczNDhlLi45ZmIxODllN2FkZjA3MzkwMzFhYzJjMDZlMDM0OGM1ZjAxOGQzZWU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
aApAQCAtMjIsMTQgKzIyLDEzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENv
bG9yJiwgZmxvYXQpOworICAgIHN0YXRpYyBSZWY8RkVGbG9vZD4gY3JlYXRlKGNvbnN0IENvbG9y
JiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCiAgICAgY29uc3QgQ29sb3ImIGZs
b29kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Zsb29kQ29sb3I7IH0KICAgICBib29sIHNldEZs
b29kQ29sb3IoY29uc3QgQ29sb3ImKTsKQEAgLTQwLDE4ICszOSwxNSBAQCBwdWJsaWM6CiAjaWYg
IVVTRShDRykKICAgICAvLyBmZUZsb29kIGRvZXMgbm90IHBlcmZvcm0gY29sb3IgaW50ZXJwb2xh
dGlvbiBvZiBhbnkga2luZCwgc28gdGhlIHJlc3VsdCBpcyBhbHdheXMgaW4gdGhlIGN1cnJlbnQK
ICAgICAvLyBjb2xvciBzcGFjZSByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBjb2xvci1pbnRl
cnBvbGF0aW9uLWZpbHRlcnMuCi0gICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsgfQotICAgIHZvaWQg
c2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlk
ZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7IH0KKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAg
ICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOworICAgIEZFRmxvb2QoY29u
c3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSk7CiAKLSAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRmxvb2QiOyB9CisgICAg
RmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKQEAgLTYxLDMgKzU3LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVGbG9v
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMGY2ZWU4N2Y5NWU3NTc1MTg2M2ZkMmU1ZjU0
OWU3NGQ5NzI5ZGIxZi4uMTA3MjFmYWE3ZTBiYzkwNDdjNGNhMjU0MjZhNzFmY2Q4MDFkYTg3YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTc5LDE3ICs3OSwxNyBAQCBpbmxpbmUgdm9pZCBr
ZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBk
ZWx0YUxlZnQsCiAgICAgfQogfQogCi1GRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoRmls
dGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkdhdXNzaWFuQmx1cikKK0ZFR2F1c3NpYW5C
bHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUdhdXNzaWFuQmx1
cikKICAgICAsIG1fc3RkWCh4KQogICAgICwgbV9zdGRZKHkpCiAgICAgLCBtX2VkZ2VNb2RlKGVk
Z2VNb2RlKQogewogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9k
ZSkKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBm
bG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVHYXVzc2lhbkJsdXIoZmlsdGVyLCB4LCB5LCBlZGdlTW9kZSkpOworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7CiB9CiAKIHZvaWQg
RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKQEAgLTQ2NSwxMSArNDY1
LDEyIEBAIHN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6ZShmbG9hdCB2YWx1ZSkKIHsKICAg
ICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBBIGJpZ2dlciByYWRpdXMgd29uJ3Qg
bWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0IGltYWdlIGJ1dAogICAgIC8vIGlu
ZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBtdWNoLiBUaGlzIGlzIGNvbXBhdGli
bGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0aWMgY29uc3QgaW50IGdNYXhLZXJu
ZWxTaXplID0gNTAwOwogICAgIHVuc2lnbmVkIHNpemUgPSBzdGQ6Om1heDx1bnNpZ25lZD4oMiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAqIGdhdXNzaWFuS2VybmVsRmFjdG9y
KCkgKyAwLjVmKSkpOwogICAgIHJldHVybiBjbGFtcFRvPGludD4oc3RkOjptaW4oc2l6ZSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkpOwogfQogICAgIAotSW50U2l6ZSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5l
bFNpemUoY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgQVNTRVJUKHN0ZERl
dmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwogICAg
IEludFNpemUga2VybmVsU2l6ZTsKQEAgLTQ4MywxMiArNDg0LDEyIEBAIEludFNpemUgRkVHYXVz
c2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0
aW9uKQogICAgIHJldHVybiBrZXJuZWxTaXplOwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNpemUgc3Rk
RGV2aWF0aW9uKQorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShj
b25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pCiB7Ci0g
ICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJSZXNvbHV0aW9uKHN0ZERldmlhdGlvbikpOworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZFNpemVCeUZpbHRlclNjYWxlKHN0ZERldmlhdGlvbikp
OwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0
U2l6ZSBzdGREZXZpYXRpb24pCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIGF1dG8ga2VybmVs
U2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGREZXZpYXRpb24pOwogCkBAIC00
OTYsNjIgKzQ5Nyw2MSBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRT
aXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUu
d2lkdGgoKSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OwogfQogCi12b2lkIEZF
R2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgRkVH
YXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBr
ZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIoKSwgeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsK
KyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0LmltYWdlUmVjdCgpOwogCi0gICAgRmxvYXRSZWN0
IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7
CiAgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3QgaW5mbGF0ZSB0aGUg
YWZmZWN0ZWQgcGFpbnQgcmVjdC4KLSAgICBpZiAobV9lZGdlTW9kZSAhPSBFREdFTU9ERV9OT05F
KSB7Ci0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9lZGdlTW9k
ZSAhPSBFREdFTU9ERV9OT05FKQorICAgICAgICByZXR1cm4gaW1hZ2VSZWN0OwogCisgICAgYXV0
byBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0
ZFkgfSk7CisgICAgCiAgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVs
dGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMu
Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAq
IDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhl
aWdodCgpICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndp
ZHRoKCkgKiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVp
Z2h0KCkgKiAwLjVmKTsKIAotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29s
dXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICByZXR1cm4g
ZmlsdGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1
YnJlZ2lvbik7Cit9CiAKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KGFic29sdXRlUGFpbnRSZWN0KSk7CitJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRz
KCkgY29uc3QKK3sKKyAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXpl
KHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgcmV0dXJuIHsgb3V0c2V0U2l6ZS5oZWlnaHQoKSwg
b3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRo
KCkgfTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
K2Jvb2wgRkVHYXVzc2lhbkJsdXI6OmlzQWxwaGFJbWFnZSgpIGNvbnN0CiB7Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIHJldHVybiBpbnB1dEVmZmVjdCgwKS0+
aXNBbHBoYUltYWdlKCk7Cit9CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBp
eGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Citib29sIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgYXV0byYgaW5wdXQg
PSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZp
bHRlckltYWdlKCk7CisKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0gb3V0cHV0LnBpeGVs
QnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGlmICgh
b3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAg
ICBhdXRvJiBvdXRwdXRQaXhlbEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAot
ICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIGF1dG8gaW5wdXRJ
bWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dCk7CiAKLSAg
ICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxp
ZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIob3V0cHV0UGl4ZWxB
cnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEludFNpemUga2Vy
bmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyKCksIHsgbV9zdGRYLCBtX3N0ZFkg
fSk7Ci0gICAga2VybmVsU2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKKyAgICBh
dXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1f
c3RkWSB9KTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgp
LnNpemUoKTsKIAotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotICAg
IGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOworICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWlu
dDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoaW1hZ2VTaXplLmFyZWEoKSAq
IDQpOwogICAgIGlmICghdG1wSW1hZ2VEYXRhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwbGF0
Zm9ybUFwcGx5KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6
ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOwotfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLUludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25z
dAotewotICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0
ZFgsIG1fc3RkWSB9KTsKLSAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRT
aXplLndpZHRoKCksIG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9Owor
ICAgIHBsYXRmb3JtQXBwbHkob3V0cHV0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVs
U2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBpbWFnZVNpemUpOworICAgIHJldHVy
biB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRUdhdXNzaWFuQmx1cjo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9u
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IGFkN2Q5NTBiOWI3MjNkYzc0NDY0OWNiYWYw
MGE5MTMwYTNiMWQ3MGUuLjFkNTgyNjU0YzAyYjRlNWVlMjRkNTAzYzhiZDEzOTdhMmVlN2Q1OGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTIyLDE0ICsyMiwxMyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVH
YXVzc2lhbkJsdXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZFR2F1c3NpYW5CbHVyPiBjcmVhdGUoRmlsdGVyJiwgZmxvYXQsIGZsb2F0LCBFZGdlTW9k
ZVR5cGUpOworICAgIHN0YXRpYyBSZWY8RkVHYXVzc2lhbkJsdXI+IGNyZWF0ZShmbG9hdCB4LCBm
bG9hdCB5LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uWCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RkWDsgfQogICAgIHZvaWQgc2V0U3RkRGV2aWF0aW9uWChmbG9hdCk7CkBA
IC00MCwxNCArMzksMTIgQEAgcHVibGljOgogICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWRnZU1vZGU7IH0KICAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2Rl
VHlwZSk7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZp
bHRlciYsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1
bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0
aWMgSW50U2l6ZSBjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwor
ICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmxvYXRTaXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0
ZVVuc2NhbGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CisgICAg
c3RhdGljIEludFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERl
dmlhdGlvbik7CiAKIHByaXZhdGU6Ci0gICAgRkVHYXVzc2lhbkJsdXIoRmlsdGVyJiwgZmxvYXQs
IGZsb2F0LCBFZGdlTW9kZVR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuICJGRUdhdXNzaWFuQmx1ciI7IH0KKyAgICBGRUdhdXNzaWFuQmx1
cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUpOwogCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBs
aW1pdCBmb3IgcGFyYWxsZWwgam9icwogCkBAIC02MSwxMiArNTgsMTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7CiAgICAgfTsKIAotICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCkgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAorICAg
IGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKwogICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBs
eVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwpAQCAtODAsMyArNzksNCBAQCBwcml2
YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RklMVEVSX0VGRkVDVChGRUdhdXNzaWFuQmx1cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IDY1OWIxMDU1
ZjYxZWFhYmM1ZjI5OTkxZGEwZGExYTU4NTA3MWFlOTIuLmUzMjMzNzY2ODRlYTBlN2MzZGYwNTZi
YjhlYmU3ZGRjM2VhYTkyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMzAsMTMgKzMwLDE0IEBACiAK
ICNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5o
IgorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRp
bmc6OkZFTGlnaHRpbmcoRmlsdGVyJiBmaWx0ZXIsIExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUs
IGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBv
bmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBS
ZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKLSAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIHR5cGUpCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBs
aWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKKyAg
ICA6IEZpbHRlckVmZmVjdCh0eXBlKQogICAgICwgbV9saWdodGluZ1R5cGUobGlnaHRpbmdUeXBl
KQogICAgICwgbV9saWdodFNvdXJjZShXVEZNb3ZlKGxpZ2h0U291cmNlKSkKICAgICAsIG1fbGln
aHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKQpAQCAtMzg4LDI2ICszODksMTQgQEAgaW5saW5lIHZv
aWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNv
bnN0IExpZ2h0U291cmMKICNlbmRpZgogfQogCi1ib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGlu
ZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitib29s
IEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhKQogewogICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRp
bmdEYXRhOwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0gICAgLy8gRklYTUU6IGRvIHNvbWV0
aGluZyBpZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCi0gICAgLy8gVGhl
IFczIHNwZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCBy
ZXR1cm5zLgotICAgIGlmICh3aWR0aCA8PSAyIHx8IGhlaWdodCA8PSAyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBkYXRhLnBpeGVscyA9ICZwaXhlbHM7Ci0gICAgZGF0YS5zdXJmYWNl
U2NhbGUgPSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAgICBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwotICAgIGRhdGEud2lkdGhEZWNyZWFz
ZWRCeU9uZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVp
Z2h0IC0gMTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvQ29s
b3JDb21wb25lbnRzSW5Db2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgcGFp
bnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0Qo
ciwgZywgYik7CiAKLSAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBw
YWludGluZ0RhdGEpOworICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoZmlsdGVy
LCAqdGhpcywgcGFpbnRpbmdEYXRhKTsKIAogICAgIC8vIFRvcCBsZWZ0LgogICAgIGludCBvZmZz
ZXQgPSAwOwpAQCAtNDIyLDEwICs0MTEsMTAgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRp
bmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3Jl
YXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9y
bWFsKG9mZnNldCkpOwogCiAgICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhlaWdo
dCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIG9m
ZnNldCA9IChkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICsgMSkgKiBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEs
IHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3Jl
YXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5v
cm1hbChvZmZzZXQpKTsKIAotICAgIGlmICh3aWR0aCA+PSAzKSB7CisgICAgaWYgKGRhdGEud2lk
dGhEZWNyZWFzZWRCeU9uZSA+PSAyKSB7CiAgICAgICAgIC8vIFRvcCByb3cuCiAgICAgICAgIG9m
ZnNldCA9IGNQaXhlbFNpemU7CiAgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0
aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQpAQCAtNDM3LDcgKzQy
Niw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFj
dG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7CiAg
ICAgfQogCi0gICAgaWYgKGhlaWdodCA+PSAzKSB7CisgICAgaWYgKGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmUgPj0gMikgewogICAgICAgICAvLyBMZWZ0IGNvbHVtbi4KICAgICAgICAgb2Zmc2V0
ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKICAgICAgICAgZm9yIChpbnQgeSA9
IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQpAQCAtNDQ5LDEyICs0MzgsMTIgQEAgYm9vbCBGRUxp
Z2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQogICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGlu
Z0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9y
MWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CiAgICAgfQogCi0gICAgaWYg
KHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKKyAgICBpZiAoZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lID49IDIgJiYgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA+PSAyKSB7CiAgICAgICAg
IC8vIEludGVyaW9yIHBpeGVscy4KICAgICAgICAgcGxhdGZvcm1BcHBseShkYXRhLCBwYWludGlu
Z0RhdGEpOwogICAgIH0KIAotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplICogaGVpZ2h0OworICAgIGludCBsYXN0UGl4ZWwgPSAoZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSArIDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKICAg
ICBpZiAobV9saWdodGluZ1R5cGUgPT0gRGlmZnVzZUxpZ2h0aW5nKSB7CiAgICAgICAgIGZvciAo
aW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNp
emUpCiAgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CkBAIC00
NzEsMjcgKzQ2MCw0NyBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVj
dCBGRUxpZ2h0aW5nOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBm
aWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CisKK2Jv
b2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBhdXRvJiBp
bnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQg
PSAqZmlsdGVySW1hZ2UoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIG91dHB1dFBpeGVsQnVmZmVyID0g
b3V0cHV0LnBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
OworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwog
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOworICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBvdXRwdXQucmVsYXRpdmVBYnNv
bHV0ZUltYWdlUmVjdChpbnB1dCk7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOworICAg
IGlucHV0LmNvcHlQaXhlbEJ1ZmZlcihvdXRwdXRQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5
UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5l
bFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhl
IFczCiAgICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVy
IGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCiAgICAgLy8gb3V0cHV0IGZvciB2
YXJpb3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxp
YWJsZS4KICAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRo
ZSBpbXBsZW1lbnRhdGlvbgogCi0gICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29s
dXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIGRyYXdMaWdodGluZyhkZXN0aW5hdGlvblBpeGVs
QXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdo
dCgpKTsKKyAgICBJbnRTaXplIGFic29sdXRlSW1hZ2VTaXplID0gb3V0cHV0LmFic29sdXRlSW1h
Z2VSZWN0KCkuc2l6ZSgpOworCisgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBv
ciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCisgICAgLy8gVGhlIFczIHNwZWMgZG9lcyBu
b3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgorICAgIGlm
IChhYnNvbHV0ZUltYWdlU2l6ZS53aWR0aCgpIDw9IDIgfHwgYWJzb2x1dGVJbWFnZVNpemUuaGVp
Z2h0KCkgPD0gMikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBMaWdodGluZ0RhdGEgZGF0
YTsKKyAgICBkYXRhLnBpeGVscyA9ICZvdXRwdXRQaXhlbEFycmF5OworICAgIGRhdGEuc3VyZmFj
ZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7CisgICAgZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSA9IGFic29sdXRlSW1hZ2VTaXplLndpZHRoKCkgKiBjUGl4ZWxTaXplOwor
ICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IGFic29sdXRlSW1hZ2VTaXplLndpZHRoKCkg
LSAxOworICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBhYnNvbHV0ZUltYWdlU2l6ZS5o
ZWlnaHQoKSAtIDE7CisKKyAgICBkcmF3TGlnaHRpbmcoZmlsdGVyLCBkYXRhKTsKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBiMGJi
NzBhMTRkMTc0OTUwNjczN2U4OGUwNTE0ZWU3OTY4MjBhNDQ5Li4wYjRkODAwNGRiNjk2NGY5NDkw
OGNjNmQyNjA1NjRiYjJiNGIwMjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMjcsNyArMjcsNiBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgpAQCAtNDAsOCArMzksNiBAQCBzdHJ1Y3QgRkVM
aWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNsYXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1h
eEVmZmVjdFJlY3QoKSkpOyB9Ci0KICAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX3N1cmZhY2VTY2FsZTsgfQogICAgIGJvb2wgc2V0U3VyZmFjZVNjYWxlKGZsb2F0KTsK
IApAQCAtMTI4LDE2ICsxMjUsMTYgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHBsYXRm
b3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyopOwog
ICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRpbmdQYWludGlu
Z0RhdGFGb3JOZW9uKik7CiAKLSAgICBGRUxpZ2h0aW5nKEZpbHRlciYsIExpZ2h0aW5nVHlwZSwg
Y29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBS
ZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUxpZ2h0aW5nIjsgfQorICAgIEZFTGlnaHRpbmcoTGln
aHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxl
LCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBlKTsKIAotICAgIGJvb2wgZHJhd0xpZ2h0
aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50LCBpbnQpOworICAgIGJvb2wgZHJhd0xpZ2h0aW5n
KGNvbnN0IEZpbHRlciYsIGNvbnN0IExpZ2h0aW5nRGF0YSYpOwogCiAgICAgdm9pZCBzZXRQaXhl
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJ
bnRTaXplIG5vcm1hbFZlY3Rvcik7CiAgICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZz
ZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
LCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9y
bWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmls
dGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRl
OworCisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGU7CiAKICAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3Qg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAppbmRleCAwYTIwMDAxYjE3M2Jk
OGZkZjZiYmE2MzZjZDIzY2U0NzAyNmU3YjNmLi42ZjViNzE0YjNkNWJjNGQ2ODNmMzgxNzRkN2Jh
YTY5MzZjMDc5NzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKQEAgLTI4LDM5ICsyOCw0MyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUZFTWVyZ2U6OkZFTWVyZ2UoRmlsdGVyJiBmaWx0ZXIpCi0gICAgOiBGaWx0
ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNZXJnZSkKK0ZFTWVyZ2U6OkZFTWVyZ2UoKQorICAgIDog
RmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVNZXJnZSkKIHsKIH0KIAotUmVmPEZF
TWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZShGaWx0ZXImIGZpbHRlcikKK1JlZjxGRU1lcmdlPiBGRU1l
cmdlOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVyZ2UoZmlsdGVy
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNZXJnZSgpKTsKIH0KIAotdm9pZCBGRU1l
cmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKLSAgICB1bnNpZ25lZCBzaXplID0gbnVtYmVyT2ZF
ZmZlY3RJbnB1dHMoKTsKLSAgICBBU1NFUlQoc2l6ZSA+IDApOworICAgIEFTU0VSVCghaW5wdXRF
ZmZlY3RzKCkuaXNFbXB0eSgpKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsK
IAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gb3V0
cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBHcmFwaGljc0NvbnRleHQmIG91dHB1dENvbnRl
eHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdChpKTsKLSAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1
ZmZlclJlc3VsdCgpKQotICAgICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBpbnB1dEVmZmVjdHMoKSkgeworICAgICAg
ICBhdXRvJiBpbnB1dCA9ICplZmZlY3QtPmZpbHRlckltYWdlKCk7CisgICAgICAgIGlmIChhdXRv
IGltYWdlQnVmZmVyID0gaW5wdXQuaW1hZ2VCdWZmZXIoKSkgeworICAgICAgICAgICAgYXV0byBp
bnB1dEltYWdlUmVjdCA9IEZsb2F0UmVjdChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0
KG91dHB1dCkpOworICAgICAgICAgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBpbnB1dEltYWdlUmVjdCk7CisgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwogICAgIEZpbHRlckVmZmVjdDo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cywgcmVwcmVzZW50YXRpb24pOwotICAgIHVuc2lnbmVk
IHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOworICAgIHVuc2lnbmVkIHNpemUgPSBpbnB1
dEVmZmVjdHMoKS5zaXplKCk7CiAgICAgQVNTRVJUKHNpemUgPiAwKTsKICAgICB0cyA8PCAiIG1l
cmdlTm9kZXM9XCIiIDw8IHNpemUgPDwgIlwiXVxuIjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCA1Y2ZjNWNiNzk4MTlj
ZWNlZDUwNzNlNTdiMDE5NGViY2YxOGYyNjA3Li44ODdiYTBmZDMzZjg5MzJjYmY0MzM4MjY4ZTdh
YWE0OGFmYTJmMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMjIsMjMgKzIyLDIxIEBACiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXImKTsKKyAgICBzdGF0
aWMgUmVmPEZFTWVyZ2U+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIEZFTWVyZ2UoRmlsdGVy
Jik7CisgICAgRkVNZXJnZSgpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuICJGRU1lcmdlIjsgfQotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0ZJTFRFUl9FRkZFQ1QoRkVNZXJnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCA2YWUzZDk4
OTg2NjI2ZTA3YzA5NGM1ODZmMzE5OGM5YzU4ZGFlZDZiLi43NDA3MDRlMjc4MTI0OWY0YjVjM2Vh
M2UxMjViNDE1NTU4N2Y5Yzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0zNSwxNyArMzUsMTcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU1vcnBob2xvZ3k6OkZFTW9ycGhvbG9neShG
aWx0ZXImIGZpbHRlciwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNY
LCBmbG9hdCByYWRpdXNZKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6TW9ycGhv
bG9neSkKK0ZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKKyAgICA6IEZpbHRlckVmZmVjdChG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFTW9ycGhvbG9neSkKICAgICAsIG1fdHlwZSh0eXBlKQogICAg
ICwgbV9yYWRpdXNYKHJhZGl1c1gpCiAgICAgLCBtX3JhZGl1c1kocmFkaXVzWSkKIHsKIH0KIAot
UmVmPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkK
K1JlZjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUgdHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRU1vcnBob2xvZ3koZmlsdGVyLCB0eXBlLCByYWRpdXNYLCByYWRpdXNZ
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVNb3JwaG9sb2d5KHR5cGUsIHJhZGl1c1gs
IHJhZGl1c1kpKTsKIH0KIAogYm9vbCBGRU1vcnBob2xvZ3k6OnNldE1vcnBob2xvZ3lPcGVyYXRv
cihNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCkBAIC03MiwxOCArNzIsNiBAQCBib29sIEZF
TW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQotewot
ICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJl
Y3QoKTsKLSAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwotICAgIHBhaW50UmVj
dC5pbmZsYXRlKGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3JhZGl1c1gsIG1f
cmFkaXVzWSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0
LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0
LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChwYWludFJlY3QpKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJh
eUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKQogewogICAgIHJldHVybiAoeSAqIHdpZHRo
ICsgeCkgKiA0OwpAQCAtMjMzLDUyICsyMjEsNjQgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiBib29sIEZFTW9ycGhv
bG9neTo6cGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVs
QXJyYXksIGNvbnN0IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZ
KQogewogICAgIGlmIChyYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYg
IXJhZGl1c1kpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LSAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdl
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgYXV0byYgaW5wdXQgPSAqaW5w
dXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgICAgIGlucHV0LmNvcHlQaXhlbEJ1ZmZl
cihkc3RQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBp
bWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQorRmxvYXRSZWN0IEZFTW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VS
ZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Cisg
ICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgRmxv
YXRSZWN0IGltYWdlUmVjdCA9IGlucHV0LmltYWdlUmVjdCgpOworICAgIGltYWdlUmVjdC5pbmZs
YXRlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9N
YXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOworfQogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlci0+ZGF0YSgpOworYm9vbCBGRU1vcnBob2xvZ3k6OmlzQWxwaGFJbWFnZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5pc0FscGhhSW1hZ2UoKTsKK30KKwor
Ym9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2Uo
KTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKIAotICAgIHNldElzQWxwaGFJ
bWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBv
dXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byYgb3V0cHV0UGl4ZWxB
cnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VS
ZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOwogCiAgICAgSW50
U2l6ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9yYWRpdXNYLCBtX3JhZGl1
c1kpKTsKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFy
cmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUob3V0cHV0
UGl4ZWxBcnJheSwgaW5wdXRJbWFnZVJlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0
KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+
ZmlsdGVyKCk7Ci0gICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRS
ZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgaWYg
KCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbnB1dFBpeGVs
QXJyYXkgPSBpbnB1dC5nZXRQaXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBp
ZiAoIWlucHV0UGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmFkaXVz
ID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFk
aXVzWCwgbV9yYWRpdXNZIH0pKTsKLSAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERy
YXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7Ci0gICAgaW50IHJhZGl1c1kg
PSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQo
KSk7CisgICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZFNpemVCeUZpbHRl
clNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOworICAgIGludCByYWRpdXNYID0gc3Rk
OjptaW4oaW5wdXRJbWFnZVJlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKKyAgICBp
bnQgcmFkaXVzWSA9IHN0ZDo6bWluKGlucHV0SW1hZ2VSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVz
LmhlaWdodCgpKTsKIAotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgcGFp
bnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEFycmF5LmdldCgpOwotICAgIHBh
aW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKLSAgICBw
YWludGluZ0RhdGEud2lkdGggPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpICogZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWlsZihlZmZl
Y3REcmF3aW5nUmVjdC5oZWlnaHQoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBwYWlu
dGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1ggKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZICogZmlsdGVyLmZpbHRl
clNjYWxlKCkpOworICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShvdXRwdXRQaXhlbEFy
cmF5LCBpbnB1dEltYWdlUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCisgICAgICAgIHJldHVybiB0
cnVlOwogCisgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheSA9IGlucHV0UGl4ZWxBcnJheS5nZXQoKTsKKyAgICBwYWludGluZ0RhdGEu
ZHN0UGl4ZWxBcnJheSA9ICZvdXRwdXRQaXhlbEFycmF5OworICAgIHBhaW50aW5nRGF0YS53aWR0
aCA9IGNlaWxmKGlucHV0SW1hZ2VSZWN0LndpZHRoKCkpOworICAgIHBhaW50aW5nRGF0YS5oZWln
aHQgPSBjZWlsZihpbnB1dEltYWdlUmVjdC5oZWlnaHQoKSk7CisgICAgcGFpbnRpbmdEYXRhLnJh
ZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxm
KHJhZGl1c1kpOwogICAgIHBsYXRmb3JtQXBwbHkocGFpbnRpbmdEYXRhKTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAppbmRleCA0
OGZjMzU0MTE3ZmMyN2NjZmM4ZTkzZjE0ZWRmMDc1ZGUzOWM1YTExLi4wNDdhMGNhYTI1MTI1NGNk
NGM1NTc3ZTU4ODJmYTk4YWQ2NzM1NmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKQEAgLTIyLDcgKzIyLDYg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzQsNyArMzMsNyBAQCBlbnVt
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFTW9ycGhvbG9neT4gY3Jl
YXRlKEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0
IHJhZGl1c1kpOworICAgIHN0YXRpYyBSZWY8RkVNb3JwaG9sb2d5PiBjcmVhdGUoTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKICAgICBNb3Jw
aG9sb2d5T3BlcmF0b3JUeXBlIG1vcnBob2xvZ3lPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQogICAgIGJvb2wgc2V0TW9ycGhvbG9neU9wZXJhdG9yKE1vcnBob2xvZ3lPcGVyYXRv
clR5cGUpOwpAQCAtNDYsMTMgKzQ1LDEzIEBAIHB1YmxpYzoKICAgICBib29sIHNldFJhZGl1c1ko
ZmxvYXQpOwogCiBwcml2YXRlOgotICAgIEZFTW9ycGhvbG9neShGaWx0ZXImLCBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZKTsKKyAgICBGRU1vcnBo
b2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVz
WSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkZFTW9ycGhvbG9neSI7IH0KKyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOwogCkBAIC04NiwzICs4NSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZF
TW9ycGhvbG9neSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggMDI3MGRiOTI0ODFhMzM5MmQzZDVhMWU5MTdjMmQ2
NWFhNDE0MGY2OS4uOTZmZmEwMWFlYTQxYTA1MTk3NzE1MTg1Y2VmMDQ4MDdlNmY5ZDRlYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHAKQEAgLTMwLDE2ICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
T2Zmc2V0OjpGRU9mZnNldChGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQotICAg
IDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6T2Zmc2V0KQorRkVPZmZzZXQ6OkZFT2Zmc2V0
KGZsb2F0IGR4LCBmbG9hdCBkeSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFT2Zmc2V0KQogICAgICwgbV9keChkeCkKICAgICAsIG1fZHkoZHkpCiB7CiB9CiAKLVJl
ZjxGRU9mZnNldD4gRkVPZmZzZXQ6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZs
b2F0IGR5KQorUmVmPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9hdCBk
eSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRU9mZnNldChmaWx0ZXIsIGR4LCBkeSkp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFT2Zmc2V0KGR4LCBkeSkpOwogfQogCiB2b2lk
IEZFT2Zmc2V0OjpzZXREeChmbG9hdCBkeCkKQEAgLTUyLDMzICs1MiwzOCBAQCB2b2lkIEZFT2Zm
c2V0OjpzZXREeShmbG9hdCBkeSkKICAgICBtX2R5ID0gZHk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRU9mZnNldDo6Y2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRF
ZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlz
LT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNv
bHV0aW9uKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAg
ICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAg
ICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICBhdXRvJiBpbnB1dCA9ICpp
bnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0
LmltYWdlUmVjdCgpOworICAgIGltYWdlUmVjdC5tb3ZlKHsgbV9keCwgbV9keSB9KTsKKyAgICBy
ZXR1cm4gZmlsdGVyLmNsaXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1p
dGl2ZVN1YnJlZ2lvbik7CisKK30KKworYm9vbCBGRU9mZnNldDo6aXNBbHBoYUltYWdlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPmlzQWxwaGFJbWFnZSgpOwogfQogCi12
b2lkIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQorYm9vbCBGRU9mZnNldDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVj
dCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsK
IAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAg
ICBhdXRvIGlucHV0SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW5wdXRJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5p
c0FscGhhSW1hZ2UoKSk7CisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKLSAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bih7IG1fZHgsIG1fZHkgfSkpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7CisgICAgYXV0byBpbnB1dEltYWdlUmVj
dCA9IEZsb2F0UmVjdChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOwor
ICAgIGlucHV0SW1hZ2VSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZFNpemVCeUZpbHRlclNjYWxlKHsg
bV9keCwgbV9keSB9KSk7CisgICAgCisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaApp
bmRleCA2NWFiZGE5MGE0N2IxYmZlNzZhZTVjNzRhYWI1YWExNjdmYjFlNjllLi5hMTBhMTg5YjMw
ZTNjMmZkYTUzMzEzNGEzNzE3N2VlMTM0NTVkZDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCkBAIC0yMiwxMyArMjIsMTIg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAi
RmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVPZmZzZXQgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZFT2Zmc2V0PiBjcmVh
dGUoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICBzdGF0aWMgUmVmPEZFT2Zmc2V0
PiBjcmVhdGUoZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAogICAgIGZsb2F0IGR4KCkgY29uc3QgeyBy
ZXR1cm4gbV9keDsgfQogICAgIHZvaWQgc2V0RHgoZmxvYXQpOwpAQCAtMzcsMTQgKzM2LDE0IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldER5KGZsb2F0KTsKIAogcHJpdmF0ZToKLSAgICBGRU9mZnNl
dChGaWx0ZXImLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBm
bG9hdCBkeSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIkZFT2Zmc2V0IjsgfQorICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwotICAgIAot
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAorICAgIGJvb2wgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIAogICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9keDsKQEAgLTUzLDMg
KzUyLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHAKaW5kZXggNTk5NzIzMDY4ODZhNjNmYTQxMmI1YjcxNDFmNzRmOWM0ODdhMTQ0Yy4u
Mzg3MDdiMzAxZmQxMTBiZWNiYjA0ZTI1Y2ZjOTgyYTIwNWZlNjQ2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcApAQCAtMjcsMTggKzI3LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0
IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxp
Z2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIFNwZWN1bGFyTGlnaHRpbmcsIGxp
Z2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJF
eHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxp
Z2h0U291cmNlKSwgVHlwZTo6U3BlY3VsYXJMaWdodGluZykKK0ZFU3BlY3VsYXJMaWdodGluZzo6
RkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJm
YWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQorICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxpZ2h0
aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNw
ZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RG
TW92ZShsaWdodFNvdXJjZSksIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5n
KQogewogfQogCi1SZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNy
ZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVu
dCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8
TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCitSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNw
ZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQg
c3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9u
ZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJl
ZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRVNwZWN1bGFyTGlnaHRpbmcoZmlsdGVyLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUs
IHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBr
ZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRVNwZWN1bGFyTGlnaHRpbmcobGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxl
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKSk7CiB9CiAKLUZFU3BlY3Vs
YXJMaWdodGluZzo6fkZFU3BlY3VsYXJMaWdodGluZygpID0gZGVmYXVsdDsKLQogYm9vbCBGRVNw
ZWN1bGFyTGlnaHRpbmc6OnNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCkKIHsKICAgICBpZiAobV9zcGVjdWxhckNvbnN0YW50ID09IHNwZWN1bGFyQ29uc3RhbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuaAppbmRleCBlOTk4YTc2MDVkMWU0NzM1ZDlmNDk3OThkMzk4
MThiZjNiMjQ5NThhLi5hYzQ1MGRiZGI2MGNkNjk3Y2Q4ZGZjM2M3OTMxOGRiZjY0YWQ1MzM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKQEAgLTI3LDggKzI3LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBGRVNwZWN1bGFyTGlnaHRpbmcgOiBwdWJsaWMgRkVMaWdodGluZyB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShGaWx0
ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmKTsKLSAgICB2aXJ0dWFsIH5GRVNwZWN1bGFyTGlnaHRpbmcoKTsKKyAg
ICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKGNvbnN0IENvbG9yJiBsaWdo
dGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogICAgIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGFyQ29uc3RhbnQ7IH0KICAgICBib29s
IHNldFNwZWN1bGFyQ29uc3RhbnQoZmxvYXQpOwpAQCAtMzksOCArMzgsOSBAQCBwdWJsaWM6CiAg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAg
RkVTcGVjdWxhckxpZ2h0aW5nKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOworICAgIEZFU3BlY3VsYXJM
aWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
Jik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRklMVEVSX0VGRkVDVChGRVNwZWN1bGFyTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggMzVjNTFjYmIy
MjlkZWU5NjQyZGMxZTdkY2EwYzVkYjJmY2FjMjBhZC4uMDUzNGFiZTAwNTE3MjE2MTI0NTRmODdi
Mzg1NzBkMDQxOWEzZDc3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcApAQCAtMjYsNjQgKzI2LDc0IEBACiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlJlbmRl
clRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGls
ZTo6RkVUaWxlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlw
ZTo6VGlsZSkKK0ZFVGlsZTo6RkVUaWxlKCkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFVGlsZSkKIHsKIH0KIAotUmVmPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoRmls
dGVyJiBmaWx0ZXIpCitSZWY8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRkVUaWxlKGZpbHRlcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZFVGlsZSgpKTsKIH0KIAotdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiti
b29sIEZFVGlsZTo6aXNBbHBoYUltYWdlKCkgY29uc3QKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3
MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0
IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7
Ci0KLSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUg
c2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRo
ZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0
aW9uIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVm
ZmVjdFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVj
dC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZl
Y3RSZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBG
aWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKLSAgICAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0
aGlzLT5maWx0ZXIoKTsKLSAgICAgICAgdGlsZVJlY3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7
Ci0gICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgo
KSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgYXV0
byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxl
UmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5y
ZW5kZXJpbmdNb2RlKCkpOwotICAgIGlmICghdGlsZUltYWdlKQotICAgICAgICByZXR1cm47Cisg
ICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5pc0FscGhhSW1hZ2UoKTsKK30KKworRmxvYXRSZWN0
IEZFVGlsZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZmlsdGVy
Lm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOworfQorCitib29sIEZF
VGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAg
IGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8m
IG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworCisgICAgYXV0byBpbnB1dEltYWdlID0gaW5wdXQu
aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZS0+
Y29udGV4dCgpOwotICAgIHRpbGVJbWFnZUNvbnRleHQudHJhbnNsYXRlKC1pbk1heEVmZmVjdExv
Y2F0aW9uLngoKSwgLWluTWF4RWZmZWN0TG9jYXRpb24ueSgpKTsKLSAgICB0aWxlSW1hZ2VDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxv
Y2F0aW9uKCkpOworICAgIGF1dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIW91dHB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IHRpbGVJbWFnZUNvcHkgPSBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3Zl
KHRpbGVJbWFnZSkpOwotICAgIGlmICghdGlsZUltYWdlQ29weSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBpbnB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpOworICAg
IGF1dG8gb3V0cHV0SW1hZ2VSZWN0ID0gb3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCk7CisKKyAg
ICBhdXRvIHRpbGVSZWN0ID0gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihpbnB1dC5wcmlt
aXRpdmVTdWJyZWdpb24oKSk7CisgICAgdGlsZVJlY3QgPSBmaWx0ZXIuc2NhbGVkUmVjdEJ5Rmls
dGVyU2NhbGUodGlsZVJlY3QpOworCisgICAgYXV0byBtYXhPdXRwdXRSZWN0ID0gZmlsdGVyLm1h
eFByaW1pdGl2ZVN1YnJlZ2lvbihvdXRwdXQucHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIG1h
eE91dHB1dFJlY3QgPSBmaWx0ZXIuc2NhbGVkUmVjdEJ5RmlsdGVyU2NhbGUobWF4T3V0cHV0UmVj
dCk7CisKKyAgICBhdXRvIHRpbGVJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGls
ZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIXRpbGVJ
bWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0
JiB0aWxlSW1hZ2VDb250ZXh0ID0gdGlsZUltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgdGls
ZUltYWdlQ29udGV4dC50cmFuc2xhdGUoLXRpbGVSZWN0LmxvY2F0aW9uKCkpOworICAgIHRpbGVJ
bWFnZUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdC5s
b2NhdGlvbigpKTsKKworICAgIGF1dG8gdGlsZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRv
TmF0aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2VCdWZmZXIpKTsKKyAgICBpZiAoIXRpbGVJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5U
cmFuc2Zvcm07Ci0gICAgcGF0dGVyblRyYW5zZm9ybS50cmFuc2xhdGUoaW5NYXhFZmZlY3RMb2Nh
dGlvbiAtIG1heEVmZmVjdExvY2F0aW9uKTsKKyAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0
ZSh0aWxlUmVjdC5sb2NhdGlvbigpIC0gbWF4T3V0cHV0UmVjdC5sb2NhdGlvbigpKTsKKworICAg
IGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UucmVsZWFzZU5vbk51bGwo
KSwgeyB0cnVlLCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOwogCi0gICAgYXV0byBwYXR0ZXJu
ID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZUNvcHkucmVsZWFzZU5vbk51bGwoKSwgeyB0cnVl
LCB0cnVlLCBwYXR0ZXJuVHJhbnNmb3JtIH0pOworICAgIEdyYXBoaWNzQ29udGV4dCYgb3V0cHV0
Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRG
aWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmls
dGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5z
ZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxS
ZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7
CisgICAgb3V0cHV0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRw
dXRJbWFnZVJlY3Quc2l6ZSgpKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0m
IEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5kZXggNDliZDk5ZjA5NDQ3ZGFlMWNm
MDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4uZmJiMGExMDYyY2I5ZGY0MmVmMDIzMGU2MjQ2NzZhMTFl
YTI3Mjc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5oCkBAIC0yMiwyNyArMjIsMjUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAKIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RkVUaWxlPiBjcmVhdGUoRmlsdGVyJik7CisgICAgc3RhdGljIFJl
ZjxGRVRpbGU+IGNyZWF0ZSgpOwogCiBwcml2YXRlOgotICAgIEZFVGlsZShGaWx0ZXImKTsKKyAg
ICBGRVRpbGUoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVUaWxlIjsgfQorICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVGlsZTsgfQorICAgIEZsb2F0UmVjdCBjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0
UmVjdCgpKSk7IH0KKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJ
TFRFUl9FRkZFQ1QoRkVUaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IDc3NGU2ODJlM2I0ODU5
YmI2ZTIwNmExZDJiZmFlYjBjZWE5MTlmMGIuLjIyZDRmOTljNzJlNTI3MTdiNDg4MTliNWM0OWMz
YWYzZTc0YzdkZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTQ4LDggKzQ4LDggQEAgc3RhdGlj
IGNvbnN0IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJv
b3Qgb2YgbQogc3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQogc3Rh
dGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKIAotRkVUdXJidWxlbmNlOjpG
RVR1cmJ1bGVuY2UoRmlsdGVyJiBmaWx0ZXIsIFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpUdXJidWxlbmNlKQorRkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUg
dHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVt
T2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKKyAgICA6IEZpbHRlckVmZmVj
dChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVHVyYnVsZW5jZSkKICAgICAsIG1fdHlwZSh0eXBlKQog
ICAgICwgbV9iYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKICAgICAsIG1fYmFzZUZyZXF1
ZW5jeVkoYmFzZUZyZXF1ZW5jeVkpCkBAIC01OSw5ICs1OSw5IEBAIEZFVHVyYnVsZW5jZTo6RkVU
dXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNl
RnJlcXVlCiB7CiB9CiAKLVJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKEZp
bHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0
aXRjaFRpbGVzKQorUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVs
ZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZ
LCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UoZmlsdGVyLCB0eXBlLCBiYXNlRnJlcXVl
bmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lY
LCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKIH0KIAog
Ym9vbCBGRVR1cmJ1bGVuY2U6OnNldFR5cGUoVHVyYnVsZW5jZVR5cGUgdHlwZSkKQEAgLTM2Niwy
MiArMzY2LDIwIEBAIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0CiAgICAgcmV0dXJuIHRvSW50QmFz
ZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAotdm9pZCBG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNv
bnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGlu
dCBzdGFydFksIGludCBlbmRZKSBjb25zdAordm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24o
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25z
dCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdAogewog
ICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKIAotICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0g
YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICBmaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyKCkuZmls
dGVyU2NhbGUoKSk7CiAgICAgRmxvYXRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsg
c3RhcnRZKTsKICAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJS
ZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZnJv
bSA9IGZpbHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpLnZhbHVlX29yKEFmZmlu
ZVRyYW5zZm9ybSgpKTsKKyAgICBGbG9hdFNpemUgaW52ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVy
LmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgp
IH07CiAKICAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CiAgICAgICAg
IHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CiAgICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVn
aW9uLngoKSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRo
KCk7ICsreCkgewogICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAg
ICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGludmVyc2VUcmFuc2Zyb20ubWFwUG9pbnQo
cG9pbnQpOworICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gcG9pbnQuc2NhbGVk
KGludmVyc2VTY2FsZS53aWR0aCgpLCBpbnZlcnNlU2NhbGUuaGVpZ2h0KCkpOwogICAgICAgICAg
ICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChwYWludGlu
Z0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwogICAgICAgICAgICAgcGl4ZWxBcnJheS5z
ZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwp
OwogICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwpAQCAtMzkxLDI2ICszODks
MzIgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYKIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiB7Ci0gICAgcGFy
YW1ldGVycy0+ZmlsdGVyLT5maWxsUmVnaW9uKCpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFy
YW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJz
LT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOworICAgIHBhcmFtZXRlcnMtPmVmZmVjdC0+Zmls
bFJlZ2lvbigqcGFyYW1ldGVycy0+ZmlsdGVyLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgcGFy
YW1ldGVycy0+ZmlsdGVyUmVnaW9uLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0
ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOwog
fQogCi12b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK0Zsb2F0UmVj
dCBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAg
cmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsK
K30KKworYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKK3sKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKworICAg
IGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJy
YXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byYgb3V0cHV0UGl4
ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRTaXplIHJlc3Vs
dFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUo
ZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CisgICAgSW50U2l6ZSBvdXRwdXRTaXplKG91dHB1dC5h
YnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKSk7CiAKLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAg
IHJldHVybjsKKyAgICBpZiAob3V0cHV0U2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgb3V0cHV0
UGl4ZWxBcnJheS56ZXJvRmlsbCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkuc2l6ZSgpKTsKKyAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUob3V0
cHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7CiAKICAgICBmbG9hdCBiYXNlRnJlcXVl
bmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7CiAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2Jh
c2VGcmVxdWVuY3lZOwpAQCAtNDE5LDE0ICs0MjMsMTcgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YShtX3Nl
ZWQsIHRpbGVTaXplLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVkpOwogICAgIGluaXRQ
YWludChwYWludGluZ0RhdGEpOwogCi0gICAgYXV0byBhcmVhID0gcmVzdWx0U2l6ZS5hcmVhKCk7
CisgICAgYXV0byBhcmVhID0gb3V0cHV0U2l6ZS5hcmVhKCk7CiAgICAgaWYgKGFyZWEuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGludCBoZWlnaHQgPSByZXN1bHRTaXplLmhlaWdodCgpOworICAgIGludCBoZWlnaHQgPSBvdXRw
dXRTaXplLmhlaWdodCgpOwogCiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdodCAv
IDg7CiAgICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVk
PihhcmVhIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CisKKyAgICBh
dXRvIGZpbHRlclJlZ2lvbiA9IG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpOworCiAgICAgaWYg
KG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7CiAgICAgICAgIFBhcmFsbGVsSm9iczxGaWxsUmVn
aW9uUGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwogCkBAIC00NDAsOCArNDQ3LDEwIEBA
IHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9iczsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgRmlsbFJlZ2lvblBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIo
aSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgICAgICAg
ICAgICAgIHBhcmFtcy5maWx0ZXIgPSAmZmlsdGVyOworICAgICAgICAgICAgICAgIHBhcmFtcy5l
ZmZlY3QgPSB0aGlzOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJSZWdpb24gPSBmaWx0
ZXJSZWdpb247CisgICAgICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmb3V0cHV0UGl4
ZWxBcnJheTsKICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gJnBhaW50aW5n
RGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RpdGNoRGF0YSA9IHN0aXRjaERhdGE7CiAg
ICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0YXJ0WTsKQEAgLTQ1MiwxMiArNDYxLDEz
IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29t
IGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAgIGZp
bGxSZWdpb24oZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEs
IDAsIGhlaWdodCk7CisgICAgZmlsbFJlZ2lvbihmaWx0ZXIsIG91dHB1dFBpeGVsQXJyYXksIGZp
bHRlclJlZ2lvbiwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworICAgIHJl
dHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IDYzN2QyODQ4OTVl
MjMxNTIyYTlhYzg1N2YyYzgzZmY3MjBkNDUyZTUuLmRiMDZjYWI1YjQzY2IwNGJkZWYwODc4YmVm
NjA4MDAzYmRiNWM1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5j
bHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCi0jaW5j
bHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNyArMzcsNyBA
QCBlbnVtIGNsYXNzIFR1cmJ1bGVuY2VUeXBlIHsKIAogY2xhc3MgRkVUdXJidWxlbmNlIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGRVR1cmJ1bGVuY2U+
IGNyZWF0ZShGaWx0ZXImLCBUdXJidWxlbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0
LCBib29sKTsKKyAgICBzdGF0aWMgUmVmPEZFVHVyYnVsZW5jZT4gY3JlYXRlKFR1cmJ1bGVuY2VU
eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1P
Y3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAogICAgIFR1cmJ1bGVuY2VU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIHNldFR5cGUoVHVy
YnVsZW5jZVR5cGUpOwpAQCAtOTMsNyArOTIsOSBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICBz
dHJ1Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMgewotICAgICAgICBGRVR1cmJ1bGVuY2UqIGZpbHRl
cjsKKyAgICAgICAgY29uc3QgRmlsdGVyKiBmaWx0ZXI7CisgICAgICAgIEZFVHVyYnVsZW5jZSog
ZWZmZWN0OworICAgICAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKICAgICAgICAgVWludDhDbGFt
cGVkQXJyYXkqIHBpeGVsQXJyYXk7CiAgICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRh
OwogICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7CkBAIC0xMDMsMTkgKzEwNCwxNyBAQCBw
cml2YXRlOgogCiAgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFy
YW1ldGVycyopOwogCi0gICAgRkVUdXJidWxlbmNlKEZpbHRlciYsIFR1cmJ1bGVuY2VUeXBlLCBm
bG9hdCwgZmxvYXQsIGludCwgZmxvYXQsIGJvb2wpOworICAgIEZFVHVyYnVsZW5jZShUdXJidWxl
bmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQg
bnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0K
LQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7CiAgICAg
U3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNl
RnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKICAgICBDb2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNo
RGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdE
YXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmls
bFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERh
dGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsKKyAgICB2b2lkIGZpbGxSZWdpb24oY29u
c3QgRmlsdGVyJiwgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdp
b24sIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZ
KSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwogCkBA
IC0xMjksMyArMTI4LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVUdXJidWxlbmNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXgg
YTJkOTk3OTNiMGRiMjI1OGJjNDc2ZGRjYzI5YzBjZTI2MTEwYmMxZi4uNmQyMWE2M2EzZTRiY2Rj
MDJhZjBmZmYwNWFkOWUzMjM4YWVjY2ViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIxLDU4ICsyMiw5NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGaWx0ZXJFZmZl
Y3Q7CiAKLWNsYXNzIEZpbHRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlcj4geworY2xhc3Mg
RmlsdGVyIDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1YmxpYzoKLSAgICBGaWx0ZXIoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgZmxvYXQgZmlsdGVyU2NhbGUg
PSAxKQotICAgICAgICA6IG1fYWJzb2x1dGVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0pCi0g
ICAgICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKLSAgICB7IH0KLSAgICB2aXJ0dWFs
IH5GaWx0ZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3Vy
Y2VJbWFnZSk7IH0KLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UoKSB7IHJldHVybiBtX3Nv
dXJjZUltYWdlLmdldCgpOyB9CisgICAgZW51bSBjbGFzcyBDbGlwT3BlcmF0aW9uIHsgSW50ZXJz
ZWN0LCBVbml0ZSB9OwogCi0gICAgRmxvYXRTaXplIGZpbHRlclJlc29sdXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICB2b2lkIHNldEZpbHRlclJlc29sdXRp
b24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1fZmlsdGVyUmVzb2x1dGlv
biA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGUoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9CisgICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShjb25z
dCBGbG9hdFNpemUmIGZpbHRlclNjYWxlKSB7IG1fZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsg
fQogCi0gICAgZmxvYXQgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxl
OyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShmbG9hdCBzY2FsZSkgeyBtX2ZpbHRlclNjYWxl
ID0gc2NhbGU7IH0KKyAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKyAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkgeyBtX3NvdXJjZUltYWdlUmVjdCA9IHNvdXJj
ZUltYWdlUmVjdDsgfQorICAgIAorICAgIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0
IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKSB7IG1fZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9u
OyB9CiAKLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0U291cmNlSW1h
Z2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1hZ2UgPSBX
VEZNb3ZlKHNvdXJjZUltYWdlKTsgfQorICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KIAogICAgIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQogICAgIHZv
aWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpIHsgbV9yZW5k
ZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzU1ZHRmls
dGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDU1NGaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIENsaXBPcGVyYXRpb24gY2xpcE9wZXJh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcE9wZXJhdGlvbjsgfQogCi0gICAgdmlydHVhbCBG
bG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25zdCB7
IHJldHVybiBzaXplICogbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgCi0gICAgdmlydHVhbCBG
bG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0
ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBz
Y2FsZWRTaXplQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0IHsgcmV0
dXJuIHNpemUgKiBtX2ZpbHRlclNjYWxlOyB9CisKKyAgICBGbG9hdFJlY3Qgc2NhbGVkUmVjdEJ5
RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QpIGNvbnN0CisgICAgeworICAg
ICAgICBhdXRvIHNjYWxlZEltYWdlUmVjdCA9IGltYWdlUmVjdDsKKyAgICAgICAgc2NhbGVkSW1h
Z2VSZWN0LnNjYWxlKG1fZmlsdGVyU2NhbGUpOworICAgICAgICByZXR1cm4gc2NhbGVkSW1hZ2VS
ZWN0OworICAgIH0KKworICAgIEZsb2F0UmVjdCBtYXhQcmltaXRpdmVTdWJyZWdpb24oY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaW50ZXJzZWN0aW9uKHByaW1pdGl2ZVN1YnJlZ2lvbiwgbV9maWx0ZXJSZWdpb24pOworICAg
IH0KKworICAgIEZsb2F0UmVjdCBjbGlwVG9QcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRS
ZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2xpcE9wZXJhdGlvbiA9PSBDbGlwT3BlcmF0aW9u
OjpJbnRlcnNlY3QgPyBpbnRlcnNlY3Rpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24p
IDogdW5pb25SZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICB9CisKKyAg
ICBGbG9hdFJlY3QgY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYg
aW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBjbGlwVG9QcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBt
YXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKSk7CisgICAgfQorCisgICAg
RmxvYXRQb2ludCBtYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihjb25zdCBGbG9hdFBvaW50
JiB1c2VyU3BhY2VQb2ludCwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgRmxvYXRQb2lu
dCBhYnNvbHV0ZVBvaW50ID0gbWFwUG9pbnQodXNlclNwYWNlUG9pbnQsIHByaW1pdGl2ZVN1YnJl
Z2lvbiwgc2NhbGVkUmVjdEJ5RmlsdGVyU2NhbGUocHJpbWl0aXZlU3VicmVnaW9uKSk7CisgICAg
ICAgIEZsb2F0UmVjdCBhYnNvbHV0ZUltYWdlUmVjdCA9IHNjYWxlZFJlY3RCeUZpbHRlclNjYWxl
KGltYWdlUmVjdCk7CisgICAgICAgIGFic29sdXRlUG9pbnQubW92ZUJ5KC1hYnNvbHV0ZUltYWdl
UmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlUG9pbnQ7CisgICAgfQor
CisgICAgdmlydHVhbCBib29sIGFwcGx5RmlsdGVyKCkgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJv
dGVjdGVkOgotICAgIGV4cGxpY2l0IEZpbHRlcihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29s
dXRpb24pCi0gICAgICAgIDogbV9maWx0ZXJSZXNvbHV0aW9uKGZpbHRlclJlc29sdXRpb24pCisg
ICAgRmlsdGVyKEZpbHRlcjo6VHlwZSBmaWx0ZXJUeXBlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRl
clNjYWxlLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCisgICAgICAgIDogRmlsdGVyRnVu
Y3Rpb24oZmlsdGVyVHlwZSkKKyAgICAgICAgLCBtX2ZpbHRlclNjYWxlKGZpbHRlclNjYWxlKQor
ICAgICAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlwT3BlcmF0aW9uKQorICAgIHsKKyAgICB9CisK
KyAgICBGaWx0ZXIoRmlsdGVyOjpUeXBlIGZpbHRlclR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmls
dGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQorICAgICAgICA6
IEZpbHRlckZ1bmN0aW9uKGZpbHRlclR5cGUpCisgICAgICAgICwgbV9maWx0ZXJTY2FsZShmaWx0
ZXJTY2FsZSkKKyAgICAgICAgLCBtX3NvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpCisg
ICAgICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVnaW9uKQorICAgICAgICAsIG1fY2xpcE9w
ZXJhdGlvbihjbGlwT3BlcmF0aW9uKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6CisgICAgRmxv
YXRTaXplIG1fZmlsdGVyU2NhbGU7CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0Owor
ICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKKwogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
bV9zb3VyY2VJbWFnZTsKLSAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwotICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwogICAgIFJlbmRlcmluZ01vZGUgbV9y
ZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwotICAgIGZsb2F0
IG1fZmlsdGVyU2NhbGUgeyAxIH07CisKKyAgICBDbGlwT3BlcmF0aW9uIG1fY2xpcE9wZXJhdGlv
biB7IENsaXBPcGVyYXRpb246OkludGVyc2VjdCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJCb3VuZGFyeVNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4ZGZiNTVhNDE4M2Y3YzQ2
MjQ0NzMyYTc0ZGJjOWMzOWNjYjYxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckJvdW5kYXJ5U2V0LmgKQEAgLTAsMCAr
MSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJCb3VuZGFyeVNl
dCB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBGbGFncyB7CisgICAgICAgIEhhc1ggICAgICA9
IDEgPDwgMCwKKyAgICAgICAgSGFzWSAgICAgID0gMSA8PCAxLAorICAgICAgICBIYXNXaWR0aCAg
PSAxIDw8IDIsCisgICAgICAgIEhhc0hlaWdodCA9IDEgPDwgMworICAgIH07CisKKyAgICBGaWx0
ZXJCb3VuZGFyeVNldCgpID0gZGVmYXVsdDsKKworICAgIEZpbHRlckJvdW5kYXJ5U2V0KGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRhcmllcywgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKKyAgICAgICAg
OiBtX2JvdW5kYXJpZXMoYm91bmRhcmllcykKKyAgICAgICAgLCBtX2ZsYWdzKGZsYWdzKQorICAg
IHsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiB4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpIYXNYKSkKKyAgICAgICAgICAgIHJl
dHVybiBtX2JvdW5kYXJpZXMueCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHkoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1kpKQorICAgICAgICAgICAgcmV0dXJuIG1f
Ym91bmRhcmllcy55KCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gd2lkdGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1dpZHRoKSkKKyAgICAgICAgICAgIHJldHVybiBt
X2JvdW5kYXJpZXMud2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBoZWlnaHQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc0hlaWdodCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9ib3VuZGFyaWVzLmhlaWdodCgpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGFyaWVzOworICAgIE9w
dGlvblNldDxGbGFncz4gbV9mbGFnczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRmYzViYmNhNTFjMzQ4ZWM3ZjYzZTRjYzkyN2Ri
MTA4Li4yYmU4YzcwYmYyOGYzN2RmOTkzM2FiYTg3ZWUxNTkyZGEzOTc5ZWZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCkBAIC0yNiwxMTggKzI2LDE0IEBACiAKICNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLSNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSA8YXJtX25lb24uaD4KLSNlbmRpZgotCi0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVj
dChGaWx0ZXImIGZpbHRlciwgVHlwZSB0eXBlKQotICAgIDogbV9maWx0ZXIoZmlsdGVyKQotICAg
ICwgbV9maWx0ZXJFZmZlY3RDbGFzc1R5cGUodHlwZSkKLXsKLX0KLQotRmlsdGVyRWZmZWN0Ojp+
RmlsdGVyRWZmZWN0KCkgPSBkZWZhdWx0OwotCi12b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIG1fYWJzb2x1dGVQYWludFJlY3QgPSBJbnRSZWN0
KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKLSAgICAgICAgbV9h
YnNvbHV0ZVBhaW50UmVjdC51bml0ZShlZmZlY3QtPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y2xpcEFi
c29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBjbGlwIHRvIHByaW1p
dGl2ZSBzdWJyZWdpb24sIHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmIChtX2NsaXBzVG9Cb3Vu
ZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJl
Y3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fic29sdXRlUGFpbnRS
ZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci19Ci0KLUZsb2F0
UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBv
aW50IHVzZXJTcGFjZVBvaW50KSBjb25zdAotewotICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2lu
dCA9IG1hcFBvaW50KHVzZXJTcGFjZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwg
bV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlQnko
LW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGFic29sdXRlUG9p
bnQ7Ci19Ci0KLUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKLXsKLSAgICBJbnRQb2lu
dCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsKLSAgICBsb2NhdGlv
bi5tb3ZlQnkoLWVmZmVjdFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIEludFJlY3QobG9j
YXRpb24sIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZpbHRl
ckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JiBzcmNSZWN0
KSBjb25zdAorRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlIHR5
cGUpCisgICAgOiBGaWx0ZXJGdW5jdGlvbih0eXBlKQogewotICAgIEFTU0VSVChoYXNSZXN1bHQo
KSk7Ci0KLSAgICBGbG9hdFNpemUgc2NhbGU7Ci0gICAgSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtOwotICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSkudHJhbnNsYXRlKC1tX2Fi
c29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiB0cmFuc2Zvcm0ubWFwUmVj
dChzcmNSZWN0KTsKLX0KLQotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCkKLXsKLSAgICAvLyBGRVRpbGUsIEZFVHVyYnVsZW5jZSwgRkVG
bG9vZCBkb24ndCBoYXZlIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGZpbHRlciByZWdpb24gYXMg
dW5pdGUgcmVjdC4KLSAgICBGbG9hdFJlY3Qgc3VicmVnaW9uOwotICAgIGlmICh1bnNpZ25lZCBu
dW1iZXJPZklucHV0RWZmZWN0cyA9IGlucHV0RWZmZWN0cygpLnNpemUoKSkgewotICAgICAgICBz
dWJyZWdpb24gPSBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1iZXJPZklucHV0RWZm
ZWN0czsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvIGlucHV0UHJpbWl0aXZlU3VicmVnaW9uID0g
aW5wdXRFZmZlY3QoaSktPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAg
ICAgICAgICAgc3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVnaW9uKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZQotICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdp
b25JblVzZXJTcGFjZSgpOwotCi0gICAgLy8gQWZ0ZXIgY2FsbGluZyBkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24gb24gdGhlIHRhcmdldCBlZmZlY3QsIHJlc2V0IHRoZSBzdWJyZWdp
b24gYWdhaW4gZm9yIDxmZVRpbGU+LgotICAgIGlmIChmaWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmls
dGVyRWZmZWN0VHlwZVRpbGUpCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJl
Z2lvbkluVXNlclNwYWNlKCk7Ci0KLSAgICBhdXRvIGJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFy
aWVzKCk7Ci0gICAgaWYgKGhhc1goKSkKLSAgICAgICAgc3VicmVnaW9uLnNldFgoYm91bmRhcmll
cy54KCkpOwotICAgIGlmIChoYXNZKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRZKGJvdW5kYXJp
ZXMueSgpKTsKLSAgICBpZiAoaGFzV2lkdGgoKSkKLSAgICAgICAgc3VicmVnaW9uLnNldFdpZHRo
KGJvdW5kYXJpZXMud2lkdGgoKSk7Ci0gICAgaWYgKGhhc0hlaWdodCgpKQotICAgICAgICBzdWJy
ZWdpb24uc2V0SGVpZ2h0KGJvdW5kYXJpZXMuaGVpZ2h0KCkpOwotCi0gICAgc2V0RmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKHN1YnJlZ2lvbik7Ci0KLSAgICBhdXRvIGFic29sdXRlU3VicmVnaW9u
ID0gbV9maWx0ZXIuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHN1YnJlZ2lvbik7Ci0gICAg
YXV0byBmaWx0ZXJSZXNvbHV0aW9uID0gbV9maWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpOwotICAg
IGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlclJlc29sdXRpb24pOwotICAgIC8vIFNhdmUg
dGhpcyBiZWZvcmUgY2xpcHBpbmcgc28gd2UgY2FuIHVzZSBpdCB0byBtYXAgbGlnaHRpbmcgcG9p
bnRzIGZyb20gdXNlciBzcGFjZSB0byBidWZmZXIgY29vcmRpbmF0ZXMuCi0gICAgc2V0VW5jbGlw
cGVkQWJzb2x1dGVTdWJyZWdpb24oYWJzb2x1dGVTdWJyZWdpb24pOwotCi0gICAgLy8gQ2xpcCBl
dmVyeSBmaWx0ZXIgZWZmZWN0IHRvIHRoZSBmaWx0ZXIgcmVnaW9uLgotICAgIGF1dG8gYWJzb2x1
dGVTY2FsZWRGaWx0ZXJSZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNv
bHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKLSAgICBhYnNv
bHV0ZVN1YnJlZ2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwotCi0g
ICAgc2V0TWF4RWZmZWN0UmVjdChhYnNvbHV0ZVN1YnJlZ2lvbik7Ci0gICAgcmV0dXJuIHN1YnJl
Z2lvbjsKIH0KIAogRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2ln
bmVkIG51bWJlcikgY29uc3QKQEAgLTE0Niw1MTQgKzQyLDk5IEBAIEZpbHRlckVmZmVjdCogRmls
dGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0CiAgICAgcmV0dXJu
IG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBj
b2xsZWN0RWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QqZWZmZWN0LCBIYXNoU2V0PGNvbnN0IEZp
bHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFsbEVmZmVjdHMuYWRkKGVmZmVjdCk7
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwotICAgICAgICBjb2xsZWN0RWZmZWN0
cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVybiBhbGxFZmZlY3RzLnNpemUoKTsK
LX0KLQotdW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkg
Y29uc3QKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0g
ICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKHRoaXMsIGFsbEVmZmVjdHMpOwotfQotCi12b2lkIEZp
bHRlckVmZmVjdDo6YXBwbHkoKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJp
bWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAgIGlmICho
YXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0
RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7
Ci0gICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBDb252ZXJ0IGlucHV0IHJlc3VsdHMgdG8g
dGhlIGN1cnJlbnQgZWZmZWN0J3MgY29sb3Igc3BhY2UuCi0gICAgICAgIHRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoaW4sIGkpOwotICAgIH0KLQotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOwot
Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIg
PDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKTpcbiAgZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPDwgIlxuICBl
ZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzIDw8ICJcbiAgYWJzb2x1dGVV
bmNsaXBwZWRTdWJyZWdpb24gIiA8PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uIDw8ICJc
biAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0IDw8ICJcbiAgbWF4
RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdCA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8
IG1fZmlsdGVyLmZpbHRlclNjYWxlKCkgPDwgIlxuICBmaWx0ZXIgcmVzb2x1dGlvbiAiIDw8IG1f
ZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKSk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVj
dC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHJlcXVpcmVzVmFs
aWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGlucHV0RWZmZWN0KGkpLT5jb3JyZWN0RmlsdGVy
UmVzdWx0SWZOZWVkZWQoKTsKLSAgICB9CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRz
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9maWx0ZXItZWZmZWN0cy0xLyNGaWx0ZXJQcmltaXRpdmVT
dWJSZWdpb24uCisgICAgRmxvYXRSZWN0IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb247CiAgICAg
Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCBy
ZXR1cm4gZWFybGllci4KLSAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKLX0KLQotdm9pZCBG
aWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKLXsKLSAgICAvLyBN
dXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIgZm9ybWF0cyBjYW5u
b3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KLSAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFn
ZUFycmF5LmRhdGEoKTsKLSAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVu
Z3RoKCk7Ci0KLSAgICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBj
b21wbGV0ZSBwaXhlbHMKLSAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOwotCi0j
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49
IDY0KSB7Ci0gICAgICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFy
cmF5TGVuZ3RoICYgfjB4M2YpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAvLyBJbmNyZW1l
bnRzIHBpeGVsRGF0YSBieSA2NC4KLSAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4
ZWxzID0gdmxkNHFfdTgocGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFs
WzBdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNd
KTsKLSAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBp
eGVscy52YWxbMV0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKLSAgICAgICAgICAgIHNpeHRlZW5Q
aXhlbHMudmFsWzJdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhl
bHMudmFsWzNdKTsKLSAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVs
cyk7Ci0gICAgICAgICAgICBwaXhlbERhdGEgKz0gNjQ7Ci0gICAgICAgIH0gd2hpbGUgKHBpeGVs
RGF0YSA8IGxhc3RQaXhlbCk7Ci0KLSAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOwot
ICAgICAgICBpZiAoIXBpeGVsQXJyYXlMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotI2VuZGlmCi0KLSAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7Ci0K
LSAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVz
dGluZyBjb2xvciBjb21wb25lbnRzIGlmIG5lY2Vzc2FyeQotICAgIHdoaWxlICgtLW51bVBpeGVs
cyA+PSAwKSB7Ci0gICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCi0g
ICAgICAgIHVpbnQ4X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7Ci0gICAgICAgIC8vIENsYW1wIGVh
Y2ggY29tcG9uZW50IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgaWYgKCpw
aXhlbERhdGEgPiBhKQotICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOwotICAgICAgICAg
ICAgKytwaXhlbERhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBo
YQotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpj
bGVhclJlc3VsdCgpCi17Ci0gICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IG51bGxwdHI7Ci0gICAg
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpCi17Ci0gICAgLy8gQ2xlYXIgYWxsIHJlc3VsdHMsIHJl
Z2FyZGxlc3MgdGhhdCB0aGUgY3VycmVudCBlZmZlY3QgaGFzCi0gICAgLy8gYSByZXN1bHQuIENh
biBiZSB1c2VkIGlmIGFuIGVmZmVjdCBpcyBpbiBhbiBlcnJvbmVvdXMgc3RhdGUuCi0gICAgaWYg
KGhhc1Jlc3VsdCgpKQotICAgICAgICBjbGVhclJlc3VsdCgpOwotCi0gICAgdW5zaWduZWQgc2l6
ZSA9IG1faW5wdXRFZmZlY3RzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKS0+Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKCk7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVm
ZmVyUmVzdWx0KCkKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJG
aWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1
ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIWhhc1Jlc3VsdCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKLQotICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBt
X2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0
Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJS
ZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIC8vIERvbid0IHVzZSB0aGUgaW5w
dXQncyBzdWJyZWdpb24gZm9yIDxmZVRpbGU+LgorICAgIGlmICghbV9pbnB1dEVmZmVjdHMuaXNF
bXB0eSgpICYmIGZpbHRlclR5cGUoKSAhPSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkgewor
ICAgICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQorICAgICAgICAgICAg
ZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi51bml0ZShlZmZlY3QtPmNhbGN1bGF0ZVByaW1pdGl2
ZVN1YnJlZ2lvbihmaWx0ZXIpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGVmYXVsdFByaW1pdGl2
ZVN1YnJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKIAotICAgIEludFJlY3QgZGVzdGlu
YXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBp
ZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1
bHQtPnB1dFBpeGVsQnVmZmVyKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRp
b25SZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dFBpeGVs
QnVmZmVyKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwotICAg
IHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwotfQorICAgIEZsb2F0UmVjdCBwcmlt
aXRpdmVTdWJyZWdpb247CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0
Ojp1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgSW50U2l6ZSBzY2FsZWRT
aXplKHJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92
ZXJmbG93PigpICogNDsKLSAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSBVaW50OENsYW1wZWRB
cnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChjaGVja2VkQXJlYSk7Ci0gICAgaWYgKCFwaXhl
bEFycmF5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjb3B5VW5tdWx0aXBsaWVkUmVz
dWx0KCpwaXhlbEFycmF5LCByZWN0LCBjb2xvclNwYWNlKTsKLSAgICByZXR1cm4gcGl4ZWxBcnJh
eTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0WChtX2JvdW5kYXJ5U2V0LngoKS52YWx1ZV9v
cihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLngoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lv
bi5zZXRZKG1fYm91bmRhcnlTZXQueSgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdp
b24ueSgpKSk7CisgICAgcHJpbWl0aXZlU3VicmVnaW9uLnNldFdpZHRoKG1fYm91bmRhcnlTZXQu
d2lkdGgoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLndpZHRoKCkpKTsKKyAg
ICBwcmltaXRpdmVTdWJyZWdpb24uc2V0SGVpZ2h0KG1fYm91bmRhcnlTZXQuaGVpZ2h0KCkudmFs
dWVfb3IoZGVmYXVsdFByaW1pdGl2ZVN1YnJlZ2lvbi5oZWlnaHQoKSkpOworICAgIAorICAgIHJl
dHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
RmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJlY3QsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQorRmxvYXRSZWN0
IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKSBjb25zdAogewotICAgIEludFNpemUgc2NhbGVkU2l6ZShyZWN0LnNpemUoKSk7
Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkU2l6ZSkp
OwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgYXV0
byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0g
ICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOwotICAgIGlmICghcGl4ZWxBcnJheSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKnBpeGVsQXJyYXks
IHJlY3QsIGNvbG9yU3BhY2UpOwotICAgIHJldHVybiBwaXhlbEFycmF5OworICAgIGF1dG8gcHJp
bWl0aXZlU3VicmVnaW9uID0gY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7Cisg
ICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9u
KTsKIH0KIAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNj
YWxlZFJlY3Quc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgSW50U2l6ZSBzY2Fs
ZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNjYWxlZFBhaW50
U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIC8vIEluaXRpYWxpemUg
dGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJlbHkgY292
ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwgc2NhbGVk
UmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXplLndpZHRo
KCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9uLmxlbmd0aCgpKTsK
KyAgICBpZiAobV9maWx0ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmlt
YWdlUmVjdCgpOwogCi0gICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMgbm90IGlu
dGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCi0gICAgaWYgKHNjYWxlZFJlY3QubWF4WCgpIDw9IDAg
fHwgc2NhbGVkUmVjdC5tYXhZKCkgPD0gMCB8fCBzY2FsZWRSZWN0LngoKSA+PSBzY2FsZWRQYWlu
dFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0LnkoKSA+PSBzY2FsZWRQYWludFNpemUuaGVpZ2h0
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0OwogCi0gICAgaW50
IHhPcmlnaW4gPSBzY2FsZWRSZWN0LngoKTsKLSAgICBpbnQgeERlc3QgPSAwOwotICAgIGlmICh4
T3JpZ2luIDwgMCkgewotICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwotICAgICAgICB4T3JpZ2lu
ID0gMDsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKSB7CisgICAgICAg
IGF1dG8mIGlucHV0ID0gKmVmZmVjdC0+ZmlsdGVySW1hZ2UoKTsKKyAgICAgICAgaW1hZ2VSZWN0
LnVuaXRlKGlucHV0LmltYWdlUmVjdCgpKTsKICAgICB9Ci0gICAgaW50IHhFbmQgPSBzY2FsZWRS
ZWN0Lm1heFgoKTsKLSAgICBpZiAoeEVuZCA+IHNjYWxlZFBhaW50U2l6ZS53aWR0aCgpKQotICAg
ICAgICB4RW5kID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCk7Ci0KLSAgICBpbnQgeU9yaWdpbiA9
IHNjYWxlZFJlY3QueSgpOwotICAgIGludCB5RGVzdCA9IDA7Ci0gICAgaWYgKHlPcmlnaW4gPCAw
KSB7Ci0gICAgICAgIHlEZXN0ID0gLXlPcmlnaW47Ci0gICAgICAgIHlPcmlnaW4gPSAwOwotICAg
IH0KLSAgICBpbnQgeUVuZCA9IHNjYWxlZFJlY3QubWF4WSgpOwotICAgIGlmICh5RW5kID4gc2Nh
bGVkUGFpbnRTaXplLmhlaWdodCgpKQotICAgICAgICB5RW5kID0gc2NhbGVkUGFpbnRTaXplLmhl
aWdodCgpOwotCi0gICAgaW50IHNpemUgPSAoeEVuZCAtIHhPcmlnaW4pICogNDsKLSAgICBpbnQg
ZGVzdGluYXRpb25TY2FubGluZSA9IHNjYWxlZFJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgaW50IHNv
dXJjZVNjYW5saW5lID0gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkgKiA0OwotICAgIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogc2NhbGVk
UmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7Ci0gICAgY29uc3QgdWludDhfdCogc291cmNlUGl4
ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogc2NhbGVkUGFpbnRTaXplLndpZHRoKCkp
ICsgeE9yaWdpbikgKiA0OwogCi0gICAgd2hpbGUgKHlPcmlnaW4gPCB5RW5kKSB7Ci0gICAgICAg
IG1lbWNweShkZXN0aW5hdGlvblBpeGVsLCBzb3VyY2VQaXhlbCwgc2l6ZSk7Ci0gICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWwgKz0gZGVzdGluYXRpb25TY2FubGluZTsKLSAgICAgICAgc291cmNlUGl4
ZWwgKz0gc291cmNlU2NhbmxpbmU7Ci0gICAgICAgICsreU9yaWdpbjsKLSAgICB9CisgICAgcmV0
dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRp
dmVTdWJyZWdpb24pOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK0ludFJlY3QgRmlsdGVyRWZmZWN0Ojpj
YWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsK
LSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBzaXplX3Qgcm93Qnl0ZXMgPSBpbnB1dFNpemUud2lk
dGgoKSAqIDQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSBpbnB1
dFNpemUud2lkdGgoKTsKLSAgICBzcmMuaGVpZ2h0ID0gaW5wdXRTaXplLmhlaWdodCgpOwotICAg
IHNyYy5yb3dCeXRlcyA9IHJvd0J5dGVzOwotICAgIHNyYy5kYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oc291cmNlLmRhdGEoKSk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAg
ZGVzdC53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOwotICAgIGRlc3QuaGVpZ2h0ID0gaW5wdXRT
aXplLmhlaWdodCgpOwotICAgIGRlc3Qucm93Qnl0ZXMgPSByb3dCeXRlczsKLSAgICBkZXN0LmRh
dGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihkZXN0aW5hdGlvbi5kYXRhKCkpOwotCi0gICAg
dkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7Ci0jZWxzZQotICAgIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5k
YXRhKCk7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0
U2l6ZS5hcmVhKCkgKiA0KS52YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9u
ZW50ID0gZGVzdGluYXRpb24uZGF0YSgpOwotCi0gICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8
IGVuZCkgewotICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107Ci0gICAgICAg
IGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25l
bnRbMF0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21w
b25lbnRbMl0pICogYWxwaGEgLyAyNTU7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNd
ID0gYWxwaGE7Ci0gICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OwotICAgICAgICBkZXN0aW5h
dGlvbkNvbXBvbmVudCArPSA0OwotICAgIH0KLSNlbmRpZgorICAgIGF1dG8gcHJpbWl0aXZlU3Vi
cmVnaW9uID0gY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CisgICAgaWYgKHBy
aW1pdGl2ZVN1YnJlZ2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0
byBpbWFnZVJlY3QgPSBjYWxjdWxhdGVJbWFnZVJlY3QoZmlsdGVyLCBwcmltaXRpdmVTdWJyZWdp
b24pOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci5zY2FsZWRSZWN0QnlGaWx0
ZXJTY2FsZShpbWFnZVJlY3QpKTsKIH0KIAotc3RhdGljIHZvaWQgY29weVVucHJlbXVsdGlwbHlp
bmdBbHBoYShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFNpemUmIGlucHV0U2l6ZSkKK3ZvaWQgRmlsdGVyRWZm
ZWN0OjpjbGVhckZpbHRlckltYWdlc1JlY3Vyc2l2ZSgpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEUp
Ci0gICAgc2l6ZV90IHJvd0J5dGVzID0gaW5wdXRTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdklt
YWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gaW5wdXRTaXplLndpZHRoKCk7Ci0gICAg
c3JjLmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBzcmMucm93Qnl0ZXMgPSByb3dC
eXRlczsKLSAgICBzcmMuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNvdXJjZS5kYXRh
KCkpOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSBpbnB1dFNp
emUud2lkdGgoKTsKLSAgICBkZXN0LmhlaWdodCA9IGlucHV0U2l6ZS5oZWlnaHQoKTsKLSAgICBk
ZXN0LnJvd0J5dGVzID0gcm93Qnl0ZXM7Ci0gICAgZGVzdC5kYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZGVzdGluYXRpb24uZGF0YSgpKTsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlE
YXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZS5kYXRhKCk7Ci0gICAgY29uc3Qg
dWludDhfdCogZW5kID0gc291cmNlQ29tcG9uZW50ICsgKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS52
YWx1ZSgpOwotICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGluYXRpb24u
ZGF0YSgpOwotICAgIHdoaWxlIChzb3VyY2VDb21wb25lbnQgPCBlbmQpIHsKLSAgICAgICAgaW50
IGFscGhhID0gc291cmNlQ29tcG9uZW50WzNdOwotICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAg
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VD
b21wb25lbnRbMF0pICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFsxXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzFdKSAqIDI1NSAvIGFs
cGhhOwotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSBzdGF0aWNfY2FzdDxp
bnQ+KHNvdXJjZUNvbXBvbmVudFsyXSkgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzBdID0gMDsKLSAgICAgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzFdID0gMDsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9u
ZW50WzJdID0gMDsKLSAgICAgICAgfQotICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudFszXSA9
IGFscGhhOwotICAgICAgICBzb3VyY2VDb21wb25lbnQgKz0gNDsKLSAgICAgICAgZGVzdGluYXRp
b25Db21wb25lbnQgKz0gNDsKLSAgICB9Ci0jZW5kaWYKLX0KLQotc3RkOjpvcHRpb25hbDxQaXhl
bEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEJ1ZmZlciYg
cGl4ZWxCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBl
cmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBk
byBpdCBkaXJlY3RseS4KLQotICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCks
IHBpeGVsQnVmZmVyLnNpemUoKSk7Ci0gICAgZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGluYXRpb25SZWN0LnNpemUoKSk7Ci0gICAgLy8gQ3JlYXRl
IGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGluY29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBi
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJp
bmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwg
UGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLSAgICBidWZmZXItPnB1dFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBkZXN0
aW5hdGlvblJlY3QpOwotICAgIHJldHVybiBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2Uo
dGFyZ2V0Q29sb3JTcGFjZSwgKmJ1ZmZlciwgZGVzdGluYXRpb25SZWN0LCBwaXhlbEJ1ZmZlci5m
b3JtYXQoKS5hbHBoYUZvcm1hdCk7CisgICAgLy8gQ2xlYXIgYWxsIHJlc3VsdHMsIHJlZ2FyZGxl
c3MgdGhhdCB0aGUgY3VycmVudCBlZmZlY3QgaGFzCisgICAgLy8gYSByZXN1bHQuIENhbiBiZSB1
c2VkIGlmIGFuIGVmZmVjdCBpcyBpbiBhbiBlcnJvbmVvdXMgc3RhdGUuCisgICAgY2xlYXJGaWx0
ZXJJbWFnZSgpOworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCisgICAg
ICAgIGVmZmVjdC0+Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoKTsKIH0KIAotc3RkOjpvcHRp
b25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiB0YXJnZXRDb2xvclNwYWNlLCBJbWFn
ZUJ1ZmZlciYgaW5wdXRCdWZmZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0QWxwaGFGb3JtYXQpCitib29sIEZpbHRlckVmZmVjdDo6YXBwbHkoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIGRvbmUgbW9y
ZSBkaXJlY3RseSB1c2luZyBQaXhlbEJ1ZmZlckNvbnZlcnNpb24uCisgICAgaWYgKG1fZmlsdGVy
SW1hZ2UpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgRmxvYXRTaXplIGNsYW1wZWRTaXpl
ID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBhdXRvIHByaW1p
dGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOworICAg
IGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBz
cGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lvbgotICAg
IGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwg
bV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRD
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghY29udmVydGVkQnVmZmVy
KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgLy8gQ29sb3Igc3BhY2UgY29u
dmVyc2lvbiBoYXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1
ZmZlciB0byBhbm90aGVyCi0gICAgY29udmVydGVkQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKGlucHV0QnVmZmVyLCByZWN0KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGNhbGN1bGF0
ZUltYWdlUmVjdChmaWx0ZXIsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgYXV0byBhYnNvbHV0
ZUltYWdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyLnNjYWxlZFJlY3RCeUZpbHRlclNj
YWxlKGltYWdlUmVjdCkpOwogICAgIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IG91
dHB1dEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHRhcmdldENvbG9yU3BhY2UgfTsK
LSAgICByZXR1cm4gY29udmVydGVkQnVmZmVyLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHJlY3Qp
OwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0
aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQotewotICAgIC8vIENvbnZlcnRzIHRoZSBkYXRh
IHN0b3JlZCBpbiBtX2ltYWdlQnVmZmVyUmVzdWx0LCBhbmQgc2F2ZSB0byBkZXN0aW5hdGlvbgot
ICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSBjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9y
U3BhY2UoY29sb3JTcGFjZSwgKm1faW1hZ2VCdWZmZXJSZXN1bHQsIHsgSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSwgb3V0cHV0Rm9ybWF0KTsKLSAgICBpZiAoIWNvbnZl
cnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgY29weUltYWdlQnl0ZXMoY29u
dmVydGVkUGl4ZWxCdWZmZXItPmRhdGEoKSwgZGVzdGluYXRpb24sIGRlc3RSZWN0KTsKLX0KLQot
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24o
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCi17Ci0gICAgLy8gQ29udmVydHMgdGhlIGRhdGEgc3RvcmVkIGluIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQvbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsCi0gICAgLy8gd2hp
Y2hldmVyIGlzbid0IG51bGwsIGFuZCBzYXZlIHRvIGRlc3RpbmF0aW9uCi0gICAgYXV0byBjb252
ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZShjb2xvclNw
YWNlLCBwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNvcHlJbWFnZUJ5dGVzKGNvbnZlcnRlZFBpeGVsQnVmZmVyLT5kYXRh
KCksIGRlc3RpbmF0aW9uLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9y
U3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKKyAgICBpZiAoYWJzb2x1dGVJbWFn
ZVJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0
ZUltYWdlUmVjdC5zaXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVy
TmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlz
dGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk7Ci0KLSAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKLSAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCi0gICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZXNQaXhl
bEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgICAgICAg
ICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgKmNv
bG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBB
U1NFUlQobV9pbWFnZUJ1ZmZlclJlc3VsdC0+Y29sb3JTcGFjZSgpID09IG1fcmVzdWx0Q29sb3JT
cGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1
bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCB7IEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwotICAgICAgICAgICAgaWYgKCFtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKGlucHV0U2l6ZSkpOwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZp
bHRlclNjYWxlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNw
YWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3Vs
dENvbG9yU3BhY2UgfTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQ
aXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsKLSAgICAgICAgICAgIGlm
ICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LT5kYXRhKCksIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRT
aXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVxdWlyZXNQaXhlbEJ1ZmZlckNvbG9y
U3BhY2VDb252ZXJzaW9uKGNvbG9yU3BhY2UpKSB7Ci0gICAgICAgIGNvcHlDb252ZXJ0ZWRQaXhl
bEJ1ZmZlclRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICptX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LCAqY29sb3JTcGFjZSwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29w
eUltYWdlQnl0ZXMobV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlv
biwgcmVjdCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQotewotICAgIEFT
U0VSVChoYXNSZXN1bHQoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFt
IDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBj
b3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAoIW1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KSB7Ci0gICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24g
ZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgotICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkg
ewotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihjb2xvclNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb252ZXJ0ZWRJbWFnZUJ1ZmZl
clRvRGVzdGluYXRpb24oZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0LT5j
b2xvclNwYWNlKCkgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICAgICAgICAgIFBpeGVsQnVm
ZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0gICAgICAgICAgICBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9
KTsKLSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBp
bnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgICAgICAgICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAg
ICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICAgICAgICAg
IEFTU0VSVChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09
IG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgICAgICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3Jt
YXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgaW5wdXRTaXplKTsK
LSAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEobV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpLCBpbnB1dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgewotICAgICAgICBj
b3B5Q29udmVydGVkUGl4ZWxCdWZmZXJUb0Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCAqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsICpjb2xvclNwYWNlLCByZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcyhtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+
ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7Ci19Ci0KLUltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRl
ckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCAlZHglZCIsIGZpbHRlck5hbWUo
KSwgdGhpcywgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkud2lkdGgoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUg
aXMgYWxsb3dlZC4KLSAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBpZiAobV9hYnNvbHV0
ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxv
YXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5m
aWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7Ci0g
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8
UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7Ci0KLSAgICAvLyBPbmx5IG9u
ZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgotICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAg
IEFTU0VSVCghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCk7Ci0KLSAgICBpZiAobV9hYnNvbHV0
ZVBhaW50UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRT
aXplKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07Ci0g
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9y
bWF0LCByZXN1bHRTaXplKTsKLSAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsK
LX0KLQotc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCkKLXsKLSAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVj
dCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRo
aXMpOwotCi0gICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KLSAgICBBU1NF
UlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBBU1NFUlQoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwotCi0gICAgSW50U2l6ZSByZXN1bHRTaXpl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1f
cmVzdWx0Q29sb3JTcGFjZSB9OwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4
ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwotICAgIHJldHVybiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLX0KLQotYm9vbCBGaWx0ZXJFZmZlY3Q6OnJlcXVpcmVz
UGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotI2lmIFVTRShDRykKLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFu
IGV4dHJhIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEg
Y29sb3IgY29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUg
aW5wdXQKLSAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVs
cwotICAgIHJldHVybiBkZXN0aW5hdGlvbkNvbG9yU3BhY2UgJiYgcmVzdWx0Q29sb3JTcGFjZSgp
ICE9ICpkZXN0aW5hdGlvbkNvbG9yU3BhY2U7Ci0jZWxzZQotICAgIC8vIEFkZGl0aW9uYWwgY29s
b3Igc3BhY2UgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIG9uIG5vbi1DRwotICAgIFVOVVNFRF9Q
QVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
fQotCi12b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSNpZiBVU0Uo
Q0cpCi0gICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5
LgotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBp
ZiAoIWhhc1Jlc3VsdCgpIHx8IGRlc3RpbmF0aW9uQ29sb3JTcGFjZSA9PSBtX3Jlc3VsdENvbG9y
U3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBXZSBjYW4gYXZvaWQgdGhp
cyBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSBJbWFnZUJ1ZmZlciBjb252ZXJzaW9uIGJ5IGFkZGlu
ZwotICAgIC8vIGNvbG9yIHNwYWNlIHRyYW5zZm9ybSBzdXBwb3J0IGZvciB0aGUge3ByZSx1bn1t
dWx0aXBsaWVkIGFycmF5cy4KLSAgICBpbWFnZUJ1ZmZlclJlc3VsdCgpLT50cmFuc2Zvcm1Ub0Nv
bG9yU3BhY2UoZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLQotICAgIG1fcmVzdWx0Q29sb3JTcGFj
ZSA9IGRlc3RpbmF0aW9uQ29sb3JTcGFjZTsKLQotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBzdGQ6
Om51bGxvcHQ7Ci0jZW5kaWYKKyAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHRoaXMtPmlzQWxwaGFJ
bWFnZSgpOworICAgIGF1dG8gaW1hZ2VDb2xvclNwYWNlID0gdGhpcy0+aW1hZ2VDb2xvclNwYWNl
KCk7CisgICAgCisgICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdlOjpjcmVhdGUocHJpbWl0
aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGFic29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2Us
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGltYWdlQ29sb3JTcGFjZSk7CisgICAgaWYg
KCFtX2ZpbHRlckltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMT0dfV0lUSF9T
VFJFQU0oRmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0
ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOiIKKyAgICAgICAgPDwgIlxuICBw
cmltaXRpdmVTdWJyZWdpb24gIiA8PCBwcmltaXRpdmVTdWJyZWdpb24KKyAgICAgICAgPDwgIlxu
ICBtYXhQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBmaWx0ZXIubWF4UHJpbWl0aXZlU3VicmVnaW9u
KHByaW1pdGl2ZVN1YnJlZ2lvbikKKyAgICAgICAgPDwgIlxuICBpbWFnZVJlY3QgIiA8PCBpbWFn
ZVJlY3QKKyAgICAgICAgPDwgIlxuICBhYnNvbHV0ZUltYWdlZ1JlY3QgIiA8PCBhYnNvbHV0ZUlt
YWdlUmVjdCk7CisgICAgCisgICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0
aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KKyAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
ZmlsdGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5
cGUgcmVwcmVzZW50YXRpb25UeXBlKSBjb25zdApAQCAtNjYzLDkgKzE0NCw3IEBAIFRleHRTdHJl
YW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
UmVwcmVzZW50YXRpb25UCiAgICAgCiAgICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXBy
ZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRT
Y29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1h
Z2UiLCBtX2FscGhhSW1hZ2UpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9wZXJhdGluZyBj
b2xvcnNwYWNlIiwgbV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZXN1bHQgY29sb3JzcGFjZSIsIG1fcmVzdWx0Q29sb3JTcGFjZSk7CiAgICAgICAgIHRz
IDw8ICJcbiIgPDwgaW5kZW50OwogICAgIH0KICAgICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApp
bmRleCAxMmRlZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0NzFjLi41MGNjYjBhNmRh
NjBkMzIxZTE0MGRmYWQ3NDNkYjA5OWMzOWUyYmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTIyLDE3
ICsyMiw5IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIgotI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0ZW50
LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9G
b3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSAiRmlsdGVyQm91bmRhcnlTZXQuaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5j
dGlvbi5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCiAKIG5hbWVzcGFjZSBXVEYgewogY2xh
c3MgVGV4dFN0cmVhbTsKQEAgLTQyLDIxNyArMzQsNjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsK
IAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3Rv
cjsKIAotZW51bSBGaWx0ZXJFZmZlY3RUeXBlIHsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93
biwKLSAgICBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2UsCi0gICAgRmlsdGVyRWZmZWN0VHlwZVRpbGUs
Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVNvdXJjZUlucHV0Ci19OwotCi1jbGFzcyBGaWx0ZXJFZmZl
Y3QgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVj
dCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBl
IDogdWludDhfdCB7Ci0gICAgICAgIEJsZW5kLAotICAgICAgICBDb2xvck1hdHJpeCwKLSAgICAg
ICAgQ29tcG9uZW50VHJhbnNmZXIsCi0gICAgICAgIENvbXBvc2l0ZSwKLSAgICAgICAgQ29udm9s
dmVNYXRyaXgsCi0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAgICAgRGlzcGxhY2VtZW50
TWFwLAotICAgICAgICBEcm9wU2hhZG93LAotICAgICAgICBGbG9vZCwKLSAgICAgICAgR2F1c3Np
YW5CbHVyLAotICAgICAgICBJbWFnZSwKLSAgICAgICAgTGlnaHRpbmcsCi0gICAgICAgIE1lcmdl
LAotICAgICAgICBNb3JwaG9sb2d5LAotICAgICAgICBPZmZzZXQsCi0gICAgICAgIFNwZWN1bGFy
TGlnaHRpbmcsCi0gICAgICAgIFRpbGUsCi0gICAgICAgIFR1cmJ1bGVuY2UsCi0gICAgICAgIFNv
dXJjZUFscGhhLAotICAgICAgICBTb3VyY2VHcmFwaGljCi0gICAgfTsKLSAgICB2aXJ0dWFsIH5G
aWx0ZXJFZmZlY3QoKTsKLQotICAgIHZvaWQgY2xlYXJSZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFy
UmVzdWx0c1JlY3Vyc2l2ZSgpOwotCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0
KCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB1bm11bHRpcGxpZWRSZXN1bHQoY29u
c3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6
bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVz
dWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4g
PSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwotICAgIHZvaWQgY29weVByZW11
bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRS
ZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0
KTsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5w
dXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29u
c3Q7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBt
X2lucHV0RWZmZWN0cy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mRWZmZWN0
SW5wdXRzKCkgY29uc3Q7Ci0gICAgCi0gICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0gc3BlY2lmaWMg
Y2hlY2tzLCBpZiB0aGUgbWVtb3J5IG1hbmFnbWVudCBpcyBub3QgZG9uZSBieSBGaWx0ZXJFZmZl
Y3QuCi0gICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0Ci0gICAgICAgICAgICB8fCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0Ci0gICAgICAgICAgICB8fCBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdDsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgSW50UmVjdCByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIAotICAgIC8vIFJl
Y3Vyc2VzIG9uIGlucHV0cy4KLSAgICBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCk7Ci0KLSAgICAvLyBTb2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBh
bHBoYSB2YWx1ZXMuCi0gICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2Fs
cGhhSW1hZ2U7IH0KLSAgICB2b2lkIHNldElzQWxwaGFJbWFnZShib29sIGFscGhhSW1hZ2UpIHsg
bV9hbHBoYUltYWdlID0gYWxwaGFJbWFnZTsgfQorICAgIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KKyAgICBG
aWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3Q7CiAKLSAgICBJ
bnRSZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVBhaW50
UmVjdDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgYWJz
b2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0
OyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0
ZXImKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9u
KGNvbnN0IEZpbHRlciYpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3Q7CisgICAgSW50UmVjdCBjYWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVjdChjb25zdCBG
aWx0ZXImKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RS
ZWN0OyB9IAorICAgIEZpbHRlckltYWdlKiBmaWx0ZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsdGVySW1hZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIGNsZWFyRmlsdGVySW1hZ2UoKSBvdmVycmlk
ZSB7IG1fZmlsdGVySW1hZ2UgPSBudWxscHRyOyB9CisgICAgdm9pZCBjbGVhckZpbHRlckltYWdl
c1JlY3Vyc2l2ZSgpOwogCi0gICAgdm9pZCBhcHBseSgpOworICAgIHZvaWQgc2V0Qm91bmRhcnlT
ZXQoY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJvdW5kYXJ5U2V0KSB7IG1fYm91bmRhcnlTZXQg
PSBib3VuZGFyeVNldDsgfQogCi0gICAgLy8gQ29ycmVjdCBhbnkgaW52YWxpZCBwaXhlbHMsIGlm
IG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3VsdCBvZiBhIGZpbHRlciBvcGVyYXRpb24uCi0gICAgLy8g
VGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdmFsaWQgcGl4ZWwgdmFsdWVzIG9uIGZpbHRl
ciBpbnB1dHMgYW5kIHRoZSBmaW5hbCByZXN1bHQuCi0gICAgLy8gT25seSB0aGUgYXJpdGhtZXRp
YyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8gcGVyZm9ybSBjb3JyZWN0aW9uLgotICAg
IHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSB7IH0KKyAgICBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsg
bV9vcGVyYXRpbmdDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQogCi0gICAgdmlydHVhbCB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ug
d2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgorICAgIHZpcnR1YWwgYm9vbCBpc0FscGhhSW1h
Z2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiBpbWFnZUNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGlu
Z0NvbG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZl
Y3RUeXBlKCkgY29uc3QgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVVua25vd247IH0KKyAgICB2
aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpID0gMDsKIAot
ICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gSW50T3V0c2V0
cygpOyB9CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBw
bHlDb3JlSW1hZ2UoY29uc3QgRmlsdGVyJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRp
ZgorICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBlbnVtIGNs
YXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OwogICAgIHZp
cnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91dHB1
dCkgY29uc3Q7CiAKLSAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgU1ZHIHNwZWNp
ZmljIGFuZCB3aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0g
ICAgLy8gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2
MTQuCi0gICAgYm9vbCBoYXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9Ci0gICAgdm9pZCBz
ZXRIYXNYKGJvb2wgdmFsdWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzWSgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShib29sIHZhbHVlKSB7
IG1faGFzWSA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNXaWR0aDsgfQotICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1ZSkgeyBtX2hhc1dp
ZHRoID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNIZWlnaHQ7IH0KLSAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFzSGVp
Z2h0ID0gdmFsdWU7IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
KSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZvaWQg
c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRhcmllcygpIGNvbnN0
IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0RWZmZWN0Qm91bmRh
cmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9lZmZlY3RCb3VuZGFy
aWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJz
b2x1dGVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1dGVVbmNsaXBwZWRT
dWJyZWdpb24gPSByOyB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2ludEZyb21Vc2VyU3Bh
Y2VUb0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBUeXBlIGZpbHRlckVmZmVj
dENsYXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOyB9Ci0K
LSAgICBGaWx0ZXImIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9Ci0gICAgY29uc3QgRmls
dGVyJiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQotCi0gICAgYm9vbCBjbGlw
c1RvQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwc1RvQm91bmRzOyB9Ci0gICAgdm9pZCBz
ZXRDbGlwc1RvQm91bmRzKGJvb2wgdmFsdWUpIHsgbV9jbGlwc1RvQm91bmRzID0gdmFsdWU7IH0K
LQotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29s
b3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0gICAgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9yZXN1bHRDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc3VsdENvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fcmVzdWx0
Q29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9Ci0gICAgdm9pZCB0
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOwot
ICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVj
dG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxp
emVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBu
b3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1
ZXM7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyRWZmZWN0KEZpbHRlciYsIFR5cGUp
OwotICAgIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsK
LQotICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIHN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwot
ICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9w
ZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCi0gICAgLy8gYWxwaGEg
aW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KLSAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKSB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgICAvLyBJZiBhIHByZS1tdWx0aXBsaWVkIGltYWdlLCBjaGVjayBldmVyeSBw
aXhlbCBmb3IgdmFsaWRpdHkgYW5kIGNvcnJlY3QgaWYgbmVjZXNzYXJ5LgotICAgIHZvaWQgZm9y
Y2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKLQotICAgIHZvaWQgY2xpcEFic29sdXRlUGFp
bnRSZWN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpID0gMDsKKyAgICBGaWx0ZXJFZmZlY3QoVHlwZSk7CiAKLSAgICB2b2lkIGNvcHlJbWFn
ZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgY29weUNvbnZl
cnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJl
Y3QmKTsKLSAgICB2b2lkIGNvcHlDb252ZXJ0ZWRQaXhlbEJ1ZmZlclRvRGVzdGluYXRpb24oVWlu
dDhDbGFtcGVkQXJyYXkmLCBQaXhlbEJ1ZmZlciYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pOwotICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IGNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFj
ZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBJbWFnZUJ1ZmZlciYsIGNvbnN0IEludFJl
Y3QmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVm
ZmVyPiBjb252ZXJ0UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgUGl4ZWxCdWZmZXImKTsKLSAgICAKLQotICAgIEZpbHRlciYgbV9maWx0ZXI7CiAg
ICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwotCi0gICAgUmVmUHRyPEltYWdl
QnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0KLSAgICBJbnRSZWN0IG1fYWJzb2x1
dGVQYWludFJlY3Q7Ci0gICAgCi0gICAgLy8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIGZpbHRlciBw
cmltaXRpdmUuIEluIFNWRyB0aGlzIGlzIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIGluIGFic29s
dXRlIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgLy8gVGhlIGFic29sdXRlIHBhaW50IHJlY3Qgc2hv
dWxkIG5ldmVyIGJlIGJpZ2dlciB0aGFuIG1fbWF4RWZmZWN0UmVjdC4KLSAgICBGbG9hdFJlY3Qg
bV9tYXhFZmZlY3RSZWN0OwogICAgIAotICAgIC8vIFRoZSBzdWJyZWdpb24gb2YgYSBmaWx0ZXIg
cHJpbWl0aXZlIGFjY29yZGluZyB0byB0aGUgU1ZHIEZpbHRlciBzcGVjaWZpY2F0aW9uIGluIGxv
Y2FsIGNvb3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaXMgU1ZHIHNwZWNpZmljIGFuZCBuZWVkcyB0
byBtb3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgotICAgIEZsb2F0UmVj
dCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCBtX2Jv
dW5kYXJ5U2V0OwogCi0gICAgLy8geCwgeSwgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgYWN0dWFs
IFNWR0ZFKkVsZW1lbnQuIElzIG5lZWRlZCB0byBkZXRlcm1pbmUgdGhlIHN1YnJlZ2lvbiBvZiB0
aGUKLSAgICAvLyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KLSAgICBGbG9hdFJl
Y3QgbV9lZmZlY3RCb3VuZGFyaWVzOwotICAgIAotICAgIC8vIGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbiBtYXBwZWQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMgYmVmb3JlIGNsaXBwaW5nLgotICAg
IEZsb2F0UmVjdCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uOworICAgIFJlZlB0cjxGaWx0
ZXJJbWFnZT4gbV9maWx0ZXJJbWFnZTsKIAotICAgIGJvb2wgbV9hbHBoYUltYWdlIHsgZmFsc2Ug
fTsKLSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0hlaWdodCB7
IGZhbHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRp
dmUgcmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24gb2YgaXRzIGlu
cHV0cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUgfTsKLQotI2lmIEVOQUJMRShE
RVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5l
YXJTUkdCKCkgfTsKLSNlbHNlCiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5n
Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Ci0jZW5kaWYKLSAg
ICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkgfTsKLSAgICAKLSAgICBjb25zdCBUeXBlIG1fZmlsdGVyRWZmZWN0
Q2xhc3NUeXBlOwogfTsKIAogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVjdCYpOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6Rmls
dGVyRWZmZWN0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLmlzRmlsdGVyRWZmZWN0KCk7IH0K
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0ZJTFRFUl9FRkZFQ1QoQ2xhc3NOYW1lKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OkNsYXNzTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlclR5
cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNsYXNzTmFtZTsgfSBcCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKaW5k
ZXggNTZiZTI0NzM2MWY1M2IzYzA5ZWNiNTcxMzIyYjc1YTc1NzNlOWNjNC4uODM3MWFhMjBmMjBm
NzRkMGVmYWUwYjY1NjY4ZjQ4MTEwZGMxNDZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0UmVuZGVy
ZXIuaApAQCAtMzYsMTcgKzM2LDE3IEBAIGNsYXNzIEZpbHRlckVmZmVjdFJlbmRlcmVyIHsKICAg
ICAKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRl
cmVyPiB0cnlDcmVhdGUoYm9vbCwgRmlsdGVyRWZmZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5RWZmZWN0cyhGaWx0ZXJFZmZlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5RWZm
ZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0ZXJFZmZlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVy
RWZmZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0
IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJSZXN1bHQoKSA9IDA7CiAgICAgCiAgICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0UmVu
ZGVyZXIoKSA9IGRlZmF1bHQ7CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgRmlsdGVyRWZmZWN0UmVu
ZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIo
RmlsdGVyRWZmZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVy
KGNvbnN0IEZpbHRlciYsIEZpbHRlckVmZmVjdCYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY1YmIxNTYzODFkZWMx
ZTBiYWMyMmQ5MTE5YzJlMGVkODBlNGFmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9uLmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uKFR5cGUgZmlsdGVyVHlwZSkKKyAgICA6
IG1fZmlsdGVyVHlwZShmaWx0ZXJUeXBlKQoreworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGF1
dG8mIGZpbHRlck5hbWVzKCkKK3sKKyAgICB1c2luZyBGaWx0ZXJOYW1lTWFwID0gSGFzaE1hcDxG
aWx0ZXJGdW5jdGlvbjo6VHlwZSwgQXRvbVN0cmluZywgV1RGOjpJbnRIYXNoPEZpbHRlckZ1bmN0
aW9uOjpUeXBlPiwgV1RGOjpTdHJvbmdFbnVtSGFzaFRyYWl0czxGaWx0ZXJGdW5jdGlvbjo6VHlw
ZT4+OworCisgICAgc3RhdGljIGF1dG8gZmlsdGVyTmFtZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQo
W10geworICAgICAgICBGaWx0ZXJOYW1lTWFwIGZpbHRlck5hbWVzID0geworICAgICAgICAgICAg
eyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6Q1NTRmlsdGVyLCAgICAgICAgICAgIkNTU0ZpbHRlciJf
cyAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0Zp
bHRlciwgICAgICAgICAgICJTVkdGaWx0ZXIiX3MgICAgICAgICAgIH0sCisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsICAgICAgICAgICAg
ICJGRUJsZW5kIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRUNvbG9yTWF0cml4LCAgICAgICAiRkVDb2xvck1hdHJpeCJfcyAgICAgICB9LAor
ICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2Zlciwg
IkZFQ29tcG9uZW50VHJhbnNmZXIiX3MgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFQ29tcG9zaXRlLCAgICAgICAgICJGRUNvbXBvc2l0ZSJfcyAgICAgICAgIH0sCisg
ICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4LCAgICAi
RkVDb252b2x2ZU1hdHJpeCJfcyAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcsICAgIkZFRGlmZnVzZUxpZ2h0aW5nIl9zICAgfSwKKyAg
ICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRGlzcGxhY2VtZW50TWFwLCAgICJG
RURpc3BsYWNlbWVudE1hcCJfcyAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpGRURyb3BTaGFkb3csICAgICAgICAiRkVEcm9wU2hhZG93Il9zICAgICAgICB9LAorICAg
ICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVGbG9vZCwgICAgICAgICAgICAgIkZF
Rmxvb2QiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5
cGU6OkZFR2F1c3NpYW5CbHVyLCAgICAgICJGRUdhdXNzaWFuQmx1ciJfcyAgICAgIH0sCisgICAg
ICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUltYWdlLCAgICAgICAgICAgICAiRkVJ
bWFnZSJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVNZXJnZSwgICAgICAgICAgICAgIkZFTWVyZ2UiX3MgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwgICAgICAgICJGRU1v
cnBob2xvZ3kiX3MgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpGRU9mZnNldCwgICAgICAgICAgICAiRkVPZmZzZXQiX3MgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLCAgIkZFU3Bl
Y3VsYXJMaWdodGluZyJfcyAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6
OkZFVGlsZSwgICAgICAgICAgICAgICJGRVRpbGUiX3MgICAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRVR1cmJ1bGVuY2UsICAgICAgICAiRkVUdXJi
dWxlbmNlIl9zICAgICAgICB9LAorCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpTb3VyY2VBbHBoYSwgICAgICAgICAiU291cmNlQWxwaGEiX3MgICAgICAgICB9LAorICAgICAg
ICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlR3JhcGhpYywgICAgICAgIlNvdXJj
ZUdyYXBoaWMiX3MgICAgICAgfQorCisgICAgICAgIH07CisgICAgICAgIHJldHVybiBmaWx0ZXJO
YW1lczsKKyAgICB9KCkpOworICAgIAorICAgIHJldHVybiBmaWx0ZXJOYW1lcy5nZXQoKTsKK30K
KworY29uc3QgQXRvbVN0cmluZyYgRmlsdGVyRnVuY3Rpb246OmZpbHRlck5hbWUoVHlwZSBmaWx0
ZXJUeXBlKQoreworICAgIGF1dG8gaXQgPSBmaWx0ZXJOYW1lcygpLmZpbmQoZmlsdGVyVHlwZSk7
CisgICAgQVNTRVJUKGl0ICE9IGZpbHRlck5hbWVzKCkuZW5kKCkpOworICAgIHJldHVybiBpdC0+
dmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yMDY1OGNiYTA5Y2ExZjBjN2I0NzQ0NzQ5ZTgwMTgxZTdjMTg1NDhiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJGdW5jdGlvbi5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgorCituYW1lc3BhY2UgV1RGIHsK
K2NsYXNzIFRleHRTdHJlYW07Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmls
dGVyOworCitjbGFzcyBGaWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbHRlckZ1
bmN0aW9uPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAg
ICAgIENTU0ZpbHRlciwKKyAgICAgICAgU1ZHRmlsdGVyLAorCisgICAgICAgIEZFTWluaW11bSwK
KworICAgICAgICBGRUJsZW5kID0gRkVNaW5pbXVtLAorICAgICAgICBGRUNvbG9yTWF0cml4LAor
ICAgICAgICBGRUNvbXBvbmVudFRyYW5zZmVyLAorICAgICAgICBGRUNvbXBvc2l0ZSwKKyAgICAg
ICAgRkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAgRkVEaWZmdXNlTGlnaHRpbmcsCisgICAgICAg
IEZFRGlzcGxhY2VtZW50TWFwLAorICAgICAgICBGRURyb3BTaGFkb3csCisgICAgICAgIEZFRmxv
b2QsCisgICAgICAgIEZFR2F1c3NpYW5CbHVyLAorICAgICAgICBGRUltYWdlLAorICAgICAgICBG
RU1lcmdlLAorICAgICAgICBGRU1vcnBob2xvZ3ksCisgICAgICAgIEZFT2Zmc2V0LAorICAgICAg
ICBGRVNwZWN1bGFyTGlnaHRpbmcsCisgICAgICAgIEZFVGlsZSwKKyAgICAgICAgRkVUdXJidWxl
bmNlLAorICAgICAgICBTb3VyY2VBbHBoYSwKKyAgICAgICAgU291cmNlR3JhcGhpYywKKworICAg
ICAgICBGRU1heGltdW0gPSBTb3VyY2VHcmFwaGljCisgICAgfTsKKworICAgIEZpbHRlckZ1bmN0
aW9uKFR5cGUpOworICAgIHZpcnR1YWwgfkZpbHRlckZ1bmN0aW9uKCkgPSBkZWZhdWx0OworCisg
ICAgVHlwZSBmaWx0ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlOyB9CisKKyAg
ICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6
OkNTU0ZpbHRlcjsgfQorICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2Zp
bHRlclR5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpDU1NGaWx0ZXIgfHwgbV9maWx0ZXJUeXBl
ID09IFR5cGU6OlNWR0ZpbHRlcjsgfQorICAgIGJvb2wgaXNGaWx0ZXJFZmZlY3QoKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlclR5cGUgPj0gVHlwZTo6RkVNaW5pbXVtICYmIG1fZmlsdGVyVHlwZSA8
PSBUeXBlOjpGRU1heGltdW07IH0KKworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBmaWx0
ZXJOYW1lKFR5cGUpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBzb3VyY2VBbHBoYU5h
bWUoKSB7IHJldHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUFscGhhKTsgfQorICAgIHN0YXRp
YyBjb25zdCBBdG9tU3RyaW5nJiBzb3VyY2VHcmFwaGljTmFtZSgpIHsgcmV0dXJuIGZpbHRlck5h
bWUoVHlwZTo6U291cmNlR3JhcGhpYyk7IH0KKyAgICBjb25zdCBBdG9tU3RyaW5nJiBmaWx0ZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gZmlsdGVyTmFtZShtX2ZpbHRlclR5cGUpOyB9CisKKyAgICB2
aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorICAgIHZp
cnR1YWwgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBjbGVhckZpbHRlckltYWdlKCkgeyB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBt
X2ZpbHRlclR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBX
VEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkNTU0ZpbHRlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OlNWR0ZpbHRlciwKKworICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlw
ZTo6RkVCbGVuZCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29s
b3JNYXRyaXgsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBv
bmVudFRyYW5zZmVyLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVD
b21wb3NpdGUsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZv
bHZlTWF0cml4LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaWZm
dXNlTGlnaHRpbmcsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURp
c3BsYWNlbWVudE1hcCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZF
RHJvcFNoYWRvdywKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRmxv
b2QsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1
ciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsCisgICAg
ICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdlLAorICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LAorICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVPZmZzZXQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsCisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpGRVRpbGUsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRVR1cmJ1bGVuY2UsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpTb3VyY2VBbHBoYSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5
cGU6OlNvdXJjZUdyYXBoaWMKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlcklt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
SW1hZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjNzBhNDhlMTBlNjQxM2FlZjY5YTUwNmNhMTFiOTQ1NGE2
NWE5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKworI2lm
IEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorI2VuZGlm
CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUu
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxGaWx0ZXJJbWFnZT4g
RmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwg
Y29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VS
ZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgQVNTRVJUKCFJbWFn
ZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0ZXJJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGlt
YWdlUmVjdCwgYWJzb2x1dGVJbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgcmVuZGVyaW5nTW9kZSwg
Y29sb3JTcGFjZSkpOworfQorCitGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UoY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNw
YWNlKQorICAgIDogbV9wcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAg
ICwgbV9pbWFnZVJlY3QoaW1hZ2VSZWN0KQorICAgICwgbV9hYnNvbHV0ZUltYWdlUmVjdChhYnNv
bHV0ZUltYWdlUmVjdCkKKyAgICAsIG1faXNBbHBoYUltYWdlKGlzQWxwaGFJbWFnZSkKKyAgICAs
IG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9y
U3BhY2UpCit7Cit9CisKK0ltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZTo6aW1hZ2VCdWZmZXIoKQor
eworICAgIGlmIChtX2ltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5n
ZXQoKTsKKworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1
dGVJbWFnZVJlY3Quc2l6ZSgpLCBtX3JlbmRlcmluZ01vZGUsIDEsIG1fY29sb3JTcGFjZSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgSW50UmVjdCByZWN0IHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0
LnNpemUoKSB9OworCisgICAgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBpeGVs
QnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpLCByZWN0KTsKKyAgICBlbHNlIGlmIChwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCisgICAgICAgIG1faW1hZ2VCdWZm
ZXItPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCksIHJlY3QpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZm
ZXIuZ2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAg
IHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsKKworICAgIHZJbWFnZV9C
dWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0aCgpOworICAgIHNyYy5o
ZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5dGVzID0gcm93Qnl0ZXM7
CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzb3VyY2UuZGF0YSgpKTsK
KworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRoID0gaW5wdXRTaXplLndp
ZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgZGVzdC5y
b3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgY29uc3QgdWlu
dDhfdCogc291cmNlQ29tcG9uZW50ID0gc291cmNlLmRhdGEoKTsKKyAgICBjb25zdCB1aW50OF90
KiBlbmQgPSBzb3VyY2VDb21wb25lbnQgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5wdXRTaXpl
LmFyZWEoKSAqIDQpOworICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gZGVzdGlu
YXRpb24uZGF0YSgpOworCisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVudCA8IGVuZCkgeworICAg
ICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAgICAgIGRlc3RpbmF0aW9u
Q29tcG9uZW50WzBdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMF0pICogYWxw
aGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8
aW50Pihzb3VyY2VDb21wb25lbnRbMV0pICogYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0
aW9uQ29tcG9uZW50WzJdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VDb21wb25lbnRbMl0pICog
YWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7Cisg
ICAgICAgIHNvdXJjZUNvbXBvbmVudCArPSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVu
dCArPSA0OworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBjb3B5VW5wcmVtdWx0aXBs
eWluZ0FscGhhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50U2l6ZSYgaW5wdXRTaXplKQoreworI2lmIFVTRShB
Q0NFTEVSQVRFKQorICAgIHNpemVfdCByb3dCeXRlcyA9IGlucHV0U2l6ZS53aWR0aCgpICogNDsK
KworICAgIHZJbWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy53aWR0aCA9IGlucHV0U2l6ZS53aWR0
aCgpOworICAgIHNyYy5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0KCk7CisgICAgc3JjLnJvd0J5
dGVzID0gcm93Qnl0ZXM7CisgICAgc3JjLmRhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihz
b3VyY2UuZGF0YSgpKTsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LndpZHRo
ID0gaW5wdXRTaXplLndpZHRoKCk7CisgICAgZGVzdC5oZWlnaHQgPSBpbnB1dFNpemUuaGVpZ2h0
KCk7CisgICAgZGVzdC5yb3dCeXRlcyA9IHJvd0J5dGVzOworICAgIGRlc3QuZGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICB2SW1hZ2VVbnBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vs
c2UKKyAgICBjb25zdCB1aW50OF90KiBzb3VyY2VDb21wb25lbnQgPSBzb3VyY2UuZGF0YSgpOwor
ICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHNvdXJjZUNvbXBvbmVudCArIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbnB1dFNpemUuYXJlYSgpICogNCk7CisgICAgdWludDhfdCogZGVzdGluYXRpb25D
b21wb25lbnQgPSBkZXN0aW5hdGlvbi5kYXRhKCk7CisgICAgd2hpbGUgKHNvdXJjZUNvbXBvbmVu
dCA8IGVuZCkgeworICAgICAgICBpbnQgYWxwaGEgPSBzb3VyY2VDb21wb25lbnRbM107CisgICAg
ICAgIGlmIChhbHBoYSkgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMF0gPSBz
dGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUNvbXBvbmVudFswXSkgKiAyNTUgLyBhbHBoYTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50WzFdID0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VD
b21wb25lbnRbMV0pICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkNvbXBv
bmVudFsyXSA9IHN0YXRpY19jYXN0PGludD4oc291cmNlQ29tcG9uZW50WzJdKSAqIDI1NSAvIGFs
cGhhOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRb
MF0gPSAwOworICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMV0gPSAwOworICAgICAg
ICAgICAgZGVzdGluYXRpb25Db21wb25lbnRbMl0gPSAwOworICAgICAgICB9CisgICAgICAgIGRl
c3RpbmF0aW9uQ29tcG9uZW50WzNdID0gYWxwaGE7CisgICAgICAgIHNvdXJjZUNvbXBvbmVudCAr
PSA0OworICAgICAgICBkZXN0aW5hdGlvbkNvbXBvbmVudCArPSA0OworICAgIH0KKyNlbmRpZgor
fQorCitzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVy
SWZFeGlzdHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCkKK3sKKyAgICByZXR1
cm4gYWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
ID8gbV91bnByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlciA6IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVm
ZmVyOworfQorCitQaXhlbEJ1ZmZlciogRmlsdGVySW1hZ2U6OnBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCit7CisgICAgYXV0byYgcGl4ZWxCdWZmZXIgPSBw
aXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KTsKKyAgICBpZiAocGl4ZWxCdWZmZXIpCisg
ICAgICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKKworICAgIFBpeGVsQnVmZmVyRm9y
bWF0IGZvcm1hdCB7IGFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fY29sb3JTcGFj
ZSB9OworCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkp
IHsKKyAgICAgICAgcGl4ZWxCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Z2V0UGl4ZWxCdWZmZXIoZm9y
bWF0LCB7IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkgfSk7CisgICAgICAgIGlmICgh
cGl4ZWxCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
ICZwaXhlbEJ1ZmZlci52YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxT
aXplKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVy
OjpzaXplTmVlZHNDbGFtcGluZyhsb2dpY2FsU2l6ZSkpOworCisgICAgcGl4ZWxCdWZmZXIgPSBQ
aXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRlKGZvcm1hdCwgbG9naWNhbFNpemUpOworICAgIGlmICghcGl4
ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGFscGhhRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBp
ZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVVucHJlbXVs
dGlwbHlpbmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhlbEJ1ZmZlci0+ZGF0
YSgpLCBsb2dpY2FsU2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF1dG8mIHNvdXJj
ZVBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpKQorICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEo
c291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgbG9naWNhbFNp
emUpOworICAgIH0KKworICAgIHJldHVybiAmcGl4ZWxCdWZmZXIudmFsdWUoKTsKK30KKworUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJJbWFnZTo6Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAgSW50U2l6
ZSBzaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhzaXplKSk7CisKKyAgICBhdXRvIGNoZWNrZWRBcmVhID0gc2l6ZS5hcmVhPFJlY29y
ZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAoY2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gVWlu
dDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoY2hlY2tlZEFyZWEpOworICAg
IGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29weVBp
eGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsIGNvbG9yU3BhY2UpOwor
ICAgIHJldHVybiBwaXhlbEJ1ZmZlcjsKK30KKworYm9vbCBGaWx0ZXJJbWFnZTo6cmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciB3ZSBuZWVkIHRoZSBzdGVwIG9mIGFuIGV4dHJh
IGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KKyAgICAvLyBXZSBvbmx5IG5lZWQgZXh0cmEgY29sb3Ig
Y29udmVyc2lvbiB3aGVuIDEpIGNvbG9yIHNwYWNlIGlzIGRpZmZlcmVudCBpbiB0aGUgaW5wdXQK
KyAgICAvLyBBTkQgMikgdGhlIGZpbHRlciBpcyBtYW5pcHVsYXRpbmcgcmF3IHBpeGVscworICAg
IHJldHVybiBjb2xvclNwYWNlICYmIG1fY29sb3JTcGFjZSAhPSAqY29sb3JTcGFjZTsKKyNlbHNl
CisgICAgLy8gQWRkaXRpb25hbCBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQg
b24gbm9uLUNHCisgICAgVU5VU0VEX1BBUkFNKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorfQorCit2b2lkIEZpbHRlckltYWdlOjpjb3B5SW1hZ2VCeXRlcyhjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSht
X2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBkZXN0
aW5hdGlvbiB0byB0cmFuc3BhcmVudCBibGFjaywgaWYgbm90IGVudGlyZWx5IGNvdmVyZWQgYnkg
dGhlIHNvdXJjZS4KKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCByZWN0
Lm1heFgoKSA+IGxvZ2ljYWxTaXplLndpZHRoKCkgfHwgcmVjdC5tYXhZKCkgPiBsb2dpY2FsU2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgbWVtc2V0KGRlc3RpbmF0aW9uLmRhdGEoKSwgMCwgZGVzdGlu
YXRpb24ubGVuZ3RoKCkpOworCisgICAgLy8gRWFybHkgcmV0dXJuIGlmIHRoZSByZWN0IGRvZXMg
bm90IGludGVyc2VjdCB3aXRoIHRoZSBzb3VyY2UuCisgICAgaWYgKHJlY3QubWF4WCgpIDw9IDAg
fHwgcmVjdC5tYXhZKCkgPD0gMCB8fCByZWN0LngoKSA+PSBsb2dpY2FsU2l6ZS53aWR0aCgpIHx8
IHJlY3QueSgpID49IGxvZ2ljYWxTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnQgeE9yaWdpbiA9IHJlY3QueCgpOworICAgIGludCB4RGVzdCA9IDA7CisgICAgaWYgKHhP
cmlnaW4gPCAwKSB7CisgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CisgICAgICAgIHhPcmlnaW4g
PSAwOworICAgIH0KKyAgICBpbnQgeEVuZCA9IHJlY3QubWF4WCgpOworICAgIGlmICh4RW5kID4g
bG9naWNhbFNpemUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IGxvZ2ljYWxTaXplLndpZHRoKCk7
CisKKyAgICBpbnQgeU9yaWdpbiA9IHJlY3QueSgpOworICAgIGludCB5RGVzdCA9IDA7CisgICAg
aWYgKHlPcmlnaW4gPCAwKSB7CisgICAgICAgIHlEZXN0ID0gLXlPcmlnaW47CisgICAgICAgIHlP
cmlnaW4gPSAwOworICAgIH0KKyAgICBpbnQgeUVuZCA9IHJlY3QubWF4WSgpOworICAgIGlmICh5
RW5kID4gbG9naWNhbFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHlFbmQgPSBsb2dpY2FsU2l6ZS5o
ZWlnaHQoKTsKKworICAgIGludCBzaXplID0gKHhFbmQgLSB4T3JpZ2luKSAqIDQ7CisgICAgaW50
IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSByZWN0LndpZHRoKCkgKiA0OworICAgIGludCBzb3VyY2VT
Y2FubGluZSA9IGxvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlEZXN0ICogcmVjdC53aWR0aCgpKSAr
IHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291cmNlUGl4ZWwgPSBzb3VyY2UuZGF0
YSgpICsgKCh5T3JpZ2luICogbG9naWNhbFNpemUud2lkdGgoKSkgKyB4T3JpZ2luKSAqIDQ7CisK
KyAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9u
UGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSBk
ZXN0aW5hdGlvblNjYW5saW5lOworICAgICAgICBzb3VyY2VQaXhlbCArPSBzb3VyY2VTY2FubGlu
ZTsKKyAgICAgICAgKyt5T3JpZ2luOworICAgIH0KK30KKworc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4gRmlsdGVySW1hZ2U6OmdldENvbnZlcnRlZFBpeGVsQnVmZmVyKEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlciwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50
UmVjdCYgcmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpIGNvbnN0Cit7Cisg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Qu
c2l6ZSgpKTsKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgd2l0aCB0aGUgY29ycmVjdCBj
b2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUgY29sb3Igc3BhY2UgY29udmVyc2lv
bgorICAgIGF1dG8gY29udmVydGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNs
YW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBjb2xvclNwYWNlLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghY29udmVydGVkSW1hZ2VCdWZmZXIpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgLy8gQ29sb3Igc3BhY2UgY29udmVyc2lvbiBo
YXBwZW5zIGludGVybmFsbHkgd2hlbiBkcmF3aW5nIGZyb20gb25lIGltYWdlIGJ1ZmZlciB0byBh
bm90aGVyCisgICAgY29udmVydGVkSW1hZ2VCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoaW1hZ2VCdWZmZXIsIHJlY3QpOworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IGFs
cGhhRm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGNvbG9yU3BhY2UgfTsKKyAgICByZXR1cm4g
Y29udmVydGVkSW1hZ2VCdWZmZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgcmVjdCk7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhl
bEJ1ZmZlcihQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
YWxwaGFGb3JtYXQsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKSBjb25zdAorewor
ICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBwaXhlbEJ1ZmZlci5zaXplKCkpOworICAgIEZs
b2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUo
KSk7CisKKyAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4
ZWxCdWZmZXIKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFt
cGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgbV9jb2xvclNwYWNlLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBpbWFnZUJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxC
dWZmZXIsIHJlY3QpOworICAgIHJldHVybiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqaW1hZ2VC
dWZmZXIsIGFscGhhRm9ybWF0LCByZWN0LCBjb2xvclNwYWNlKTsKK30KKwordm9pZCBGaWx0ZXJJ
bWFnZTo6Y29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCit7CisgICAg
YXV0byogcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KSA/ICZw
aXhlbEJ1ZmZlcklmRXhpc3RzKGFscGhhRm9ybWF0KS52YWx1ZSgpIDogbnVsbHB0cjsKKworICAg
IGlmICghcGl4ZWxCdWZmZXIpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xv
clNwYWNlQ29udmVyc2lvbihjb2xvclNwYWNlKSkgeworICAgICAgICAgICAgLy8gV2UgcHJlZmVy
IGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCisgICAgICAgICAgICBpZiAoYXV0
byBpbWFnZUJ1ZmZlciA9IGltYWdlQnVmZmVySWZFeGlzdHMoKSkgeworICAgICAgICAgICAgICAg
IEludFJlY3QgcmVjdCB7IHsgfSwgbV9hYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkgfTsKKyAgICAg
ICAgICAgICAgICBpZiAoYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGdldENvbnZlcnRlZFBp
eGVsQnVmZmVyKCppbWFnZUJ1ZmZlciwgYWxwaGFGb3JtYXQsIHJlY3QsICpjb2xvclNwYWNlKSkK
KyAgICAgICAgICAgICAgICAgICAgY29weUltYWdlQnl0ZXMoY29udmVydGVkUGl4ZWxCdWZmZXIt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHNyY1JlY3QpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBpeGVsQnVmZmVyID0gdGhpcy0+
cGl4ZWxCdWZmZXIoYWxwaGFGb3JtYXQpOworICAgIH0KKworICAgIGlmICghcGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JTcGFj
ZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKKyAgICAgICAgaWYgKGF1dG8gY29udmVydGVkUGl4
ZWxCdWZmZXIgPSBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGFscGhhRm9y
bWF0LCAqY29sb3JTcGFjZSkpCisgICAgICAgICAgICBjb3B5SW1hZ2VCeXRlcyhjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjb3B5SW1hZ2VCeXRlcyhwaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0
aW5hdGlvbiwgc3JjUmVjdCk7Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0
aXBsaWVkUGl4ZWxCdWZmZXIoKQoreworICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlw
bGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgor
ICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkUGl4ZWxC
dWZmZXItPmRhdGEoKTsKKyAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5LmRhdGEo
KTsKKyAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXkubGVuZ3RoKCk7CisKKyAg
ICAvLyBXZSBtdXN0IGhhdmUgZm91ciBieXRlcyBwZXIgcGl4ZWwsIGFuZCBjb21wbGV0ZSBwaXhl
bHMKKyAgICBBU1NFUlQoIShwaXhlbEFycmF5TGVuZ3RoICUgNCkpOworCisjaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQorICAgIGlmIChwaXhlbEFycmF5TGVuZ3RoID49IDY0KSB7CisgICAg
ICAgIHVpbnQ4X3QqIGxhc3RQaXhlbCA9IHBpeGVsRGF0YSArIChwaXhlbEFycmF5TGVuZ3RoICYg
fjB4M2YpOworICAgICAgICBkbyB7CisgICAgICAgICAgICAvLyBJbmNyZW1lbnRzIHBpeGVsRGF0
YSBieSA2NC4KKyAgICAgICAgICAgIHVpbnQ4eDE2eDRfdCBzaXh0ZWVuUGl4ZWxzID0gdmxkNHFf
dTgocGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzBdID0gdm1pbnFf
dTgoc2l4dGVlblBpeGVscy52YWxbMF0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAg
ICAgIHNpeHRlZW5QaXhlbHMudmFsWzFdID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMV0s
IHNpeHRlZW5QaXhlbHMudmFsWzNdKTsKKyAgICAgICAgICAgIHNpeHRlZW5QaXhlbHMudmFsWzJd
ID0gdm1pbnFfdTgoc2l4dGVlblBpeGVscy52YWxbMl0sIHNpeHRlZW5QaXhlbHMudmFsWzNdKTsK
KyAgICAgICAgICAgIHZzdDRxX3U4KHBpeGVsRGF0YSwgc2l4dGVlblBpeGVscyk7CisgICAgICAg
ICAgICBwaXhlbERhdGEgKz0gNjQ7CisgICAgICAgIH0gd2hpbGUgKHBpeGVsRGF0YSA8IGxhc3RQ
aXhlbCk7CisKKyAgICAgICAgcGl4ZWxBcnJheUxlbmd0aCAmPSAweDNmOworICAgICAgICBpZiAo
IXBpeGVsQXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisK
KyAgICBpbnQgbnVtUGl4ZWxzID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisKKyAgICAvLyBJdGVy
YXRlIG92ZXIgZWFjaCBwaXhlbCwgY2hlY2tpbmcgYWxwaGEgYW5kIGFkanVzdGluZyBjb2xvciBj
b21wb25lbnRzIGlmIG5lY2Vzc2FyeQorICAgIHdoaWxlICgtLW51bVBpeGVscyA+PSAwKSB7Cisg
ICAgICAgIC8vIEFscGhhIGlzIHRoZSA0dGggYnl0ZSBpbiBhIHBpeGVsCisgICAgICAgIHVpbnQ4
X3QgYSA9ICoocGl4ZWxEYXRhICsgMyk7CisgICAgICAgIC8vIENsYW1wIGVhY2ggY29tcG9uZW50
IHRvIGFscGhhLCBhbmQgaW5jcmVtZW50IHRoZSBwaXhlbCBsb2NhdGlvbgorICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgaWYgKCpwaXhlbERhdGEgPiBh
KQorICAgICAgICAgICAgICAgICpwaXhlbERhdGEgPSBhOworICAgICAgICAgICAgKytwaXhlbERh
dGE7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW5jcmVtZW50IGZvciBhbHBoYQorICAgICAgICAr
K3BpeGVsRGF0YTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsdGVySW1hZ2U6OnRyYW5zZm9ybVRvQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyNpZiBVU0UoQ0cp
CisgICAgLy8gQ0cgaGFuZGxlcyBjb2xvciBzcGFjZSBhZGp1c3RtZW50cyBpbnRlcm5hbGx5Lgor
ICAgIFVOVVNFRF9QQVJBTShjb2xvclNwYWNlKTsKKyNlbHNlCisgICAgaWYgKGNvbG9yU3BhY2Ug
PT0gbV9jb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogV2UgY2Fu
IGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lv
biBieSBhZGRpbmcKKyAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhl
IHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSB0
aGlzLT5pbWFnZUJ1ZmZlcigpKQorICAgICAgICBpbWFnZUJ1ZmZlci0+dHJhbnNmb3JtVG9Db2xv
clNwYWNlKGNvbG9yU3BhY2UpOworCisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKKyAg
ICBtX3VucHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworICAgIG1fcHJl
bXVsdGlwbGllZFBpeGVsQnVmZmVyID0gc3RkOjpudWxsb3B0OworI2VuZGlmCit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmE4ZTc2ZjA0OWZmMjRm
YTVmODQ1MGJhYTQ3NjVlNjAwMjgzYThjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCkBAIC0wLDAgKzEsODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgUGl4ZWxCdWZmZXI7CisKK2NsYXNzIEZp
bHRlckltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVySW1hZ2U+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmUHRyPEZpbHRlckltYWdlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1
YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgRmxv
YXRSZWN0IGltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VSZWN0OyB9CisgICAgSW50
UmVjdCBhYnNvbHV0ZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVJbWFnZVJl
Y3Q7IH0KKyAgICBJbnRSZWN0IHJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
SW1hZ2UmIG9yaWdpbikgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUltYWdlUmVjdCAtIG9yaWdp
bi5hYnNvbHV0ZUltYWdlUmVjdCgpLmxvY2F0aW9uKCk7IH0KKworICAgIGJvb2wgaXNBbHBoYUlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FscGhhSW1hZ2U7IH0KKyAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KKyAgICBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X2NvbG9yU3BhY2U7IH0KKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZF
eGlzdHMoKSB7IHJldHVybiBtX2ltYWdlQnVmZmVyOyB9CisgICAgSW1hZ2VCdWZmZXIqIGltYWdl
QnVmZmVyKCk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgcGl4ZWxCdWZmZXJJ
ZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKyAgICBQaXhlbEJ1ZmZlciogcGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJl
Y3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQp
OworICAgIHZvaWQgY29weVBpeGVsQnVmZmVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlv
biwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgCisgICAgdm9pZCBj
b3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7CisgICAgdm9pZCB0cmFuc2Zvcm1Ub0Nv
bG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlKTsKKworcHJpdmF0ZToKKyAgICBGaWx0ZXJJ
bWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxw
aGFJbWFnZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisK
KyAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OworICAgIHZvaWQgY29weUltYWdl
Qnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxQ
aXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBj
b25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBnZXRDb252ZXJ0ZWRQaXhlbEJ1
ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24sIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247Cisg
ICAgRmxvYXRSZWN0IG1faW1hZ2VSZWN0OworICAgIEludFJlY3QgbV9hYnNvbHV0ZUltYWdlUmVj
dDsKKyAgICAKKyAgICBib29sIG1faXNBbHBoYUltYWdlIHsgZmFsc2UgfTsKKyAgICBSZW5kZXJp
bmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xv
clNwYWNlOworCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIHN0
ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IG1fdW5wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7Cisg
ICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKaW5kZXggOTRkMTk1MDEz
OWQ2ZDI0M2E4NjYxZTVlYTU1ZDIzNWE3Mzg5ZjVkNS4uZjE5MTcxZmY4NGU5MDQ5MjcyNjJlYWQx
MWFjNDFlMDgzYzU4ZWZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaApAQCAtMzgsNiArMzgsNyBAQCBlbnVtIExp
Z2h0VHlwZSB7CiAgICAgTFNfU1BPVAogfTsKIAorY2xhc3MgRmlsdGVyOwogY2xhc3MgRmlsdGVy
RWZmZWN0OwogCiBjbGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExpZ2h0U291
cmNlPiB7CkBAIC02NSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBMaWdodFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKIAotICAgIHZp
cnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5n
RGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSA9IDA7CiAgICAgLy8geiBp
cyBhIGZsb2F0IG51bWJlciwgc2luY2UgaXQgaXMgdGhlIGFscGhhIHZhbHVlIHNjYWxlZCBieSBh
IHVzZXIKICAgICAvLyBzcGVjaWZpZWQgInN1cmZhY2VTY2FsZSIgY29uc3RhbnQsIHdoaWNoIHR5
cGUgaXMgPG51bWJlcj4gaW4gdGhlIFNWRyBzdGFuZGFyZC4KICAgICAvLyB4IGFuZCB5IGFyZSBp
biB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIEZpbHRlckVmZmVjdCdzIGJ1ZmZlci4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50
TGlnaHRTb3VyY2UuY3BwCmluZGV4IDFhYjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1
NGI0NGIuLmIxNzY0MjA0NDI5ODlhNTJlMjJmYTliYmQwMGEyYTNhYTQ1OWM4OWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Q
b2ludExpZ2h0U291cmNlLmNwcApAQCAtMzEsMTYgKzMxLDIxIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUG9pbnRMaWdodFNvdXJjZS5oIgogCisjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdE
YXRhJikKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0
YSYpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRG
cm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisgICAgYXV0
byYgaW1hZ2UgPSAqZmlsdGVyRWZmZWN0LmZpbHRlckltYWdlKCk7CisgICAgYXV0byBpbWFnZVJl
Y3QgPSBpbWFnZS5pbWFnZVJlY3QoKTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGlt
YWdlLnByaW1pdGl2ZVN1YnJlZ2lvbigpOworCisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShm
aWx0ZXIubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54
eSgpLCBpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbikpOwogICAgIC8vIFRvIHNjYWxlIFos
IG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGly
ZWN0aW9uIGJ5IHouCi0gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBv
aW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisgICAgRmxv
YXRQb2ludCBtYXBwZWRaID0gZmlsdGVyLm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsg
bV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2Vy
U3BhY2VQb3NpdGlvbi55KCkgfSwgaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAg
IG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAppbmRleCA2N2EzYTBiZDM5YThhOWNjMTk1NDM0
OTg1OTZkNzExNWY0YmI5NWE1Li5hZGViZjk2YWEzMTI3ZWU0NWVmYTg3MDkzZDMyZGVkYzFiYWM3
YTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1BvaW50TGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBzZXRZKGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNldFooZmxvYXQpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBh
aW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBG
aWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKICAg
ICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggNzY0OWYwNThhYzg2OWI1NTRhZjBk
YzUwN2ZmZjkwOTBhZDZjZjNhMy4uNmViNjE4YzczYWM5ZjJhMzI5M2RhYjQ2MmE4OTM2OWQ0MzUx
MzgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTIzLDEwICsyMyw3IEBACiAjaW5jbHVkZSAiQ29s
b3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDMyICszMiwz
NyBAQCBSZWY8U291cmNlQWxwaGE+IFNvdXJjZUFscGhhOjpjcmVhdGUoRmlsdGVyRWZmZWN0JiBz
b3VyY2VFZmZlY3QpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291cmNlQWxwaGEoc291cmNl
RWZmZWN0KSk7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1l
KCkKK1NvdXJjZUFscGhhOjpTb3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkK
KyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQogewot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19l
ZmZlY3ROYW1lKCJTb3VyY2VBbHBoYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICByZXR1cm4gc19lZmZlY3ROYW1lOworICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uo
c291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW5wdXRFZmZlY3RzKCku
YXBwZW5kKCZzb3VyY2VFZmZlY3QpOwogfQogCi12b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpCitGbG9hdFJlY3QgU291cmNlQWxwaGE6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAogewotICAgIGlucHV0
RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHNldEFic29sdXRl
UGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRv
JiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICByZXR1cm4gaW5w
dXQuaW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCitib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBH
cmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwor
ICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1
dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVm
ZmVyID0gaW5wdXRFZmZlY3QoMCktPmltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0Lmlt
YWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCkpOwotICAgIGZpbHRlckNvbnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xv
cjo6YmxhY2spOwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
ciwgSW50UG9pbnQoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uSW4pOworICAgIGF1
dG8gb3V0cHV0SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZs
b2F0UG9pbnQoKSwgb3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpKTsKKworICAgIG91
dHB1dEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOwor
ICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBJ
bnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25Jbik7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIFNvdXJjZUFscGhhOjpleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CkBAIC02OSwxMSAr
NzEsNCBAQCBUZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeQogICAgIHJldHVybiB0czsKIH0KIAotU291
cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQotICAgIDog
RmlsdGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0ZXIoKSwgVHlwZTo6U291cmNlQWxwaGEpCi17
Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VFZmZlY3Qub3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKLSAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQoJnNvdXJjZUVmZmVjdCk7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA2NjI5YTM2N2ZkNDMyNDJk
MWM0YWFkZTY0YzU2MWU4NjRhMzk0OTBmLi45NGZhNTZmNTJiODQ2ZTYzYWFkMjllYTRkNmY1MTk4
ZmJkMDAxODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0xNyw4ICsxNyw3IEBACiAgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUFscGhhX2gKLSNkZWZpbmUg
U291cmNlQWxwaGFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
IApAQCAtMjgsMTkgKzI3LDE2IEBAIGNsYXNzIFNvdXJjZUFscGhhIDogcHVibGljIEZpbHRlckVm
ZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKICAgICBzdGF0aWMgUmVmPFNvdXJjZUFscGhhPiBjcmVh
dGUoRmlsdGVyRWZmZWN0Jik7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0
TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1
cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKTsgfQogCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwotICAgIEZpbHRlckVmZmVjdFR5cGUg
ZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5
cGVTb3VyY2VJbnB1dDsgfQogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogfSAvL25hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBTb3VyY2VBbHBoYV9oCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0ZJTFRFUl9FRkZFQ1QoU291cmNlQWxwaGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRl
eCA4OGEzNmE0MTAyNmJkM2E1ODU0NDc4MjAyNzRjMTEwN2Q3ODM5MmU5Li40NTJlNjQ3NGZkY2Vl
YTkzMWRiYjk4ZmZiNWJiMDZhOWRkODNkY2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTIy
LDQyICsyMiwzOSBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8
U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhpYzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQorUmVm
PFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU291cmNlR3JhcGhpYyhmaWx0ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTb3VyY2VHcmFwaGljKCkpOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBTb3VyY2VHcmFw
aGljOjplZmZlY3ROYW1lKCkKK1NvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMoKQorICAgIDog
RmlsdGVyRWZmZWN0KFR5cGU6OlNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUdy
YXBoaWMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNf
ZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCitGbG9hdFJlY3QgU291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAogewotICAgIEZpbHRl
ciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZp
bHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBwYWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRl
clJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgp
KTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkp
OworICAgIHJldHVybiBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQgU291cmNl
R3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKK2Jvb2wgU291cmNlR3JhcGhpYzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIEZpbHRlciYg
ZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgYXV0byogb3V0cHV0ID0gZmlsdGVySW1hZ2Uo
KTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdl
KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCi0gICAgICAgIHJldHVy
bjsKKyAgICBhdXRvKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOworICAgIGlm
ICghc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7Cisg
ICAgYXV0byogb3V0cHV0SW1hZ2UgPSBvdXRwdXQtPmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFv
dXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG91dHB1dEltYWdl
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQoKSk7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEzMjhlZjIxMDZiN2Zj
YTViZi4uYjFjMTNiMWM5OGYyNzgyYzUzYmQ3ZjVhM2U4OWI1MzdjOTYwN2M5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmgKQEAgLTE4LDQxICsxOCwyNiBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhp
Y19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUg
IkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBoaWMg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBSZWY8
U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRlciYpOworICAgIHN0YXRpYyBSZWY8U291cmNlR3Jh
cGhpYz4gY3JlYXRlKCk7CiAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFt
ZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBlZmZlY3ROYW1lKCkgeyByZXR1cm4g
RmlsdGVyRWZmZWN0Ojpzb3VyY2VHcmFwaGljTmFtZSgpOyB9CiAKIHByaXZhdGU6Ci0gICAgU291
cmNlR3JhcGhpYyhGaWx0ZXImIGZpbHRlcikKLSAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpTb3VyY2VHcmFwaGljKQotICAgIHsKLSAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgfQorICAgIFNvdXJjZUdy
YXBoaWMoKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiU291cmNlR3JhcGhpYyI7IH0KLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJy
aWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgRmlsdGVyRWZmZWN0VHlw
ZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmlsdGVyRWZmZWN0
VHlwZVNvdXJjZUlucHV0OyB9CiB9OwogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VHcmFwaGljKQotICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1
cm4gZWZmZWN0LmZpbHRlckVmZmVjdENsYXNzVHlwZSgpID09IFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6VHlwZTo6U291cmNlR3JhcGhpYzsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQot
Ci0KLSNlbmRpZiAvLyBTb3VyY2VHcmFwaGljX2gKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklM
VEVSX0VGRkVDVChTb3VyY2VHcmFwaGljKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCmluZGV4IDcx
NjA3YWIwMGZmOWQ2YTZkMDE2OTFkOWJiYjg1NTNkMWYzNDhkMDAuLmFkM2UxODkwNjBlYzc0NTEx
YTdjYWViYjg2NzgzNWJkMjRlNmFiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTcG90TGlnaHRTb3Vy
Y2UuaCIKIAorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtNDEsMTEgKzQyLDE1IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCBy
ZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAw
LjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZp
bHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3Zv
aWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEpCiB7Ci0gICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisgICAg
YXV0byYgaW1hZ2UgPSAqZmlsdGVyRWZmZWN0LmZpbHRlckltYWdlKCk7CisgICAgYXV0byBpbWFn
ZVJlY3QgPSBpbWFnZS5pbWFnZVJlY3QoKTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9
IGltYWdlLnByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIAorICAgIG1fYnVmZmVyUG9zaXRpb24u
c2V0WFkoZmlsdGVyLm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9z
aXRpb24ueHkoKSwgaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pKTsKICAgICAvLyBUbyBz
Y2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRo
ZSB4IGRpcmVjdGlvbiBieSB6LgotICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlckVmZmVj
dC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgp
ICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0pOwor
ICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlci5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1
ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCks
IG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0sIGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9u
KTsKICAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0
aW9uLngoKSk7CiAgICAgCiAgICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNl
clNwYWNlUG9pbnRzQXQgLSBtX3VzZXJTcGFjZVBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgK
aW5kZXggMzUxNTE2MzUwNzdlZWYwZTczYzI2YWU0NDJhNWVhNTM0ZmQxZjNiZi4uZmUzZjJmM2Zj
OWI1ODhhYmY0MjhiZTlkZTZmMzY3OTEzNmI5M2JkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCkBA
IC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxv
YXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBh
aW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBG
aWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKICAg
ICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VDb2NvYS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlQ29jb2EuY3BwCmluZGV4IDlhZWE1ZjFjMDcyYzA5YmYwNjNmNDk5OWUwM2IyMTllODVkN2Uy
ZDkuLmQ2N2IyOWI1MWM3OTFlNTIxNWViOTg5NzVmZDljZWI2YWM0ZmMwNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5n
QXVkaW9Tb3VyY2VDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcApAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJMaWJXZWJSVENBdWRpb0Zvcm1h
dC5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5jcHAKaW5kZXggOWQ2YzJjZGQwNWY5NDliNjM0Y2FmYTE3YWMxN2RiNWMwMmI1YjYxMS4u
NTAyOTcwYmIwYmZjZmI5ZmVlOTI2ZDE2MGMwMTQxNjgzYTFjNTY1YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTI3LDkgKzI3LDYgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKLSNpbmNsdWRl
ICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAjaW5jbHVk
ZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNoYWRvdy5oIgpAQCAt
MzgsNDUgKzM1LDE4NSBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlZmVyZW5jZWRTVkdSZXNvdXJjZXMuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNs
dWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgot
I2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1
ZGUgIlNvdXJjZUFscGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgVVNFKERJUkVD
VDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVJlZjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZlB0cjxDU1NGaWx0ZXI+IENT
U0ZpbHRlcjo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNj
YWxlRmFjdG9yLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgYm9vbCBoYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMu
aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKKworICAg
IGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBDU1NGaWx0ZXIoaGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzLCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwg
c2NhbGVGYWN0b3IsIGNsaXBPcGVyYXRpb24pKTsKKworICAgIGlmICghZmlsdGVyLT5idWlsZEZp
bHRlckZ1bmN0aW9ucyhyZW5kZXJlciwgb3BlcmF0aW9ucykpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOworICAg
IHJldHVybiBmaWx0ZXI7CiB9CiAKLUNTU0ZpbHRlcjo6Q1NTRmlsdGVyKCkKLSAgICA6IEZpbHRl
cihGbG9hdFNpemUgeyAxLCAxIH0pCi0gICAgLCBtX3NvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhp
Yzo6Y3JlYXRlKCp0aGlzKSkKK0NTU0ZpbHRlcjo6Q1NTRmlsdGVyKGJvb2wgaGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luLCBmbG9hdCBzY2FsZUZhY3RvciwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9u
KQorICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6Q1NTRmlsdGVyLCBGbG9hdFNpemUgeyBzY2Fs
ZUZhY3Rvciwgc2NhbGVGYWN0b3IgfSwgY2xpcE9wZXJhdGlvbikKKyAgICAsIG1faGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzKGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscykKKyAgICAsIG1faGFzRmls
dGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oaGFzRmlsdGVyVGhhdFNo
b3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4pCiB7CiB9CiAKLUNTU0ZpbHRlcjo6fkNT
U0ZpbHRlcigpID0gZGVmYXVsdDsKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVC
bHVyRWZmZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRl
cjo6Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZERldmlhdGlv
biA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7
CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBzdGREZXZp
YXRpb24sIGNsaXBPcGVyYXRpb24gPT0gRmlsdGVyOjpDbGlwT3BlcmF0aW9uOjpVbml0ZSA/IEVE
R0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworfQogCi1HcmFwaGljc0NvbnRleHQq
IENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIHJldHVybiBzb3Vy
Y2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7CisgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVu
Y3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0g
MDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJl
dHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGlj
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGNvbnN0IEJhc2ljQ29t
cG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
KQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFS
OworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBh
bW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsg
MC41OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAg
cmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSh0cmFuc2ZlckZ1bmN0aW9uLCB0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0
aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChjb25zdCBEcm9w
U2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0
IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZF
RHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJv
cFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7Cit9
CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24p
Cit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3Mu
dzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVF
cXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisKKyAgICBW
ZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAg
ICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1
dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUh1
ZVJvdGF0ZUVmZmVjdChjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xv
ck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07
CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPEZp
bHRlckVmZmVjdD4gY3JlYXRlSW52ZXJ0RWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1
bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0
IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3Vu
dDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKworICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjcmVhdGUodHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJh
bnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4g
Q1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
RmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBm
aWx0ZXJPcGVyYXRpb24pCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlT3BhY2l0
eUVmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAgICBhdXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVu
ZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNlcygpLnJlZmVyZW5jZWRGaWx0ZXJFbGVt
ZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlvbik7CisgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24u
dHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50
ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91
bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2Zl
ckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKG51
bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24p
OworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJhdGVFZmZlY3Qo
Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRp
b24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBG
RUNvbG9yTWF0cml4OjpjcmVhdGUoRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3Zl
KGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlU2VwaWFFZmZlY3QoY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29s
b3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBU
bygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8v
IFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5k
ZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1l
dGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1p
bnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91
bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZShGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFy
YW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmlsdGVy
KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRl
ck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlv
dXNFZmZlY3QpCit7CisgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jlc291cmNlcyA9IHJlbmRlcmVy
LmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAgICBhdXRvKiBmaWx0ZXJFbGVtZW50
ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJl
ci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCiAgICAgaWYgKCFmaWx0ZXJFbGVtZW50
KSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0ZpbHRl
ciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGZpbmQgZmls
dGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNvdXJjZSAiIDw8IGZpbHRlck9wZXJhdGlv
bi5mcmFnbWVudCgpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIs
IGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkp
OwogICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQgZmls
dGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCiAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTMxMDg1PgogICAgICAgICAvLyBGSVhNRTogVW5jbGVhciBpZiB0aGlzIGRvZXMgYW55
dGhpbmcuCkBAIC04NSwyMzEgKzIyMiwxMDkgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmls
dGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0byBidWlsZGVyID0gbWFrZVVu
aXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOwotICAgIG1fc291cmNlQWxw
aGEgPSBidWlsZGVyLT5nZXRFZmZlY3RCeUlkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkpOwot
Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8RmlsdGVy
RWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKLQotICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVu
dCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4o
KmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQo
YnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhp
cyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZyb20g
IiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0
LmdldCgpKTsKLSAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKSkgewotI2lmIEVO
QUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAgICAgICAgIGVm
ZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCktPnN0
eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRl
cnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0Io
KSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAgICBl
ZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1l
bnQucmVzdWx0KCksIGVmZmVjdCk7Ci0gICAgICAgIHJlZmVyZW5jZUVmZmVjdHMuYXBwZW5kKCpl
ZmZlY3QpOwotICAgIH0KLSAgICAKLSAgICBtX2VmZmVjdHMuYXBwZW5kVmVjdG9yKFdURk1vdmUo
cmVmZXJlbmNlRWZmZWN0cykpOwotICAgIHJldHVybiBlZmZlY3Q7CisgICAgU1ZHRmlsdGVyQnVp
bGRlciBidWlsZGVyOworICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVu
dCwgYnVpbGRlciwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGZpbHRlci5zb3VyY2VJbWFnZVJlY3Qo
KSwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLCBmaWx0ZXIuY2xpcE9wZXJhdGlvbigpLCBwcmV2aW91
c0VmZmVjdCk7CiB9CiAKLWJvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXIg
Y29uc3VtZXIpCitib29sIENTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCiB7Ci0g
ICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscygpOwotICAgIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRC
eVNlY3VyaXR5T3JpZ2luKCk7Ci0KLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsKKyAgICBtX2Z1bmN0
aW9ucy5jbGVhcigpOwogICAgIG1fb3V0c2V0cyA9IHsgfTsKIAotICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IHByZXZpb3VzRWZmZWN0ID0gbV9zb3VyY2VHcmFwaGljLnB0cigpOworICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IHByZXZpb3VzRWZmZWN0ID0gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCk7
CisgICAgbV9mdW5jdGlvbnMuYXBwZW5kKHsgKnByZXZpb3VzRWZmZWN0IH0pOworCisgICAgUmVm
UHRyPFNWR0ZpbHRlcj4gZmlsdGVyOworCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKSkgewogICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3Q7Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVyYXRpb247Ci0gICAgICAg
IHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VPcGVyYXRp
b24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7
Ci0gICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRlcihyZW5kZXJlciwgKnBy
ZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworICAgICAgICAKKyAgICAgICAgc3dp
dGNoIChvcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3It
ZmlsdGVyLgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBU
bygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAg
ICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmls
dGVycy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBp
bmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlu
cHV0UGFyYW1ldGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBv
bmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJp
eDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0
UGFyYW1ldGVycykpOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QkxVUjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNh
c3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNsaXBPcGVyYXRpb24oKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93
bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsK
LSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0
cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBo
dHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRt
bCNzZXBpYUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJh
bWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25l
TWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43
NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4x
NjggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAu
MjcyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0g
ICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICAgICAgZWZmZWN0ID0g
Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAg
IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9h
dD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9w
ZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6
OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0
UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoK
KyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KGRvd25jYXN0PEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVf
Uk9UQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25j
YXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0g
ICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07Ci0gICAgICAgICAgICBl
ZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAgICAgICAgICAgZWZmZWN0
ID0gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1
bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAg
ICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3Bl
ID0gMSAtIDIgKiBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2Vw
dCA9IGFtb3VudDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxs
RnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUdyYXlTY2Fs
ZUVmZmVjdChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAt
YXBwbGUtY29sb3ItZmlsdGVyLgorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90YXRl
RWZmZWN0KGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRp
b24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
T1BBQ0lUWTogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2Zl
ckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAg
IHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9u
LCBudWxsRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVJbnZlcnRFZmZl
Y3QoZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJh
dGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24u
dHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICB0cmFu
c2ZlckZ1bmN0aW9uLnNsb3BlID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFu
c2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmlu
dGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVs
bEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3Jl
YXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1
bmN0aW9uLCBudWxsRnVuY3Rpb24pOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlT3BhY2l0eUVm
ZmVjdChkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3Bl
cmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24u
dHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9h
dCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91
bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91
bnQgKyAwLjU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFu
c2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0FUVVJBVEU6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVj
dChkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QkxVUjogewotICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0
PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmbG9h
dCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2
aWF0aW9uKCksIDApOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSgqdGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNv
bnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNB
VEUpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToK
KyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNlcGlhRWZmZWN0KGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzog
ewotICAgICAgICAgICAgYXV0byYgZHJvcFNoYWRvd09wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BT
aGFkb3dGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZl
Y3QgPSBGRURyb3BTaGFkb3c6OmNyZWF0ZSgqdGhpcywgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGRE
ZXZpYXRpb24oKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwKLSAgICAgICAg
ICAgICAgICBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCks
IGRyb3BTaGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6CisgICAgICAgICAgICBmaWx0ZXIg
PSBjcmVhdGVTVkdGaWx0ZXIoKnRoaXMsIGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlv
bj4oKm9wZXJhdGlvbiksIHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QpOworICAgICAgICAgICAg
ZWZmZWN0ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgaWYg
KGZpbHRlcikgeworICAgICAgICAgICAgZWZmZWN0ID0gZmlsdGVyLT5sYXN0RWZmZWN0KCk7Cisg
ICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOworICAgICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5kKGZpbHRlci5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShl
ZmZlY3QpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIGlmIChlZmZlY3QpIHsKLSAgICAgICAgICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQg
Q1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBmaWx0ZXIKLSAgICAgICAg
ICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJp
bWl0aXZlIHN1YnJlZ2lvbnMuCi0gICAgICAgICAgICBlZmZlY3QtPnNldENsaXBzVG9Cb3VuZHMo
Y29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKTsKICAgICAgICAgICAg
IGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24udHlw
ZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7Ci0gICAgICAgICAgICAgICAgZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShwcmV2aW91c0VmZmVjdCkgfTsKLSAgICAg
ICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShwcmV2aW91c0VmZmVj
dCkgfTsKKyAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICplZmZlY3QgfSk7CiAgICAg
ICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIElmIHdlIGRpZG4ndCBtYWtlIGFueSBlZmZlY3RzLCB0ZWxsIG91ciBjYWxs
ZXIgd2UgYXJlIG5vdCB2YWxpZC4KLSAgICBpZiAobV9lZmZlY3RzLmlzRW1wdHkoKSkKKyAgICBp
ZiAobV9mdW5jdGlvbnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBt
X2VmZmVjdHMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2Z1bmN0aW9ucy5zaHJpbmtUb0ZpdCgpOwog
Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMobV9zb3VyY2VEcmF3aW5nUmVnaW9uKTsKLSNpZiBVU0Uo
Q09SRV9JTUFHRSkKLSAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCi0gICAgICAgIG1fZmlsdGVy
UmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRp
bmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1fZWZmZWN0
cy5sYXN0KCkuZ2V0KCkpOwotI2VuZGlmCisgICAgLy8gVGhpcyB3aWxsIHNldCB0aGUgZmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uIGFuZCBtYXhFZmZlY3RSZWN0IGZvciB0aGUgRmlsdGVyRWZmZWN0
IGNoYWluLgorICAgIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCitHcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0
KCkKK3sKKyAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0
KCkgOiBudWxscHRyOworfQorCiBib29sIENTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVj
dChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpCiB7CiAgICAgaWYgKGZpbHRlclJlY3QuaXNF
bXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUo
KSkpCkBAIC0zMzEsNTMgKzM0Niw3MiBAQCB2b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5n
U3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleAogICAgIGlm
IChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
bG9naWNhbFNpemUgPSBtX3NvdXJjZURyYXdpbmdSZWdpb24uc2l6ZSgpOworICAgIGF1dG8gbG9n
aWNhbFNpemUgPSBzb3VyY2VJbWFnZVJlY3QoKS5zaXplKCkgKiBmaWx0ZXJTY2FsZSgpOworCiAg
ICAgaWYgKCFzb3VyY2VJbWFnZSgpIHx8IHNvdXJjZUltYWdlKCktPmxvZ2ljYWxTaXplKCkgIT0g
bG9naWNhbFNpemUpIHsKICNpZiBVU0UoRElSRUNUMkQpCi0gICAgICAgIHNldFNvdXJjZUltYWdl
KEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlbmRlcmluZ01vZGUoKSwgJnRhcmdl
dENvbnRleHQsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpKTsKKyAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwgMSwg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOwogI2Vs
c2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHRhcmdldENvbnRleHQpOwogICAgICAgICBSZW5kZXJp
bmdNb2RlIG1vZGUgPSBtX2ZpbHRlclJlbmRlcmVyID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQgOiByZW5kZXJpbmdNb2RlKCk7Ci0gICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVy
OjpjcmVhdGUobG9naWNhbFNpemUsIG1vZGUsIGZpbHRlclNjYWxlKCksIERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKKyAgICAgICAgc2V0U291cmNl
SW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwgMSwgRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOwogI2VuZGlmCisgICAg
ICAgIGlmIChhdXRvIGNvbnRleHQgPSBpbnB1dENvbnRleHQoKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNjYWxlKGZpbHRlclNjYWxlKCkpOwogICAgIH0KKwogICAgIG1fZ3JhcGhpY3NCdWZmZXJB
dHRhY2hlZCA9IHRydWU7CiB9CiAKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6bGFz
dEVmZmVjdCgpCit7CisgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBmdW5jdGlvbiA9IG1fZnVuY3Rpb25zLmxhc3QoKTsK
KyAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpCisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+bGFzdEVmZmVjdCgpOworCisgICAgcmV0dXJu
IGRvd25jYXN0PEZpbHRlckVmZmVjdD4oZnVuY3Rpb24ucHRyKCkpOworfQorCiB2b2lkIENTU0Zp
bHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKIHsKLSAgICBhdXRvJiBs
YXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAgICBsYXN0RWZmZWN0LmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEZsb2F0UmVjdCBzdWJSZWdpb24g
PSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsKKyAgICBhdXRvIGxhc3RFZmZlY3QgPSB0aGlz
LT5sYXN0RWZmZWN0KCk7CisgICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPmNh
bGN1bGF0ZU1heFByaW1pdGl2ZVN1YnJlZ2lvbigqdGhpcyk7CisKICAgICAvLyBBdCBsZWFzdCBv
bmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwgcmVjYWxjdWxhdGUgdGhl
IGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIEZsb2F0U2l6ZSBzY2Fs
ZTsKLSAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXpl
KCksIHNjYWxlKSkgewotICAgICAgICBzZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAg
ICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICB9
CisgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlIHsgMSwgMSB9OworICAgIGlmIChJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpKQorICAg
ICAgICBzZXRGaWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSk7CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjpj
bGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQogewotICAgIG1fc291cmNlR3JhcGhpYy0+Y2xlYXJS
ZXN1bHQoKTsKLSAgICBpZiAobV9zb3VyY2VBbHBoYSkKLSAgICAgICAgbV9zb3VyY2VBbHBoYS0+
Y2xlYXJSZXN1bHQoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAg
ICAgZWZmZWN0LT5jbGVhclJlc3VsdCgpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1
bmN0aW9ucykKKyAgICAgICAgZnVuY3Rpb24tPmNsZWFyRmlsdGVySW1hZ2UoKTsKIH0KIAotdm9p
ZCBDU1NGaWx0ZXI6OmFwcGx5KCkKK2Jvb2wgQ1NTRmlsdGVyOjphcHBseUZpbHRlcigpCiB7Ci0g
ICAgYXV0byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAgICBpZiAobV9maWx0
ZXJSZW5kZXJlcikgewotICAgICAgICBtX2ZpbHRlclJlbmRlcmVyLT5hcHBseUVmZmVjdHMoZWZm
ZWN0KTsKLSAgICAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSB7Ci0gICAg
ICAgICAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgYXV0byBlZmZlY3QgPSBs
YXN0RWZmZWN0KCk7CisKKyAgICBpZiAobV9maWx0ZXJSZW5kZXJlcikKKyAgICAgICAgbV9maWx0
ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKCp0aGlzLCAqZWZmZWN0KTsKKworICAgIGlmICghbV9m
aWx0ZXJSZW5kZXJlciB8fCAhbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgICAgICBpZiAo
IWZ1bmN0aW9uLT5hcHBseSgqdGhpcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVmZmVjdC5hcHBseSgpOwotICAgIGVmZmVjdC50cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKworICAg
IGlmIChhdXRvIGltYWdlID0gZWZmZWN0LT5maWx0ZXJJbWFnZSgpKSB7CisgICAgICAgIGltYWdl
LT50cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIExh
eW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNv
bnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVj
dCkKQEAgLTM5MCwzNSArNDI0LDM0IEBAIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291
cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlCiAgICAgcmV0
dXJuIHJlY3RGb3JSZXBhaW50OwogfQogCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQo
KSBjb25zdAorSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkKIHsKICAgICBpZiAobV9m
aWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkKICAgICAgICAg
cmV0dXJuIG1fZmlsdGVyUmVuZGVyZXItPm91dHB1dCgpOwogICAgIAotICAgIHJldHVybiBtX2Vm
ZmVjdHMubGFzdCgpLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGlmIChhdXRvIGltYWdlID0g
bGFzdEVmZmVjdCgpLT5maWx0ZXJJbWFnZSgpKQorICAgICAgICByZXR1cm4gaW1hZ2UtPmltYWdl
QnVmZmVyKCk7CisgICAgCisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgQ1NTRmlsdGVy
OjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCiB7
Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0gc291cmNlSW1hZ2VSZWN0OwotICAgIHNldE1h
eEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJj
ZUltYWdlUmVjdCk7CisgICAgRmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0
KTsKKyAgICBGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpOworICAg
IGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAgICBpZiAoZnVuY3Rp
b24tPmlzU1ZHRmlsdGVyKCkpIHsKKyAgICAgICAgICAgIGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVu
Y3Rpb24ucHRyKCkpLT5zZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKKyAgICAgICAg
ICAgIGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24ucHRyKCkpLT5zZXRTb3VyY2VJbWFnZVJl
Y3Qoc291cmNlSW1hZ2VSZWN0KTsKKyAgICAgICAgfQorICAgIH0KICAgICBtX2dyYXBoaWNzQnVm
ZmVyQXR0YWNoZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJl
Y3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVjdCkKK0ludFJlY3QgQ1NTRmlsdGVyOjpvdXRw
dXRSZWN0KCkKIHsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAg
ZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVjdFJlY3QpOwotfQotCi1JbnRSZWN0IENTU0Zp
bHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZm
ZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVzdWx0KCkg
fHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQot
ICAgICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOwotICAgIAorICAgIGlmIChhdXRvIGltYWdl
ID0gbGFzdEVmZmVjdCgpLT5maWx0ZXJJbWFnZSgpKQorICAgICAgICByZXR1cm4gaW1hZ2UtPmFi
c29sdXRlSW1hZ2VSZWN0KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtNDMwLDggKzQ2Myw5
IEBAIEludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKICAgICBpZiAoIW1fb3V0
c2V0cy5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIG1fb3V0c2V0czsKIAotICAgIGZvciAoYXV0
byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBtX291dHNldHMgKz0gZWZmZWN0LT5vdXRz
ZXRzKCk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBt
X291dHNldHMgKz0gZnVuY3Rpb24tPm91dHNldHMoKTsKKwogICAgIHJldHVybiBtX291dHNldHM7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4MDRj
OTJkOTQwOGI3NThlMzc1YzI1MmYyOWRiMGM1Li5kNDVjZDc1ZDhhNDYzMzBlZWE1MmMyMzQ0N2Nk
OTk2NDJiMWViMWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0zOCw2
OSArMzgsNDcgQEAgY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKIGNsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7
Ci1jbGFzcyBTb3VyY2VBbHBoYTsKIGNsYXNzIFNvdXJjZUdyYXBoaWM7CiAKLWVudW0gY2xhc3Mg
RmlsdGVyQ29uc3VtZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKLQogY2xh
c3MgQ1NTRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPENTU0ZpbHRlcj4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxD
U1NGaWx0ZXI+IGNyZWF0ZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYs
IFJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yID0gMSwgQ2xpcE9wZXJhdGlvbiA9IENs
aXBPcGVyYXRpb246OkludGVyc2VjdCk7CiAKICAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQotCi0g
ICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OwotCi0gICAgYm9vbCBidWlsZChSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKLSAgICB2
b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIHZvaWQgYXBwbHkoKTsKIAogICAg
IGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0
ZXJUaGF0TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25z
dDsKLQotcHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFsIH5DU1NGaWx0ZXIo
KTsKLQotICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9zb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9hdFJlY3QgZmls
dGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZpbHRlclJlZ2lv
bjsgfQotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVu
ZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRl
ck9wZXJhdGlvbiYpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIEludE91dHNldHMgb3V0c2V0
cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworICAgIGJv
b2wgYXBwbHlGaWx0ZXIoKSBvdmVycmlkZTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRD
b250ZXh0KCk7CisgICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpOworICAgIEludFJlY3Qgb3V0cHV0
UmVjdCgpOwogCiAgICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgZmlsdGVyUmVjdCk7CiAgICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7
Ci0KICAgICBMYXlvdXRSZWN0IGNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0
KTsKIAotICAgIEZsb2F0UmVjdCBtX3NvdXJjZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRSZWN0
IG1fZmlsdGVyUmVnaW9uOwotCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVj
dHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBtX3NvdXJjZUFscGhhOworcHJpdmF0ZToKKyAgICBDU1NGaWx0ZXIoYm9v
bCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVz
dHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yLCBDbGlwT3BlcmF0aW9u
KTsKIAotICAgIG11dGFibGUgSW50T3V0c2V0cyBtX291dHNldHM7CisgICAgYm9vbCBidWlsZEZp
bHRlckZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwor
ICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAKICAgICBib29s
IG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRTaG91
bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKLSAgICAKKworICAgIFZl
Y3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiBtX2Z1bmN0aW9uczsKKworICAgIG11dGFibGUgSW50
T3V0c2V0cyBtX291dHNldHM7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0UmVu
ZGVyZXI+IG1fZmlsdGVyUmVuZGVyZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCA2MjMzYjVjYzU2ZmI5ODdmNjBkYzY2OWE3ODU0NThlNzI3ZGIy
OGY1Li41MTFhZmUzOGRlYWJiMmFmYjZmZjQ4N2NkODQ4ZjBhYmE2MGIzODIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMyMzAsNyArMzIzMCw3IEBAIEdy
YXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyhHcmFwaGljc0NvbnRleHQm
IGRlc3RpbmF0aW9uQ29udGV4dCwKIAogICAgIGF1dG8gcm9vdFJlbGF0aXZlQm91bmRzID0gY2Fs
Y3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb2Zmc2V0RnJvbVJvb3Qs
IHsgfSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBwYWludGluZ0Zp
bHRlcnMtPmJlZ2luRmlsdGVyRWZmZWN0KGRlc3RpbmF0aW9uQ29udGV4dCwgZW5jbG9zaW5nSW50
UmVjdChyb290UmVsYXRpdmVCb3VuZHMpLCBlbmNsb3NpbmdJbnRSZWN0KHBhaW50aW5nSW5mby5w
YWludERpcnR5UmVjdCksIGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyUmVwYWludFJlY3QpKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBwYWludGluZ0ZpbHRlcnMtPmJlZ2lu
RmlsdGVyRWZmZWN0KGRlc3RpbmF0aW9uQ29udGV4dCwgcmVuZGVyZXIoKSwgZW5jbG9zaW5nSW50
UmVjdChyb290UmVsYXRpdmVCb3VuZHMpLCBlbmNsb3NpbmdJbnRSZWN0KHBhaW50aW5nSW5mby5w
YWludERpcnR5UmVjdCksIGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyUmVwYWludFJlY3QpKTsKICAg
ICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IDI1MGE3
ZDVjMGJhYTBhYzc0MWE5MGM4MThiNjFhMDVmOTViOTY0YTQuLjFjNjMzNTQ2MjgxNTVhYjk2ZDcx
YmRiMjZkMTFjY2RjNGUyNjkxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuY3BwCkBAIC0xMTgsMjMgKzExOCwxMyBAQCB2b2lkIFJlbmRlckxh
eWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpCiAKIHZvaWQgUmVuZGVy
TGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgZmxvYXQg
c2NhbGVGYWN0b3IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKIHsKLSAgICBpZiAoIW1f
ZmlsdGVyKSB7Ci0gICAgICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAgICAg
ICAgbV9maWx0ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV9maWx0
ZXItPnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7Ci0gICAgfSBlbHNlIGlmIChtX2Zp
bHRlci0+ZmlsdGVyU2NhbGUoKSAhPSBzY2FsZUZhY3RvcikgewotICAgICAgICBtX2ZpbHRlci0+
c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2ZpbHRlci0+Y2xlYXJJbnRl
cm1lZGlhdGVSZXN1bHRzKCk7Ci0gICAgfQotCiAgICAgLy8gSWYgdGhlIGZpbHRlciBmYWlscyB0
byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0dGVtcHQg
dG8KICAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGlu
ZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KICAgICAvLyBGSVhNRTogdGhpcyByZWJ1aWxk
cyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUgZmlsdGVyIHN0eWxlIGRpZG4n
dCBjaGFuZ2UuCi0gICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIHJlbmRlcmVyLnN0
eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCi0gICAgICAg
IG1fZmlsdGVyID0gbnVsbHB0cjsKKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJl
bmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlLCBzY2FsZUZh
Y3RvciwgRmlsdGVyOjpDbGlwT3BlcmF0aW9uOjpVbml0ZSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4
dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQm
IGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29u
c3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRS
ZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZm
ZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlS
ZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewogICAgIGlmICghbV9m
aWx0ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTU5LDggKzE0OSw2IEBAIEdyYXBo
aWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0CiAgICAgbV9wYWludE9mZnNldCA9IGZpbHRlclNvdXJjZVJlY3Qu
bG9jYXRpb24oKTsKICAgICByZXNldERpcnR5U291cmNlUmVjdCgpOwogCi0gICAgZmlsdGVyLmRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotCiAgICAgZmlsdGVyLmFsbG9jYXRl
QmFja2luZ1N0b3JlSWZOZWVkZWQoZGVzdGluYXRpb25Db250ZXh0KTsKICAgICBhdXRvKiBzb3Vy
Y2VHcmFwaGljc0NvbnRleHQgPSBmaWx0ZXIuaW5wdXRDb250ZXh0KCk7CiAgICAgaWYgKCFzb3Vy
Y2VHcmFwaGljc0NvbnRleHQgfHwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLmlzRW1wdHkoKSB8fCBJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyLmZpbHRlclJlZ2lvbigpLnNpemUo
KSkpCkBAIC0xODQsMTQgKzE3MiwxNiBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YXBwbHlG
aWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpCiAgICAgYXV0
byYgZmlsdGVyID0gKm1fZmlsdGVyOwogICAgIGZpbHRlci5pbnB1dENvbnRleHQoKS0+cmVzdG9y
ZSgpOwogCi0gICAgZmlsdGVyLmFwcGx5KCk7CisgICAgZmlsdGVyLmFwcGx5RmlsdGVyKCk7CiAK
ICAgICAvLyBHZXQgdGhlIGZpbHRlcmVkIG91dHB1dCBhbmQgZHJhdyBpdCBpbiBwbGFjZS4KLSAg
ICBMYXlvdXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKLSAgICBkZXN0UmVj
dC5tb3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7CisgICAgYXV0byBk
ZXN0UmVjdCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7CiAKLSAgICBpZiAoYXV0byogb3V0cHV0QnVm
ZmVyID0gZmlsdGVyLm91dHB1dCgpKQotICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCpvdXRwdXRCdWZmZXIsIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3Qs
IG1fbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAg
ICBpZiAoYXV0byogb3V0cHV0QnVmZmVyID0gZmlsdGVyLm91dHB1dCgpKSB7CisgICAgICAgIGRl
c3RpbmF0aW9uQ29udGV4dC5zY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgp
LCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7CisgICAgICAgIGRlc3RpbmF0
aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgZGVzdFJlY3QpOworICAg
ICAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAg
IH0KIAogICAgIGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4
ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjNhNzQ5OTVmMWY4NGJkOTczZWQyYjg4ZDMw
NDM5N2I0YzQ0ZGEwMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJGaWx0ZXJzLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIC8vIFBlciByZW5kZXIK
ICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVj
dDsgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJl
cGFpbnRSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBo
aWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50JiwgY29uc3QgTGF5
b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKICAgICB2b2lkIGFwcGx5RmlsdGVyRWZm
ZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KTsKIAogcHJpdmF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKaW5kZXggMTk1MDlkOTcxOGFmZjExMGY4NDFlYzQ5NzZmOTdmYjFhOTM0ZDhh
NS4uMWVjOWQ2NmQ1ZjM3OGM2Y2U3NWI0MDBkYTI1NWU3NGYwMTQwNTllOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5jcHAKQEAgLTgyLDQwICs4Miw2IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJl
bW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJFbGVtZW50JiBjbGllbnQsIGJvb2wKICAgICBtYXJr
Q2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJvdW5k
YXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWls
ZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKLSAgICBpZiAoZmlsdGVyRWxlbWVu
dCgpLmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRlci50
YXJnZXRCb3VuZGluZ0JveCgpOwotCi0gICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIK
LSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZShmaWx0ZXIpKTsKLSAgICBidWlsZGVyLT5zZXRQcmltaXRpdmVVbml0cyhm
aWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSk7Ci0gICAgYnVpbGRlci0+c2V0VGFyZ2V0
Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIAotICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cz4oZmlsdGVyRWxlbWVudCgpKSkgewotICAgICAgICBhdXRvIGVmZmVjdCA9IGVsZW1lbnQuYnVp
bGQoYnVpbGRlci5nZXQoKSwgZmlsdGVyKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAg
ICAgICAgIGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZl
cmVuY2VzKGVmZmVjdC5jb3B5UmVmKCksIGVsZW1lbnQucmVuZGVyZXIoKSk7Ci0gICAgICAgIGVs
ZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGVmZmVj
dC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xl
PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRlckVs
ZW1lbnQoKS5wcmltaXRpdmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCkpOwotICAgICAgICBp
ZiAoZWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQ
QUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNw
YWNlKGVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xh
dGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAg
ICBidWlsZGVyLT5hZGQoZWxlbWVudC5yZXN1bHQoKSwgV1RGTW92ZShlZmZlY3QpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGJ1aWxkZXI7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxl
JiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNl
TW9kZT4gcmVzb3VyY2VNb2RlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTEzNyw1MiAr
MTAzLDM4IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgaWYgKGZpbHRlckRhdGEtPmJv
dW5kYXJpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBEZXRl
cm1pbmUgYWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZvciBmaWx0ZXIuIAotICAgIEFm
ZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNh
bGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RDb29yZGluYXRlU3lzdGVtKHJlbmRlcmVy
KTsKLSAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBFbGltaW5hdGUgc2hlYXIgb2YgdGhlIGFic29sdXRlIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBwcm9kdWNlIHVuc2hlYXJlZCB0aWxl
IGltYWdlcyBmb3IgZmVUaWxlLgotICAgIGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJh
bnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCAwLCAw
LCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgMCwgMCk7Ci0KICAgICAvLyBEZXRlcm1pbmUg
YWJzb2x1dGUgYm91bmRhcmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyByZWdpb24u
CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5n
Qm94KCk7CiAgICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0
YS0+Ym91bmRhcmllcyk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZp
bHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+
ZHJhd2luZ1JlZ2lvbik7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCi0g
ICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50KCkucHJpbWl0
aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1g7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0
YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFy
Z2V0Qm91bmRpbmdCb3gsIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5n
Qm94TW9kZSk7CiAKLSAgICAvLyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVz
LgotICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRlckRhdGEt
PmZpbHRlcik7Ci0gICAgaWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVyKQorICAgIC8vIERldGVybWlu
ZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4KKyAgICBBZmZpbmVU
cmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0gPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjYWxjdWxh
dGVUcmFuc2Zvcm1hdGlvblRvT3V0ZXJtb3N0Q29vcmRpbmF0ZVN5c3RlbShyZW5kZXJlcik7Cisg
ICAgaWYgKCFhYnNvbHV0ZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBUaGUg
c2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIgdGhh
biBrTWF4RmlsdGVyU2l6ZS4KLSAgICBGbG9hdFJlY3QgdGVtcFNvdXJjZVJlY3QgPSBhYnNvbHV0
ZURyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRTaXplIHNjYWxlKDEsIDEpOwotICAgIEltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyh0ZW1wU291cmNlUmVjdC5zaXplKCksIHNjYWxlKTsKLSAg
ICB0ZW1wU291cmNlUmVjdC5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Cisg
ICAgLy8gRWxpbWluYXRlIHNoZWFyIG9mIHRoZSBhYnNvbHV0ZSB0cmFuc2Zvcm1hdGlvbiBtYXRy
aXgsIHRvIGJlIGFibGUgdG8gcHJvZHVjZSB1bnNoZWFyZWQgdGlsZSBpbWFnZXMgZm9yIGZlVGls
ZS4KKyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGUoYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCks
IGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpKTsKIAotICAgIC8vIFNldCB0aGUgc2NhbGUgbGV2
ZWwgaW4gU1ZHRmlsdGVyLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1
dGlvbihzY2FsZSk7CisgICAgLy8gRGV0ZXJtaW5lIHNjYWxlIGZhY3RvciBmb3IgZmlsdGVyLiBU
aGUgc2l6ZSBvZiBpbnRlcm1lZGlhdGUgSW1hZ2VCdWZmZXJzIHNob3VsZG4ndCBiZSBiaWdnZXIg
dGhhbiBrTWF4RmlsdGVyU2l6ZS4KKyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
ZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKTsKIAotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzID0gMTAwOwotICAgIEZp
bHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3Qo
KTsKLSAgICBpZiAoIWxhc3RFZmZlY3QgfHwgbGFzdEVmZmVjdC0+dG90YWxOdW1iZXJPZkVmZmVj
dElucHV0cygpID4gbWF4VG90YWxPZkVmZmVjdElucHV0cykKKyAgICAvLyBDcmVhdGUgdGhlIFNW
R0ZpbHRlciBvYmplY3QuCisgICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZH
RmlsdGVyQnVpbGRlcj4oKTsKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNy
ZWF0ZShmaWx0ZXJFbGVtZW50KCksICpmaWx0ZXJEYXRhLT5idWlsZGVyLCBmaWx0ZXJTY2FsZSwg
ZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgdGFyZ2V0
Qm91bmRpbmdCb3gpOworICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgYXV0byBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRl
ci0+bGFzdEVmZmVjdCgpOworICAgIEFTU0VSVChsYXN0RWZmZWN0KTsKIAogICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBs
eVJlc291cmNlXG4iIDw8ICpmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCkpOwogCi0g
ICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAg
RmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKKyAgICBG
bG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC0+Y2FsY3VsYXRlTWF4UHJpbWl0aXZlU3Vi
cmVnaW9uKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRl
ckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhl
IGVmZmVjdCBzaXplcyB3aXRoIG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgc2NhbGUpKSB7Ci0gICAgICAg
IGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyUmVzb2x1dGlvbihzY2FsZSk7Ci0gICAgICAg
IGxhc3RFZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIH0K
KyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCks
IGZpbHRlclNjYWxlKSkKKyAgICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJTY2Fs
ZShmaWx0ZXJTY2FsZSk7CiAKICAgICAvLyBJZiB0aGUgZHJhd2luZ1JlZ2lvbiBpcyBlbXB0eSwg
d2UgaGF2ZSBzb21ldGhpbmcgbGlrZSA8ZyBmaWx0ZXI9Ii4uIi8+LgogICAgIC8vIEV2ZW4gaWYg
dGhlIHRhcmdldCBvYmplY3RCb3VuZGluZ0JveCgpIGlzIGVtcHR5LCB3ZSBzdGlsbCBoYXZlIHRv
IGRyYXcgdGhlIGxhc3QgZWZmZWN0IHJlc3VsdCBpbWFnZSBpbiBwb3N0QXBwbHlSZXNvdXJjZS4K
QEAgLTE5NCw5ICsxNDYsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIH0KIAogICAg
IC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBhcHBsaWVkIHRvIHRoZSBm
aWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29sdXRpb24gb2YgdGhlIGZpbHRlci4K
LSAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtOwotICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7Ci0gICAgZWZmZWN0
aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNm
b3JtKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNmb3JtID0gQWZmaW5lVHJh
bnNmb3JtKGZpbHRlclNjYWxlLndpZHRoKCksIDAsIDAsIGZpbHRlclNjYWxlLmhlaWdodCgpLCAw
LCAwKTsKIAogICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKQEAgLTI2OSwzMyArMjE5LDMyIEBAIHZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBHcmFwaGljCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIEZpbHRlckVmZmVjdCogbGFz
dEVmZmVjdCA9IGZpbHRlckRhdGEuYnVpbGRlci0+bGFzdEVmZmVjdCgpOworICAgIGF1dG8gbGFz
dEVmZmVjdCA9IGZpbHRlckRhdGEuZmlsdGVyLT5sYXN0RWZmZWN0KCk7CiAKLSAgICBpZiAobGFz
dEVmZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFzdEVmZmVj
dC0+ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKGxhc3RF
ZmZlY3QgJiYgIWZpbHRlckRhdGEuYm91bmRhcmllcy5pc0VtcHR5KCkgJiYgIWxhc3RFZmZlY3Qt
PmNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbigqZmlsdGVyRGF0YS5maWx0ZXIpLmlzRW1wdHko
KSkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSByZWFsIGZpbHRlcmluZyBvZiB0aGUgb2JqZWN0
LiBJdCBqdXN0IG5lZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGUKICAgICAgICAgLy8gaW5pdGlhbCBm
aWx0ZXJpbmcgcHJvY2Vzcy4gV2UganVzdCB0YWtlIHRoZSBzdG9yZWQgZmlsdGVyIHJlc3VsdCBv
biBhCiAgICAgICAgIC8vIHNlY29uZCBkcmF3aW5nLgogICAgICAgICBpZiAoZmlsdGVyRGF0YS5z
dGF0ZSAhPSBGaWx0ZXJEYXRhOjpCdWlsdCkKICAgICAgICAgICAgIGZpbHRlckRhdGEuZmlsdGVy
LT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlcikp
OwogCisgICAgICAgIGF1dG8gaW1hZ2UgPSBsYXN0RWZmZWN0LT5maWx0ZXJJbWFnZSgpOworICAg
IAogICAgICAgICAvLyBBbHdheXMgdHJ1ZSBpZiBmaWx0ZXJEYXRhIGlzIGp1c3QgYnVpbHQgKGZp
bHRlckRhdGEtPnN0YXRlID09IEZpbHRlckRhdGE6OkJ1aWx0KS4KLSAgICAgICAgaWYgKCFsYXN0
RWZmZWN0LT5oYXNSZXN1bHQoKSkgeworICAgICAgICBpZiAoIWltYWdlKSB7CiAgICAgICAgICAg
ICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVyRGF0YTo6QXBwbHlpbmc7Ci0gICAgICAgICAgICBs
YXN0RWZmZWN0LT5hcHBseSgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+Y29ycmVjdEZpbHRl
clJlc3VsdElmTmVlZGVkKCk7Ci0gICAgICAgICAgICBsYXN0RWZmZWN0LT50cmFuc2Zvcm1SZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICAgICAgICAg
IGZpbHRlckRhdGEuZmlsdGVyLT5hcHBseUZpbHRlcigpOworICAgICAgICAgICAgaW1hZ2UgPSBs
YXN0RWZmZWN0LT5maWx0ZXJJbWFnZSgpOworICAgICAgICAgICAgaW1hZ2UtPnRyYW5zZm9ybVRv
Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAgICAgICAgIH0KKwog
ICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmlsdGVyRGF0YTo6QnVpbHQ7CiAKLSAgICAgICAg
SW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKKyAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2UgPyBpbWFnZS0+aW1h
Z2VCdWZmZXIoKSA6IG51bGxwdHI7CiAgICAgICAgIGlmIChyZXN1bHRJbWFnZSkgewotICAgICAg
ICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFu
c2Zvcm0uaW52ZXJzZSgpLnZhbHVlX29yKEFmZmluZVRyYW5zZm9ybSgpKSk7Ci0KLSAgICAgICAg
ICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRl
clJlc29sdXRpb24oKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclJlc29s
dXRpb24oKS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVy
KCpyZXN1bHRJbWFnZSwgbGFzdEVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigp
KTsKLQotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVl
QWJzb2x1dGVUcmFuc2Zvcm0pOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXpl
KDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVy
RGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGltYWdlLT5hYnNvbHV0ZUltYWdlUmVj
dCgpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0
ZXJTY2FsZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBo
aWNCdWZmZXIgPSBudWxscHRyOwpAQCAtMzI3LDcgKzI3Niw4IEBAIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnByaW1pdGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvCiAgICAgICAgIC8vIG9yIG5vbmUgb2YgdGhlbSB3aWxsIGJlIGNoYW5nZWQuCiAgICAg
ICAgIGlmICghcHJpbWl0dmUtPnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJp
YnV0ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0
c1JlY3Vyc2l2ZShlZmZlY3QpOworCisgICAgICAgIGJ1aWxkZXItPmNsZWFyRmlsdGVySW1hZ2Vz
UmVjdXJzaXZlKCplZmZlY3QpOwogCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRo
ZSBzY3JlZW4uCiAgICAgICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRl
ckRhdGFQYWlyLmtleSwgUmVwYWludEludmFsaWRhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKaW5kZXggOGNl
MGM3YWJjMTQzYmRiNjUzODUwYzkzZTMyOTJhYzlkYTQ5YmJjNy4uNjY4ZGRhMzA1ODZmNjllNmQ1
NDRjMjYxMGYzMDk5Y2U5ZWI4M2VmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaApAQCAtNDcsMTAgKzQ3LDggQEAg
cHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVyOwog
ICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc291cmNlR3JhcGhpY0J1ZmZlcjsKICAgICBHcmFwaGlj
c0NvbnRleHQqIHNhdmVkQ29udGV4dCB7IG51bGxwdHIgfTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IGJvdW5kYXJpZXM7CiAg
ICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb247Ci0gICAgRmxvYXRTaXplIHNjYWxlOwogICAgIEZp
bHRlckRhdGFTdGF0ZSBzdGF0ZSB7IFBhaW50aW5nU291cmNlIH07CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRl
eCBjNjUwMjFiZWUwMzU1NjVhYWIzMWM2N2ZiOTMxOWY4OGU2MTgwN2M3Li42NGUzYWM1YWVhYzgw
YWRmOWUyNmFiNGVmNmI4NWEyN2MyNTQyZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQzMiwxMSArNDMyLDEz
IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIHRzIDw8ICJcbiI7CiAgICAgICAg
IC8vIENyZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUg
YnVpbGRlci4KICAgICAgICAgRmxvYXRSZWN0IGR1bW15UmVjdDsKLSAgICAgICAgYXV0byBkdW1t
eUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKEFmZmluZVRyYW5zZm9ybSgpLCBkdW1teVJlY3Qs
IGR1bW15UmVjdCwgZHVtbXlSZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKGF1dG8gYnVpbGRlciA9
IGZpbHRlci5idWlsZFByaW1pdGl2ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7CisgICAgICAgIEZs
b2F0U2l6ZSBkdW1teVNjYWxlKDEsIDEpOworICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXIu
ZmlsdGVyRWxlbWVudCgpLCBidWlsZGVyLCBkdW1teVNjYWxlLCBkdW1teVJlY3QsIGR1bW15UmVj
dCwgZHVtbXlSZWN0KTsKKyAgICAgICAgaWYgKGR1bW15RmlsdGVyKSB7CiAgICAgICAgICAgICBU
ZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7CiAKLSAgICAgICAgICAgIGlm
IChGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0RWZmZWN0KCkpCisgICAg
ICAgICAgICBpZiAoYXV0byBsYXN0RWZmZWN0ID0gZHVtbXlGaWx0ZXItPmxhc3RFZmZlY3QoKSkK
ICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkgPT0gQ2xp
cHBlclJlc291cmNlVHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMjBiOGI1ZTdiMDdiMzFhMTJjNWFhY2Jh
Mzg1ODkyZmJmM2EyMzU3My4uMzk3NGNhOWMzZDg0YTNiMzIwMDA3MTkzYTIwNDZlZjI2MWFlYWU5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuY3BwCkBAIC0yMzUsOCArMjM1LDExIEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiB0YXJn
CiAgICAgaWYgKHBhaW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdl
QnVmZmVyOjpjbGFtcGVkU2l6ZShwYWludFJlY3Quc2l6ZSgpLCBzY2FsZSk7CisgICAgRmxvYXRT
aXplIHNjYWxlIHsgMSwgMSB9OworICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IHBhaW50UmVj
dC5zaXplKCk7CisKKyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHBhaW50
UmVjdC5zaXplKCksIHNjYWxlKSkKKyAgICAgICAgY2xhbXBlZFNpemUuc2NhbGUoc2NhbGUud2lk
dGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogCiAjaWYgVVNFKERJUkVDVDJEKQogICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCByZW5kZXJpbmdNb2Rl
LCBjb250ZXh0LCAxLCBjb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKaW5kZXggN2JjZjA0MTgwMGY3OTlmMTE3NGNm
ZTA0YjgyMmQ2ZDA2NDMxZjY4Ni4uMDU0MGM4ZTQ0MDgyZDVjNjFmMDBmOGZiNzM1YzM2MTgyZDEw
ZmE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCkBAIC0xMDAs
MTkgKzEwMCwxNiBAQCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJC
dWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7Ci0gICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMigpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0
QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5
SWQoaW4yKCkpOwogCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQmxlbmQ6OmNyZWF0ZShmaWx0ZXIsIG1v
ZGUoKSk7Ci0gICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpOwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAg
aW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5w
dXQyKTsgICAgCisgICAgYXV0byBlZmZlY3QgPSBGRUJsZW5kOjpjcmVhdGUobW9kZSgpKTsKKyAg
ICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSksIFdURk1vdmUoaW5w
dXQyKSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxl
bmRFbGVtZW50LmgKaW5kZXggOTAzN2NiMTIxZjkzNjdiNzg4ZDkyMTZlMGI5NDFmYzhiMDZkZWM2
Ni4uZWJhOWFiYjU4MzI4ZjRkYWJmMzQyOGI2YjE3ZGJmNTgyMzc2ODQwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKQEAgLTY5LDcgKzY5LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3Ry
aW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3By
b3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bG9yTWF0cml4RWxlbWVudC5jcHAKaW5kZXggMDUyNDg1NzhjMjc0YzhmYTJiM2UxZjI0NGU0MzY3
ODY4ZjQyYmE5Yy4uY2RlYmVmMThhMWZkY2JiOGYzZmIzNWZiODM4YWM2MDRjOWEyM2Q2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCkBAIC0x
MDAsOSArMTAwLDkgQEAgdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0ck5hbWUpOwog
fQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmls
dGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRvIGlucHV0MSA9IGZp
bHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmls
dGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0MSw4ICsxNDEsOCBAQCBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmls
dGVyQnVpbAogICAgICAgICBmaWx0ZXJWYWx1ZXMuc2hyaW5rVG9GaXQoKTsKICAgICB9CiAKLSAg
ICBhdXRvIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIGZpbHRlclR5cGUs
IFdURk1vdmUoZmlsdGVyVmFsdWVzKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
aW5wdXQxIH07CisgICAgYXV0byBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVy
VHlwZSwgV1RGTW92ZShmaWx0ZXJWYWx1ZXMpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygp
ID0geyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCmluZGV4IDdhYjRhYTQxODFl
N2FiMTk4YjEyZTc3YmUyMDZiOWM1YzQxMDIzZmQuLjk3MDExYTA0MWU0OWExN2ZiNDk4YTFmODQ2
Zjg4MGRiZGQ2OTUyNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5oCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0
RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlS
ZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRl
ZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNw
cAppbmRleCA5MGE1NWI3ZWZmZjdhM2ZlNjA2YTllMDU3OWE3NmVkZTlmOTY4MDExLi4yN2QxMmI1
ZDA4ODNlYmYxZWFjMGFkYWIxMTEyZmVlZWJiMTFmNDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKQEAgLTYzLDkgKzYz
LDkgQEAgdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY28KICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZp
bHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjEoKSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtODYsOCArODYsOCBAQCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdAogICAgICAgICAgICAgYWxwaGEgPSBkb3duY2FzdDxTVkdGRUZ1bmNBRWxlbWVu
dD4oY2hpbGQpLnRyYW5zZmVyRnVuY3Rpb24oKTsKICAgICB9CiAgICAgCi0gICAgYXV0byBlZmZl
Y3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAg
YXV0byBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQx
KSB9OwogICAgIHJldHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKaW5kZXggYmI1ODkzNDdkODgyNmRmYjM2
MDllZGFjNmU4Yjk5M2E0ZGQ1NDg2My4uNjAxNzEwZjdkMzUzNWExNDFhMTU3ODg1NGFmMmIwMzUx
MTI5ZTk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50LmgKQEAgLTQzLDcgKzQzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRTog
c3ZnQXR0cmlidXRlQ2hhbmdlZCBtaXNzaW5nLgogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25z
dCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlS
ZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNW
R0FuaW1hdGVkU3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKaW5kZXggM2NhOTliODc1NzA4YmJkOGE2YmFmNjUzZGMw
NmZlMjA1YWM5ODIzNS4uN2ZjZWQyZTY0NTU0MGUzYjlkZDA5NmNiZTQ5OTFmNTg0MTU1MDUxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKQEAgLTEz
MSwxOSArMTMxLDE2IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9
CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXImIGZpbHRlckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1
aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVp
bGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxk
ZXIuZ2V0RWZmZWN0QnlJZChpbjIoKSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0
MikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9z
aXRlOjpjcmVhdGUoZmlsdGVyLCBzdmdPcGVyYXRvcigpLCBrMSgpLCBrMigpLCBrMygpLCBrNCgp
KTsKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCk7Ci0gICAgaW5wdXRFZmZlY3RzLnJlc2VydmVDYXBhY2l0eSgyKTsKLSAgICBpbnB1
dEVmZmVjdHMuYXBwZW5kKGlucHV0MSk7Ci0gICAgaW5wdXRFZmZlY3RzLmFwcGVuZChpbnB1dDIp
OyAgICAKKyAgICBhdXRvIGVmZmVjdCA9IEZFQ29tcG9zaXRlOjpjcmVhdGUoc3ZnT3BlcmF0b3Io
KSwgazEoKSwgazIoKSwgazMoKSwgazQoKSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9
IHsgV1RGTW92ZShpbnB1dDEpLCBXVEZNb3ZlKGlucHV0MikgfTsKICAgICByZXR1cm4gZWZmZWN0
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKaW5kZXgg
ODFhNzhjODY1N2EwZmEzMDQ0ZGY1YjdjNWEwODBkNmU3Nzk3MjJmNi4uNzRkODE0YzNjMjBlMGZk
MzdlYjZhOGI1M2FmZjU2OWQ4ZDExZGNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuaApAQCAtMTA5LDcgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
dmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAg
IGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
UHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxT
VkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMp
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
LmNwcAppbmRleCBmNzUwNTgxNWRlY2FiYjRlYTM0YjQzNWI0N2VhNWE4MGM2YTI2ZGYxLi4xYTgx
MzRhOWM4YjdmYzBhNTA3NWVkZTgxYTBkMzY5NzBlOThjNDdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKQEAgLTE5MSw5ICsxOTEs
OSBAQCB2b2lkIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0
ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMjQ2LDggKzI0Niw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0
ZXJCCiAgICAgICAgICAgICBkaXZpc29yVmFsdWUgPSAxOwogICAgIH0KIAotICAgIGF1dG8gZWZm
ZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGZpbHRlciwgSW50U2l6ZShvcmRlclhWYWx1
ZSwgb3JkZXJZVmFsdWUpLCBkaXZpc29yVmFsdWUsIGJpYXMoKSwgSW50UG9pbnQodGFyZ2V0WFZh
bHVlLCB0YXJnZXRZVmFsdWUpLCBlZGdlTW9kZSgpLCBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5n
dGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5l
bE1hdHJpeCk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAg
YXV0byBlZmZlY3QgPSBGRUNvbnZvbHZlTWF0cml4OjpjcmVhdGUoSW50U2l6ZShvcmRlclhWYWx1
ZSwgb3JkZXJZVmFsdWUpLCBkaXZpc29yVmFsdWUsIGJpYXMoKSwgSW50UG9pbnQodGFyZ2V0WFZh
bHVlLCB0YXJnZXRZVmFsdWUpLCBlZGdlTW9kZSgpLCBGbG9hdFBvaW50KGtlcm5lbFVuaXRMZW5n
dGhYVmFsdWUsIGtlcm5lbFVuaXRMZW5ndGhZVmFsdWUpLCBwcmVzZXJ2ZUFscGhhKCksIGtlcm5l
bE1hdHJpeCk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEp
IH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAppbmRleCA4NWMwMDI2OThjNjI3N2UwNDM3MGQzNTk4
MmE5NWI4ZDkwNDliMzM5Li4xYjZiYmU0ODcxMjc1YzQyMWM4ZGQ0NDA5YzFiNDg5NzI5NWFhMTBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQu
aApAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVy
RWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVy
cmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCmluZGV4IDE1
MmM5ODVmZDhlOTVhZTk5NTdlNmUyMWQ2YmYyYTEwYzQ1NGJkZDUuLmRkMzk0NTk1Y2Y3MjY0OGE2
N2Q1MjhhMTM0MTUxZGEzNjdmNGM2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCkBAIC0xNTEsOSArMTUxLDkgQEAgdm9pZCBT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0RWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgU1ZHRkVMaWdodEUKICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1l
KTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXImIGZpbHRlcikg
Y29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QKIHsKLSAgICBhdXRv
IGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIGF1dG8g
aW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlmICgh
aW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE2Miw3ICsxNjIsNyBAQCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlcgogICAgIGlmICghbGlnaHRFbGVtZW50KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKLSAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5s
aWdodFNvdXJjZSgqZmlsdGVyQnVpbGRlcik7CisgICAgYXV0byBsaWdodFNvdXJjZSA9IGxpZ2h0
RWxlbWVudC0+bGlnaHRTb3VyY2UoZmlsdGVyQnVpbGRlcik7CiAKICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMTcw
LDggKzE3MCw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyCiAKICAgICBDb2xvciBjb2xvciA9
IHJlbmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5z
dHlsZSgpLnN2Z1N0eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0g
RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBzdXJmYWNlU2NhbGUoKSwg
ZGlmZnVzZUNvbnN0YW50KCksIGtlcm5lbFVuaXRMZW5ndGhYKCksIGtlcm5lbFVuaXRMZW5ndGhZ
KCksIFdURk1vdmUobGlnaHRTb3VyY2UpKTsKLSAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUo
Y29sb3IsIHN1cmZhY2VTY2FsZSgpLCBkaWZmdXNlQ29uc3RhbnQoKSwga2VybmVsVW5pdExlbmd0
aFgoKSwga2VybmVsVW5pdExlbmd0aFkoKSwgV1RGTW92ZShsaWdodFNvdXJjZSkpOworICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUoaW5wdXQxKSB9OwogICAgIHJldHVybiBl
ZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQuaAppbmRleCA2ODk5OTYwOWY0YjZiNTZhNzZjODhlYTU2OTVmMWUwZTllMjA1NTgw
Li5iMmFhYzhiMDNlZDI0ZDIxZDk4YjUxOWZiYThlNWY5NDVjYTMwODBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oCkBAIC01OCw3ICs1
OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRl
KEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVn
aXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdB
bmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCmluZGV4IDBjNWU4MjViYzgyNTYwZjM2
YTI2OWVhNmQ3MjJkZmQwNTE3M2Q4YzIuLjY5MDc1MTM3NTA3ZDZjNjQ3NDlhMWM4YmM0MTJhMGFl
ZTUxYTFhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuY3BwCkBAIC0xMTUsMTkgKzExNSwxNiBAQCB2b2lkIFNWR0ZFRGlzcGxhY2Vt
ZW50TWFwRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTgogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c3ZnQXR0cmli
dXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRl
ciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRlckJ1aWxkZXIp
IGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlk
KGluMSgpKTsKLSAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQo
aW4yKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGlu
MSgpKTsKKyAgICBhdXRvIGlucHV0MiA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChpbjIo
KSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoZmls
dGVyLCB4Q2hhbm5lbFNlbGVjdG9yKCksIHlDaGFubmVsU2VsZWN0b3IoKSwgc2NhbGUoKSk7Ci0g
ICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0
cygpOwotICAgIGlucHV0RWZmZWN0cy5yZXNlcnZlQ2FwYWNpdHkoMik7Ci0gICAgaW5wdXRFZmZl
Y3RzLmFwcGVuZChpbnB1dDEpOwotICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQyKTsgICAg
CisgICAgYXV0byBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlKHhDaGFubmVsU2Vs
ZWN0b3IoKSwgeUNoYW5uZWxTZWxlY3RvcigpLCBzY2FsZSgpKTsKKyAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBXVEZNb3ZlKGlucHV0MSksIFdURk1vdmUoaW5wdXQyKSB9OwogICAgIHJl
dHVybiBlZmZlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQuaAppbmRleCBhYTkxZGYzOGIzNjI5OGYxMjFhMTQxMWM0ZDBhZTVlY2Q1
ODY2NWQzLi5mMmM2ZDBiMThmODVjOTRmMzg0ZjViZDFiZWZjMzU5ZWRlODIzZTZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCkBAIC05
MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0
cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVy
cmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQo
U1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3Ry
eSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjEgeyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5jcHAKaW5kZXggMjJiY2UxZDMzMzE3
Yzk1NzFmZTVkNzlmNGIzMjZhODliZmM1YjY4MS4uYmQ2MWMyNzRlMTUzNGZkOTFhYzM5ODBjNjQ1
NjI5ODk5Y2Y2MjE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dF
bGVtZW50LmNwcApAQCAtOTcsNyArOTcsNyBAQCB2b2lkIFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6
OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEcm9wU2hhZG93RWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFkb3dFbGVtZW50Ojpi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewogICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIp
CkBAIC0xMTEsMTIgKzExMSwxMiBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURyb3BTaGFk
b3dFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZAogICAgIENvbG9y
IGNvbG9yID0gcmVuZGVyZXItPnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3Zn
U3R5bGUuZmxvb2RDb2xvcigpKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gc3ZnU3R5bGUuZmxvb2RP
cGFjaXR5KCk7CiAKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQoaW4xKCkpOworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlk
KGluMSgpKTsKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBhdXRvIGVmZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9u
WCgpLCBzdGREZXZpYXRpb25ZKCksIGR4KCksIGR5KCksIGNvbG9yLCBvcGFjaXR5KTsKLSAgICBl
ZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBpbnB1dDEgfTsKKyAgICBhdXRvIGVmZmVjdCA9IEZF
RHJvcFNoYWRvdzo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpLCBkeCgp
LCBkeSgpLCBjb2xvciwgb3BhY2l0eSk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsg
V1RGTW92ZShpbnB1dDEpIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRURyb3BTaGFkb3dFbGVtZW50LmgKaW5kZXggOWI2MmQyNGI0NTRiYjdkMjc1
OGU3MTJiNjIxYjhjYmU0MmY3NDUxZC4uM2U0MDVkZTQ4OWM2ODFhNzZjNDRmOWE4Mjk3MzNhMjAy
NmI0ZDhmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5o
CkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQg
c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEg
eyBTVkdBbmltYXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFRmxvb2RFbGVtZW50LmNwcAppbmRleCBjMjI4ZTIyZDU2NWQwZTE2M2ZmODdkMGI0YmNhYmQy
MjQ0NzU4ZmMyLi5mMzI4Y2M3YzE1ZWU3OTFiNGFhYmEzYThlNzFhODA0YzgwOTNkY2ZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKQEAgLTU4LDcgKzU4LDcgQEAg
Ym9vbCBTVkdGRUZsb29kRWxlbWVudDo6c2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVm
ZmVjdCogZWZmZWN0LCBjb25zdCBRdWEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFRmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwg
RmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUZsb29kRWxl
bWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTY5
LDcgKzY5LDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVGbG9vZEVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikKICAgICBDb2xvciBjb2xvciA9IHJl
bmRlcmVyLT5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHN2Z1N0eWxlLmZsb29k
Q29sb3IoKSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHN2Z1N0eWxlLmZsb29kT3BhY2l0eSgpOwog
Ci0gICAgcmV0dXJuIEZFRmxvb2Q6OmNyZWF0ZShmaWx0ZXIsIGNvbG9yLCBvcGFjaXR5KTsKKyAg
ICByZXR1cm4gRkVGbG9vZDo6Y3JlYXRlKGNvbG9yLCBvcGFjaXR5KTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAppbmRleCBiOTZhNDNhYTMxM2U3NWU0YTMxNjcy
NDhhMWI2ZjVjZjUxZmVlOTExLi5hZWQ2NjkxOTMzYmQwMmYzMzAxYTkyMzk3Yjc0MDU5ZmY2YmVj
NGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaApAQCAtMzYsNyArMzYs
NyBAQCBwcml2YXRlOgogICAgIGNvbnN0IFNWR1Byb3BlcnR5UmVnaXN0cnkmIHByb3BlcnR5UmVn
aXN0cnkoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0cnk7IH0KIAogICAg
IGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZpbHRlckVmZmVjdCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0cnkgeyAqdGhpcyB9Owog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAK
aW5kZXggN2E5OTgyMjRjOTIxOTU1NTI0NGE4NjljYTc4YTgzMGQ1NjNjNTk5ZC4uZjFlNmJmNDlh
NGRiM2RjYTc3NWM5YjdlZmE1ZGI5ZGM4Njk4ODcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKQEAgLTk1LDE3ICs5NSwxNyBAQCB2b2lk
IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZQogICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyTmFtZSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciog
ZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0
PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImIGZpbHRl
ckJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRF
ZmZlY3RCeUlkKGluMSgpKTsKKyAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZm
ZWN0QnlJZChpbjEoKSk7CiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgaWYgKHN0ZERldmlhdGlvblgoKSA8IDAgfHwgc3RkRGV2aWF0aW9uWSgpIDwgMCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGVmZmVjdCA9IEZFR2F1c3NpYW5C
bHVyOjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb25YKCksIHN0ZERldmlhdGlvblkoKSwgZWRn
ZU1vZGUoKSk7Ci0gICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CisgICAg
YXV0byBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvblgoKSwgc3Rk
RGV2aWF0aW9uWSgpLCBlZGdlTW9kZSgpKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKaW5kZXggZDg5ZTFhNzQ4ZmIy
YzUwOWUyMTRmZTk0YWU0MTAwMWNlNDhlZTBiMi4uZjQwZWIzMzc3OGM0M2RmNjFlZTU4OTYzZWVj
ZjllY2RiYTU0OWNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlcios
IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFByb3BlcnR5UmVnaXN0
cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsKICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKaW5kZXggZGRjZWQyZWQ5ZTlmZTNmNjQzMzE4
ZGM1OTU4MGVmMWMzMzY2NjFiMC4uODI2YmIwNGNiOWUzMDY2YWU2Y2Q5ZThlZGRkODc5Mzc1NDQw
M2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCkBAIC0xNzUs
MTYgKzE3NSwxNiBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpub3RpZnlGaW5pc2hlZChDYWNo
ZWRSZXNvdXJjZSYsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcwogICAgIFJlbmRlclNWR1Jlc291
cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlkYXRpb24oKnBhcmVudFJl
bmRlcmVyKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3QKIHsKICAgICBpZiAobV9jYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIEZFSW1hZ2U6OmNy
ZWF0ZVdpdGhJbWFnZShmaWx0ZXIsIG1fY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIocmVu
ZGVyZXIoKSksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CisgICAgICAgIHJldHVybiBGRUltYWdl
OjpjcmVhdGVXaXRoSW1hZ2UobV9jYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJl
cigpKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIAogICAgIGF1dG8gdGFyZ2V0ID0gU1ZHVVJJ
UmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhocmVmKCksIHRyZWVTY29wZSgp
KTsKICAgICBpZiAoaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YodGFyZ2V0LmVsZW1l
bnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBGRUltYWdl
OjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKGZpbHRlciwgdHJlZVNjb3BlKCksIGhyZWYoKSwgcHJl
c2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJl
ZmVyZW5jZSh0cmVlU2NvcGUoKSwgaHJlZigpLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogfQog
CiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlz
dEhhc2hTZXQ8VVJMPiYgdXJscykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUltYWdlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVt
ZW50LmgKaW5kZXggZDkzZTBkMGRiOGI4ODY2NTQ4MGYyMTAxNWEyNTZiYWRhMTU0YzVjNy4uMmEz
ZTlmNjBlYmZjMjdkMDEzOWIyYzM3Njg1ZjMzOGIxYzhiNjc5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmgKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsKICAgICB2
b2lkIHJlcXVlc3RJbWFnZVJlc291cmNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VF
bGVtZW50LmNwcAppbmRleCBiZTJmNmUwMzA3ZGM1NTE2MDA3OTBmZDViZjE4MmYxZDk0NjIzZGQ2
Li4xYzBkNTgyZDAxM2I4N2NmMGUzYzExMDhiOTYyZjJkMzY5ZGMzMDQyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKQEAgLTQ1LDEzICs0NSwxMiBAQCBSZWY8U1ZH
RkVNZXJnZUVsZW1lbnQ+IFNWR0ZFTWVyZ2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZFTWVyZ2VFbGVt
ZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
TWVyZ2VFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0
ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1
dG8gZWZmZWN0ID0gRkVNZXJnZTo6Y3JlYXRlKGZpbHRlcik7Ci0gICAgYXV0byYgbWVyZ2VJbnB1
dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwotCisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1l
cmdlSW5wdXRzOworICAgIAogICAgIGZvciAoYXV0byYgbWVyZ2VOb2RlIDogY2hpbGRyZW5PZlR5
cGU8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PigqdGhpcykpIHsKLSAgICAgICAgYXV0byBtZXJnZUVm
ZmVjdCA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQobWVyZ2VOb2RlLmluMSgpKTsKKyAg
ICAgICAgYXV0byBtZXJnZUVmZmVjdCA9IGZpbHRlckJ1aWxkZXIuZ2V0RWZmZWN0QnlJZChtZXJn
ZU5vZGUuaW4xKCkpOwogICAgICAgICBpZiAoIW1lcmdlRWZmZWN0KQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChXVEZNb3ZlKG1lcmdlRWZm
ZWN0KSk7CkBAIC02Miw2ICs2MSw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTWVyZ2VF
bGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGCiAgICAgaWYg
KG1lcmdlSW5wdXRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBh
dXRvIGVmZmVjdCA9IEZFTWVyZ2U6OmNyZWF0ZSgpOworICAgIGVmZmVjdC0+aW5wdXRFZmZlY3Rz
KCkgPSBXVEZNb3ZlKG1lcmdlSW5wdXRzKTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCmluZGV4IDc0NTA4NjgxNmY2OTc2YzY2OTdk
YzUxMDc1ODAyZDI4M2NmNGUzYzIuLjQzN2NkNzI1NjMyYzVmNGM1MjQ4OTRjYzMyNmNhMDliNDE5
ODUxN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCkBAIC0zNSw3ICsz
NSw3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgUHJvcGVydHlSZWdpc3RyeSA9IFNWR1Byb3BlcnR5
T3duZXJSZWdpc3RyeTxTVkdGRU1lcmdlRWxlbWVudCwgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzPjsKICAgICBjb25zdCBTVkdQcm9wZXJ0eVJlZ2lzdHJ5JiBwcm9wZXJ0eVJl
Z2lzdHJ5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdHJ5OyB9CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3Bl
cnR5UmVnaXN0cnkgeyAqdGhpcyB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmNwcAppbmRleCBkNmZiOTVjOGUzNzc2ZTZkMjA5M2JlYWNlMzVlMmVk
MTc5NWQzMjFiLi44YjA1NjBjNGRhODAwMzk3MDE0OGUxZTE1ZTJmMzA5N2I5MTUzMTU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC0xMTQs
MjAgKzExNCwxOSBAQCB2b2lkIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0K
IAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Ci0gICAgZmxvYXQgeFJhZGl1cyA9IHJhZGl1
c1goKTsKLSAgICBmbG9hdCB5UmFkaXVzID0gcmFkaXVzWSgpOwotCisgICAgYXV0byBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIGlmICghaW5wdXQxKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7
CisgICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKICAgICBpZiAoeFJhZGl1cyA8IDAgfHwg
eVJhZGl1cyA8IDApCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3Qg
PSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShmaWx0ZXIsIHN2Z09wZXJhdG9yKCksIHhSYWRpdXMsIHlS
YWRpdXMpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1
dG8gZWZmZWN0ID0gRkVNb3JwaG9sb2d5OjpjcmVhdGUoc3ZnT3BlcmF0b3IoKSwgeFJhZGl1cywg
eVJhZGl1cyk7CisgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShpbnB1dDEp
IH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmgKaW5kZXggMWE5MDg4Yjc1Y2Y4ZDg1YWUzOGYyOTNlMTExOThhNjZm
NjZhYTY2OS4uYjIxYjZmNWM0N2I3ODVkZjI4ZjAxM2VkZTU0MDFjODY2ZDQwZTlkZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oCkBAIC04MSw3ICs4MSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2V0RmlsdGVyRWZmZWN0QXR0cmlidXRlKEZp
bHRlckVmZmVjdCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKLSAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUHJvcGVydHlSZWdpc3RyeSBtX3Byb3BlcnR5UmVnaXN0
cnkgeyAqdGhpcyB9OwogICAgIFJlZjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjEgeyBTVkdBbmlt
YXRlZFN0cmluZzo6Y3JlYXRlKHRoaXMpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNl
dEVsZW1lbnQuY3BwCmluZGV4IDAzODI2OGI4OWIyZjE5ZjliZTU2ODczOWQxMjMwMzU0MTAwYTVl
ZTcuLjliMGQ3MDJhMWQyNTg1NDIwOGI5N2ZmOWQ2YWRkMWY4MjdlMjlhZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCkBAIC04MSwxNCArODEsMTQgQEAgdm9p
ZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWls
ZGVyLCBGaWx0ZXImIGZpbHRlcikgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zm
c2V0RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYgZmlsdGVyQnVpbGRlcikgY29uc3QK
IHsKLSAgICBhdXRvIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OworICAgIGF1dG8gaW5wdXQxID0gZmlsdGVyQnVpbGRlci5nZXRFZmZlY3RCeUlkKGluMSgpKTsK
IAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8g
ZWZmZWN0ID0gRkVPZmZzZXQ6OmNyZWF0ZShmaWx0ZXIsIGR4KCksIGR5KCkpOworICAgIGF1dG8g
ZWZmZWN0ID0gRkVPZmZzZXQ6OmNyZWF0ZShkeCgpLCBkeSgpKTsKICAgICBlZmZlY3QtPmlucHV0
RWZmZWN0cygpID0geyBpbnB1dDEgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCmluZGV4IDU3NDczZGNjNzJkYjY3YjEyNWVhMmVk
NDY1ZTM1YjU3MzcwNDliZWUuLjg5OTZmMjgyYjAxZThkOWNkNjY3YmYyMGI1Y2Q5ODhhNTk5YWY4
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKQEAgLTQ3LDcgKzQ3
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7
ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVk
U3RyaW5nOjpjcmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAppbmRleCA5YjdjZTQwYWI5NzE2YWU0ZjMzNWY1
NGIyNGNkYTQ1OWE4NDI5YTU5Li41NjNiOWYxN2I0YTkxNmI3ZDI2NTEyNDJkMzdkM2ZjMGJkNzUw
MmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwCkBAIC0xNjAsOSArMTYwLDkgQEAgdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50OjpsaWdodEVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFNWR0ZFTGlnaHQK
ICAgICBwcmltaXRpdmVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0CitSZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMTcxLDcgKzE3MSw3IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlCiAgICAgaWYgKCFsaWdodEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAotICAgIGF1dG8gbGlnaHRTb3VyY2UgPSBsaWdodEVsZW1lbnQtPmxpZ2h0U291cmNlKCpmaWx0
ZXJCdWlsZGVyKTsKKyAgICBhdXRvIGxpZ2h0U291cmNlID0gbGlnaHRFbGVtZW50LT5saWdodFNv
dXJjZShmaWx0ZXJCdWlsZGVyKTsKIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCkBAIC0xNzksNyArMTc5LDcgQEAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6YnVpbGQoU1ZH
RmlsdGVyQnVpbGRlciogZmlsdGUKICAgICAKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyLT5z
dHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0
eWxlKCkubGlnaHRpbmdDb2xvcigpKTsKIAotICAgIGF1dG8gZWZmZWN0ID0gRkVTcGVjdWxhckxp
Z2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFyQ29u
c3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxV
bml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7CisgICAgYXV0byBlZmZlY3QgPSBG
RVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb2xvciwgc3VyZmFjZVNjYWxlKCksIHNwZWN1bGFy
Q29uc3RhbnQoKSwgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJu
ZWxVbml0TGVuZ3RoWSgpLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSk7CiAgICAgZWZmZWN0LT5pbnB1
dEVmZmVjdHMoKSA9IHsgaW5wdXQxIH07CiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCmluZGV4IDg5
N2I4ZGUxNTZkMWM3OWExZDNmZDhiMzExOGUyYWI2M2I0N2IxNDYuLjRkMWI1MzFjNDJiZWI4Y2Rm
YTIwMTUyMTYyMTE2NTEwZDAwOWJjNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaApAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJp
ZGU7CiAKICAgICBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShGaWx0ZXJFZmZlY3QqLCBj
b25zdCBRdWFsaWZpZWROYW1lJikgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXImKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFByb3BlcnR5UmVnaXN0cnkgbV9wcm9wZXJ0eVJlZ2lzdHJ5IHsgKnRoaXMgfTsK
ICAgICBSZWY8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xIHsgU1ZHQW5pbWF0ZWRTdHJpbmc6OmNy
ZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCmluZGV4
IDM5YmRjYzc3MzU5NjY1MDM2ZTFhZTc0NzYxMmVhZDZmOWFjMzczNzAuLjAwMWRkNTA4OTIxNDk4
OTE1NmQ3MjQ2N2FjMjBmNGZmZjdkNGRjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5jcHAKQEAgLTcwLDE1ICs3MCwxNSBAQCB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnN2
Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0
dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyJiBmaWx0ZXIpIGNvbnN0
CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJiBmaWx0ZXJCdWlsZGVyKSBjb25zdAogewotICAgIGF1dG8gaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgYXV0byBpbnB1dDEgPSBmaWx0ZXJC
dWlsZGVyLmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBlZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZShmaWx0
ZXIpOwotICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IGlucHV0MSB9OworICAgIGF1dG8g
ZWZmZWN0ID0gRkVUaWxlOjpjcmVhdGUoKTsKKyAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0g
eyBXVEZNb3ZlKGlucHV0MSkgfTsKICAgICByZXR1cm4gZWZmZWN0OwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAppbmRleCA0NWIzMjcxODUxZDdmYzBkYzJkM2JjYzg3OWEy
MmRjNDJhMzNhOTFmLi5jYWJhY2U2YmQwMWMyYjFkMzU2NGE1Y2VlNWMyNzViNjY5NmY5ZDQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25z
dCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyJikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVydHlSZWdpc3RyeSB7ICp0aGlzIH07
CiAgICAgUmVmPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMSB7IFNWR0FuaW1hdGVkU3RyaW5nOjpj
cmVhdGUodGhpcykgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmNwcAppbmRleCAxMTU2MTExOWQ4M2UzZmM3ODhhNDJiMTQ4NjdjNjU2NDEyMzM0YTRkLi4x
NTFiN2I5ZThlMDhhNDNlN2NjY2I2ODA5YWE3MjkxNDZkYmJmMGQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCkBAIC0xMTcsMTEgKzExNywxMSBA
QCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRl
ciosIEZpbHRlciYgZmlsdGVyKSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0CiB7CiAgICAgaWYg
KGJhc2VGcmVxdWVuY3lYKCkgPCAwIHx8IGJhc2VGcmVxdWVuY3lZKCkgPCAwKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUoZmlsdGVyLCB0
eXBlKCksIGJhc2VGcmVxdWVuY3lYKCksIGJhc2VGcmVxdWVuY3lZKCksIG51bU9jdGF2ZXMoKSwg
c2VlZCgpLCBzdGl0Y2hUaWxlcygpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCk7CisgICAgcmV0
dXJuIEZFVHVyYnVsZW5jZTo6Y3JlYXRlKHR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgoKSwgYmFzZUZy
ZXF1ZW5jeVkoKSwgbnVtT2N0YXZlcygpLCBzZWVkKCksIHN0aXRjaFRpbGVzKCkgPT0gU1ZHX1NU
SVRDSFRZUEVfU1RJVENIKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50LmgKaW5kZXggYmY5ZGEyMmFkNDJlNDEwYTEwNDM1ZTBhNDBlMzQyNjc3Njll
MTk4YS4uNTBhZjkxMGViNThlMmM5MjI0MWE5MGRhOGNiZGZkYzY4MTRmOTMxNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCkBAIC0xMTksNyArMTE5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzZXRGaWx0ZXJFZmZlY3RBdHRyaWJ1dGUoRmls
dGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIG92ZXJyaWRlOwotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBQcm9wZXJ0eVJlZ2lzdHJ5IG1fcHJvcGVy
dHlSZWdpc3RyeSB7ICp0aGlzIH07CiAgICAgUmVmPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jhc2VG
cmVxdWVuY3lYIHsgU1ZHQW5pbWF0ZWROdW1iZXI6OmNyZWF0ZSh0aGlzKSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcAppbmRleCA5YWQyYzllOTVlMDdkMmE3YzI5N2Y1NmVmZDFiYmZmZTdjMjY5N2Ew
Li4wMGU0ZTY5ODY2NDUzMjkyMmQ2Mzc1ZTc3YWQ0M2IyODVjNzQ0OTRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcApAQCAtOTQsMjIgKzk0LDYgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYgY2gKICAg
ICBpbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3Qp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKGZpbHRlckVmZmVjdCk7Ci0gICAgaWYgKCFmaWx0ZXJFZmZl
Y3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhB
dHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNYKHRydWUpOwotICAgIGlmIChoYXNB
dHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNZ
KHRydWUpOwotICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCi0gICAg
ICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzV2lkdGgodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpCi0gICAgICAgIGZpbHRlckVmZmVjdC0+c2V0SGFzSGVp
Z2h0KHRydWUpOwotfQotCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUm
JiBzdHlsZSwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikKIHsKICAgICByZXR1cm4gY3JlYXRl
UmVuZGVyZXI8UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmU+KCp0aGlzLCBXVEZNb3Zl
KHN0eWxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKaW5kZXggYzk4YjEzZWQ5NjI3NmFmOWUxNGY2NDI4
MTFhNmZkNzQ2NzcyYWNhNy4uODc4ZDExMmMwMjk4N2QxZmJmMTYxNDFhY2UyYjhiODFmNWViMjky
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApAQCAtMzYsOSArMzYsNyBAQCBjbGFzcyBTVkdGaWx0ZXJC
dWlsZGVyOwogY2xhc3MgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIDogcHVi
bGljIFNWR0VsZW1lbnQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKTsKIHB1YmxpYzoKLSAgICB2b2lkIHNldFN0YW5kYXJk
QXR0cmlidXRlcyhGaWx0ZXJFZmZlY3QqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciYpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIm
KSBjb25zdCA9IDA7CiAgICAgLy8gUmV0dXJucyB0cnVlLCBpZiB0aGUgbmV3IHZhbHVlIGlzIGRp
ZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLgogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJFZmZl
Y3RBdHRyaWJ1dGUoRmlsdGVyRWZmZWN0KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmlu
ZGV4IDM4NWFmMjkwODQ4YTNkMGI4M2YxMmFjOTYxOWU2YmY5NmM5ZjIzOTYuLjY4ZDRjNzgyMjE1
NjQ5MmQ1OTA2NzA3MTUyZTQ4YjNhNjc2ZjgxNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0zNSw0NiArMzUsNDEgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUltYWdlOjpGRUltYWdlKEZpbHRlciYgZmlsdGVy
LCBSZWZQdHI8SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUm
IHByZXNlcnZlQXNwZWN0UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJ
bWFnZSkKK0ZFSW1hZ2U6OkZFSW1hZ2UoUmVmUHRyPEltYWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorICAgIDogRmlsdGVy
RWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAgICAsIG1faW1hZ2UoaW1hZ2Up
CiAgICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0K
IAotRkVJbWFnZTo6RkVJbWFnZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3BlJiB0cmVlU2NvcGUs
IGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBw
cmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6SW1h
Z2UpCitGRUltYWdlOjpGRUltYWdlKFRyZWVTY29wZSYgdHJlZVNjb3BlLCBjb25zdCBTdHJpbmcm
IGhyZWYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RS
YXRpbykKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpCiAg
ICAgLCBtX3RyZWVTY29wZSgmdHJlZVNjb3BlKQogICAgICwgbV9ocmVmKGhyZWYpCiAgICAgLCBt
X3ByZXNlcnZlQXNwZWN0UmF0aW8ocHJlc2VydmVBc3BlY3RSYXRpbykKIHsKIH0KIAotUmVmPEZF
SW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShGaWx0ZXImIGZpbHRlciwgUmVmUHRyPElt
YWdlPiBpbWFnZSwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFz
cGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZVdpdGhJbWFnZShSZWZQdHI8
SW1hZ2U+IGltYWdlLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZl
QXNwZWN0UmF0aW8pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZShmaWx0ZXIs
IGltYWdlLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVJbWFnZShpbWFnZSwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi1SZWY8RkVJbWFnZT4g
RkVJbWFnZTo6Y3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImIGZpbHRlciwgVHJlZVNjb3Bl
JiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorUmVmPEZFSW1hZ2U+IEZFSW1hZ2U6OmNy
ZWF0ZVdpdGhJUklSZWZlcmVuY2UoVHJlZVNjb3BlJiB0cmVlU2NvcGUsIGNvbnN0IFN0cmluZyYg
aHJlZiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJh
dGlvKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFSW1hZ2UoZmlsdGVyLCB0cmVlU2Nv
cGUsIGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUltYWdlKHRyZWVTY29wZSwgaHJlZiwgcHJlc2VydmVBc3BlY3RSYXRpbykpOwogfQogCi12
b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkKK0Zsb2F0UmVjdCBGRUlt
YWdlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBwYWludFJl
Y3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0OworICAgIEZsb2F0UmVjdCBpbWFn
ZVJlY3QgPSBwcmltaXRpdmVTdWJyZWdpb247CisKICAgICBpZiAobV9pbWFnZSkgewotICAgICAg
ICBzcmNSZWN0LnNldFNpemUobV9pbWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFz
cGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNSZWN0KTsKLSAgICB9IGVsc2Ug
aWYgKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkpCi0gICAg
ICAgIHNyY1JlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVy
ZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotCi0gICAgaWYgKGNsaXBzVG9C
b3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwot
ICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICAg
ICAgRmxvYXRSZWN0IHNyY1JlY3QgPSB7IHsgfSwgbV9pbWFnZS0+c2l6ZSgpIH07CisgICAgICAg
IG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGltYWdlUmVjdCwgc3JjUmVjdCk7
CisgICAgfQorCisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24o
aW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQogCiBSZW5kZXJFbGVtZW50KiBGRUlt
YWdlOjpyZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdApAQCAtODcsMzcgKzgyLDM3IEBAIFJlbmRl
ckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0CiAgICAgcmV0dXJu
IHRhcmdldC5lbGVtZW50LT5yZW5kZXJlcigpOwogfQogCi12b2lkIEZFSW1hZ2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCitib29sIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVy
ZW5jZWRSZW5kZXJlcigpOwogICAgIGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gRkVJbWFnZSByZXN1bHRz
IGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBhdXRvJiBv
dXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gb3V0cHV0LmltYWdlQnVmZmVyKCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3Qg
PSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCkpOworICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IG91dHB1dC5wcmltaXRpdmVTdWJy
ZWdpb24oKTsKKyAgICBkZXN0UmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAKICAg
ICBGbG9hdFJlY3Qgc3JjUmVjdDsKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHNyY1JlY3Qg
PSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVuZGVyZXItPnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwotICAgIGVsc2UgeworICAgIGlmIChyZW5kZXJlcikg
eworICAgICAgICBzcmNSZWN0ID0gcmVuZGVyZXItPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCk7CisgICAgICAgIHNyY1JlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAg
IH0gZWxzZSB7CiAgICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2lt
YWdlLT5zaXplKCkpOwogICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVj
dChkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgfQogCi0gICAgSW50UG9pbnQgcGFpbnRMb2NhdGlv
biA9IGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKKyAgICBhdXRvIHBhaW50TG9jYXRp
b24gPSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5sb2NhdGlvbigpOwogICAgIGRlc3RSZWN0
Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlvbi55KCkpOwogCiAgICAgYXV0
byYgY29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKICAgICBpZiAocmVuZGVyZXIp
IHsKLSAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSA9IGZp
bHRlcigpLmFic29sdXRlVHJhbnNmb3JtKCk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGFi
c29sdXRlVHJhbnNmb3JtKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7CiAKICAgICAgICAgUmVmUHRyIGNvbnRleHROb2RlID0gZG93bmNhc3Q8U1ZHRWxlbWVu
dD4ocmVuZGVyZXItPmVsZW1lbnQoKSk7CiAgICAgICAgIGlmIChjb250ZXh0Tm9kZS0+aGFzUmVs
YXRpdmVMZW5ndGhzKCkpIHsKQEAgLTEzMiwxMCArMTI3LDExIEBAIHZvaWQgRkVJbWFnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGVudFRy
YW5zZm9ybWF0aW9uOwogICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJTdWJ0cmVl
VG9Db250ZXh0KGNvbnRleHQsICpyZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBjb250ZXh0
LmRyYXdJbWFnZSgqbV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiB0cnVl
OwogfQogCiBUZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXgg
YWMxNjBlZGNlN2MwZTBhMDY3YmRlZmJkNzA3ZjJhYmU1NTkwODFiNi4uMmQ0YjMzNTJlNTgzZGZk
OGM1ZjM5ZDUzNTgwZDA3OWQzOTU3MWRhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtMzQsMjIgKzM0LDIyIEBAIGNsYXNzIFRy
ZWVTY29wZTsKIAogY2xhc3MgRkVJbWFnZSBmaW5hbCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aEltYWdlKEZpbHRlciYs
IFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAg
IHN0YXRpYyBSZWY8RkVJbWFnZT4gY3JlYXRlV2l0aElSSVJlZmVyZW5jZShGaWx0ZXImLCBUcmVl
U2NvcGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUm
KTsKKyAgICBzdGF0aWMgUmVmPEZFSW1hZ2U+IGNyZWF0ZVdpdGhJbWFnZShSZWZQdHI8SW1hZ2U+
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBzdGF0aWMgUmVmPEZF
SW1hZ2U+IGNyZWF0ZVdpdGhJUklSZWZlcmVuY2UoVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCB+RkVJbWFnZSgpID0gZGVmYXVsdDsKLSAgICBGRUltYWdlKEZpbHRlciYsIFJlZlB0cjxJ
bWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwotICAgIEZFSW1hZ2Uo
RmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlJik7CisgICAgRkVJbWFnZShSZWZQdHI8SW1hZ2U+LCBjb25zdCBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKKyAgICBGRUltYWdlKFRyZWVTY29wZSYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCi0gICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUltYWdlIjsgfQorICAg
IFJlbmRlckVsZW1lbnQqIHJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0OwogCi0gICAgRmlsdGVy
RWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gRmlsdGVy
RWZmZWN0VHlwZUltYWdlOyB9CisgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CiAKLSAgICBS
ZW5kZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKKyAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCkgZmluYWw7Ci0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIGZp
bmFsOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIGZpbmFs
OwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZpbmFsOwogCiAgICAgUmVmUHRyPElt
YWdlPiBtX2ltYWdlOwpAQCAtNjEsMyArNjEsNSBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVJ
bWFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuY3BwCmluZGV4IDlhOTRhNDYwMzU4NzkwOGEzODRkMTc0MjdiMzcxOTM1OTJiN2JjZTcuLjYy
NGZlYzM1YThkNjliNDU5YTM3MTEzMDI1YjZkOWMwZWEzZjA0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMjIsMjkgKzIy
LDkyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAKKyNp
bmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5o
IgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
VkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdp
b24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0p
Ci0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURyYXdp
bmdSZWdpb24pCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJF
bGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBG
bG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlv
biwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGZp
bHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRl
clJlZ2lvbiwgY2xpcE9wZXJhdGlvbiwgZmlsdGVyUmVnaW9uLCAmcHJldmlvdXNFZmZlY3QpOwor
fQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50
JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNp
emUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdC
b3gpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXJT
Y2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb246OkludGVy
c2VjdCwgdGFyZ2V0Qm91bmRpbmdCb3gsIG51bGxwdHIpOworfQorCitSZWZQdHI8U1ZHRmlsdGVy
PiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdG
aWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdp
b24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRC
b3VuZGluZ0JveCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBib29sIHBy
aW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKSA9
PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CisKKyAgICBh
dXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGZpbHRlclNjYWxlLCBzb3VyY2VJ
bWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgY2xpcE9wZXJhdGlvbiwgdGFyZ2V0Qm91bmRpbmdCb3gs
IHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSkpOworCisgICAgaWYgKCFwcmV2aW91c0VmZmVjdCkK
KyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKFNvdXJjZUdyYXBoaWM6OmNyZWF0
ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIGJ1aWxkZXIuc2V0dXBCdWlsdGluRWZmZWN0cyh7ICpw
cmV2aW91c0VmZmVjdCB9KTsKKworICAgIGJ1aWxkZXIuc2V0VGFyZ2V0Qm91bmRpbmdCb3godGFy
Z2V0Qm91bmRpbmdCb3gpOworICAgIGJ1aWxkZXIuc2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxl
bWVudC5wcmltaXRpdmVVbml0cygpKTsKKworICAgIGF1dG8gbGFzdEVmZmVjdCA9IGJ1aWxkZXIu
YnVpbGRGaWx0ZXJFZmZlY3RzKGZpbHRlckVsZW1lbnQpOworICAgIGlmICghbGFzdEVmZmVjdCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGV4
cHJlc3Npb247CisgICAgaWYgKCFidWlsZGVyLmJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmaWx0ZXItPnNldExhc3RFZmZlY3QoV1RG
TW92ZShsYXN0RWZmZWN0KSk7CisgICAgZmlsdGVyLT5zZXRFeHByZXNzaW9uKFdURk1vdmUoZXhw
cmVzc2lvbikpOworICAgIHJldHVybiBmaWx0ZXI7Cit9CisKK1NWR0ZpbHRlcjo6U1ZHRmlsdGVy
KGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbiBjbGlw
T3BlcmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBib29sIGVmZmVj
dEJCb3hNb2RlKQorICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6U1ZHRmlsdGVyLCBmaWx0ZXJT
Y2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIGNsaXBPcGVyYXRpb24pCiAgICAg
LCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJS
ZWdpb24oZmlsdGVyUmVnaW9uKQogICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9k
ZSkKIHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFw
UmVjdChmaWx0ZXJSZWdpb24pOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZp
bHRlclJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitGbG9hdFNpemUgU1ZHRmlsdGVy
OjpzY2FsZWRTaXplQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpIGNvbnN0CiB7
CisgICAgRmxvYXRTaXplIHJlc29sdmVkU2l6ZSA9IHNpemU7CiAgICAgaWYgKG1fZWZmZWN0QkJv
eE1vZGUpCi0gICAgICAgIHNpemUgPSBzaXplICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXplKCk7
CisgICAgICAgIHJlc29sdmVkU2l6ZSA9IHJlc29sdmVkU2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdC
b3guc2l6ZSgpOworCisgICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUo
cmVzb2x2ZWRTaXplKTsKK30KKworYm9vbCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQoreworICAgIHNldFNvdXJjZUltYWdlKHsgZmlsdGVyLnNvdXJjZUltYWdlKCkgfSk7
CisgICAgcmV0dXJuIGFwcGx5RmlsdGVyKCk7Cit9CiAKLSAgICByZXR1cm4gRmlsdGVyOjpzY2Fs
ZWRCeUZpbHRlclJlc29sdXRpb24oc2l6ZSkgKiBtX2Fic29sdXRlRmlsdGVyUmVnaW9uLnNpemUo
KSAvIG1fZmlsdGVyUmVnaW9uLnNpemUoKTsKK2Jvb2wgU1ZHRmlsdGVyOjphcHBseUZpbHRlcigp
Cit7CisgICAgaWYgKG1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9leHByZXNzaW9uKSB7CisgICAgICAgIGlm
ICghZWZmZWN0LT5hcHBseSgqdGhpcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ludE91dHNldHMgU1ZHRmlsdGVyOjpvdXRzZXRz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXN0RWZmZWN0LT5vdXRzZXRzKCk7CiB9CiAKLVJl
ZjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWJz
b2x1dGVUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTb3VyY2VEcmF3aW5nUmVn
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK3ZvaWQgU1ZHRmlsdGVyOjpjbGVh
ckZpbHRlckltYWdlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJz
b2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRp
bmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBtX2xhc3RFZmZlY3Qt
PmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgK
aW5kZXggODA5MzE0NmQ2NGFmODg4NWJjM2RhNDkzMDJmNWFlYTBmYjE3MDBjZi4uZTQ2YWZlN2I1
NDU0MTQ5YWFmOWNkOGUzNDk3ZGY4NTc1MjYzZmY5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKQEAgLTIwLDcgKzIwLDYgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
QEAgLTI5LDMyICsyOCw0MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0Zp
bHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworCiBjbGFzcyBTVkdGaWx0ZXIg
ZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRl
cj4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpOwotCi0gICAgRmxvYXRSZWN0IGZp
bHRlclJlZ2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdp
b247IH0KLSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsgfQorICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBj
cmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNp
emUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24sIEZpbHRlckVmZmVjdCYgcHJl
dmlvdXNFZmZlY3QpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmls
dGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNj
YWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIHN0
YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRl
ckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVy
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZpbHRlckVmZmVjdCog
cHJldmlvdXNFZmZlY3QpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlv
bihGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplQnlGaWx0
ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGFwcGx5KGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlGaWx0ZXIoKSBvdmVycmlkZTsK
IAotICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbjsgfQogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3Vu
ZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KIAotICAgIGJv
b2wgaXNTVkdGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIHsgcmV0dXJuIG1fbGFzdEVmZmVjdDsgfQorICAg
IHZvaWQgc2V0TGFzdEVmZmVjdChSZWZQdHI8RmlsdGVyRWZmZWN0PiYmIGxhc3RFZmZlY3QpIHsg
bV9sYXN0RWZmZWN0ID0gV1RGTW92ZShsYXN0RWZmZWN0KTsgfQorICAgIHZvaWQgc2V0RXhwcmVz
c2lvbihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBleHByZXNzaW9uKSB7IG1fZXhwcmVzc2lvbiA9IFdU
Rk1vdmUoZXhwcmVzc2lvbik7IH0KIAogcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0
ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKyAg
ICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3Bl
cmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBib29sIGVmZmVjdEJC
b3hNb2RlKTsKKworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgY2xlYXJGaWx0ZXJJbWFnZSgpIG92ZXJyaWRlOwogCi0gICAgRmxvYXRSZWN0IG1fYWJz
b2x1dGVTb3VyY2VEcmF3aW5nUmVnaW9uOwogICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5n
Qm94OwotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlRmlsdGVyUmVnaW9uOwotICAgIEZsb2F0UmVj
dCBtX2ZpbHRlclJlZ2lvbjsKICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CisKKyAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1f
ZXhwcmVzc2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTVkdGaWx0ZXIpCiAgICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlciYgZmlsdGVyKSB7IHJldHVybiBmaWx0ZXIuaXNTVkdG
aWx0ZXIoKTsgfQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbiYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLmlzU1ZHRmlsdGVyKCk7IH0KIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5kZXggOTZmM2E4MDUw
NDI5NTU1ODEwMzRkOThhNGZkYWM0ZWFmMzA4N2I5NC4uMTkzNjZlMWU5MWIzN2M3MGRhZDU3NTQy
NTRiMWYwZjcxOTQyNjQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTIwLDIwICsyMCwxMTEgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAKLSNp
bmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRl
ICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAorI2lmIEVOQUJMRShERVNUSU5B
VElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0
ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpCit2b2lkIFNWR0Zp
bHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNl
R3JhcGhpYykKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZl
Y3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJj
ZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNvdXJjZUdyYXBoaWMp
KTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCks
IHNvdXJjZUdyYXBoaWMucHRyKCkpOworICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFs
cGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoc291cmNlR3JhcGhpYykpOwog
ICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09M
T1JfU1BBQ0VfTElORUFSX1NSR0IpCitzdGF0aWMgQ29sb3JJbnRlcnBvbGF0aW9uIGNvbG9ySW50
ZXJwb2xhdGlvbkZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBpZiAoYXV0
byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVy
LT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpOworCisgICAg
Ly8gVHJ5IHRvIGRldGVybWluZSB0aGUgcHJvcGVydHkgdmFsdWUgZnJvbSB0aGUgY29tcHV0ZWQg
c3R5bGUuCisgICAgaWYgKGF1dG8gdmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKCZlbGVt
ZW50KS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycykp
IHsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgfQorCisg
ICAgcmV0dXJuIENvbG9ySW50ZXJwb2xhdGlvbjo6QXV0bzsKK30KKyNlbmRpZgorCitzdGF0aWMg
dW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KiBlZmZlY3QsIEhhc2hT
ZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCit7CisgICAgYWxsRWZmZWN0cy5h
ZGQoZWZmZWN0KTsKKyAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsKKyAgICAgICAgY29s
bGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMpOworICAgIH0KKyAgICByZXR1cm4gYWxsRWZmZWN0
cy5zaXplKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB0b3RhbE51bWJlckZpbHRlckVmZmVjdHMo
Y29uc3QgRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0KQoreworICAgIEhhc2hTZXQ8Y29uc3QgRmls
dGVyRWZmZWN0Kj4gYWxsRWZmZWN0czsKKyAgICByZXR1cm4gY29sbGVjdEVmZmVjdHMoJmxhc3RF
ZmZlY3QsIGFsbEVmZmVjdHMpOworfQorCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJC
dWlsZGVyOjpidWlsZEZpbHRlckVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVu
dCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAw
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhUb3RhbE51bWJlckZpbHRlckVmZmVjdHMg
PSAxMDA7CisKKyAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENoaWxkTm9kZXMoKSA+IG1heENv
dW50Q2hpbGROb2RlcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3Q7CisKKyAgICBmb3IgKGF1dG8mIGVmZmVjdEVsZW1lbnQgOiBjaGls
ZHJlbk9mVHlwZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVs
ZW1lbnQpKSB7CisgICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVpbGQoKnRoaXMpOwor
ICAgICAgICBpZiAoIWVmZmVjdCkgeworICAgICAgICAgICAgY2xlYXJFZmZlY3RzKCk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZWZmZWN0
Qm91bmRhcmllcyA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVudCwgbV9wcmltaXRpdmVV
bml0cywgbV90YXJnZXRCb3VuZGluZ0JveCk7CisgICAgICAgIAorICAgICAgICBPcHRpb25TZXQ8
RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzPiBmbGFnczsKKyAgICAgICAgaWYgKGVmZmVjdEVsZW1l
bnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4QXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQo
RmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdzOjpIYXNYKTsKKworICAgICAgICBpZiAoZWZmZWN0RWxl
bWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnlBdHRyKSkKKyAgICAgICAgICAgIGZsYWdzLmFk
ZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1kpOworCisgICAgICAgIGlmIChlZmZlY3RF
bGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKKyAgICAgICAgICAgIGZs
YWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1dpZHRoKTsKKworICAgICAgICBp
ZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQorICAg
ICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzSGVpZ2h0KTsK
KyAgICAgICAgCisgICAgICAgIGVmZmVjdC0+c2V0Qm91bmRhcnlTZXQoeyBlZmZlY3RCb3VuZGFy
aWVzLCBmbGFncyB9KTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5F
QVJfU1JHQikKKyAgICAgICAgaWYgKGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoZWZmZWN0
RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAgICAgICAgICBl
ZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5l
YXJTUkdCKCkpOworI2VuZGlmCisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZmZWN0RWxl
bWVudC5yZW5kZXJlcigpKQorICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVu
Y2VzKGVmZmVjdC5jb3B5UmVmKCksIHJlbmRlcmVyKTsKKworICAgICAgICBhZGQoZWZmZWN0RWxl
bWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKKyAgICB9CisKKyAgICBpZiAoIWVmZmVjdCB8fCB0b3Rh
bE51bWJlckZpbHRlckVmZmVjdHMoKmVmZmVjdCkgPiBtYXhUb3RhbE51bWJlckZpbHRlckVmZmVj
dHMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVmZmVjdDsKK30KKwog
dm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGQoY29uc3QgQXRvbVN0cmluZyYgaWQsIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGVmZmVjdCkKIHsKICAgICBpZiAoaWQuaXNFbXB0eSgpKSB7CkBAIC05Miwx
NSArMTgzLDQzIEBAIHZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkKICAgICBh
ZGRCdWlsdGluRWZmZWN0cygpOwogfQogCi12b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyUmVz
dWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRl
cjo6Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiB7Ci0g
ICAgaWYgKCFlZmZlY3QtPmhhc1Jlc3VsdCgpKQorICAgIGlmICghZWZmZWN0LmZpbHRlckltYWdl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBl
ZmZlY3QuY2xlYXJGaWx0ZXJJbWFnZSgpOworCisgICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBl
ZmZlY3RSZWZlcmVuY2VzKCZlZmZlY3QpKQorICAgICAgICBjbGVhckZpbHRlckltYWdlc1JlY3Vy
c2l2ZSgqcmVmZXJlbmNlKTsKK30KKworc3RhdGljIGJvb2wgYnVpbGRFZmZlY3RFeHByZXNzaW9u
KGNvbnN0IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVmZmVjdFZlY3RvciYg
c3RhY2ssIEZpbHRlckVmZmVjdFZlY3RvciYgZXhwcmVzc2lvbikKK3sKKyAgICAvLyBBIGN5Y2xl
IGlzIGRldGVjdGVkLgorICAgIGlmIChzdGFjay5jb250YWlucyhlZmZlY3QpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBleHByZXNzaW9uLmluc2VydCgwLCBlZmZlY3QpOworCisgICAg
c3RhY2suYXBwZW5kKGVmZmVjdCk7CisKKyAgICBmb3IgKGF1dG8mIGlucHV0RWZmZWN0IDogZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKSkgeworICAgICAgICBpZiAoIWJ1aWxkRWZmZWN0RXhwcmVzc2lv
bihpbnB1dEVmZmVjdCwgc3RhY2ssIGV4cHJlc3Npb24pKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
c3RhY2subGFzdCgpID09IGVmZmVjdCk7CisKKyAgICBzdGFjay5yZW1vdmVMYXN0KCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CiAKLSAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IGVmZmVjdFJlZmVy
ZW5jZXMoZWZmZWN0KSkKLSAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKHJlZmVyZW5jZSk7
Citib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbihGaWx0ZXJFZmZlY3RWZWN0
b3ImIGV4cHJlc3Npb24pIGNvbnN0Cit7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIHN0YWNrOwor
ICAgIHJldHVybiBidWlsZEVmZmVjdEV4cHJlc3Npb24obV9sYXN0RWZmZWN0LCBzdGFjaywgZXhw
cmVzc2lvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCBj
NzdhZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li41NmFkNjcwYzI5N2Y2NzRm
YWFiNDM5N2ZkMTJmNTNmMDhjZjg1OTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0zNyw3ICszNyw3IEBA
IGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaFNldDxG
aWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CiAKLSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFNWR0ZpbHRlckJ1aWxkZXIo
KSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0
UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQogICAgIEZsb2F0UmVjdCB0YXJn
ZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KQEAg
LTYzLDcgKzYzLDExIEBAIHB1YmxpYzoKICAgICBpbmxpbmUgRmlsdGVyRWZmZWN0KiBlZmZlY3RC
eVJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0KSB7IHJldHVybiBtX2VmZmVjdFJlbmRlcmVy
LmdldChvYmplY3QpOyB9CiAKICAgICB2b2lkIGNsZWFyRWZmZWN0cygpOwotICAgIHZvaWQgY2xl
YXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCopOworICAgIHZvaWQgY2xlYXJGaWx0ZXJJ
bWFnZXNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Jik7CisKKyAgICB2b2lkIHNldHVwQnVpbHRpbkVm
ZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmKTsKKyAgICBib29s
IGJ1aWxkRXhwcmVzc2lvbihGaWx0ZXJFZmZlY3RWZWN0b3ImIGV4cHJlc3Npb24pIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBk
ZTBkOWYyNzExZDRmZjVkMjc5OTUwYTEyNDUwOTY3N2Q0NWQ5N2Y4Li5hMGJjNzU3ZDRmZTUzMDA3
ZWNhZjkxMmRhMDM2MmEwZDM0ZjJiMWUxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjEtMTEt
MDcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQ
cm9jZXNzXSBSZWZhY3RvciB0aGUgRmlsdGVyRWZmZWN0IHJlc3VsdCBidWZmZXJzIGludG8gYSBu
ZXcgY2xhc3MgbmFtZWQgJ0ZpbHRlckltYWdlJworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCisyMDIxLTExLTAyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gUmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gRmlsdGVyIGZyb20gRmlsdGVyRWZmZWN0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI1NTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdHdvIGZhaWx1
cmVzIHJlbGF0ZWQgdG8gdGhlIGNvbG9yIHNwYWNlIHRvIFRlc3RFeHBlY3RhdGlvbnMuCisKKyAg
ICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCisyMDIxLTEwLTMxICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBDU1NGaWx0
ZXIgaG9sZHMgYSBsaXN0IG9mIEZpbHRlckZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCiAyMDIxLTEx
LTA2ICBUeWxlciBXaWxjb2NrICA8dHlsZXJfd0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFdl
YktpdDEgUGx1Z2luVmlld0Jhc2Ugb2JqZWN0cyB3aXRoIGFuIGFzc29jaWF0ZWQgd2lkZ2V0KCkt
PnBsYXRmb3JtV2lkZ2V0KCkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXR0YWNobWVudHMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443652</attachid>
            <date>2021-11-08 20:37:34 -0800</date>
            <delta_ts>2021-11-29 21:27:27 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>Filters-split-simplify-geometry-3.patch</filename>
            <type>text/plain</type>
            <size>208330</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9U
ZXN0RXhwZWN0YXRpb25zCmluZGV4IGJkNWM3MDkzOGIxZi4uOGE0YzI1NmMyYzE0IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMKQEAgLTUxODAsMTggKzUxODAsMyBAQCBpbXBvcnRlZC9ibGluay9odHRwL3Rl
c3RzL3BsdWdpbnMgWyBTa2lwIF0KIGltcG9ydGVkL2JsaW5rL3BsdWdpbnMgWyBTa2lwIF0KIGpz
L2RvbS9yZWZsZWN0LXNldC1vbnRvLWRvbS5odG1sIFsgU2tpcCBdCiB1c2Vyc2NyaXB0cy91c2Vy
LXNjcmlwdC1wbHVnaW4tZG9jdW1lbnQuaHRtbCBbIFNraXAgXQotCi0jIFRoZXNlIGZhaWx1cmVz
IHNob3VsZCBiZSBmaXhlZCBvbmNlIHdlYmtpdC5vcmcvYi8yMzEyNTMgaXMgcmVzb2x2ZWQKLXdl
YmtpdC5vcmcvYi8yMzEyNTMgY29tcG9zaXRpbmcvZmlsdGVycy9zdy1uZXN0ZWQtc2hhZG93LW92
ZXJsYXBzLWh3LW5lc3RlZC1zaGFkb3cuaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIz
MTI1MyBjb21wb3NpdGluZy9maWx0ZXJzL3N3LXNoYWRvdy1vdmVybGFwcy1ody1sYXllci5odG1s
IFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjMxMjUzIGNvbXBvc2l0aW5nL2ZpbHRlcnMvc3ct
c2hhZG93LW92ZXJsYXBzLWh3LXNoYWRvdy5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2Iv
MjMxMjUzIGNzczMvZmlsdGVycy9maWx0ZXJzLW9uLXN2Zy1yb290Lmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMzEyNTMgY3NzMy9maWx0ZXJzL3N2Zy1ibHVyLWZpbHRl
ci1jbGlwcGVkLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMzEyNTMg
ZmFzdC9maWx0ZXItaW1hZ2UvZmlsdGVyLWltYWdlLWJsdXIuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQotd2Via2l0Lm9yZy9iLzIzMTI1MyBmYXN0L2dyYWRpZW50cy9jb25pYy1ncmFkaWVudC1l
eHRlbmRlZC1zdG9wcy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjMx
MjUzIGltcG9ydGVkL21vemlsbGEvc3ZnL2R5bmFtaWMtZmlsdGVyLWNvbnRlbnRzLTAxYS5zdmcg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMzEyNTMgaW1wb3J0ZWQvbW96aWxs
YS9zdmcvZmlsdGVycy9mZUNvbXBvc2l0ZS0yLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQotd2Vi
a2l0Lm9yZy9iLzIzMTI1MyBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9maWx0ZXJzL2ZlU3BlY3VsYXJM
aWdodGluZy0xLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIzMTI1MyBz
dmcvZmlsdGVycy9mZUxpZ2h0aW5nLWNsaXBwZWQuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi13
ZWJraXQub3JnL2IvMjMxMjUzIHN2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmlld3BvcnQtZmls
dGVyLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIzMTI1MyBzdmcvZmls
dGVycy9mZUltYWdlLWNvbG9yLWZpZGVsaXR5LnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDI2MmZlYWQ2ZGFhMS4uOWRiNGFlNDljZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjc0IEBACisyMDIxLTExLTA3ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29t
PgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gU2ltcGxpZnkgRmlsdGVyRWZmZWN0IGdlb21ldHJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI3MDUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVm
ZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6
OmNvbm5lY3RDSUZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2U6OmltYWdlRm9yU291cmNlR3JhcGhpYyk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6ZGVzdFJlY3QgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5k
TkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04pOgor
ICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXApOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmltYWdlQ29sb3JTcGFjZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUlt
YWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3Jw
aG9sb2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3k6OmlzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6
OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6
aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6aXNBbHBoYUltYWdlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJi
dWxlbmNlOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVU
dXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6Y2xpcE9wZXJh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZFNpemVCeUZpbHRl
clNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2NhbGVkUmVjdEJ5Rmls
dGVyU2NhbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjptYXhQcmltaXRpdmVT
dWJyZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpjbGlwVG9QcmltaXRp
dmVTdWJyZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpjbGlwVG9NYXhQ
cmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlcjo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyOjphcHBseUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXI6OkZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJC
b3VuZGFyeVNldC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckJvdW5kYXJ5U2V0
OjpGaWx0ZXJCb3VuZGFyeVNldCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNl
dDo6eCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6eSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJCb3VuZGFyeVNldDo6d2lkdGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQm91bmRhcnlTZXQ6OmhlaWdodCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVNYXhQcmltaXRpdmVTdWJyZWdp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFn
ZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVB
YnNvbHV0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdEVmZmVjdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZm
ZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cHJlbXVsdGlwbGllZFJlc3Vs
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5
dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBseWlu
Z0FscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGx5aW5n
QWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb252ZXJ0
UGl4ZWxCdWZmZXJUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5Q29udmVydGVkSW1hZ2VCdWZmZXJUb0Rl
c3RpbmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29w
eUNvbnZlcnRlZFBpeGVsQnVmZmVyVG9EZXN0aW5hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3Jl
YXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjppbnB1dEVmZmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpmaWx0ZXJJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OnNldEJvdW5kYXJ5U2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3Bl
cmF0aW5nQ29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OnNldE9wZXJhdGluZ0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojppc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpp
bWFnZUNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpw
bGF0Zm9ybUFwcGx5Q29yZUltYWdlIGNvbnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVzdWx0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SXNBbHBoYUltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YWJzb2x1dGVQYWlu
dFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpz
ZXRBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6Om1heEVmZmVjdFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0VHlwZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om91dHNldHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNYIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0SGFzWCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1kgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNZKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzV2lkdGggY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRIYXNXaWR0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc0hlaWdodCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEhhc0hlaWdodCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
biBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OmVmZmVjdEJvdW5kYXJpZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpzZXRFZmZlY3RCb3VuZGFyaWVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJFZmZlY3RD
bGFzc1R5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpmaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0
ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlw
c1RvQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6c2V0Q2xpcHNUb0JvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om5vcm1hbGl6ZWRGbG9hdHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1aXJlc1ZhbGlkUHJl
TXVsdGlwbGllZFBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1h
Z2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpwcmltaXRpdmVTdWJyZWdpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmltYWdlUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6aXNBbHBoYUltYWdlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGE6OlNvdXJjZUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhh
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpj
YWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhp
Yzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcG90TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmg6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNsZWFySW50
ZXJtZWRpYXRlUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5Rmls
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjptX3NvdXJjZUdyYXBo
aWMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNldHVwRmlsdGVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVm
ZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwcmltaXRpdmVBdHRy
aWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUltYWdlOjpGRUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNhbGN1
bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjpzY2FsZWRTaXplQnlGaWx0ZXJTY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkRXhwcmVzc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5RmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RFZmZlY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVmZmVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJz
aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmg6CisKIDIwMjEtMTEtMDcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5j
b20+CiAKICAgICAgICAgW0dQVSBQcm9jZXNzXSBSZWZhY3RvciB0aGUgRmlsdGVyRWZmZWN0IHJl
c3VsdCBidWZmZXJzIGludG8gYSBuZXcgY2xhc3MgbmFtZWQgJ0ZpbHRlckltYWdlJwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGEy
OTk3ZTQwZmQ5NS4uOTRlOTA1MzJmNDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDg1OSw2ICsxMDg1OSw3IEBACiAJCTcy
NjZGMDJBMjI0MzE0OUIwMDgzMzk3NSAvKiBTVkdBbmltYXRlZFByb3BlcnR5TGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjZCRTAyOTI3MkZCMTcxMDA3MzhGRkQgLyogRmlsdGVySW1hZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjZCRTAyQjI3MkZCMTcyMDA3MzhGRkQgLyogRmls
dGVySW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QkUwMzkyNzMzNEI0MjAwNzM4RkZE
IC8qIEZpbHRlckJvdW5kYXJ5U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckJvdW5kYXJ5U2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5
MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVY
VHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJF
OCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1ODQ3LDYgKzI1ODQ4LDcgQEAKIAkJ
CQk4NDczMEQ2RjEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmNwcCAqLywKIAkJCQk4
NDczMEQ3MDEyNDhGMEIzMDBEM0E5QzkgLyogRkVUdXJidWxlbmNlLmggKi8sCiAJCQkJODQ1RTcy
RjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovLAorCQkJCTcyNkJFMDM5MjczMzRCNDIw
MDczOEZGRCAvKiBGaWx0ZXJCb3VuZGFyeVNldC5oICovLAogCQkJCTA4QzkyNTE3MEZDQzdDNEEw
MDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwICovLAogCQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4
MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKIAkJCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMg
LyogRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLApAQCAtMzcwMTQsNyArMzcwMTYsNiBAQAog
CQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlp
c2EgPSBQQlhQcm9qZWN0OwogCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlEZWZhdWx0QnVpbGRTeXN0
ZW1UeXBlRm9yV29ya3NwYWNlID0gT3JpZ2luYWw7CiAJCQkJTGFzdFN3aWZ0VXBkYXRlQ2hlY2sg
PSAwNzAwOwogCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAxMTQwOwogCQkJCVRhcmdldEF0dHJpYnV0
ZXMgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXgg
ZTA3ZjU0YTM2ZDMyLi4yOWM3NmY4M2UzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTEyNCwxMiArMTI0LDExIEBAIFJlZlB0cjxJbWFnZT4gQ1NT
RmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZs
b2F0U2l6CiAgICAgYXV0byBzb3VyY2VJbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUg
fTsKICAgICBzb3VyY2VJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIHNvdXJjZUlt
YWdlUmVjdCk7CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKG1fZmls
dGVyT3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7Ci0gICAgCi0gICAgY3NzRmlsdGVyLT5zZXRT
b3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBpZiAoIWNzc0ZpbHRlci0+YnVp
bGQocmVuZGVyZXIsIG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1
bmN0aW9uKSkKKyAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVy
LCBtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmluZ01vZGUpOworICAgIGlmICghY3NzRmlsdGVy
KQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIAorICAgIGNzc0ZpbHRlci0+
c2V0U291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7CiAgICAgY3NzRmlsdGVyLT5zZXRT
b3VyY2VJbWFnZShXVEZNb3ZlKHNvdXJjZUltYWdlKSk7CiAgICAgY3NzRmlsdGVyLT5hcHBseUZp
bHRlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5jcHAKaW5kZXggODhjZTk0MjQ5NzNmLi5iOGU5OGQ3YTgyOWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTEzMyw3ICsx
MzMsNyBAQCBib29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNp
emUmIHNpemUsIEZsb2F0U2l6ZSYgc2NhbGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIFRoZSBhcmVhIG9mIHNjYWxlZCBzaXplIGlzIGJpZ2dlciB0aGFuIHRoZSB1cHBlciBsaW1p
dCwgYWRqdXN0IHRoZSBzY2FsZSB0byBmaXQuCi0gICAgc2NhbGUuc2NhbGUoc3FydGYoTWF4Q2xh
bXBlZEFyZWEgLyAoc2NhbGVkU2l6ZS53aWR0aCgpICogc2NhbGVkU2l6ZS5oZWlnaHQoKSkpKTsK
KyAgICBzY2FsZS5zY2FsZShzcXJ0ZihNYXhDbGFtcGVkQXJlYSAvIHNjYWxlZFNpemUuYXJlYSgp
KSk7CiAgICAgQVNTRVJUKCFzaXplTmVlZHNDbGFtcGluZyhzaXplLCBzY2FsZSkpOwogICAgIHJl
dHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3Jl
SW1hZ2UuaAppbmRleCBlN2JjODUzMjcyYWIuLjdjZDE2YTI4NWZlOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRl
cmVyQ29yZUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLmgKQEAgLTUwLDEzICs1MCwxMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseUVmZmVjdHMoY29uc3QgRmlsdGVyJiwgRmlsdGVyRWZm
ZWN0JikgZmluYWw7CiAgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X291dHB1dEltYWdlOyB9CiAgICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0IGZpbmFsOwot
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmKSBjb25zdCBmaW5hbDsK
KyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0
JikgY29uc3QgZmluYWw7CiAgICAgdm9pZCBjbGVhclJlc3VsdCgpIGZpbmFsOwogICAgIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlKCk7CiAgICAgCiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxDSUltYWdlPiBjb25uZWN0Q0lGaWx0ZXJzKGNvbnN0IEZpbHRlciYsIEZpbHRlckVmZmVjdCYp
OwotICAgIHZvaWQgcmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoY29uc3QgRmlsdGVyJiwgRmlsdGVyRWZmZWN0Jikg
ZmluYWw7CiAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVy
RWZmZWN0Jik7CiAgICAgc3RhdGljIGJvb2wgY2FuUmVuZGVyVXNpbmdDSUZpbHRlcnMoRmlsdGVy
RWZmZWN0Jik7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJD
b3JlSW1hZ2UubW0KaW5kZXggOGI0MDAxNzcwMGUxLi5iZGQ1MWY1NWEzMjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KQEAgLTEwMiw3ICsx
MDIsNyBAQCB2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjphcHBseUVmZmVjdHMo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlckVmZgogICAgIG1fb3V0cHV0SW1hZ2UgPSBjb25u
ZWN0Q0lGaWx0ZXJzKGZpbHRlciwgbGFzdEVmZmVjdCk7CiAgICAgaWYgKCFtX291dHB1dEltYWdl
KQogICAgICAgICByZXR1cm47Ci0gICAgcmVuZGVyVG9JbWFnZUJ1ZmZlcihsYXN0RWZmZWN0KTsK
KyAgICByZW5kZXJUb0ltYWdlQnVmZmVyKGZpbHRlciwgbGFzdEVmZmVjdCk7CiB9CiAKIFJldGFp
blB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6Y29ubmVjdENJRmls
dGVycyhjb25zdCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0JiBlZmZlY3QpCkBAIC0xMTUs
MTAgKzExNSw5IEBAIFJldGFpblB0cjxDSUltYWdlPiBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJ
bWFnZTo6Y29ubmVjdENJRmlsdGVycyhjb25zdCBGaWx0ZXImCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgaW5wdXRJbWFnZXMuYXBwZW5kKGlucHV0SW1hZ2UpOwogICAgIH0K
LSAgICBlZmZlY3QuZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKLSAgICBlZmZl
Y3Quc2V0UmVzdWx0Q29sb3JTcGFjZShlZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAg
ICAKLSAgICBpZiAoZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuaXNFbXB0eSgpIHx8IEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpKQorCisgICAgYXV0byBhYnNvbHV0ZUltYWdlUmVjdCA9IGVmZmVjdC5jYWxjdWxhdGVBYnNv
bHV0ZUltYWdlUmVjdChmaWx0ZXIpOworICAgIGlmIChhYnNvbHV0ZUltYWdlUmVjdC5pc0VtcHR5
KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlSW1hZ2VSZWN0LnNp
emUoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN3aXRjaCAoZWZmZWN0
LmZpbHRlclR5cGUoKSkgewpAQCAtMjM5LDIxICsyMzgsMjIgQEAgSW1hZ2VCdWZmZXIqIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAogICAgIHJldHVybiBtX291
dHB1dEltYWdlQnVmZmVyLmdldCgpOwogfQogICAgIAotdm9pZCBGaWx0ZXJFZmZlY3RSZW5kZXJl
ckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3Qp
Cit2b2lkIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVy
KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCiB7Ci0gICAg
RmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZl
Y3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIg
PSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAxLCBsYXN0RWZmZWN0
LnJlc3VsdENvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBJbnRTaXplIGRl
c3RTaXplID0gbGFzdEVmZmVjdC5jYWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVjdChmaWx0ZXIpLnNp
emUoKTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNp
emUoZGVzdFNpemUpOworICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAxLCBsYXN0RWZmZWN0LmltYWdlQ29sb3JTcGFjZSgp
LCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAgIGlmICghbV9vdXRwdXRJbWFnZUJ1ZmZlcikgewog
ICAgICAgICBjbGVhclJlc3VsdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgW3No
YXJlZENJQ29udGV4dCgpLmdldCgpIHJlbmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3Vy
ZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZlci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVz
dFJlY3QobGFzdEVmZmVjdCkgY29sb3JTcGFjZTpsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2Uo
KS5wbGF0Zm9ybUNvbG9yU3BhY2UoKV07CisgICAgW3NoYXJlZENJQ29udGV4dCgpLmdldCgpIHJl
bmRlcjogbV9vdXRwdXRJbWFnZS5nZXQoKSB0b0lPU3VyZmFjZTogbV9vdXRwdXRJbWFnZUJ1ZmZl
ci0+c3VyZmFjZSgpLnN1cmZhY2UoKSBib3VuZHM6ZGVzdFJlY3QoZmlsdGVyLCBsYXN0RWZmZWN0
KSBjb2xvclNwYWNlOmxhc3RFZmZlY3QuaW1hZ2VDb2xvclNwYWNlKCkucGxhdGZvcm1Db2xvclNw
YWNlKCldOwogfQogICAgIAotRmxvYXRSZWN0IEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdl
OjpkZXN0UmVjdChjb25zdCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpIGNvbnN0CitGbG9hdFJl
Y3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpIGNvbnN0CiB7Ci0gICAgSW50
U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Cisg
ICAgSW50U2l6ZSBkZXN0U2l6ZSA9IGxhc3RFZmZlY3QuY2FsY3VsYXRlQWJzb2x1dGVJbWFnZVJl
Y3QoZmlsdGVyKS5zaXplKCk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgZGVzdFNpemUpOwogICAgIHJldHVybiBkZXN0UmVjdDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJs
ZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggMzY3NzJiMGYzZWE5Li5kMzcwZjAyMmVhMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9G
RUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9h
cm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0yNSw4ICsyNSw3IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZm5kZWYgRkVCbGVuZE5FT05faAotI2RlZmluZSBGRUJsZW5kTkVPTl9oCisj
cHJhZ21hIG9uY2UKIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKIApAQCAtMTA3LDQz
ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLQot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7
Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBz
b3VyY2VQaXhlbEFycmF5QSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5n
UmVjdCk7Ci0KLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGF1dG8g
c291cmNlUGl4ZWxBcnJheUIgPSBpbjItPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QkRyYXdp
bmdSZWN0KTsKLQotICAgIHVuc2lnbmVkIHNvdXJjZVBpeGVsQXJyYXlMZW5ndGggPSBzb3VyY2VQ
aXhlbEFycmF5QS0+bGVuZ3RoKCk7Ci0gICAgQVNTRVJUKHBpeGVsQXJyYXlMZW5ndGggPT0gc291
cmNlUGl4ZWxBcnJheUItPmxlbmd0aCgpKTsKLQotICAgIGlmIChzb3VyY2VQaXhlbEFycmF5TGVu
Z3RoID49IDgpIHsKLSAgICAgICAgcGxhdGZvcm1BcHBseU5FT04oc291cmNlUGl4ZWxBcnJheUEt
PmRhdGEoKSwgc291cmNlUGl4ZWxBcnJheUItPmRhdGEoKSwgZGVzdGluYXRpb25QaXhlbEFycmF5
LmRhdGEoKSwgc291cmNlUGl4ZWxBcnJheUxlbmd0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgLy8gSWYgdGhlcmUgaXMganVzdCBvbmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4K
LSAgICBBU1NFUlQoc291cmNlUGl4ZWxBcnJheUxlbmd0aCA+IDApOwotICAgIHVpbnQzMl90IHNv
dXJjZUFbMl0gPSB7MCwgMH07Ci0gICAgdWludDMyX3Qgc291cmNlQkFuZERlc3RbMl0gPSB7MCwg
MH07Ci0KLSAgICBzb3VyY2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJj
ZVBpeGVsQXJyYXlBLT5kYXRhKCkpWzBdOwotICAgIHNvdXJjZUJBbmREZXN0WzBdID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KHNvdXJjZVBpeGVsQXJyYXlCLT5kYXRhKCkpWzBdOwotICAg
IHBsYXRmb3JtQXBwbHlORU9OKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUEpLCBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCQW5kRGVzdCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgOCk7Ci0gICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdCo+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERl
c3RbMF07Ci19Ci0KLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hh
ciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25l
ZCBjaGFyKiBkc3RQaXhlbEFycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKQordm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVP
Tih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxB
cnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGNvbG9yQXJyYXlM
ZW5ndGgpCiB7CiAgICAgdWludDhfdCogc291cmNlUGl4ZWxBID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oc3JjUGl4ZWxBcnJheUEpOwogICAgIHVpbnQ4X3QqIHNvdXJjZVBpeGVsQiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNyY1BpeGVsQXJyYXlCKTsKQEAgLTIwMiw4ICsxNjUs
NDYgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQ
aXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3IKICAgICB9CiB9CiAKK2Jvb2wgRkVCbGVuZDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCit7CisgICAgYXV0byYgaW5wdXQg
PSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlu
cHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJ
bWFnZSgpOworCisgICAgYXV0byYgb3VwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZl
cihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIW91cHV0
UGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG91dHB1dFBp
eGVsQXJyYXkgPSBvdXB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIGlucHV0SW1h
Z2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOworICAgIGF1
dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QpOworCisgICAgYXV0byBpbnB1
dEltYWdlUmVjdDIgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dDIpOwor
ICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5MiA9IGlucHV0Mi5nZXRQaXhlbEJ1ZmZlcihBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdDIpOworCisgICAg
dW5zaWduZWQgaW5wdXRQaXhlbEFycmF5TGVuZ3RoID0gaW5wdXRQaXhlbEFycmF5LT5sZW5ndGgo
KTsKKyAgICBBU1NFUlQoaW5wdXRQaXhlbEFycmF5TGVuZ3RoID09IGlucHV0UGl4ZWxBcnJheTIt
Pmxlbmd0aCgpKTsKKworICAgIGlmIChpbnB1dFBpeGVsQXJyYXlMZW5ndGggPj0gOCkgeworICAg
ICAgICBwbGF0Zm9ybUFwcGx5TkVPTihpbnB1dFBpeGVsQXJyYXktPmRhdGEoKSwgaW5wdXRQaXhl
bEFycmF5Mi0+ZGF0YSgpLCBvdXRwdXRQaXhlbEFycmF5LmRhdGEoKSwgaW5wdXRQaXhlbEFycmF5
TGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gSWYgdGhlcmUg
aXMganVzdCBvbmUgcGl4ZWwgd2UgZXhwYW5kIGl0IHRvIHR3by4KKyAgICBBU1NFUlQoaW5wdXRQ
aXhlbEFycmF5TGVuZ3RoID4gMCk7CisgICAgdWludDMyX3Qgc291cmNlQVsyXSA9IHsgMCwgMCB9
OworICAgIHVpbnQzMl90IHNvdXJjZUJBbmREZXN0WzJdID0geyAwLCAwIH07CisKKyAgICBzb3Vy
Y2VBWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGlucHV0UGl4ZWxBcnJheS0+ZGF0
YSgpKVswXTsKKyAgICBzb3VyY2VCQW5kRGVzdFswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihpbnB1dFBpeGVsQXJyYXkyLT5kYXRhKCkpWzBdOworCisgICAgcGxhdGZvcm1BcHBseU5F
T04ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291cmNlQSksIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KHNvdXJjZUJBbmREZXN0KSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc291
cmNlQkFuZERlc3QpLCA4KTsKKyAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ob3V0cHV0
UGl4ZWxBcnJheS5kYXRhKCkpWzBdID0gc291cmNlQkFuZERlc3RbMF07CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotCi0jZW5kaWYgLy8gRkVCbGVuZE5FT05faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50
TGlnaHRTb3VyY2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkMy4uMWZiMDM3ZmUxMWY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdo
dFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29u
c3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIERpc3Rh
bnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsKICAgICBmbG9hdCBhemlt
dXRoID0gZGVnMnJhZChtX2F6aW11dGgpOwogICAgIGZsb2F0IGVsZXZhdGlvbiA9IGRlZzJyYWQo
bV9lbGV2YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKaW5kZXggYzFlMzBlZGU3NTk4
Li4wMDNmZTE5Y2QxMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaApAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRBemltdXRoKGZsb2F0KSBvdmVycmlkZTsKICAgICBi
b29sIHNldEVsZXZhdGlvbihmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGlu
Z0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdCYs
IFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1
dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZs
b2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXgg
NTY0NGZlYTdiZjc3Li45ODc2NTczY2ZmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtNTQsMjMgKzU0LDI5IEBA
IGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2RlKQogfQogCiAjaWYgIUhB
VkUoQVJNX05FT05fSU5UUklOU0lDUykKLXZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYpCitib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOworICAgIGF1dG8mIGlucHV0
ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIGlucHV0MiA9ICpp
bnB1dEVmZmVjdCgxKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVy
SW1hZ2UoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVz
dWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBo
aWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAg
YXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBhdXRvIGlucHV0SW1h
Z2UyID0gaW5wdXQyLmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlIHx8ICFpbnB1
dEltYWdlMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBvdXRwdXRJbWFnZSA9
IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjItPmltYWdl
QnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQot
ICAgICAgICByZXR1cm47CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IEZsb2F0UmVjdChpbnB1
dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOworICAgIGF1dG8gaW5wdXRJbWFn
ZVJlY3QyID0gRmxvYXRSZWN0KGlucHV0Mi5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1
dCkpOwogCi0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwg
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZm
ZXItPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9t
b2RlIH0pOworICAgIEdyYXBoaWNzQ29udGV4dCYgb3V0cHV0Q29udGV4dCA9IG91dHB1dEltYWdl
LT5jb250ZXh0KCk7CisKKyAgICBvdXRwdXRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJ
bWFnZTIsIGlucHV0SW1hZ2VSZWN0Mik7CisgICAgb3V0cHV0Q29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0LCB7IHsgfSwgaW5wdXRJbWFnZS0+bG9naWNh
bFNpemUoKSB9LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAppbmRleCBlZWQzMThlOGMzNWIuLjMzNjkz
YzE5OTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmgKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBG
RUJsZW5kKEJsZW5kTW9kZSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2ln
bmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5Qiwg
dW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOwogICAgIHZvaWQgcGxhdGZvcm1BcHBseU5FT04o
dW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJy
YXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5k
ZXggYjY2NGYyOWU2NDkxLi5hOWU1MjJhOGVjYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAt
MjczLDIzICsyNzMsMzkgQEAgdm9pZCBlZmZlY3RUeXBlKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhl
bEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIEludFMKICAgICB9CiB9CiAKLXZv
aWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiti
b29sIEZFQ29sb3JNYXRyaXg6OmlzQWxwaGFJbWFnZSgpIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIHJldHVybiBtX3R5cGUgPT0gRkVDT0xPUk1B
VFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE7Cit9CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCi0gICAg
ICAgIHJldHVybjsKK1ZlY3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3Jt
YWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFs
aXplZEZsb2F0KHZhbHVlc1tpXSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisK
K2Jvb2wgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
Cit7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7Cisg
ICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CisgICAgCisgICAgYXV0byBvdXRwdXRJ
bWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5pbWFn
ZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlmIChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgYXV0byBpbnB1dEJ1ZmZlciA9
IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKGlucHV0QnVmZmVyKSB7CisgICAgICAgIGF1
dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBGbG9hdFJlY3QoaW5wdXQucmVsYXRpdmVBYnNvbHV0ZUlt
YWdlUmVjdChvdXRwdXQpKTsKKyAgICAgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKmlucHV0QnVmZmVyLCBhYnNvbHV0ZUltYWdlUmVjdCk7CisgICAgfQogCi0gICAg
UGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OwotICAg
IEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dp
Y2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVs
QnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgb3V0cHV0LmNvbG9yU3BhY2UoKSB9OworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBv
aW50KCksIG91dHB1dEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKKyAgICBhdXRvIHBp
eGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0
KTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwog
ICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwpAQCAt
MzEwLDExICszMjYsMTEgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKICAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklY
X1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGlt
ZW5zaW9ucyk7Ci0gICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwg
aW1hZ2VSZWN0KTsKKyAgICBvdXRwdXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVy
LCBpbWFnZVJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaAppbmRleCAyMjlmZjBiOGM0NGYuLmMzZjhiZDBiYzRhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmgKQEAgLTQ2LDExICs0NiwxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW5saW5l
IHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9h
dCB2YWx1ZSk7CiAgICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBv
bmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLQorICAgIHN0YXRpYyBWZWN0
b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKTsK
KyAgICAKIHByaXZhdGU6CiAgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZlY3Rv
cjxmbG9hdD4mJik7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODhlNTlmNTA4OTRlLi4yY2Q3Y2ZjYjU1YjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMTAzLDEzICsxMDMsMTQgQEAgdm9p
ZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYgdmFs
dWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCitib29sIEZFQ29tcG9uZW50
VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1
dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1h
Z2UoKTsKIAotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHVucHJlbXVsdGlwbGll
ZFJlc3VsdCgpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhl
bEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwogICAgIGlm
ICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKQEAgLTExOSw4ICsxMjAsOSBAQCB2b2lkIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIExv
b2t1cFRhYmxlIGFscGhhVGFibGU7CiAgICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwg
Z3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKIAotICAgIEludFJlY3QgZHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgIGluLT5jb3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgYXV0
byBpbnB1dEltYWdlUmVjdCA9IG91dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0
KTsKKyAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIoZGVzdGluYXRpb25QaXhlbEFycmF5LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOworCiAgICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFycmF5
TGVuZ3RoID0gZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOwogICAgIHVpbnQ4X3QqIGRh
dGEgPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOwogICAgIGZvciAodW5zaWduZWQgcGl4
ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0aDsg
cGl4ZWxPZmZzZXQgKz0gNCkgewpAQCAtMTI5LDYgKzEzMSw4IEBAIHZvaWQgRkVDb21wb25lbnRU
cmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAyXSA9IGJsdWVUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMl1dOwog
ICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhbHBoYVRhYmxlW2RhdGFbcGl4ZWxPZmZz
ZXQgKyAzXV07CiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSYgcmVkVGFibGUsIExv
b2t1cFRhYmxlJiBncmVlblRhYmxlLCBMb29rdXBUYWJsZSYgYmx1ZVRhYmxlLCBMb29rdXBUYWJs
ZSYgYWxwaGFUYWJsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgKaW5kZXggNmFmZWU1ZTk2
ODYxLi42YWRhOWMwYWJiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC03MSw3
ICs3MSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3Vw
VGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJs
dWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAppbmRleCAyYjg3OTI0MGUx
Y2IuLjM0YmU4YTc2YzI3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTE5MywxMDAgKzE5MywxMDcg
QEAgaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3UKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRl
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKK0Zsb2F0
UmVjdCBGRUNvbXBvc2l0ZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKICAgICBzd2l0
Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46Ci0gICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVRPUDogewogICAgICAgICAvLyBGb3IgSW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBq
dXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgogICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVj
dC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZl
Y3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFi
c29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiBpbnB1dDIgPSAqaW5wdXRFZmZlY3QoMSktPmZp
bHRlckltYWdlKCk7CisgICAgICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3Vi
cmVnaW9uKGlucHV0Mi5pbWFnZVJlY3QoKSwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICB9CisK
ICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6CiAgICAgICAgIC8vIEFy
aXRobWV0aWMgbWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9u
LiBTbyB3ZSBjYW4ndAogICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUu
Ci0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0
UmVjdCgpKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZpbHRlci5tYXhQcmlt
aXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKKwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdChm
aWx0ZXIsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9zaXRl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOwotCisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdl
KCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0ZXJJbWFnZSgpOwor
ICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworICAgIAogICAgIGlmIChtX3R5cGUg
PT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBhdXRvIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7Ci0gICAgICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0
byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAg
ICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNl
UGl4ZWxBcnJheSA9IGluLT5nZXRQcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVj
dCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7Ci0gICAgICAgIGluMi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRp
b25QaXhlbEFycmF5LCBlZmZlY3RCRHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
CisgICAgICAgIGF1dG8mIG91dHB1dFBpeGVsQXJyYXkgPSBvdXRwdXRQaXhlbEJ1ZmZlci0+ZGF0
YSgpOwogCi0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKCpzb3VyY2VQaXhlbEFy
cmF5LCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaW5wdXRJbWFnZVJlY3QgPSBvdXRwdXQucmVsYXRp
dmVBYnNvbHV0ZUltYWdlUmVjdChpbnB1dCk7CisgICAgICAgIGF1dG8gaW5wdXRQaXhlbEFycmF5
ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgICAgIGlm
ICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgYXV0byBpbnB1dEltYWdlUmVjdDIgPSBvdXRwdXQucmVsYXRpdmVBYnNvbHV0ZUlt
YWdlUmVjdChpbnB1dDIpOworICAgICAgICBpbnB1dDIuY29weVBpeGVsQnVmZmVyKG91dHB1dFBp
eGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1h
Z2VSZWN0Miwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAgCisgICAgICAgIHBsYXRm
b3JtQXJpdGhtZXRpY1NvZnR3YXJlKCppbnB1dFBpeGVsQXJyYXksIG91dHB1dFBpeGVsQXJyYXks
IG1fazEsIG1fazIsIG1fazMsIG1fazQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAg
IGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHQm
IGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8gb3V0cHV0
SW1hZ2UgPSBvdXRwdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIW91dHB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4y
LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSBvdXRwdXRJ
bWFnZS0+Y29udGV4dCgpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGlucHV0LmltYWdlQnVm
ZmVyKCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlcjIgPSBpbnB1dDIuaW1hZ2VCdWZmZXIoKTsKICAg
ICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlcjIpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IEZsb2F0UmVj
dChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOworICAgIGF1dG8gaW5w
dXRJbWFnZVJlY3QyID0gRmxvYXRSZWN0KGlucHV0Mi5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0
KG91dHB1dCkpOworICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
MiwgaW5wdXRJbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdlUmVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKICAgICAgICAgLy8gQXBwbGllcyBvbmx5IHRv
IHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0
ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRl
cnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGluYXRpb25SZWN0
LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlv
blJlY3QgPSBpbnB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpOworICAgICAgICBkZXN0aW5hdGlvblJl
Y3QuaW50ZXJzZWN0KGlucHV0Mi5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKKyAgICAgICAgZGVzdGlu
YXRpb25SZWN0LmludGVyc2VjdChvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKSk7CiAgICAgICAg
IGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBh
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgICAgIEludFJlY3Qgc291cmNlUmVj
dCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7
Ci0gICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJ
biB9KTsKKyAgICAgICAgYXV0byBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3RpbmF0aW9u
UmVjdCAtIG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAgIGF1
dG8gc291cmNlUmVjdCA9IGRlc3RpbmF0aW9uUmVjdCAtIGlucHV0LmFic29sdXRlSW1hZ2VSZWN0
KCkubG9jYXRpb24oKTsKKyAgICAgICAgYXV0byBzb3VyY2VSZWN0MiA9IGRlc3RpbmF0aW9uUmVj
dCAtIGlucHV0Mi5hYnNvbHV0ZUltYWdlUmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGFkanVzdGVkRGVzdGluYXRp
b25SZWN0LCBzb3VyY2VSZWN0Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlciwgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QsIHNvdXJjZVJlY3QsIHsg
Q29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluIH0pOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkgfSwg
Q29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdlUmVjdCk7CisgICAgICAg
IGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGlucHV0SW1hZ2VS
ZWN0MiwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlQXRvcCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0Mik7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJbWFnZVJlY3QsIHsgeyB9LCBpbWFnZUJ1
ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9SOgotICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxv
Z2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlhPUik7CisgICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGlucHV0SW1hZ2VSZWN0Mik7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgaW5wdXRJ
bWFnZVJlY3QsIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVP
cGVyYXRvcjo6WE9SKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9MSUdIVEVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7
IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBs
dXNMaWdodGVyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyMiwgaW5wdXRJbWFnZVJlY3QyKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyLCBpbnB1dEltYWdlUmVjdCwgeyB7IH0sIGltYWdlQnVmZmVy
LT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHJl
dHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRl
eCAxNDM1OGRjM2NmNmMuLjZiMDdiYTFmOWIwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNTksMTAgKzU5
LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVP
cGVyYXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwogCi0gICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKLSAgICBi
b29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9Cisg
ICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBib29sIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGlubGluZSB2b2lkIHBsYXRmb3Jt
QXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggNjgxNzQ0ZWE0MjQwLi42
Zjk4ZjBiNjA2M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjQsNiArMjQsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAor
I2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
ICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KQEAgLTM2Myw0
OCArMzY0LDU1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRl
clBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKICAgICAgICAgZmFzdFNldE91dGVy
UGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKIH0KIAotdm9pZCBG
RUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK0Zs
b2F0UmVjdCBGRUNvbnZvbHZlTWF0cml4OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICByZXR1cm4gZmlsdGVy
Lm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOworfQogCi0gICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9wcmVzZXJ2ZUFscGhhID8gdW5wcmVtdWx0aXBs
aWVkUmVzdWx0KCkgOiBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlv
blBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Citib29sIEZFQ29udm9sdmVNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQoreworICAgIGF1dG8mIGlucHV0ID0g
KmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0
ZXJJbWFnZSgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRw
dXQucGl4ZWxCdWZmZXIobV9wcmVzZXJ2ZUFscGhhID8gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkIDogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byYgb3V0cHV0UGl4ZWxB
cnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IHNvdXJjZVBpeGVsQXJyYXk7CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91
dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0KTsKKyAgICAKKyAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGlucHV0UGl4ZWxBcnJheTsKICAgICBpZiAobV9wcmVzZXJ2ZUFs
cGhhKQotICAgICAgICBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPmdldFVucHJlbXVsdGlwbGllZFJl
c3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICAgICAg
aW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbnB1dEltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKICAgICBlbHNlCi0gICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+Z2V0UHJlbXVs
dGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
LSAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgaW5w
dXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
CiAKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwor
ICAgIGlmICghaW5wdXRQaXhlbEFycmF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgSW50U2l6ZSBpbWFnZVNpemUgPSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7
CiAgICAgCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKLSAgICAgICAgKnNvdXJj
ZVBpeGVsQXJyYXksCi0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKLSAgICAgICAgcGFp
bnRTaXplLndpZHRoKCksCi0gICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgKmlu
cHV0UGl4ZWxBcnJheSwKKyAgICAgICAgb3V0cHV0UGl4ZWxBcnJheSwKKyAgICAgICAgaW1hZ2VT
aXplLndpZHRoKCksCisgICAgICAgIGltYWdlU2l6ZS5oZWlnaHQoKSwKICAgICAgICAgbV9iaWFz
ICogMjU1LAotICAgICAgICBub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4KQorICAgICAg
ICBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4KQogICAgIH07
CiAKICAgICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVyZWQgcGl4ZWxzCi0gICAgaW50IGNsaXBSaWdo
dCA9IHBhaW50U2l6ZS53aWR0aCgpIC0gbV9rZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgaW50IGNs
aXBCb3R0b20gPSBwYWludFNpemUuaGVpZ2h0KCkgLSBtX2tlcm5lbFNpemUuaGVpZ2h0KCk7Cisg
ICAgaW50IGNsaXBSaWdodCA9IGltYWdlU2l6ZS53aWR0aCgpIC0gbV9rZXJuZWxTaXplLndpZHRo
KCk7CisgICAgaW50IGNsaXBCb3R0b20gPSBpbWFnZVNpemUuaGVpZ2h0KCkgLSBtX2tlcm5lbFNp
emUuaGVpZ2h0KCk7CiAKICAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8fCBjbGlwQm90dG9tIDwgMCkg
ewogICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXppZWQgZm9yIHNwZWVkCi0g
ICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGludCBp
dGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRS
ZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgeworICAgIGlmIChpbnQg
aXRlcmF0aW9ucyA9IChpbWFnZVNpemUud2lkdGgoKSAqIGltYWdlU2l6ZS5oZWlnaHQoKSkgLyBz
X21pbmltYWxSZWN0RGltZW5zaW9uKSB7CiAgICAgICAgIGludCBzdHJpZGUgPSBjbGlwQm90dG9t
IC8gaXRlcmF0aW9uczsKICAgICAgICAgaW50IGNodW5rQ291bnQgPSAoY2xpcEJvdHRvbSArIHN0
cmlkZSAtIDEpIC8gc3RyaWRlOwogCkBAIC00MjAsMTMgKzQyOCwxNSBAQCB2b2lkIEZFQ29udm9s
dmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIGNsaXBS
aWdodCArPSBtX3RhcmdldE9mZnNldC54KCkgKyAxOwogICAgIGNsaXBCb3R0b20gKz0gbV90YXJn
ZXRPZmZzZXQueSgpICsgMTsKICAgICBpZiAobV90YXJnZXRPZmZzZXQueSgpID4gMCkKLSAgICAg
ICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwg
bV90YXJnZXRPZmZzZXQueSgpKTsKLSAgICBpZiAoY2xpcEJvdHRvbSA8IHBhaW50U2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9t
LCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgbV90YXJnZXRP
ZmZzZXQueSgpKTsKKyAgICBpZiAoY2xpcEJvdHRvbSA8IGltYWdlU2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBpbWFnZVNp
emUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKTsKICAgICBpZiAobV90YXJnZXRPZmZzZXQu
eCgpID4gMCkKICAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3Rhcmdl
dE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgaWYgKGNs
aXBSaWdodCA8IHBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWlu
dGluZ0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgo
KSwgY2xpcEJvdHRvbSk7CisgICAgaWYgKGNsaXBSaWdodCA8IGltYWdlU2l6ZS53aWR0aCgpKQor
ICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRP
ZmZzZXQueSgpLCBpbWFnZVNpemUud2lkdGgoKSwgY2xpcEJvdHRvbSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggOTU3
NmRmZWU3ZTg0Li5iOWE4MTgzYTFiOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC03Niw5
ICs3Niw5IEBAIHByaXZhdGU6CiAKICAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUm
IGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0
YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExl
bmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRy
aXgpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZm
ZWN0UmVjdCgpKSk7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJy
aWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJy
aWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggNjU2NjNkOTI5NjdlLi4wN2ZjODNjYTdjYjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC02OCwyMCArNjgsMTQgQEAgYm9vbCBGRURp
c3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJikKK2NvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgRkVEaXNw
bGFjZW1lbnRNYXA6OmltYWdlQ29sb3JTcGFjZSgpIGNvbnN0CiB7CiAgICAgLy8gU3BlYzogVGhl
ICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnIHByb3BlcnR5IG9ubHkgYXBwbGllcyB0byB0
aGUgJ2luMicgc291cmNlIGltYWdlCiAgICAgLy8gYW5kIGRvZXMgbm90IGFwcGx5IHRvIHRoZSAn
aW4nIHNvdXJjZSBpbWFnZS4gVGhlICdpbicgc291cmNlIGltYWdlIG11c3QgcmVtYWluIGluIGl0
cwogICAgIC8vIGN1cnJlbnQgY29sb3Igc3BhY2UuCiAgICAgLy8gVGhlIHJlc3VsdCBpcyBpbiB0
aGF0IHNtYWUgY29sb3Igc3BhY2UgYmVjYXVzZSBpdCBpcyBhIGRpc3BsYWNlbWVudCBvZiB0aGUg
J2luJyBpbWFnZS4KLSAgICBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoaW5wdXRF
ZmZlY3QoMCktPnJlc3VsdENvbG9yU3BhY2UoKSk7Ci19Ci0KLXZvaWQgRkVEaXNwbGFjZW1lbnRN
YXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50
IGluZGV4KQotewotICAgIC8vIERvIG5vdCB0cmFuc2Zvcm0gdGhlIGZpcnN0IHByaW1pdGl2ZSBp
bnB1dCwgYXMgcGVyIHRoZSBzcGVjLgotICAgIGlmIChpbmRleCkKLSAgICAgICAgaW4tPnRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvJiBp
bnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICByZXR1cm4gaW5wdXQu
Y29sb3JTcGFjZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBp
eGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQpAQCAtOTAsMzUg
Kzg0LDQxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWdu
ZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0CiAgICAgcmV0dXJuIHggKiBieXRlc1Bl
clBpeGVsICsgeSAqIHJvd0J5dGVzOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJlY3QgRkVEaXNw
bGFjZW1lbnRNYXA6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRF
ZmZlY3QoMSk7CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0
aXZlU3VicmVnaW9uKTsKK30KIAorYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorewogICAgIEFTU0VSVChtX3hDaGFubmVs
U2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVj
dG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBwcmVtdWx0aXBsaWVkUmVzdWx0KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQotICAgICAgICByZXR1cm47CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCkt
PmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgaW5wdXQyID0gKmlucHV0RWZmZWN0KDEpLT5maWx0
ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgp
OworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJh
eSA9IG91dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEFEcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgYXV0byBpbnB1dEltYWdlID0gaW4tPmdldFByZW11bHRpcGxpZWRS
ZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0KTsKKyAgICBJbnRSZWN0IGlucHV0SW1hZ2VSZWN0ID0g
b3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOworICAgIGF1dG8gaW5wdXRQ
aXhlbEJ1ZmZlciA9IGlucHV0LmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0KTsKIAotICAgIEludFJlY3QgZWZmZWN0QkRy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7Ci0gICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwg
dmFsdWVzIGZyb20g4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxp
ZWQgY29sb3IgdmFsdWVzLgotICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPmdldFVu
cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3RCRHJhd2luZ1JlY3QpOworICAgIEludFJlY3QgaW5w
dXRJbWFnZVJlY3QyID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQyKTsK
KyAgICAvLyBUaGUgY2FsY3VsYXRpb25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSAnaW4y
JyBhcmUgcGVyZm9ybWVkIHVzaW5nIG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KKyAg
ICBhdXRvIGlucHV0UGl4ZWxCdWZmZXIyID0gaW5wdXQyLmdldFBpeGVsQnVmZmVyKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QyKTsKICAgICAK
LSAgICBpZiAoIWlucHV0SW1hZ2UgfHwgIWRpc3BsYWNlbWVudEltYWdlKQotICAgICAgICByZXR1
cm47CisgICAgaWYgKCFpbnB1dFBpeGVsQnVmZmVyIHx8ICFpbnB1dFBpeGVsQnVmZmVyMikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKGlucHV0SW1hZ2UtPmxlbmd0aCgpID09
IGRpc3BsYWNlbWVudEltYWdlLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGlucHV0UGl4ZWxCdWZm
ZXItPmxlbmd0aCgpID09IGlucHV0UGl4ZWxCdWZmZXIyLT5sZW5ndGgoKSk7CiAKLSAgICBJbnRT
aXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworICAgIGF1dG8gaW1h
Z2VTaXplID0gb3V0cHV0LmFic29sdXRlSW1hZ2VSZWN0KCkuc2l6ZSgpOwogCi0gICAgRmxvYXRT
aXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3NjYWxlLCBtX3NjYWxl
IH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJTY2Fs
ZSh7IG1fc2NhbGUsIG1fc2NhbGUgfSk7CiAgICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2Fs
ZS53aWR0aCgpIC8gMjU1LjA7CiAgICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWln
aHQoKSAvIDI1NS4wOwogICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0
aCgpICogMC41OwpAQCAtMTI3LDI2ICsxMjcsMjggQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIGludCBkaXNw
bGFjZW1lbnRDaGFubmVsWCA9IHhDaGFubmVsSW5kZXgoKTsKICAgICBpbnQgZGlzcGxhY2VtZW50
Q2hhbm5lbFkgPSB5Q2hhbm5lbEluZGV4KCk7CiAKLSAgICBpbnQgcm93Qnl0ZXMgPSBwYWludFNp
emUud2lkdGgoKSAqIDQ7CisgICAgaW50IHJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0
OwogCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYWludFNpemUuaGVpZ2h0KCk7ICsreSkgewor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaW1hZ2VTaXplLmhlaWdodCgpOyArK3kpIHsKICAgICAg
ICAgaW50IGxpbmVTdGFydE9mZnNldCA9IHkgKiByb3dCeXRlczsKIAotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHBhaW50U2l6ZS53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIGludCBk
ZXN0aW5hdGlvbkluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CisgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgaW1hZ2VTaXplLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAgaW50
IG91dHB1dEluZGV4ID0gbGluZVN0YXJ0T2Zmc2V0ICsgeCAqIDQ7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGludCBzcmNYID0geCArIHN0YXRpY19jYXN0PGludD4oc2NhbGVGb3JDb2xvclgg
KiBkaXNwbGFjZW1lbnRJbWFnZS0+aXRlbShkZXN0aW5hdGlvbkluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7Ci0gICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBz
dGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogZGlzcGxhY2VtZW50SW1hZ2UtPml0ZW0o
ZGVzdGluYXRpb25JbmRleCArIGRpc3BsYWNlbWVudENoYW5uZWxZKSArIHNjYWxlZE9mZnNldFkp
OworICAgICAgICAgICAgaW50IHNyY1ggPSB4ICsgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZvckNv
bG9yWCAqIGlucHV0UGl4ZWxCdWZmZXIyLT5pdGVtKG91dHB1dEluZGV4ICsgZGlzcGxhY2VtZW50
Q2hhbm5lbFgpICsgc2NhbGVkT2Zmc2V0WCk7CisgICAgICAgICAgICBpbnQgc3JjWSA9IHkgKyBz
dGF0aWNfY2FzdDxpbnQ+KHNjYWxlRm9yQ29sb3JZICogaW5wdXRQaXhlbEJ1ZmZlcjItPml0ZW0o
b3V0cHV0SW5kZXggKyBkaXNwbGFjZW1lbnRDaGFubmVsWSkgKyBzY2FsZWRPZmZzZXRZKTsKIAot
ICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RpbmF0aW9uUGl4ZWxQdHIgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkKj4oZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKSArIGRlc3RpbmF0aW9u
SW5kZXgpOwotICAgICAgICAgICAgaWYgKHNyY1ggPCAwIHx8IHNyY1ggPj0gcGFpbnRTaXplLndp
ZHRoKCkgfHwgc3JjWSA8IDAgfHwgc3JjWSA+PSBwYWludFNpemUuaGVpZ2h0KCkpIHsKLSAgICAg
ICAgICAgICAgICAqZGVzdGluYXRpb25QaXhlbFB0ciA9IDA7CisgICAgICAgICAgICB1bnNpZ25l
ZCogb3V0cHV0UGl4ZWxQdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ob3V0cHV0UGl4
ZWxBcnJheS5kYXRhKCkgKyBvdXRwdXRJbmRleCk7CisgICAgICAgICAgICBpZiAoc3JjWCA8IDAg
fHwgc3JjWCA+PSBpbWFnZVNpemUud2lkdGgoKSB8fCBzcmNZIDwgMCB8fCBzcmNZID49IGltYWdl
U2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICpvdXRwdXRQaXhlbFB0ciA9IDA7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICpk
ZXN0aW5hdGlvblBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihpbnB1dElt
YWdlLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZLCByb3dCeXRlcykpOwor
ICAgICAgICAgICAgKm91dHB1dFBpeGVsUHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQq
PihpbnB1dFBpeGVsQnVmZmVyLT5kYXRhKCkgKyBieXRlT2Zmc2V0T2ZQaXhlbChzcmNYLCBzcmNZ
LCByb3dCeXRlcykpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFu
bmVsU2VsZWN0b3JUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IDZlZTY4
YjEwOGRiNy4uZTA2MmJiZmI3NmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC00Nywx
OSArNDcsMTggQEAgcHVibGljOgogICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
Y2FsZTsgfQogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQpOwogCi0gICAgdm9pZCBzZXRSZXN1bHRD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlOwotICAgIHZv
aWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92
ZXJyaWRlOwotCiBwcml2YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3Rv
clR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVj
dG9yLCBmbG9hdCBzY2FsZSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0KICAgICBpbnQgeENoYW5uZWxJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KICAgICBpbnQgeUNoYW5u
ZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KIAorICAg
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgaW1hZ2VDb2xvclNwYWNlKCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwor
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVs
U2VsZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCA2
YTk2Y2E5OTA5MWEuLjQwMmIyYTEwODhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtNDcsODAg
KzQ3LDgwIEBAIFJlZjxGRURyb3BTaGFkb3c+IEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZsb2F0IHN0
ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRkVEcm9wU2hhZG93KHN0ZFgsIHN0ZFksIGR4LCBkeSwgc2hhZG93Q29sb3IsIHNoYWRvd09w
YWNpdHkpKTsKIH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorSW50T3V0c2V0cyBGRURyb3BTaGFkb3c6Om91dHNl
dHMoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZm
ZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZU9mZnNl
dFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZzZXRQYWludFJl
Y3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOwotICAg
IGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKKyAgICBJ
bnRTaXplIG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSh7
IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIHJldHVybiB7CisgICAgICAgIHN0ZDo6bWF4PGludD4o
MCwgb3V0c2V0U2l6ZS5oZWlnaHQoKSAtIG1fZHkpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAs
IG91dHNldFNpemUud2lkdGgoKSArIG1fZHgpLAorICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91
dHNldFNpemUuaGVpZ2h0KCkgKyBtX2R5KSwKKyAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRz
ZXRTaXplLndpZHRoKCkgLSBtX2R4KQorICAgIH07Cit9CisKK0Zsb2F0UmVjdCBGRURyb3BTaGFk
b3c6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgYXV0byYgaW5wdXQgPSAqaW5w
dXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CiAKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0
ZFkgfSk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dC5pbWFnZVJlY3QoKTsKKyAgICBhdXRv
IGltYWdlUmVjdFdpdGhPZmZzZXQoaW1hZ2VSZWN0KTsKKyAgICBpbWFnZVJlY3RXaXRoT2Zmc2V0
Lm1vdmUoeyBtX2R4LCBtX2R5IH0pOworICAgIGltYWdlUmVjdC51bml0ZShpbWFnZVJlY3RXaXRo
T2Zmc2V0KTsKIAotICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRp
cGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgot
ICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAw
LjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWln
aHQoKSAqIDAuNWYpOworICAgIGF1dG8ga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxj
dWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKIAotICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhF
ZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUo
bWF4RWZmZWN0UmVjdCgpKTsKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFu
ZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0
aW1lcy4KKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAu
NWYpOworICAgIGltYWdlUmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAu
NWYpOwogCi0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0
ZVBhaW50UmVjdCkpOworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVn
aW9uKGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotdm9pZCBGRURyb3BTaGFk
b3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7
Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0
ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpm
aWx0ZXJJbWFnZSgpOworICAgIAorICAgIGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVm
ZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIGlm
ICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIG91dHB1dEltYWdlID0g
b3V0cHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyU2NhbGUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0
ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pOworICAgIGF1dG8g
Ymx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUoeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKKyAgICBhdXRvIG9mZnNldCA9IGZpbHRlci5zY2FsZWRTaXplQnlGaWx0ZXJT
Y2FsZSh7IG1fZHgsIG1fZHkgfSk7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKLSAgICBkcmF3
aW5nUmVnaW9uV2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisgICAgYXV0byBpbnB1dEltYWdlUmVj
dCA9IEZsb2F0UmVjdChpbnB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KG91dHB1dCkpOwog
Ci0gICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
Ci0gICAgaWYgKCFzb3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW5wdXRJ
bWFnZVJlY3RXaXRoT2Zmc2V0ID0gaW5wdXRJbWFnZVJlY3Q7CisgICAgaW5wdXRJbWFnZVJlY3RX
aXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgcmVzdWx0Q29u
dGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29udGV4dC5zZXRBbHBo
YShtX3NoYWRvd09wYWNpdHkpOwotICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpz
b3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQpOwotICAgIHJlc3VsdENvbnRleHQu
c2V0QWxwaGEoMSk7CisgICAgYXV0byYgb3V0cHV0Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250
ZXh0KCk7CisgICAgb3V0cHV0Q29udGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOworICAg
IG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVj
dFdpdGhPZmZzZXQpOworICAgIG91dHB1dENvbnRleHQuc2V0QWxwaGEoMSk7CiAKICAgICBTaGFk
b3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsK
IAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07
Ci0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0
ZWRMb2dpY2FsU2l6ZSgpKTsKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdl
dFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gZm9ybWF0ID0gUGl4ZWxCdWZmZXJGb3JtYXQgeyBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgs
IG91dHB1dC5jb2xvclNwYWNlKCkgfTsKKyAgICBhdXRvIHNoYWRvd0FyZWEgPSBJbnRSZWN0IHsg
SW50UG9pbnQoKSwgb3V0cHV0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkgfTsKKyAgICBh
dXRvIHNoYWRvd1BpeGVsQnVmZmVyID0gb3V0cHV0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1h
dCwgc2hhZG93QXJlYSk7CisgICAgaWYgKCFzaGFkb3dQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5k
YXRhKCk7Ci0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzb3VyY2VQaXhlbEFycmF5
LmRhdGEoKSwgcGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHBpeGVsQnVmZmVyLT5zaXplKCkud2lk
dGgoKSk7Ci0gICAgCi0gICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZl
ciwgc2hhZG93QXJlYSk7CisgICAgYXV0byYgc2hhZG93UGl4ZWxBcnJheSA9IHNoYWRvd1BpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzaGFkb3dQ
aXhlbEFycmF5LmRhdGEoKSwgc2hhZG93UGl4ZWxCdWZmZXItPnNpemUoKSwgNCAqIHNoYWRvd1Bp
eGVsQnVmZmVyLT5zaXplKCkud2lkdGgoKSk7CiAKLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3VsdENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKLSAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKKyAgICBvdXRw
dXRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnNoYWRvd1BpeGVsQnVmZmVyLCBzaGFkb3dBcmVhKTsK
IAotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFn
ZSwgZHJhd2luZ1JlZ2lvbik7Ci19CisgICAgb3V0cHV0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKKyAgICBvdXRwdXRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgp
LnNpemUoKSksIG1fc2hhZG93Q29sb3IpOworICAgIG91dHB1dENvbnRleHQuc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOwogCi1JbnRPdXRz
ZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBvdXRzZXRT
aXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3Rk
WSB9KTsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6Om1heDxpbnQ+KDAsIG91dHNldFNpemUu
aGVpZ2h0KCkgLSBtX2R5KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLndp
ZHRoKCkgKyBtX2R4KSwKLSAgICAgICAgc3RkOjptYXg8aW50PigwLCBvdXRzZXRTaXplLmhlaWdo
dCgpICsgbV9keSksCi0gICAgICAgIHN0ZDo6bWF4PGludD4oMCwgb3V0c2V0U2l6ZS53aWR0aCgp
IC0gbV9keCkKLSAgICB9OworICAgIG91dHB1dENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1
dEltYWdlLCBpbnB1dEltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJl
YW0mIEZFRHJvcFNoYWRvdzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywg
UmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5k
ZXggMTc3MDU2YmJjZjg4Li5iMjU2ODg4YWQyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtNDksMTEg
KzQ5LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgs
IGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
LCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0
IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVy
cmlkZTsKIAotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGM1NzBk
OWM1NWVmNi4uYTc2YTlhMjNjNTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTU4LDE0ICs1OCwyMSBAQCBib29s
IEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgRkVGbG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpCitGbG9hdFJlY3QgRkVGbG9vZDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAg
IGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gZmlsdGVyLm1h
eFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOworfQogCi0gICAgYXV0byBj
b2xvciA9IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNp
dHkoKSk7Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKK2Jvb2wgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCit7CisgICAgYXV0byYg
b3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5p
bWFnZUJ1ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gY29sb3IgPSBtX2Zsb29kQ29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkobV9mbG9vZE9wYWNpdHkpOworICAgIG91dHB1dEltYWdlLT5jb250ZXh0KCkuZmlsbFJl
Y3QoeyB7IH0sIG91dHB1dEltYWdlLT5sb2dpY2FsU2l6ZSgpIH0sIGNvbG9yKTsKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuaAppbmRleCBhMjA3ODE5MmU2NjguLjlmYjE4OWU3YWRmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTM5LDE2ICsz
OSwxNSBAQCBwdWJsaWM6CiAjaWYgIVVTRShDRykKICAgICAvLyBmZUZsb29kIGRvZXMgbm90IHBl
cmZvcm0gY29sb3IgaW50ZXJwb2xhdGlvbiBvZiBhbnkga2luZCwgc28gdGhlIHJlc3VsdCBpcyBh
bHdheXMgaW4gdGhlIGN1cnJlbnQKICAgICAvLyBjb2xvciBzcGFjZSByZWdhcmRsZXNzIG9mIHRo
ZSB2YWx1ZSBvZiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMuCi0gICAgdm9pZCBzZXRPcGVy
YXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpIG92ZXJyaWRlIHsg
RmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpKTsgfQotICAgIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KKyAgICB2b2lkIHNldE9wZXJhdGlu
Z0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CiAj
ZW5kaWYKIAogcHJpdmF0ZToKICAgICBGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBm
bG9hdCBmbG9vZE9wYWNpdHkpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChj
b25zdCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZp
bHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdCht
YXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMTM2ZjY4YWFmNzdkLi4xMDcyMWZh
YTdlMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC00NjUsMTEgKzQ2NSwxMiBAQCBzdGF0
aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCiB7CiAgICAgLy8gTGltaXQg
dGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcg
ZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKICAgICAvLyBpbmZsYXRlcyB0aGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmly
ZWZveCcgYmVoYXZpb3IuCisgICAgc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUw
MDsKICAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsgMC41Zikp
KTsKICAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKIH0KICAgICAKLUludFNpemUgRkVHYXVzc2lhbkJs
dXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQor
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewogICAgIEFTU0VSVChzdGREZXZpYXRpb24ud2lk
dGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAwKTsKICAgICBJbnRTaXplIGtl
cm5lbFNpemU7CkBAIC00ODMsMTIgKzQ4NCwxMiBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKICAgICBy
ZXR1cm4ga2VybmVsU2l6ZTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
S2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikK
K0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgc3RkRGV2aWF0aW9uKQogewotICAgIHJldHVybiBj
YWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoc3Rk
RGV2aWF0aW9uKSk7CisgICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0
ZXIuc2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUoc3RkRGV2aWF0aW9uKSk7CiB9CiAKLUludFNpemUg
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlv
bikKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoY29uc3QgRmxv
YXRTaXplJiBzdGREZXZpYXRpb24pCiB7CiAgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbik7CiAKQEAgLTQ5Niw2MCArNDk3LDYxIEBA
IEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0
ZERldmlhdGlvbikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAq
IGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0
IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEludFNp
emUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9z
dGRZIH0pOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgp
OworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXQuaW1hZ2VSZWN0KCk7CiAKLSAgICBGbG9hdFJl
Y3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3Qo
KTsKICAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRo
ZSBhZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05P
TkUpIHsKLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNv
bHV0ZVBhaW50UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VkZ2VN
b2RlICE9IEVER0VNT0RFX05PTkUpCisgICAgICAgIHJldHVybiBpbWFnZVJlY3Q7CiAKKyAgICBh
dXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1f
c3RkWSB9KTsKKyAgICAKICAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBt
dWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1l
cy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgp
ICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUu
aGVpZ2h0KCkgKiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUu
d2lkdGgoKSAqIDAuNWYpOworICAgIGltYWdlUmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5o
ZWlnaHQoKSAqIDAuNWYpOwogCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJz
b2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworICAgIHJldHVy
biBmaWx0ZXIuY2xpcFRvTWF4UHJpbWl0aXZlU3VicmVnaW9uKGltYWdlUmVjdCwgcHJpbWl0aXZl
U3VicmVnaW9uKTsKK30KIAotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJl
Y3QoYWJzb2x1dGVQYWludFJlY3QpKTsKK0ludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNl
dHMoKSBjb25zdAoreworICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNp
emUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgp
LCBvdXRzZXRTaXplLndpZHRoKCksIG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lk
dGgoKSB9OwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZFR2F1c3NpYW5CbHVyOjppc0FscGhhSW1hZ2Uo
KSBjb25zdAogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBy
ZXR1cm4gaW5wdXRFZmZlY3QoMCktPmlzQWxwaGFJbWFnZSgpOworfQogCi0gICAgYXV0byBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwotICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworYm9vbCBGRUdhdXNzaWFuQmx1
cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIGF1
dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91
dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworCisgICAgYXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91
dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsK
KyAgICBpZiAoIW91dHB1dFBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5k
YXRhKCk7CisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVsQnVmZmVyLT5k
YXRhKCk7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBh
dXRvIGlucHV0SW1hZ2VSZWN0ID0gb3V0cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5w
dXQpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1Jl
Y3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91
dHB1dFBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlu
cHV0SW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghbV9zdGRYICYm
ICFtX3N0ZFkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBJ
bnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKKyAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZp
bHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBhdXRvIGltYWdlU2l6ZSA9IG91dHB1dC5h
YnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKTsKIAotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7
CisgICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChpbWFnZVNpemUuYXJlYSgpICogNCk7CiAgICAgaWYgKCF0bXBJbWFnZURhdGEp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFy
cmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0
KCksIHBhaW50U2l6ZSk7Ci19CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotSW50T3V0c2V0cyBG
RUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBvdXRzZXRTaXpl
ID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIHJldHVybiB7
IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWln
aHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpIH07CisgICAgcGxhdGZvcm1BcHBseShvdXRwdXRQaXhl
bEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVp
Z2h0KCksIGltYWdlU2l6ZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZF
R2F1c3NpYW5CbHVyOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXBy
ZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5k
ZXggYmM4MWQwY2ZlYWE0Li4xZDU4MjY1NGMwMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTM5
LDkgKzM5LDkgQEAgcHVibGljOgogICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZWRnZU1vZGU7IH0KICAgICB2b2lkIHNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSk7
CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYs
IEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOwotICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVu
c2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKTsKLSAgICBzdGF0aWMgSW50
U2l6ZSBjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pOworICAgIHN0
YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxv
YXRTaXplJiBzdGREZXZpYXRpb24pOworICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZVVuc2Nh
bGVkS2VybmVsU2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlvbik7CisgICAgc3RhdGlj
IEludFNpemUgY2FsY3VsYXRlT3V0c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHN0ZERldmlhdGlv
bik7CiAKIHByaXZhdGU6CiAgICAgRkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRn
ZU1vZGVUeXBlKTsKQEAgLTU4LDEyICs1OCwxNCBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25l
ZCBrZXJuZWxTaXplWTsKICAgICB9OwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKKyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Ym9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0YXRpYyB2b2lk
IHBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwCmluZGV4IGZiZDUwMzkwMmJjYy4uZTMyMzM3NjY4NGVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgogI2luY2x1ZGUg
IkZFTGlnaHRpbmdORU9OLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAKQEAgLTM4OCwyNiArMzg5
LDE0IEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRp
bmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjCiAjZW5kaWYKIH0KIAotYm9vbCBGRUxpZ2h0
aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQorYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKIHsKICAgICBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLQotICAgIC8v
IEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBp
eGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0
aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBoZWlnaHQgPD0g
MikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZGF0YS5waXhlbHMgPSAmcGl4ZWxzOwot
ICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKLSAgICBk
YXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGln
aHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9y
ID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogCi0gICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50
aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKKyAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFp
bnRpbmdEYXRhKGZpbHRlciwgKnRoaXMsIHBhaW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3AgbGVm
dC4KICAgICBpbnQgb2Zmc2V0ID0gMDsKQEAgLTQyMiwxMCArNDExLDEwIEBAIGJvb2wgRkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwg
aW50IGhlaWdodCkKICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwg
ZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRh
dGEuYm90dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKIAogICAgIC8vIEJvdHRvbSByaWdodC4KLSAg
ICBvZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1Bp
eGVsU2l6ZTsKKyAgICBvZmZzZXQgPSAoZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSArIDEpICog
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CiAgICAgc2V0UGl4
ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwg
ZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRh
dGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7CiAKLSAgICBpZiAod2lkdGggPj0gMykgewor
ICAgIGlmIChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPj0gMikgewogICAgICAgICAvLyBUb3Ag
cm93LgogICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwogICAgICAgICBmb3IgKGludCB4ID0g
MTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6
ZSkKQEAgLTQzNyw3ICs0MjYsNyBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50
OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgICAgICAg
ICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90dG9tUm93Tm9y
bWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmIChoZWlnaHQgPj0gMykgeworICAgIGlmIChk
YXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID49IDIpIHsKICAgICAgICAgLy8gTGVmdCBjb2x1bW4u
CiAgICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CiAgICAg
ICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBv
ZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKQEAgLTQ0OSwxMiArNDM4
LDEyIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0
b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwog
ICAgIH0KIAotICAgIGlmICh3aWR0aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7CisgICAgaWYgKGRh
dGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyICYmIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUg
Pj0gMikgewogICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCiAgICAgICAgIHBsYXRmb3JtQXBw
bHkoZGF0YSwgcGFpbnRpbmdEYXRhKTsKICAgICB9CiAKLSAgICBpbnQgbGFzdFBpeGVsID0gZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKKyAgICBpbnQgbGFzdFBpeGVs
ID0gKGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKyAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7CiAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VMaWdodGluZykg
ewogICAgICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhl
bDsgaSArPSBjUGl4ZWxTaXplKQogICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3Bh
cXVlQWxwaGEpOwpAQCAtNDcxLDI3ICs0NjAsNDcgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGln
aHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQorRmxvYXRSZWN0IEZFTGlnaHRpbmc6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24o
cHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKworYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0
ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgYXV0
byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgpOwotICAgIGlm
ICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gb3V0
cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91dHB1dFBpeGVs
QnVmZmVyLT5kYXRhKCk7CiAKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byBpbnB1dEltYWdlUmVjdCA9IG91
dHB1dC5yZWxhdGl2ZUFic29sdXRlSW1hZ2VSZWN0KGlucHV0KTsKIAotICAgIHNldElzQWxwaGFJ
bWFnZShmYWxzZSk7CisgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKG91dHB1dFBpeGVsQXJyYXks
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGlucHV0SW1hZ2VSZWN0LCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgLy8gRklY
TUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3Vl
IGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNlIGZv
ciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UKICAg
ICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBz
dXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBz
aG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKLSAgICBJbnRTaXplIGFic29sdXRl
UGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0aW5n
KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1
dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIEludFNpemUgYWJzb2x1dGVJbWFnZVNpemUgPSBv
dXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5zaXplKCk7CisKKyAgICAvLyBGSVhNRTogZG8gc29t
ZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KKyAgICAvLyBU
aGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0
IHJldHVybnMuCisgICAgaWYgKGFic29sdXRlSW1hZ2VTaXplLndpZHRoKCkgPD0gMiB8fCBhYnNv
bHV0ZUltYWdlU2l6ZS5oZWlnaHQoKSA8PSAyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IExpZ2h0aW5nRGF0YSBkYXRhOworICAgIGRhdGEucGl4ZWxzID0gJm91dHB1dFBpeGVsQXJyYXk7
CisgICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKKyAgICBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gYWJzb2x1dGVJbWFnZVNpemUud2lkdGgo
KSAqIGNQaXhlbFNpemU7CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gYWJzb2x1dGVJ
bWFnZVNpemUud2lkdGgoKSAtIDE7CisgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGFi
c29sdXRlSW1hZ2VTaXplLmhlaWdodCgpIC0gMTsKKworICAgIGRyYXdMaWdodGluZyhmaWx0ZXIs
IGRhdGEpOworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5oCmluZGV4IGQ4NTJmOGIxM2RkNy4uMGI0ZDgwMDRkYjY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAt
MzksOCArMzksNiBAQCBzdHJ1Y3QgRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNs
YXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQot
CiAgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7
IH0KICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAKQEAgLTEyOSwxMiArMTI3LDE0
IEBAIHByb3RlY3RlZDoKIAogICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3Rh
bnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0
IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291
cmNlPiYmLCBUeXBlKTsKIAotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5
JiwgaW50LCBpbnQpOworICAgIGJvb2wgZHJhd0xpZ2h0aW5nKGNvbnN0IEZpbHRlciYsIGNvbnN0
IExpZ2h0aW5nRGF0YSYpOwogCiAgICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBM
aWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGlu
dCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7
CiAgICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0
YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0
IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBo
YSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKworICAg
IGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAg
ICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggZmJmNTAzOTA5ZmM4Li42ZjViNzE0
YjNkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1lcmdlLmNwcApAQCAtMzgsMjkgKzM4LDMzIEBAIFJlZjxGRU1lcmdlPiBGRU1lcmdl
OjpjcmVhdGUoKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFTWVyZ2UoKSk7CiB9CiAKLXZv
aWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCitib29sIEZF
TWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIHVuc2ln
bmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7
CisgICAgQVNTRVJUKCFpbnB1dEVmZmVjdHMoKS5pc0VtcHR5KCkpOworICAgIGF1dG8mIG91dHB1
dCA9ICpmaWx0ZXJJbWFnZSgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQotICAgICAgICByZXR1cm47
CisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOworICAgIGlmICgh
b3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEdyYXBoaWNzQ29udGV4
dCYgb3V0cHV0Q29udGV4dCA9IG91dHB1dEltYWdlLT5jb250ZXh0KCk7CiAKLSAgICBHcmFwaGlj
c0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBpZiAoSW1hZ2VCdWZmZXIqIGluQnVmZmVy
ID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCi0gICAgICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGlucHV0RWZmZWN0
cygpKSB7CisgICAgICAgIGF1dG8mIGlucHV0ID0gKmVmZmVjdC0+ZmlsdGVySW1hZ2UoKTsKKyAg
ICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpKSB7CisgICAg
ICAgICAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gRmxvYXRSZWN0KGlucHV0LnJlbGF0aXZlQWJz
b2x1dGVJbWFnZVJlY3Qob3V0cHV0KSk7CisgICAgICAgICAgICBvdXRwdXRDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGlucHV0SW1hZ2VSZWN0KTsKKyAgICAgICAgfQogICAg
IH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiBUZXh0U3RyZWFtJiBGRU1lcmdlOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVNZXJnZSI7CiAgICAg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzLCByZXByZXNlbnRhdGlvbik7
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGlucHV0RWZmZWN0cygpLnNpemUoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwog
ICAgIHRzIDw8ICIgbWVyZ2VOb2Rlcz1cIiIgPDwgc2l6ZSA8PCAiXCJdXG4iOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCmluZGV4
IDA1MTlhNTY4OGE4My4uODg3YmEwZmQzM2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzIsNyArMzIsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEZFTWVyZ2UoKTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDVmNzRjZmQ3NGZi
OC4uNzQwNzA0ZTI3ODEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC03MiwxNyArNzIsNiBAQCBi
b29sIEZFTW9ycGhvbG9neTo6c2V0UmFkaXVzWShmbG9hdCByYWRpdXNZKQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHBhaW50UmVjdC5pbmZsYXRlKGZp
bHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAg
IGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZm
ZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RS
ZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRS
ZWN0KSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50
IHksIGludCB3aWR0aCkKIHsKICAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKQEAgLTIz
Miw1MSArMjIxLDY0IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRS
ZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKIHsKICAgICBpZiAocmFk
aXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKSkgewotICAg
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgICAgIGluLT5jb3B5
UHJlbXVsdGlwbGllZFJlc3VsdChkc3RQaXhlbEFycmF5LCBpbWFnZVJlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CisgICAgICAgIGF1dG8mIGlucHV0ID0gKmlucHV0RWZmZWN0KDApLT5maWx0
ZXJJbWFnZSgpOworICAgICAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIoZHN0UGl4ZWxBcnJheSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IEZFTW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1h
Z2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7
CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdlKCk7CisgICAg
RmxvYXRSZWN0IGltYWdlUmVjdCA9IGlucHV0LmltYWdlUmVjdCgpOworICAgIGltYWdlUmVjdC5p
bmZsYXRlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlw
VG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwog
Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcHJlbXVsdGlwbGllZFJlc3VsdCgp
OwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworfQog
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOworYm9vbCBGRU1vcnBob2xvZ3k6OmlzQWxwaGFJbWFnZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5pc0FscGhhSW1hZ2UoKTsKK30KKworYm9vbCBGRU1v
cnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sK
KyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICBh
dXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOworICAgIGF1dG8gb3V0cHV0UGl4ZWxCdWZmZXIgPSBvdXRwdXQucGl4
ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYg
KCFvdXRwdXRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UmVj
dCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byYgb3V0cHV0UGl4ZWxBcnJheSA9IG91
dHB1dFBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gb3V0
cHV0LnJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoaW5wdXQpOwogCiAgICAgSW50U2l6ZSByYWRp
dXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9yYWRpdXNYLCBtX3JhZGl1c1kpKTsKLSAg
ICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZl
Y3REcmF3aW5nUmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUob3V0cHV0UGl4ZWxBcnJh
eSwgaW5wdXRJbWFnZVJlY3QsIHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5nZXRQ
cmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNl
KCkpOwotICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1
dG8gaW5wdXRQaXhlbEFycmF5ID0gaW5wdXQuZ2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgaW5wdXRJbWFnZVJlY3QsIG9wZXJhdGluZ0NvbG9yU3Bh
Y2UoKSk7CisgICAgaWYgKCFpbnB1dFBpeGVsQXJyYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxl
KHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOwotICAgIGludCByYWRpdXNYID0gc3RkOjptaW4o
ZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKLSAgICBpbnQg
cmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVz
LmhlaWdodCgpKTsKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkU2l6
ZUJ5RmlsdGVyU2NhbGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7CisgICAgaW50IHJhZGl1
c1ggPSBzdGQ6Om1pbihpbnB1dEltYWdlUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkp
OworICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oaW5wdXRJbWFnZVJlY3QuaGVpZ2h0KCkgLSAx
LCByYWRpdXMuaGVpZ2h0KCkpOworCisgICAgaWYgKHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKG91
dHB1dFBpeGVsQXJyYXksIGlucHV0SW1hZ2VSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAg
IHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKLSAg
ICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7Ci0g
ICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7
Ci0gICAgcGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdo
dCgpKTsKKyAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IGlucHV0UGl4ZWxBcnJheS5n
ZXQoKTsKKyAgICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZvdXRwdXRQaXhlbEFycmF5
OworICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGlucHV0SW1hZ2VSZWN0LndpZHRoKCkp
OworICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWlsZihpbnB1dEltYWdlUmVjdC5oZWlnaHQo
KSk7CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKICAgICBwYWlu
dGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kpOwotCiAgICAgcGxhdGZvcm1BcHBseShw
YWludGluZ0RhdGEpOworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYg
dHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4IGFlODE1MTU0Y2VhZC4uMDQ3YTBjYWEyNTEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmgKQEAgLTQ3LDkgKzQ3LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVN
b3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJh
ZGl1c1kpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikg
b3ZlcnJpZGU7CisgICAgYm9vbCBpc0FscGhhSW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29s
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDA2NTAw
MWUwMGI1OC4uOTZmZmEwMWFlYTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNTIsMzEgKzUyLDM4IEBAIHZv
aWQgRkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQogICAgIG1fZHkgPSBkeTsKIH0KIAotdm9pZCBG
RU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CitGbG9hdFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZp
bHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAg
RmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9keCwg
bV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0Lmlu
dGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVu
aXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChwYWludFJlY3QpKTsKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+
ZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0LmltYWdlUmVjdCgpOwor
ICAgIGltYWdlUmVjdC5tb3ZlKHsgbV9keCwgbV9keSB9KTsKKyAgICByZXR1cm4gZmlsdGVyLmNs
aXBUb01heFByaW1pdGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7
CisKK30KKworYm9vbCBGRU9mZnNldDo6aXNBbHBoYUltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaW5wdXRFZmZlY3QoMCktPmlzQWxwaGFJbWFnZSgpOwogfQogCi12b2lkIEZFT2Zmc2V0Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZFT2Zmc2V0
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8mIGlucHV0ID0gKmlucHV0
RWZmZWN0KDApLT5maWx0ZXJJbWFnZSgpOworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFn
ZSgpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
LSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gaW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dElt
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlz
QWxwaGFJbWFnZSgpKTsKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0LmltYWdlQnVmZmVy
KCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
RmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4
dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24pOworICAgIGF1dG8g
aW5wdXRJbWFnZVJlY3QgPSBGbG9hdFJlY3QoaW5wdXQucmVsYXRpdmVBYnNvbHV0ZUltYWdlUmVj
dChvdXRwdXQpKTsKKyAgICBpbnB1dEltYWdlUmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRTaXplQnlG
aWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIAorICAgIG91dHB1dEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdCk7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24p
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmgKaW5kZXggZDNlYzk1YWRkZjEzLi5hMTBhMTg5YjMwZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAg
LTM4LDEwICszOCwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFT2Zmc2V0KGZsb2F0IGR4
LCBmbG9hdCBkeSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKSBvdmVycmlkZTsKLSAgICAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsK
IAorICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRl
OworICAgIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
ZmxvYXQgbV9keDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmNwcAppbmRleCBlNzRhNzhjOWUyMTYuLjA1MzRhYmUwMDUxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAi
U1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNDggKzQwLDYwIEBAIFJlZjxGRVRpbGU+IEZF
VGlsZTo6Y3JlYXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVRpbGUoKSk7CiB9CiAK
LXZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
Citib29sIEZFVGlsZTo6aXNBbHBoYUltYWdlKCkgY29uc3QKIHsKLS8vIEZJWE1FOiBTZWUgYnVn
IDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwg
YnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0gICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gaW1h
Z2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VC
dWZmZXJSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7Ci0K
LSAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6
ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0aGUKLSAgICAvLyBzaXplIG9mIHRoZSBj
dXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9u
IGFuZCBvcHRpbWl6YXRpb24uCi0gICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVj
dFJlY3QoKTsKLSAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5s
b2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RS
ZWN0KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMgfHwgaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7Ci0gICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRl
clJlZ2lvbigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgfQotCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpKTsKLSAgICBpZiAoIXRpbGVJbWFnZSkKLSAg
ICAgICAgcmV0dXJuOworICAgIHJldHVybiBpbnB1dEVmZmVjdCgwKS0+aXNBbHBoYUltYWdlKCk7
Cit9CisKK0Zsb2F0UmVjdCBGRVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9u
KTsKK30KKworYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKK3sKKyAgICBhdXRvJiBpbnB1dCA9ICppbnB1dEVmZmVjdCgwKS0+ZmlsdGVySW1h
Z2UoKTsKKyAgICBhdXRvJiBvdXRwdXQgPSAqZmlsdGVySW1hZ2UoKTsKKworICAgIGF1dG8gaW5w
dXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbnB1dEltYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIHRpbGVJbWFnZUNvbnRl
eHQgPSB0aWxlSW1hZ2UtPmNvbnRleHQoKTsKLSAgICB0aWxlSW1hZ2VDb250ZXh0LnRyYW5zbGF0
ZSgtaW5NYXhFZmZlY3RMb2NhdGlvbi54KCksIC1pbk1heEVmZmVjdExvY2F0aW9uLnkoKSk7Ci0g
ICAgdGlsZUltYWdlQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBpbi0+YWJzb2x1
dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICBhdXRvIG91dHB1dEltYWdlID0gb3V0cHV0
LmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byB0aWxlSW1hZ2VDb3B5ID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoV1RGTW92ZSh0aWxlSW1hZ2UpKTsKLSAgICBpZiAoIXRpbGVJbWFnZUNvcHkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBhdXRvIGlucHV0SW1hZ2VSZWN0ID0gaW5wdXQuYWJzb2x1dGVJ
bWFnZVJlY3QoKTsKKyAgICBhdXRvIG91dHB1dEltYWdlUmVjdCA9IG91dHB1dC5hYnNvbHV0ZUlt
YWdlUmVjdCgpOworCisgICAgYXV0byB0aWxlUmVjdCA9IGZpbHRlci5tYXhQcmltaXRpdmVTdWJy
ZWdpb24oaW5wdXQucHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIHRpbGVSZWN0ID0gZmlsdGVy
LnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKHRpbGVSZWN0KTsKKworICAgIGF1dG8gbWF4T3V0cHV0
UmVjdCA9IGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ob3V0cHV0LnByaW1pdGl2ZVN1YnJl
Z2lvbigpKTsKKyAgICBtYXhPdXRwdXRSZWN0ID0gZmlsdGVyLnNjYWxlZFJlY3RCeUZpbHRlclNj
YWxlKG1heE91dHB1dFJlY3QpOworCisgICAgYXV0byB0aWxlSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHRpbGVSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7
CisgICAgaWYgKCF0aWxlSW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdyYXBoaWNzQ29udGV4dCYgdGlsZUltYWdlQ29udGV4dCA9IHRpbGVJbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpOworICAgIHRpbGVJbWFnZUNvbnRleHQudHJhbnNsYXRlKC10aWxlUmVjdC5sb2NhdGlv
bigpKTsKKyAgICB0aWxlSW1hZ2VDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwg
aW5wdXRJbWFnZVJlY3QubG9jYXRpb24oKSk7CisKKyAgICBhdXRvIHRpbGVJbWFnZSA9IEltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUodGlsZUltYWdlQnVmZmVyKSk7Cisg
ICAgaWYgKCF0aWxlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFmZmluZVRy
YW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtOwotICAgIHBhdHRlcm5UcmFuc2Zvcm0udHJhbnNsYXRl
KGluTWF4RWZmZWN0TG9jYXRpb24gLSBtYXhFZmZlY3RMb2NhdGlvbik7CisgICAgcGF0dGVyblRy
YW5zZm9ybS50cmFuc2xhdGUodGlsZVJlY3QubG9jYXRpb24oKSAtIG1heE91dHB1dFJlY3QubG9j
YXRpb24oKSk7CisKKyAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpjcmVhdGUodGlsZUltYWdl
LnJlbGVhc2VOb25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKIAot
ICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2VDb3B5LnJlbGVhc2VO
b25OdWxsKCksIHsgdHJ1ZSwgdHJ1ZSwgcGF0dGVyblRyYW5zZm9ybSB9KTsKKyAgICBHcmFwaGlj
c0NvbnRleHQmIG91dHB1dENvbnRleHQgPSBvdXRwdXRJbWFnZS0+Y29udGV4dCgpOworICAgIG91
dHB1dENvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSk7CiAKLSAgICBHcmFw
aGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAg
IGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSk7Ci0gICAgZmls
dGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSkpOworICAgIG91dHB1dENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgb3V0cHV0SW1hZ2VSZWN0LnNpemUoKSkpOworICAgIHJldHVybiB0cnVlOwog
fQogCiBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVh
bSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCmluZGV4IGVk
NzY5NTFmYjViNC4uZmJiMGExMDYyY2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTMyLDkgKzMyLDExIEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgRkVUaWxlKCk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
bWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBv
dmVycmlkZTsKKworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGQ4MjUzMTYxNzQzYy4uMjJkNGY5OWM3MmU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuY3BwCkBAIC0zNjYsMTEgKzM2NiwxMCBAQCBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChj
b25zdAogICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZp
bHRlciYgZmlsdGVyLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwg
aW50IGVuZFkpIGNvbnN0Cit2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihjb25zdCBGaWx0
ZXImIGZpbHRlciwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IEludFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERh
dGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGVuZFkgPiBzdGFydFkpOwogCi0gICAgSW50UmVjdCBmaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVBh
aW50UmVjdCgpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0
YXJ0WSk7CiAgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVn
aW9uLndpZHRoKCkgPDwgMik7CiAgICAgRmxvYXRTaXplIGludmVyc2VTY2FsZSA9IHsgMSAvIGZp
bHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWln
aHQoKSB9OwpAQCAtMzkwLDI1ICszODksMzIgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdp
b24oY29uc3QgRmlsdGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmEKIAog
dm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMq
IHBhcmFtZXRlcnMpCiB7Ci0gICAgcGFyYW1ldGVycy0+ZWZmZWN0LT5maWxsUmVnaW9uKCpwYXJh
bWV0ZXJzLT5maWx0ZXIsICpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFp
bnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBh
cmFtZXRlcnMtPmVuZFkpOworICAgIHBhcmFtZXRlcnMtPmVmZmVjdC0+ZmlsbFJlZ2lvbigqcGFy
YW1ldGVycy0+ZmlsdGVyLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+Zmls
dGVyUmVnaW9uLCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hE
YXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOwogfQogCi12b2lkIEZF
VHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQor
RmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAg
ICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSB1bnByZW11bHRpcGxpZWRSZXN1bHQoKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBy
ZXR1cm4gZmlsdGVyLm1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwor
fQorCitib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIGF1dG8mIG91dHB1dCA9ICpmaWx0ZXJJbWFnZSgpOworCisgICAg
YXV0byBvdXRwdXRQaXhlbEJ1ZmZlciA9IG91dHB1dC5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICghb3V0cHV0UGl4ZWxCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvJiBvdXRwdXRQaXhl
bEFycmF5ID0gb3V0cHV0UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIEludFNpemUgcmVzdWx0
U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgSW50U2l6ZSBvdXRwdXRTaXpl
KG91dHB1dC5hYnNvbHV0ZUltYWdlUmVjdCgpLnNpemUoKSk7CiAKLSAgICBpZiAocmVzdWx0U2l6
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAob3V0cHV0U2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgb3V0cHV0UGl4ZWxBcnJheS56ZXJvRmlsbCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUoZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKKyAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZElu
dFNpemUob3V0cHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7CiAKICAgICBmbG9hdCBi
YXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7CiAgICAgZmxvYXQgYmFzZUZyZXF1ZW5j
eVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwpAQCAtNDE3LDE0ICs0MjMsMTcgQEAgdm9pZCBGRVR1cmJ1
bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBQ
YWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNpemUsIGJhc2VGcmVxdWVuY3lY
LCBiYXNlRnJlcXVlbmN5WSk7CiAgICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7CiAKLSAgICBh
dXRvIGFyZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKKyAgICBhdXRvIGFyZWEgPSBvdXRwdXRTaXpl
LmFyZWEoKTsKICAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IGhlaWdodCA9IHJlc3VsdFNpemUuaGVp
Z2h0KCk7CisgICAgaW50IGhlaWdodCA9IG91dHB1dFNpemUuaGVpZ2h0KCk7CiAKICAgICB1bnNp
Z25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8gODsKICAgICB1bnNpZ25lZCBvcHRpbWFsVGhy
ZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5z
aW9uLCBtYXhOdW1UaHJlYWRzKTsKKworICAgIGF1dG8gZmlsdGVyUmVnaW9uID0gb3V0cHV0LmFi
c29sdXRlSW1hZ2VSZWN0KCk7CisKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsK
ICAgICAgICAgUGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMo
JldlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51
bWJlcik7CiAKQEAgLTQ0MCw3ICs0NDksOCBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICAgICAgICAgIEZpbGxS
ZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwogICAg
ICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSAmZmlsdGVyOwogICAgICAgICAgICAgICAgIHBh
cmFtcy5lZmZlY3QgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0g
JmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyUmVn
aW9uID0gZmlsdGVyUmVnaW9uOworICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0g
Jm91dHB1dFBpeGVsQXJyYXk7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9
ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0
Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7CkBAIC00NTEs
MTIgKzQ2MSwxMyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwYXJhbGxl
bEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhy
ZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBh
aW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAgIGZpbGxSZWdpb24oZmlsdGVyLCBkZXN0aW5hdGlv
blBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBm
aWxsUmVnaW9uKGZpbHRlciwgb3V0cHV0UGl4ZWxBcnJheSwgZmlsdGVyUmVnaW9uLCBwYWludGlu
Z0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUdXJidWxlbmNlVHlw
ZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmgKaW5kZXggMzZmZGRmODYyN2M2Li5kYjA2Y2FiNWI0M2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuaApAQCAtOTQsNiArOTQsNyBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBGaWxs
UmVnaW9uUGFyYW1ldGVycyB7CiAgICAgICAgIGNvbnN0IEZpbHRlciogZmlsdGVyOwogICAgICAg
ICBGRVR1cmJ1bGVuY2UqIGVmZmVjdDsKKyAgICAgICAgSW50UmVjdCBmaWx0ZXJSZWdpb247CiAg
ICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwogICAgICAgICBQYWludGluZ0Rh
dGEqIHBhaW50aW5nRGF0YTsKICAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwpAQCAtMTA1
LDE1ICsxMDYsMTUgQEAgcHJpdmF0ZToKIAogICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlw
ZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0
YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQ
YWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0
UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7
CiAgICAgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0
JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKICAgICBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3Qg
U3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFp
bnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZv
aWQgZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBh
aW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsKKyAg
ICB2b2lkIGZpbGxSZWdpb24oY29uc3QgRmlsdGVyJiwgVWludDhDbGFtcGVkQXJyYXkmLCBjb25z
dCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEs
IGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdp
b25Xb3JrZXIodm9pZCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCBmMzVkOWJhNDJmZmIuLjZkMjFhNjNhM2U0YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
CkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVk
ZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJH
ZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogCkBAIC0zMywxNyArMzQsMTYgQEAgY2xhc3MgRmlsdGVyRWZmZWN0
OwogCiBjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgorICAg
IGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7IEludGVyc2VjdCwgVW5pdGUgfTsKKwogICAgIEZs
b2F0U2l6ZSBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2NhbGU7IH0KICAg
ICB2b2lkIHNldEZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUpIHsgbV9m
aWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOyB9CiAKICAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KLSAgICB2b2lkIHNldEZp
bHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2ZpbHRlclJlZ2lv
biA9IGZpbHRlclJlZ2lvbjsgfQorICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KSB7IG1fc291cmNlSW1hZ2VSZWN0ID0gc291cmNlSW1h
Z2VSZWN0OyB9CiAgICAgCiAgICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpIHsgbV9zb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJ
bWFnZVJlY3Q7IH0KLQotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyU2NhbGUo
RmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0dXJuIHNpemUgKiBtX2ZpbHRlclNjYWxlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGx5RmlsdGVyKCkgeyB9CisgICAgdm9pZCBzZXRGaWx0ZXJSZWdp
b24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0
ZXJSZWdpb247IH0KIAogICAgIHZvaWQgc2V0U291cmNlSW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVy
PiYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1hZ2UgPSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsg
fQogICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNl
SW1hZ2UuZ2V0KCk7IH0KQEAgLTUxLDE4ICs1MSw1NiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CiAg
ICAgdm9pZCBzZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBt
X3JlbmRlcmluZ01vZGUgPSByZW5kZXJpbmdNb2RlOyB9CiAKKyAgICBDbGlwT3BlcmF0aW9uIGNs
aXBPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NsaXBPcGVyYXRpb247IH0KKworICAgIHZp
cnR1YWwgRmxvYXRTaXplIHNjYWxlZFNpemVCeUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyU2NhbGU7IH0KKworICAgIEZsb2F0
UmVjdCBzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gc2NhbGVkSW1hZ2VSZWN0ID0gaW1hZ2VSZWN0Owor
ICAgICAgICBzY2FsZWRJbWFnZVJlY3Quc2NhbGUobV9maWx0ZXJTY2FsZSk7CisgICAgICAgIHJl
dHVybiBzY2FsZWRJbWFnZVJlY3Q7CisgICAgfQorCisgICAgRmxvYXRSZWN0IG1heFByaW1pdGl2
ZVN1YnJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbnRlcnNlY3Rpb24ocHJpbWl0aXZlU3VicmVnaW9uLCBtX2Zp
bHRlclJlZ2lvbik7CisgICAgfQorCisgICAgRmxvYXRSZWN0IGNsaXBUb1ByaW1pdGl2ZVN1YnJl
Z2lvbihjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jbGlwT3BlcmF0aW9u
ID09IENsaXBPcGVyYXRpb246OkludGVyc2VjdCA/IGludGVyc2VjdGlvbihpbWFnZVJlY3QsIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgOiB1bmlvblJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdp
b24pOworICAgIH0KKworICAgIEZsb2F0UmVjdCBjbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24o
Y29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNsaXBUb1ByaW1pdGl2ZVN1YnJl
Z2lvbihpbWFnZVJlY3QsIG1heFByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24p
KTsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVy
KGNvbnN0IEZsb2F0UG9pbnQmIHVzZXJTcGFjZVBvaW50LCBjb25zdCBGbG9hdFJlY3QmIGltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CisgICAgewor
ICAgICAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQgPSBtYXBQb2ludCh1c2VyU3BhY2VQb2lu
dCwgcHJpbWl0aXZlU3VicmVnaW9uLCBzY2FsZWRSZWN0QnlGaWx0ZXJTY2FsZShwcmltaXRpdmVT
dWJyZWdpb24pKTsKKyAgICAgICAgRmxvYXRSZWN0IGFic29sdXRlSW1hZ2VSZWN0ID0gc2NhbGVk
UmVjdEJ5RmlsdGVyU2NhbGUoaW1hZ2VSZWN0KTsKKyAgICAgICAgYWJzb2x1dGVQb2ludC5tb3Zl
QnkoLWFic29sdXRlSW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgICAgICByZXR1cm4gYWJzb2x1
dGVQb2ludDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlGaWx0ZXIoKSB7IHJldHVy
biBmYWxzZTsgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgRmlsdGVyKEZpbHRlcjo6VHlwZSBmaWx0ZXJU
eXBlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlKQorICAgIEZpbHRlcihGaWx0ZXI6OlR5
cGUgZmlsdGVyVHlwZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlv
biBjbGlwT3BlcmF0aW9uKQogICAgICAgICA6IEZpbHRlckZ1bmN0aW9uKGZpbHRlclR5cGUpCiAg
ICAgICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAgICAgLCBtX2NsaXBPcGVy
YXRpb24oY2xpcE9wZXJhdGlvbikKICAgICB7CiAgICAgfQogCi0gICAgRmlsdGVyKEZpbHRlcjo6
VHlwZSBmaWx0ZXJUeXBlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pCisg
ICAgRmlsdGVyKEZpbHRlcjo6VHlwZSBmaWx0ZXJUeXBlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRl
clNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKICAgICAgICAgOiBG
aWx0ZXJGdW5jdGlvbihmaWx0ZXJUeXBlKQogICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVy
U2NhbGUpCiAgICAgICAgICwgbV9zb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KQogICAg
ICAgICAsIG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKKyAgICAgICAgLCBtX2NsaXBPcGVy
YXRpb24oY2xpcE9wZXJhdGlvbikKICAgICB7CiAgICAgfQogCkBAIC03Myw2ICsxMTEsOCBAQCBw
cml2YXRlOgogCiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOwogICAgIFJl
bmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCB9OworCisgICAgQ2xpcE9wZXJhdGlvbiBtX2NsaXBPcGVyYXRpb24geyBDbGlwT3BlcmF0aW9u
OjpJbnRlcnNlY3QgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91bmRhcnlT
ZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyQm91
bmRhcnlTZXQuaAppbmRleCA4YjEzNzg5MTc5MWYuLmY4ZGZiNTVhNDE4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJCb3VuZGFyeVNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Qm91bmRhcnlTZXQuaApAQCAtMSArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLwogCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBGaWx0ZXJCb3VuZGFyeVNldCB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBGbGFncyB7
CisgICAgICAgIEhhc1ggICAgICA9IDEgPDwgMCwKKyAgICAgICAgSGFzWSAgICAgID0gMSA8PCAx
LAorICAgICAgICBIYXNXaWR0aCAgPSAxIDw8IDIsCisgICAgICAgIEhhc0hlaWdodCA9IDEgPDwg
MworICAgIH07CisKKyAgICBGaWx0ZXJCb3VuZGFyeVNldCgpID0gZGVmYXVsdDsKKworICAgIEZp
bHRlckJvdW5kYXJ5U2V0KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRhcmllcywgT3B0aW9uU2V0PEZs
YWdzPiBmbGFncykKKyAgICAgICAgOiBtX2JvdW5kYXJpZXMoYm91bmRhcmllcykKKyAgICAgICAg
LCBtX2ZsYWdzKGZsYWdzKQorICAgIHsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiB4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpI
YXNYKSkKKyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMueCgpOworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHkoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1kpKQor
ICAgICAgICAgICAgcmV0dXJuIG1fYm91bmRhcmllcy55KCk7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gd2lkdGgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc1dpZHRoKSkK
KyAgICAgICAgICAgIHJldHVybiBtX2JvdW5kYXJpZXMud2lkdGgoKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBoZWlnaHQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmxhZ3MuY29udGFpbnMoRmxhZ3M6Okhhc0hl
aWdodCkpCisgICAgICAgICAgICByZXR1cm4gbV9ib3VuZGFyaWVzLmhlaWdodCgpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3Qg
bV9ib3VuZGFyaWVzOworICAgIE9wdGlvblNldDxGbGFncz4gbV9mbGFnczsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBlMzMzMGExZjQ2NDUuLjJi
ZThjNzBiZjI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjYsMTIgKzI2LDcgQEAKIAogI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlV
dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDEsMjI5ICszNiwxMDUgQEAgRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoRmlsdGVy
RWZmZWN0OjpUeXBlIHR5cGUpCiB7CiB9CiAKLXZvaWQgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKQotewotICAgIG1fYWJzb2x1dGVQYWludFJl
Y3QgPSBJbnRSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykK
LSAgICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC51bml0ZShlZmZlY3QtPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotfQotCi12b2lkIEZpbHRlckVm
ZmVjdDo6Y2xpcEFic29sdXRlUGFpbnRSZWN0KCkKLXsKLSAgICAvLyBGaWx0ZXJzIGluIFNWRyBj
bGlwIHRvIHByaW1pdGl2ZSBzdWJyZWdpb24sIHdoaWxlIENTUyBkb2Vzbid0LgotICAgIGlmICht
X2NsaXBzVG9Cb3VuZHMpCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KGVu
Y2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Fi
c29sdXRlUGFpbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QobV9tYXhFZmZlY3RSZWN0KSk7
Ci19Ci0KLUZsb2F0UG9pbnQgRmlsdGVyRWZmZWN0OjptYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1
ZmZlcihGbG9hdFBvaW50IHVzZXJTcGFjZVBvaW50KSBjb25zdAotewotICAgIEZsb2F0UG9pbnQg
YWJzb2x1dGVQb2ludCA9IG1hcFBvaW50KHVzZXJTcGFjZVBvaW50LCBtX2ZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbiwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbik7Ci0gICAgYWJzb2x1dGVQ
b2ludC5tb3ZlQnkoLW1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJu
IGFic29sdXRlUG9pbnQ7Ci19Ci0KLUludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoY29uc3QgSW50UmVjdCYgZWZmZWN0UmVjdCkgY29uc3QKLXsK
LSAgICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fYWJzb2x1dGVQYWludFJlY3QubG9jYXRpb24oKTsK
LSAgICBsb2NhdGlvbi5tb3ZlQnkoLWVmZmVjdFJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJu
IEludFJlY3QobG9jYXRpb24sIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKLX0KLQotRmxv
YXRSZWN0IEZpbHRlckVmZmVjdDo6ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0KSBjb25zdAorRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZm
ZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKIHsKLSAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwot
Ci0gICAgRmxvYXRTaXplIHNjYWxlOwotICAgIEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRy
YW5zZm9ybTsKLSAgICB0cmFuc2Zvcm0uc2NhbGUoc2NhbGUpLnRyYW5zbGF0ZSgtbV9hYnNvbHV0
ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtLm1hcFJlY3Qoc3Jj
UmVjdCk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obnVtYmVyIDwgbV9p
bnB1dEVmZmVjdHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVy
KS5nZXQoKTsKIH0KIAotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKSBj
b25zdAogewotICAgIC8vIEZFVGlsZSwgRkVUdXJidWxlbmNlLCBGRUZsb29kIGRvbid0IGhhdmUg
aW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZmlsdGVyIHJlZ2lvbiBhcyB1bml0ZSByZWN0LgotICAg
IEZsb2F0UmVjdCBzdWJyZWdpb247Ci0gICAgaWYgKHVuc2lnbmVkIG51bWJlck9mSW5wdXRFZmZl
Y3RzID0gaW5wdXRFZmZlY3RzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIHN1YnJlZ2lvbiA9IGlucHV0
RWZmZWN0KDApLT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oZmlsdGVyKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bWJlck9mSW5wdXRFZmZlY3RzOyArK2kp
IHsKLSAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBpbnB1dEVmZmVj
dChpKS0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7Ci0gICAgICAg
ICAgICBzdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwotICAgICAgICB9
CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9m
aWx0ZXItZWZmZWN0cy0xLyNGaWx0ZXJQcmltaXRpdmVTdWJSZWdpb24uCisgICAgRmxvYXRSZWN0
IGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb247CisgICAgCisgICAgLy8gRG9uJ3QgdXNlIHRoZSBp
bnB1dCdzIHN1YnJlZ2lvbiBmb3IgPGZlVGlsZT4uCisgICAgaWYgKCFtX2lucHV0RWZmZWN0cy5p
c0VtcHR5KCkgJiYgZmlsdGVyVHlwZSgpICE9IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVUaWxlKSB7
CisgICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCisgICAgICAgICAg
ICBkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLnVuaXRlKGVmZmVjdC0+Y2FsY3VsYXRlUHJpbWl0
aXZlU3VicmVnaW9uKGZpbHRlcikpOwogICAgIH0gZWxzZQotICAgICAgICBzdWJyZWdpb24gPSBm
aWx0ZXIuZmlsdGVyUmVnaW9uKCk7Ci0KLSAgICAvLyBBZnRlciBjYWxsaW5nIGRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUgdGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhlIHN1
YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0gICAgaWYgKGZpbHRlclR5cGUoKSA9PSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkKLSAgICAgICAgc3VicmVnaW9uID0gZmlsdGVyLmZpbHRl
clJlZ2lvbigpOwotCi0gICAgYXV0byBib3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllcygpOwot
ICAgIGlmIChoYXNYKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRYKGJvdW5kYXJpZXMueCgpKTsK
LSAgICBpZiAoaGFzWSgpKQotICAgICAgICBzdWJyZWdpb24uc2V0WShib3VuZGFyaWVzLnkoKSk7
Ci0gICAgaWYgKGhhc1dpZHRoKCkpCi0gICAgICAgIHN1YnJlZ2lvbi5zZXRXaWR0aChib3VuZGFy
aWVzLndpZHRoKCkpOwotICAgIGlmIChoYXNIZWlnaHQoKSkKLSAgICAgICAgc3VicmVnaW9uLnNl
dEhlaWdodChib3VuZGFyaWVzLmhlaWdodCgpKTsKLQotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbihzdWJyZWdpb24pOwotCi0gICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IHN1YnJl
Z2lvbjsKLSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0gICAgLy8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1h
cCBsaWdodGluZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4K
LSAgICBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7Cisg
ICAgICAgIGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7
CiAKLSAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24u
Ci0gICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdp
b24oKTsKLSAgICBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbi5zY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVk
RmlsdGVyUmVnaW9uKTsKKyAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uOwogCi0gICAg
c2V0TWF4RWZmZWN0UmVjdChhYnNvbHV0ZVN1YnJlZ2lvbik7Ci0gICAgcmV0dXJuIHN1YnJlZ2lv
bjsKLX0KLQotRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVk
IG51bWJlcikgY29uc3QKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihu
dW1iZXIgPCBtX2lucHV0RWZmZWN0cy5zaXplKCkpOwotICAgIHJldHVybiBtX2lucHV0RWZmZWN0
cy5hdChudW1iZXIpLmdldCgpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRYKG1fYm91bmRh
cnlTZXQueCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdpb24ueCgpKSk7CisgICAg
cHJpbWl0aXZlU3VicmVnaW9uLnNldFkobV9ib3VuZGFyeVNldC55KCkudmFsdWVfb3IoZGVmYXVs
dFByaW1pdGl2ZVN1YnJlZ2lvbi55KCkpKTsKKyAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0V2lk
dGgobV9ib3VuZGFyeVNldC53aWR0aCgpLnZhbHVlX29yKGRlZmF1bHRQcmltaXRpdmVTdWJyZWdp
b24ud2lkdGgoKSkpOworICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi5zZXRIZWlnaHQobV9ib3VuZGFy
eVNldC5oZWlnaHQoKS52YWx1ZV9vcihkZWZhdWx0UHJpbWl0aXZlU3VicmVnaW9uLmhlaWdodCgp
KSk7CisgICAgCisgICAgcmV0dXJuIHByaW1pdGl2ZVN1YnJlZ2lvbjsKIH0KIAotc3RhdGljIHVu
c2lnbmVkIGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCplZmZlY3QsIEhhc2hTZXQ8
Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0
OjpjYWxjdWxhdGVNYXhQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0ZXIpIGNv
bnN0CiB7Ci0gICAgYWxsRWZmZWN0cy5hZGQoZWZmZWN0KTsKLSAgICB1bnNpZ25lZCBzaXplID0g
ZWZmZWN0LT5udW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5w
dXRFZmZlY3QoaSk7Ci0gICAgICAgIGNvbGxlY3RFZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGFsbEVmZmVjdHMuc2l6ZSgpOworICAgIGF1dG8gcHJpbWl0aXZlU3Vi
cmVnaW9uID0gY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7CisgICAgcmV0dXJu
IGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
dW5zaWduZWQgRmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QK
K0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0g
ICAgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiBhbGxFZmZlY3RzOwotICAgIHJldHVybiBj
b2xsZWN0RWZmZWN0cyh0aGlzLCBhbGxFZmZlY3RzKTsKLX0KKyAgICBpZiAobV9maWx0ZXJJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmltYWdlUmVjdCgpOwogCi12b2lkIEZp
bHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgaWYgKGhhc1Jl
c3VsdCgpKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZl
Y3RzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKTsKLSAg
ICAgICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3Q7CiAKLSAgICAgICAg
Ly8gQ29udmVydCBpbnB1dCByZXN1bHRzIHRvIHRoZSBjdXJyZW50IGVmZmVjdCdzIGNvbG9yIHNw
YWNlLgotICAgICAgICB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGluLCBpKTsKKyAgICBmb3Ig
KGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKSB7CisgICAgICAgIGF1dG8mIGlucHV0ID0g
KmVmZmVjdC0+ZmlsdGVySW1hZ2UoKTsKKyAgICAgICAgaW1hZ2VSZWN0LnVuaXRlKGlucHV0Lmlt
YWdlUmVjdCgpKTsKICAgICB9CiAKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0
ZXIpOwotICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKLQot
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8
IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8ICJcbiAgZWZm
ZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFic29sdXRlVW5j
bGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA8PCAiXG4g
IGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAiXG4gIG1heEVm
ZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0Vt
cHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtYXlQcm9kdWNlSW52YWxp
ZFByZW11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGluIDogbV9pbnB1
dEVmZmVjdHMpCi0gICAgICAgICAgICBpbi0+Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5l
ZWRlZCgpOwotICAgIH0KLQotICAgIGlmICghY3JlYXRlUmVzdWx0KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMgaGVyZSBh
bmQgcmV0dXJuIGVhcmxpZXIuCi0gICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGZpbHRlcik7Cisg
ICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhQcmltaXRpdmVTdWJyZWdpb24oaW1hZ2VSZWN0LCBw
cmltaXRpdmVTdWJyZWdpb24pOwogfQogCi1ib29sIEZpbHRlckVmZmVjdDo6Y3JlYXRlUmVzdWx0
KCkKK0ludFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICBtX2ZpbHRlckltYWdlID0gRmlsdGVySW1h
Z2U6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgMSwgbV9yZXN1bHRDb2xvclNwYWNlKTsKLSAgICByZXR1cm4gbV9maWx0ZXJJ
bWFnZTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1
YnJlZ2lvbihmaWx0ZXIpOworICAgIGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8gaW1hZ2VSZWN0ID0gY2FsY3VsYXRlSW1hZ2VS
ZWN0KGZpbHRlciwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChmaWx0ZXIuc2NhbGVkUmVjdEJ5RmlsdGVyU2NhbGUoaW1hZ2VSZWN0KSk7CiB9CiAKLXZv
aWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCi17Ci0gICAgbV9maWx0ZXJJbWFnZSA9IG51
bGxwdHI7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQor
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKCkKIHsKICAgICAv
LyBDbGVhciBhbGwgcmVzdWx0cywgcmVnYXJkbGVzcyB0aGF0IHRoZSBjdXJyZW50IGVmZmVjdCBo
YXMKICAgICAvLyBhIHJlc3VsdC4gQ2FuIGJlIHVzZWQgaWYgYW4gZWZmZWN0IGlzIGluIGFuIGVy
cm9uZW91cyBzdGF0ZS4KLSAgICBjbGVhclJlc3VsdCgpOworICAgIGNsZWFyRmlsdGVySW1hZ2Uo
KTsKICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAgICBlZmZl
Y3QtPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwotfQotCi1JbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCi17Ci0gICAgaWYgKCFoYXNSZXN1bHQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fZmlsdGVySW1hZ2UtPmltYWdlQnVmZmVy
KCk7CisgICAgICAgIGVmZmVjdC0+Y2xlYXJGaWx0ZXJJbWFnZXNSZWN1cnNpdmUoKTsKIH0KIAot
UGl4ZWxCdWZmZXIqIEZpbHRlckVmZmVjdDo6dW5wcmVtdWx0aXBsaWVkUmVzdWx0KCkKK2Jvb2wg
RmlsdGVyRWZmZWN0OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICBpZiAoIWhh
c1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbV9maWx0ZXJJ
bWFnZS0+cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KTsKLX0KKyAgICBpZiAobV9maWx0ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLVBp
eGVsQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoKQotewotICAgIGlm
ICghaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBtX2Zp
bHRlckltYWdlLT5waXhlbEJ1ZmZlcihBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKTsKLX0KKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2
ZVN1YnJlZ2lvbihmaWx0ZXIpOworICAgIGlmIChwcmltaXRpdmVTdWJyZWdpb24uaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmls
dGVyRWZmZWN0OjpnZXRVbnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwg
c3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAg
QVNTRVJUKGhhc1Jlc3VsdCgpKTsKLSAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+Z2V0UGl4ZWxC
dWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCByZWN0LCBjb2xv
clNwYWNlKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6Omdl
dFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpCi17Ci0gICAgQVNTRVJUKGhhc1Jlc3Vs
dCgpKTsKLSAgICByZXR1cm4gbV9maWx0ZXJJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFjZSk7Ci19Ci0KLXZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5wcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgc3RkOjpvcHRpb25hbDxEZXN0
aW5hdGlvbkNvbG9yU3BhY2U+IGNvbG9yU3BhY2UpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1Jl
c3VsdCgpKTsKLSAgICBtX2ZpbHRlckltYWdlLT5jb3B5UGl4ZWxCdWZmZXIoZGVzdGluYXRpb24s
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgcmVjdCwgY29sb3JTcGFj
ZSk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0
aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKSBjb25zdAotewotICAgIEFT
U0VSVChoYXNSZXN1bHQoKSk7Ci0gICAgbV9maWx0ZXJJbWFnZS0+Y29weVBpeGVsQnVmZmVyKGRl
c3RpbmF0aW9uLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCByZWN0LCBj
b2xvclNwYWNlKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVk
UmVzdWx0SWZOZWVkZWQoKQotewotICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7Ci0gICAgaWYgKCFt
YXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fZmlsdGVySW1hZ2UtPmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsKKyAg
ICBhdXRvIGltYWdlUmVjdCA9IGNhbGN1bGF0ZUltYWdlUmVjdChmaWx0ZXIsIHByaW1pdGl2ZVN1
YnJlZ2lvbik7CisgICAgYXV0byBhYnNvbHV0ZUltYWdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
ZmlsdGVyLnNjYWxlZFJlY3RCeUZpbHRlclNjYWxlKGltYWdlUmVjdCkpOwogICAgIAotfQotCi12
b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGRlc3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSAgICBpZiAoIWhhc1Jl
c3VsdCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9maWx0ZXJJbWFnZS0+dHJhbnNmb3JtVG9D
b2xvclNwYWNlKGRlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CisgICAgaWYgKGFic29sdXRlSW1hZ2VS
ZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJ
bWFnZVJlY3Quc2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8g
aXNBbHBoYUltYWdlID0gdGhpcy0+aXNBbHBoYUltYWdlKCk7CisgICAgYXV0byBpbWFnZUNvbG9y
U3BhY2UgPSB0aGlzLT5pbWFnZUNvbG9yU3BhY2UoKTsKKyAgICAKKyAgICBtX2ZpbHRlckltYWdl
ID0gRmlsdGVySW1hZ2U6OmNyZWF0ZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgYWJz
b2x1dGVJbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgaW1hZ2VDb2xvclNwYWNlKTsKKyAgICBpZiAoIW1fZmlsdGVySW1hZ2UpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0KKyAgICAg
ICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAi
IGFwcGx5KCk6IgorICAgICAgICA8PCAiXG4gIHByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IHByaW1p
dGl2ZVN1YnJlZ2lvbgorICAgICAgICA8PCAiXG4gIG1heFByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8
IGZpbHRlci5tYXhQcmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKQorICAgICAg
ICA8PCAiXG4gIGltYWdlUmVjdCAiIDw8IGltYWdlUmVjdAorICAgICAgICA8PCAiXG4gIGFic29s
dXRlSW1hZ2VnUmVjdCAiIDw8IGFic29sdXRlSW1hZ2VSZWN0KTsKKyAgICAKKyAgICAvLyBBZGQg
cGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVy
LgorICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShmaWx0ZXIpOworICAgIHJldHVybiB0cnVlOwog
fQogCiBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
CkBAIC0yNzMsOSArMTQ0LDcgQEAgVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblQKICAgICAKICAgICBp
ZiAocmVwcmVzZW50YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7
CiAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSBpbWFnZSIsIG1fYWxwaGFJbWFnZSk7CiAgICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBtX29wZXJhdGluZ0NvbG9y
U3BhY2UpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgbV9y
ZXN1bHRDb2xvclNwYWNlKTsKICAgICAgICAgdHMgPDwgIlxuIiA8PCBpbmRlbnQ7CiAgICAgfQog
ICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDQ5NzQyMThiZTA2My4uNTBjY2IwYTZk
YTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTIyLDE4ICsyMiw5IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkRlc3RpbmF0
aW9uQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZpbHRlckJvdW5kYXJ5U2V0LmgiCiAjaW5jbHVk
ZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgotI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0RXh0
ZW50LmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNs
YXNzIFRleHRTdHJlYW07CkBAIC00MywxNDcgKzM0LDUzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRmlsdGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OwotY2xhc3MgSW1hZ2VCdWZmZXI7
CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0
b3I7CiAKIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJs
aWM6Ci0gICAgYm9vbCBjcmVhdGVSZXN1bHQoKTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0KCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKLQotICAgIEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFBpeGVsQnVmZmVyKiB1bnByZW11bHRpcGxp
ZWRSZXN1bHQoKTsKLSAgICBQaXhlbEJ1ZmZlciogcHJlbXVsdGlwbGllZFJlc3VsdCgpOwotCi0g
ICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckltYWdlOyB9CisgICAg
RmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0
czsgfQorICAgIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0
KHVuc2lnbmVkIG51bWJlcikgY29uc3Q7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGdldFVucHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKLSAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6
b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgRmxv
YXRSZWN0IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImKSBjb25zdDsK
KyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRl
ciYpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Q7Cisg
ICAgSW50UmVjdCBjYWxjdWxhdGVBYnNvbHV0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImKSBjb25z
dDsKIAotICAgIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9u
Q29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotICAgIHZvaWQgY29weVByZW11bHRp
cGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0
Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKKyAgICBGaWx0ZXJJbWFnZSogZmlsdGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2Zp
bHRlckltYWdlLmdldCgpOyB9CisgICAgdm9pZCBjbGVhckZpbHRlckltYWdlKCkgb3ZlcnJpZGUg
eyBtX2ZpbHRlckltYWdlID0gbnVsbHB0cjsgfQorICAgIHZvaWQgY2xlYXJGaWx0ZXJJbWFnZXNS
ZWN1cnNpdmUoKTsKIAotICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRl
ZCgpOworICAgIHZvaWQgc2V0Qm91bmRhcnlTZXQoY29uc3QgRmlsdGVyQm91bmRhcnlTZXQmIGJv
dW5kYXJ5U2V0KSB7IG1fYm91bmRhcnlTZXQgPSBib3VuZGFyeVNldDsgfQogCi0gICAgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQot
ICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwotICAgIHVuc2ln
bmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMu
c2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0
OwotICAgIAotICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKLSAgICBJbnRSZWN0IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgCi0gICAgLy8gUmVjdXJzZXMgb24gaW5w
dXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29u
c3QgRmlsdGVyJik7CisgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdD
b2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7
IH0KIAogICAgIC8vIFNvbGlkIGJsYWNrIGltYWdlIHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVl
cy4KLSAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFJbWFnZTsg
fQotICAgIHZvaWQgc2V0SXNBbHBoYUltYWdlKGJvb2wgYWxwaGFJbWFnZSkgeyBtX2FscGhhSW1h
Z2UgPSBhbHBoYUltYWdlOyB9Ci0KLSAgICBJbnRSZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9hYnNvbHV0ZVBhaW50UmVjdDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQ
YWludFJlY3QoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBh
aW50UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0OyB9Ci0KLSAgICBGbG9hdFJlY3QgbWF4RWZmZWN0
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZvaWQgc2V0TWF4
RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RS
ZWN0ID0gbWF4RWZmZWN0UmVjdDsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FscGhhSW1hZ2UoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBpbWFnZUNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9y
U3BhY2U7IH0KIAotICAgIHZvaWQgYXBwbHkoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSA9IDA7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
Jik7CisjaWYgVVNFKENPUkVfSU1BR0UpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlD
b3JlSW1hZ2UoY29uc3QgRmlsdGVyJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBlbnVtIGNsYXNz
IFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OwogICAgIHZpcnR1
YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkg
Y29uc3Q7CiAKLSAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgU1ZHIHNwZWNpZmlj
IGFuZCB3aWxsIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAg
Ly8gU2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2MTQu
Ci0gICAgYm9vbCBoYXNYKCkgY29uc3QgeyByZXR1cm4gbV9oYXNYOyB9Ci0gICAgdm9pZCBzZXRI
YXNYKGJvb2wgdmFsdWUpIHsgbV9oYXNYID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzWSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzWTsgfQotICAgIHZvaWQgc2V0SGFzWShib29sIHZhbHVlKSB7IG1f
aGFzWSA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGhhc1dpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNXaWR0aDsgfQotICAgIHZvaWQgc2V0SGFzV2lkdGgoYm9vbCB2YWx1ZSkgeyBtX2hhc1dpZHRo
ID0gdmFsdWU7IH0KLQotICAgIGJvb2wgaGFzSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNI
ZWlnaHQ7IH0KLSAgICB2b2lkIHNldEhhc0hlaWdodChib29sIHZhbHVlKSB7IG1faGFzSGVpZ2h0
ID0gdmFsdWU7IH0KLQotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZvaWQgc2V0
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRhcmllcygpIGNvbnN0IHsg
cmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQotICAgIHZvaWQgc2V0RWZmZWN0Qm91bmRhcmll
cyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9lZmZlY3RCb3VuZGFyaWVz
ID0gZWZmZWN0Qm91bmRhcmllczsgfQotICAgIAotICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1
dGVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJy
ZWdpb24gPSByOyB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2ludEZyb21Vc2VyU3BhY2VU
b0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBib29sIGNsaXBzVG9Cb3VuZHMo
KSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2b2lkIHNldENsaXBzVG9C
b3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsgfQotCi0gICAgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wZXJh
dGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7
IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLSAgICBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3Vs
dENvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q29sb3JTcGFjZShjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9yZXN1bHRDb2xvclNwYWNl
ID0gY29sb3JTcGFjZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9y
U3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7Ci0gICAgCi0gICAg
c3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+
JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXMo
dmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRG
bG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKLSAgICB9
Ci0KIHByb3RlY3RlZDoKICAgICBGaWx0ZXJFZmZlY3QoVHlwZSk7Ci0gICAgCi0gICAgdmlydHVh
bCBib29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICB2b2lkIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotCi1wcml2
YXRlOgotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JikgPSAwOwogCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwotCi0gICAg
UmVmUHRyPEZpbHRlckltYWdlPiBtX2ZpbHRlckltYWdlOwotCi0gICAgSW50UmVjdCBtX2Fic29s
dXRlUGFpbnRSZWN0OwogICAgIAotICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgb2YgYSBmaWx0ZXIg
cHJpbWl0aXZlLiBJbiBTVkcgdGhpcyBpcyB0aGUgcHJpbWl0aXZlIHN1YnJlZ2lvbiBpbiBhYnNv
bHV0ZSBjb29yZGluYXRlIHNwYWNlLgotICAgIC8vIFRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHNo
b3VsZCBuZXZlciBiZSBiaWdnZXIgdGhhbiBtX21heEVmZmVjdFJlY3QuCi0gICAgRmxvYXRSZWN0
IG1fbWF4RWZmZWN0UmVjdDsKLSAgICAKLSAgICAvLyBUaGUgc3VicmVnaW9uIG9mIGEgZmlsdGVy
IHByaW1pdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIFNWRyBGaWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBs
b2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBUaGlzIGlzIFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMg
dG8gbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KLSAgICBGbG9hdFJl
Y3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247CisgICAgRmlsdGVyQm91bmRhcnlTZXQgbV9i
b3VuZGFyeVNldDsKIAotICAgIC8vIHgsIHksIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGFjdHVh
bCBTVkdGRSpFbGVtZW50LiBJcyBuZWVkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdWJyZWdpb24gb2Yg
dGhlCi0gICAgLy8gZmlsdGVyIHByaW1pdGl2ZSBvbiBhIGxhdGVyIHN0ZXAuCi0gICAgRmxvYXRS
ZWN0IG1fZWZmZWN0Qm91bmRhcmllczsKLSAgICAKLSAgICAvLyBmaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24gbWFwcGVkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzIGJlZm9yZSBjbGlwcGluZy4KLSAg
ICBGbG9hdFJlY3QgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbjsKLQotICAgIGJvb2wgbV9h
bHBoYUltYWdlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzWCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2hhc1kgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX2hhc0hlaWdodCB7IGZhbHNlIH07Ci0KLSAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBj
bGlwIHRvIGl0cyBwcmltaXRpdmUgcmVnaW9uLCBvciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5l
ZCByZWdpb24gb2YgaXRzIGlucHV0cy4KLSAgICBib29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUg
fTsKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IG1fZmlsdGVySW1hZ2U7CiAKLSNpZiBFTkFCTEUo
REVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgRGVzdGluYXRpb25Db2xv
clNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGlu
ZWFyU1JHQigpIH07Ci0jZWxzZQogICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBtX29wZXJhdGlu
Z0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9OwotI2VuZGlmCi0g
ICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpIH07CiB9OwogCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRmlsdGVyRWZmZWN0Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKaW5kZXggNTljZjdkZmUzNDM2Li44MzcxYWEyMGYy
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0UmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmgKQEAgLTM5LDE0ICszOSwxNCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFwcGx5RWZmZWN0cyhjb25zdCBGaWx0ZXImLCBGaWx0
ZXJFZmZlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1Jlc3VsdCgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIEltYWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBGbG9hdFJlY3QgZGVzdFJlY3QoY29uc3QgRmlsdGVyRWZmZWN0JikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGRlc3RSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSA9IDA7CiAg
ICAgCiAgICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7CiAgICAg
CiBwcm90ZWN0ZWQ6CiAgICAgRmlsdGVyRWZmZWN0UmVuZGVyZXIoKSA9IGRlZmF1bHQ7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZW5kZXJUb0ltYWdlQnVmZmVyKGNvbnN0IEZpbHRlciYsIEZpbHRlckVm
ZmVjdCYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24u
aAppbmRleCAyN2JlOTg0YzRkMTcuLjIwNjU4Y2JhMDljYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApA
QCAtODUsOCArODUsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbVN0cmluZyYgZmlsdGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIGZpbHRlck5hbWUobV9maWx0ZXJUeXBlKTsgfQogCiAgICAgdmly
dHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoY29uc3QgRmlsdGVyJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
UmVzdWx0KCkgeyB9CisgICAgdmlydHVhbCBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRmlsdGVySW1hZ2UoKSB7IH0KIAog
cHJpdmF0ZToKICAgICBUeXBlIG1fZmlsdGVyVHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKaW5kZXggOWU4
MGJkNjFkYTQ3Li5hYzcwYTQ4ZTEwZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwCkBAIC00MCwxNiArNDAs
MTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRl
ckltYWdlOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVySW1hZ2U6
OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRS
ZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlz
QWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCiB7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcobG9naWNhbFNpemUpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZp
bHRlckltYWdlKGxvZ2ljYWxTaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UpKTsKKyAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhh
YnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbHRl
ckltYWdlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdlUmVjdCwg
aXNBbHBoYUltYWdlLCByZW5kZXJpbmdNb2RlLCBjb2xvclNwYWNlKSk7CiB9CiAKLUZpbHRlcklt
YWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQotICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6
ZSkKK0ZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29s
dXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCisgICAgOiBtX3By
aW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pCisgICAgLCBtX2ltYWdlUmVjdChp
bWFnZVJlY3QpCisgICAgLCBtX2Fic29sdXRlSW1hZ2VSZWN0KGFic29sdXRlSW1hZ2VSZWN0KQor
ICAgICwgbV9pc0FscGhhSW1hZ2UoaXNBbHBoYUltYWdlKQogICAgICwgbV9yZW5kZXJpbmdNb2Rl
KHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUp
CiAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKIHsKIH0KQEAgLTU5LDExICs2MSwxMSBA
QCBJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKCkKICAgICBpZiAobV9pbWFn
ZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAKLSAgICBtX2lt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2xvZ2ljYWxTaXplLCBtX3JlbmRlcmlu
Z01vZGUsIG1fcmVzb2x1dGlvblNjYWxlLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JB
OCk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZUlt
YWdlUmVjdC5zaXplKCksIG1fcmVuZGVyaW5nTW9kZSwgMSwgbV9jb2xvclNwYWNlLCBQaXhlbEZv
cm1hdDo6QkdSQTgpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1f
bG9naWNhbFNpemUpIH07CisgICAgSW50UmVjdCByZWN0IHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VS
ZWN0LnNpemUoKSB9OwogCiAgICAgaWYgKHBpeGVsQnVmZmVySWZFeGlzdHMoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkpCiAgICAgICAgIG1faW1hZ2VCdWZmZXItPnB1dFBp
eGVsQnVmZmVyKCpwaXhlbEJ1ZmZlcklmRXhpc3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpLCByZWN0KTsKQEAgLTE2MiwyNiArMTY0LDI1IEBAIFBpeGVsQnVmZmVyKiBG
aWx0ZXJJbWFnZTo6cGl4ZWxCdWZmZXIoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBhbHBoYUZvcm1h
dCkKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBhbHBoYUZvcm1hdCwgUGl4ZWxGb3Jt
YXQ6OlJHQkE4LCBtX2NvbG9yU3BhY2UgfTsKIAogICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0g
aW1hZ2VCdWZmZXJJZkV4aXN0cygpKSB7Ci0gICAgICAgIHBpeGVsQnVmZmVyID0gaW1hZ2VCdWZm
ZXItPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgeyBJbnRQb2ludCgpLCBJbnRTaXplKG1fbG9naWNh
bFNpemUpIH0pOworICAgICAgICBwaXhlbEJ1ZmZlciA9IGltYWdlQnVmZmVyLT5nZXRQaXhlbEJ1
ZmZlcihmb3JtYXQsIHsgeyB9LCBtX2Fic29sdXRlSW1hZ2VSZWN0LnNpemUoKSB9KTsKICAgICAg
ICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7CiAgICAgfQogICAgIAotICAgIEludFNpemUg
c2NhbGVkU2l6ZShtX2xvZ2ljYWxTaXplKTsKLSAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZShtX2Fic29sdXRlSW1hZ2VSZWN0
LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobG9n
aWNhbFNpemUpKTsKIAotICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShm
b3JtYXQsIHNjYWxlZFNpemUpOworICAgIHBpeGVsQnVmZmVyID0gUGl4ZWxCdWZmZXI6OnRyeUNy
ZWF0ZShmb3JtYXQsIGxvZ2ljYWxTaXplKTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChhbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKICAgICAgICAgaWYgKGF1dG8mIHNvdXJjZVBp
eGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJJZkV4aXN0cyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKSkKLSAgICAgICAgICAgIGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoc291
cmNlUGl4ZWxCdWZmZXItPmRhdGEoKSwgcGl4ZWxCdWZmZXItPmRhdGEoKSwgc2NhbGVkU2l6ZSk7
CisgICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKHNvdXJjZVBpeGVsQnVmZmVy
LT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCksIGxvZ2ljYWxTaXplKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoYXV0byYgc291cmNlUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlcklmRXhp
c3RzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkpCi0gICAgICAgICAg
ICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYShzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBwaXhl
bEJ1ZmZlci0+ZGF0YSgpLCBzY2FsZWRTaXplKTsKKyAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBs
eWluZ0FscGhhKHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCksIHBpeGVsQnVmZmVyLT5kYXRhKCks
IGxvZ2ljYWxTaXplKTsKICAgICB9CiAKICAgICByZXR1cm4gJnBpeGVsQnVmZmVyLnZhbHVlKCk7
CkBAIC0xODksMTEgKzE5MCwxMCBAQCBQaXhlbEJ1ZmZlciogRmlsdGVySW1hZ2U6OnBpeGVsQnVm
ZmVyKEFscGhhUHJlbXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQpCiAKIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gRmlsdGVySW1hZ2U6OmdldFBpeGVsQnVmZmVyKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYWxwaGFGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIHN0ZDo6b3B0aW9uYWw8RGVz
dGluYXRpb25Db2xvclNwYWNlPiBjb2xvclNwYWNlKQogewotICAgIEludFNpemUgc2NhbGVkU2l6
ZShyZWN0LnNpemUoKSk7Ci0gICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OworICAgIEludFNpemUgc2l6ZShyZWN0LnNpemUoKSk7CisgICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2l6ZSkpOwogCi0gICAgYXV0byBjaGVja2VkQXJlYSA9IHNj
YWxlZFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7CisgICAgYXV0byBjaGVja2VkQXJl
YSA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7CiAgICAgaWYgKGNoZWNrZWRBcmVh
Lmhhc092ZXJmbG93ZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0yMjEs
NDUgKzIyMSw0MSBAQCBib29sIEZpbHRlckltYWdlOjpyZXF1aXJlc1BpeGVsQnVmZmVyQ29sb3JT
cGFjZUNvbnZlcnNpb24oc3RkOjpvcHRpb25hbDxEZXN0aW5hdAogCiB2b2lkIEZpbHRlckltYWdl
Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0g
ICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwotICAgIHNjYWxlZFJlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOwotCi0gICAgSW50U2l6ZSBzY2FsZWRQYWludFNpemUobV9sb2dpY2FsU2l6
ZSk7Ci0gICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBJ
bnRTaXplIGxvZ2ljYWxTaXplKG1fYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKTsKIAogICAgIC8v
IEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3Qg
ZW50aXJlbHkgY292ZXJlZCBieSB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0LngoKSA8
IDAgfHwgc2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVp
Z2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhY
KCkgPiBsb2dpY2FsU2l6ZS53aWR0aCgpIHx8IHJlY3QubWF4WSgpID4gbG9naWNhbFNpemUuaGVp
Z2h0KCkpCiAgICAgICAgIG1lbXNldChkZXN0aW5hdGlvbi5kYXRhKCksIDAsIGRlc3RpbmF0aW9u
Lmxlbmd0aCgpKTsKIAogICAgIC8vIEVhcmx5IHJldHVybiBpZiB0aGUgcmVjdCBkb2VzIG5vdCBp
bnRlcnNlY3Qgd2l0aCB0aGUgc291cmNlLgotICAgIGlmIChzY2FsZWRSZWN0Lm1heFgoKSA8PSAw
IHx8IHNjYWxlZFJlY3QubWF4WSgpIDw9IDAgfHwgc2NhbGVkUmVjdC54KCkgPj0gc2NhbGVkUGFp
bnRTaXplLndpZHRoKCkgfHwgc2NhbGVkUmVjdC55KCkgPj0gc2NhbGVkUGFpbnRTaXplLmhlaWdo
dCgpKQorICAgIGlmIChyZWN0Lm1heFgoKSA8PSAwIHx8IHJlY3QubWF4WSgpIDw9IDAgfHwgcmVj
dC54KCkgPj0gbG9naWNhbFNpemUud2lkdGgoKSB8fCByZWN0LnkoKSA+PSBsb2dpY2FsU2l6ZS5o
ZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHhPcmlnaW4gPSBzY2FsZWRSZWN0
LngoKTsKKyAgICBpbnQgeE9yaWdpbiA9IHJlY3QueCgpOwogICAgIGludCB4RGVzdCA9IDA7CiAg
ICAgaWYgKHhPcmlnaW4gPCAwKSB7CiAgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CiAgICAgICAg
IHhPcmlnaW4gPSAwOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHNjYWxlZFJlY3QubWF4WCgpOwot
ICAgIGlmICh4RW5kID4gc2NhbGVkUGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHhFbmQgPSBz
Y2FsZWRQYWludFNpemUud2lkdGgoKTsKKyAgICBpbnQgeEVuZCA9IHJlY3QubWF4WCgpOworICAg
IGlmICh4RW5kID4gbG9naWNhbFNpemUud2lkdGgoKSkKKyAgICAgICAgeEVuZCA9IGxvZ2ljYWxT
aXplLndpZHRoKCk7CiAKLSAgICBpbnQgeU9yaWdpbiA9IHNjYWxlZFJlY3QueSgpOworICAgIGlu
dCB5T3JpZ2luID0gcmVjdC55KCk7CiAgICAgaW50IHlEZXN0ID0gMDsKICAgICBpZiAoeU9yaWdp
biA8IDApIHsKICAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKICAgICAgICAgeU9yaWdpbiA9IDA7
CiAgICAgfQotICAgIGludCB5RW5kID0gc2NhbGVkUmVjdC5tYXhZKCk7Ci0gICAgaWYgKHlFbmQg
PiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHlFbmQgPSBzY2FsZWRQYWludFNp
emUuaGVpZ2h0KCk7CisgICAgaW50IHlFbmQgPSByZWN0Lm1heFkoKTsKKyAgICBpZiAoeUVuZCA+
IGxvZ2ljYWxTaXplLmhlaWdodCgpKQorICAgICAgICB5RW5kID0gbG9naWNhbFNpemUuaGVpZ2h0
KCk7CiAKICAgICBpbnQgc2l6ZSA9ICh4RW5kIC0geE9yaWdpbikgKiA0OwotICAgIGludCBkZXN0
aW5hdGlvblNjYW5saW5lID0gc2NhbGVkUmVjdC53aWR0aCgpICogNDsKLSAgICBpbnQgc291cmNl
U2NhbmxpbmUgPSBzY2FsZWRQYWludFNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdWludDhfdCogZGVz
dGluYXRpb25QaXhlbCA9IGRlc3RpbmF0aW9uLmRhdGEoKSArICgoeURlc3QgKiBzY2FsZWRSZWN0
LndpZHRoKCkpICsgeERlc3QpICogNDsKLSAgICBjb25zdCB1aW50OF90KiBzb3VyY2VQaXhlbCA9
IHNvdXJjZS5kYXRhKCkgKyAoKHlPcmlnaW4gKiBzY2FsZWRQYWludFNpemUud2lkdGgoKSkgKyB4
T3JpZ2luKSAqIDQ7CisgICAgaW50IGRlc3RpbmF0aW9uU2NhbmxpbmUgPSByZWN0LndpZHRoKCkg
KiA0OworICAgIGludCBzb3VyY2VTY2FubGluZSA9IGxvZ2ljYWxTaXplLndpZHRoKCkgKiA0Owor
ICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uUGl4ZWwgPSBkZXN0aW5hdGlvbi5kYXRhKCkgKyAoKHlE
ZXN0ICogcmVjdC53aWR0aCgpKSArIHhEZXN0KSAqIDQ7CisgICAgY29uc3QgdWludDhfdCogc291
cmNlUGl4ZWwgPSBzb3VyY2UuZGF0YSgpICsgKCh5T3JpZ2luICogbG9naWNhbFNpemUud2lkdGgo
KSkgKyB4T3JpZ2luKSAqIDQ7CiAKICAgICB3aGlsZSAoeU9yaWdpbiA8IHlFbmQpIHsKICAgICAg
ICAgbWVtY3B5KGRlc3RpbmF0aW9uUGl4ZWwsIHNvdXJjZVBpeGVsLCBzaXplKTsKQEAgLTI3Myw3
ICsyNjksNyBAQCBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0Q29u
dmVydGVkUGl4ZWxCdWZmZXIoSW1hZ2VCdWZmZXImIGltYQogewogICAgIEZsb2F0U2l6ZSBjbGFt
cGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CiAgICAgLy8g
Q3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0
aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRvIGNvbnZl
cnRlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgbV9yZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFBp
eGVsRm9ybWF0OjpCR1JBOCk7CisgICAgYXV0byBjb252ZXJ0ZWRJbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IDEsIGNvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFjb252ZXJ0ZWRJ
bWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAvLyBDb2xvciBz
cGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJuYWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUg
aW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKQEAgLTI4NSwxMSArMjgxLDEwIEBAIHN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+IEZpbHRlckltYWdlOjpnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hCiBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJJbWFnZTo6Z2V0
Q29udmVydGVkUGl4ZWxCdWZmZXIoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGFscGhhRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSkgY29uc3QKIHsKICAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgcGl4ZWxCdWZmZXIuc2l6
ZSgpKTsKLSAgICByZWN0LnNjYWxlKDEgLyBtX3Jlc29sdXRpb25TY2FsZSk7CiAgICAgRmxvYXRT
aXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKTsK
IAogICAgIC8vIENyZWF0ZSBhbiBJbWFnZUJ1ZmZlciB0byBzdG9yZSBpbmNvbWluZyBQaXhlbEJ1
ZmZlcgotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRT
aXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9j
b2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLCAxLCBtX2NvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIApAQCAtMzA1LDcgKzMwMCw3
IEBAIHZvaWQgRmlsdGVySW1hZ2U6OmNvcHlQaXhlbEJ1ZmZlcihVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIEFscGhhUHJlbXVsdGlwCiAgICAgICAgIGlmIChyZXF1aXJlc1BpeGVsQnVm
ZmVyQ29sb3JTcGFjZUNvbnZlcnNpb24oY29sb3JTcGFjZSkpIHsKICAgICAgICAgICAgIC8vIFdl
IHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICAgICAg
aWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBpbWFnZUJ1ZmZlcklmRXhpc3RzKCkpIHsKLSAgICAgICAg
ICAgICAgICBJbnRSZWN0IHJlY3QgeyBJbnRQb2ludDo6emVybygpLCBJbnRTaXplKG1fbG9naWNh
bFNpemUpIH07CisgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgeyB9LCBtX2Fic29sdXRl
SW1hZ2VSZWN0LnNpemUoKSB9OwogICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIoKmltYWdlQnVmZmVyLCBhbHBoYUZv
cm1hdCwgcmVjdCwgKmNvbG9yU3BhY2UpKQogICAgICAgICAgICAgICAgICAgICBjb3B5SW1hZ2VC
eXRlcyhjb252ZXJ0ZWRQaXhlbEJ1ZmZlci0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCmluZGV4IDRjYjVhMWYwZjA2My4u
MWJhOGU3NmYwNDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCkBAIC0zOCw5ICszOCwxNSBAQCBjbGFzcyBQaXhl
bEJ1ZmZlcjsKIAogY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJJ
bWFnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworICAgIHN0YXRpYyBSZWZQ
dHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
biwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1h
Z2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJik7CiAKLSAgICBGbG9hdFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAgRmxvYXRSZWN0IGlt
YWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VSZWN0OyB9CisgICAgSW50UmVjdCBhYnNv
bHV0ZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVJbWFnZVJlY3Q7IH0KKyAg
ICBJbnRSZWN0IHJlbGF0aXZlQWJzb2x1dGVJbWFnZVJlY3QoY29uc3QgRmlsdGVySW1hZ2UmIG9y
aWdpbikgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUltYWdlUmVjdCAtIG9yaWdpbi5hYnNvbHV0
ZUltYWdlUmVjdCgpLmxvY2F0aW9uKCk7IH0KKworICAgIGJvb2wgaXNBbHBoYUltYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9pc0FscGhhSW1hZ2U7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KICAgICBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3Bh
Y2U7IH0KIAogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVySWZFeGlzdHMoKSB7
IHJldHVybiBtX2ltYWdlQnVmZmVyOyB9CkBAIC01NiwxNiArNjIsMTkgQEAgcHVibGljOgogICAg
IHZvaWQgdHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAKIHBy
aXZhdGU6Ci0gICAgRmlsdGVySW1hZ2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKTsKKyAgICBGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRl
SW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJik7CiAKICAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNw
YWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0
OwogICAgIHZvaWQgY29weUltYWdlQnl0ZXMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
CiAgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gZ2V0Q29udmVydGVkUGl4ZWxCdWZmZXIo
SW1hZ2VCdWZmZXImLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVz
dGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKICAgICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVy
PiBnZXRDb252ZXJ0ZWRQaXhlbEJ1ZmZlcihQaXhlbEJ1ZmZlciYsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Q7CiAKLSAgICBGbG9hdFNpemUgbV9s
b2dpY2FsU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247CisgICAgRmxv
YXRSZWN0IG1faW1hZ2VSZWN0OworICAgIEludFJlY3QgbV9hYnNvbHV0ZUltYWdlUmVjdDsKKyAg
ICAKKyAgICBib29sIG1faXNBbHBoYUltYWdlIHsgZmFsc2UgfTsKICAgICBSZW5kZXJpbmdNb2Rl
IG1fcmVuZGVyaW5nTW9kZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKICAgICBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogCiAgICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBtX2ltYWdlQnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCmluZGV4IDk0ZDE5NTAxMzlkNi4uZjE5MTcxZmY4
NGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0xpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9MaWdodFNvdXJjZS5oCkBAIC0zOCw2ICszOCw3IEBAIGVudW0gTGlnaHRUeXBlIHsKICAg
ICBMU19TUE9UCiB9OwogCitjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7CiAKIGNs
YXNzIExpZ2h0U291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8TGlnaHRTb3VyY2U+IHsKQEAgLTY1
LDcgKzY2LDcgQEAgcHVibGljOgogICAgIExpZ2h0VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGlu
aXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpID0gMDsKICAgICAvLyB6IGlzIGEgZmxvYXQgbnVt
YmVyLCBzaW5jZSBpdCBpcyB0aGUgYWxwaGEgdmFsdWUgc2NhbGVkIGJ5IGEgdXNlcgogICAgIC8v
IHNwZWNpZmllZCAic3VyZmFjZVNjYWxlIiBjb25zdGFudCwgd2hpY2ggdHlwZSBpcyA8bnVtYmVy
PiBpbiB0aGUgU1ZHIHN0YW5kYXJkLgogICAgIC8vIHggYW5kIHkgYXJlIGluIHRoZSBjb29yZGlu
YXRlcyBvZiB0aGUgRmlsdGVyRWZmZWN0J3MgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5j
cHAKaW5kZXggMWFiNWUxOWUxMWE0Li5iMTc2NDIwNDQyOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmNwcApAQCAtMzEsMTYgKzMxLDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiUG9pbnRMaWdodFNvdXJjZS5oIgogCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQg
UG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImIGZpbHRlciwg
Y29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCiB7Ci0gICAg
bV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNl
VG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CisgICAgYXV0byYgaW1hZ2UgPSAq
ZmlsdGVyRWZmZWN0LmZpbHRlckltYWdlKCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbWFnZS5p
bWFnZVJlY3QoKTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGltYWdlLnByaW1pdGl2
ZVN1YnJlZ2lvbigpOworCisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXIubWFwUG9p
bnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpLCBpbWFnZVJl
Y3QsIHByaW1pdGl2ZVN1YnJlZ2lvbikpOwogICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50
IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHou
Ci0gICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJT
cGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0
aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisgICAgRmxvYXRQb2ludCBtYXBw
ZWRaID0gZmlsdGVyLm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQ
b3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlv
bi55KCkgfSwgaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIG1fYnVmZmVyUG9z
aXRpb24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuaAppbmRleCA2N2EzYTBiZDM5YTguLmFkZWJmOTZhYTMxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0
U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Q
b2ludExpZ2h0U291cmNlLmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0
WShmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRaKGZsb2F0KSBvdmVycmlkZTsKIAotICAg
IHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRM
aWdodGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYs
IGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwCmluZGV4IGE1OTZkNDhlNGQ1OS4uNmViNjE4YzczYWM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUFscGhhLmNwcApAQCAtMzksMjYgKzM5LDMwIEBAIFNvdXJjZUFscGhhOjpTb3VyY2VBbHBo
YShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKICAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQo
JnNvdXJjZUVmZmVjdCk7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IFNvdXJjZUFscGhhOjpj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QK
IHsKLSAgICBpbnB1dEVmZmVjdCgwKS0+ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVy
KTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3QoMCktPmZpbHRlckltYWdl
KCk7CisgICAgcmV0dXJuIGlucHV0LmltYWdlUmVjdCgpOwogfQogCi12b2lkIFNvdXJjZUFscGhh
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgU291cmNlQWxwaGE6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFn
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9
IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAgYXV0byYgaW5wdXQgPSAqaW5wdXRFZmZlY3Qo
MCktPmZpbHRlckltYWdlKCk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7CiAK
LSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47CisgICAg
YXV0byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWlucHV0SW1h
Z2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxv
YXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgZmlsdGVyQ29udGV4
dC5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjayk7Ci0gICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBJbnRQb2ludCgpLCBDb21wb3NpdGVPcGVyYXRv
cjo6RGVzdGluYXRpb25Jbik7CisgICAgYXV0byBvdXRwdXRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1
ZmZlcigpOworICAgIGlmICghb3V0cHV0SW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXQuYWJzb2x1dGVJbWFn
ZVJlY3QoKS5zaXplKCkpOworCisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChp
bWFnZVJlY3QsIENvbG9yOjpibGFjayk7CisgICAgb3V0cHV0SW1hZ2UtPmNvbnRleHQoKS5kcmF3
SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIEludFBvaW50KCksIENvbXBvc2l0ZU9wZXJhdG9yOjpE
ZXN0aW5hdGlvbkluKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogVGV4dFN0cmVhbSYgU291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA1MmEzOWE0OTI0MTYuLjk0ZmE1NmY1MmI4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuaApAQCAtMzIsOCArMzIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwogCi0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IGQ2NDVhYTky
NTAyZi4uNDUyZTY0NzRmZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTM2LDIwICszNiwy
NSBAQCBTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKCkKIHsKIH0KIAotdm9pZCBTb3VyY2VH
cmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikK
K0Zsb2F0UmVjdCBTb3VyY2VHcmFwaGljOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50
UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJldHVybiBmaWx0ZXIuc291cmNl
SW1hZ2VSZWN0KCk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFz
b3VyY2VJbWFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIG91dHB1dCA9IGZpbHRlcklt
YWdlKCk7CiAKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291
cmNlSW1hZ2UsIEludFBvaW50KCkpOworICAgIGF1dG8qIHNvdXJjZUltYWdlID0gZmlsdGVyLnNv
dXJjZUltYWdlKCk7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byogb3V0cHV0SW1hZ2UgPSBvdXRwdXQtPmltYWdlQnVmZmVyKCk7CisgICAg
aWYgKCFvdXRwdXRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG91dHB1
dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgSW50UG9pbnQo
KSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFRleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggNmJjNDdhMWYwMWI1Li5iMWMxM2IxYzk4ZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5oCkBAIC0zMyw4ICszMyw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
U291cmNlR3JhcGhpYygpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U3BvdExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAppbmRleCA3MTYwN2FiMDBmZjkuLmFkM2UxODkwNjBl
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNwb3RMaWdodFNvdXJjZS5oIgogCisjaW5jbHVkZSAiRmls
dGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogCkBAIC00MSwxMSArNDIsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8g
YWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24gdGVzdHMKIHN0YXRp
YyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKIAotdm9pZCBTcG90TGln
aHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZl
Y3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQordm9pZCBTcG90TGlnaHRTb3VyY2U6Omlu
aXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdCYg
ZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsKLSAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZl
cihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKKyAgICBhdXRvJiBpbWFnZSA9ICpmaWx0ZXJF
ZmZlY3QuZmlsdGVySW1hZ2UoKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGltYWdlLmltYWdlUmVj
dCgpOworICAgIGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gaW1hZ2UucHJpbWl0aXZlU3VicmVn
aW9uKCk7CisgICAgCisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXIubWFwUG9pbnRG
cm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpLCBpbWFnZVJlY3Qs
IHByaW1pdGl2ZVN1YnJlZ2lvbikpOwogICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9m
ZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCi0g
ICAgRmxvYXRQb2ludCBtYXBwZWRaID0gZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFj
ZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9u
LnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisgICAgRmxvYXRQb2ludCBtYXBwZWRa
ID0gZmlsdGVyLm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKHsgbV91c2VyU3BhY2VQb3Np
dGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55
KCkgfSwgaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIG1fYnVmZmVyUG9zaXRp
b24uc2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKICAgICAKICAgICBw
YWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yID0gbV91c2VyU3BhY2VQb2ludHNBdCAtIG1fdXNl
clNwYWNlUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAppbmRleCAzNTE1MTYzNTA3N2UuLmZl
M2YyZjNmYzliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCkBAIC01MCw3ICs1MCw3IEBAIHB1Ymxp
YzoKICAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQpIG92ZXJyaWRlOwogICAgIGJv
b2wgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRl
OworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0
YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGlu
dCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggZGZiZmY5YmY5ZjI1Li41MDI5NzBi
YjBiZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC00MywyOSAr
NDMsMzEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0
ZXI6OmNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yKQorUmVmUHRyPENTU0ZpbHRlcj4g
Q1NTRmlsdGVyOjpjcmVhdGUoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
c2NhbGVGYWN0b3IsIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKIHsKICAgICBib29sIGhh
c0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKCk7CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0
eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4oKTsKIAotICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBDU1NGaWx0
ZXIoaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmlj
dGVkQnlTZWN1cml0eU9yaWdpbiwgc2NhbGVGYWN0b3IpKTsKKyAgICBhdXRvIGZpbHRlciA9IGFk
b3B0UmVmKCpuZXcgQ1NTRmlsdGVyKGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgaGFzRmlsdGVy
VGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIHNjYWxlRmFjdG9yLCBjbGlw
T3BlcmF0aW9uKSk7CisKKyAgICBpZiAoIWZpbHRlci0+YnVpbGRGaWx0ZXJGdW5jdGlvbnMocmVu
ZGVyZXIsIG9wZXJhdGlvbnMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGZpbHRl
ci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKICAgICByZXR1cm4gZmlsdGVyOwog
fQogCi1DU1NGaWx0ZXI6OkNTU0ZpbHRlcihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywg
Ym9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxv
YXQgc2NhbGVGYWN0b3IpCi0gICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpDU1NGaWx0ZXIsIEZs
b2F0U2l6ZSB7IHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvciB9KQorQ1NTRmlsdGVyOjpDU1NGaWx0
ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3Vs
ZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yLCBDbGlwT3Bl
cmF0aW9uIGNsaXBPcGVyYXRpb24pCisgICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpDU1NGaWx0
ZXIsIEZsb2F0U2l6ZSB7IHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvciB9LCBjbGlwT3BlcmF0aW9u
KQogICAgICwgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzKQogICAgICwgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9y
aWdpbihoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbikKLSAg
ICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSkKIHsKIH0KIAotc3Rh
dGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoY29uc3QgQmx1ckZpbHRl
ck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiwgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCitzdGF0
aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVmZmVjdChjb25zdCBCbHVyRmlsdGVy
T3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uLCBGaWx0ZXI6OkNsaXBPcGVyYXRpb24gY2xpcE9wZXJh
dGlvbikKIHsKICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJs
dXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwotICAgIHJldHVybiBGRUdhdXNzaWFuQmx1
cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJD
b25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElD
QVRFKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0
ZERldmlhdGlvbiwgY2xpcE9wZXJhdGlvbiA9PSBGaWx0ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRl
ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7CiB9CiAKIHN0YXRpYyBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQpA
QCAtMjIxLDIzICsyMjMsMTcgQEAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0Zp
bHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgUmVmZXJlbmNlRmlsdGUKICAgICB9CiAKICAg
ICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgcmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRl
KCpmaWx0ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZmlsdGVyLnNv
dXJjZUltYWdlUmVjdCgpLCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCksIHByZXZpb3VzRWZmZWN0KTsK
KyAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZp
bHRlci5maWx0ZXJTY2FsZSgpLCBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCksIGZpbHRlci5maWx0
ZXJSZWdpb24oKSwgZmlsdGVyLmNsaXBPcGVyYXRpb24oKSwgcHJldmlvdXNFZmZlY3QpOwogfQog
Ci1zdGF0aWMgdm9pZCBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKEZpbHRlckVmZmVjdCYgZWZm
ZWN0LCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKLXsKLSAgICAvLyBVbmxpa2UgU1ZHIEZpbHRl
cnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0g
ICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmlt
aXRpdmUgc3VicmVnaW9ucy4KLSAgICBlZmZlY3Quc2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9
PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwotICAgIGVmZmVjdC5zZXRPcGVyYXRp
bmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLX0KLQotYm9vbCBD
U1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK2Jvb2wgQ1NTRmls
dGVyOjpidWlsZEZpbHRlckZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKIHsKICAgICBtX2Z1bmN0aW9ucy5jbGVhcigp
OwogICAgIG1fb3V0c2V0cyA9IHsgfTsKIAotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHByZXZp
b3VzRWZmZWN0ID0gbV9zb3VyY2VHcmFwaGljLnB0cigpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IHByZXZpb3VzRWZmZWN0ID0gU291cmNlR3JhcGhpYzo6Y3JlYXRlKCk7CisgICAgbV9mdW5j
dGlvbnMuYXBwZW5kKHsgKnByZXZpb3VzRWZmZWN0IH0pOworCiAgICAgUmVmUHRyPFNWR0ZpbHRl
cj4gZmlsdGVyOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKSkgewpAQCAtMjQ5LDcgKzI0NSw3IEBAIGJvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5k
ZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9uCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJMVVI6Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0KGRv
d25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjb25zdW1lcik7CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVy
YXRpb24+KCpvcGVyYXRpb24pLCBjbGlwT3BlcmF0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6
CkBAIC0yOTksMTQgKzI5NSwxNCBAQCBib29sIENTU0ZpbHRlcjo6YnVpbGQoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbgogCiAgICAgICAg
IGlmIChmaWx0ZXIpIHsKICAgICAgICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVmZmVjdCgp
OwotICAgICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcygqZWZmZWN0LCBjb25zdW1l
cik7CisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCkpOwogICAgICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5kKGZp
bHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RG
TW92ZShlZmZlY3QpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmIChlZmZlY3QpIHsKLSAgICAgICAgICAgIHNldHVwTGFzdEVmZmVjdFByb3Bl
cnRpZXMoKmVmZmVjdCwgY29uc3VtZXIpOworICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRp
bmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgICAg
IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07CiAg
ICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogICAgICAgICAgICAg
cHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CkBAIC0zMjEsMTQgKzMxNyw2IEBAIGJv
b2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgb3BlcmF0aW9uCiAKICAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24gYW5kIG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZlY3Qg
Y2hhaW4uCiAgICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0KLSAgICAv
LyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gYW5kIG1heEVmZmVj
dFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZlY3QgY2hhaW4uCi0gICAgZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCk7Ci0KLSNpZiBVU0UoQ09SRV9JTUFHRSkKLSAgICBpZiAoIW1fZmls
dGVyUmVuZGVyZXIpCi0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5k
ZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRG
aWx0ZXJSZW5kZXJFbmFibGVkKCksICpsYXN0RWZmZWN0KCkpOwotI2VuZGlmCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTM1OCw3ICszNDYsOCBAQCB2b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleAog
ICAgIGlmIChtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gbG9naWNhbFNpemUgPSBzb3VyY2VJbWFnZVJlY3QoKS5zaXplKCk7CisgICAgYXV0byBs
b2dpY2FsU2l6ZSA9IHNvdXJjZUltYWdlUmVjdCgpLnNpemUoKSAqIGZpbHRlclNjYWxlKCk7CisK
ICAgICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAh
PSBsb2dpY2FsU2l6ZSkgewogI2lmIFVTRShESVJFQ1QyRCkKICAgICAgICAgc2V0U291cmNlSW1h
Z2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFy
Z2V0Q29udGV4dCwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCkpOwpAQCAtMzcwLDYgKzM1OSw3IEBAIHZvaWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4CiAg
ICAgICAgIGlmIChhdXRvIGNvbnRleHQgPSBpbnB1dENvbnRleHQoKSkKICAgICAgICAgICAgIGNv
bnRleHQtPnNjYWxlKGZpbHRlclNjYWxlKCkpOwogICAgIH0KKwogICAgIG1fZ3JhcGhpY3NCdWZm
ZXJBdHRhY2hlZCA9IHRydWU7CiB9CiAKQEAgLTM4NywzOSArMzc3LDQxIEBAIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6bGFzdEVmZmVjdCgpCiAKIHZvaWQgQ1NTRmlsdGVyOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQogewotICAgIGF1dG8gZWZmZWN0ID0gbGFz
dEVmZmVjdCgpOwotICAgIGVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KCp0aGlzKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gZWZmZWN0LT5tYXhFZmZlY3RSZWN0
KCk7CisgICAgYXV0byBsYXN0RWZmZWN0ID0gdGhpcy0+bGFzdEVmZmVjdCgpOworICAgIEZsb2F0
UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5jYWxjdWxhdGVNYXhQcmltaXRpdmVTdWJyZWdp
b24oKnRoaXMpOworCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28g
YmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2Nh
bGUgZmFjdG9ycy4KICAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGUgeyAxLCAxIH07Ci0gICAgaWYg
KEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBmaWx0ZXJT
Y2FsZSkpIHsKKyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lv
bi5zaXplKCksIGZpbHRlclNjYWxlKSkKICAgICAgICAgc2V0RmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpOwotICAgICAgICBlZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigq
dGhpcyk7Ci0gICAgfQogfQogCiB2b2lkIENTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1
bHRzKCkKIHsKLSAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVzdWx0KCk7CiAgICAgZm9yIChh
dXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQotICAgICAgICBmdW5jdGlvbi0+Y2xlYXJSZXN1
bHQoKTsKKyAgICAgICAgZnVuY3Rpb24tPmNsZWFyRmlsdGVySW1hZ2UoKTsKIH0KIAotdm9pZCBD
U1NGaWx0ZXI6OmFwcGx5RmlsdGVyKCkKK2Jvb2wgQ1NTRmlsdGVyOjphcHBseUZpbHRlcigpCiB7
CiAgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7Ci0gICAgaWYgKG1fZmlsdGVyUmVuZGVy
ZXIpIHsKKworICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKQogICAgICAgICBtX2ZpbHRlclJlbmRl
cmVyLT5hcHBseUVmZmVjdHMoKnRoaXMsICplZmZlY3QpOwotICAgICAgICBpZiAobV9maWx0ZXJS
ZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGVmZmVjdC0+dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIgfHwgIW1fZmlsdGVyUmVuZGVy
ZXItPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0
aW9ucykgeworICAgICAgICAgICAgaWYgKCFmdW5jdGlvbi0+YXBwbHkoKnRoaXMpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoYXV0
byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKLSAgICAgICAgZnVuY3Rpb24tPmFwcGx5KCp0aGlz
KTsKKyAgICBpZiAoYXV0byBpbWFnZSA9IGVmZmVjdC0+ZmlsdGVySW1hZ2UoKSkgeworICAgICAg
ICBpbWFnZS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgZWZmZWN0LT50cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1h
Z2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGRpcnR5UmVjdCkKQEAgLTQzNywyNiArNDI5LDI5IEBAIEltYWdlQnVmZmVy
KiBDU1NGaWx0ZXI6Om91dHB1dCgpCiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0
ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVy
LT5vdXRwdXQoKTsKICAgICAKLSAgICByZXR1cm4gbGFzdEVmZmVjdCgpLT5pbWFnZUJ1ZmZlclJl
c3VsdCgpOworICAgIGlmIChhdXRvIGltYWdlID0gbGFzdEVmZmVjdCgpLT5maWx0ZXJJbWFnZSgp
KQorICAgICAgICByZXR1cm4gaW1hZ2UtPmltYWdlQnVmZmVyKCk7CisgICAgCisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCiB7Ci0gICAgYXV0byBzY2FsZWRTb3VyY2VJbWFn
ZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3Q7Ci0gICAgc2NhbGVkU291cmNlSW1hZ2VSZWN0LnNjYWxl
KGZpbHRlclNjYWxlKCkpOwotCiAgICAgRmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24oc291cmNlSW1h
Z2VSZWN0KTsKLSAgICBGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChzY2FsZWRTb3VyY2VJbWFn
ZVJlY3QpOworICAgIEZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7
CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CisgICAgICAgIGlmIChm
dW5jdGlvbi0+aXNTVkdGaWx0ZXIoKSkgeworICAgICAgICAgICAgZG93bmNhc3Q8U1ZHRmlsdGVy
PihmdW5jdGlvbi5wdHIoKSktPnNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOworICAg
ICAgICAgICAgZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5jdGlvbi5wdHIoKSktPnNldFNvdXJjZUlt
YWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpOworICAgICAgICB9CisgICAgfQogICAgIG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwogfQogCiBJbnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0
UmVjdCgpCiB7Ci0gICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7Ci0gICAgCi0gICAgaWYg
KGVmZmVjdC0+aGFzUmVzdWx0KCkgfHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5k
ZXJlci0+aGFzUmVzdWx0KCkpKQotICAgICAgICByZXR1cm4gZWZmZWN0LT5yZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoSW50UmVjdCB7IGZpbHRlclJlZ2lvbigpIH0pOwotICAgIAor
ICAgIGlmIChhdXRvIGltYWdlID0gbGFzdEVmZmVjdCgpLT5maWx0ZXJJbWFnZSgpKQorICAgICAg
ICByZXR1cm4gaW1hZ2UtPmFic29sdXRlSW1hZ2VSZWN0KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4IGVlM2RkOWZkZjY1MS4uZDQ1
Y2Q3NWQ4YTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC00MCwyNyAr
NDAsMjIgQEAgY2xhc3MgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOwogY2xhc3MgUmVuZGVyRWxl
bWVudDsKIGNsYXNzIFNvdXJjZUdyYXBoaWM7CiAKLWVudW0gY2xhc3MgRmlsdGVyQ29uc3VtZXIg
eyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKLQogY2xhc3MgQ1NTRmlsdGVyIGZp
bmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxKTsKKyAgICBzdGF0aWMg
UmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRlKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLCBDbGlwT3BlcmF0
aW9uID0gQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0KTsKIAogICAgIHZvaWQgc2V0U291cmNlSW1h
Z2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQ
aXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVsczsgfQogICAg
IGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5
T3JpZ2luOyB9CiAKLSAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwotICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCk7Ci0KICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0
KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKICAgICBJbnRPdXRzZXRz
IG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKCk7Ci0gICAgdm9pZCBhcHBseUZpbHRlcigpIG92ZXJyaWRlOworICAgIGJvb2wgYXBw
bHlGaWx0ZXIoKSBvdmVycmlkZTsKIAogICAgIEltYWdlQnVmZmVyKiBvdXRwdXQoKTsKICAgICBJ
bnRSZWN0IG91dHB1dFJlY3QoKTsKQEAgLTcxLDEzICs2NiwxNSBAQCBwdWJsaWM6CiAgICAgTGF5
b3V0UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJl
Y3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CiAKIHByaXZh
dGU6Ci0gICAgQ1NTRmlsdGVyKGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhh
c0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luLCBmbG9hdCBzY2Fs
ZUZhY3Rvcik7CisgICAgQ1NTRmlsdGVyKGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBi
b29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luLCBmbG9h
dCBzY2FsZUZhY3RvciwgQ2xpcE9wZXJhdGlvbik7CisKKyAgICBib29sIGJ1aWxkRmlsdGVyRnVu
Y3Rpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CisgICAgdm9p
ZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKIAogICAgIGJvb2wgbV9ncmFw
aGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVz
dHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwogCi0gICAgUmVmPFNvdXJjZUdyYXBo
aWM+IG1fc291cmNlR3JhcGhpYzsKICAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9m
dW5jdGlvbnM7CiAKICAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAppbmRleCBmZDQ3ZDcy
OTdjZTcuLjFjNjMzNTQ2MjgxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTExOCwxMSArMTE4LDEzIEBAIHZvaWQgUmVuZGVyTGF5
ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKIAogdm9pZCBSZW5kZXJM
YXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBz
Y2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogeworICAgIC8vIElmIHRo
ZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2ls
bCBzdGlsbCBhdHRlbXB0IHRvCisgICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3Npbmcg
KGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCiAgICAgLy8gRklY
TUU6IHRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZp
bHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVh
dGUocmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0b3Ip
OworICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVuZGVyZXIsIHJlbmRlcmVyLnN0
eWxlKCkuZmlsdGVyKCksIHJlbmRlcmluZ01vZGUsIHNjYWxlRmFjdG9yLCBGaWx0ZXI6OkNsaXBP
cGVyYXRpb246OlVuaXRlKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRl
cnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0
LCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJl
cGFpbnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmls
dGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVt
ZW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewogICAgIGlm
ICghbV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTMzLDEzICsxMzUsNiBA
QCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3Qo
R3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGJvb2wgaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSA9IGZpbHRlci51cGRhdGVCYWNraW5nU3RvcmVS
ZWN0KGZpbHRlclNvdXJjZVJlY3QpOwotICAgIGlmIChoYXNVcGRhdGVkQmFja2luZ1N0b3JlIHx8
ICFtX2ZpbHRlci0+bGFzdEVmZmVjdCgpKSB7Ci0gICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFp
bHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRl
bXB0IHRvCi0gICAgICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNv
bXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgotICAgICAgICBpZiAoIW1fZmls
dGVyLT5idWlsZChyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29u
c3VtZXI6OkZpbHRlclByb3BlcnR5KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICAKICAgICBpZiAoIWZpbHRlci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKICAg
ICAgICAgbV9yZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsKICAgICBlbHNlIHsKQEAgLTE4MCwxMiAr
MTc1LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdChHcmFw
aGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICBmaWx0ZXIuYXBwbHlGaWx0ZXIo
KTsKIAogICAgIC8vIEdldCB0aGUgZmlsdGVyZWQgb3V0cHV0IGFuZCBkcmF3IGl0IGluIHBsYWNl
LgotICAgIExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIub3V0cHV0UmVjdCgpOwotICAgIGRl
c3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFpbnRPZmZzZXQueSgpKTsKKyAgICBh
dXRvIGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKIAogICAgIGlmIChhdXRvKiBvdXRw
dXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpIHsKICAgICAgICAgZGVzdGluYXRpb25Db250ZXh0
LnNjYWxlKHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmls
dGVyU2NhbGUoKS5oZWlnaHQoKSB9KTsKLSAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0
LCBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7Cisg
ICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwg
ZGVzdFJlY3QpOwogICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA1NmRkMWMyMDVmZjcuLjFl
YzlkNjZkNWYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTEwMyw3ICsxMDMsMTEgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgUmVuZGUKICAgICBpZiAoZmlsdGVyRGF0YS0+Ym91bmRhcmllcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSB0
cmFuc2Zvcm1hdGlvbiBtYXRyaXggZm9yIGZpbHRlci4gCisgICAgLy8gRGV0ZXJtaW5lIGFic29s
dXRlIGJvdW5kYXJpZXMgb2YgdGhlIGZpbHRlciBhbmQgdGhlIGRyYXdpbmcgcmVnaW9uLgorICAg
IGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24gPSByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgp
OworICAgIGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24uaW50ZXJzZWN0KGZpbHRlckRhdGEtPmJv
dW5kYXJpZXMpOworCisgICAgLy8gRGV0ZXJtaW5lIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1h
dHJpeCBmb3IgZmlsdGVyLgogICAgIEFmZmluZVRyYW5zZm9ybSBhYnNvbHV0ZVRyYW5zZm9ybSA9
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNhbGN1bGF0ZVRyYW5zZm9ybWF0aW9uVG9PdXRlcm1vc3RD
b29yZGluYXRlU3lzdGVtKHJlbmRlcmVyKTsKICAgICBpZiAoIWFic29sdXRlVHJhbnNmb3JtLmlz
SW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTEsMTggKzExNSwxMiBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUg
YWJzb2x1dGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5z
aGVhcmVkIHRpbGUgaW1hZ2VzIGZvciBmZVRpbGUuCiAgICAgRmxvYXRTaXplIGZpbHRlclNjYWxl
KGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSk7
CiAKLSAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgYm91bmRhcmllcyBvZiB0aGUgZmlsdGVyIGFu
ZCB0aGUgZHJhd2luZyByZWdpb24uCi0gICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiA9IHJl
bmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7Ci0gICAgZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lv
bi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7Ci0KICAgICAvLyBEZXRlcm1pbmUg
c2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9mIGludGVybWVkaWF0ZSBJbWFnZUJ1
ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhGaWx0ZXJTaXplLgotICAgIEZsb2F0
UmVjdCBhYnNvbHV0ZURyYXdpbmdSZWdpb24gPSBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uOwot
ICAgIGFic29sdXRlRHJhd2luZ1JlZ2lvbi5zY2FsZShmaWx0ZXJTY2FsZSk7Ci0gICAgSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlRHJhd2luZ1JlZ2lvbi5zaXplKCksIGZp
bHRlclNjYWxlKTsKKyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyRGF0
YS0+ZHJhd2luZ1JlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKTsKIAogICAgIC8vIENyZWF0ZSB0
aGUgU1ZHRmlsdGVyIG9iamVjdC4KICAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFrZVVuaXF1
ZTxTVkdGaWx0ZXJCdWlsZGVyPigpOwotICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRl
cjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIGZpbHRlclNj
YWxlLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdl
dEJvdW5kaW5nQm94KTsKKyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0
ZShmaWx0ZXJFbGVtZW50KCksICpmaWx0ZXJEYXRhLT5idWlsZGVyLCBmaWx0ZXJTY2FsZSwgZmls
dGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgdGFyZ2V0Qm91
bmRpbmdCb3gpOwogICAgIGlmICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCkBAIC0xMzEsMTUgKzEyOSwxMiBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2VcbiIgPDwgKmZpbHRlckRhdGEtPmJ1aWxkZXItPmxh
c3RFZmZlY3QoKSk7CiAKLSAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKmZpbHRlckRhdGEtPmZpbHRlcik7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9
IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKKyAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0g
bGFzdEVmZmVjdC0+Y2FsY3VsYXRlTWF4UHJpbWl0aXZlU3VicmVnaW9uKCpmaWx0ZXJEYXRhLT5m
aWx0ZXIpOwogCiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmln
IGltYWdlIHNpemUsCiAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRoIG5l
dyBzY2FsZSBmYWN0b3JzLgotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
c3ViUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpKSB7CisgICAgaWYgKEltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSkpCiAgICAgICAg
IGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpOwotICAgICAg
ICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKmZpbHRlckRh
dGEtPmZpbHRlcik7Ci0gICAgfQogCiAgICAgLy8gSWYgdGhlIGRyYXdpbmdSZWdpb24gaXMgZW1w
dHksIHdlIGhhdmUgc29tZXRoaW5nIGxpa2UgPGcgZmlsdGVyPSIuLiIvPi4KICAgICAvLyBFdmVu
IGlmIHRoZSB0YXJnZXQgb2JqZWN0Qm91bmRpbmdCb3goKSBpcyBlbXB0eSwgd2Ugc3RpbGwgaGF2
ZSB0byBkcmF3IHRoZSBsYXN0IGVmZmVjdCByZXN1bHQgaW1hZ2UgaW4gcG9zdEFwcGx5UmVzb3Vy
Y2UuCkBAIC0yMjYsMjUgKzIyMSwyOSBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
b3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogCiAgICAg
YXV0byBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS5maWx0ZXItPmxhc3RFZmZlY3QoKTsKIAotICAg
IGlmIChsYXN0RWZmZWN0ICYmICFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpICYmICFs
YXN0RWZmZWN0LT5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5pc0VtcHR5KCkpIHsKKyAgICBp
ZiAobGFzdEVmZmVjdCAmJiAhZmlsdGVyRGF0YS5ib3VuZGFyaWVzLmlzRW1wdHkoKSAmJiAhbGFz
dEVmZmVjdC0+Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKCpmaWx0ZXJEYXRhLmZpbHRlciku
aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgZmlsdGVyaW5nIG9mIHRo
ZSBvYmplY3QuIEl0IGp1c3QgbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoZQogICAgICAgICAvLyBp
bml0aWFsIGZpbHRlcmluZyBwcm9jZXNzLiBXZSBqdXN0IHRha2UgdGhlIHN0b3JlZCBmaWx0ZXIg
cmVzdWx0IG9uIGEKICAgICAgICAgLy8gc2Vjb25kIGRyYXdpbmcuCiAgICAgICAgIGlmIChmaWx0
ZXJEYXRhLnN0YXRlICE9IEZpbHRlckRhdGE6OkJ1aWx0KQogICAgICAgICAgICAgZmlsdGVyRGF0
YS5maWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGlj
QnVmZmVyKSk7CiAKKyAgICAgICAgYXV0byBpbWFnZSA9IGxhc3RFZmZlY3QtPmZpbHRlckltYWdl
KCk7CisgICAgCiAgICAgICAgIC8vIEFsd2F5cyB0cnVlIGlmIGZpbHRlckRhdGEgaXMganVzdCBi
dWlsdCAoZmlsdGVyRGF0YS0+c3RhdGUgPT0gRmlsdGVyRGF0YTo6QnVpbHQpLgotICAgICAgICBp
ZiAoIWxhc3RFZmZlY3QtPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgIGlmICghaW1hZ2UpIHsKICAg
ICAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpBcHBseWluZzsKLSAgICAg
ICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KCpmaWx0ZXJEYXRhLmZpbHRlcik7Ci0gICAgICAgICAg
ICBsYXN0RWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpKTsKKyAgICAgICAgICAgIGZpbHRlckRhdGEuZmlsdGVyLT5hcHBseUZpbHRl
cigpOworICAgICAgICAgICAgaW1hZ2UgPSBsYXN0RWZmZWN0LT5maWx0ZXJJbWFnZSgpOworICAg
ICAgICAgICAgaW1hZ2UtPnRyYW5zZm9ybVRvQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7CiAgICAgICAgIH0KKwogICAgICAgICBmaWx0ZXJEYXRhLnN0YXRlID0gRmls
dGVyRGF0YTo6QnVpbHQ7CiAKLSAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFz
dEVmZmVjdC0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICAgICAgSW1hZ2VCdWZmZXIqIHJlc3Vs
dEltYWdlID0gaW1hZ2UgPyBpbWFnZS0+aW1hZ2VCdWZmZXIoKSA6IG51bGxwdHI7CiAgICAgICAg
IGlmIChyZXN1bHRJbWFnZSkgewogICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXpl
KDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVy
RGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZUJ1ZmZlcigqcmVzdWx0SW1hZ2UsIGxhc3RFZmZlY3QtPmFic29sdXRlUGFp
bnRSZWN0KCkpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKCpyZXN1bHRJ
bWFnZSwgaW1hZ2UtPmFic29sdXRlSW1hZ2VSZWN0KCkpOwogICAgICAgICAgICAgY29udGV4dC0+
c2NhbGUoZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMjc3LDcgKzI3Niw4IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnByaW1p
dGl2ZUF0dHJpYnV0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvCiAgICAgICAgIC8v
IG9yIG5vbmUgb2YgdGhlbSB3aWxsIGJlIGNoYW5nZWQuCiAgICAgICAgIGlmICghcHJpbWl0dmUt
PnNldEZpbHRlckVmZmVjdEF0dHJpYnV0ZShlZmZlY3QsIGF0dHJpYnV0ZSkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGJ1aWxkZXItPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShlZmZlY3Qp
OworCisgICAgICAgIGJ1aWxkZXItPmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKCplZmZlY3Qp
OwogCiAgICAgICAgIC8vIFJlcGFpbnQgdGhlIGltYWdlIG9uIHRoZSBzY3JlZW4uCiAgICAgICAg
IG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oKm9iamVjdEZpbHRlckRhdGFQYWlyLmtleSwgUmVw
YWludEludmFsaWRhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgKaW5kZXggOGNlMGM3YWJjMTQzLi42NjhkZGEz
MDU4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmgKQEAgLTQ3LDEwICs0Nyw4IEBAIHB1YmxpYzoKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlcjsKICAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IHNvdXJjZUdyYXBoaWNCdWZmZXI7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzYXZlZENv
bnRleHQgeyBudWxscHRyIH07Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHNoZWFyRnJlZUFic29sdXRl
VHJhbnNmb3JtOwogICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzOwogICAgIEZsb2F0UmVjdCBkcmF3
aW5nUmVnaW9uOwotICAgIEZsb2F0U2l6ZSBzY2FsZTsKICAgICBGaWx0ZXJEYXRhU3RhdGUgc3Rh
dGUgeyBQYWludGluZ1NvdXJjZSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMjBiOGI1ZTdiMDdiLi4z
OTc0Y2E5YzNkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMjM1LDggKzIzNSwxMSBAQCBSZWZQdHI8SW1hZ2VC
dWZmZXI+IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYgdGFyZwogICAgIGlmIChwYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBGbG9hdFNpemUgY2xhbXBlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocGFpbnRSZWN0LnNpemUoKSwgc2NhbGUpOwor
ICAgIEZsb2F0U2l6ZSBzY2FsZSB7IDEsIDEgfTsKKyAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUg
PSBwYWludFJlY3Quc2l6ZSgpOworCisgICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhwYWludFJlY3Quc2l6ZSgpLCBzY2FsZSkpCisgICAgICAgIGNsYW1wZWRTaXplLnNjYWxl
KHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKIAogI2lmIFVTRShESVJFQ1QyRCkKICAg
ICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgcmVu
ZGVyaW5nTW9kZSwgY29udGV4dCwgMSwgY29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5jcHAKaW5kZXggOWFkMmM5ZTk1ZTA3Li4wMGU0ZTY5ODY2NDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMuY3BwCkBAIC05NCwyMiArOTQsNiBAQCB2b2lkIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hh
bmdlJiBjaAogICAgIGludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0ZXJFZmZlY3QqIGZp
bHRlckVmZmVjdCkgY29uc3QKLXsKLSAgICBBU1NFUlQoZmlsdGVyRWZmZWN0KTsKLSAgICBpZiAo
IWZpbHRlckVmZmVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6eEF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldEhhc1godHJ1ZSk7Ci0g
ICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQotICAgICAgICBmaWx0ZXJFZmZl
Y3QtPnNldEhhc1kodHJ1ZSk7Ci0gICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhB
dHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRIYXNXaWR0aCh0cnVlKTsKLSAgICBpZiAo
aGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKLSAgICAgICAgZmlsdGVyRWZmZWN0
LT5zZXRIYXNIZWlnaHQodHJ1ZSk7Ci19Ci0KIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihS
ZW5kZXJTdHlsZSYmIHN0eWxlLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKQogewogICAgIHJl
dHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZT4oKnRo
aXMsIFdURk1vdmUoc3R5bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAppbmRleCAzOGQ0OTg2MDkzMzgu
Ljg3OGQxMTJjMDI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaApAQCAtMzYsOCArMzYsNiBAQCBjbGFz
cyBTVkdGaWx0ZXJCdWlsZGVyOwogY2xhc3MgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzIDogcHVibGljIFNWR0VsZW1lbnQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKTsKIHB1YmxpYzoKLSAgICB2b2lk
IHNldFN0YW5kYXJkQXR0cmlidXRlcyhGaWx0ZXJFZmZlY3QqKSBjb25zdDsKLQogICAgIHZpcnR1
YWwgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciYpIGNvbnN0ID0g
MDsKICAgICAvLyBSZXR1cm5zIHRydWUsIGlmIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50IGZy
b20gdGhlIG9sZCBvbmUuCiAgICAgdmlydHVhbCBib29sIHNldEZpbHRlckVmZmVjdEF0dHJpYnV0
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDIxOTJlODE1
YjJjYi4uNjhkNGM3ODIyMTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtNjAsMjQgKzYwLDE2IEBAIFJlZjxGRUltYWdl
PiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKFRyZWVTY29wZSYgdHJlZVNjb3BlLCBj
b25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVJbWFnZSh0cmVlU2NvcGUs
IGhyZWYsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKIH0KIAotdm9pZCBGRUltYWdlOjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVjdCBGRUlt
YWdlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBwYWludFJl
Y3QgPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBwYWludFJlY3Quc2NhbGUoZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotICAgIEZsb2F0UmVjdCBzcmNSZWN0OworICAgIEZsb2F0UmVj
dCBpbWFnZVJlY3QgPSBwcmltaXRpdmVTdWJyZWdpb247CisKICAgICBpZiAobV9pbWFnZSkgewot
ICAgICAgICBzcmNSZWN0LnNldFNpemUobV9pbWFnZS0+c2l6ZSgpKTsKLSAgICAgICAgbV9wcmVz
ZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QocGFpbnRSZWN0LCBzcmNSZWN0KTsKLSAgICB9
IGVsc2UgaWYgKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJlbmRlcmVyKCkp
IHsKLSAgICAgICAgc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGlu
YXRlcygpOwotICAgICAgICBzcmNSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAg
ICAgICAgRmxvYXRSZWN0IHNyY1JlY3QgPSB7IHsgfSwgbV9pbWFnZS0+c2l6ZSgpIH07CisgICAg
ICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KGltYWdlUmVjdCwgc3JjUmVj
dCk7CiAgICAgfQogCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0
LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0
LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heFByaW1p
dGl2ZVN1YnJlZ2lvbihpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIFJlbmRl
ckVsZW1lbnQqIEZFSW1hZ2U6OnJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0CkBAIC05MCwyMCAr
ODIsMTkgQEAgUmVuZGVyRWxlbWVudCogRkVJbWFnZTo6cmVmZXJlbmNlZFJlbmRlcmVyKCkgY29u
c3QKICAgICByZXR1cm4gdGFyZ2V0LmVsZW1lbnQtPnJlbmRlcmVyKCk7CiB9CiAKLXZvaWQgRkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBG
RUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiB7CiAg
ICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSByZWZlcmVuY2VkUmVuZGVyZXIoKTsKICAgICBp
ZiAoIW1faW1hZ2UgJiYgIXJlbmRlcmVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpCi0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgYXV0byYgb3V0cHV0ID0gKmZpbHRlckltYWdlKCk7
CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IG91dHB1dC5pbWFnZUJ1ZmZlcigpOwogICAg
IGlmICghcmVzdWx0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7
CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gb3V0cHV0LnByaW1pdGl2ZVN1YnJlZ2lvbigpOwog
ICAgIGRlc3RSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIEZsb2F0UmVj
dCBzcmNSZWN0OwpAQCAtMTE1LDcgKzEwNiw3IEBAIHZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICBtX3ByZXNlcnZlQXNwZWN0
UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgfQogCi0gICAgSW50
UG9pbnQgcGFpbnRMb2NhdGlvbiA9IGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKKyAg
ICBhdXRvIHBhaW50TG9jYXRpb24gPSBvdXRwdXQuYWJzb2x1dGVJbWFnZVJlY3QoKS5sb2NhdGlv
bigpOwogICAgIGRlc3RSZWN0Lm1vdmUoLXBhaW50TG9jYXRpb24ueCgpLCAtcGFpbnRMb2NhdGlv
bi55KCkpOwogCiAgICAgYXV0byYgY29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CkBA
IC0xMzYsMTAgKzEyNywxMSBAQCB2b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGVudFRy
YW5zZm9ybWF0aW9uOwogICAgICAgICBTVkdSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJTdWJ0cmVl
VG9Db250ZXh0KGNvbnRleHQsICpyZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0aW9uKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBjb250ZXh0
LmRyYXdJbWFnZSgqbV9pbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiB0cnVl
OwogfQogCiBUZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXgg
YzQyMTNjYWY3MmNmLi4yZDRiMzM1MmU1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTQ0LDggKzQ0LDEyIEBAIHByaXZhdGU6
CiAKICAgICBSZW5kZXJFbGVtZW50KiByZWZlcmVuY2VkUmVuZGVyZXIoKSBjb25zdDsKIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIGZpbmFsOwotICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgZmluYWw7CisgICAg
Ly8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkKKyAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CisKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VS
ZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpIGZpbmFsOwogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IGZpbmFsOwogCiAg
ICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggODNmMzQxYWQzNDU3Li42MjRmZWMzNWE4
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmNwcApAQCAtMjIsMjYgKzIyLDI3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1SZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShT
VkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVy
LCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIEZpbHRlckVmZmVjdCYgcHJl
dmlvdXNFZmZlY3QpCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0
ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBjb25z
dCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJh
dGlvbiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCkKIHsKLSAgICByZXR1cm4gY3JlYXRl
KGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZp
bHRlclJlZ2lvbiwgZmlsdGVyUmVnaW9uLCAmcHJldmlvdXNFZmZlY3QpOworICAgIHJldHVybiBj
cmVhdGUoZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVj
dCwgZmlsdGVyUmVnaW9uLCBjbGlwT3BlcmF0aW9uLCBmaWx0ZXJSZWdpb24sICZwcmV2aW91c0Vm
ZmVjdCk7CiB9CiAKIFJlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRl
ckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRC
b3VuZGluZ0JveCkKIHsKLSAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIs
IGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRp
bmdCb3gsIG51bGxwdHIpOworICAgIHJldHVybiBjcmVhdGUoZmlsdGVyRWxlbWVudCwgYnVpbGRl
ciwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0
aW9uOjpJbnRlcnNlY3QsIHRhcmdldEJvdW5kaW5nQm94LCBudWxscHRyKTsKIH0KIAotUmVmUHRy
PFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxl
bWVudCwgU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJF
ZmZlY3QqIHByZXZpb3VzRWZmZWN0KQorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVh
dGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVpbGRlciYgYnVp
bGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9u
IGNsaXBPcGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZpbHRl
ckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCiB7CiAgICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0Jv
eE1vZGUgPSBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCi0gICAgYXV0byBmaWx0ZXIgPSBhZG9w
dFJlZigqbmV3IFNWR0ZpbHRlcihmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJS
ZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpKTsKKyAg
ICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGZpbHRlclNjYWxlLCBzb3Vy
Y2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgY2xpcE9wZXJhdGlvbiwgdGFyZ2V0Qm91bmRpbmdC
b3gsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSkpOwogCiAgICAgaWYgKCFwcmV2aW91c0VmZmVj
dCkKICAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKFNvdXJjZUdyYXBoaWM6OmNy
ZWF0ZSgpKTsKQEAgLTU1LDM4ICs1Niw0OCBAQCBSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6
OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdQogICAg
IGlmICghbGFzdEVmZmVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgaWYg
KGxhc3RFZmZlY3QtPnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSA+IG1heFRvdGFsT2ZFZmZl
Y3RJbnB1dHMpCisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIGV4cHJlc3Npb247CisgICAgaWYgKCFi
dWlsZGVyLmJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBmaWx0ZXItPnNldExhc3RFZmZlY3QoV1RGTW92ZShsYXN0RWZmZWN0KSk7Cisg
ICAgZmlsdGVyLT5zZXRFeHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpOwogICAgIHJldHVy
biBmaWx0ZXI7CiB9CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmls
dGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgYm9v
bCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihGaWx0ZXI6OlR5cGU6OlNWR0ZpbHRlciwg
ZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uKQorU1ZHRmlsdGVyOjpT
VkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0
aW9uIGNsaXBPcGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGJv
b2wgZWZmZWN0QkJveE1vZGUpCisgICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpTVkdGaWx0ZXIs
IGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgY2xpcE9wZXJhdGlv
bikKICAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpCiAgICAgLCBt
X2VmZmVjdEJCb3hNb2RlKGVmZmVjdEJCb3hNb2RlKQogewogfQogCi1GbG9hdFNpemUgU1ZHRmls
dGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSBzaXplKSBjb25zdAorRmxvYXRTaXpl
IFNWR0ZpbHRlcjo6c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KSBjb25zdAogeworICAgIEZsb2F0U2l6ZSByZXNvbHZlZFNpemUgPSBzaXplOwogICAgIGlmICht
X2VmZmVjdEJCb3hNb2RlKQotICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdC
b3guc2l6ZSgpOworICAgICAgICByZXNvbHZlZFNpemUgPSByZXNvbHZlZFNpemUgKiBtX3Rhcmdl
dEJvdW5kaW5nQm94LnNpemUoKTsKIAotICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVy
U2NhbGUoc2l6ZSk7CisgICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkU2l6ZUJ5RmlsdGVyU2NhbGUo
cmVzb2x2ZWRTaXplKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQorYm9vbCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewog
ICAgIHNldFNvdXJjZUltYWdlKHsgZmlsdGVyLnNvdXJjZUltYWdlKCkgfSk7Ci0gICAgYXBwbHlG
aWx0ZXIoKTsKKyAgICByZXR1cm4gYXBwbHlGaWx0ZXIoKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXI6
OmFwcGx5RmlsdGVyKCkKK2Jvb2wgU1ZHRmlsdGVyOjphcHBseUZpbHRlcigpCiB7Ci0gICAgbV9s
YXN0RWZmZWN0LT5hcHBseSgqdGhpcyk7CisgICAgaWYgKG1fZXhwcmVzc2lvbi5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9leHBy
ZXNzaW9uKSB7CisgICAgICAgIGlmICghZWZmZWN0LT5hcHBseSgqdGhpcykpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIEludE91dHNl
dHMgU1ZHRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKQEAgLTk0LDkgKzEwNSw5IEBAIEludE91dHNl
dHMgU1ZHRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKICAgICByZXR1cm4gbV9sYXN0RWZmZWN0LT5v
dXRzZXRzKCk7CiB9CiAKLXZvaWQgU1ZHRmlsdGVyOjpjbGVhclJlc3VsdCgpCit2b2lkIFNWR0Zp
bHRlcjo6Y2xlYXJGaWx0ZXJJbWFnZSgpCiB7Ci0gICAgbV9sYXN0RWZmZWN0LT5jbGVhclJlc3Vs
dHNSZWN1cnNpdmUoKTsKKyAgICBtX2xhc3RFZmZlY3QtPmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJz
aXZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggZmU4MjJkODFmOWNjLi5lNDZh
ZmU3YjU0NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oCkBAIC0yMSw2ICsyMSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC0z
MiwyOSArMzMsMzEgQEAgY2xhc3MgU1ZHRmlsdGVyRWxlbWVudDsKIAogY2xhc3MgU1ZHRmlsdGVy
IGZpbmFsIDogcHVibGljIEZpbHRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxTVkdG
aWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0
IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0Vm
ZmVjdCk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVt
ZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgQ2xpcE9wZXJhdGlvbiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCk7CiAgICAg
c3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmls
dGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0
ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZs
b2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3Vu
ZGluZ0JveCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCk7CisgICAgc3RhdGljIFJlZlB0
cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYs
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0Vm
ZmVjdCk7CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShGbG9hdFNpemUpIGNv
bnN0IGZpbmFsOwotICAgIHZvaWQgYXBwbHkoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBhcHBseUZpbHRlcigpIG92ZXJyaWRlOworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplQnlG
aWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGFwcGx5
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGJvb2wgYXBwbHlGaWx0ZXIoKSBvdmVycmlk
ZTsKIAogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFyZ2V0Qm91bmRpbmdCb3g7IH0KIAogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZl
Y3QoKSB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0KICAgICB2b2lkIHNldExhc3RFZmZlY3QoUmVm
UHRyPEZpbHRlckVmZmVjdD4mJiBsYXN0RWZmZWN0KSB7IG1fbGFzdEVmZmVjdCA9IFdURk1vdmUo
bGFzdEVmZmVjdCk7IH0KKyAgICB2b2lkIHNldEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9y
JiYgZXhwcmVzc2lvbikgeyBtX2V4cHJlc3Npb24gPSBXVEZNb3ZlKGV4cHJlc3Npb24pOyB9CiAK
IHByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJv
dW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94
TW9kZSk7CisgICAgU1ZHRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgQ2xpcE9wZXJhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgYm9v
bCBlZmZlY3RCQm94TW9kZSk7CiAKICAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIGNsZWFyUmVzdWx0KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckZp
bHRlckltYWdlKCkgb3ZlcnJpZGU7CiAKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0Jv
eDsKICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CiAKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBtX2xhc3RFZmZlY3Q7CisgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1fZXhwcmVzc2lvbjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5kZXggYTg2YzBhOWNj
OTljLi4xOTM2NmUxZTkxYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC01OCw5ICs1OCwyOCBAQCBz
dGF0aWMgQ29sb3JJbnRlcnBvbGF0aW9uIGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoU1ZH
RWxlbWVudCYgZWxlbWVudCkKIH0KICNlbmRpZgogCitzdGF0aWMgdW5zaWduZWQgY29sbGVjdEVm
ZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KiBlZmZlY3QsIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZm
ZWN0Kj4mIGFsbEVmZmVjdHMpCit7CisgICAgYWxsRWZmZWN0cy5hZGQoZWZmZWN0KTsKKyAgICB1
bnNpZ25lZCBzaXplID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsKKyAgICAgICAgY29sbGVjdEVmZmVjdHMoaW4sIGFs
bEVmZmVjdHMpOworICAgIH0KKyAgICByZXR1cm4gYWxsRWZmZWN0cy5zaXplKCk7Cit9CisKK3N0
YXRpYyB1bnNpZ25lZCB0b3RhbE51bWJlckZpbHRlckVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0
JiBsYXN0RWZmZWN0KQoreworICAgIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4gYWxsRWZm
ZWN0czsKKyAgICByZXR1cm4gY29sbGVjdEVmZmVjdHMoJmxhc3RFZmZlY3QsIGFsbEVmZmVjdHMp
OworfQorCiBSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRl
ckVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCkKIHsKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtYXhUb3RhbE51bWJlckZpbHRlckVmZmVjdHMgPSAxMDA7CisKICAgICBpZiAo
ZmlsdGVyRWxlbWVudC5jb3VudENoaWxkTm9kZXMoKSA+IG1heENvdW50Q2hpbGROb2RlcykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTczLDggKzkyLDIyIEBAIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVt
ZW50JiBmaWx0CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAg
ICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0g
ICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNv
bHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVmZmVj
dEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMsIG1fdGFyZ2V0Qm91bmRpbmdCb3gpKTsKKyAgICAg
ICAgYXV0byBlZmZlY3RCb3VuZGFyaWVzID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3Rh
bmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KCZlZmZlY3RFbGVtZW50
LCBtX3ByaW1pdGl2ZVVuaXRzLCBtX3RhcmdldEJvdW5kaW5nQm94KTsKKyAgICAgICAgCisgICAg
ICAgIE9wdGlvblNldDxGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M+IGZsYWdzOworICAgICAgICBp
ZiAoZWZmZWN0RWxlbWVudC5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnhBdHRyKSkKKyAgICAgICAg
ICAgIGZsYWdzLmFkZChGaWx0ZXJCb3VuZGFyeVNldDo6RmxhZ3M6Okhhc1gpOworCisgICAgICAg
IGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpKQorICAgICAg
ICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzWSk7CisKKyAgICAg
ICAgaWYgKGVmZmVjdEVsZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKQor
ICAgICAgICAgICAgZmxhZ3MuYWRkKEZpbHRlckJvdW5kYXJ5U2V0OjpGbGFnczo6SGFzV2lkdGgp
OworCisgICAgICAgIGlmIChlZmZlY3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVp
Z2h0QXR0cikpCisgICAgICAgICAgICBmbGFncy5hZGQoRmlsdGVyQm91bmRhcnlTZXQ6OkZsYWdz
OjpIYXNIZWlnaHQpOworICAgICAgICAKKyAgICAgICAgZWZmZWN0LT5zZXRCb3VuZGFyeVNldCh7
IGVmZmVjdEJvdW5kYXJpZXMsIGZsYWdzIH0pOwogCiAjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NP
TE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9y
RWxlbWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikK
QEAgLTg2LDYgKzExOSw5IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6
OmJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0CiAgICAgICAgIGFkZChl
ZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOwogICAgIH0KIAorICAgIGlmICghZWZmZWN0
IHx8IHRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cygqZWZmZWN0KSA+IG1heFRvdGFsTnVtYmVyRmls
dGVyRWZmZWN0cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICByZXR1cm4gZWZmZWN0
OwogfQogCkBAIC0xNDcsMTUgKzE4Myw0MyBAQCB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFy
RWZmZWN0cygpCiAgICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKIH0KIAotdm9pZCBTVkdGaWx0ZXJC
dWlsZGVyOjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCit2b2lk
IFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyRmlsdGVySW1hZ2VzUmVjdXJzaXZlKEZpbHRlckVmZmVj
dCYgZWZmZWN0KQogewotICAgIGlmICghZWZmZWN0LT5oYXNSZXN1bHQoKSkKKyAgICBpZiAoIWVm
ZmVjdC5maWx0ZXJJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBlZmZlY3QtPmNsZWFy
UmVzdWx0KCk7CisgICAgZWZmZWN0LmNsZWFyRmlsdGVySW1hZ2UoKTsKIAotICAgIGZvciAoYXV0
byYgcmVmZXJlbmNlIDogZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QpKQotICAgICAgICBjbGVhclJl
c3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsKKyAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IGVm
ZmVjdFJlZmVyZW5jZXMoJmVmZmVjdCkpCisgICAgICAgIGNsZWFyRmlsdGVySW1hZ2VzUmVjdXJz
aXZlKCpyZWZlcmVuY2UpOworfQorCitzdGF0aWMgYm9vbCBidWlsZEVmZmVjdEV4cHJlc3Npb24o
Y29uc3QgUmVmUHRyPEZpbHRlckVmZmVjdD4mIGVmZmVjdCwgRmlsdGVyRWZmZWN0VmVjdG9yJiBz
dGFjaywgRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKQoreworICAgIC8vIEEgY3ljbGUg
aXMgZGV0ZWN0ZWQuCisgICAgaWYgKHN0YWNrLmNvbnRhaW5zKGVmZmVjdCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGV4cHJlc3Npb24uaW5zZXJ0KDAsIGVmZmVjdCk7CisKKyAgICBz
dGFjay5hcHBlbmQoZWZmZWN0KTsKKworICAgIGZvciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZl
Y3QtPmlucHV0RWZmZWN0cygpKSB7CisgICAgICAgIGlmICghYnVpbGRFZmZlY3RFeHByZXNzaW9u
KGlucHV0RWZmZWN0LCBzdGFjaywgZXhwcmVzc2lvbikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChz
dGFjay5sYXN0KCkgPT0gZWZmZWN0KTsKKworICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24o
RmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKSBjb25zdAoreworICAgIEZpbHRlckVmZmVj
dFZlY3RvciBzdGFjazsKKyAgICByZXR1cm4gYnVpbGRFZmZlY3RFeHByZXNzaW9uKG1fbGFzdEVm
ZmVjdCwgc3RhY2ssIGV4cHJlc3Npb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmgKaW5kZXggYjdiODI0YjQ4NDMyLi41NmFkNjcwYzI5N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgK
QEAgLTYzLDEwICs2MywxMSBAQCBwdWJsaWM6CiAgICAgaW5saW5lIEZpbHRlckVmZmVjdCogZWZm
ZWN0QnlSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iamVjdCkgeyByZXR1cm4gbV9lZmZlY3RSZW5k
ZXJlci5nZXQob2JqZWN0KTsgfQogCiAgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKLSAgICB2b2lk
IGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqKTsKKyAgICB2b2lkIGNsZWFyRmls
dGVySW1hZ2VzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCYpOwogCiAgICAgdm9pZCBzZXR1cEJ1aWx0
aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOwogICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jik7CisgICAg
Ym9vbCBidWlsZEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445965</attachid>
            <date>2021-12-04 01:49:41 -0800</date>
            <delta_ts>2021-12-06 11:02:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211204014940.patch</filename>
            <type>text/plain</type>
            <size>30128</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI3Mjk5NTM4MGYwNjk3
NGRlMDdjYjhhYzU4MzRjNWEzNzNlZTE5ZC4uODk4NmMyOGM5Mjg1YmVlYTUwMzFjYTE2MzhhZTNi
ZTA5NDNjZDc2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIxLTEyLTA0ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TWFrZSBGaWx0ZXJFZmZlY3QgY2FsY3VsYXRlIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIG9ubHkg
d2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMjcwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluIHRoaXMgcGF0Y2g6CisKKyAgICAgICAgMS4gcmVzdWx0Q29sb3JTcGFjZSgpIHdpbGwg
cmV0dXJuIGNvbG9yU3BhY2UoKSBmcm9tIGEgRmlsdGVySW1hZ2VWZWN0b3IKKyAgICAgICAgICAg
aW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHJlc3VsdENvbG9yU3BhY2UoKSBvZiB0aGUgRmlsdGVy
RWZmZWN0LgorCisgICAgICAgIDIuIEZpbHRlcjo6Y2xhbXBGaWx0ZXJSZWdpb25JZk5lZWRlZCgp
IHdpbGwgY2xhbXAgdGhlIGZpbHRlclJlZ2lvbigpIAorICAgICAgICAgICBpbnN0ZWFkIG9mIGNs
YW1waW5nIHRoZSBtYXhFZmZlY3RSZWN0IG9mIHRoZSBsYXN0RWZmZWN0KCkgc2luY2UgYWxsCisg
ICAgICAgICAgIHRoZSBwcmltaXRpdmVTdWJyZWdpb25zIGFuZCB0aGUgaW1hZ2VSZWN0cyBoYXZl
IHRvIGNsaXBwZWQgdG8gdGhlCisgICAgICAgICAgIGZpbHRlclJlZ2lvbigpLgorCisgICAgICAg
IDMuIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpIGlzIHJlcGxhY2VkIGJ5IGNh
bGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbigpCisgICAgICAgICAgIHdoaWNoIHdpbGwgY2FsY3Vs
YXRlIHRoZSBwcmltaXRpdmVTdWJyZWdpb24gZnJvbSBhIEZpbHRlckltYWdlVmVjdG9yCisgICAg
ICAgICAgIGFuZCBhbiBvcHRpb25hbCBGaWx0ZXJFZmZlY3RHZW9tZXRyeS4KKworICAgICAgICA0
LiBNYW55IG9mIEZpbHRlckVmZmVjdHMgYXJlIG1hZGUgcHJvdGVjdGVkIGluc3RlYWQgb2YgaGF2
aW5nIHRoZW0gcHVibGljLgorCisgICAgICAgIDUuIFNWR0ZpbHRlckV4cHJlc3Npb24gd2lsbCBi
ZSBkZWZpbmVkIGFzIGEgVmVjdG9yIG9mIFNWR0ZpbHRlckV4cHJlc3Npb25UZXJtCisgICAgICAg
ICAgIHdoaWNoIGlzIGEgc3RydWN0IG9mIEZpbHRlckVmZmVjdCBhbmQgb3B0aW9uYWwgRmlsdGVy
RWZmZWN0R2VvbWV0cnkuCisKKyAgICAgICAgNi4gU1ZHRmlsdGVyIHdpbGwgcmVwbGFjZSB0aGUg
bWVtYmVycyB3aG9zZSB0eXBlcyBhcmUgRmlsdGVyRWZmZWN0VmVjdG9yCisgICAgICAgICAgIGFu
ZCBGaWx0ZXJFZmZlY3RHZW9tZXRyeU1hcCB3aXRoIGEgc2luZ2xlIG1lbWJlciBvZiB0eXBlIFNW
R0ZpbHRlckV4cHJlc3Npb24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cmVzdWx0
Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6Y2xhbXBGaWx0ZXJSZWdpb25J
Zk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZWZmZWN0R2VvbWV0cnkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVn
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1
bHRDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6bGFzdEVmZmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RmlsdGVyOjplZmZlY3RHZW9tZXRyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWls
ZGVyOjplZmZlY3RHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpidWlsZEVmZmVjdEV4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmJ1aWxkRWZmZWN0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyQnVpbGRlcjo6dGFrZUVmZmVjdEdlb21ldHJ5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmg6IEFkZGVkLgorCiAyMDIx
LTEyLTAzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtH
UFUgUHJvY2Vzc10gKFJFR1JFU1NJT04gcjI4NTU5Nyk6IEZpeCBTVkdGaWx0ZXIgY2xhbXBpbmcg
Y2FsY3VsYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA1NWEwOTBiNjI5Y2Y0N2MxNzMwM2FmMmQ0MGY5NzlmYjAxNzAxMzFi
Li40YmNlYmVlZGJmOGQwYjY1YmVlMGNiOGQ1NjFhMGE3NGQ4NjczZWM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTE4NCw2
ICsxMTE4NCw3IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25B
ZGRpdGl2ZUxpc3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRk
aXRpdmVMaXN0RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NjZGMDI5MjI0MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5NzUgLyog
U1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2Q0RFMjUyNzVCNDg5
NzAwQTQ0NUIyIC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmls
dGVyRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjZENTZFMTI1
M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9y
bUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQxMUEyRUE2QTAw
MDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFB
MkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODQyMyw2ICsy
ODQyNCw3IEBACiAJCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICov
LAogCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAq
LywKIAkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICov
LAorCQkJCTcyNkNERTI1Mjc1QjQ4OTcwMEE0NDVCMiAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmgg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCA3YmI2YTJlYzVjNTRmY2UzYjgxMjIw
NDRlNDM1ZjFkMjc2YzhkYjNiLi5mZTYxZDkyYTkyN2M0ZjAxMGJkYjkxMzA5ZjQ1MjkzMzQzNjRm
M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNjgsMTMgKzY4LDEzIEBAIGJv
b2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQogICAgIHJldHVybiB0
cnVlOwogfQogCi1jb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFw
OjpyZXN1bHRDb2xvclNwYWNlKCkgY29uc3QKK2NvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
RkVEaXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cykgY29uc3QKIHsKICAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9sYXRp
b24tZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2UgaW1h
Z2UKICAgICAvLyBhbmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdlLiBU
aGUgJ2luJyBzb3VyY2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVudCBj
b2xvciBzcGFjZS4KICAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc2FtZSBjb2xvciBzcGFj
ZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAgIHJl
dHVybiBpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpOworICAgIHJldHVybiBpbnB1
dHNbMF0tPmNvbG9yU3BhY2UoKTsKIH0KIAogdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggNTNiMDlkNGQ2NjhjN2UyM2EzMDJkMWQzMmRmMmM4
ZTg4ODE1MTliYS4uZWY3YTg0NjBhYTMyYjRmMWRmZjlhOWI3ZWViYWJjMDY0Mzc5Zjk1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxl
Y3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CiAKLSAg
ICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBvdmVycmlk
ZTsKIAogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCmluZGV4IDUyZGMzNWQ2ZDYxZDM4ODM1ZDQw
Y2U2MzNkZTA2ZjY2NDUzZWQxZWIuLjBjYzY0ODE5ZjZjZGI3NjU5NTRjYzlhODMzMzg4MDdjNGU4
OGU2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5jcHAKQEAgLTgwLDIxICs4MCwxMyBAQCBGbG9hdFJlY3QgRmlsdGVyOjpjbGlw
VG9NYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
YwogCiBib29sIEZpbHRlcjo6Y2xhbXBGaWx0ZXJSZWdpb25JZk5lZWRlZCgpCiB7Ci0gICAgYXV0
byBsYXN0RWZmZWN0ID0gdGhpcy0+bGFzdEVmZmVjdCgpOwotICAgIGxhc3RFZmZlY3QtPmRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigqdGhpcyk7Ci0gICAgCi0gICAgYXV0byBtYXhF
ZmZlY3RSZWN0ID0gdGhpcy0+bWF4RWZmZWN0UmVjdChsYXN0RWZmZWN0LT5maWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKSk7Ci0gICAgYXV0byBzY2FsZWRNYXhFZmZlY3RSZWN0ID0gc2NhbGVkQnlG
aWx0ZXJTY2FsZShtYXhFZmZlY3RSZWN0KTsKKyAgICBhdXRvIHNjYWxlZEZpbHRlclJlZ2lvbiA9
IHNjYWxlZEJ5RmlsdGVyU2NhbGUobV9maWx0ZXJSZWdpb24pOwogCiAgICAgRmxvYXRTaXplIGNs
YW1waW5nU2NhbGUoMSwgMSk7Ci0gICAgaWYgKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoc2NhbGVkTWF4RWZmZWN0UmVjdC5zaXplKCksIGNsYW1waW5nU2NhbGUpKQorICAgIGlmICgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZEZpbHRlclJlZ2lvbi5zaXplKCks
IGNsYW1waW5nU2NhbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2ZpbHRlclNj
YWxlID0gbV9maWx0ZXJTY2FsZSAqIGNsYW1waW5nU2NhbGU7Ci0KLSAgICAvLyBBdCBsZWFzdCBv
bmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKLSAgICAvLyByZWNhbGN1
bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgbGFzdEVm
ZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCp0aGlzKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmgKaW5kZXggY2ExZDk1MzRjN2Y4YjE4MDZkODFhNWQyMDI3ZjhjNDkyYWUy
MjgzYS4uOTBiZGE4YTY5NDEwYWJmNWMwZDBkNWY2OTRhNGM5MDZhNjNlN2M0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC02
Miw4ICs2Miw2IEBAIHB1YmxpYzoKICAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShj
b25zdCBGbG9hdFNpemUmKSBjb25zdDsKICAgICBGbG9hdFJlY3Qgc2NhbGVkQnlGaWx0ZXJTY2Fs
ZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxG
aWx0ZXJFZmZlY3RHZW9tZXRyeT4gZWZmZWN0R2VvbWV0cnkoRmlsdGVyRWZmZWN0JikgY29uc3Qg
eyByZXR1cm4gc3RkOjpudWxsb3B0OyB9Ci0KICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdChj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Q7CiAgICAgRmxvYXRSZWN0
IGNsaXBUb01heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmlu
ZGV4IDBhZTk0ZDUwNmUxNDFlZGYzNDM0YWRiNjI0Yzg2YzUzMjIyNjNkMzEuLjgzNDQyZmExYWE1
OTIzMThkMTczNDYxZGI1YzhhYzAxZTVlY2E0ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI2
LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVj
dEFwcGxpZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KQEAgLTQwLDI2ICs0MSwyMCBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0
OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlcklt
YQogICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHByaW1p
dGl2ZVN1YnJlZ2lvbik7CiB9CiAKLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVjdCBG
aWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImIGZp
bHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3Qgc3RkOjpvcHRpb25h
bDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4mIGdlb21ldHJ5KSBjb25zdAogewogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaW1wbGVtZW50cyBodHRwczovL3d3dy53My5vcmcvVFIvZmlsdGVyLWVmZmVjdHMt
MS8jRmlsdGVyUHJpbWl0aXZlU3ViUmVnaW9uLgogICAgIEZsb2F0UmVjdCBwcmltaXRpdmVTdWJy
ZWdpb247CiAKICAgICAvLyBJZiB0aGVyZSBpcyBubyBpbnB1dCBlZmZlY3RzLCB0YWtlIHRoZSBl
ZmZlY3QgYm91bmRhcmllcyBhcyB1bml0ZSByZWN0LgotICAgIGlmICghbV9pbnB1dEVmZmVjdHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMp
IHsKLSAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBlZmZlY3QtPmRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOwotICAgICAgICAgICAgcHJp
bWl0aXZlU3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVnaW9uKTsKLSAgICAgICAg
fQorICAgIGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiBmaWx0ZXJUeXBlKCkgIT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykK
KyAgICAgICAgICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi51bml0ZShpbnB1dC0+cHJpbWl0aXZlU3Vi
cmVnaW9uKCkpOwogICAgIH0gZWxzZQogICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0
ZXIuZmlsdGVyUmVnaW9uKCk7CiAKLSAgICAvLyBEb24ndCB1c2UgdGhlIGlucHV0J3Mgc3VicmVn
aW9uIGZvciBGRVRpbGUuCi0gICAgaWYgKGZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFVGlsZSkKLSAgICAgICAgcHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyLmZpbHRlclJl
Z2lvbigpOwotICAgIAogICAgIC8vIENsaXAgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gdG8gdGhl
IGVmZmVjdCBnZW9tZXRyeS4KLSAgICBpZiAoYXV0byBnZW9tZXRyeSA9IGZpbHRlci5lZmZlY3RH
ZW9tZXRyeSgqdGhpcykpIHsKKyAgICBpZiAoZ2VvbWV0cnkpIHsKICAgICAgICAgaWYgKGF1dG8g
eCA9IGdlb21ldHJ5LT54KCkpCiAgICAgICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0WCgq
eCk7CiAgICAgICAgIGlmIChhdXRvIHkgPSBnZW9tZXRyeS0+eSgpKQpAQCAtNzAsNyArNjUsNiBA
QCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24u
c2V0SGVpZ2h0KCpoZWlnaHQpOwogICAgIH0KIAotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247
CiB9CiAKQEAgLTgwLDcgKzc0LDcgQEAgRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0
RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKICAgICByZXR1cm4gbV9pbnB1dEVmZmVjdHMu
YXQobnVtYmVyKS5nZXQoKTsKIH0KIAotYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZp
bHRlciYgZmlsdGVyKQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYgZ2VvbWV0cnkp
CiB7CiAgICAgaWYgKGhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMCwx
NiArOTQsMTggQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogICAgIH0KIAogICAgIGF1dG8gaW5wdXRGaWx0ZXJJbWFnZXMgPSB0aGlzLT5pbnB1dEZpbHRl
ckltYWdlcygpOwotICAgIGF1dG8gaW1hZ2VSZWN0ID0gY2FsY3VsYXRlSW1hZ2VSZWN0KGZpbHRl
ciwgaW5wdXRGaWx0ZXJJbWFnZXMsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTsKKworICAg
IGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGZp
bHRlciwgaW5wdXRGaWx0ZXJJbWFnZXMsIGdlb21ldHJ5KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9
IGNhbGN1bGF0ZUltYWdlUmVjdChmaWx0ZXIsIGlucHV0RmlsdGVySW1hZ2VzLCBwcmltaXRpdmVT
dWJyZWdpb24pOwogICAgIGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKGltYWdlUmVjdCkpOwogCiAgICAgaWYgKGFic29s
dXRlSW1hZ2VSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
YWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIGF1dG8gaXNBbHBoYUltYWdlID0gcmVzdWx0SXNBbHBoYUltYWdlKGlucHV0RmlsdGVySW1h
Z2VzKTsKLSAgICBhdXRvIGltYWdlQ29sb3JTcGFjZSA9IHJlc3VsdENvbG9yU3BhY2UoKTsKKyAg
ICBhdXRvIGltYWdlQ29sb3JTcGFjZSA9IHJlc3VsdENvbG9yU3BhY2UoaW5wdXRGaWx0ZXJJbWFn
ZXMpOwogCi0gICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdlOjpjcmVhdGUobV9maWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgYWJzb2x1dGVJbWFnZVJlY3QsIGlzQWxwaGFJ
bWFnZSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VDb2xvclNwYWNlKTsKKyAgICBtX2Zp
bHRlckltYWdlID0gRmlsdGVySW1hZ2U6OmNyZWF0ZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdl
UmVjdCwgYWJzb2x1dGVJbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgZmlsdGVyLnJlbmRlcmluZ01v
ZGUoKSwgaW1hZ2VDb2xvclNwYWNlKTsKICAgICBpZiAoIW1fZmlsdGVySW1hZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMTE5LDkgKzExNSw5IEBAIGJvb2wgRmlsdGVyRWZmZWN0Ojph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0KICAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAi
ICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6IgotICAgICAgICA8PCAiXG4gIGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uCisgICAgICAgIDw8ICJc
biAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgcHJpbWl0aXZlU3VicmVnaW9uCiAgICAg
ICAgIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBhYnNvbHV0ZUltYWdlUmVjdAotICAg
ICAgICA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2Fs
ZShmaWx0ZXIubWF4RWZmZWN0UmVjdChtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbikpCisgICAg
ICAgIDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IGZpbHRlci5tYXhFZmZlY3RSZWN0KHByaW1p
dGl2ZVN1YnJlZ2lvbikKICAgICAgICAgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBmaWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7CiAKICAgICByZXR1cm4gYXBwbGllci0+YXBwbHkoZmlsdGVyLCBpbnB1
dEZpbHRlckltYWdlcywgKm1fZmlsdGVySW1hZ2UpOwpAQCAtMTczLDcgKzE2OSw2IEBAIFRleHRT
dHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UCiAgICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNl
bnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29w
ZSBpbmRlbnRTY29wZSh0cyk7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNv
bG9yc3BhY2UiLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgcmVzdWx0Q29sb3JTcGFjZSgpKTsKICAgICAgICAgdHMg
PDwgIlxuIiA8PCBpbmRlbnQ7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmlu
ZGV4IDgyN2ViNWRiODFlOTFjOTIzNjk2OWVhNWZkOTIwMmE4Y2I5NWIzNWMuLmFiOTIzN2RmNGRj
ZWQ5NGY0OTBhNTA1YjViY2JhMWEyMWU3YTFlNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMzcsNiAr
MzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRl
ckVmZmVjdEFwcGxpZXI7CitjbGFzcyBGaWx0ZXJFZmZlY3RHZW9tZXRyeTsKIAogY2xhc3MgRmls
dGVyRWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1YmxpYzoKQEAgLTQ3LDU2ICs0
OCw0OCBAQCBwdWJsaWM6CiAgICAgRmlsdGVySW1hZ2UqIGZpbHRlckltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWx0ZXJJbWFnZS5nZXQoKTsgfQogICAgIEZpbHRlckltYWdlVmVjdG9yIGlucHV0
RmlsdGVySW1hZ2VzKCkgY29uc3Q7CiAKLSAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUmVz
dWx0SWZOZWVkZWQoKTsKLQogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkg
eyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0
KHVuc2lnbmVkKSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNv
bnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQogCi0gICAgLy8gUmVjdXJzZXMg
b24gaW5wdXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oY29uc3QgRmlsdGVyJik7CisgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0
ZXImLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYgPSBzdGQ6Om51
bGxvcHQpIG92ZXJyaWRlOworCisgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVy
YXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9y
U3BhY2U7IH0KKworICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1
dCwgRGVidWdnaW5nIH07CisgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVz
ZW50YXRpb25UeXBlOjpUZXN0T3V0cHV0KSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHVzaW5n
IEZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbjsKKworICAgIHZpcnR1YWwgYm9vbCBtYXlQ
cm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGNv
cnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKIAogICAgIC8vIENvcnJlY3QgYW55
IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIg
b3BlcmF0aW9uLgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBp
eGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgogICAgIC8v
IE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZv
cm0gY29ycmVjdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVl
ZGVkKCkgeyB9CiAKLSAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRw
dXQsIERlYnVnZ2luZyB9OwotICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJl
c2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KIAotICAg
IEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2Zp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKSB7IG1fZmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9CisgICAg
RmxvYXRSZWN0IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2Vv
bWV0cnk+JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OwogCi0gICAgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9v
cGVyYXRpbmdDb2xvclNwYWNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0
aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7IH0KLQogICAgIC8vIFNvbGlkIGJsYWNrIGltYWdl
IHdpdGggZGlmZmVyZW50IGFscGhhIHZhbHVlcy4KICAgICB2aXJ0dWFsIGJvb2wgcmVzdWx0SXNB
bHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJikgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JT
cGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQorICAgIHZpcnR1
YWwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJikgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZl
Y3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVy
YXRpbmdDb2xvclNwYWNlKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKLQotcHJvdGVjdGVkOgotICAgIHVzaW5nIEZp
bHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbjsKLQotICAgIHZpcnR1YWwgYm9vbCBtYXlQcm9k
dWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIAogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNy
ZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QgPSAwOwogCi1wcml2YXRlOgogICAgIEZp
bHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAogICAgIFJlZlB0cjxGaWx0ZXJJbWFn
ZT4gbV9maWx0ZXJJbWFnZTsKIAotICAgIC8vIFRoZSBzdWJyZWdpb24gb2YgYSBmaWx0ZXIgcHJp
bWl0aXZlIGFjY29yZGluZyB0byB0aGUgU1ZHIEZpbHRlciBzcGVjaWZpY2F0aW9uIGluIGxvY2Fs
IGNvb3JkaW5hdGVzLgotICAgIC8vIFRoaXMgaXMgU1ZHIHNwZWNpZmljIGFuZCBuZWVkcyB0byBt
b3ZlIHRvIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLgotICAgIEZsb2F0UmVjdCBt
X2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsKLQogICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBt
X29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSB9Owog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJGdW5jdGlvbi5oCmluZGV4IGQyOWEzYTYwN2FhNjhmZDVmZDhhODdkZTE5NGRm
NmE1NmI1YWY0OWUuLmM5ZDY3N2E2MDgyOTI4NjM0NjdjOWZiYmVhYzQyNWZlMjllNzFjZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgog
I2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpA
QCAtODgsNyArODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29yZUlt
YWdlUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAgdmly
dHVhbCBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVy
RWZmZWN0R2VvbWV0cnk+JiA9IHN0ZDo6bnVsbG9wdCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQogICAgIHZp
cnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAppbmRleCBmMzlmYzI2ZGQ5MDYyZGFjMWE4
NzhiOTEzM2YyNThhMjFiNTkyZWIzLi5lNDA4YTE3MWY3NTIzMTQ3NzJhMDhiMzQyZTAwMTRlNWE1
Zjg1MTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5jcHAKQEAgLTU0LDE1ICs1NCwxMyBAQCBSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0
ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdQog
ICAgIGlmICghYnVpbGRlci5idWlsZEZpbHRlckVmZmVjdHMoZmlsdGVyRWxlbWVudCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgRmlsdGVyRWZmZWN0VmVjdG9yIGV4cHJlc3Npb247
CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBleHByZXNzaW9uOwogICAgIGlmICghYnVpbGRlci5i
dWlsZEV4cHJlc3Npb24oZXhwcmVzc2lvbikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgQVNTRVJUKCFleHByZXNzaW9uLmlzRW1wdHkoKSk7CiAgICAgZmlsdGVyLT5zZXRFeHByZXNz
aW9uKFdURk1vdmUoZXhwcmVzc2lvbikpOwogCi0gICAgZmlsdGVyLT5zZXRFZmZlY3RHZW9tZXRy
eU1hcChidWlsZGVyLnRha2VFZmZlY3RHZW9tZXRyeU1hcCgpKTsKLQogI2lmIFVTRShDT1JFX0lN
QUdFKQogICAgIGlmICghZmlsdGVyLT5zdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpKQogICAg
ICAgICBmaWx0ZXItPnNldFJlbmRlcmluZ01vZGUoUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCk7CkBAIC05MCw4ICs4OCw4IEBAIGJvb2wgU1ZHRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVCghbV9l
eHByZXNzaW9uLmlzRW1wdHkoKSk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2V4cHJlc3Np
b24pIHsKLSAgICAgICAgaWYgKCFlZmZlY3QtPnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkp
CisgICAgZm9yIChhdXRvJiB0ZXJtIDogbV9leHByZXNzaW9uKSB7CisgICAgICAgIGlmICghdGVy
bS5lZmZlY3QtPnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC05OSwxNSArOTcsMTQgQEAgYm9vbCBTVkdGaWx0ZXI6OnN1
cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKIH0KICNlbmRpZgogCi1zdGQ6Om9wdGlv
bmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiBTVkdGaWx0ZXI6OmVmZmVjdEdlb21ldHJ5KEZpbHRl
ckVmZmVjdCYgZWZmZWN0KSBjb25zdAorUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyOjps
YXN0RWZmZWN0KCkgY29uc3QKIHsKLSAgICBhdXRvIGl0ID0gbV9lZmZlY3RHZW9tZXRyeU1hcC5m
aW5kKGVmZmVjdCk7Ci0gICAgaWYgKGl0ICE9IG1fZWZmZWN0R2VvbWV0cnlNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBpdC0+dmFsdWU7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBp
ZiAobV9leHByZXNzaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIG1fZXhwcmVzc2lvbi5sYXN0KCkuZWZmZWN0LnB0cigpOwogfQogCi1ib29sIFNWR0Zp
bHRlcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIFNWR0ZpbHRlcjo6YXBwbHko
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2Vv
bWV0cnk+JikKIHsKICAgICBzZXRTb3VyY2VJbWFnZSh7IGZpbHRlci5zb3VyY2VJbWFnZSgpIH0p
OwogICAgIHJldHVybiBhcHBseSgpOwpAQCAtMTE2LDggKzExMyw4IEBAIGJvb2wgU1ZHRmlsdGVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKIFJlZlB0cjxGaWx0ZXJJbWFnZT4gU1ZHRmls
dGVyOjphcHBseSgpCiB7CiAgICAgQVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsKLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZXhwcmVzc2lvbikgewotICAgICAgICBpZiAoIWVmZmVj
dC0+YXBwbHkoKnRoaXMpKQorICAgIGZvciAoYXV0byYgdGVybSA6IG1fZXhwcmVzc2lvbikgewor
ICAgICAgICBpZiAoIXRlcm0uZWZmZWN0LT5hcHBseSgqdGhpcywgdGVybS5nZW9tZXRyeSkpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIGxhc3RFZmZlY3Qo
KS0+ZmlsdGVySW1hZ2UoKTsKQEAgLTEzMiw4ICsxMjksOCBAQCBJbnRPdXRzZXRzIFNWR0ZpbHRl
cjo6b3V0c2V0cygpIGNvbnN0CiB2b2lkIFNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQoKQogewogICAg
IEFTU0VSVCghbV9leHByZXNzaW9uLmlzRW1wdHkoKSk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3Qg
OiBtX2V4cHJlc3Npb24pCi0gICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBmb3Ig
KGF1dG8mIHRlcm0gOiBtX2V4cHJlc3Npb24pCisgICAgICAgIHRlcm0uZWZmZWN0LT5jbGVhclJl
c3VsdCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4IGY0ZDI5NGE3MTBmY2EzMGE5
NWY3MDFkMmM4ZTI0MmZmMjA5NjJhMjAuLmJhOTg1NDI4YmY0NmMwNjFlNjg0MDFmMDViZDUzYTVj
ODA0MTI4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oCkBAIC0yMiw4ICsyMiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZp
bHRlci5oIgotI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJTVkdV
bml0VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0
cy5oPgpAQCAtNDIsMzMgKzQyLDI4IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UmVjdCB0YXJnZXRC
b3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KIAotICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiAh
bV9leHByZXNzaW9uLmlzRW1wdHkoKSA/IG1fZXhwcmVzc2lvbi5sYXN0KCkgOiBudWxscHRyOyB9
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIGNvbnN0IGZpbmFsOwogCiAg
ICAgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseSgpIGZpbmFsOwogCiBwcml2YXRlOgogICAgIFNW
R0ZpbHRlcihSZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdp
b24sIENsaXBPcGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpOwogCi0gICAgLy8gRklYTUU6
IE1lcmdlIHRoZSBlZmZlY3RCb3VuZGFyaWVzIGluIHRoZSBleHByZXNzaW9uIG5vZGUuCi0gICAg
dm9pZCBzZXRFeHByZXNzaW9uKEZpbHRlckVmZmVjdFZlY3RvciYmIGV4cHJlc3Npb24pIHsgbV9l
eHByZXNzaW9uID0gV1RGTW92ZShleHByZXNzaW9uKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0R2Vv
bWV0cnlNYXAoRmlsdGVyRWZmZWN0R2VvbWV0cnlNYXAmJiBlZmZlY3RHZW9tZXRyeU1hcCkgeyBt
X2VmZmVjdEdlb21ldHJ5TWFwID0gV1RGTW92ZShlZmZlY3RHZW9tZXRyeU1hcCk7IH0KKyAgICB2
b2lkIHNldEV4cHJlc3Npb24oU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24pIHsgbV9l
eHByZXNzaW9uID0gV1RGTW92ZShleHByZXNzaW9uKTsgfQogCiAjaWYgVVNFKENPUkVfSU1BR0Up
CiAgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IGZpbmFsOwogI2Vu
ZGlmCi0gICAgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZWZmZWN0R2VvbWV0
cnkoRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7CiAgICAgRmxvYXRTaXplIHJlc29sdmVkU2l6
ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgYXBwbHkoY29uc3Qg
RmlsdGVyJikgZmluYWw7CisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYgPSBzdGQ6Om51bGxvcHQpIGZpbmFsOwog
ICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgY2xlYXJSZXN1
bHQoKSBmaW5hbDsKIAogICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwogICAgIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0czsKIAotICAgIC8vIEZJWE1F
OiBNYWtlIG1fZXhwcmVzc2lvbiBhIFZlY3RvciBvZiB0aGUgRmlsdGVyRWZmZWN0IGFuZCB0aGUg
ZWZmZWN0Qm91bmRhcmllcy4KLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9leHByZXNzaW9uOwot
ICAgIEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwIG1fZWZmZWN0R2VvbWV0cnlNYXA7CisgICAgU1ZH
RmlsdGVyRXhwcmVzc2lvbiBtX2V4cHJlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDUwZWUxYTA2YzEzZDNlNWM0N2I3OGFmZTRlYmEwNmY2
NWE4YWVjMDYuLmJiNzVmMzhjNmUxNDI3MWJmYWQ1MjRjY2M2ZWJiNjJhZDFjMThiYzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckJ1aWxkZXIuY3BwCkBAIC0yMDEsNyArMjAxLDE1IEBAIHZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6
Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQogICAgICAgICBjbGVh
clJlc3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsKIH0KIAotc3RhdGljIGJvb2wgYnVpbGRFZmZl
Y3RFeHByZXNzaW9uKGNvbnN0IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVm
ZmVjdFZlY3RvciYgc3RhY2ssIEZpbHRlckVmZmVjdFZlY3RvciYgZXhwcmVzc2lvbikKK3N0ZDo6
b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IFNWR0ZpbHRlckJ1aWxkZXI6OmVmZmVjdEdl
b21ldHJ5KEZpbHRlckVmZmVjdCYgZWZmZWN0KSBjb25zdAoreworICAgIGF1dG8gaXQgPSBtX2Vm
ZmVjdEdlb21ldHJ5TWFwLmZpbmQoZWZmZWN0KTsKKyAgICBpZiAoaXQgIT0gbV9lZmZlY3RHZW9t
ZXRyeU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZmZWN0RXhwcmVz
c2lvbihjb25zdCBSZWZQdHI8RmlsdGVyRWZmZWN0PiYgZWZmZWN0LCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIHN0YWNrLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKSBjb25zdAogewogICAg
IC8vIEEgY3ljbGUgaXMgZGV0ZWN0ZWQuCiAgICAgaWYgKHN0YWNrLmNvbnRhaW5zKGVmZmVjdCkp
CkBAIC0yMDksNyArMjE3LDcgQEAgc3RhdGljIGJvb2wgYnVpbGRFZmZlY3RFeHByZXNzaW9uKGNv
bnN0IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVmZmUKIAogICAgIHN0YWNr
LmFwcGVuZChlZmZlY3QpOwogICAgIAotICAgIGV4cHJlc3Npb24uYXBwZW5kKGVmZmVjdCk7Cisg
ICAgZXhwcmVzc2lvbi5hcHBlbmQoeyAqZWZmZWN0LCBlZmZlY3RHZW9tZXRyeSgqZWZmZWN0KSB9
KTsKIAogICAgIGZvciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3QtPmlucHV0RWZmZWN0cygp
KSB7CiAgICAgICAgIGlmICghYnVpbGRFZmZlY3RFeHByZXNzaW9uKGlucHV0RWZmZWN0LCBzdGFj
aywgZXhwcmVzc2lvbikpCkBAIC0yMjMsNyArMjMxLDcgQEAgc3RhdGljIGJvb2wgYnVpbGRFZmZl
Y3RFeHByZXNzaW9uKGNvbnN0IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVm
ZmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4
cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKSBjb25zdAorYm9vbCBTVkdG
aWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oU1ZHRmlsdGVyRXhwcmVzc2lvbiYgZXhwcmVz
c2lvbikgY29uc3QKIHsKICAgICBpZiAoIW1fbGFzdEVmZmVjdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5oCmluZGV4IGZiOWRjZDc4ZjlkOTNlZmJkMTgzMmE1ZWY0YTVjNDMwNjJj
NjU3YzUuLjE4ODg0NTBjNWVkZmM2NzNiMjFiNTcxNGI2YWI3YWY2ZDRmNGY5M2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNW
R1VuaXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KQEAgLTY4LDkgKzY5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXR1cEJ1aWx0
aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOwogICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jik7Ci0gICAg
Ym9vbCBidWlsZEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKSBjb25z
dDsKLQotICAgIEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwIHRha2VFZmZlY3RHZW9tZXRyeU1hcCgp
IHsgcmV0dXJuIFdURk1vdmUobV9lZmZlY3RHZW9tZXRyeU1hcCk7IH0KKyAgICBib29sIGJ1aWxk
RXhwcmVzc2lvbihTVkdGaWx0ZXJFeHByZXNzaW9uJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAg
aW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMoKQpAQCAtNzksNiArNzgsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZpbHRlckVmZmVj
dFNldCgpKTsKICAgICB9CiAKKyAgICBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5
PiBlZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmKSBjb25zdDsKKyAgICBib29sIGJ1aWxkRWZm
ZWN0RXhwcmVzc2lvbihjb25zdCBSZWZQdHI8RmlsdGVyRWZmZWN0PiYsIEZpbHRlckVmZmVjdFZl
Y3RvciYgc3RhY2ssIFNWR0ZpbHRlckV4cHJlc3Npb24mKSBjb25zdDsKKwogICAgIEhhc2hNYXA8
QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7CiAgICAg
SGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7
CiAgICAgLy8gVGhlIHZhbHVlIGlzIGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2UgZmlsdGVy
IGVmZmVjdHMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRkY2M3MmRiYWE2OGU4NGY3
MTIyNGQ0NjdjNzEyNmM2ZDA3MTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaApAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKKworc3RydWN0
IFNWR0ZpbHRlckV4cHJlc3Npb25UZXJtIHsKKyAgICBSZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7
CisgICAgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZ2VvbWV0cnk7Cit9Owor
Cit1c2luZyBTVkdGaWx0ZXJFeHByZXNzaW9uID0gVmVjdG9yPFNWR0ZpbHRlckV4cHJlc3Npb25U
ZXJtPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446055</attachid>
            <date>2021-12-06 11:02:09 -0800</date>
            <delta_ts>2021-12-06 11:03:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211206110208.patch</filename>
            <type>text/plain</type>
            <size>32303</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc1NzNlMWJmNGQ3YzEy
NGY3ZDc1Mzc1MDc5NTgxZTU3ZTA5MWIxOS4uNDYyOWQ5M2RlNzBiNjY5ZjY0NTUxNGRkNzUyZjMz
ZTBmNGZjODliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIxLTEyLTA2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TWFrZSBGaWx0ZXJFZmZlY3QgY2FsY3VsYXRlIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIG9ubHkg
d2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMjcwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluIHRoaXMgcGF0Y2g6CisKKyAgICAgICAgMS4gcmVzdWx0Q29sb3JTcGFjZSgpIHdpbGwg
cmV0dXJuIGNvbG9yU3BhY2UoKSBmcm9tIGEgRmlsdGVySW1hZ2VWZWN0b3IKKyAgICAgICAgICAg
aW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHJlc3VsdENvbG9yU3BhY2UoKSBvZiB0aGUgRmlsdGVy
RWZmZWN0LgorCisgICAgICAgIDIuIEZpbHRlcjo6Y2xhbXBGaWx0ZXJSZWdpb25JZk5lZWRlZCgp
IHdpbGwgY2xhbXAgdGhlIGZpbHRlclJlZ2lvbigpIAorICAgICAgICAgICBpbnN0ZWFkIG9mIGNs
YW1waW5nIHRoZSBtYXhFZmZlY3RSZWN0IG9mIHRoZSBsYXN0RWZmZWN0KCkgc2luY2UgYWxsCisg
ICAgICAgICAgIHRoZSBwcmltaXRpdmVTdWJyZWdpb25zIGFuZCB0aGUgaW1hZ2VSZWN0cyBoYXZl
IHRvIGNsaXBwZWQgdG8gdGhlCisgICAgICAgICAgIGZpbHRlclJlZ2lvbigpLgorCisgICAgICAg
IDMuIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpIGlzIHJlcGxhY2VkIGJ5IGNh
bGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbigpCisgICAgICAgICAgIHdoaWNoIHdpbGwgY2FsY3Vs
YXRlIHRoZSBwcmltaXRpdmVTdWJyZWdpb24gZnJvbSBhIEZpbHRlckltYWdlVmVjdG9yCisgICAg
ICAgICAgIGFuZCBhbiBvcHRpb25hbCBGaWx0ZXJFZmZlY3RHZW9tZXRyeS4KKworICAgICAgICA0
LiBNYW55IG9mIEZpbHRlckVmZmVjdHMgYXJlIG1hZGUgcHJvdGVjdGVkIGluc3RlYWQgb2YgaGF2
aW5nIHRoZW0gcHVibGljLgorCisgICAgICAgIDUuIFNWR0ZpbHRlckV4cHJlc3Npb24gd2lsbCBi
ZSBkZWZpbmVkIGFzIGEgVmVjdG9yIG9mIFNWR0ZpbHRlckV4cHJlc3Npb25UZXJtCisgICAgICAg
ICAgIHdoaWNoIGlzIGEgc3RydWN0IG9mIEZpbHRlckVmZmVjdCBhbmQgb3B0aW9uYWwgRmlsdGVy
RWZmZWN0R2VvbWV0cnkuCisKKyAgICAgICAgNi4gU1ZHRmlsdGVyIHdpbGwgcmVwbGFjZSB0aGUg
bWVtYmVycyB3aG9zZSB0eXBlcyBhcmUgRmlsdGVyRWZmZWN0VmVjdG9yCisgICAgICAgICAgIGFu
ZCBGaWx0ZXJFZmZlY3RHZW9tZXRyeU1hcCB3aXRoIGEgc2luZ2xlIG1lbWJlciBvZiB0eXBlIFNW
R0ZpbHRlckV4cHJlc3Npb24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cmVzdWx0
Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6Y2xhbXBGaWx0ZXJSZWdpb25J
Zk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZWZmZWN0R2VvbWV0cnkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVn
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1
bHRDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnN1cHBvcnRzQ29yZUltYWdl
UmVuZGVyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6bGFzdEVmZmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RmlsdGVyOjplZmZlY3RHZW9tZXRyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWls
ZGVyOjplZmZlY3RHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJC
dWlsZGVyOjpidWlsZEVmZmVjdEV4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmJ1aWxkRWZmZWN0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyQnVpbGRlcjo6dGFrZUVmZmVjdEdlb21ldHJ5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmg6IEFkZGVkLgorCiAyMDIx
LTEyLTA2ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogICAgICAgICBbR1BV
IFByb2Nlc3NdIChSRUdSRVNTSU9OIHIyODU1OTcpOiBTZXQgdGhlIGZpbHRlclJlZ2lvbiBvZiB0
aGUgQ1NTRmlsdGVyIGFmdGVyIGl0IGlzIGNyZWF0ZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzg0OQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZkYjAxYjVhMGNkZjVmYTY4N2Qz
MmUzZjE1NDNiMWM0Y2M5ODhkMWIuLjE1NDQxNGQ2YjdmOWRlMTMxZGE4NGJmYTA4OTI0MmRjODhi
YTkyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTIzMTQsNiArMjMxNCw3IEBACiAJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4
MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyOTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4
NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOUQwNTMwMjUzMTQyNDMwMDQyMjA5OCAvKiBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MkE1RDE5MjI3NUU4RkZFMDA2NTgzM0UgLyogU1ZHRmlsdGVyRXhwcmVzc2lv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2Q0RF
MjUyNzVCNDg5NzAwQTQ0NUIyIC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkE3M0JFRjI0NUEzRjkwMDAx
QzlEMDMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9u
RnJhbWVSYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzJCOEIwMzUyNzUzNDM4NjAwRjc1MkFBIC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjYyRDc1NjI3MkExNzQx
MDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkI4QjAzNjI3NTM0NDE0MDBGNzUyQUEgLyogRmlsdGVy
SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
NDM1RUY0MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTE4Nyw2ICsxMTE4OCw3IEBACiAJ
CTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5j
dGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVMaXN0RnVuY3Rp
b25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDI5MjI0MzEyQjEw
MDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMxNDlCMDA4MzM5NzUgLyogU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2Q0RFMjUyNzVCNDg5NzAwQTQ0NUIyIC8qIFNW
R0ZpbHRlckV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRmlsdGVyRXhwcmVzc2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAg
LyogUGxhdGZvcm1JbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRz
UkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTgg
LyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODQyNiw2ICsyODQyOCw3IEBACiAJCQkJ
ODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8qIFNWR0ZpbHRlci5oICovLAogCQkJCTA4MUVCRjM4
MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmNwcCAqLywKIAkJCQkwODFFQkYz
OTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oICovLAorCQkJCTcyNkNERTI1
Mjc1QjQ4OTcwMEE0NDVCMiAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzcxMjEsNiAr
MzcxMjQsNyBAQAogCQkJCTg0NUU3MkZDMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4MUVCRjNCMEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3ODIgLyog
U1ZHRmlsdGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBNUQxOTIyNzVFOEZGRTAw
NjU4MzNFIC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
QTBGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTEyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdG
aXRUb1ZpZXdCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2
QSAvKiBTVkdGb250RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuY3BwCmluZGV4IDdiYjZhMmVjNWM1NGZjZTNiODEyMjA0NGU0MzVmMWQyNzZjOGRiM2IuLmZl
NjFkOTJhOTI3YzRmMDEwYmRiOTEzMDlmNDUyOTMzNDM2NGYzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFj
ZW1lbnRNYXAuY3BwCkBAIC02OCwxMyArNjgsMTMgQEAgYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6
c2V0U2NhbGUoZmxvYXQgc2NhbGUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgRkVEaXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UoKSBj
b25zdAorY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBGRURpc3BsYWNlbWVudE1hcDo6cmVz
dWx0Q29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewog
ICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyBwcm9wZXJ0eSBv
bmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNvdXJjZSBpbWFnZQogICAgIC8vIGFuZCBkb2VzIG5v
dCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2UgaW1hZ2UuIFRoZSAnaW4nIHNvdXJjZSBpbWFnZSBt
dXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBjdXJyZW50IGNvbG9yIHNwYWNlLgogICAgIC8vIFRo
ZSByZXN1bHQgaXMgaW4gdGhhdCBzYW1lIGNvbG9yIHNwYWNlIGJlY2F1c2UgaXQgaXMgYSBkaXNw
bGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2UuCi0gICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5y
ZXN1bHRDb2xvclNwYWNlKCk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+Y29sb3JTcGFjZSgpOwog
fQogCiB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZp
bHRlckVmZmVjdCogaW4sIGNvbnN0IGludCBpbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApp
bmRleCAzODI2YWFjY2JmMjdjY2MyODFkYTdlNzQxYjE0NWVjMDBmZWFkNTFhLi40MmU2NWIyZTFi
NjVhODZjYzEwODQyNmY3ZjFmYTQzZTgzMzNjNTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5o
CkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVEaXNwbGFjZW1lbnRN
YXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JU
eXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKIAotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwogCiAgICAgRmxvYXRSZWN0IGNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5jcHAKaW5kZXggNzMzYWY2NjE5ZjQxZGQxZTUwOWRiNjhlYTRiZmU4NzVjMjg3NmEzZi4u
YmU0ZjI5Y2M1NjlmNmU1NTVjNzk5M2RjNWJlOGZiZThjYzdhZTRlOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApAQCAtNzEs
MjEgKzcxLDEzIEBAIEZsb2F0UmVjdCBGaWx0ZXI6OmNsaXBUb01heEVmZmVjdFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjCiAKIGJvb2wgRmlsdGVyOjpjbGFt
cEZpbHRlclJlZ2lvbklmTmVlZGVkKCkKIHsKLSAgICBhdXRvIGxhc3RFZmZlY3QgPSB0aGlzLT5s
YXN0RWZmZWN0KCk7Ci0gICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKCp0aGlzKTsKLSAgICAKLSAgICBhdXRvIG1heEVmZmVjdFJlY3QgPSB0aGlzLT5tYXhF
ZmZlY3RSZWN0KGxhc3RFZmZlY3QtPmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKLSAgICBh
dXRvIHNjYWxlZE1heEVmZmVjdFJlY3QgPSBzY2FsZWRCeUZpbHRlclNjYWxlKG1heEVmZmVjdFJl
Y3QpOworICAgIGF1dG8gc2NhbGVkRmlsdGVyUmVnaW9uID0gc2NhbGVkQnlGaWx0ZXJTY2FsZSht
X2ZpbHRlclJlZ2lvbik7CiAKICAgICBGbG9hdFNpemUgY2xhbXBpbmdTY2FsZSgxLCAxKTsKLSAg
ICBpZiAoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRNYXhFZmZlY3RSZWN0
LnNpemUoKSwgY2xhbXBpbmdTY2FsZSkpCisgICAgaWYgKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoc2NhbGVkRmlsdGVyUmVnaW9uLnNpemUoKSwgY2xhbXBpbmdTY2FsZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fZmlsdGVyU2NhbGUgPSBtX2ZpbHRlclNjYWxlICog
Y2xhbXBpbmdTY2FsZTsKLQotICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEg
dG9vIGJpZyBpbWFnZSBzaXplLAotICAgIC8vIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMg
d2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKnRoaXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCAx
NjJhYmU2NzI5NDE4YjRmM2YwMjU2Mjk4ZTViNjY4ZWNkYWE4MThiLi4yOWRjN2ZmNzhjNjA2Yzdj
ZjNmYTFhYWJlNjkzN2Q0YzczYmVlODYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTYzLDggKzYzLDYgQEAgcHVibGljOgog
ICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0
OwogICAgIEZsb2F0UmVjdCBzY2FsZWRCeUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OwogCi0gICAgdmlydHVhbCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiBl
ZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KLQogICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdDsKICAgICBGbG9hdFJlY3QgY2xpcFRvTWF4RWZmZWN0UmVjdChj
b25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggMGFlOTRkNTA2ZTE0MWVkZjM0
MzRhZGI2MjRjODZjNTMyMjI2M2QzMS4uZGExY2ExNDEyZDQ0NzQ4OWZmOTFmN2FiNjhmNmY1MzMz
M2RkYzE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgorI2luY2x1ZGUg
IkZpbHRlckVmZmVjdEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNDAs
MjYgKzQxLDIwIEBAIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdChj
b25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hCiAgICAgcmV0dXJuIGZpbHRlci5j
bGlwVG9NYXhFZmZlY3RSZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAot
RmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9u
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRl
UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5
PiYgZ2VvbWV0cnkpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9maWx0ZXItZWZmZWN0cy0xLyNGaWx0ZXJQcmltaXRpdmVTdWJS
ZWdpb24uCiAgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbjsKIAotICAgIC8vIElmIHRo
ZXJlIGlzIG5vIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGVmZmVjdCBib3VuZGFyaWVzIGFzIHVu
aXRlIHJlY3QuCi0gICAgaWYgKCFtX2lucHV0RWZmZWN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0RWZmZWN0cykgewotICAgICAgICAgICAgYXV0byBp
bnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKGZpbHRlcik7Ci0gICAgICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24udW5pdGUo
aW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwotICAgICAgICB9CisgICAgLy8gSWYgdGhlcmUgaXMg
bm8gaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUgZWZmZWN0IGJvdW5kYXJpZXMgYXMgdW5pdGUgcmVj
dC4gRG9uJ3QgdXNlIHRoZSBpbnB1dCdzIHN1YnJlZ2lvbiBmb3IgRkVUaWxlLgorICAgIGlmICgh
aW5wdXRzLmlzRW1wdHkoKSAmJiBmaWx0ZXJUeXBlKCkgIT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgICAg
IHByaW1pdGl2ZVN1YnJlZ2lvbi51bml0ZShpbnB1dC0+cHJpbWl0aXZlU3VicmVnaW9uKCkpOwog
ICAgIH0gZWxzZQogICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXIuZmlsdGVyUmVn
aW9uKCk7CiAKLSAgICAvLyBEb24ndCB1c2UgdGhlIGlucHV0J3Mgc3VicmVnaW9uIGZvciBGRVRp
bGUuCi0gICAgaWYgKGZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkK
LSAgICAgICAgcHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAg
IAogICAgIC8vIENsaXAgdGhlIHByaW1pdGl2ZSBzdWJyZWdpb24gdG8gdGhlIGVmZmVjdCBnZW9t
ZXRyeS4KLSAgICBpZiAoYXV0byBnZW9tZXRyeSA9IGZpbHRlci5lZmZlY3RHZW9tZXRyeSgqdGhp
cykpIHsKKyAgICBpZiAoZ2VvbWV0cnkpIHsKICAgICAgICAgaWYgKGF1dG8geCA9IGdlb21ldHJ5
LT54KCkpCiAgICAgICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0WCgqeCk7CiAgICAgICAg
IGlmIChhdXRvIHkgPSBnZW9tZXRyeS0+eSgpKQpAQCAtNzAsNyArNjUsNiBAQCBGbG9hdFJlY3Qg
RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiAgICAgICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24uc2V0SGVpZ2h0KCpo
ZWlnaHQpOwogICAgIH0KIAotICAgIHNldEZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRp
dmVTdWJyZWdpb24pOwogICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247CiB9CiAKQEAgLTgw
LDcgKzc0LDcgQEAgRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2ln
bmVkIG51bWJlcikgY29uc3QKICAgICByZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5n
ZXQoKTsKIH0KIAotYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVy
KQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYgZ2VvbWV0cnkpCiB7CiAgICAgaWYg
KGhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMCwxNiArOTQsMTggQEAg
Ym9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIH0KIAog
ICAgIGF1dG8gaW5wdXRGaWx0ZXJJbWFnZXMgPSB0aGlzLT5pbnB1dEZpbHRlckltYWdlcygpOwot
ICAgIGF1dG8gaW1hZ2VSZWN0ID0gY2FsY3VsYXRlSW1hZ2VSZWN0KGZpbHRlciwgaW5wdXRGaWx0
ZXJJbWFnZXMsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTsKKworICAgIGF1dG8gcHJpbWl0
aXZlU3VicmVnaW9uID0gY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlciwgaW5wdXRG
aWx0ZXJJbWFnZXMsIGdlb21ldHJ5KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGNhbGN1bGF0ZUlt
YWdlUmVjdChmaWx0ZXIsIGlucHV0RmlsdGVySW1hZ2VzLCBwcmltaXRpdmVTdWJyZWdpb24pOwog
ICAgIGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKGltYWdlUmVjdCkpOwogCiAgICAgaWYgKGFic29sdXRlSW1hZ2VSZWN0
LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFn
ZVJlY3Quc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGF1dG8gaXNB
bHBoYUltYWdlID0gcmVzdWx0SXNBbHBoYUltYWdlKGlucHV0RmlsdGVySW1hZ2VzKTsKLSAgICBh
dXRvIGltYWdlQ29sb3JTcGFjZSA9IHJlc3VsdENvbG9yU3BhY2UoKTsKKyAgICBhdXRvIGltYWdl
Q29sb3JTcGFjZSA9IHJlc3VsdENvbG9yU3BhY2UoaW5wdXRGaWx0ZXJJbWFnZXMpOwogCi0gICAg
bV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdlOjpjcmVhdGUobV9maWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24sIGltYWdlUmVjdCwgYWJzb2x1dGVJbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgZmlsdGVy
LnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VDb2xvclNwYWNlKTsKKyAgICBtX2ZpbHRlckltYWdlID0g
RmlsdGVySW1hZ2U6OmNyZWF0ZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgYWJzb2x1
dGVJbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VD
b2xvclNwYWNlKTsKICAgICBpZiAoIW1fZmlsdGVySW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMTE5LDkgKzExNSw5IEBAIGJvb2wgRmlsdGVyRWZmZWN0OjphcHBseShjb25zdCBG
aWx0ZXImIGZpbHRlcikKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0KICAg
ICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8
PCAiIGFwcGx5KCk6IgotICAgICAgICA8PCAiXG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAi
IDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uCisgICAgICAgIDw8ICJcbiAgZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uICIgPDwgcHJpbWl0aXZlU3VicmVnaW9uCiAgICAgICAgIDw8ICJcbiAg
YWJzb2x1dGVQYWludFJlY3QgIiA8PCBhYnNvbHV0ZUltYWdlUmVjdAotICAgICAgICA8PCAiXG4g
IG1heEVmZmVjdFJlY3QgIiA8PCBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShmaWx0ZXIubWF4
RWZmZWN0UmVjdChtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbikpCisgICAgICAgIDw8ICJcbiAg
bWF4RWZmZWN0UmVjdCAiIDw8IGZpbHRlci5tYXhFZmZlY3RSZWN0KHByaW1pdGl2ZVN1YnJlZ2lv
bikKICAgICAgICAgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CiAKICAgICByZXR1cm4gYXBwbGllci0+YXBwbHkoZmlsdGVyLCBpbnB1dEZpbHRlckltYWdl
cywgKm1fZmlsdGVySW1hZ2UpOwpAQCAtMTczLDcgKzE2OSw2IEBAIFRleHRTdHJlYW0mIEZpbHRl
ckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UCiAgICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNlbnRhdGlvblR5cGU6
OkRlYnVnZ2luZykgewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29w
ZSh0cyk7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBv
cGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBj
b2xvcnNwYWNlIiwgcmVzdWx0Q29sb3JTcGFjZSgpKTsKICAgICAgICAgdHMgPDwgIlxuIiA8PCBp
bmRlbnQ7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDgyN2ViNWRi
ODFlOTFjOTIzNjk2OWVhNWZkOTIwMmE4Y2I5NWIzNWMuLjU2ODI3YWJiYmY3ZGZjNTNhMTAyZjQy
ODNhZmZmMDg2NTUxMjViM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMzcsNiArMzcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdEFwcGxp
ZXI7CitjbGFzcyBGaWx0ZXJFZmZlY3RHZW9tZXRyeTsKIAogY2xhc3MgRmlsdGVyRWZmZWN0IDog
cHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1YmxpYzoKQEAgLTQ1LDU4ICs0Niw1MSBAQCBwdWJs
aWM6CiAgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckltYWdlOyB9
CiAKICAgICBGaWx0ZXJJbWFnZSogZmlsdGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRl
ckltYWdlLmdldCgpOyB9Ci0gICAgRmlsdGVySW1hZ2VWZWN0b3IgaW5wdXRGaWx0ZXJJbWFnZXMo
KSBjb25zdDsKLQotICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgp
OwogCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lu
cHV0RWZmZWN0czsgfQogICAgIEZpbHRlckVmZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNv
bnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4g
bV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9CiAKLSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0g
ICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0
ZXImKTsKKyAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJik7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+JiA9IHN0ZDo6bnVsbG9wdCkgb3ZlcnJp
ZGU7CiAKLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRp
bmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBt
X29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9CisKKyAgICBlbnVtIGNsYXNzIFJl
cHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OworICAgIHZpcnR1YWwg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29u
c3Q7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rp
b247CisKKyAgICB2aXJ0dWFsIGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4
ZWxzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgY29ycmVjdFByZW11bHRp
cGxpZWRSZXN1bHRJZk5lZWRlZCgpOwogCiAgICAgLy8gQ29ycmVjdCBhbnkgaW52YWxpZCBwaXhl
bHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3VsdCBvZiBhIGZpbHRlciBvcGVyYXRpb24uCiAg
ICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdmFsaWQgcGl4ZWwgdmFsdWVzIG9u
IGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCByZXN1bHQuCiAgICAgLy8gT25seSB0aGUgYXJp
dGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8gcGVyZm9ybSBjb3JyZWN0aW9u
LgogICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSB7IH0KIAot
ICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5n
IH07Ci0gICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBl
OjpUZXN0T3V0cHV0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsgfQogCi0gICAgRmxvYXRSZWN0IGZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24gPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb247IH0KKyAgICBGaWx0ZXJJbWFnZVZl
Y3RvciBpbnB1dEZpbHRlckltYWdlcygpIGNvbnN0OworICAgIAorICAgIEZsb2F0UmVjdCBjYWxj
dWxhdGVQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYpIGNvbnN0
OwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdDsKIAotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JT
cGFjZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2Ug
PSBjb2xvclNwYWNlOyB9Ci0KICAgICAvLyBTb2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVu
dCBhbHBoYSB2YWx1ZXMuCiAgICAgdmlydHVhbCBib29sIHJlc3VsdElzQWxwaGFJbWFnZShjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogCi0gICAgdmlydHVh
bCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3Qg
aW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFj
ZSk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJik7Ci0KLXByb3RlY3RlZDoKLSAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6
RmlsdGVyRnVuY3Rpb247Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVt
dWx0aXBsaWVkUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKICAgICB2aXJ0
dWFsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNv
bnN0IEZpbHRlciYpIGNvbnN0ID0gMDsKIAotcHJpdmF0ZToKICAgICBGaWx0ZXJFZmZlY3RWZWN0
b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IG1fZmlsdGVySW1h
Z2U7CiAKLSAgICAvLyBUaGUgc3VicmVnaW9uIG9mIGEgZmlsdGVyIHByaW1pdGl2ZSBhY2NvcmRp
bmcgdG8gdGhlIFNWRyBGaWx0ZXIgc3BlY2lmaWNhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4K
LSAgICAvLyBUaGlzIGlzIFNWRyBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4KLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRp
dmVTdWJyZWdpb247Ci0KICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xv
clNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVu
Y3Rpb24uaAppbmRleCBkMjlhM2E2MDdhYTY4ZmQ1ZmQ4YTg3ZGUxOTRkZjZhNTZiNWFmNDllLi5j
OWQ2NzdhNjA4MjkyODYzNDY3YzlmYmJlYWM0MjVmZTI5ZTcxY2RhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlv
bi5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0R2VvbWV0cnkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRS
ZWN0RXh0ZW50LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTg4LDcgKzg5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBhcHBs
eShjb25zdCBGaWx0ZXImKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBhcHBs
eShjb25zdCBGaWx0ZXImLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5
PiYgPSBzdGQ6Om51bGxvcHQpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBJbnRPdXRz
ZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJSZXN1bHQoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggMTI2NDJkNjMzNWNmZDY1MmIyNmViN2ZmODc5ZDgxOTNm
NDRmNmI2ZS4uMjQ5MjI4MjA2NGNkNWY5MTdjYzE4ZGU0NzA0OGMyM2E4Yzg2NjMwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBA
IC01NCwxNSArNTQsMTMgQEAgUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZH
RmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnUKICAgICBpZiAoIWJ1aWxk
ZXIuYnVpbGRGaWx0ZXJFZmZlY3RzKGZpbHRlckVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIEZpbHRlckVmZmVjdFZlY3RvciBleHByZXNzaW9uOworICAgIFNWR0ZpbHRl
ckV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICAgICBpZiAoIWJ1aWxkZXIuYnVpbGRFeHByZXNzaW9u
KGV4cHJlc3Npb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFTU0VSVCghZXhw
cmVzc2lvbi5pc0VtcHR5KCkpOwogICAgIGZpbHRlci0+c2V0RXhwcmVzc2lvbihXVEZNb3ZlKGV4
cHJlc3Npb24pKTsKIAotICAgIGZpbHRlci0+c2V0RWZmZWN0R2VvbWV0cnlNYXAoYnVpbGRlci50
YWtlRWZmZWN0R2VvbWV0cnlNYXAoKSk7Ci0KICNpZiBVU0UoQ09SRV9JTUFHRSkKICAgICBpZiAo
IWZpbHRlci0+c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSkKICAgICAgICAgZmlsdGVyLT5z
ZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwpAQCAtOTAsOCAr
ODgsOCBAQCBib29sIFNWR0ZpbHRlcjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25z
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBBU1NFUlQoIW1fZXhwcmVzc2lvbi5pc0Vt
cHR5KCkpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9leHByZXNzaW9uKSB7Ci0gICAgICAg
IGlmICghZWZmZWN0LT5zdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpKQorICAgIGZvciAoYXV0
byYgdGVybSA6IG1fZXhwcmVzc2lvbikgeworICAgICAgICBpZiAoIXRlcm0uZWZmZWN0LT5zdXBw
b3J0c0NvcmVJbWFnZVJlbmRlcmluZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtOTksMTUgKzk3LDE0IEBAIGJvb2wgU1ZHRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZygpIGNvbnN0CiB9CiAjZW5kaWYKIAotc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZl
Y3RHZW9tZXRyeT4gU1ZHRmlsdGVyOjplZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmIGVmZmVj
dCkgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlcjo6bGFzdEVmZmVjdCgpIGNv
bnN0CiB7Ci0gICAgYXV0byBpdCA9IG1fZWZmZWN0R2VvbWV0cnlNYXAuZmluZChlZmZlY3QpOwot
ICAgIGlmIChpdCAhPSBtX2VmZmVjdEdlb21ldHJ5TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4g
aXQtPnZhbHVlOwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKG1fZXhwcmVzc2lv
bi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2V4cHJl
c3Npb24ubGFzdCgpLmVmZmVjdC5wdHIoKTsKIH0KIAotYm9vbCBTVkdGaWx0ZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYpCiB7CiAg
ICAgc2V0U291cmNlSW1hZ2UoeyBmaWx0ZXIuc291cmNlSW1hZ2UoKSB9KTsKICAgICByZXR1cm4g
YXBwbHkoKTsKQEAgLTExNiw4ICsxMTMsOCBAQCBib29sIFNWR0ZpbHRlcjo6YXBwbHkoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiBSZWZQdHI8RmlsdGVySW1hZ2U+IFNWR0ZpbHRlcjo6YXBwbHkoKQog
ewogICAgIEFTU0VSVCghbV9leHByZXNzaW9uLmlzRW1wdHkoKSk7Ci0gICAgZm9yIChhdXRvJiBl
ZmZlY3QgOiBtX2V4cHJlc3Npb24pIHsKLSAgICAgICAgaWYgKCFlZmZlY3QtPmFwcGx5KCp0aGlz
KSkKKyAgICBmb3IgKGF1dG8mIHRlcm0gOiBtX2V4cHJlc3Npb24pIHsKKyAgICAgICAgaWYgKCF0
ZXJtLmVmZmVjdC0+YXBwbHkoKnRoaXMsIHRlcm0uZ2VvbWV0cnkpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBsYXN0RWZmZWN0KCktPmZpbHRlckltYWdl
KCk7CkBAIC0xMzIsOCArMTI5LDggQEAgSW50T3V0c2V0cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBj
b25zdAogdm9pZCBTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KCkKIHsKICAgICBBU1NFUlQoIW1fZXhw
cmVzc2lvbi5pc0VtcHR5KCkpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9leHByZXNzaW9u
KQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7CisgICAgZm9yIChhdXRvJiB0ZXJtIDog
bV9leHByZXNzaW9uKQorICAgICAgICB0ZXJtLmVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA5ZjJmZTZhMjNhNWY5NTk3Mjc3MTY2ZTZhNGFhZDYx
NGE5ODY0NWI1Li5lYjU4Zjc4MWMxZTI2ZTJkZjUwZTMwNWFjZWY5MjAzMTE5YjU2MWJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAt
MjIsOCArMjIsOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNs
dWRlICJGaWx0ZXJFZmZlY3RWZWN0b3IuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJTVkdGaWx0ZXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KQEAgLTQyLDMz
ICs0MiwyOCBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKLSAgICBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBsYXN0RWZmZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIW1fZXhwcmVzc2lvbi5p
c0VtcHR5KCkgPyBtX2V4cHJlc3Npb24ubGFzdCgpIDogbnVsbHB0cjsgfQorICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdCBmaW5hbDsKIAogICAgIFJlZlB0cjxGaWx0
ZXJJbWFnZT4gYXBwbHkoKSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBTVkdGaWx0ZXIoUmVuZGVy
aW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpOwogCi0gICAg
Ly8gRklYTUU6IE1lcmdlIHRoZSBlZmZlY3RCb3VuZGFyaWVzIGluIHRoZSBleHByZXNzaW9uIG5v
ZGUuCi0gICAgdm9pZCBzZXRFeHByZXNzaW9uKEZpbHRlckVmZmVjdFZlY3RvciYmIGV4cHJlc3Np
b24pIHsgbV9leHByZXNzaW9uID0gV1RGTW92ZShleHByZXNzaW9uKTsgfQotICAgIHZvaWQgc2V0
RWZmZWN0R2VvbWV0cnlNYXAoRmlsdGVyRWZmZWN0R2VvbWV0cnlNYXAmJiBlZmZlY3RHZW9tZXRy
eU1hcCkgeyBtX2VmZmVjdEdlb21ldHJ5TWFwID0gV1RGTW92ZShlZmZlY3RHZW9tZXRyeU1hcCk7
IH0KKyAgICB2b2lkIHNldEV4cHJlc3Npb24oU1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Np
b24pIHsgbV9leHByZXNzaW9uID0gV1RGTW92ZShleHByZXNzaW9uKTsgfQogCiAjaWYgVVNFKENP
UkVfSU1BR0UpCiAgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IGZp
bmFsOwogI2VuZGlmCi0gICAgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZWZm
ZWN0R2VvbWV0cnkoRmlsdGVyRWZmZWN0JikgY29uc3QgZmluYWw7CiAgICAgRmxvYXRTaXplIHJl
c29sdmVkU2l6ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgYXBw
bHkoY29uc3QgRmlsdGVyJikgZmluYWw7CisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYgPSBzdGQ6Om51bGxvcHQp
IGZpbmFsOwogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQg
Y2xlYXJSZXN1bHQoKSBmaW5hbDsKIAogICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94
OwogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVVbml0czsKIAotICAg
IC8vIEZJWE1FOiBNYWtlIG1fZXhwcmVzc2lvbiBhIFZlY3RvciBvZiB0aGUgRmlsdGVyRWZmZWN0
IGFuZCB0aGUgZWZmZWN0Qm91bmRhcmllcy4KLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9leHBy
ZXNzaW9uOwotICAgIEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwIG1fZWZmZWN0R2VvbWV0cnlNYXA7
CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBtX2V4cHJlc3Npb247CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDUwZWUxYTA2YzEzZDNlNWM0N2I3OGFm
ZTRlYmEwNmY2NWE4YWVjMDYuLmJiNzVmMzhjNmUxNDI3MWJmYWQ1MjRjY2M2ZWJiNjJhZDFjMThi
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0yMDEsNyArMjAxLDE1IEBAIHZvaWQgU1ZHRmlsdGVy
QnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQogICAg
ICAgICBjbGVhclJlc3VsdHNSZWN1cnNpdmUocmVmZXJlbmNlKTsKIH0KIAotc3RhdGljIGJvb2wg
YnVpbGRFZmZlY3RFeHByZXNzaW9uKGNvbnN0IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3Qs
IEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIEZpbHRlckVmZmVjdFZlY3RvciYgZXhwcmVzc2lv
bikKK3N0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IFNWR0ZpbHRlckJ1aWxkZXI6
OmVmZmVjdEdlb21ldHJ5KEZpbHRlckVmZmVjdCYgZWZmZWN0KSBjb25zdAoreworICAgIGF1dG8g
aXQgPSBtX2VmZmVjdEdlb21ldHJ5TWFwLmZpbmQoZWZmZWN0KTsKKyAgICBpZiAoaXQgIT0gbV9l
ZmZlY3RHZW9tZXRyeU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZm
ZWN0RXhwcmVzc2lvbihjb25zdCBSZWZQdHI8RmlsdGVyRWZmZWN0PiYgZWZmZWN0LCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIHN0YWNrLCBTVkdGaWx0ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKSBjb25z
dAogewogICAgIC8vIEEgY3ljbGUgaXMgZGV0ZWN0ZWQuCiAgICAgaWYgKHN0YWNrLmNvbnRhaW5z
KGVmZmVjdCkpCkBAIC0yMDksNyArMjE3LDcgQEAgc3RhdGljIGJvb2wgYnVpbGRFZmZlY3RFeHBy
ZXNzaW9uKGNvbnN0IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVmZmUKIAog
ICAgIHN0YWNrLmFwcGVuZChlZmZlY3QpOwogICAgIAotICAgIGV4cHJlc3Npb24uYXBwZW5kKGVm
ZmVjdCk7CisgICAgZXhwcmVzc2lvbi5hcHBlbmQoeyAqZWZmZWN0LCBlZmZlY3RHZW9tZXRyeSgq
ZWZmZWN0KSB9KTsKIAogICAgIGZvciAoYXV0byYgaW5wdXRFZmZlY3QgOiBlZmZlY3QtPmlucHV0
RWZmZWN0cygpKSB7CiAgICAgICAgIGlmICghYnVpbGRFZmZlY3RFeHByZXNzaW9uKGlucHV0RWZm
ZWN0LCBzdGFjaywgZXhwcmVzc2lvbikpCkBAIC0yMjMsNyArMjMxLDcgQEAgc3RhdGljIGJvb2wg
YnVpbGRFZmZlY3RFeHByZXNzaW9uKGNvbnN0IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3Qs
IEZpbHRlckVmZmUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTVkdGaWx0ZXJCdWlsZGVy
OjpidWlsZEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKSBjb25zdAor
Ym9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oU1ZHRmlsdGVyRXhwcmVzc2lv
biYgZXhwcmVzc2lvbikgY29uc3QKIHsKICAgICBpZiAoIW1fbGFzdEVmZmVjdCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGZiOWRjZDc4ZjlkOTNlZmJkMTgzMmE1ZWY0
YTVjNDMwNjJjNjU3YzUuLjE4ODg0NTBjNWVkZmM2NzNiMjFiNTcxNGI2YWI3YWY2ZDRmNGY5M2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogI2lu
Y2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTY4LDkgKzY5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOwogICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50
Jik7Ci0gICAgYm9vbCBidWlsZEV4cHJlc3Npb24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNz
aW9uKSBjb25zdDsKLQotICAgIEZpbHRlckVmZmVjdEdlb21ldHJ5TWFwIHRha2VFZmZlY3RHZW9t
ZXRyeU1hcCgpIHsgcmV0dXJuIFdURk1vdmUobV9lZmZlY3RHZW9tZXRyeU1hcCk7IH0KKyAgICBi
b29sIGJ1aWxkRXhwcmVzc2lvbihTVkdGaWx0ZXJFeHByZXNzaW9uJikgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMoKQpAQCAtNzksNiArNzgsOSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZp
bHRlckVmZmVjdFNldCgpKTsKICAgICB9CiAKKyAgICBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVj
dEdlb21ldHJ5PiBlZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmKSBjb25zdDsKKyAgICBib29s
IGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihjb25zdCBSZWZQdHI8RmlsdGVyRWZmZWN0PiYsIEZpbHRl
ckVmZmVjdFZlY3RvciYgc3RhY2ssIFNWR0ZpbHRlckV4cHJlc3Npb24mKSBjb25zdDsKKwogICAg
IEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVj
dHM7CiAgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1l
ZEVmZmVjdHM7CiAgICAgLy8gVGhlIHZhbHVlIGlzIGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhv
c2UgZmlsdGVyIGVmZmVjdHMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRkY2M3MmRi
YWE2OGU4NGY3MTIyNGQ0NjdjNzEyNmM2ZDA3MTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaApAQCAt
MCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsK
Kworc3RydWN0IFNWR0ZpbHRlckV4cHJlc3Npb25UZXJtIHsKKyAgICBSZWY8RmlsdGVyRWZmZWN0
PiBlZmZlY3Q7CisgICAgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZ2VvbWV0
cnk7Cit9OworCit1c2luZyBTVkdGaWx0ZXJFeHByZXNzaW9uID0gVmVjdG9yPFNWR0ZpbHRlckV4
cHJlc3Npb25UZXJtPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446057</attachid>
            <date>2021-12-06 11:03:36 -0800</date>
            <delta_ts>2021-12-06 13:19:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211206110336.patch</filename>
            <type>text/plain</type>
            <size>32328</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc1NzNlMWJmNGQ3YzEy
NGY3ZDc1Mzc1MDc5NTgxZTU3ZTA5MWIxOS4uNGNmOGM4ODg5MzQ0NjZhYzZlYTFmMjZmNWZjNjlm
MDg2MjNjMGI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDIxLTEyLTA2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TWFrZSBGaWx0ZXJFZmZlY3QgY2FsY3VsYXRlIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIG9ubHkg
d2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMjcwNQorICAgICAgICByZGFyOi8vODUyOTAxNDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoOgorCisgICAgICAgIDEu
IHJlc3VsdENvbG9yU3BhY2UoKSB3aWxsIHJldHVybiBjb2xvclNwYWNlKCkgZnJvbSBhIEZpbHRl
ckltYWdlVmVjdG9yCisgICAgICAgICAgIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSByZXN1bHRD
b2xvclNwYWNlKCkgb2YgdGhlIEZpbHRlckVmZmVjdC4KKworICAgICAgICAyLiBGaWx0ZXI6OmNs
YW1wRmlsdGVyUmVnaW9uSWZOZWVkZWQoKSB3aWxsIGNsYW1wIHRoZSBmaWx0ZXJSZWdpb24oKSAK
KyAgICAgICAgICAgaW5zdGVhZCBvZiBjbGFtcGluZyB0aGUgbWF4RWZmZWN0UmVjdCBvZiB0aGUg
bGFzdEVmZmVjdCgpIHNpbmNlIGFsbAorICAgICAgICAgICB0aGUgcHJpbWl0aXZlU3VicmVnaW9u
cyBhbmQgdGhlIGltYWdlUmVjdHMgaGF2ZSB0byBjbGlwcGVkIHRvIHRoZQorICAgICAgICAgICBm
aWx0ZXJSZWdpb24oKS4KKworICAgICAgICAzLiBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKSBpcyByZXBsYWNlZCBieSBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oKQorICAg
ICAgICAgICB3aGljaCB3aWxsIGNhbGN1bGF0ZSB0aGUgcHJpbWl0aXZlU3VicmVnaW9uIGZyb20g
YSBGaWx0ZXJJbWFnZVZlY3RvcgorICAgICAgICAgICBhbmQgYW4gb3B0aW9uYWwgRmlsdGVyRWZm
ZWN0R2VvbWV0cnkuCisKKyAgICAgICAgNC4gTWFueSBvZiBGaWx0ZXJFZmZlY3RzIGFyZSBtYWRl
IHByb3RlY3RlZCBpbnN0ZWFkIG9mIGhhdmluZyB0aGVtIHB1YmxpYy4KKworICAgICAgICA1LiBT
VkdGaWx0ZXJFeHByZXNzaW9uIHdpbGwgYmUgZGVmaW5lZCBhcyBhIFZlY3RvciBvZiBTVkdGaWx0
ZXJFeHByZXNzaW9uVGVybQorICAgICAgICAgICB3aGljaCBpcyBhIHN0cnVjdCBvZiBGaWx0ZXJF
ZmZlY3QgYW5kIG9wdGlvbmFsIEZpbHRlckVmZmVjdEdlb21ldHJ5LgorCisgICAgICAgIDYuIFNW
R0ZpbHRlciB3aWxsIHJlcGxhY2UgdGhlIG1lbWJlcnMgd2hvc2UgdHlwZXMgYXJlIEZpbHRlckVm
ZmVjdFZlY3RvcgorICAgICAgICAgICBhbmQgRmlsdGVyRWZmZWN0R2VvbWV0cnlNYXAgd2l0aCBh
IHNpbmdsZSBtZW1iZXIgb2YgdHlwZSBTVkdGaWx0ZXJFeHByZXNzaW9uLgorCisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXI6OmNsYW1wRmlsdGVyUmVnaW9uSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmVmZmVj
dEdlb21ldHJ5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0Q29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldEZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmFw
cGx5KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXI6Omxhc3RFZmZlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RmlsdGVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6ZWZmZWN0R2VvbWV0cnkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6ZWZmZWN0R2VvbWV0cnkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFZmZlY3RFeHByZXNzaW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEVmZmVjdEV4cHJlc3Npb24pOiBEZWxl
dGVkLgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnRha2VFZmZlY3RHZW9tZXRyeU1h
cCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oOiBBZGRlZC4KKwogMjAyMS0xMi0wNiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlk
QGFwcGxlLmNvbT4KICAgICAgICAgW0dQVSBQcm9jZXNzXSAoUkVHUkVTU0lPTiByMjg1NTk3KTog
U2V0IHRoZSBmaWx0ZXJSZWdpb24gb2YgdGhlIENTU0ZpbHRlciBhZnRlciBpdCBpcyBjcmVhdGVk
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM4NDkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA2ZGIwMWI1YTBjZGY1ZmE2ODdkMzJlM2YxNTQzYjFjNGNjOTg4ZDFiLi4xNTQ0MTRkNmI3
ZjlkZTEzMWRhODRiZmEwODkyNDJkYzg4YmE5MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzE0LDYgKzIzMTQsNyBAQAog
CQk3Mjk5QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4
ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjlEMDUz
MDI1MzE0MjQzMDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlEMDUyRTI1MzEzRTI2
MDA0MjIwOTggLyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBNUQxOTIyNzVFOEZGRTAwNjU4
MzNFIC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkNERTI1Mjc1QjQ4OTcwMEE0NDVCMiAvKiBTVkdGaWx0ZXJF
eHByZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzJBNzNCRUYyNDVBM0Y5MDAwMUM5RDAzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIyQTgxNUMyMzhG
RDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyQjhCMDM1Mjc1MzQzODYwMEY3NTJBQSAv
KiBGaWx0ZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI2MkQ3NTYyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJCOEIwMzYy
NzUzNDQxNDAwRjc1MkFBIC8qIEZpbHRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVy
SW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTExODcsNiArMTExODgsNyBAQAogCQk3MjY2RjAyODIyNDMxMjAzMDA4MzM5NzUgLyogU1ZH
QW5pbWF0aW9uQWRkaXRpdmVMaXN0RnVuY3Rpb25JbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGlvbkFkZGl0aXZlTGlzdEZ1bmN0aW9uSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjY2RjAyOTIyNDMxMkIxMDA4MzM5NzUgLyogU1ZHQW5pbWF0aW9uQWRkaXRpdmVM
aXN0RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0aW9uQWRkaXRpdmVMaXN0RnVu
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMkEyMjQzMTQ5QjAw
ODMzOTc1IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGVkUHJvcGVydHlMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkNE
RTI1Mjc1QjQ4OTcwMEE0NDVCMiAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR0ZpbHRlckV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI2RDU2RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVE
MTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
Mjg0MjYsNiArMjg0MjgsNyBAQAogCQkJCTg0NUU3MkZBMEZEMjYyMzkwMEE4N0Q3OSAvKiBTVkdG
aWx0ZXIuaCAqLywKIAkJCQkwODFFQkYzODBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVp
bGRlci5jcHAgKi8sCiAJCQkJMDgxRUJGMzkwRkQzNEY0MTAwREE3NTU5IC8qIFNWR0ZpbHRlckJ1
aWxkZXIuaCAqLywKKwkJCQk3MjZDREUyNTI3NUI0ODk3MDBBNDQ1QjIgLyogU1ZHRmlsdGVyRXhw
cmVzc2lvbi5oICovLAogCQkJKTsKIAkJCXBhdGggPSBmaWx0ZXJzOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTM3MTIxLDYgKzM3MTI0LDcgQEAKIAkJCQk4NDVFNzJGQzBGRDI2MjM5
MDBBODdENzkgLyogU1ZHRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODFFQkYzQjBGRDM0
RjQxMDBEQTc1NTkgLyogU1ZHRmlsdGVyQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
MjdBMEMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTcyQTVEMTkyMjc1RThGRkUwMDY1ODMzRSAvKiBTVkdGaWx0ZXJFeHByZXNzaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0EwRjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0Ex
MjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMkExRjJBQjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCA3YmI2YTJlYzVjNTRmY2UzYjgx
MjIwNDRlNDM1ZjFkMjc2YzhkYjNiLi5mZTYxZDkyYTkyN2M0ZjAxMGJkYjkxMzA5ZjQ1MjkzMzQz
NjRmM2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtNjgsMTMgKzY4LDEzIEBA
IGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQogICAgIHJldHVy
biB0cnVlOwogfQogCi1jb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50
TWFwOjpyZXN1bHRDb2xvclNwYWNlKCkgY29uc3QKK2NvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgRkVEaXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UoY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cykgY29uc3QKIHsKICAgICAvLyBTcGVjOiBUaGUgJ2NvbG9yLWludGVycG9s
YXRpb24tZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRoZSAnaW4yJyBzb3VyY2Ug
aW1hZ2UKICAgICAvLyBhbmQgZG9lcyBub3QgYXBwbHkgdG8gdGhlICdpbicgc291cmNlIGltYWdl
LiBUaGUgJ2luJyBzb3VyY2UgaW1hZ2UgbXVzdCByZW1haW4gaW4gaXRzCiAgICAgLy8gY3VycmVu
dCBjb2xvciBzcGFjZS4KICAgICAvLyBUaGUgcmVzdWx0IGlzIGluIHRoYXQgc2FtZSBjb2xvciBz
cGFjZSBiZWNhdXNlIGl0IGlzIGEgZGlzcGxhY2VtZW50IG9mIHRoZSAnaW4nIGltYWdlLgotICAg
IHJldHVybiBpbnB1dEVmZmVjdCgwKS0+cmVzdWx0Q29sb3JTcGFjZSgpOworICAgIHJldHVybiBp
bnB1dHNbMF0tPmNvbG9yU3BhY2UoKTsKIH0KIAogdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW5kZXgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggMzgyNmFhY2NiZjI3Y2NjMjgxZGE3ZTc0MWIx
NDVlYzAwZmVhZDUxYS4uNDJlNjViMmUxYjY1YTg2Y2MxMDg0MjZmN2YxZmE0M2U4MzMzYzU0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxT
ZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CiAK
LSAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25z
dCBvdmVycmlkZTsKKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9y
U3BhY2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBvdmVy
cmlkZTsKIAogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwg
Y29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCmluZGV4IDczM2FmNjYxOWY0MWRkMWU1
MDlkYjY4ZWE0YmZlODc1YzI4NzZhM2YuLmJlNGYyOWNjNTY5ZjZlNTU1Yzc5OTNkYzViZThmYmU4
Y2M3YWU0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTcxLDIxICs3MSwxMyBAQCBGbG9hdFJlY3QgRmlsdGVyOjpj
bGlwVG9NYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9h
dFJlYwogCiBib29sIEZpbHRlcjo6Y2xhbXBGaWx0ZXJSZWdpb25JZk5lZWRlZCgpCiB7Ci0gICAg
YXV0byBsYXN0RWZmZWN0ID0gdGhpcy0+bGFzdEVmZmVjdCgpOwotICAgIGxhc3RFZmZlY3QtPmRl
dGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigqdGhpcyk7Ci0gICAgCi0gICAgYXV0byBt
YXhFZmZlY3RSZWN0ID0gdGhpcy0+bWF4RWZmZWN0UmVjdChsYXN0RWZmZWN0LT5maWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKSk7Ci0gICAgYXV0byBzY2FsZWRNYXhFZmZlY3RSZWN0ID0gc2NhbGVk
QnlGaWx0ZXJTY2FsZShtYXhFZmZlY3RSZWN0KTsKKyAgICBhdXRvIHNjYWxlZEZpbHRlclJlZ2lv
biA9IHNjYWxlZEJ5RmlsdGVyU2NhbGUobV9maWx0ZXJSZWdpb24pOwogCiAgICAgRmxvYXRTaXpl
IGNsYW1waW5nU2NhbGUoMSwgMSk7Ci0gICAgaWYgKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkTWF4RWZmZWN0UmVjdC5zaXplKCksIGNsYW1waW5nU2NhbGUpKQorICAgIGlm
ICghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHNjYWxlZEZpbHRlclJlZ2lvbi5zaXpl
KCksIGNsYW1waW5nU2NhbGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2ZpbHRl
clNjYWxlID0gbV9maWx0ZXJTY2FsZSAqIGNsYW1waW5nU2NhbGU7Ci0KLSAgICAvLyBBdCBsZWFz
dCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKLSAgICAvLyByZWNh
bGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgbGFz
dEVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCp0aGlzKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggMTYyYWJlNjcyOTQxOGI0ZjNmMDI1NjI5OGU1YjY2OGVj
ZGFhODE4Yi4uMjlkYzdmZjc4YzYwNmM3Y2YzZmExYWFiZTY5MzdkNGM3M2JlZTg2MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBA
IC02Myw4ICs2Myw2IEBAIHB1YmxpYzoKICAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2Fs
ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKICAgICBGbG9hdFJlY3Qgc2NhbGVkQnlGaWx0ZXJT
Y2FsZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25h
bDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZWZmZWN0R2VvbWV0cnkoRmlsdGVyRWZmZWN0JikgY29u
c3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9Ci0KICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVj
dChjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Q7CiAgICAgRmxvYXRS
ZWN0IGNsaXBUb01heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3Bw
CmluZGV4IDBhZTk0ZDUwNmUxNDFlZGYzNDM0YWRiNjI0Yzg2YzUzMjIyNjNkMzEuLmRhMWNhMTQx
MmQ0NDc0ODlmZjkxZjdhYjY4ZjZmNTMzMzNkZGMxODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAg
LTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdEFwcGxpZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTQwLDI2ICs0MSwyMCBAQCBGbG9hdFJlY3QgRmlsdGVyRWZm
ZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRl
ckltYQogICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHBy
aW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKLUZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVj
dCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3Qgc3RkOjpvcHRp
b25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4mIGdlb21ldHJ5KSBjb25zdAogewogICAgIC8vIFRo
aXMgZnVuY3Rpb24gaW1wbGVtZW50cyBodHRwczovL3d3dy53My5vcmcvVFIvZmlsdGVyLWVmZmVj
dHMtMS8jRmlsdGVyUHJpbWl0aXZlU3ViUmVnaW9uLgogICAgIEZsb2F0UmVjdCBwcmltaXRpdmVT
dWJyZWdpb247CiAKLSAgICAvLyBJZiB0aGVyZSBpcyBubyBpbnB1dCBlZmZlY3RzLCB0YWtlIHRo
ZSBlZmZlY3QgYm91bmRhcmllcyBhcyB1bml0ZSByZWN0LgotICAgIGlmICghbV9pbnB1dEVmZmVj
dHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVj
dHMpIHsKLSAgICAgICAgICAgIGF1dG8gaW5wdXRQcmltaXRpdmVTdWJyZWdpb24gPSBlZmZlY3Qt
PmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIpOwotICAgICAgICAgICAg
cHJpbWl0aXZlU3VicmVnaW9uLnVuaXRlKGlucHV0UHJpbWl0aXZlU3VicmVnaW9uKTsKLSAgICAg
ICAgfQorICAgIC8vIElmIHRoZXJlIGlzIG5vIGlucHV0IGVmZmVjdHMsIHRha2UgdGhlIGVmZmVj
dCBib3VuZGFyaWVzIGFzIHVuaXRlIHJlY3QuIERvbid0IHVzZSB0aGUgaW5wdXQncyBzdWJyZWdp
b24gZm9yIEZFVGlsZS4KKyAgICBpZiAoIWlucHV0cy5pc0VtcHR5KCkgJiYgZmlsdGVyVHlwZSgp
ICE9IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVUaWxlKSB7CisgICAgICAgIGZvciAoYXV0byYgaW5w
dXQgOiBpbnB1dHMpCisgICAgICAgICAgICBwcmltaXRpdmVTdWJyZWdpb24udW5pdGUoaW5wdXQt
PnByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKICAgICB9IGVsc2UKICAgICAgICAgcHJpbWl0aXZlU3Vi
cmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwogCi0gICAgLy8gRG9uJ3QgdXNlIHRoZSBp
bnB1dCdzIHN1YnJlZ2lvbiBmb3IgRkVUaWxlLgotICAgIGlmIChmaWx0ZXJUeXBlKCkgPT0gRmls
dGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpCi0gICAgICAgIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZp
bHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICAKICAgICAvLyBDbGlwIHRoZSBwcmltaXRpdmUgc3Vi
cmVnaW9uIHRvIHRoZSBlZmZlY3QgZ2VvbWV0cnkuCi0gICAgaWYgKGF1dG8gZ2VvbWV0cnkgPSBm
aWx0ZXIuZWZmZWN0R2VvbWV0cnkoKnRoaXMpKSB7CisgICAgaWYgKGdlb21ldHJ5KSB7CiAgICAg
ICAgIGlmIChhdXRvIHggPSBnZW9tZXRyeS0+eCgpKQogICAgICAgICAgICAgcHJpbWl0aXZlU3Vi
cmVnaW9uLnNldFgoKngpOwogICAgICAgICBpZiAoYXV0byB5ID0gZ2VvbWV0cnktPnkoKSkKQEAg
LTcwLDcgKzY1LDYgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICAgICAgcHJpbWl0
aXZlU3VicmVnaW9uLnNldEhlaWdodCgqaGVpZ2h0KTsKICAgICB9CiAKLSAgICBzZXRGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24ocHJpbWl0aXZlU3VicmVnaW9uKTsKICAgICByZXR1cm4gcHJpbWl0
aXZlU3VicmVnaW9uOwogfQogCkBAIC04MCw3ICs3NCw3IEBAIEZpbHRlckVmZmVjdCogRmlsdGVy
RWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0CiAgICAgcmV0dXJuIG1f
aW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7CiB9CiAKLWJvb2wgRmlsdGVyRWZmZWN0Ojph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgRmlsdGVyRWZmZWN0OjphcHBseShjb25z
dCBGaWx0ZXImIGZpbHRlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRy
eT4mIGdlb21ldHJ5KQogewogICAgIGlmIChoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMDAsMTYgKzk0LDE4IEBAIGJvb2wgRmlsdGVyRWZmZWN0OjphcHBseShjb25zdCBG
aWx0ZXImIGZpbHRlcikKICAgICB9CiAKICAgICBhdXRvIGlucHV0RmlsdGVySW1hZ2VzID0gdGhp
cy0+aW5wdXRGaWx0ZXJJbWFnZXMoKTsKLSAgICBhdXRvIGltYWdlUmVjdCA9IGNhbGN1bGF0ZUlt
YWdlUmVjdChmaWx0ZXIsIGlucHV0RmlsdGVySW1hZ2VzLCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbik7CisKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2
ZVN1YnJlZ2lvbihmaWx0ZXIsIGlucHV0RmlsdGVySW1hZ2VzLCBnZW9tZXRyeSk7CisgICAgYXV0
byBpbWFnZVJlY3QgPSBjYWxjdWxhdGVJbWFnZVJlY3QoZmlsdGVyLCBpbnB1dEZpbHRlckltYWdl
cywgcHJpbWl0aXZlU3VicmVnaW9uKTsKICAgICBhdXRvIGFic29sdXRlSW1hZ2VSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShpbWFnZVJlY3QpKTsKIAog
ICAgIGlmIChhYnNvbHV0ZUltYWdlUmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKGFic29sdXRlSW1hZ2VSZWN0LnNpemUoKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHJlc3VsdElzQWxwaGFJbWFnZShp
bnB1dEZpbHRlckltYWdlcyk7Ci0gICAgYXV0byBpbWFnZUNvbG9yU3BhY2UgPSByZXN1bHRDb2xv
clNwYWNlKCk7CisgICAgYXV0byBpbWFnZUNvbG9yU3BhY2UgPSByZXN1bHRDb2xvclNwYWNlKGlu
cHV0RmlsdGVySW1hZ2VzKTsKIAotICAgIG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3Jl
YXRlKG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGFic29sdXRlSW1hZ2VS
ZWN0LCBpc0FscGhhSW1hZ2UsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksIGltYWdlQ29sb3JTcGFj
ZSk7CisgICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdlOjpjcmVhdGUocHJpbWl0aXZlU3Vi
cmVnaW9uLCBpbWFnZVJlY3QsIGFic29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIGZpbHRl
ci5yZW5kZXJpbmdNb2RlKCksIGltYWdlQ29sb3JTcGFjZSk7CiAgICAgaWYgKCFtX2ZpbHRlcklt
YWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTExOSw5ICsxMTUsOSBAQCBib29sIEZp
bHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAKICAgICBMT0dfV0lUSF9T
VFJFQU0oRmlsdGVycywgc3RyZWFtCiAgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0
ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOiIKLSAgICAgICAgPDwgIlxuICBm
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbgor
ICAgICAgICA8PCAiXG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IHByaW1pdGl2ZVN1
YnJlZ2lvbgogICAgICAgICA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgYWJzb2x1dGVJ
bWFnZVJlY3QKLSAgICAgICAgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyU2NhbGUoZmlsdGVyLm1heEVmZmVjdFJlY3QobV9maWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24pKQorICAgICAgICA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBmaWx0ZXIubWF4RWZm
ZWN0UmVjdChwcmltaXRpdmVTdWJyZWdpb24pCiAgICAgICAgIDw8ICJcbiAgZmlsdGVyIHNjYWxl
ICIgPDwgZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogCiAgICAgcmV0dXJuIGFwcGxpZXItPmFwcGx5
KGZpbHRlciwgaW5wdXRGaWx0ZXJJbWFnZXMsICptX2ZpbHRlckltYWdlKTsKQEAgLTE3Myw3ICsx
NjksNiBAQCBUZXh0U3RyZWFtJiBGaWx0ZXJFZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVAogICAgIGlmIChyZXByZXNlbnRhdGlvblR5
cGUgPT0gUmVwcmVzZW50YXRpb25UeXBlOjpEZWJ1Z2dpbmcpIHsKICAgICAgICAgVGV4dFN0cmVh
bTo6SW5kZW50U2NvcGUgaW5kZW50U2NvcGUodHMpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHko
Im9wZXJhdGluZyBjb2xvcnNwYWNlIiwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJyZXN1bHQgY29sb3JzcGFjZSIsIHJlc3VsdENvbG9yU3BhY2UoKSk7
CiAgICAgICAgIHRzIDw8ICJcbiIgPDwgaW5kZW50OwogICAgIH0KICAgICByZXR1cm4gdHM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaAppbmRleCA4MjdlYjVkYjgxZTkxYzkyMzY5NjllYTVmZDkyMDJhOGNiOTViMzVj
Li41NjgyN2FiYmJmN2RmYzUzYTEwMmY0MjgzYWZmZjA4NjU1MTI1YjNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGaWx0ZXI7
CiBjbGFzcyBGaWx0ZXJFZmZlY3RBcHBsaWVyOworY2xhc3MgRmlsdGVyRWZmZWN0R2VvbWV0cnk7
CiAKIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6
CkBAIC00NSw1OCArNDYsNTEgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3Qg
eyByZXR1cm4gbV9maWx0ZXJJbWFnZTsgfQogCiAgICAgRmlsdGVySW1hZ2UqIGZpbHRlckltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJJbWFnZS5nZXQoKTsgfQotICAgIEZpbHRlckltYWdl
VmVjdG9yIGlucHV0RmlsdGVySW1hZ2VzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGNvcnJlY3RQcmVt
dWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKIAogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3Qq
IGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVj
dElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQogCi0gICAg
Ly8gUmVjdXJzZXMgb24gaW5wdXRzLgotICAgIEZsb2F0UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJik7CisgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworCisgICAgYm9vbCBhcHBs
eShjb25zdCBGaWx0ZXImLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5
PiYgPSBzdGQ6Om51bGxvcHQpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBhcHBseShjb25zdCBGaWx0
ZXImKSBvdmVycmlkZTsKKyAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0gY29sb3JTcGFj
ZTsgfQorCisgICAgZW51bSBjbGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBE
ZWJ1Z2dpbmcgfTsKKyAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRh
dGlvblR5cGU6OlRlc3RPdXRwdXQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgRmls
dGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOworCisgICAgdmlydHVhbCBib29sIG1heVByb2R1
Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisK
KyAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKIAogICAgIC8v
IENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQg
b2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5z
dXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVz
dWx0LgogICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5l
ZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRl
clJlc3VsdElmTmVlZGVkKCkgeyB9CiAKLSAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlw
ZSB7IFRlc3RPdXRwdXQsIERlYnVnZ2luZyB9OwotICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSA9IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3Qg
aW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFj
ZSk7IH0KIAotICAgIEZsb2F0UmVjdCBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKSBjb25zdCB7
IHJldHVybiBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbjsgfQotICAgIHZvaWQgc2V0RmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKSB7IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uOyB9CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgaW5wdXRGaWx0ZXJJbWFnZXMoKSBjb25zdDsK
KyAgICAKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3Qgc3RkOjpvcHRpb25hbDxGaWx0
ZXJFZmZlY3RHZW9tZXRyeT4mKSBjb25zdDsKIAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1
bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5w
dXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Q7CiAKLSAgICBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Up
IHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQotCiAgICAgLy8gU29saWQg
YmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgogICAgIHZpcnR1YWwgYm9v
bCByZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBy
ZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9
CisgICAgdmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3Bh
Y2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0Nv
bG9yU3BhY2U7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNl
KEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgdXNpbmcgRmlsdGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOwotCi0gICAgdmlydHVhbCBi
b29sIG1heVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgCiAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0
QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCA9IDA7CiAKLXByaXZh
dGU6CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCiAgICAgUmVmUHRy
PEZpbHRlckltYWdlPiBtX2ZpbHRlckltYWdlOwogCi0gICAgLy8gVGhlIHN1YnJlZ2lvbiBvZiBh
IGZpbHRlciBwcmltaXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBTVkcgRmlsdGVyIHNwZWNpZmljYXRp
b24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gVGhpcyBpcyBTVkcgc3BlY2lmaWMgYW5k
IG5lZWRzIHRvIG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCi0gICAg
RmxvYXRSZWN0IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOwotCiAgICAgRGVzdGluYXRpb25D
b2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKaW5kZXggZDI5YTNhNjA3YWE2OGZkNWZk
OGE4N2RlMTk0ZGY2YTU2YjVhZjQ5ZS4uYzlkNjc3YTYwODI5Mjg2MzQ2N2M5ZmJiZWFjNDI1ZmUy
OWU3MWNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEdlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CkBAIC04OCw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlm
CiAKLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJikgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3Qgc3RkOjpvcHRp
b25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4mID0gc3RkOjpudWxsb3B0KSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4geyB9
OyB9CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyUmVzdWx0KCkgeyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDEyNjQyZDYz
MzVjZmQ2NTJiMjZlYjdmZjg3OWQ4MTkzZjQ0ZjZiNmUuLjI0OTIyODIwNjRjZDVmOTE3Y2MxOGRl
NDcwNDhjMjNhOGM4NjYzMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtNTQsMTUgKzU0LDEzIEBAIFJlZlB0cjxTVkdGaWx0
ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNW
R0ZpbHRlckJ1CiAgICAgaWYgKCFidWlsZGVyLmJ1aWxkRmlsdGVyRWZmZWN0cyhmaWx0ZXJFbGVt
ZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBGaWx0ZXJFZmZlY3RWZWN0b3Ig
ZXhwcmVzc2lvbjsKKyAgICBTVkdGaWx0ZXJFeHByZXNzaW9uIGV4cHJlc3Npb247CiAgICAgaWYg
KCFidWlsZGVyLmJ1aWxkRXhwcmVzc2lvbihleHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBBU1NFUlQoIWV4cHJlc3Npb24uaXNFbXB0eSgpKTsKICAgICBmaWx0ZXIt
PnNldEV4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSk7CiAKLSAgICBmaWx0ZXItPnNldEVm
ZmVjdEdlb21ldHJ5TWFwKGJ1aWxkZXIudGFrZUVmZmVjdEdlb21ldHJ5TWFwKCkpOwotCiAjaWYg
VVNFKENPUkVfSU1BR0UpCiAgICAgaWYgKCFmaWx0ZXItPnN1cHBvcnRzQ29yZUltYWdlUmVuZGVy
aW5nKCkpCiAgICAgICAgIGZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKQEAgLTkwLDggKzg4LDggQEAgYm9vbCBTVkdGaWx0ZXI6OnN1cHBvcnRz
Q29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
QVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6
IG1fZXhwcmVzc2lvbikgewotICAgICAgICBpZiAoIWVmZmVjdC0+c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoKSkKKyAgICBmb3IgKGF1dG8mIHRlcm0gOiBtX2V4cHJlc3Npb24pIHsKKyAgICAg
ICAgaWYgKCF0ZXJtLmVmZmVjdC0+c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk5LDE1ICs5NywxNCBAQCBib29sIFNW
R0ZpbHRlcjo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdAogfQogI2VuZGlmCiAK
LXN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+IFNWR0ZpbHRlcjo6ZWZmZWN0R2Vv
bWV0cnkoRmlsdGVyRWZmZWN0JiBlZmZlY3QpIGNvbnN0CitSZWZQdHI8RmlsdGVyRWZmZWN0PiBT
VkdGaWx0ZXI6Omxhc3RFZmZlY3QoKSBjb25zdAogewotICAgIGF1dG8gaXQgPSBtX2VmZmVjdEdl
b21ldHJ5TWFwLmZpbmQoZWZmZWN0KTsKLSAgICBpZiAoaXQgIT0gbV9lZmZlY3RHZW9tZXRyeU1h
cC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKLSAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIGlmIChtX2V4cHJlc3Npb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gbV9leHByZXNzaW9uLmxhc3QoKS5lZmZlY3QucHRyKCk7CiB9CiAK
LWJvb2wgU1ZHRmlsdGVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKK2Jvb2wgU1ZHRmls
dGVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxGaWx0
ZXJFZmZlY3RHZW9tZXRyeT4mKQogewogICAgIHNldFNvdXJjZUltYWdlKHsgZmlsdGVyLnNvdXJj
ZUltYWdlKCkgfSk7CiAgICAgcmV0dXJuIGFwcGx5KCk7CkBAIC0xMTYsOCArMTEzLDggQEAgYm9v
bCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogUmVmUHRyPEZpbHRlcklt
YWdlPiBTVkdGaWx0ZXI6OmFwcGx5KCkKIHsKICAgICBBU1NFUlQoIW1fZXhwcmVzc2lvbi5pc0Vt
cHR5KCkpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9leHByZXNzaW9uKSB7Ci0gICAgICAg
IGlmICghZWZmZWN0LT5hcHBseSgqdGhpcykpCisgICAgZm9yIChhdXRvJiB0ZXJtIDogbV9leHBy
ZXNzaW9uKSB7CisgICAgICAgIGlmICghdGVybS5lZmZlY3QtPmFwcGx5KCp0aGlzLCB0ZXJtLmdl
b21ldHJ5KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICByZXR1cm4g
bGFzdEVmZmVjdCgpLT5maWx0ZXJJbWFnZSgpOwpAQCAtMTMyLDggKzEyOSw4IEBAIEludE91dHNl
dHMgU1ZHRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKIHZvaWQgU1ZHRmlsdGVyOjpjbGVhclJlc3Vs
dCgpCiB7CiAgICAgQVNTRVJUKCFtX2V4cHJlc3Npb24uaXNFbXB0eSgpKTsKLSAgICBmb3IgKGF1
dG8mIGVmZmVjdCA6IG1fZXhwcmVzc2lvbikKLSAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdCgp
OworICAgIGZvciAoYXV0byYgdGVybSA6IG1fZXhwcmVzc2lvbikKKyAgICAgICAgdGVybS5lZmZl
Y3QtPmNsZWFyUmVzdWx0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggOWYyZmU2
YTIzYTVmOTU5NzI3NzE2NmU2YTRhYWQ2MTRhOTg2NDViNS4uZWI1OGY3ODFjMWUyNmUyZGY1MGUz
MDVhY2VmOTIwMzExOWI1NjFiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmgKQEAgLTIyLDggKzIyLDggQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVjdG9yLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogI2lu
Y2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3
dGYvVHlwZUNhc3RzLmg+CkBAIC00MiwzMyArNDIsMjggQEAgcHVibGljOgogCiAgICAgRmxvYXRS
ZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0Jv
eDsgfQogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICFtX2V4cHJlc3Npb24uaXNFbXB0eSgpID8gbV9leHByZXNzaW9uLmxhc3QoKSA6
IG51bGxwdHI7IH0KKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkgY29uc3Qg
ZmluYWw7CiAKICAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IGFwcGx5KCkgZmluYWw7CiAKIHByaXZh
dGU6CiAgICAgU1ZHRmlsdGVyKFJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVy
U2NhbGUsIENsaXBPcGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBl
IHByaW1pdGl2ZVVuaXRzKTsKIAotICAgIC8vIEZJWE1FOiBNZXJnZSB0aGUgZWZmZWN0Qm91bmRh
cmllcyBpbiB0aGUgZXhwcmVzc2lvbiBub2RlLgotICAgIHZvaWQgc2V0RXhwcmVzc2lvbihGaWx0
ZXJFZmZlY3RWZWN0b3ImJiBleHByZXNzaW9uKSB7IG1fZXhwcmVzc2lvbiA9IFdURk1vdmUoZXhw
cmVzc2lvbik7IH0KLSAgICB2b2lkIHNldEVmZmVjdEdlb21ldHJ5TWFwKEZpbHRlckVmZmVjdEdl
b21ldHJ5TWFwJiYgZWZmZWN0R2VvbWV0cnlNYXApIHsgbV9lZmZlY3RHZW9tZXRyeU1hcCA9IFdU
Rk1vdmUoZWZmZWN0R2VvbWV0cnlNYXApOyB9CisgICAgdm9pZCBzZXRFeHByZXNzaW9uKFNWR0Zp
bHRlckV4cHJlc3Npb24mJiBleHByZXNzaW9uKSB7IG1fZXhwcmVzc2lvbiA9IFdURk1vdmUoZXhw
cmVzc2lvbik7IH0KIAogI2lmIFVTRShDT1JFX0lNQUdFKQogICAgIGJvb2wgc3VwcG9ydHNDb3Jl
SW1hZ2VSZW5kZXJpbmcoKSBjb25zdCBmaW5hbDsKICNlbmRpZgotICAgIHN0ZDo6b3B0aW9uYWw8
RmlsdGVyRWZmZWN0R2VvbWV0cnk+IGVmZmVjdEdlb21ldHJ5KEZpbHRlckVmZmVjdCYpIGNvbnN0
IGZpbmFsOwogICAgIEZsb2F0U2l6ZSByZXNvbHZlZFNpemUoY29uc3QgRmxvYXRTaXplJikgY29u
c3QgZmluYWw7CiAKLSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYpIGZpbmFsOworICAgIGJv
b2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3Qgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RH
ZW9tZXRyeT4mID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKICAgICBJbnRPdXRzZXRzIG91dHNldHMo
KSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmluYWw7CiAKICAgICBGbG9h
dFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsKICAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBl
IG1fcHJpbWl0aXZlVW5pdHM7CiAKLSAgICAvLyBGSVhNRTogTWFrZSBtX2V4cHJlc3Npb24gYSBW
ZWN0b3Igb2YgdGhlIEZpbHRlckVmZmVjdCBhbmQgdGhlIGVmZmVjdEJvdW5kYXJpZXMuCi0gICAg
RmlsdGVyRWZmZWN0VmVjdG9yIG1fZXhwcmVzc2lvbjsKLSAgICBGaWx0ZXJFZmZlY3RHZW9tZXRy
eU1hcCBtX2VmZmVjdEdlb21ldHJ5TWFwOworICAgIFNWR0ZpbHRlckV4cHJlc3Npb24gbV9leHBy
ZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRl
eCA1MGVlMWEwNmMxM2QzZTVjNDdiNzhhZmU0ZWJhMDZmNjVhOGFlYzA2Li5iYjc1ZjM4YzZlMTQy
NzFiZmFkNTI0Y2NjNmViYjYyYWQxYzE4YmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMjAxLDcg
KzIwMSwxNSBAQCB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShG
aWx0ZXJFZmZlY3QqIGVmZmVjdCkKICAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKHJlZmVy
ZW5jZSk7CiB9CiAKLXN0YXRpYyBib29sIGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihjb25zdCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiYgZWZmZWN0LCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGV4cHJlc3Npb24pCitzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdl
b21ldHJ5PiBTVkdGaWx0ZXJCdWlsZGVyOjplZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmIGVm
ZmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIGl0ID0gbV9lZmZlY3RHZW9tZXRyeU1hcC5maW5kKGVm
ZmVjdCk7CisgICAgaWYgKGl0ICE9IG1fZWZmZWN0R2VvbWV0cnlNYXAuZW5kKCkpCisgICAgICAg
IHJldHVybiBpdC0+dmFsdWU7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworYm9vbCBT
VkdGaWx0ZXJCdWlsZGVyOjpidWlsZEVmZmVjdEV4cHJlc3Npb24oY29uc3QgUmVmUHRyPEZpbHRl
ckVmZmVjdD4mIGVmZmVjdCwgRmlsdGVyRWZmZWN0VmVjdG9yJiBzdGFjaywgU1ZHRmlsdGVyRXhw
cmVzc2lvbiYgZXhwcmVzc2lvbikgY29uc3QKIHsKICAgICAvLyBBIGN5Y2xlIGlzIGRldGVjdGVk
LgogICAgIGlmIChzdGFjay5jb250YWlucyhlZmZlY3QpKQpAQCAtMjA5LDcgKzIxNyw3IEBAIHN0
YXRpYyBib29sIGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihjb25zdCBSZWZQdHI8RmlsdGVyRWZmZWN0
PiYgZWZmZWN0LCBGaWx0ZXJFZmZlCiAKICAgICBzdGFjay5hcHBlbmQoZWZmZWN0KTsKICAgICAK
LSAgICBleHByZXNzaW9uLmFwcGVuZChlZmZlY3QpOworICAgIGV4cHJlc3Npb24uYXBwZW5kKHsg
KmVmZmVjdCwgZWZmZWN0R2VvbWV0cnkoKmVmZmVjdCkgfSk7CiAKICAgICBmb3IgKGF1dG8mIGlu
cHV0RWZmZWN0IDogZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSkgewogICAgICAgICBpZiAoIWJ1aWxk
RWZmZWN0RXhwcmVzc2lvbihpbnB1dEVmZmVjdCwgc3RhY2ssIGV4cHJlc3Npb24pKQpAQCAtMjIz
LDcgKzIzMSw3IEBAIHN0YXRpYyBib29sIGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihjb25zdCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiYgZWZmZWN0LCBGaWx0ZXJFZmZlCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKEZpbHRlckVmZmVjdFZl
Y3RvciYgZXhwcmVzc2lvbikgY29uc3QKK2Jvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHBy
ZXNzaW9uKFNWR0ZpbHRlckV4cHJlc3Npb24mIGV4cHJlc3Npb24pIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2xhc3RFZmZlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCBm
YjlkY2Q3OGY5ZDkzZWZiZDE4MzJhNWVmNGE1YzQzMDYyYzY1N2M1Li4xODg4NDUwYzVlZGZjNjcz
YjIxYjU3MTRiNmFiN2FmNmQ0ZjRmOTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0yMiw2ICsyMiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIlNW
R0ZpbHRlckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC02OCw5ICs2OSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0dXBCdWlsdGluRWZmZWN0cyhSZWY8RmlsdGVyRWZm
ZWN0PiBzb3VyY2VHcmFwaGljKTsKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZEZpbHRl
ckVmZmVjdHMoU1ZHRmlsdGVyRWxlbWVudCYpOwotICAgIGJvb2wgYnVpbGRFeHByZXNzaW9uKEZp
bHRlckVmZmVjdFZlY3RvciYgZXhwcmVzc2lvbikgY29uc3Q7Ci0KLSAgICBGaWx0ZXJFZmZlY3RH
ZW9tZXRyeU1hcCB0YWtlRWZmZWN0R2VvbWV0cnlNYXAoKSB7IHJldHVybiBXVEZNb3ZlKG1fZWZm
ZWN0R2VvbWV0cnlNYXApOyB9CisgICAgYm9vbCBidWlsZEV4cHJlc3Npb24oU1ZHRmlsdGVyRXhw
cmVzc2lvbiYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5F
ZmZlY3RzKCkKQEAgLTc5LDYgKzc4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fZWZmZWN0
UmVmZXJlbmNlcy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCisgICAg
c3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZWZmZWN0R2VvbWV0cnkoRmlsdGVy
RWZmZWN0JikgY29uc3Q7CisgICAgYm9vbCBidWlsZEVmZmVjdEV4cHJlc3Npb24oY29uc3QgUmVm
UHRyPEZpbHRlckVmZmVjdD4mLCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCBTVkdGaWx0ZXJF
eHByZXNzaW9uJikgY29uc3Q7CisKICAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOwogICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVm
UHRyPEZpbHRlckVmZmVjdD4+IG1fbmFtZWRFZmZlY3RzOwogICAgIC8vIFRoZSB2YWx1ZSBpcyBh
IGxpc3QsIHdoaWNoIGNvbnRhaW5zIHRob3NlIGZpbHRlciBlZmZlY3RzLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lvbi5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyRXhwcmVzc2lv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU0ZGNjNzJkYmFhNjhlODRmNzEyMjRkNDY3YzcxMjZjNmQwNzE0NmYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJFeHByZXNzaW9uLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGaWx0ZXJFZmZlY3Q7CisKK3N0cnVjdCBTVkdGaWx0ZXJFeHByZXNzaW9uVGVy
bSB7CisgICAgUmVmPEZpbHRlckVmZmVjdD4gZWZmZWN0OworICAgIHN0ZDo6b3B0aW9uYWw8Rmls
dGVyRWZmZWN0R2VvbWV0cnk+IGdlb21ldHJ5OworfTsKKwordXNpbmcgU1ZHRmlsdGVyRXhwcmVz
c2lvbiA9IFZlY3RvcjxTVkdGaWx0ZXJFeHByZXNzaW9uVGVybT47CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446074</attachid>
            <date>2021-12-06 13:19:35 -0800</date>
            <delta_ts>2021-12-06 16:37:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232705-20211206131934.patch</filename>
            <type>text/plain</type>
            <size>32846</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDc1NzNlMWJmNGQ3YzEy
NGY3ZDc1Mzc1MDc5NTgxZTU3ZTA5MWIxOS4uNTFhODdhZjc0YmEzMWNlMTlhZTdhYTg0MmRjZTJh
NTlkZDc2NjE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIxLTEyLTA2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TWFrZSBGaWx0ZXJFZmZlY3QgY2FsY3VsYXRlIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIG9ubHkg
d2hlbiBuZWVkZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMjcwNQorICAgICAgICByZGFyOi8vODUyOTAxNDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoOgorCisgICAgICAgIDEu
IHJlc3VsdENvbG9yU3BhY2UoKSB3aWxsIHJldHVybiBjb2xvclNwYWNlKCkgZnJvbSBhIEZpbHRl
ckltYWdlVmVjdG9yCisgICAgICAgICAgIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSByZXN1bHRD
b2xvclNwYWNlKCkgb2YgdGhlIEZpbHRlckVmZmVjdC4KKworICAgICAgICAyLiBGaWx0ZXI6OmNs
YW1wRmlsdGVyUmVnaW9uSWZOZWVkZWQoKSB3aWxsIGNsYW1wIHRoZSBmaWx0ZXJSZWdpb24oKSAK
KyAgICAgICAgICAgaW5zdGVhZCBvZiBjbGFtcGluZyB0aGUgbWF4RWZmZWN0UmVjdCBvZiB0aGUg
bGFzdEVmZmVjdCgpIHNpbmNlIGFsbAorICAgICAgICAgICB0aGUgcHJpbWl0aXZlU3VicmVnaW9u
cyBhbmQgdGhlIGltYWdlUmVjdHMgaGF2ZSB0byBjbGlwcGVkIHRvIHRoZQorICAgICAgICAgICBm
aWx0ZXJSZWdpb24oKS4KKworICAgICAgICAzLiBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKSBpcyByZXBsYWNlZCBieSBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oKQorICAg
ICAgICAgICB3aGljaCB3aWxsIGNhbGN1bGF0ZSB0aGUgcHJpbWl0aXZlU3VicmVnaW9uIGZyb20g
YSBGaWx0ZXJJbWFnZVZlY3RvcgorICAgICAgICAgICBhbmQgYW4gb3B0aW9uYWwgRmlsdGVyRWZm
ZWN0R2VvbWV0cnkuCisKKyAgICAgICAgNC4gTWFueSBvZiBGaWx0ZXJFZmZlY3RzIGFyZSBtYWRl
IHByb3RlY3RlZCBpbnN0ZWFkIG9mIGhhdmluZyB0aGVtIHB1YmxpYy4KKworICAgICAgICA1LiBT
VkdGaWx0ZXJFeHByZXNzaW9uIHdpbGwgYmUgZGVmaW5lZCBhcyBhIFZlY3RvciBvZiBTVkdGaWx0
ZXJFeHByZXNzaW9uVGVybQorICAgICAgICAgICB3aGljaCBpcyBhIHN0cnVjdCBvZiBGaWx0ZXJF
ZmZlY3QgYW5kIG9wdGlvbmFsIEZpbHRlckVmZmVjdEdlb21ldHJ5LgorCisgICAgICAgIDYuIFNW
R0ZpbHRlciB3aWxsIHJlcGxhY2UgdGhlIG1lbWJlcnMgd2hvc2UgdHlwZXMgYXJlIEZpbHRlckVm
ZmVjdFZlY3RvcgorICAgICAgICAgICBhbmQgRmlsdGVyRWZmZWN0R2VvbWV0cnlNYXAgd2l0aCBh
IHNpbmdsZSBtZW1iZXIgb2YgdHlwZSBTVkdGaWx0ZXJFeHByZXNzaW9uLgorCisgICAgICAgICog
SGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cmVzdWx0Q29sb3JT
cGFjZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6Y2xhbXBGaWx0ZXJSZWdpb25JZk5lZWRl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlcjo6ZWZmZWN0R2VvbWV0cnkgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1bHRDb2xv
clNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6c2V0RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBwbHkpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVy
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6bGFzdEVmZmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
OjplZmZlY3RHZW9tZXRyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpl
ZmZlY3RHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjpidWlsZEVmZmVjdEV4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1
aWxkRWZmZWN0RXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVp
bGRlcjo6dGFrZUVmZmVjdEdlb21ldHJ5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmg6IEFkZGVkLgorCiAyMDIxLTEyLTA2
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogICAgICAgICBbR1BVIFByb2Nl
c3NdIChSRUdSRVNTSU9OIHIyODU1OTcpOiBTZXQgdGhlIGZpbHRlclJlZ2lvbiBvZiB0aGUgQ1NT
RmlsdGVyIGFmdGVyIGl0IGlzIGNyZWF0ZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMzg0OQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNTU0MDI2NTE4
OWZlNzE2MDMzOTgzMTg2NWVjMzNjZmMxYWM5NTg0NC4uNzNhMTQ1MjkxY2EzMzBhNWRkNjQwZTFi
YjlhNzBhNTkyY2I3ZmYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xOTAyLDYgKzE5MDIsNyBA
QCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlQ2FjaGUuaAogCiAgICAgc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgK
KyAgICBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNzaW9uLmgKIAogICAgIHN2
Zy9wcm9wZXJ0aWVzL1NWR0xpc3QuaAogICAgIHN2Zy9wcm9wZXJ0aWVzL1NWR1ByaW1pdGl2ZUxp
c3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDZkYjAxYjVhMGNkZjVmYTY4N2QzMmUzZjE1NDNiMWM0Y2M5ODhkMWIuLjE1NDQx
NGQ2YjdmOWRlMTMxZGE4NGJmYTA4OTI0MmRjODhiYTkyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIzMTQsNiArMjMxNCw3
IEBACiAJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2
NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY4MjNENkE1M0Uw
MENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9k
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
OUQwNTMwMjUzMTQyNDMwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOUQwNTJFMjUz
MTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkE1RDE5MjI3NUU4RkZF
MDA2NTgzM0UgLyogU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2Q0RFMjUyNzVCNDg5NzAwQTQ0NUIyIC8qIFNWR0Zp
bHRlckV4cHJlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3MkE3M0JFRjI0NUEzRjkwMDAxQzlEMDMgLyogQW5pbWF0aW9uRnJhbWVSYXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjJBODE1
QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJCOEIwMzUyNzUzNDM4NjAwRjc1
MkFBIC8qIEZpbHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkI4
QjAzNjI3NTM0NDE0MDBGNzUyQUEgLyogRmlsdGVySW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNDM1RUY0MjczRDA3NjcwMDA1RTdFRSAvKiBG
aWx0ZXJJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xMTE4Nyw2ICsxMTE4OCw3IEBACiAJCTcyNjZGMDI4MjI0MzEyMDMwMDgzMzk3NSAv
KiBTVkdBbmltYXRpb25BZGRpdGl2ZUxpc3RGdW5jdGlvbkltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHQW5pbWF0aW9uQWRkaXRpdmVMaXN0RnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyNjZGMDI5MjI0MzEyQjEwMDgzMzk3NSAvKiBTVkdBbmltYXRpb25BZGRp
dGl2ZUxpc3RGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZUxp
c3RGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAyQTIyNDMx
NDlCMDA4MzM5NzUgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHQW5pbWF0ZWRQcm9wZXJ0eUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI2Q0RFMjUyNzVCNDg5NzAwQTQ0NUIyIC8qIFNWR0ZpbHRlckV4cHJlc3Npb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHRmlsdGVyRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbGF0Zm9ybUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
N0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yODQyNiw2ICsyODQyOCw3IEBACiAJCQkJODQ1RTcyRkEwRkQyNjIzOTAwQTg3RDc5IC8q
IFNWR0ZpbHRlci5oICovLAogCQkJCTA4MUVCRjM4MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0
ZXJCdWlsZGVyLmNwcCAqLywKIAkJCQkwODFFQkYzOTBGRDM0RjQxMDBEQTc1NTkgLyogU1ZHRmls
dGVyQnVpbGRlci5oICovLAorCQkJCTcyNkNERTI1Mjc1QjQ4OTcwMEE0NDVCMiAvKiBTVkdGaWx0
ZXJFeHByZXNzaW9uLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGZpbHRlcnM7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtMzcxMjEsNiArMzcxMjQsNyBAQAogCQkJCTg0NUU3MkZDMEZE
MjYyMzkwMEE4N0Q3OSAvKiBTVkdGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4MUVCRjNC
MEZEMzRGNDEwMERBNzU1OSAvKiBTVkdGaWx0ZXJCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjIyN0EwQzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRmlsdGVyRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzJBNUQxOTIyNzVFOEZGRTAwNjU4MzNFIC8qIFNWR0ZpbHRlckV4cHJlc3Np
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTBGMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3QTEyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaXRUb1ZpZXdCb3guaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyQTFGMkFCMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDdiYjZhMmVjNWM1NGZj
ZTNiODEyMjA0NGU0MzVmMWQyNzZjOGRiM2IuLmZlNjFkOTJhOTI3YzRmMDEwYmRiOTEzMDlmNDUy
OTMzNDM2NGYzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC02OCwxMyArNjgs
MTMgQEAgYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgc2NhbGUpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgRkVEaXNwbGFj
ZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UoKSBjb25zdAorY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBGRURpc3BsYWNlbWVudE1hcDo6cmVzdWx0Q29sb3JTcGFjZShjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewogICAgIC8vIFNwZWM6IFRoZSAnY29sb3ItaW50
ZXJwb2xhdGlvbi1maWx0ZXJzJyBwcm9wZXJ0eSBvbmx5IGFwcGxpZXMgdG8gdGhlICdpbjInIHNv
dXJjZSBpbWFnZQogICAgIC8vIGFuZCBkb2VzIG5vdCBhcHBseSB0byB0aGUgJ2luJyBzb3VyY2Ug
aW1hZ2UuIFRoZSAnaW4nIHNvdXJjZSBpbWFnZSBtdXN0IHJlbWFpbiBpbiBpdHMKICAgICAvLyBj
dXJyZW50IGNvbG9yIHNwYWNlLgogICAgIC8vIFRoZSByZXN1bHQgaXMgaW4gdGhhdCBzYW1lIGNv
bG9yIHNwYWNlIGJlY2F1c2UgaXQgaXMgYSBkaXNwbGFjZW1lbnQgb2YgdGhlICdpbicgaW1hZ2Uu
Ci0gICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5yZXN1bHRDb2xvclNwYWNlKCk7CisgICAgcmV0
dXJuIGlucHV0c1swXS0+Y29sb3JTcGFjZSgpOwogfQogCiB2b2lkIEZFRGlzcGxhY2VtZW50TWFw
Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCBp
bmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCAzODI2YWFjY2JmMjdjY2MyODFkYTdl
NzQxYjE0NWVjMDBmZWFkNTFhLi40MmU2NWIyZTFiNjVhODZjYzEwODQyNmY3ZjFmYTQzZTgzMzNj
NTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hh
bm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0
KTsKIAotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0
Q29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQp
IG92ZXJyaWRlOwogCiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKaW5kZXggNzMzYWY2NjE5ZjQx
ZGQxZTUwOWRiNjhlYTRiZmU4NzVjMjg3NmEzZi4uYmU0ZjI5Y2M1NjlmNmU1NTVjNzk5M2RjNWJl
OGZiZThjYzdhZTRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApAQCAtNzEsMjEgKzcxLDEzIEBAIEZsb2F0UmVjdCBGaWx0
ZXI6OmNsaXBUb01heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0
IEZsb2F0UmVjCiAKIGJvb2wgRmlsdGVyOjpjbGFtcEZpbHRlclJlZ2lvbklmTmVlZGVkKCkKIHsK
LSAgICBhdXRvIGxhc3RFZmZlY3QgPSB0aGlzLT5sYXN0RWZmZWN0KCk7Ci0gICAgbGFzdEVmZmVj
dC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCp0aGlzKTsKLSAgICAKLSAgICBh
dXRvIG1heEVmZmVjdFJlY3QgPSB0aGlzLT5tYXhFZmZlY3RSZWN0KGxhc3RFZmZlY3QtPmZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpKTsKLSAgICBhdXRvIHNjYWxlZE1heEVmZmVjdFJlY3QgPSBz
Y2FsZWRCeUZpbHRlclNjYWxlKG1heEVmZmVjdFJlY3QpOworICAgIGF1dG8gc2NhbGVkRmlsdGVy
UmVnaW9uID0gc2NhbGVkQnlGaWx0ZXJTY2FsZShtX2ZpbHRlclJlZ2lvbik7CiAKICAgICBGbG9h
dFNpemUgY2xhbXBpbmdTY2FsZSgxLCAxKTsKLSAgICBpZiAoIUltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhzY2FsZWRNYXhFZmZlY3RSZWN0LnNpemUoKSwgY2xhbXBpbmdTY2FsZSkpCisg
ICAgaWYgKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc2NhbGVkRmlsdGVyUmVnaW9u
LnNpemUoKSwgY2xhbXBpbmdTY2FsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1f
ZmlsdGVyU2NhbGUgPSBtX2ZpbHRlclNjYWxlICogY2xhbXBpbmdTY2FsZTsKLQotICAgIC8vIEF0
IGxlYXN0IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAotICAgIC8v
IHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAg
ICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKnRoaXMpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCAxNjJhYmU2NzI5NDE4YjRmM2YwMjU2Mjk4ZTVi
NjY4ZWNkYWE4MThiLi4yOWRjN2ZmNzhjNjA2YzdjZjNmYTFhYWJlNjkzN2Q0YzczYmVlODYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
LmgKQEAgLTYzLDggKzYzLDYgQEAgcHVibGljOgogICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRl
clNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogICAgIEZsb2F0UmVjdCBzY2FsZWRCeUZp
bHRlclNjYWxlKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBzdGQ6Om9w
dGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiBlZmZlY3RHZW9tZXRyeShGaWx0ZXJFZmZlY3Qm
KSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KLQogICAgIEZsb2F0UmVjdCBtYXhFZmZl
Y3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdDsKICAgICBG
bG9hdFJlY3QgY2xpcFRvTWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKaW5kZXggMGFlOTRkNTA2ZTE0MWVkZjM0MzRhZGI2MjRjODZjNTMyMjI2M2QzMS4uZGEx
Y2ExNDEyZDQ0NzQ4OWZmOTFmN2FiNjhmNmY1MzMzM2RkYzE4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0QXBwbGllci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEdlb21ldHJ5LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNDAsMjYgKzQxLDIwIEBAIEZsb2F0UmVjdCBGaWx0
ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RmlsdGVySW1hCiAgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZlY3RSZWN0KGltYWdlUmVj
dCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxv
YXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZp
bHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYgZ2VvbWV0cnkpIGNvbnN0CiB7CiAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9maWx0ZXIt
ZWZmZWN0cy0xLyNGaWx0ZXJQcmltaXRpdmVTdWJSZWdpb24uCiAgICAgRmxvYXRSZWN0IHByaW1p
dGl2ZVN1YnJlZ2lvbjsKIAotICAgIC8vIElmIHRoZXJlIGlzIG5vIGlucHV0IGVmZmVjdHMsIHRh
a2UgdGhlIGVmZmVjdCBib3VuZGFyaWVzIGFzIHVuaXRlIHJlY3QuCi0gICAgaWYgKCFtX2lucHV0
RWZmZWN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2lucHV0
RWZmZWN0cykgewotICAgICAgICAgICAgYXV0byBpbnB1dFByaW1pdGl2ZVN1YnJlZ2lvbiA9IGVm
ZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGZpbHRlcik7Ci0gICAgICAg
ICAgICBwcmltaXRpdmVTdWJyZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwot
ICAgICAgICB9CisgICAgLy8gSWYgdGhlcmUgaXMgbm8gaW5wdXQgZWZmZWN0cywgdGFrZSB0aGUg
ZWZmZWN0IGJvdW5kYXJpZXMgYXMgdW5pdGUgcmVjdC4gRG9uJ3QgdXNlIHRoZSBpbnB1dCdzIHN1
YnJlZ2lvbiBmb3IgRkVUaWxlLgorICAgIGlmICghaW5wdXRzLmlzRW1wdHkoKSAmJiBmaWx0ZXJU
eXBlKCkgIT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVRpbGUpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgICAgIHByaW1pdGl2ZVN1YnJlZ2lvbi51bml0ZShp
bnB1dC0+cHJpbWl0aXZlU3VicmVnaW9uKCkpOwogICAgIH0gZWxzZQogICAgICAgICBwcmltaXRp
dmVTdWJyZWdpb24gPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7CiAKLSAgICAvLyBEb24ndCB1c2Ug
dGhlIGlucHV0J3Mgc3VicmVnaW9uIGZvciBGRVRpbGUuCi0gICAgaWYgKGZpbHRlclR5cGUoKSA9
PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkKLSAgICAgICAgcHJpbWl0aXZlU3VicmVnaW9u
ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgIAogICAgIC8vIENsaXAgdGhlIHByaW1pdGl2
ZSBzdWJyZWdpb24gdG8gdGhlIGVmZmVjdCBnZW9tZXRyeS4KLSAgICBpZiAoYXV0byBnZW9tZXRy
eSA9IGZpbHRlci5lZmZlY3RHZW9tZXRyeSgqdGhpcykpIHsKKyAgICBpZiAoZ2VvbWV0cnkpIHsK
ICAgICAgICAgaWYgKGF1dG8geCA9IGdlb21ldHJ5LT54KCkpCiAgICAgICAgICAgICBwcmltaXRp
dmVTdWJyZWdpb24uc2V0WCgqeCk7CiAgICAgICAgIGlmIChhdXRvIHkgPSBnZW9tZXRyeS0+eSgp
KQpAQCAtNzAsNyArNjUsNiBAQCBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAgICAgICBw
cmltaXRpdmVTdWJyZWdpb24uc2V0SGVpZ2h0KCpoZWlnaHQpOwogICAgIH0KIAotICAgIHNldEZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIHJldHVybiBw
cmltaXRpdmVTdWJyZWdpb247CiB9CiAKQEAgLTgwLDcgKzc0LDcgQEAgRmlsdGVyRWZmZWN0KiBG
aWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKICAgICByZXR1
cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKIH0KIAotYm9vbCBGaWx0ZXJFZmZl
Y3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5
KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdl
b21ldHJ5PiYgZ2VvbWV0cnkpCiB7CiAgICAgaWYgKGhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTEwMCwxNiArOTQsMTggQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogICAgIH0KIAogICAgIGF1dG8gaW5wdXRGaWx0ZXJJbWFnZXMg
PSB0aGlzLT5pbnB1dEZpbHRlckltYWdlcygpOwotICAgIGF1dG8gaW1hZ2VSZWN0ID0gY2FsY3Vs
YXRlSW1hZ2VSZWN0KGZpbHRlciwgaW5wdXRGaWx0ZXJJbWFnZXMsIG1fZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKTsKKworICAgIGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gY2FsY3VsYXRlUHJp
bWl0aXZlU3VicmVnaW9uKGZpbHRlciwgaW5wdXRGaWx0ZXJJbWFnZXMsIGdlb21ldHJ5KTsKKyAg
ICBhdXRvIGltYWdlUmVjdCA9IGNhbGN1bGF0ZUltYWdlUmVjdChmaWx0ZXIsIGlucHV0RmlsdGVy
SW1hZ2VzLCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIGF1dG8gYWJzb2x1dGVJbWFnZVJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKGltYWdlUmVjdCkp
OwogCiAgICAgaWYgKGFic29sdXRlSW1hZ2VSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6
c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIGF1dG8gaXNBbHBoYUltYWdlID0gcmVzdWx0SXNBbHBoYUlt
YWdlKGlucHV0RmlsdGVySW1hZ2VzKTsKLSAgICBhdXRvIGltYWdlQ29sb3JTcGFjZSA9IHJlc3Vs
dENvbG9yU3BhY2UoKTsKKyAgICBhdXRvIGltYWdlQ29sb3JTcGFjZSA9IHJlc3VsdENvbG9yU3Bh
Y2UoaW5wdXRGaWx0ZXJJbWFnZXMpOwogCi0gICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdl
OjpjcmVhdGUobV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgYWJzb2x1dGVJ
bWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VDb2xv
clNwYWNlKTsKKyAgICBtX2ZpbHRlckltYWdlID0gRmlsdGVySW1hZ2U6OmNyZWF0ZShwcmltaXRp
dmVTdWJyZWdpb24sIGltYWdlUmVjdCwgYWJzb2x1dGVJbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwg
ZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VDb2xvclNwYWNlKTsKICAgICBpZiAoIW1fZmls
dGVySW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTE5LDkgKzExNSw5IEBAIGJv
b2wgRmlsdGVyRWZmZWN0OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAogICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0KICAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8
IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6IgotICAgICAgICA8PCAi
XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uCisgICAgICAgIDw8ICJcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgcHJpbWl0
aXZlU3VicmVnaW9uCiAgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBhYnNv
bHV0ZUltYWdlUmVjdAotICAgICAgICA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJTY2FsZShmaWx0ZXIubWF4RWZmZWN0UmVjdChtX2ZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbikpCisgICAgICAgIDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IGZpbHRlci5t
YXhFZmZlY3RSZWN0KHByaW1pdGl2ZVN1YnJlZ2lvbikKICAgICAgICAgPDwgIlxuICBmaWx0ZXIg
c2NhbGUgIiA8PCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAKICAgICByZXR1cm4gYXBwbGllci0+
YXBwbHkoZmlsdGVyLCBpbnB1dEZpbHRlckltYWdlcywgKm1fZmlsdGVySW1hZ2UpOwpAQCAtMTcz
LDcgKzE2OSw2IEBAIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UCiAgICAgaWYgKHJlcHJlc2VudGF0
aW9uVHlwZSA9PSBSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewogICAgICAgICBUZXh0
U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7CiAgICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgcmVzdWx0Q29sb3JTcGFj
ZSgpKTsKICAgICAgICAgdHMgPDwgIlxuIiA8PCBpbmRlbnQ7CiAgICAgfQogICAgIHJldHVybiB0
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCmluZGV4IDgyN2ViNWRiODFlOTFjOTIzNjk2OWVhNWZkOTIwMmE4Y2I5
NWIzNWMuLjU2ODI3YWJiYmY3ZGZjNTNhMTAyZjQyODNhZmZmMDg2NTUxMjViM2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaApAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZp
bHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdEFwcGxpZXI7CitjbGFzcyBGaWx0ZXJFZmZlY3RHZW9t
ZXRyeTsKIAogY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1
YmxpYzoKQEAgLTQ1LDU4ICs0Niw1MSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNSZXN1bHQoKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlckltYWdlOyB9CiAKICAgICBGaWx0ZXJJbWFnZSogZmlsdGVy
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckltYWdlLmdldCgpOyB9Ci0gICAgRmlsdGVy
SW1hZ2VWZWN0b3IgaW5wdXRGaWx0ZXJJbWFnZXMoKSBjb25zdDsKLQotICAgIHZvaWQgY29ycmVj
dFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOwogCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9y
JiBpbnB1dEVmZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQogICAgIEZpbHRlckVm
ZmVjdCogaW5wdXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9m
RWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9CiAK
LSAgICAvLyBSZWN1cnNlcyBvbiBpbnB1dHMuCi0gICAgRmxvYXRSZWN0IGRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImKTsKKyAgICB2b2lkIHRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisKKyAgICBib29s
IGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2Vv
bWV0cnk+JiA9IHN0ZDo6bnVsbG9wdCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFwcGx5KGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xv
clNwYWNlOyB9CisKKyAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRw
dXQsIERlYnVnZ2luZyB9OworICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJl
c2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB1c2lu
ZyBGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247CisKKyAgICB2aXJ0dWFsIGJvb2wgbWF5
UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOwogCiAg
ICAgLy8gQ29ycmVjdCBhbnkgaW52YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJl
c3VsdCBvZiBhIGZpbHRlciBvcGVyYXRpb24uCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0
byBlbnN1cmUgdmFsaWQgcGl4ZWwgdmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5h
bCByZXN1bHQuCiAgICAgLy8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2
ZXIgbmVlZHMgdG8gcGVyZm9ybSBjb3JyZWN0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0
RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSB7IH0KIAotICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRp
b25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07Ci0gICAgdmlydHVhbCBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50
YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0T3V0cHV0KSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBj
b25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xv
clNwYWNlKTsgfQogCi0gICAgRmxvYXRSZWN0IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uOyB9Ci0gICAgdm9pZCBzZXRG
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24pIHsgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb247IH0KKyAgICBGaWx0ZXJJbWFnZVZlY3RvciBpbnB1dEZpbHRlckltYWdlcygpIGNv
bnN0OworICAgIAorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVQcmltaXRpdmVTdWJyZWdpb24oY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PEZpbHRlckVmZmVjdEdlb21ldHJ5PiYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdDsKIAot
ICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9Ci0KICAgICAvLyBT
b2xpZCBibGFjayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCiAgICAgdmlydHVh
bCBib29sIHJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3Bh
Y2U7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29s
b3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0
aW5nQ29sb3JTcGFjZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9y
U3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7Ci0KLXByb3RlY3Rl
ZDoKLSAgICB1c2luZyBGaWx0ZXJGdW5jdGlvbjo6RmlsdGVyRnVuY3Rpb247Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICAKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJF
ZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0ID0gMDsKIAot
cHJpdmF0ZToKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBS
ZWZQdHI8RmlsdGVySW1hZ2U+IG1fZmlsdGVySW1hZ2U7CiAKLSAgICAvLyBUaGUgc3VicmVnaW9u
IG9mIGEgZmlsdGVyIHByaW1pdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIFNWRyBGaWx0ZXIgc3BlY2lm
aWNhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBUaGlzIGlzIFNWRyBzcGVjaWZp
YyBhbmQgbmVlZHMgdG8gbW92ZSB0byBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS4K
LSAgICBGbG9hdFJlY3QgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb247Ci0KICAgICBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaAppbmRleCBkMjlhM2E2MDdhYTY4
ZmQ1ZmQ4YTg3ZGUxOTRkZjZhNTZiNWFmNDllLi5jOWQ2NzdhNjA4MjkyODYzNDY3YzlmYmJlYWM0
MjVmZTI5ZTcxY2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0R2VvbWV0cnkuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0RXh0ZW50LmgiCiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KQEAgLTg4LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImKSB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYgPSBzdGQ6Om51bGxvcHQpIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVy
biB7IH07IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSB7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggMTI2
NDJkNjMzNWNmZDY1MmIyNmViN2ZmODc5ZDgxOTNmNDRmNmI2ZS4uMjQ5MjI4MjA2NGNkNWY5MTdj
YzE4ZGU0NzA0OGMyM2E4Yzg2NjMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC01NCwxNSArNTQsMTMgQEAgUmVmUHRyPFNW
R0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVu
dCwgU1ZHRmlsdGVyQnUKICAgICBpZiAoIWJ1aWxkZXIuYnVpbGRGaWx0ZXJFZmZlY3RzKGZpbHRl
ckVsZW1lbnQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEZpbHRlckVmZmVjdFZl
Y3RvciBleHByZXNzaW9uOworICAgIFNWR0ZpbHRlckV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICAg
ICBpZiAoIWJ1aWxkZXIuYnVpbGRFeHByZXNzaW9uKGV4cHJlc3Npb24pKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIEFTU0VSVCghZXhwcmVzc2lvbi5pc0VtcHR5KCkpOwogICAgIGZp
bHRlci0+c2V0RXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKTsKIAotICAgIGZpbHRlci0+
c2V0RWZmZWN0R2VvbWV0cnlNYXAoYnVpbGRlci50YWtlRWZmZWN0R2VvbWV0cnlNYXAoKSk7Ci0K
ICNpZiBVU0UoQ09SRV9JTUFHRSkKICAgICBpZiAoIWZpbHRlci0+c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoKSkKICAgICAgICAgZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpOwpAQCAtOTAsOCArODgsOCBAQCBib29sIFNWR0ZpbHRlcjo6c3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBBU1NFUlQoIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpOwotICAgIGZvciAoYXV0byYgZWZm
ZWN0IDogbV9leHByZXNzaW9uKSB7Ci0gICAgICAgIGlmICghZWZmZWN0LT5zdXBwb3J0c0NvcmVJ
bWFnZVJlbmRlcmluZygpKQorICAgIGZvciAoYXV0byYgdGVybSA6IG1fZXhwcmVzc2lvbikgewor
ICAgICAgICBpZiAoIXRlcm0uZWZmZWN0LT5zdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtOTksMTUgKzk3LDE0IEBAIGJv
b2wgU1ZHRmlsdGVyOjpzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0CiB9CiAjZW5k
aWYKIAotc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gU1ZHRmlsdGVyOjplZmZl
Y3RHZW9tZXRyeShGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgY29uc3QKK1JlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IFNWR0ZpbHRlcjo6bGFzdEVmZmVjdCgpIGNvbnN0CiB7Ci0gICAgYXV0byBpdCA9IG1fZWZm
ZWN0R2VvbWV0cnlNYXAuZmluZChlZmZlY3QpOwotICAgIGlmIChpdCAhPSBtX2VmZmVjdEdlb21l
dHJ5TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnZhbHVlOwotICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgaWYgKG1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBtX2V4cHJlc3Npb24ubGFzdCgpLmVmZmVjdC5wdHIoKTsK
IH0KIAotYm9vbCBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBT
VkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PEZpbHRlckVmZmVjdEdlb21ldHJ5PiYpCiB7CiAgICAgc2V0U291cmNlSW1hZ2UoeyBmaWx0ZXIu
c291cmNlSW1hZ2UoKSB9KTsKICAgICByZXR1cm4gYXBwbHkoKTsKQEAgLTExNiw4ICsxMTMsOCBA
QCBib29sIFNWR0ZpbHRlcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiBSZWZQdHI8Rmls
dGVySW1hZ2U+IFNWR0ZpbHRlcjo6YXBwbHkoKQogewogICAgIEFTU0VSVCghbV9leHByZXNzaW9u
LmlzRW1wdHkoKSk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2V4cHJlc3Npb24pIHsKLSAg
ICAgICAgaWYgKCFlZmZlY3QtPmFwcGx5KCp0aGlzKSkKKyAgICBmb3IgKGF1dG8mIHRlcm0gOiBt
X2V4cHJlc3Npb24pIHsKKyAgICAgICAgaWYgKCF0ZXJtLmVmZmVjdC0+YXBwbHkoKnRoaXMsIHRl
cm0uZ2VvbWV0cnkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJl
dHVybiBsYXN0RWZmZWN0KCktPmZpbHRlckltYWdlKCk7CkBAIC0xMzIsOCArMTI5LDggQEAgSW50
T3V0c2V0cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogdm9pZCBTVkdGaWx0ZXI6OmNsZWFy
UmVzdWx0KCkKIHsKICAgICBBU1NFUlQoIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpOwotICAgIGZv
ciAoYXV0byYgZWZmZWN0IDogbV9leHByZXNzaW9uKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVz
dWx0KCk7CisgICAgZm9yIChhdXRvJiB0ZXJtIDogbV9leHByZXNzaW9uKQorICAgICAgICB0ZXJt
LmVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA5
ZjJmZTZhMjNhNWY5NTk3Mjc3MTY2ZTZhNGFhZDYxNGE5ODY0NWI1Li5lYjU4Zjc4MWMxZTI2ZTJk
ZjUwZTMwNWFjZWY5MjAzMTE5YjU2MWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMjIsOCArMjIsOCBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3RWZWN0b3IuaCIK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFeHByZXNzaW9uLmgi
CiAjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1
ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KQEAgLTQyLDMzICs0MiwyOCBAQCBwdWJsaWM6CiAKICAgICBG
bG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5k
aW5nQm94OyB9CiAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkgPyBtX2V4cHJlc3Npb24ubGFz
dCgpIDogbnVsbHB0cjsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBj
b25zdCBmaW5hbDsKIAogICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoKSBmaW5hbDsKIAog
cHJpdmF0ZToKICAgICBTVkdGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgcHJpbWl0aXZlVW5pdHMpOwogCi0gICAgLy8gRklYTUU6IE1lcmdlIHRoZSBlZmZlY3RC
b3VuZGFyaWVzIGluIHRoZSBleHByZXNzaW9uIG5vZGUuCi0gICAgdm9pZCBzZXRFeHByZXNzaW9u
KEZpbHRlckVmZmVjdFZlY3RvciYmIGV4cHJlc3Npb24pIHsgbV9leHByZXNzaW9uID0gV1RGTW92
ZShleHByZXNzaW9uKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0R2VvbWV0cnlNYXAoRmlsdGVyRWZm
ZWN0R2VvbWV0cnlNYXAmJiBlZmZlY3RHZW9tZXRyeU1hcCkgeyBtX2VmZmVjdEdlb21ldHJ5TWFw
ID0gV1RGTW92ZShlZmZlY3RHZW9tZXRyeU1hcCk7IH0KKyAgICB2b2lkIHNldEV4cHJlc3Npb24o
U1ZHRmlsdGVyRXhwcmVzc2lvbiYmIGV4cHJlc3Npb24pIHsgbV9leHByZXNzaW9uID0gV1RGTW92
ZShleHByZXNzaW9uKTsgfQogCiAjaWYgVVNFKENPUkVfSU1BR0UpCiAgICAgYm9vbCBzdXBwb3J0
c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IGZpbmFsOwogI2VuZGlmCi0gICAgc3RkOjpvcHRp
b25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZWZmZWN0R2VvbWV0cnkoRmlsdGVyRWZmZWN0Jikg
Y29uc3QgZmluYWw7CiAgICAgRmxvYXRTaXplIHJlc29sdmVkU2l6ZShjb25zdCBGbG9hdFNpemUm
KSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJikgZmluYWw7Cisg
ICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVm
ZmVjdEdlb21ldHJ5PiYgPSBzdGQ6Om51bGxvcHQpIGZpbmFsOwogICAgIEludE91dHNldHMgb3V0
c2V0cygpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBmaW5hbDsKIAogICAg
IEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwogICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5p
dFR5cGUgbV9wcmltaXRpdmVVbml0czsKIAotICAgIC8vIEZJWE1FOiBNYWtlIG1fZXhwcmVzc2lv
biBhIFZlY3RvciBvZiB0aGUgRmlsdGVyRWZmZWN0IGFuZCB0aGUgZWZmZWN0Qm91bmRhcmllcy4K
LSAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9leHByZXNzaW9uOwotICAgIEZpbHRlckVmZmVjdEdl
b21ldHJ5TWFwIG1fZWZmZWN0R2VvbWV0cnlNYXA7CisgICAgU1ZHRmlsdGVyRXhwcmVzc2lvbiBt
X2V4cHJlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3Bw
CmluZGV4IDUwZWUxYTA2YzEzZDNlNWM0N2I3OGFmZTRlYmEwNmY2NWE4YWVjMDYuLmJiNzVmMzhj
NmUxNDI3MWJmYWQ1MjRjY2M2ZWJiNjJhZDFjMThiYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0y
MDEsNyArMjAxLDE1IEBAIHZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJz
aXZlKEZpbHRlckVmZmVjdCogZWZmZWN0KQogICAgICAgICBjbGVhclJlc3VsdHNSZWN1cnNpdmUo
cmVmZXJlbmNlKTsKIH0KIAotc3RhdGljIGJvb2wgYnVpbGRFZmZlY3RFeHByZXNzaW9uKGNvbnN0
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ss
IEZpbHRlckVmZmVjdFZlY3RvciYgZXhwcmVzc2lvbikKK3N0ZDo6b3B0aW9uYWw8RmlsdGVyRWZm
ZWN0R2VvbWV0cnk+IFNWR0ZpbHRlckJ1aWxkZXI6OmVmZmVjdEdlb21ldHJ5KEZpbHRlckVmZmVj
dCYgZWZmZWN0KSBjb25zdAoreworICAgIGF1dG8gaXQgPSBtX2VmZmVjdEdlb21ldHJ5TWFwLmZp
bmQoZWZmZWN0KTsKKyAgICBpZiAoaXQgIT0gbV9lZmZlY3RHZW9tZXRyeU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGl0LT52YWx1ZTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCiti
b29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRWZmZWN0RXhwcmVzc2lvbihjb25zdCBSZWZQdHI8
RmlsdGVyRWZmZWN0PiYgZWZmZWN0LCBGaWx0ZXJFZmZlY3RWZWN0b3ImIHN0YWNrLCBTVkdGaWx0
ZXJFeHByZXNzaW9uJiBleHByZXNzaW9uKSBjb25zdAogewogICAgIC8vIEEgY3ljbGUgaXMgZGV0
ZWN0ZWQuCiAgICAgaWYgKHN0YWNrLmNvbnRhaW5zKGVmZmVjdCkpCkBAIC0yMDksNyArMjE3LDcg
QEAgc3RhdGljIGJvb2wgYnVpbGRFZmZlY3RFeHByZXNzaW9uKGNvbnN0IFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVmZmUKIAogICAgIHN0YWNrLmFwcGVuZChlZmZlY3QpOwog
ICAgIAotICAgIGV4cHJlc3Npb24uYXBwZW5kKGVmZmVjdCk7CisgICAgZXhwcmVzc2lvbi5hcHBl
bmQoeyAqZWZmZWN0LCBlZmZlY3RHZW9tZXRyeSgqZWZmZWN0KSB9KTsKIAogICAgIGZvciAoYXV0
byYgaW5wdXRFZmZlY3QgOiBlZmZlY3QtPmlucHV0RWZmZWN0cygpKSB7CiAgICAgICAgIGlmICgh
YnVpbGRFZmZlY3RFeHByZXNzaW9uKGlucHV0RWZmZWN0LCBzdGFjaywgZXhwcmVzc2lvbikpCkBA
IC0yMjMsNyArMjMxLDcgQEAgc3RhdGljIGJvb2wgYnVpbGRFZmZlY3RFeHByZXNzaW9uKGNvbnN0
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiBlZmZlY3QsIEZpbHRlckVmZmUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEV4cHJlc3Npb24oRmlsdGVyRWZm
ZWN0VmVjdG9yJiBleHByZXNzaW9uKSBjb25zdAorYm9vbCBTVkdGaWx0ZXJCdWlsZGVyOjpidWls
ZEV4cHJlc3Npb24oU1ZHRmlsdGVyRXhwcmVzc2lvbiYgZXhwcmVzc2lvbikgY29uc3QKIHsKICAg
ICBpZiAoIW1fbGFzdEVmZmVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmlu
ZGV4IGZiOWRjZDc4ZjlkOTNlZmJkMTgzMmE1ZWY0YTVjNDMwNjJjNjU3YzUuLjE4ODg0NTBjNWVk
ZmM2NzNiMjFiNTcxNGI2YWI3YWY2ZDRmNGY5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAgLTIyLDYgKzIy
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTY4LDkg
KzY5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0
ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOwogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxk
RmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50Jik7Ci0gICAgYm9vbCBidWlsZEV4cHJlc3Np
b24oRmlsdGVyRWZmZWN0VmVjdG9yJiBleHByZXNzaW9uKSBjb25zdDsKLQotICAgIEZpbHRlckVm
ZmVjdEdlb21ldHJ5TWFwIHRha2VFZmZlY3RHZW9tZXRyeU1hcCgpIHsgcmV0dXJuIFdURk1vdmUo
bV9lZmZlY3RHZW9tZXRyeU1hcCk7IH0KKyAgICBib29sIGJ1aWxkRXhwcmVzc2lvbihTVkdGaWx0
ZXJFeHByZXNzaW9uJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgaW5saW5lIHZvaWQgYWRkQnVp
bHRpbkVmZmVjdHMoKQpAQCAtNzksNiArNzgsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9l
ZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgpKTsKICAgICB9CiAK
KyAgICBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiBlZmZlY3RHZW9tZXRyeShG
aWx0ZXJFZmZlY3QmKSBjb25zdDsKKyAgICBib29sIGJ1aWxkRWZmZWN0RXhwcmVzc2lvbihjb25z
dCBSZWZQdHI8RmlsdGVyRWZmZWN0PiYsIEZpbHRlckVmZmVjdFZlY3RvciYgc3RhY2ssIFNWR0Zp
bHRlckV4cHJlc3Npb24mKSBjb25zdDsKKwogICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRy
PEZpbHRlckVmZmVjdD4+IG1fYnVpbHRpbkVmZmVjdHM7CiAgICAgSGFzaE1hcDxBdG9tU3RyaW5n
LCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gbV9uYW1lZEVmZmVjdHM7CiAgICAgLy8gVGhlIHZhbHVl
IGlzIGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2UgZmlsdGVyIGVmZmVjdHMsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHByZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJFeHBy
ZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRkY2M3MmRiYWE2OGU4NGY3MTIyNGQ0NjdjNzEyNmM2ZDA3
MTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckV4cHJlc3Npb24uaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdDsKKworc3RydWN0IFNWR0ZpbHRlckV4cHJlc3Np
b25UZXJtIHsKKyAgICBSZWY8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7CisgICAgc3RkOjpvcHRpb25h
bDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4gZ2VvbWV0cnk7Cit9OworCit1c2luZyBTVkdGaWx0ZXJF
eHByZXNzaW9uID0gVmVjdG9yPFNWR0ZpbHRlckV4cHJlc3Npb25UZXJtPjsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>