<?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>183551</bug_id>
          
          <creation_ts>2018-03-11 17:34:47 -0700</creation_ts>
          <short_desc>[LayoutReloaded] Add Line class for InlineFormattingContext -and move files around.</short_desc>
          <delta_ts>2018-03-12 17:24:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1405606</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-03-11 17:34:47 -0700</bug_when>
    <thetext>ssia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405608</commentid>
    <comment_count>1</comment_count>
      <attachid>335557</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-03-11 17:53:09 -0700</bug_when>
    <thetext>Created attachment 335557
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405643</commentid>
    <comment_count>2</comment_count>
      <attachid>335557</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-03-11 20:18:59 -0700</bug_when>
    <thetext>Comment on attachment 335557
Patch

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

rs=me

&gt; Tools/LayoutReloaded/FormattingContext/InlineFormatting/Line.js:43
&gt; +

Super nit - extra newline here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405653</commentid>
    <comment_count>3</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-03-11 20:47:03 -0700</bug_when>
    <thetext>Committed r229522: &lt;https://trac.webkit.org/changeset/229522&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406002</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-12 17:24:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/38397875&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335557</attachid>
            <date>2018-03-11 17:53:09 -0700</date>
            <delta_ts>2018-03-11 20:18:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183551-20180311175308.patch</filename>
            <type>text/plain</type>
            <size>149803</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NTAxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTk2OTFjM2YxZjZjNDljOTkyNDc0N2NkZTQ5ZDI1OTU2
OWNmOWVmYS4uZGM5YmQyMTRmYzc0MDEyNjdlMDg1ZWY0OTZhNDI2M2M4ZWUwYjhkZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
MCBAQAorMjAxOC0wMy0xMSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFtMYXlvdXRSZWxvYWRlZF0gQWRkIExpbmUgY2xhc3MgZm9yIElubGluZUZvcm1hdHRpbmdD
b250ZXh0IC1hbmQgbW92ZSBmaWxlcyBhcm91bmQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM1NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIExheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0
L0Jsb2NrRm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmpzOiBSZW5hbWVkIGZyb20g
VG9vbHMvTGF5b3V0UmVsb2FkZWQvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5qcy4KKyAgICAgICAg
KEJsb2NrRm9ybWF0dGluZ0NvbnRleHQpOgorICAgICAgICAoQmxvY2tGb3JtYXR0aW5nQ29udGV4
dC5wcm90b3R5cGUubGF5b3V0KToKKyAgICAgICAgKEJsb2NrRm9ybWF0dGluZ0NvbnRleHQucHJv
dG90eXBlLmNvbXB1dGVXaWR0aCk6CisgICAgICAgIChCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LnBy
b3RvdHlwZS5jb21wdXRlSGVpZ2h0KToKKyAgICAgICAgKEJsb2NrRm9ybWF0dGluZ0NvbnRleHQu
cHJvdG90eXBlLm1hcmdpblRvcCk6CisgICAgICAgIChCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LnBy
b3RvdHlwZS5tYXJnaW5Cb3R0b20pOgorICAgICAgICAoQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5w
cm90b3R5cGUuX2NvbXB1dGVTdGF0aWNQb3NpdGlvbik6CisgICAgICAgIChCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0LnByb3RvdHlwZS5fcGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4pOgorICAg
ICAgICAoQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5wcm90b3R5cGUuX3BsYWNlT3V0T2ZGbG93RGVz
Y2VuZGFudHMpOgorICAgICAgICAoQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5wcm90b3R5cGUuX2Nv
bXB1dGVPdXRPZkZsb3dXaWR0aCk6CisgICAgICAgIChCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LnBy
b3RvdHlwZS5fY29tcHV0ZUZsb2F0aW5nV2lkdGgpOgorICAgICAgICAoQmxvY2tGb3JtYXR0aW5n
Q29udGV4dC5wcm90b3R5cGUuX2NvbXB1dGVJbkZsb3dXaWR0aCk6CisgICAgICAgIChCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5fY29tcHV0ZU91dE9mRmxvd0hlaWdodCk6CisgICAg
ICAgIChCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5fY29tcHV0ZUZsb2F0aW5nSGVp
Z2h0KToKKyAgICAgICAgKEJsb2NrRm9ybWF0dGluZ0NvbnRleHQucHJvdG90eXBlLl9jb21wdXRl
SW5GbG93SGVpZ2h0KToKKyAgICAgICAgKEJsb2NrRm9ybWF0dGluZ0NvbnRleHQucHJvdG90eXBl
Ll9jb21wdXRlSG9yaXpvbnRhbENvbnN0cmFpbnQpOgorICAgICAgICAoQmxvY2tGb3JtYXR0aW5n
Q29udGV4dC5wcm90b3R5cGUuX2NvbXB1dGVDb250ZW50SGVpZ2h0KToKKyAgICAgICAgKEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQucHJvdG90eXBlLl9jb21wdXRlSW5GbG93UG9zaXRpb25lZFBvc2l0
aW9uKToKKyAgICAgICAgKEJsb2NrRm9ybWF0dGluZ0NvbnRleHQucHJvdG90eXBlLl9jb21wdXRl
T3V0T2ZGbG93UG9zaXRpb24pOgorICAgICAgICAoQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5wcm90
b3R5cGUuX3Nocmlua1RvRml0V2lkdGgpOgorICAgICAgICAqIExheW91dFJlbG9hZGVkL0Zvcm1h
dHRpbmdDb250ZXh0L0Jsb2NrRm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmpzOiBSZW5h
bWVkIGZyb20gVG9vbHMvTGF5b3V0UmVsb2FkZWQvQmxvY2tNYXJnaW5Db2xsYXBzZS5qcy4KKyAg
ICAgICAgKEJsb2NrTWFyZ2luQ29sbGFwc2UubWFyZ2luVG9wKToKKyAgICAgICAgKEJsb2NrTWFy
Z2luQ29sbGFwc2UubWFyZ2luQm90dG9tKToKKyAgICAgICAgKEJsb2NrTWFyZ2luQ29sbGFwc2Uu
X2lzTWFyZ2luVG9wQ29sbGFwc2VkV2l0aFNpYmxpbmcpOgorICAgICAgICAoQmxvY2tNYXJnaW5D
b2xsYXBzZS5faXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaXRoU2libGluZyk6CisgICAgICAgIChC
bG9ja01hcmdpbkNvbGxhcHNlLl9pc01hcmdpblRvcENvbGxhcHNlZFdpdGhQYXJlbnQpOgorICAg
ICAgICAoQmxvY2tNYXJnaW5Db2xsYXBzZS5faXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaXRoUGFy
ZW50KToKKyAgICAgICAgKEJsb2NrTWFyZ2luQ29sbGFwc2UuX25vbkNvbGxhcHNlZE1hcmdpblRv
cCk6CisgICAgICAgIChCbG9ja01hcmdpbkNvbGxhcHNlLl9ub25Db2xsYXBzZWRNYXJnaW5Cb3R0
b20pOgorICAgICAgICAoQmxvY2tNYXJnaW5Db2xsYXBzZS5fY29sbGFwc2VkTWFyZ2luVG9wRnJv
bUZpcnN0Q2hpbGQpOgorICAgICAgICAoQmxvY2tNYXJnaW5Db2xsYXBzZS5fY29sbGFwc2VkTWFy
Z2luQm90dG9tRnJvbUxhc3RDaGlsZCk6CisgICAgICAgIChCbG9ja01hcmdpbkNvbGxhcHNlLl9t
YXJnaW5WYWx1ZSk6CisgICAgICAgIChCbG9ja01hcmdpbkNvbGxhcHNlLl9oYXNBZGpvaW5pbmdN
YXJnaW5Ub3BBbmRCb3R0b20pOgorICAgICAgICAoQmxvY2tNYXJnaW5Db2xsYXBzZSk6CisgICAg
ICAgICogTGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQvRmxvYXRpbmdDb250ZXh0Lmpz
OiBSZW5hbWVkIGZyb20gVG9vbHMvTGF5b3V0UmVsb2FkZWQvRmxvYXRpbmdDb250ZXh0LmpzLgor
ICAgICAgICAoRmxvYXRpbmdDb250ZXh0KToKKyAgICAgICAgKEZsb2F0aW5nQ29udGV4dC5wcm90
b3R5cGUuY29tcHV0ZVBvc2l0aW9uKToKKyAgICAgICAgKEZsb2F0aW5nQ29udGV4dC5wcm90b3R5
cGUuYm90dG9tKToKKyAgICAgICAgKEZsb2F0aW5nQ29udGV4dC5wcm90b3R5cGUuX3Bvc2l0aW9u
Rm9yRmxvYXRpbmcpOgorICAgICAgICAoRmxvYXRpbmdDb250ZXh0LnByb3RvdHlwZS5fcG9zaXRp
b25Gb3JDbGVhcik6CisgICAgICAgIChGbG9hdGluZ0NvbnRleHQucHJvdG90eXBlLl9jb21wdXRl
UG9zaXRpb25Ub0F2b2lkSW50cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKEZsb2F0aW5nQ29udGV4
dC5wcm90b3R5cGUuX2FkZEZsb2F0aW5nKToKKyAgICAgICAgKEZsb2F0aW5nQ29udGV4dC5wcm90
b3R5cGUuX2ZpbmRJbm5lck1vc3RMZWZ0QW5kUmlnaHQpOgorICAgICAgICAoRmxvYXRpbmdDb250
ZXh0LnByb3RvdHlwZS5fbW92ZVRvTmV4dFZlcnRpY2FsUG9zaXRpb24pOgorICAgICAgICAoRmxv
YXRpbmdDb250ZXh0LnByb3RvdHlwZS5fYXZhaWxhYmxlU3BhY2UpOgorICAgICAgICAoRmxvYXRp
bmdDb250ZXh0LnByb3RvdHlwZS5fZmluZEZsb2F0aW5nQXRWZXJ0aWNhbFBvc2l0aW9uKToKKyAg
ICAgICAgKEZsb2F0aW5nQ29udGV4dC5wcm90b3R5cGUuX2lzRW1wdHkpOgorICAgICAgICAoRmxv
YXRpbmdDb250ZXh0LnByb3RvdHlwZS5fYWRqdXN0ZWRGbG9hdGluZ1Bvc2l0aW9uKToKKyAgICAg
ICAgKEZsb2F0aW5nQ29udGV4dC5wcm90b3R5cGUuX2JvdHRvbSk6CisgICAgICAgIChGbG9hdGlu
Z0NvbnRleHQucHJvdG90eXBlLl9mb3JtYXR0aW5nQ29udGV4dCk6CisgICAgICAgICogTGF5b3V0
UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQvRm9ybWF0dGluZ0NvbnRleHQuanM6IFJlbmFtZWQg
ZnJvbSBUb29scy9MYXlvdXRSZWxvYWRlZC9Gb3JtYXR0aW5nQ29udGV4dC5qcy4KKyAgICAgICAg
KEZvcm1hdHRpbmdDb250ZXh0KToKKyAgICAgICAgKEZvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlw
ZS5yb290Q29udGFpbmVyKToKKyAgICAgICAgKEZvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5m
bG9hdGluZ0NvbnRleHQpOgorICAgICAgICAoRm9ybWF0dGluZ0NvbnRleHQucHJvdG90eXBlLmxh
eW91dCk6CisgICAgICAgIChGb3JtYXR0aW5nQ29udGV4dC5wcm90b3R5cGUuY29tcHV0ZVdpZHRo
KToKKyAgICAgICAgKEZvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5jb21wdXRlSGVpZ2h0KToK
KyAgICAgICAgKEZvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5tYXJnaW5Ub3ApOgorICAgICAg
ICAoRm9ybWF0dGluZ0NvbnRleHQucHJvdG90eXBlLm1hcmdpbkxlZnQpOgorICAgICAgICAoRm9y
bWF0dGluZ0NvbnRleHQucHJvdG90eXBlLm1hcmdpbkJvdHRvbSk6CisgICAgICAgIChGb3JtYXR0
aW5nQ29udGV4dC5wcm90b3R5cGUubWFyZ2luUmlnaHQpOgorICAgICAgICAoRm9ybWF0dGluZ0Nv
bnRleHQucHJvdG90eXBlLmFic29sdXRlTWFyZ2luQm94KToKKyAgICAgICAgKEZvcm1hdHRpbmdD
b250ZXh0LnByb3RvdHlwZS5hYnNvbHV0ZUJvcmRlckJveCk6CisgICAgICAgIChGb3JtYXR0aW5n
Q29udGV4dC5wcm90b3R5cGUuYWJzb2x1dGVQYWRkaW5nQm94KToKKyAgICAgICAgKEZvcm1hdHRp
bmdDb250ZXh0LnByb3RvdHlwZS5hYnNvbHV0ZUNvbnRlbnRCb3gpOgorICAgICAgICAqIExheW91
dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0lubGluZUZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuanM6IFJlbmFtZWQgZnJvbSBUb29scy9MYXlvdXRSZWxvYWRlZC9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5qcy4KKyAgICAgICAgKElubGluZUZvcm1hdHRpbmdDb250ZXh0KToK
KyAgICAgICAgKElubGluZUZvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5sYXlvdXQpOgorICAg
ICAgICAoSW5saW5lRm9ybWF0dGluZ0NvbnRleHQucHJvdG90eXBlLl9oYW5kbGVJbmxpbmVCb3gp
OgorICAgICAgICAoSW5saW5lRm9ybWF0dGluZ0NvbnRleHQucHJvdG90eXBlLl9oYW5kbGVUZXh0
KToKKyAgICAgICAgKElubGluZUZvcm1hdHRpbmdDb250ZXh0LnByb3RvdHlwZS5fY29tbWl0TGlu
ZSk6CisgICAgICAgIChJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5wcm90b3R5cGUuX2xpbmUpOgor
ICAgICAgICAqIExheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0lubGluZUZvcm1hdHRp
bmcvTGluZS5qczogQ29waWVkIGZyb20gVG9vbHMvTGF5b3V0UmVsb2FkZWQvSW5pdGlhbEJsb2Nr
Q29udGFpbmVyLmpzLgorICAgICAgICAoTGluZSk6CisgICAgICAgIChMaW5lLnByb3RvdHlwZS5p
c0VtcHR5KToKKyAgICAgICAgKExpbmUucHJvdG90eXBlLmF2YWlsYWJsZVdpZHRoKToKKyAgICAg
ICAgKExpbmUucHJvdG90eXBlLmFwcGVuZEZyYWdtZW50KToKKyAgICAgICAgKiBMYXlvdXRSZWxv
YWRlZC9MYXlvdXRSZWxvYWRlZC54Y3dvcmtzcGFjZS9jb250ZW50cy54Y3dvcmtzcGFjZWRhdGE6
CisgICAgICAgICogTGF5b3V0UmVsb2FkZWQvTGF5b3V0VHJlZS9CbG9ja0NvbnRhaW5lci5qczog
UmVuYW1lZCBmcm9tIFRvb2xzL0xheW91dFJlbG9hZGVkL0Jsb2NrQ29udGFpbmVyLmpzLgorICAg
ICAgICAoQmxvY2tDb250YWluZXIpOgorICAgICAgICAoQmxvY2tDb250YWluZXIucHJvdG90eXBl
LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQpOgorICAgICAgICAqIExheW91dFJl
bG9hZGVkL0xheW91dFRyZWUvQm94LmpzOiBSZW5hbWVkIGZyb20gVG9vbHMvTGF5b3V0UmVsb2Fk
ZWQvQm94LmpzLgorICAgICAgICAoQm94KToKKyAgICAgICAgKEJveC5wcm90b3R5cGUuaWQpOgor
ICAgICAgICAoQm94LnByb3RvdHlwZS5zZXRSZW5kZXJlck5hbWUpOgorICAgICAgICAoQm94LnBy
b3RvdHlwZS5uYW1lKToKKyAgICAgICAgKEJveC5wcm90b3R5cGUubm9kZSk6CisgICAgICAgIChC
b3gucHJvdG90eXBlLnBhcmVudCk6CisgICAgICAgIChCb3gucHJvdG90eXBlLm5leHRTaWJsaW5n
KToKKyAgICAgICAgKEJveC5wcm90b3R5cGUubmV4dEluRmxvd1NpYmxpbmcpOgorICAgICAgICAo
Qm94LnByb3RvdHlwZS5wcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5w
cmV2aW91c0luRmxvd1NpYmxpbmcpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5zZXRQYXJlbnQp
OgorICAgICAgICAoQm94LnByb3RvdHlwZS5zZXROZXh0U2libGluZyk6CisgICAgICAgIChCb3gu
cHJvdG90eXBlLnNldFByZXZpb3VzU2libGluZyk6CisgICAgICAgIChCb3gucHJvdG90eXBlLnJl
Y3QpOgorICAgICAgICAoQm94LnByb3RvdHlwZS50b3BMZWZ0KToKKyAgICAgICAgKEJveC5wcm90
b3R5cGUuYm90dG9tUmlnaHQpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5zZXRUb3BMZWZ0KToK
KyAgICAgICAgKEJveC5wcm90b3R5cGUuc2V0U2l6ZSk6CisgICAgICAgIChCb3gucHJvdG90eXBl
LnNldFdpZHRoKToKKyAgICAgICAgKEJveC5wcm90b3R5cGUuc2V0SGVpZ2h0KToKKyAgICAgICAg
KEJveC5wcm90b3R5cGUuaXNDb250YWluZXIpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5pc0Js
b2NrTGV2ZWxCb3gpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5pc0Jsb2NrQ29udGFpbmVyQm94
KToKKyAgICAgICAgKEJveC5wcm90b3R5cGUuaXNJbmxpbmVMZXZlbEJveCk6CisgICAgICAgIChC
b3gucHJvdG90eXBlLnNldElzQW5vbnltb3VzKToKKyAgICAgICAgKEJveC5wcm90b3R5cGUuaXNB
bm9ueW1vdXMpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdD
b250ZXh0KToKKyAgICAgICAgKEJveC5wcm90b3R5cGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29u
dGV4dCk6CisgICAgICAgIChCb3gucHJvdG90eXBlLmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5n
Q29udGV4dCk6CisgICAgICAgIChCb3gucHJvdG90eXBlLmVzdGFibGlzaGVzSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5pc1Bvc2l0aW9uZWQpOgorICAg
ICAgICAoQm94LnByb3RvdHlwZS5pc1JlbGF0aXZlUG9zaXRpb25lZCk6CisgICAgICAgIChCb3gu
cHJvdG90eXBlLmlzQWJzb2x1dGVQb3NpdGlvbmVkKToKKyAgICAgICAgKEJveC5wcm90b3R5cGUu
aXNGaXhlZFBvc2l0aW9uZWQpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5pc0luRmxvdyk6Cisg
ICAgICAgIChCb3gucHJvdG90eXBlLmlzT3V0T2ZGbG93UG9zaXRpb25lZCk6CisgICAgICAgIChC
b3gucHJvdG90eXBlLmlzSW5GbG93UG9zaXRpb25lZCk6CisgICAgICAgIChCb3gucHJvdG90eXBl
LmlzRmxvYXRpbmdQb3NpdGlvbmVkKToKKyAgICAgICAgKEJveC5wcm90b3R5cGUuaXNGbG9hdGlu
Z09yT3V0T2ZGbG93UG9zaXRpb25lZCk6CisgICAgICAgIChCb3gucHJvdG90eXBlLmlzUm9vdEVs
ZW1lbnQpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5jb250YWluaW5nQmxvY2spOgorICAgICAg
ICAoQm94LnByb3RvdHlwZS5ib3JkZXJCb3gpOgorICAgICAgICAoQm94LnByb3RvdHlwZS5wYWRk
aW5nQm94KToKKyAgICAgICAgKEJveC5wcm90b3R5cGUuY29udGVudEJveCk6CisgICAgICAgICog
TGF5b3V0UmVsb2FkZWQvTGF5b3V0VHJlZS9Db250YWluZXIuanM6IFJlbmFtZWQgZnJvbSBUb29s
cy9MYXlvdXRSZWxvYWRlZC9Db250YWluZXIuanMuCisgICAgICAgIChDb250YWluZXIpOgorICAg
ICAgICAoQ29udGFpbmVyLnByb3RvdHlwZS5pc0NvbnRhaW5lcik6CisgICAgICAgIChDb250YWlu
ZXIucHJvdG90eXBlLnNldEZpcnN0Q2hpbGQpOgorICAgICAgICAoQ29udGFpbmVyLnByb3RvdHlw
ZS5zZXRMYXN0Q2hpbGQpOgorICAgICAgICAoQ29udGFpbmVyLnByb3RvdHlwZS5maXJzdENoaWxk
KToKKyAgICAgICAgKENvbnRhaW5lci5wcm90b3R5cGUuZmlyc3RJbkZsb3dDaGlsZCk6CisgICAg
ICAgIChDb250YWluZXIucHJvdG90eXBlLmxhc3RDaGlsZCk6CisgICAgICAgIChDb250YWluZXIu
cHJvdG90eXBlLmxhc3RJbkZsb3dDaGlsZCk6CisgICAgICAgIChDb250YWluZXIucHJvdG90eXBl
Lmhhc0NoaWxkKToKKyAgICAgICAgKENvbnRhaW5lci5wcm90b3R5cGUuaGFzSW5GbG93Q2hpbGQp
OgorICAgICAgICAqIExheW91dFJlbG9hZGVkL0xheW91dFRyZWUvSW5pdGlhbEJsb2NrQ29udGFp
bmVyLmpzOiBSZW5hbWVkIGZyb20gVG9vbHMvTGF5b3V0UmVsb2FkZWQvSW5pdGlhbEJsb2NrQ29u
dGFpbmVyLmpzLgorICAgICAgICAoSW5pdGlhbEJsb2NrQ29udGFpbmVyKToKKyAgICAgICAgKElu
aXRpYWxCbG9ja0NvbnRhaW5lci5wcm90b3R5cGUuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0KToKKyAgICAgICAgKEluaXRpYWxCbG9ja0NvbnRhaW5lci5wcm90b3R5cGUucGFkZGlu
Z0JveCk6CisgICAgICAgIChJbml0aWFsQmxvY2tDb250YWluZXIucHJvdG90eXBlLmNvbnRlbnRC
b3gpOgorICAgICAgICAqIExheW91dFJlbG9hZGVkL0xheW91dFRyZWUvSW5saW5lQm94LmpzOiBS
ZW5hbWVkIGZyb20gVG9vbHMvTGF5b3V0UmVsb2FkZWQvSW5saW5lQm94LmpzLgorICAgICAgICAo
SW5saW5lQm94KToKKyAgICAgICAgKElubGluZUJveC5wcm90b3R5cGUuc2V0VGV4dCk6CisgICAg
ICAgIChJbmxpbmVCb3gucHJvdG90eXBlLnRleHQpOgorICAgICAgICAqIExheW91dFJlbG9hZGVk
L0xheW91dFRyZWUvVGV4dC5qczogUmVuYW1lZCBmcm9tIFRvb2xzL0xheW91dFJlbG9hZGVkL1Rl
eHQuanMuCisgICAgICAgIChUZXh0KToKKyAgICAgICAgKFRleHQucHJvdG90eXBlLm5vZGUpOgor
ICAgICAgICAoVGV4dC5wcm90b3R5cGUuY29udGVudCk6CisgICAgICAgIChUZXh0LnByb3RvdHlw
ZS5sZW5ndGgpOgorICAgICAgICAqIExheW91dFJlbG9hZGVkL1V0aWxzLmpzOgorICAgICAgICAo
VXRpbHMubmV4dEJyZWFraW5nT3Bwb3J0dW5pdHkpOgorICAgICAgICAoVXRpbHMubWVhc3VyZVRl
eHQpOgorICAgICAgICAqIExheW91dFJlbG9hZGVkL21pc2MvaGVhZGVycy9MaW5lLmg6IENvcGll
ZCBmcm9tIFRvb2xzL0xheW91dFJlbG9hZGVkL21pc2MvaGVhZGVycy9UZXh0LmguCisgICAgICAg
ICogTGF5b3V0UmVsb2FkZWQvbWlzYy9oZWFkZXJzL1RleHQuaDoKKyAgICAgICAgKiBMYXlvdXRS
ZWxvYWRlZC90ZXN0L2JvcmRlci1zaW1wbGUuaHRtbDoKKyAgICAgICAgKiBMYXlvdXRSZWxvYWRl
ZC90ZXN0L2luZGV4Lmh0bWw6CisKIDIwMTgtMDMtMDkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTGF5b3V0UmVsb2FkZWRdIEluaXRpYWwgY29tbWl0IC1ibG9j
ayBmb3JtYXR0aW5nIGNvbnRleHQuCmRpZmYgLS1naXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9C
bG9ja0NvbnRhaW5lci5qcyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL0Jsb2NrQ29udGFpbmVyLmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTQ5MWMxOTkwODg0ZmQ2OWRlMGRjYTRj
NzhmZjRmZjU2YjdkOTQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1Rvb2xzL0xheW91dFJlbG9hZGVkL0Jsb2NrQ29udGFpbmVyLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLWNsYXNzIEJsb2NrQ29udGFpbmVyIGV4dGVuZHMgQ29udGFpbmVyIHsKLSAgICBj
b25zdHJ1Y3Rvcihub2RlLCBpZCkgewotICAgICAgICBzdXBlcihub2RlLCBpZCk7Ci0gICAgfQot
Ci0gICAgZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpIHsKLSAgICAgICAgLy8g
OS40LjIgSW5saW5lIGZvcm1hdHRpbmcgY29udGV4dHMKLSAgICAgICAgLy8gQW4gaW5saW5lIGZv
cm1hdHRpbmcgY29udGV4dCBpcyBlc3RhYmxpc2hlZCBieSBhIGJsb2NrIGNvbnRhaW5lciBib3gg
dGhhdCBjb250YWlucyBubyBibG9jay1sZXZlbCBib3hlcy4KLSAgICAgICAgZm9yIChsZXQgY2hp
bGQgPSB0aGlzLmZpcnN0SW5GbG93Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQubmV4dElu
Rmxvd1NpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLmlzQmxvY2tMZXZlbEJveCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdGhpcy5oYXNJbkZsb3dDaGlsZCgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0xh
eW91dFJlbG9hZGVkL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuanMgYi9Ub29scy9MYXlvdXRSZWxv
YWRlZC9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1NGU3MjhjMjg1MDg3Nzk0MzNlZTEzNzU4YzZmMTQ5ZGM1OWY0NGJmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0xheW91dFJlbG9hZGVk
L0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi1jbGFzcyBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0IGV4dGVuZHMgRm9ybWF0dGluZ0NvbnRleHQgewotICAgIGNvbnN0
cnVjdG9yKHJvb3QpIHsKLSAgICAgICAgc3VwZXIocm9vdCk7Ci0gICAgICAgIC8vIE5ldyBibG9j
ayBmb3JtYXR0aW5nIGNvbnRleHQgYWx3YXlzIGVzdGFibGlzaGVzIGEgbmV3IGZsb2F0aW5nIGNv
bnRleHQuCi0gICAgICAgIHRoaXMubV9mbG9hdGluZ0NvbnRleHQgPSBuZXcgRmxvYXRpbmdDb250
ZXh0KHRoaXMpOwotICAgIH0KLQotICAgIGxheW91dChsYXlvdXRDb250ZXh0KSB7Ci0gICAgICAg
IC8vIDkuNC4xIEJsb2NrIGZvcm1hdHRpbmcgY29udGV4dHMKLSAgICAgICAgLy8gSW4gYSBibG9j
ayBmb3JtYXR0aW5nIGNvbnRleHQsIGJveGVzIGFyZSBsYWlkIG91dCBvbmUgYWZ0ZXIgdGhlIG90
aGVyLCB2ZXJ0aWNhbGx5LCBiZWdpbm5pbmcgYXQgdGhlIHRvcCBvZiBhIGNvbnRhaW5pbmcgYmxv
Y2suCi0gICAgICAgIC8vIFRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBzaWJsaW5n
IGJveGVzIGlzIGRldGVybWluZWQgYnkgdGhlICdtYXJnaW4nIHByb3BlcnRpZXMuCi0gICAgICAg
IC8vIFZlcnRpY2FsIG1hcmdpbnMgYmV0d2VlbiBhZGphY2VudCBibG9jay1sZXZlbCBib3hlcyBp
biBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBjb2xsYXBzZS4KLSAgICAgICAgaWYgKCF0aGlz
LnJvb3RDb250YWluZXIoKS5maXJzdENoaWxkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIC8vIFRoaXMgaXMgYSBwb3N0LW9yZGVyIHRyZWUgdHJhdmVyc2FsIGxheW91dC4KLSAgICAg
ICAgbGV0IGxheW91dFN0YWNrID0gbmV3IEFycmF5KCk7Ci0gICAgICAgIC8vIFRoZSByb290IGNv
bnRhaW5lciBsYXlvdXQgaXMgZG9uZSBpbiB0aGUgZm9ybWF0dGluZyBjb250ZXh0IGl0IGxpdmVz
IGluLCBub3QgdGhhdCBvbmUgaXQgY3JlYXRlcywgc28gbGV0J3Mgc3RhcnQgd2l0aCB0aGUgZmly
c3QgY2hpbGQuCi0gICAgICAgIGxheW91dFN0YWNrLnB1c2godGhpcy5yb290Q29udGFpbmVyKCku
Zmlyc3RDaGlsZCgpKTsKLSAgICAgICAgLy8gMS4gR28gYWxsIHRoZSB3YXkgZG93biB0byB0aGUg
bGVhZiBub2RlCi0gICAgICAgIC8vIDIuIENvbXB1dGUgc3RhdGljIHBvc2l0aW9uIGFuZCB3aWR0
aCBhcyB3ZSB0cmF2ZXJzIGRvd24KLSAgICAgICAgLy8gMy4gQXMgd2UgY2xpbWIgYmFjayBvbiB0
aGUgdHJlZSwgY29tcHV0ZSBoZWlnaHQgYW5kIGZpbmlhbGl6ZSBwb3NpdGlvbgotICAgICAgICAv
LyAoQW55IHN1YnRyZWVzIHdpdGggbmV3IGZvcm1hdHRpbmcgY29udGV4dHMgbmVlZCB0byBsYXlv
dXQgc3luY2hyb25vdXNseSkKLSAgICAgICAgd2hpbGUgKGxheW91dFN0YWNrLmxlbmd0aCkgewot
ICAgICAgICAgICAgLy8gVHJhdmVycyBkb3duIG9uIHRoZSBkZXNjZW5kYW50cyB1bnRpbCB3ZSBm
aW5kIGEgbGVhZiBub2RlLgotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAg
ICAgICBsZXQgYm94ID0gbGF5b3V0U3RhY2tbbGF5b3V0U3RhY2subGVuZ3RoIC0gMV07Ci0gICAg
ICAgICAgICAgICAgYm94LnNldFdpZHRoKHRoaXMuY29tcHV0ZVdpZHRoKGJveCkpOwotICAgICAg
ICAgICAgICAgIGJveC5zZXRUb3BMZWZ0KHRoaXMuX2NvbXB1dGVTdGF0aWNQb3NpdGlvbihib3gp
KTsKLSAgICAgICAgICAgICAgICBpZiAoYm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQo
KSkgewotICAgICAgICAgICAgICAgICAgICBsYXlvdXRDb250ZXh0LmxheW91dEZvcm1hdHRpbmdD
b250ZXh0KGJveC5lc3RhYmxpc2hlZEZvcm1hdHRpbmdDb250ZXh0KCkpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFi
b3guaXNDb250YWluZXIoKSB8fCAhYm94Lmhhc0NoaWxkKCkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGxheW91dFN0YWNrLnB1c2goYm94LmZpcnN0Q2hpbGQo
KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENsaW1iIGJhY2sgb24gdGhlIGFu
Y2VzdG9ycyBhbmQgY29tcHV0ZSBoZWlnaHQvZmluYWwgcG9zaXRpb24uCi0gICAgICAgICAgICB3
aGlsZSAobGF5b3V0U3RhY2subGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWxsIGluZmxv
dyBkZXNjZW5kYW50cyAoaWYgdGhlcmUgYXJlIGFueSkgYXJlIGxhaWQgb3V0IGJ5IG5vdy4gTGV0
J3MgY29tcHV0ZSB0aGUgYm94J3MgaGVpZ2h0LgotICAgICAgICAgICAgICAgIGxldCBib3ggPSBs
YXlvdXRTdGFjay5wb3AoKTsKLSAgICAgICAgICAgICAgICBib3guc2V0SGVpZ2h0KHRoaXMuY29t
cHV0ZUhlaWdodChib3gpKTsKLSAgICAgICAgICAgICAgICAvLyBBZGp1c3QgcG9zaXRpb24gbm93
IHRoYXQgd2UgaGF2ZSBhbGwgdGhlIHByZXZpb3VzIGZsb2F0cyBwbGFjZWQgaW4gdGhpcyBjb250
ZXh0IC1pZiBuZWVkZWQuCi0gICAgICAgICAgICAgICAgYm94LnNldFRvcExlZnQodGhpcy5mbG9h
dGluZ0NvbnRleHQoKS5jb21wdXRlUG9zaXRpb24oYm94KSk7Ci0gICAgICAgICAgICAgICAgLy8g
TW92ZSBwb3NpdGlvbmVkIGNoaWxkcmVuIHRvIHRoZWlyIGZpbmFsIHBvc2l0aW9uLgotICAgICAg
ICAgICAgICAgIGlmIChib3guaXNDb250YWluZXIoKSkgewotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9wbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihib3gpOwotICAgICAgICAgICAgICAg
ICAgICAvLyBQbGFjZSB0aGUgb3V0IG9mIGZsb3cgY29udGVudC4KLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fcGxhY2VPdXRPZkZsb3dEZXNjZW5kYW50cyhib3gpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoYm94Lm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbGF5b3V0U3RhY2sucHVzaChib3gubmV4dFNpYmxpbmcoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAvLyBBbmQgZmluYWxseSBwbGFjZSB0aGUgb3V0IG9mIGZsb3cgZGVzY2Vu
ZGFudHMgZm9yIHRoZSByb290LgotICAgICAgICB0aGlzLl9wbGFjZU91dE9mRmxvd0Rlc2NlbmRh
bnRzKHRoaXMucm9vdENvbnRhaW5lcigpKTsKLSAgIH0KLQotICAgIGNvbXB1dGVXaWR0aChib3gp
IHsKLSAgICAgICAgaWYgKGJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLl9jb21wdXRlT3V0T2ZGbG93V2lkdGgoYm94KTsKLSAgICAgICAgaWYgKGJv
eC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1
dGVGbG9hdGluZ1dpZHRoKGJveCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb21wdXRlSW5GbG93
V2lkdGgoYm94KTsKLSAgICB9Ci0KLSAgICBjb21wdXRlSGVpZ2h0KGJveCkgewotICAgICAgICBp
ZiAoYm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2NvbXB1dGVPdXRPZkZsb3dIZWlnaHQoYm94KTsKLSAgICAgICAgaWYgKGJveC5pc0Zsb2F0aW5n
UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVGbG9hdGluZ0hl
aWdodChib3gpOwotICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUluRmxvd0hlaWdodChib3gp
OwotICAgIH0KLQotICAgIG1hcmdpblRvcChib3gpIHsKLSAgICAgICAgcmV0dXJuIEJsb2NrTWFy
Z2luQ29sbGFwc2UubWFyZ2luVG9wKGJveCk7Ci0gICAgfQotCi0gICAgbWFyZ2luQm90dG9tKGJv
eCkgewotICAgICAgICByZXR1cm4gQmxvY2tNYXJnaW5Db2xsYXBzZS5tYXJnaW5Cb3R0b20oYm94
KTsKLSAgICB9Ci0KLSAgICBfY29tcHV0ZVN0YXRpY1Bvc2l0aW9uKGJveCkgewotICAgICAgICAv
LyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCwgYm94ZXMgYXJlIGxhaWQgb3V0IG9uZSBh
ZnRlciB0aGUgb3RoZXIsIHZlcnRpY2FsbHksIGJlZ2lubmluZyBhdCB0aGUgdG9wIG9mIGEgY29u
dGFpbmluZyBibG9jay4KLSAgICAgICAgLy8gVGhlIHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4g
dHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgJ21hcmdpbicgcHJvcGVydGll
cy4KLSAgICAgICAgLy8gVmVydGljYWwgbWFyZ2lucyBiZXR3ZWVuIGFkamFjZW50IGJsb2NrLWxl
dmVsIGJveGVzIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IGNvbGxhcHNlLgotICAgICAg
ICBsZXQgcGFyZW50ID0gYm94LnBhcmVudCgpOwotICAgICAgICAvLyBTdGFydCBmcm9tIHRoZSB0
b3Agb2YgdGhlIGNvbnRhaW5lcidzIGNvbnRlbnQgYm94LgotICAgICAgICBsZXQgcHJldmlvdXNJ
bkZsb3dTaWJsaW5nID0gYm94LnByZXZpb3VzSW5GbG93U2libGluZygpOwotICAgICAgICBsZXQg
Y29udGVudEJvdHRvbSA9IHByZXZpb3VzSW5GbG93U2libGluZyA/IHByZXZpb3VzSW5GbG93U2li
bGluZy5ib3R0b21SaWdodCgpLnRvcCgpICsgdGhpcy5tYXJnaW5Cb3R0b20ocHJldmlvdXNJbkZs
b3dTaWJsaW5nKSA6IHBhcmVudC5jb250ZW50Qm94KCkudG9wKCk7Ci0gICAgICAgIGxldCBwb3Np
dGlvbiA9IG5ldyBMYXlvdXRQb2ludChjb250ZW50Qm90dG9tLCBwYXJlbnQuY29udGVudEJveCgp
LmxlZnQoKSk7Ci0gICAgICAgIHBvc2l0aW9uLm1vdmVCeShuZXcgTGF5b3V0U2l6ZSh0aGlzLm1h
cmdpbkxlZnQoYm94KSwgdGhpcy5tYXJnaW5Ub3AoYm94KSkpOwotICAgICAgICByZXR1cm4gcG9z
aXRpb247Ci0gICAgfQotCi0gICAgX3BsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnRh
aW5lcikgewotICAgICAgICBmb3IgKGxldCBpbkZsb3dDaGlsZCA9IGNvbnRhaW5lci5maXJzdElu
Rmxvd0NoaWxkKCk7IGluRmxvd0NoaWxkOyBpbkZsb3dDaGlsZCA9IGluRmxvd0NoaWxkLm5leHRJ
bkZsb3dTaWJsaW5nKCkpCi0gICAgICAgICAgICBpbkZsb3dDaGlsZC5zZXRUb3BMZWZ0KHRoaXMu
X2NvbXB1dGVJbkZsb3dQb3NpdGlvbmVkUG9zaXRpb24oaW5GbG93Q2hpbGQpKTsKLSAgICB9Ci0K
LSAgICBfcGxhY2VPdXRPZkZsb3dEZXNjZW5kYW50cyhjb250YWluZXIpIHsKLSAgICAgICAgbGV0
IG91dE9mRmxvd0Rlc2NlbmRhbnRzID0gVXRpbHMuY29sbGVjdE91dE9mRmxvd0Rlc2NlbmRhbnRz
KGNvbnRhaW5lcik7Ci0gICAgICAgIGZvciAobGV0IG91dE9mRmxvd0JveCBvZiBvdXRPZkZsb3dE
ZXNjZW5kYW50cykKLSAgICAgICAgICAgIG91dE9mRmxvd0JveC5zZXRUb3BMZWZ0KHRoaXMuX2Nv
bXB1dGVPdXRPZkZsb3dQb3NpdGlvbihvdXRPZkZsb3dCb3gpKTsKLSAgICB9Ci0KLSAgICBfY29t
cHV0ZU91dE9mRmxvd1dpZHRoKGJveCkgewotICAgICAgICAvLyAxMC4zLjcgQWJzb2x1dGVseSBw
b3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMKLQotICAgICAgICAvLyAxLiAnbGVmdCcg
YW5kICd3aWR0aCcgYXJlICdhdXRvJyBhbmQgJ3JpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRo
ZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0LiBUaGVuIHNvbHZlIGZvciAnbGVmdCcKLSAgICAgICAg
Ly8gMi4gJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICd3aWR0aCcgaXMgbm90ICdh
dXRvJywgdGhlbiBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0
YWJsaXNoaW5nCi0gICAgICAgIC8vICAgICB0aGUgc3RhdGljLXBvc2l0aW9uIGNvbnRhaW5pbmcg
YmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBvdGhlcndp
c2Ugc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbi4KLSAgICAgICAgLy8gICAgIFRo
ZW4gc29sdmUgZm9yICdsZWZ0JyAoaWYgJ2RpcmVjdGlvbiBpcyAncnRsJykgb3IgJ3JpZ2h0JyAo
aWYgJ2RpcmVjdGlvbicgaXMgJ2x0cicpLgotICAgICAgICAvLyAzLiAnd2lkdGgnIGFuZCAncmln
aHQnIGFyZSAnYXV0bycgYW5kICdsZWZ0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBp
cyBzaHJpbmstdG8tZml0IC4gVGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JwotICAgICAgICAvLyA0LiAn
bGVmdCcgaXMgJ2F1dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVu
IHNvbHZlIGZvciAnbGVmdCcKLSAgICAgICAgLy8gNS4gJ3dpZHRoJyBpcyAnYXV0bycsICdsZWZ0
JyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3IgJ3dpZHRoJwotICAg
ICAgICAvLyA2LiAncmlnaHQnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAnd2lkdGgnIGFyZSBub3Qg
J2F1dG8nLCB0aGVuIHNvbHZlIGZvciAncmlnaHQnCi0gICAgICAgIGxldCB3aWR0aCA9IE51bWJl
ci5OYU47Ci0gICAgICAgIGlmIChVdGlscy5pc1dpZHRoQXV0byhib3gpICYmIFV0aWxzLmlzTGVm
dEF1dG8oYm94KSAmJiBVdGlscy5pc1JpZ2h0QXV0byhib3gpKQotICAgICAgICAgICAgd2lkdGgg
PSB0aGlzLl9zaHJpbmtUb0ZpdFdpZHRoKGJveCk7Ci0gICAgICAgIGVsc2UgaWYgKFV0aWxzLmlz
TGVmdEF1dG8oYm94KSAmJiBVdGlscy5pc1dpZHRoQXV0byhib3gpICYmICFVdGlscy5pc1JpZ2h0
QXV0byhib3gpKQotICAgICAgICAgICAgd2lkdGggPSB0aGlzLl9zaHJpbmtUb0ZpdFdpZHRoKGJv
eCk7IC8vIDEKLSAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNMZWZ0QXV0byhib3gpICYmIFV0aWxz
LmlzUmlnaHRBdXRvKGJveCkgJiYgIVV0aWxzLmlzV2lkdGhBdXRvKGJveCkpCi0gICAgICAgICAg
ICB3aWR0aCA9IFV0aWxzLndpZHRoKGJveCk7IC8vIDIKLSAgICAgICAgZWxzZSBpZiAoVXRpbHMu
aXNXaWR0aEF1dG8oYm94KSAmJiBVdGlscy5pc1JpZ2h0QXV0byhib3gpICYmICFVdGlscy5pc0xl
ZnRBdXRvKGJveCkpCi0gICAgICAgICAgICB3aWR0aCA9IHRoaXMuX3Nocmlua1RvRml0V2lkdGgo
Ym94KTsgLy8gMwotICAgICAgICBlbHNlIGlmIChVdGlscy5pc0xlZnRBdXRvKGJveCkgJiYgIVV0
aWxzLmlzV2lkdGhBdXRvKGJveCkgJiYgIVV0aWxzLmlzUmlnaHRBdXRvKGJveCkpCi0gICAgICAg
ICAgICB3aWR0aCA9IFV0aWxzLndpZHRoKGJveCk7IC8vIDQKLSAgICAgICAgZWxzZSBpZiAoVXRp
bHMuaXNXaWR0aEF1dG8oYm94KSAmJiAhVXRpbHMuaXNMZWZ0QXV0byhib3gpICYmICFVdGlscy5p
c1JpZ2h0QXV0byhib3gpKQotICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCgwLCBib3guY29u
dGFpbmluZ0Jsb2NrKCkuY29udGVudEJveCgpLndpZHRoKCkgLSBVdGlscy5yaWdodChib3gpIC0g
VXRpbHMubGVmdChib3gpKTsgLy8gNQotICAgICAgICBlbHNlIGlmIChVdGlscy5pc1JpZ2h0QXV0
byhib3gpICYmICFVdGlscy5pc0xlZnRBdXRvKGJveCkgJiYgIVV0aWxzLmlzV2lkdGhBdXRvKGJv
eCkpCi0gICAgICAgICAgICB3aWR0aCA9IFV0aWxzLndpZHRoKGJveCk7IC8vIDYKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB3
aWR0aCArIFV0aWxzLmNvbXB1dGVkSG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmcoYm94KTsKLSAg
ICB9Ci0KLSAgICBfY29tcHV0ZUZsb2F0aW5nV2lkdGgoYm94KSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBtaXNzaW5nIGNhc2VzCi0gICAgICAgIHJldHVybiBVdGlscy53aWR0aChib3gpICsgVXRpbHMu
Y29tcHV0ZWRIb3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZyhib3gpOwotICAgIH0KLQotICAgIF9j
b21wdXRlSW5GbG93V2lkdGgoYm94KSB7Ci0gICAgICAgIGlmIChVdGlscy5pc1dpZHRoQXV0byhi
b3gpKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVIb3Jpem9udGFsQ29uc3RyYWlu
dChib3gpOwotICAgICAgICByZXR1cm4gVXRpbHMud2lkdGgoYm94KSArIFV0aWxzLmNvbXB1dGVk
SG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmcoYm94KTsKLSAgICB9Ci0KLSAgICBfY29tcHV0ZU91
dE9mRmxvd0hlaWdodChib3gpIHsKLSAgICAgICAgLy8gMS4gSWYgYWxsIHRocmVlIG9mICd0b3An
LCAnaGVpZ2h0JywgYW5kICdib3R0b20nIGFyZSBhdXRvLCBzZXQgJ3RvcCcgdG8gdGhlIHN0YXRp
YyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVsb3cuCi0gICAgICAgIC8v
IDIuIElmIG5vbmUgb2YgdGhlIHRocmVlIGFyZSAnYXV0byc6IElmIGJvdGggJ21hcmdpbi10b3An
IGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVy
Ci0gICAgICAgIC8vICAgIHRoZSBleHRyYSBjb25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5z
IGdldCBlcXVhbCB2YWx1ZXMuIElmIG9uZSBvZiAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0
b20nIGlzICdhdXRvJywKLSAgICAgICAgLy8gICAgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0
IHZhbHVlLiBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZh
bHVlIGZvciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCi0gICAgICAgIC8vIE90
aGVyd2lzZSwgcGljayB0aGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBw
bGllcy4KLQotICAgICAgICAvLyAzLiAndG9wJyBhbmQgJ2hlaWdodCcgYXJlICdhdXRvJyBhbmQg
J2JvdHRvbScgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBj
b250ZW50IHBlciAxMC42LjcsCi0gICAgICAgIC8vICAgIHNldCAnYXV0bycgdmFsdWVzIGZvciAn
bWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3An
Ci0gICAgICAgIC8vIDQuICd0b3AnIGFuZCAnYm90dG9tJyBhcmUgJ2F1dG8nIGFuZCAnaGVpZ2h0
JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHNldCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBz
ZXQgJ2F1dG8nIHZhbHVlcwotICAgICAgICAvLyAgICBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFy
Z2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAnYm90dG9tJwotICAgICAgICAvLyA1LiAn
aGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlICdhdXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRvJywg
dGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsCi0gICAg
ICAgIC8vICAgIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4t
Ym90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICdib3R0b20nCi0gICAgICAgIC8vIDYuICd0b3An
IGlzICdhdXRvJywgJ2hlaWdodCcgYW5kICdib3R0b20nIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNl
dCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAw
LCBhbmQgc29sdmUgZm9yICd0b3AnCi0gICAgICAgIC8vIDcuICdoZWlnaHQnIGlzICdhdXRvJywg
J3RvcCcgYW5kICdib3R0b20nIGFyZSBub3QgJ2F1dG8nLCB0aGVuICdhdXRvJyB2YWx1ZXMgZm9y
ICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIGFyZSBzZXQgdG8gMCBhbmQgc29sdmUg
Zm9yICdoZWlnaHQnCi0gICAgICAgIC8vIDguICdib3R0b20nIGlzICdhdXRvJywgJ3RvcCcgYW5k
ICdoZWlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFy
Z2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScK
LSAgICAgICAgbGV0IGhlaWdodCA9IE51bWJlci5OYU47Ci0gICAgICAgIGlmIChVdGlscy5pc0hl
aWdodEF1dG8oYm94KSAmJiBVdGlscy5pc0JvdHRvbUF1dG8oYm94KSAmJiBVdGlscy5pc1RvcEF1
dG8oYm94KSkKLSAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuX2NvbXB1dGVDb250ZW50SGVpZ2h0
KGJveCk7IC8vIDEKLSAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNUb3BBdXRvKChib3gpKSAmJiBV
dGlscy5pc0hlaWdodEF1dG8oKGJveCkpICYmICFVdGlscy5pc0JvdHRvbUF1dG8oKGJveCkpKQot
ICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5fY29tcHV0ZUNvbnRlbnRIZWlnaHQoYm94KTsgLy8g
MwotICAgICAgICBlbHNlIGlmIChVdGlscy5pc1RvcEF1dG8oKGJveCkpICYmIFV0aWxzLmlzQm90
dG9tQXV0bygoYm94KSkgJiYgIVV0aWxzLmlzSGVpZ2h0QXV0bygoYm94KSkpCi0gICAgICAgICAg
ICBoZWlnaHQgPSBVdGlscy5oZWlnaHQoYm94KTsgLy8gNAotICAgICAgICBlbHNlIGlmIChVdGls
cy5pc0hlaWdodEF1dG8oKGJveCkpICYmIFV0aWxzLmlzQm90dG9tQXV0bygoYm94KSkgJiYgIVV0
aWxzLmlzVG9wQXV0bygoYm94KSkpCi0gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLl9jb21wdXRl
Q29udGVudEhlaWdodChib3gpOyAvLyA1Ci0gICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzVG9wQXV0
bygoYm94KSkgJiYgIVV0aWxzLmlzSGVpZ2h0QXV0bygoYm94KSkgJiYgIVV0aWxzLmlzQm90dG9t
QXV0bygoYm94KSkpCi0gICAgICAgICAgICBoZWlnaHQgPSBVdGlscy5oZWlnaHQoYm94KTsgLy8g
NgotICAgICAgICBlbHNlIGlmIChVdGlscy5pc0hlaWdodEF1dG8oKGJveCkpICYmICFVdGlscy5p
c1RvcEF1dG8oKGJveCkpICYmICFVdGlscy5pc0JvdHRvbUF1dG8oKGJveCkpKQotICAgICAgICAg
ICAgaGVpZ2h0ID0gTWF0aC5tYXgoMCwgYm94LmNvbnRhaW5pbmdCbG9jaygpLmNvbnRlbnRCb3go
KS5oZWlnaHQoKSAtIFV0aWxzLmJvdHRvbShib3gpIC0gVXRpbHMudG9wKGJveCkpOyAvLyA3Ci0g
ICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzQm90dG9tQXV0bygoYm94KSkgJiYgIVV0aWxzLmlzVG9w
QXV0bygoYm94KSkgJiYgIVV0aWxzLmlzSGVpZ2h0QXV0bygoYm94KSkpCi0gICAgICAgICAgICBo
ZWlnaHQgPSBVdGlscy5oZWlnaHQoYm94KTsgLy8gOAotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGhlaWdodCArIFV0aWxzLmNv
bXB1dGVkVmVydGljYWxCb3JkZXJBbmRQYWRkaW5nKGJveCk7Ci0gICAgfQotCi0gICAgX2NvbXB1
dGVGbG9hdGluZ0hlaWdodChib3gpIHsKLSAgICAgICAgLy8gRklYTUU6IG1pc3NpbmcgY2FzZXMK
LSAgICAgICAgcmV0dXJuIFV0aWxzLmhlaWdodChib3gpICsgVXRpbHMuY29tcHV0ZWRWZXJ0aWNh
bEJvcmRlckFuZFBhZGRpbmcoYm94KTsKLSAgICB9Ci0KLSAgICBfY29tcHV0ZUluRmxvd0hlaWdo
dChib3gpIHsKLSAgICAgICAgaWYgKFV0aWxzLmlzSGVpZ2h0QXV0byhib3gpKSB7Ci0gICAgICAg
ICAgICAvLyBPbmx5IGNoaWxkcmVuIGluIHRoZSBub3JtYWwgZmxvdyBhcmUgdGFrZW4gaW50byBh
Y2NvdW50IChpLmUuLCBmbG9hdGluZyBib3hlcyBhbmQgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGJv
eGVzIGFyZSBpZ25vcmVkLAotICAgICAgICAgICAgLy8gYW5kIHJlbGF0aXZlbHkgcG9zaXRpb25l
ZCBib3hlcyBhcmUgY29uc2lkZXJlZCB3aXRob3V0IHRoZWlyIG9mZnNldCkuIE5vdGUgdGhhdCB0
aGUgY2hpbGQgYm94IG1heSBiZSBhbiBhbm9ueW1vdXMgYmxvY2sgYm94LgotCi0gICAgICAgICAg
ICAvLyBUaGUgZWxlbWVudCdzIGhlaWdodCBpcyB0aGUgZGlzdGFuY2UgZnJvbSBpdHMgdG9wIGNv
bnRlbnQgZWRnZSB0byB0aGUgZmlyc3QgYXBwbGljYWJsZSBvZiB0aGUgZm9sbG93aW5nOgotICAg
ICAgICAgICAgLy8gMS4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0
aGUgYm94IGVzdGFibGlzaGVzIGEgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBv
ciBtb3JlIGxpbmVzCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUNvbnRlbnRIZWln
aHQoYm94KSArIFV0aWxzLmNvbXB1dGVkVmVydGljYWxCb3JkZXJBbmRQYWRkaW5nKGJveCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFV0aWxzLmhlaWdodChib3gpICsgVXRpbHMuY29tcHV0
ZWRWZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmcoYm94KTsKLSAgICB9Ci0KLSAgICBfY29tcHV0ZUhv
cml6b250YWxDb25zdHJhaW50KGJveCkgewotICAgICAgICBsZXQgaG9yaXpvbnRhbENvbnN0cmFp
bnQgPSBib3guY29udGFpbmluZ0Jsb2NrKCkuY29udGVudEJveCgpLndpZHRoKCk7Ci0gICAgICAg
IGhvcml6b250YWxDb25zdHJhaW50IC09IHRoaXMubWFyZ2luTGVmdChib3gpICsgdGhpcy5tYXJn
aW5SaWdodChib3gpOwotICAgICAgICByZXR1cm4gaG9yaXpvbnRhbENvbnN0cmFpbnQ7Ci0gICAg
fQotCi0gICAgX2NvbXB1dGVDb250ZW50SGVpZ2h0KGJveCkgewotICAgICAgICAvLyAxMC42LjMg
QmxvY2stbGV2ZWwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292
ZXJmbG93JyBjb21wdXRlcyB0byAndmlzaWJsZScKLSAgICAgICAgLy8gVGhlIGVsZW1lbnQncyBo
ZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGZyb20gaXRzIHRvcCBjb250ZW50IGVkZ2UgdG8gdGhlIGZp
cnN0IGFwcGxpY2FibGUgb2YgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgLy8gMS4gdGhlIGJvdHRv
bSBlZGdlIG9mIHRoZSBsYXN0IGxpbmUgYm94LCBpZiB0aGUgYm94IGVzdGFibGlzaGVzIGEgaW5s
aW5lIGZvcm1hdHRpbmcgY29udGV4dCB3aXRoIG9uZSBvciBtb3JlIGxpbmVzCi0gICAgICAgIC8v
IDIuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm90dG9tIChwb3NzaWJseSBjb2xsYXBzZWQpIG1h
cmdpbiBvZiBpdHMgbGFzdCBpbi1mbG93IGNoaWxkLCBpZiB0aGUgY2hpbGQncyBib3R0b20gbWFy
Z2luIGRvZXMgbm90IGNvbGxhcHNlCi0gICAgICAgIC8vICAgIHdpdGggdGhlIGVsZW1lbnQncyBi
b3R0b20gbWFyZ2luCi0gICAgICAgIC8vIDMuIHRoZSBib3R0b20gYm9yZGVyIGVkZ2Ugb2YgdGhl
IGxhc3QgaW4tZmxvdyBjaGlsZCB3aG9zZSB0b3AgbWFyZ2luIGRvZXNuJ3QgY29sbGFwc2Ugd2l0
aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4KLSAgICAgICAgLy8gNC4gemVybywgb3RoZXJ3
aXNlCi0gICAgICAgIC8vIE9ubHkgY2hpbGRyZW4gaW4gdGhlIG5vcm1hbCBmbG93IGFyZSB0YWtl
biBpbnRvIGFjY291bnQuCi0gICAgICAgIGlmICghYm94LmlzQ29udGFpbmVyKCkgfHwgIWJveC5o
YXNJbkZsb3dDaGlsZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGxldCB0b3Ag
PSBib3guY29udGVudEJveCgpLnRvcCgpOwotICAgICAgICBsZXQgbGFzdEluRmxvd0NoaWxkID0g
Ym94Lmxhc3RJbkZsb3dDaGlsZCgpOwotCi0gICAgICAgIGxldCBib3R0b20gPSBsYXN0SW5GbG93
Q2hpbGQucmVjdCgpLmJvdHRvbSgpICsgdGhpcy5tYXJnaW5Cb3R0b20obGFzdEluRmxvd0NoaWxk
KTsKLSAgICAgICAgLy8gRklYTUU6IG1hcmdpbiBmb3IgYm9keQotICAgICAgICBpZiAobGFzdElu
Rmxvd0NoaWxkLm5hbWUoKSA9PSAiUmVuZGVyQm9keSIgJiYgVXRpbHMuaXNIZWlnaHRBdXRvKGxh
c3RJbkZsb3dDaGlsZCkgJiYgIWxhc3RJbkZsb3dDaGlsZC5jb250ZW50Qm94KCkuaGVpZ2h0KCkp
Ci0gICAgICAgICAgICBib3R0b20gLT0gdGhpcy5tYXJnaW5Cb3R0b20obGFzdEluRmxvd0NoaWxk
KTsKLSAgICAgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgd2h5IGZsb2F0aW5ncyBwYXJ0IG9mIHRo
ZSBpbml0aWFsIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBnZXQgcHJvcGFnYXRlZCB0byBIVE1M
Ci0gICAgICAgIGlmIChib3gubm9kZSgpLnRhZ05hbWUgPT0gIkhUTUwiKSB7Ci0gICAgICAgICAg
ICBsZXQgZmxvYXRpbmdCb3R0b20gPSB0aGlzLmZsb2F0aW5nQ29udGV4dCgpLmJvdHRvbSgpOwot
ICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oZmxvYXRpbmdCb3R0b20pKQotICAgICAgICAg
ICAgICAgIGJvdHRvbSA9IE1hdGgubWF4KGZsb2F0aW5nQm90dG9tLCBib3R0b20pOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBib3R0b20gLSB0b3A7Ci0gICAgfQotCi0gICAgX2NvbXB1dGVJ
bkZsb3dQb3NpdGlvbmVkUG9zaXRpb24oYm94KSB7Ci0gICAgICAgIC8vIFN0YXJ0IHdpdGggdGhl
IG9yaWdpbmFsLCBzdGF0aWMgcG9zaXRpb24uCi0gICAgICAgIGxldCByZWxhdGl2ZVBvc2l0aW9u
ID0gYm94LnRvcExlZnQoKTsKLSAgICAgICAgLy8gVG9wL2JvdHRvbQotICAgICAgICBpZiAoIVV0
aWxzLmlzVG9wQXV0byhib3gpKQotICAgICAgICAgICAgcmVsYXRpdmVQb3NpdGlvbi5zaGlmdFRv
cChVdGlscy50b3AoYm94KSk7Ci0gICAgICAgIGVsc2UgaWYgKCFVdGlscy5pc0JvdHRvbUF1dG8o
Ym94KSkKLSAgICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb24uc2hpZnRUb3AoLVV0aWxzLmJvdHRv
bShib3gpKTsKLSAgICAgICAgLy8gTGVmdC9yaWdodAotICAgICAgICBpZiAoIVV0aWxzLmlzTGVm
dEF1dG8oYm94KSkKLSAgICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb24uc2hpZnRMZWZ0KFV0aWxz
LmxlZnQoYm94KSk7Ci0gICAgICAgIGVsc2UgaWYgKCFVdGlscy5pc1JpZ2h0QXV0byhib3gpKQot
ICAgICAgICAgICAgcmVsYXRpdmVQb3NpdGlvbi5zaGlmdExlZnQoLVV0aWxzLnJpZ2h0KGJveCkp
OwotICAgICAgICByZXR1cm4gcmVsYXRpdmVQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBfY29tcHV0
ZU91dE9mRmxvd1Bvc2l0aW9uKGJveCkgewotICAgICAgICBsZXQgY29udGFpbmVyU2l6ZSA9IGJv
eC5jb250YWluaW5nQmxvY2soKS5jb250ZW50Qm94KCkuc2l6ZSgpOwotICAgICAgICAvLyBUb3Av
Ym90dG9tCi0gICAgICAgIGxldCB0b3AgPSBOdW1iZXIuTmFOOwotICAgICAgICBpZiAoVXRpbHMu
aXNUb3BBdXRvKGJveCkgJiYgVXRpbHMuaXNCb3R0b21BdXRvKGJveCkpIHsKLSAgICAgICAgICAg
IC8vIENvbnZlcnQgc3RhdGljIHBvc2l0aW9uIHRvIGFic29sdXRlLgotICAgICAgICAgICAgdG9w
ID0gVXRpbHMubWFwU3RhdGljVG9BYnNvbHV0ZShib3gpLnRvcCgpOwotICAgICAgICB9IGVsc2Ug
aWYgKCFVdGlscy5pc1RvcEF1dG8oYm94KSkKLSAgICAgICAgICAgIHRvcCA9IFV0aWxzLnRvcChi
b3gpICsgdGhpcy5tYXJnaW5Ub3AoYm94KTsKLSAgICAgICAgZWxzZSBpZiAoIVV0aWxzLmlzQm90
dG9tQXV0byhib3gpKQotICAgICAgICAgICAgdG9wID0gY29udGFpbmVyU2l6ZS5oZWlnaHQoKSAt
IFV0aWxzLmJvdHRvbShib3gpIC0gYm94LnJlY3QoKS5oZWlnaHQoKSAtIHRoaXMubWFyZ2luQm90
dG9tKGJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAvLyBMZWZ0L3JpZ2h0Ci0gICAgICAgIGxldCBsZWZ0ID0gTnVtYmVyLk5hTjsK
LSAgICAgICAgaWYgKFV0aWxzLmlzTGVmdEF1dG8oYm94KSAmJiBVdGlscy5pc1JpZ2h0QXV0byhi
b3gpKSB7Ci0gICAgICAgICAgICAvLyBDb252ZXJ0IHN0YXRpYyBwb3NpdGlvbiB0byBhYnNvbHV0
ZS4KLSAgICAgICAgICAgIGxlZnQgPSBVdGlscy5tYXBTdGF0aWNUb0Fic29sdXRlKGJveCkubGVm
dCgpOwotICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc0xlZnRBdXRvKGJveCkpCi0gICAgICAg
ICAgICBsZWZ0ID0gVXRpbHMubGVmdChib3gpICsgdGhpcy5tYXJnaW5MZWZ0KGJveCk7Ci0gICAg
ICAgIGVsc2UgaWYgKCFVdGlscy5pc1JpZ2h0QXV0byhib3gpKQotICAgICAgICAgICAgbGVmdCA9
IGNvbnRhaW5lclNpemUud2lkdGgoKSAtIFV0aWxzLnJpZ2h0KGJveCkgLSBib3gucmVjdCgpLndp
ZHRoKCkgLSB0aGlzLm1hcmdpblJpZ2h0KGJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbmV3IExheW91dFBvaW50KHRv
cCwgbGVmdCk7Ci0gICAgfQotCi0gICAgX3Nocmlua1RvRml0V2lkdGgoYm94KSB7Ci0gICAgICAg
IC8vIEZJWE1FOiB0aGlzIGlzIG5haXZlLgotICAgICAgICBBU1NFUlQoVXRpbHMuaXNXaWR0aEF1
dG8oYm94KSk7Ci0gICAgICAgIGlmICghYm94LmlzQ29udGFpbmVyKCkgfHwgIWJveC5oYXNDaGls
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGxldCB3aWR0aCA9IDA7Ci0gICAg
ICAgIGZvciAobGV0IGluRmxvd0NoaWxkID0gYm94LmZpcnN0SW5GbG93Q2hpbGQoKTsgaW5GbG93
Q2hpbGQ7IGluRmxvd0NoaWxkID0gaW5GbG93Q2hpbGQubmV4dEluRmxvd1NpYmxpbmcoKSkgewot
ICAgICAgICAgICAgbGV0IHdpZHRoQ2FuZGlkYXRlID0gVXRpbHMuaXNXaWR0aEF1dG8oaW5GbG93
Q2hpbGQpID8gdGhpcy5fc2hyaW5rVG9GaXRXaWR0aChpbkZsb3dDaGlsZCkgOiBVdGlscy53aWR0
aChpbkZsb3dDaGlsZCk7Ci0gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCB3aWR0
aENhbmRpZGF0ZSArIFV0aWxzLmNvbXB1dGVkSG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmcoaW5G
bG93Q2hpbGQpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gd2lkdGg7Ci0gICAgfQotfQot
CmRpZmYgLS1naXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9CbG9ja01hcmdpbkNvbGxhcHNlLmpz
IGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvQmxvY2tNYXJnaW5Db2xsYXBzZS5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTgyNTlhNTk5OGExMzdlNjUyODFlNzcyMWEyMzMwYTVjNzdh
ODFjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9MYXlvdXRSZWxvYWRlZC9CbG9ja01hcmdpbkNvbGxhcHNlLmpzCisrKyAvZGV2L251bGwKQEAg
LTEsMTkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotY2xhc3MgQmxvY2tNYXJnaW5Db2xsYXBzZSB7Ci0KLSAgICBzdGF0aWMgbWFyZ2luVG9wKGJv
eCkgewotICAgICAgICBpZiAoYm94LmlzQW5vbnltb3VzKCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgLy8gVE9ETzogdGFrZSBfaGFzQWRqb2luaW5nTWFyZ2luVG9wQW5kQm90dG9t
KCkgaW50byBhY2NvdW50LgotICAgICAgICBpZiAodGhpcy5faXNNYXJnaW5Ub3BDb2xsYXBzZWRX
aXRoUGFyZW50KGJveCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgLy8gRmxvYXRz
IGFuZCBvdXQgb2YgZmxvdyBwb3NpdGlvbmVkIGJveGVzIGRvIG5vdCBjb2xsYXBzZSB0aGVpciBt
YXJnaW5zLgotICAgICAgICBpZiAoIXRoaXMuX2lzTWFyZ2luVG9wQ29sbGFwc2VkV2l0aFNpYmxp
bmcoYm94KSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub25Db2xsYXBzZWRNYXJnaW5Ub3Ao
Ym94KTsKLSAgICAgICAgLy8gVGhlIGJvdHRvbSBtYXJnaW4gb2YgYW4gaW4tZmxvdyBibG9jay1s
ZXZlbCBlbGVtZW50IGFsd2F5cyBjb2xsYXBzZXMgd2l0aCB0aGUgdG9wIG1hcmdpbiBvZiBpdHMg
bmV4dCBpbi1mbG93IGJsb2NrLWxldmVsIHNpYmxpbmcsCi0gICAgICAgIC8vIHVubGVzcyB0aGF0
IHNpYmxpbmcgaGFzIGNsZWFyYW5jZS4KLSAgICAgICAgbGV0IHByZXZpb3VzSW5GbG93U2libGlu
ZyA9IGJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKLSAgICAgICAgaWYgKHByZXZpb3VzSW5G
bG93U2libGluZykgewotICAgICAgICAgICAgbGV0IHByZXZpb3VzU2libGluZ01hcmdpbkJvdHRv
bSA9IHRoaXMuX25vbkNvbGxhcHNlZE1hcmdpbkJvdHRvbShwcmV2aW91c0luRmxvd1NpYmxpbmcp
OwotICAgICAgICAgICAgbGV0IG1hcmdpblRvcCA9IHRoaXMuX25vbkNvbGxhcHNlZE1hcmdpblRv
cChib3gpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcmdpblZhbHVlKG1hcmdpblRvcCwg
cHJldmlvdXNTaWJsaW5nTWFyZ2luQm90dG9tKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dGhpcy5fbm9uQ29sbGFwc2VkTWFyZ2luVG9wKGJveCk7Ci0gICAgfQotCi0gICAgc3RhdGljIG1h
cmdpbkJvdHRvbShib3gpIHsKLSAgICAgICAgaWYgKGJveC5pc0Fub255bW91cygpKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIC8vIFRPRE86IHRha2UgX2hhc0Fkam9pbmluZ01hcmdp
blRvcEFuZEJvdHRvbSgpIGludG8gYWNjb3VudC4KLSAgICAgICAgaWYgKHRoaXMuX2lzTWFyZ2lu
Qm90dG9tQ29sbGFwc2VkV2l0aFBhcmVudChib3gpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIC8vIEZsb2F0cyBhbmQgb3V0IG9mIGZsb3cgcG9zaXRpb25lZCBib3hlcyBkbyBub3Qg
Y29sbGFwc2UgdGhlaXIgbWFyZ2lucy4KLSAgICAgICAgaWYgKCF0aGlzLl9pc01hcmdpbkJvdHRv
bUNvbGxhcHNlZFdpdGhTaWJsaW5nKGJveCkpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9u
Q29sbGFwc2VkTWFyZ2luQm90dG9tKGJveCk7Ci0gICAgICAgIC8vIFRoZSBib3R0b20gbWFyZ2lu
IG9mIGFuIGluLWZsb3cgYmxvY2stbGV2ZWwgZWxlbWVudCBhbHdheXMgY29sbGFwc2VzIHdpdGgg
dGhlIHRvcCBtYXJnaW4gb2YgaXRzIG5leHQgaW4tZmxvdyBibG9jay1sZXZlbCBzaWJsaW5nLAot
ICAgICAgICAvLyB1bmxlc3MgdGhhdCBzaWJsaW5nIGhhcyBjbGVhcmFuY2UuCi0gICAgICAgIGlm
IChib3gubmV4dEluRmxvd1NpYmxpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICByZXR1cm4gdGhpcy5fbm9uQ29sbGFwc2VkTWFyZ2luQm90dG9tKGJveCk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIF9pc01hcmdpblRvcENvbGxhcHNlZFdpdGhTaWJsaW5nKGJveCkgewotICAgICAg
ICBpZiAoYm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghYm94LmlzUG9zaXRpb25lZCgpIHx8IGJveC5pc0luRmxvd1Bvc2l0
aW9uZWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAvLyBPdXQgb2YgZmxv
dyBwb3NpdGlvbmVkLgotICAgICAgICBBU1NFUlQoYm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
KTsKLSAgICAgICAgcmV0dXJuIFV0aWxzLmlzVG9wQXV0byhib3gpOwotICAgIH0KLQotICAgIHN0
YXRpYyBfaXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaXRoU2libGluZyhib3gpIHsKLSAgICAgICAg
aWYgKGJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIWJveC5pc1Bvc2l0aW9uZWQoKSB8fCBib3guaXNJbkZsb3dQb3NpdGlv
bmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgLy8gT3V0IG9mIGZsb3cg
cG9zaXRpb25lZC4KLSAgICAgICAgQVNTRVJUKGJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7
Ci0gICAgICAgIHJldHVybiBVdGlscy5pc0JvdHRvbUF1dG8oYm94KTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgX2lzTWFyZ2luVG9wQ29sbGFwc2VkV2l0aFBhcmVudChib3gpIHsKLSAgICAgICAgLy8g
VGhlIGZpcnN0IGluZmxvdyBjaGlsZCBjb3VsZCBwcm9wYWdhdGUgaXRzIHRvcCBtYXJnaW4gdG8g
cGFyZW50LgotICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvYm94Lmh0bWwj
Y29sbGFwc2luZy1tYXJnaW5zCi0gICAgICAgIGlmIChib3guaXNBbm9ueW1vdXMoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGJveC5pc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxldCBw
YXJlbnQgPSBib3gucGFyZW50KCk7Ci0gICAgICAgIC8vIElzIHRoaXMgYm94IHRoZSBmaXJzdCBp
bmxmbG93IGNoaWxkPwotICAgICAgICBpZiAocGFyZW50LmZpcnN0SW5GbG93Q2hpbGQoKSAhPSBi
b3gpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChwYXJlbnQuZXN0YWJs
aXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIC8vIE1hcmdpbnMgb2YgdGhlIHJvb3QgZWxlbWVudCdzIGJveCBkbyBub3QgY29s
bGFwc2UuCi0gICAgICAgIGlmIChwYXJlbnQuaXNSb290RWxlbWVudCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoVXRpbHMuaGFzQm9yZGVyVG9wKHBhcmVudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChVdGlscy5oYXNQYWRkaW5nVG9w
KHBhcmVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHN0YXRpYyBfaXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaXRoUGFyZW50
KGJveCkgewotICAgICAgICAvLyBsYXN0IGluZmxvdyBib3ggdG8gcGFyZW50LgotICAgICAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvYm94Lmh0bWwjY29sbGFwc2luZy1tYXJnaW5z
Ci0gICAgICAgIGlmIChib3guaXNBbm9ueW1vdXMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKGJveC5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxldCBwYXJlbnQgPSBib3gucGFyZW50
KCk7Ci0gICAgICAgIC8vIElzIHRoaXMgdGhlIGxhc3QgaW5sZmxvdyBjaGlsZD8KLSAgICAgICAg
aWYgKHBhcmVudC5sYXN0SW5GbG93Q2hpbGQoKSAhPSBib3gpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChwYXJlbnQuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIE1hcmdpbnMgb2Yg
dGhlIHJvb3QgZWxlbWVudCdzIGJveCBkbyBub3QgY29sbGFwc2UuCi0gICAgICAgIGlmIChwYXJl
bnQuaXNSb290RWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoVXRpbHMuaGFzQm9yZGVyVG9wKHBhcmVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChVdGlscy5oYXNQYWRkaW5nVG9wKHBhcmVudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghVXRpbHMuaXNIZWlnaHRBdXRvKHBhcmVudCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHN0YXRpYyBfbm9uQ29sbGFwc2VkTWFyZ2luVG9wKGJveCkgewotICAgICAgICAvLyBOb24g
Y29sbGFwc2VkIG1hcmdpbiB0b3AgaW5jbHVkZXMgY29sbGFwc2VkIG1hcmdpbiBmcm9tIGluZmxv
dyBmaXJzdCBjaGlsZC4KLSAgICAgICAgcmV0dXJuIHRoaXMuX21hcmdpblZhbHVlKFV0aWxzLmNv
bXB1dGVkTWFyZ2luVG9wKGJveCksIHRoaXMuX2NvbGxhcHNlZE1hcmdpblRvcEZyb21GaXJzdENo
aWxkKGJveCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBfbm9uQ29sbGFwc2VkTWFyZ2luQm90dG9t
KGJveCkgewotICAgICAgICAvLyBOb24gY29sbGFwc2VkIG1hcmdpbiBib3R0b20gaW5jbHVkZXMg
Y29sbGFwc2VkIG1hcmdpbiBmcm9tIGluZmxvdyBsYXN0IGNoaWxkLgotICAgICAgICByZXR1cm4g
dGhpcy5fbWFyZ2luVmFsdWUoVXRpbHMuY29tcHV0ZWRNYXJnaW5Cb3R0b20oYm94KSwgdGhpcy5f
Y29sbGFwc2VkTWFyZ2luQm90dG9tRnJvbUxhc3RDaGlsZChib3gpKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgX2NvbGxhcHNlZE1hcmdpblRvcEZyb21GaXJzdENoaWxkKGJveCkgewotICAgICAgICAv
LyBDaGVjayBpZiB0aGUgZmlyc3QgY2hpbGQgY29sbGFwc2VzIGl0cyBtYXJnaW4gdG9wLgotICAg
ICAgICBpZiAoIWJveC5pc0NvbnRhaW5lcigpIHx8ICFib3guZmlyc3RJbkZsb3dDaGlsZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGxldCBmaXJzdEluRmxvd0NoaWxkID0gYm94
LmZpcnN0SW5GbG93Q2hpbGQoKTsKLSAgICAgICAgaWYgKCF0aGlzLl9pc01hcmdpblRvcENvbGxh
cHNlZFdpdGhQYXJlbnQoZmlyc3RJbkZsb3dDaGlsZCkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgLy8gQ29sbGVjdCBjb2xsYXBzZWQgbWFyZ2luIHRvcCByZWN1cnNpdmVseS4KLSAg
ICAgICAgcmV0dXJuIHRoaXMuX21hcmdpblZhbHVlKFV0aWxzLmNvbXB1dGVkTWFyZ2luVG9wKGZp
cnN0SW5GbG93Q2hpbGQpLCB0aGlzLl9jb2xsYXBzZWRNYXJnaW5Ub3BGcm9tRmlyc3RDaGlsZChm
aXJzdEluRmxvd0NoaWxkKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIF9jb2xsYXBzZWRNYXJnaW5C
b3R0b21Gcm9tTGFzdENoaWxkKGJveCkgewotICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdCBj
aGlsZCBwcm9wYWdhdGVzIGl0cyBtYXJnaW4gYm90dG9tLgotICAgICAgICBpZiAoIWJveC5pc0Nv
bnRhaW5lcigpIHx8ICFib3gubGFzdEluRmxvd0NoaWxkKCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgbGV0IGxhc3RJbkZsb3dDaGlsZCA9IGJveC5sYXN0SW5GbG93Q2hpbGQoKTsK
LSAgICAgICAgaWYgKCF0aGlzLl9pc01hcmdpbkJvdHRvbUNvbGxhcHNlZFdpdGhQYXJlbnQobGFz
dEluRmxvd0NoaWxkKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAvLyBDb2xsZWN0
IGNvbGxhcHNlZCBtYXJnaW4gYm90dG9tIHJlY3Vyc2l2ZWx5LgotICAgICAgICByZXR1cm4gdGhp
cy5fbWFyZ2luVmFsdWUoVXRpbHMuY29tcHV0ZWRNYXJnaW5Cb3R0b20obGFzdEluRmxvd0NoaWxk
KSwgdGhpcy5fY29sbGFwc2VkTWFyZ2luQm90dG9tRnJvbUxhc3RDaGlsZChsYXN0SW5GbG93Q2hp
bGQpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgX21hcmdpblZhbHVlKGN1cnJlbnRNYXJnaW5WYWx1
ZSwgY2FuZGlkYXRlTWFyZ2luVmFsdWUpIHsKLSAgICAgICAgaWYgKCFjYW5kaWRhdGVNYXJnaW5W
YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50TWFyZ2luVmFsdWU7Ci0gICAgICAgIGlm
ICghY3VycmVudE1hcmdpblZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZU1hcmdp
blZhbHVlOwotICAgICAgICAvLyBCb3RoIG1hcmdpbnMgYXJlIHBvc2l0aXZlLgotICAgICAgICBp
ZiAoY2FuZGlkYXRlTWFyZ2luVmFsdWUgPiAwICYmIGN1cnJlbnRNYXJnaW5WYWx1ZSA+IDApCi0g
ICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoY2FuZGlkYXRlTWFyZ2luVmFsdWUsIGN1cnJlbnRN
YXJnaW5WYWx1ZSkKLSAgICAgICAgLy8gQm90aCBtYXJnaW5zIGFyZSBuZWdhdGl2ZS4KLSAgICAg
ICAgaWYgKGNhbmRpZGF0ZU1hcmdpblZhbHVlIDwgMCAmJiBjdXJyZW50TWFyZ2luVmFsdWUgPCAw
KQotICAgICAgICAgICAgcmV0dXJuIDAgLSBNYXRoLm1heChNYXRoLmFicyhjYW5kaWRhdGVNYXJn
aW5WYWx1ZSksIE1hdGguYWJzKGN1cnJlbnRNYXJnaW5WYWx1ZSkpCi0gICAgICAgIC8vIE9uZSBv
ZiB0aGUgbWFyZ2lucyBpcyBuZWdhdGl2ZS4KLSAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXJnaW5W
YWx1ZSArIGNhbmRpZGF0ZU1hcmdpblZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBfaGFzQWRq
b2luaW5nTWFyZ2luVG9wQW5kQm90dG9tKGJveCkgewotICAgICAgICAvLyBUd28gbWFyZ2lucyBh
cmUgYWRqb2luaW5nIGlmIGFuZCBvbmx5IGlmOgotICAgICAgICAvLyAxLiBib3RoIGJlbG9uZyB0
byBpbi1mbG93IGJsb2NrLWxldmVsIGJveGVzIHRoYXQgcGFydGljaXBhdGUgaW4gdGhlIHNhbWUg
YmxvY2sgZm9ybWF0dGluZyBjb250ZXh0Ci0gICAgICAgIC8vIDIuIG5vIGxpbmUgYm94ZXMsIG5v
IGNsZWFyYW5jZSwgbm8gcGFkZGluZyBhbmQgbm8gYm9yZGVyIHNlcGFyYXRlIHRoZW0gKE5vdGUg
dGhhdCBjZXJ0YWluIHplcm8taGVpZ2h0IGxpbmUgYm94ZXMgKHNlZSA5LjQuMikgYXJlIGlnbm9y
ZWQgZm9yIHRoaXMgcHVycG9zZS4pCi0gICAgICAgIC8vIDMuIGJvdGggYmVsb25nIHRvIHZlcnRp
Y2FsbHktYWRqYWNlbnQgYm94IGVkZ2VzLCBpLmUuIGZvcm0gb25lIG9mIHRoZSBmb2xsb3dpbmcg
cGFpcnM6Ci0gICAgICAgIC8vICAgICAgICB0b3AgbWFyZ2luIG9mIGEgYm94IGFuZCB0b3AgbWFy
Z2luIG9mIGl0cyBmaXJzdCBpbi1mbG93IGNoaWxkCi0gICAgICAgIC8vICAgICAgICBib3R0b20g
bWFyZ2luIG9mIGJveCBhbmQgdG9wIG1hcmdpbiBvZiBpdHMgbmV4dCBpbi1mbG93IGZvbGxvd2lu
ZyBzaWJsaW5nCi0gICAgICAgIC8vICAgICAgICBib3R0b20gbWFyZ2luIG9mIGEgbGFzdCBpbi1m
bG93IGNoaWxkIGFuZCBib3R0b20gbWFyZ2luIG9mIGl0cyBwYXJlbnQgaWYgdGhlIHBhcmVudCBo
YXMgJ2F1dG8nIGNvbXB1dGVkIGhlaWdodAotICAgICAgICAvLyAgICAgICAgdG9wIGFuZCBib3R0
b20gbWFyZ2lucyBvZiBhIGJveCB0aGF0IGRvZXMgbm90IGVzdGFibGlzaCBhIG5ldyBibG9jayBm
b3JtYXR0aW5nIGNvbnRleHQgYW5kIHRoYXQgaGFzIHplcm8gY29tcHV0ZWQgJ21pbi1oZWlnaHQn
LAotICAgICAgICAvLyAgICAgICAgemVybyBvciAnYXV0bycgY29tcHV0ZWQgJ2hlaWdodCcsIGFu
ZCBubyBpbi1mbG93IGNoaWxkcmVuCi0gICAgICAgIC8vIEEgY29sbGFwc2VkIG1hcmdpbiBpcyBj
b25zaWRlcmVkIGFkam9pbmluZyB0byBhbm90aGVyIG1hcmdpbiBpZiBhbnkgb2YgaXRzIGNvbXBv
bmVudCBtYXJnaW5zIGlzIGFkam9pbmluZyB0byB0aGF0IG1hcmdpbi4KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0xheW91dFJlbG9hZGVkL0JveC5q
cyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL0JveC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDU2YjA4YTdiMGFjNzAxNDY3ZGY1OTE0OTU1OWUwNmJmNmUyNmE4YS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9MYXlvdXRSZWxvYWRl
ZC9Cb3guanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWNsYXNzIEJveCB7Ci0gICAgY29uc3RydWN0
b3Iobm9kZSwgaWQpIHsKLSAgICAgICAgdGhpcy5tX2lkID0gaWQ7Ci0gICAgICAgIHRoaXMubV9y
ZW5kZXJlck5hbWUgPSBudWxsOwotICAgICAgICB0aGlzLm1fbm9kZSA9IG5vZGU7Ci0gICAgICAg
IHRoaXMubV9wYXJlbnQgPSBudWxsOwotICAgICAgICB0aGlzLm1fbmV4dFNpYmxpbmcgPSBudWxs
OwotICAgICAgICB0aGlzLm1fcHJldmlvdXNTaWJsaW5nID0gbnVsbDsKLSAgICAgICAgdGhpcy5t
X2lzQW5vbnltb3VzID0gZmFsc2U7Ci0gICAgICAgIHRoaXMubV9yZWN0ID0gbmV3IExheW91dFJl
Y3QobmV3IExheW91dFBvaW50KDAsIDApLCBuZXcgTGF5b3V0U2l6ZSgwLCAwKSk7Ci0gICAgICAg
IHRoaXMubV9lc3RhYmxpc2hlZEZvcm1hdHRpbmdDb250ZXh0ID0gbnVsbDsKLSAgICB9Ci0KLSAg
ICBpZCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubV9pZDsKLSAgICB9Ci0KLSAgICBzZXRSZW5k
ZXJlck5hbWUobmFtZSkgewotICAgICAgICB0aGlzLm1fcmVuZGVyZXJOYW1lID0gbmFtZTsKLSAg
ICB9Ci0KLSAgICBuYW1lKCkgewotICAgICAgICByZXR1cm4gdGhpcy5tX3JlbmRlcmVyTmFtZTsK
LSAgICB9Ci0KLSAgICBub2RlKCkgewotICAgICAgICByZXR1cm4gdGhpcy5tX25vZGU7Ci0gICAg
fQotCi0gICAgcGFyZW50KCkgewotICAgICAgICByZXR1cm4gdGhpcy5tX3BhcmVudDsKLSAgICB9
Ci0KLSAgICBuZXh0U2libGluZygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubV9uZXh0U2libGlu
ZzsKLSAgICB9Ci0KLSAgICBuZXh0SW5GbG93U2libGluZygpIHsKLSAgICAgICAgbGV0IG5leHRJ
bkZsb3dTaWJsaW5nID0gdGhpcy5uZXh0U2libGluZygpOwotICAgICAgICB3aGlsZSAobmV4dElu
Rmxvd1NpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmIChuZXh0SW5GbG93U2libGluZy5pc0luRmxv
dygpKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXh0SW5GbG93U2libGluZzsKLSAgICAgICAg
ICAgIG5leHRJbkZsb3dTaWJsaW5nID0gbmV4dEluRmxvd1NpYmxpbmcubmV4dFNpYmxpbmcoKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwcmV2aW91c1Np
YmxpbmcoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1fcHJldmlvdXNTaWJsaW5nOwotICAgIH0K
LQotICAgIHByZXZpb3VzSW5GbG93U2libGluZygpIHsKLSAgICAgICAgbGV0IHByZXZpb3VzSW5G
bG93U2libGluZyA9IHRoaXMucHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChwcmV2
aW91c0luRmxvd1NpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c0luRmxvd1NpYmxp
bmcuaXNJbkZsb3coKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNJbkZsb3dTaWJs
aW5nOwotICAgICAgICAgICAgcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gcHJldmlvdXNJbkZsb3dT
aWJsaW5nLnByZXZpb3VzU2libGluZygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgIH0KLQotICAgIHNldFBhcmVudChwYXJlbnQpIHsKLSAgICAgICAgdGhpcy5tX3BhcmVu
dCA9IHBhcmVudDsKLSAgICB9Ci0KLSAgICBzZXROZXh0U2libGluZyhuZXh0U2libGluZykgewot
ICAgICAgICB0aGlzLm1fbmV4dFNpYmxpbmcgPSBuZXh0U2libGluZzsKLSAgICB9Ci0gICAgCi0g
ICAgc2V0UHJldmlvdXNTaWJsaW5nKHByZXZpb3VzU2libGluZykgewotICAgICAgICB0aGlzLm1f
cHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNTaWJsaW5nOwotICAgIH0KLQotICAgIHJlY3QoKSB7
Ci0gICAgICAgIHJldHVybiB0aGlzLm1fcmVjdC5jbG9uZSgpOwotICAgIH0KLQotICAgIHRvcExl
ZnQoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJlY3QoKS50b3BMZWZ0KCk7Ci0gICAgfQotCi0g
ICAgYm90dG9tUmlnaHQoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJlY3QoKS5ib3R0b21SaWdo
dCgpOwotICAgIH0KLQotICAgIHNldFRvcExlZnQodG9wTGVmdCkgewotICAgICAgICB0aGlzLm1f
cmVjdC5zZXRUb3BMZWZ0KHRvcExlZnQpOwotICAgIH0KLQotICAgIHNldFNpemUoc2l6ZSkgewot
ICAgICAgICB0aGlzLm1fcmVjdC5zZXRTaXplKHNpemUpOwotICAgIH0KLQotICAgIHNldFdpZHRo
KHdpZHRoKSB7Ci0gICAgICAgIHRoaXMubV9yZWN0LnNldFdpZHRoKHdpZHRoKTsKLSAgICB9Ci0K
LSAgICBzZXRIZWlnaHQoaGVpZ2h0KSB7Ci0gICAgICAgIHRoaXMubV9yZWN0LnNldEhlaWdodCho
ZWlnaHQpOwotICAgIH0KLQotICAgIGlzQ29udGFpbmVyKCkgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaXNCbG9ja0xldmVsQm94KCkgewotICAgICAgICByZXR1cm4gVXRp
bHMuaXNCbG9ja0xldmVsRWxlbWVudCh0aGlzLm5vZGUoKSk7Ci0gICAgfQotCi0gICAgaXNCbG9j
a0NvbnRhaW5lckJveCgpIHsKLSAgICAgICAgcmV0dXJuIFV0aWxzLmlzQmxvY2tDb250YWluZXJF
bGVtZW50KHRoaXMubm9kZSgpKTsKLSAgICB9Ci0KLSAgICBpc0lubGluZUxldmVsQm94KCkgewot
ICAgICAgICByZXR1cm4gVXRpbHMuaXNJbmxpbmVMZXZlbEVsZW1lbnQodGhpcy5ub2RlKCkpOwot
ICAgIH0KLQotICAgIHNldElzQW5vbnltb3VzKCkgewotICAgICAgICB0aGlzLm1faXNBbm9ueW1v
dXMgPSB0cnVlOwotICAgIH0KLQotICAgIGlzQW5vbnltb3VzKCkgewotICAgICAgICByZXR1cm4g
dGhpcy5tX2lzQW5vbnltb3VzOwotICAgIH0KLQotICAgIGVzdGFibGlzaGVzRm9ybWF0dGluZ0Nv
bnRleHQoKSB7Ci0gICAgICAgIGlmICh0aGlzLmlzQW5vbnltb3VzKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0aGlzLmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0
aW5nQ29udGV4dCgpIHx8IHRoaXMuZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgp
OwotICAgIH0KLQotICAgIGVzdGFibGlzaGVkRm9ybWF0dGluZ0NvbnRleHQoKSB7Ci0gICAgICAg
IGlmICh0aGlzLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSAmJiAhdGhpcy5tX2VzdGFi
bGlzaGVkRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgICAgICAgICB0aGlzLm1fZXN0YWJsaXNoZWRG
b3JtYXR0aW5nQ29udGV4dCA9IHRoaXMuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
KCkgPyBuZXcgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCh0aGlzKSA6IG5ldyBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCh0aGlzKTsKLSAgICAgICAgcmV0dXJuIHRoaXMubV9lc3RhYmxpc2hlZEZvcm1h
dHRpbmdDb250ZXh0OwotICAgIH0KLQotICAgIGVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dCgpIHsKLSAgICAgICAgLy8gOS40LjEgQmxvY2sgZm9ybWF0dGluZyBjb250ZXh0cwotICAg
ICAgICAvLyBGbG9hdHMsIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50cywgYmxvY2sgY29u
dGFpbmVycyAoc3VjaCBhcyBpbmxpbmUtYmxvY2tzLCB0YWJsZS1jZWxscywgYW5kIHRhYmxlLWNh
cHRpb25zKQotICAgICAgICAvLyB0aGF0IGFyZSBub3QgYmxvY2sgYm94ZXMsIGFuZCBibG9jayBi
b3hlcyB3aXRoICdvdmVyZmxvdycgb3RoZXIgdGhhbiAndmlzaWJsZScgKGV4Y2VwdCB3aGVuIHRo
YXQgdmFsdWUgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpCi0gICAgICAgIC8v
IGVzdGFibGlzaCBuZXcgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0cyBmb3IgdGhlaXIgY29udGVu
dHMuCi0gICAgICAgIHJldHVybiB0aGlzLmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgfHwgdGhpcy5p
c0Fic29sdXRlUG9zaXRpb25lZCgpIHx8ICh0aGlzLmlzQmxvY2tDb250YWluZXJCb3goKSAmJiAh
dGhpcy5pc0Jsb2NrTGV2ZWxCb3goKSkKLSAgICAgICAgICAgIHx8ICh0aGlzLmlzQmxvY2tMZXZl
bEJveCgpICYmICFVdGlscy5pc092ZXJmbG93VmlzaWJsZSh0aGlzKSk7Ci0gICAgfQotCi0gICAg
ZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlzUG9zaXRpb25lZCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgdGhpcy5pc1JlbGF0aXZlUG9zaXRpb25lZCgpOwot
ICAgIH0KLQotICAgIGlzUmVsYXRpdmVQb3NpdGlvbmVkKCkgewotICAgICAgICByZXR1cm4gVXRp
bHMuaXNSZWxhdGl2ZVBvc2l0aW9uZWQodGhpcyk7Ci0gICAgfQotCi0gICAgaXNBYnNvbHV0ZVBv
c2l0aW9uZWQoKSB7Ci0gICAgICAgIHJldHVybiBVdGlscy5pc0Fic29sdXRlUG9zaXRpb25lZCh0
aGlzKTsKLSAgICB9Ci0KLSAgICBpc0ZpeGVkUG9zaXRpb25lZCgpIHsKLSAgICAgICAgcmV0dXJu
IFV0aWxzLmlzRml4ZWRQb3NpdGlvbmVkKHRoaXMpOwotICAgIH0KLQotICAgIGlzSW5GbG93KCkg
ewotICAgICAgICBpZiAodGhpcy5pc0Fub255bW91cygpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIHJldHVybiAhdGhpcy5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVk
KCk7Ci0gICAgfQotCi0gICAgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgewotICAgICAgICByZXR1
cm4gdGhpcy5pc0Fic29sdXRlUG9zaXRpb25lZCgpIHx8IHRoaXMuaXNGaXhlZFBvc2l0aW9uZWQo
KTsKLSAgICB9Ci0KLSAgICBpc0luRmxvd1Bvc2l0aW9uZWQoKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmlzUG9zaXRpb25lZCgpICYmICF0aGlzLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpOwotICAg
IH0KLQotICAgIGlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgewotICAgICAgICByZXR1cm4gVXRpbHMu
aXNGbG9hdGluZ1Bvc2l0aW9uZWQodGhpcyk7Ci0gICAgfQotCi0gICAgaXNGbG9hdGluZ09yT3V0
T2ZGbG93UG9zaXRpb25lZCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXNGbG9hdGluZ1Bvc2l0
aW9uZWQoKSB8fCB0aGlzLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpOwotICAgIH0KLQotICAgIGlz
Um9vdEVsZW1lbnQoKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBqdXN0IGJlIGEg
c2ltcGxlIGluc3RhbmNlb2YgY2hlY2ssIGJ1dCB3ZSBhcmUgaW4gdGhlIG1haW5mcmFtZSB3aGls
ZSB0aGUgdGVzdCBkb2N1bWVudCBpcyBpbiBhbiBpZnJhbWUKLSAgICAgICAgLy8gTGV0J3MganVz
dCByZXR1cm4gcm9vdCBmb3IgYm90aCB0aGUgUmVuZGVyVmlldyBhbmQgdGhlIDxodG1sPiBlbGVt
ZW50LgotICAgICAgICByZXR1cm4gIXRoaXMucGFyZW50KCkgfHwgIXRoaXMucGFyZW50KCkucGFy
ZW50KCk7Ci0gICAgfQotCi0gICAgY29udGFpbmluZ0Jsb2NrKCkgewotICAgICAgICBpZiAoIXRo
aXMucGFyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYgKCF0aGlz
LmlzUG9zaXRpb25lZCgpIHx8IHRoaXMuaXNJbkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5wYXJlbnQoKTsKLSAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMucGFyZW50
KCk7Ci0gICAgICAgIHdoaWxlIChwYXJlbnQucGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmICh0
aGlzLmlzQWJzb2x1dGVQb3NpdGlvbmVkKCkgJiYgcGFyZW50LmlzUG9zaXRpb25lZCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQu
cGFyZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBhcmVudDsKLSAgICB9Ci0KLSAg
ICBib3JkZXJCb3goKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTGF5b3V0UmVjdChuZXcgTGF5b3V0
UG9pbnQoMCwgMCksIHRoaXMucmVjdCgpLnNpemUoKSk7Ci0gICAgfQotCi0gICAgcGFkZGluZ0Jv
eCgpIHsKLSAgICAgICAgbGV0IHBhZGRpbmdCb3ggPSB0aGlzLmJvcmRlckJveCgpOwotICAgICAg
ICBsZXQgYm9yZGVyU2l6ZSA9IFV0aWxzLmNvbXB1dGVkQm9yZGVyVG9wTGVmdCh0aGlzKTsKLSAg
ICAgICAgcGFkZGluZ0JveC5tb3ZlQnkoYm9yZGVyU2l6ZSk7Ci0gICAgICAgIHBhZGRpbmdCb3gu
c2hyaW5rQnkoYm9yZGVyU2l6ZSk7Ci0gICAgICAgIHBhZGRpbmdCb3guc2hyaW5rQnkoVXRpbHMu
Y29tcHV0ZWRCb3JkZXJCb3R0b21SaWdodCh0aGlzKSk7Ci0gICAgICAgIHJldHVybiBwYWRkaW5n
Qm94OwotICAgIH0KLQotICAgIGNvbnRlbnRCb3goKSB7Ci0gICAgICAgIGxldCBjb250ZW50Qm94
ID0gdGhpcy5wYWRkaW5nQm94KCk7Ci0gICAgICAgIGxldCBwYWRkaW5nU2l6ZSA9IFV0aWxzLmNv
bXB1dGVkUGFkZGluZ1RvcExlZnQodGhpcyk7Ci0gICAgICAgIGNvbnRlbnRCb3gubW92ZUJ5KHBh
ZGRpbmdTaXplKTsKLSAgICAgICAgY29udGVudEJveC5zaHJpbmtCeShwYWRkaW5nU2l6ZSk7Ci0g
ICAgICAgIGNvbnRlbnRCb3guc2hyaW5rQnkoVXRpbHMuY29tcHV0ZWRQYWRkaW5nQm90dG9tUmln
aHQodGhpcykpOwotICAgICAgICByZXR1cm4gY29udGVudEJveDsKLSAgICB9Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9Db250YWluZXIuanMgYi9Ub29scy9MYXlvdXRSZWxv
YWRlZC9Db250YWluZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZjYzMTAy
ZmVhMGYwZDJhYzYwM2U1NTgwYmMzNmJiYmQxZDRiYTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvQ29udGFpbmVyLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLWNsYXNzIENvbnRhaW5lciBleHRlbmRzIEJveCB7Ci0gICAg
Y29uc3RydWN0b3Iobm9kZSwgaWQpIHsKLSAgICAgICAgc3VwZXIobm9kZSwgaWQpOwotICAgICAg
ICB0aGlzLm1fZmlyc3RDaGlsZCA9IG51bGw7Ci0gICAgICAgIHRoaXMubV9sYXN0Q2hpbGQgPSBu
dWxsOwotICAgIH0KLQotICAgIGlzQ29udGFpbmVyKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBzZXRGaXJzdENoaWxkKGZpcnN0Q2hpbGQpIHsKLSAgICAgICAgdGhpcy5t
X2ZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkOwotICAgIH0KLSAgICAKLSAgICBzZXRMYXN0Q2hpbGQo
bGFzdENoaWxkKSB7Ci0gICAgICAgIHRoaXMubV9sYXN0Q2hpbGQgPSBsYXN0Q2hpbGQ7Ci0gICAg
fQotCi0gICAgZmlyc3RDaGlsZCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubV9maXJzdENoaWxk
OwotICAgIH0KLQotICAgIGZpcnN0SW5GbG93Q2hpbGQoKSB7Ci0gICAgICAgIGlmICghdGhpcy5o
YXNDaGlsZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGxldCBmaXJzdENo
aWxkID0gdGhpcy5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmIChmaXJzdENoaWxkLmlzSW5GbG93
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmlyc3RDaGlsZDsKLSAgICAgICAgcmV0dXJuIGZpcnN0
Q2hpbGQubmV4dEluRmxvd1NpYmxpbmcoKTsKLSAgICB9Ci0KLSAgICBsYXN0Q2hpbGQoKSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLm1fbGFzdENoaWxkOwotICAgIH0KLQotICAgIGxhc3RJbkZsb3dD
aGlsZCgpIHsKLSAgICAgICAgaWYgKCF0aGlzLmhhc0NoaWxkKCkpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgbGV0IGxhc3RDaGlsZCA9IHRoaXMubGFzdENoaWxkKCk7Ci0gICAg
ICAgIGlmIChsYXN0Q2hpbGQuaXNJbkZsb3coKSkKLSAgICAgICAgICAgIHJldHVybiBsYXN0Q2hp
bGQ7Ci0gICAgICAgIHJldHVybiBsYXN0Q2hpbGQucHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7Ci0g
ICAgfQotCi0gICAgaGFzQ2hpbGQoKSB7Ci0gICAgICAgIHJldHVybiAhIXRoaXMuZmlyc3RDaGls
ZCgpOwotICAgIH0KLQotICAgIGhhc0luRmxvd0NoaWxkKCkgewotICAgICAgICByZXR1cm4gISF0
aGlzLmZpcnN0SW5GbG93Q2hpbGQoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Ub29scy9MYXlv
dXRSZWxvYWRlZC9GbG9hdGluZ0NvbnRleHQuanMgYi9Ub29scy9MYXlvdXRSZWxvYWRlZC9GbG9h
dGluZ0NvbnRleHQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MzIxMjhkNGQ2
NTk3ZGRkOWE1NTE3ZmVmY2I4ODViYTZmNzA5MmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRmxvYXRpbmdDb250ZXh0
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1jbGFzcyBGbG9hdGluZ0NvbnRleHQgewotICAgIGNv
bnN0cnVjdG9yKGZvcm1hdHRpbmdDb250ZXh0KSB7Ci0gICAgICAgIHRoaXMubV9sZWZ0RmxvYXRp
bmdCb3hTdGFjayA9IG5ldyBBcnJheSgpOwotICAgICAgICB0aGlzLm1fcmlnaHRGbG9hdGluZ0Jv
eFN0YWNrID0gbmV3IEFycmF5KCk7Ci0gICAgICAgIHRoaXMubV9sYXN0RmxvYXRpbmcgPSBudWxs
OwotICAgICAgICB0aGlzLm1fZm9ybWF0dGluZ0NvbnRleHQgPSBmb3JtYXR0aW5nQ29udGV4dDsK
LSAgICB9Ci0KLSAgICBjb21wdXRlUG9zaXRpb24oYm94KSB7Ci0gICAgICAgIGlmIChib3guaXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gYm94LnRvcExlZnQoKTsK
LSAgICAgICAgaWYgKGJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICBs
ZXQgcG9zaXRpb24gPSB0aGlzLl9wb3NpdGlvbkZvckZsb2F0aW5nKGJveCk7Ci0gICAgICAgICAg
ICB0aGlzLl9hZGRGbG9hdGluZyhib3gpOwotICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChVdGlscy5oYXNDbGVhcihib3gpKQotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3Bvc2l0aW9uRm9yQ2xlYXIoYm94KTsKLSAgICAgICAgLy8gSW50cnVkaW5n
IGZsb2F0cyBtaWdodCBmb3JjZSB0aGlzIGJveCBtb3ZlLgotICAgICAgICByZXR1cm4gdGhpcy5f
Y29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEludHJ1ZGluZ0Zsb2F0cyhib3gpOwotICAgIH0KLQotICAg
IGJvdHRvbSgpIHsKLSAgICAgICAgbGV0IGxlZnRCb3R0b20gPSB0aGlzLl9ib3R0b20odGhpcy5t
X2xlZnRGbG9hdGluZ0JveFN0YWNrKTsKLSAgICAgICAgbGV0IHJpZ2h0Qm90dG9tID0gdGhpcy5f
Ym90dG9tKHRoaXMubV9yaWdodEZsb2F0aW5nQm94U3RhY2spOwotICAgICAgICBpZiAoTnVtYmVy
LmlzTmFOKGxlZnRCb3R0b20pICYmIE51bWJlci5pc05hTihyaWdodEJvdHRvbSkpCi0gICAgICAg
ICAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obGVmdEJv
dHRvbSkgJiYgIU51bWJlci5pc05hTihyaWdodEJvdHRvbSkpCi0gICAgICAgICAgICByZXR1cm4g
TWF0aC5tYXgobGVmdEJvdHRvbSwgcmlnaHRCb3R0b20pOwotICAgICAgICBpZiAoIU51bWJlci5p
c05hTihsZWZ0Qm90dG9tKSkKLSAgICAgICAgICAgIHJldHVybiBsZWZ0Qm90dG9tOwotICAgICAg
ICByZXR1cm4gcmlnaHRCb3R0b207Ci0gICAgfQotCi0gICAgX3Bvc2l0aW9uRm9yRmxvYXRpbmco
ZmxvYXRpbmdCb3gpIHsKLSAgICAgICAgaWYgKHRoaXMuX2lzRW1wdHkoKSkKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLl9hZGp1c3RlZEZsb2F0aW5nUG9zaXRpb24oZmxvYXRpbmdCb3gsIHRoaXMu
X2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3goZmxvYXRpbmdCb3gpLnRvcCgp
KTsKLSAgICAgICAgbGV0IHZlcnRpY2FsUG9zaXRpb24gPSBNYXRoLm1heCh0aGlzLl9mb3JtYXR0
aW5nQ29udGV4dCgpLmFic29sdXRlTWFyZ2luQm94KGZsb2F0aW5nQm94KS50b3AoKSwgdGhpcy5f
Zm9ybWF0dGluZ0NvbnRleHQoKS5hYnNvbHV0ZU1hcmdpbkJveCh0aGlzLm1fbGFzdEZsb2F0aW5n
KS50b3AoKSk7Ci0gICAgICAgIGxldCBzcGFjZU5lZWRlZCA9IHRoaXMuX2Zvcm1hdHRpbmdDb250
ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3goZmxvYXRpbmdCb3gpLndpZHRoKCk7Ci0gICAgICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBsZXQgZmxvYXRpbmdQYWlyID0gdGhpcy5fZmluZElu
bmVyTW9zdExlZnRBbmRSaWdodCh2ZXJ0aWNhbFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGlmICh0
aGlzLl9hdmFpbGFibGVTcGFjZShmbG9hdGluZ0JveC5jb250YWluaW5nQmxvY2soKSwgZmxvYXRp
bmdQYWlyKSA+PSBzcGFjZU5lZWRlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRq
dXN0ZWRGbG9hdGluZ1Bvc2l0aW9uKGZsb2F0aW5nQm94LCB2ZXJ0aWNhbFBvc2l0aW9uLCBmbG9h
dGluZ1BhaXIpOwotICAgICAgICAgICAgdmVydGljYWxQb3NpdGlvbiA9IHRoaXMuX21vdmVUb05l
eHRWZXJ0aWNhbFBvc2l0aW9uKGZsb2F0aW5nUGFpcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIE1hdGguTmFuOwotICAgIH0KLQotICAgIF9wb3NpdGlvbkZvckNsZWFyKGJveCkgewotICAg
ICAgICBBU1NFUlQoVXRpbHMuaGFzQ2xlYXIoYm94KSk7Ci0gICAgICAgIGlmICh0aGlzLl9pc0Vt
cHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gYm94LnRvcExlZnQoKTsKLQotICAgICAgICBsZXQg
bGVmdEJvdHRvbSA9IE51bWJlci5OYU47Ci0gICAgICAgIGxldCByaWdodEJvdHRvbSA9IE51bWJl
ci5OYU47Ci0gICAgICAgIGlmIChVdGlscy5oYXNDbGVhckxlZnQoYm94KSB8fCBVdGlscy5oYXND
bGVhckJvdGgoYm94KSkKLSAgICAgICAgICAgIGxlZnRCb3R0b20gPSB0aGlzLl9ib3R0b20odGhp
cy5tX2xlZnRGbG9hdGluZ0JveFN0YWNrKTsKLSAgICAgICAgaWYgKFV0aWxzLmhhc0NsZWFyUmln
aHQoYm94KSB8fCBVdGlscy5oYXNDbGVhckJvdGgoYm94KSkKLSAgICAgICAgICAgIHJpZ2h0Qm90
dG9tID0gdGhpcy5fYm90dG9tKHRoaXMubV9yaWdodEZsb2F0aW5nQm94U3RhY2spOwotCi0gICAg
ICAgIGlmICghTnVtYmVyLmlzTmFOKGxlZnRCb3R0b20pICYmICFOdW1iZXIuaXNOYU4ocmlnaHRC
b3R0b20pKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBMYXlvdXRQb2ludChNYXRoLm1heChsZWZ0
Qm90dG9tLCByaWdodEJvdHRvbSksIGJveC5yZWN0KCkubGVmdCgpKTsKLSAgICAgICAgaWYgKCFO
dW1iZXIuaXNOYU4obGVmdEJvdHRvbSkpCi0gICAgICAgICAgICByZXR1cm4gbmV3IExheW91dFBv
aW50KGxlZnRCb3R0b20sIGJveC5yZWN0KCkubGVmdCgpKTsKLSAgICAgICAgaWYgKCFOdW1iZXIu
aXNOYU4ocmlnaHRCb3R0b20pKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBMYXlvdXRQb2ludChy
aWdodEJvdHRvbSwgYm94LnJlY3QoKS5sZWZ0KCkpOwotICAgICAgICByZXR1cm4gYm94LnRvcExl
ZnQoKTsKLSAgICB9Ci0KLSAgICBfY29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEludHJ1ZGluZ0Zsb2F0
cyhib3gpIHsKLSAgICAgICAgaWYgKCFib3guZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0KCkgfHwgdGhpcy5faXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGJveC50b3BMZWZ0
KCk7Ci0gICAgICAgIC8vIFRoZSBib3JkZXIgYm94IG9mIGEgdGFibGUsIGEgYmxvY2stbGV2ZWwg
cmVwbGFjZWQgZWxlbWVudCwgb3IgYW4gZWxlbWVudCBpbiB0aGUgbm9ybWFsIGZsb3cgdGhhdCBl
c3RhYmxpc2hlcwotICAgICAgICAvLyBhIG5ldyBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgKHN1
Y2ggYXMgYW4gZWxlbWVudCB3aXRoICdvdmVyZmxvdycgb3RoZXIgdGhhbiAndmlzaWJsZScpIG11
c3Qgbm90IG92ZXJsYXAgdGhlCi0gICAgICAgIC8vIG1hcmdpbiBib3ggb2YgYW55IGZsb2F0cyBp
biB0aGUgc2FtZSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgYXMgdGhlIGVsZW1lbnQgaXRzZWxm
LgotICAgICAgICAvLyBGb3Igc29tZSByZWFzb24sIHdlIHBvc2l0aW9uIHRoaXMgYXMgaWYgaXQg
d2FzIGZsb2F0aW5nIGxlZnQuCi0gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbkZvckZsb2F0
aW5nKGJveCk7Ci0gICAgfQotCi0gICAgX2FkZEZsb2F0aW5nKGZsb2F0aW5nQm94KSB7Ci0gICAg
ICAgIHRoaXMubV9sYXN0RmxvYXRpbmcgPSBmbG9hdGluZ0JveDsKLSAgICAgICAgaWYgKFV0aWxz
LmlzRmxvYXRpbmdMZWZ0KGZsb2F0aW5nQm94KSkgewotICAgICAgICAgICAgdGhpcy5tX2xlZnRG
bG9hdGluZ0JveFN0YWNrLnB1c2goZmxvYXRpbmdCb3gpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMubV9yaWdodEZsb2F0aW5nQm94U3RhY2sucHVzaChmbG9h
dGluZ0JveCk7Ci0gICAgfQotCi0gICAgX2ZpbmRJbm5lck1vc3RMZWZ0QW5kUmlnaHQodmVydGlj
YWxQb3NpdGlvbikgewotICAgICAgICBsZXQgbGVmdEZsb2F0aW5nID0gdGhpcy5fZmluZEZsb2F0
aW5nQXRWZXJ0aWNhbFBvc2l0aW9uKHZlcnRpY2FsUG9zaXRpb24sIHRoaXMubV9sZWZ0RmxvYXRp
bmdCb3hTdGFjayk7Ci0gICAgICAgIGxldCByaWdodEZsb2F0aW5nID0gdGhpcy5fZmluZEZsb2F0
aW5nQXRWZXJ0aWNhbFBvc2l0aW9uKHZlcnRpY2FsUG9zaXRpb24sIHRoaXMubV9yaWdodEZsb2F0
aW5nQm94U3RhY2spOwotICAgICAgICByZXR1cm4geyBsZWZ0OiBsZWZ0RmxvYXRpbmcsIHJpZ2h0
OiByaWdodEZsb2F0aW5nIH07Ci0gICAgfQotCi0gICAgX21vdmVUb05leHRWZXJ0aWNhbFBvc2l0
aW9uKGZsb2F0aW5nUGFpcikgewotICAgICAgICBpZiAoIWZsb2F0aW5nUGFpci5sZWZ0ICYmICFm
bG9hdGluZ1BhaXIucmlnaHQpCi0gICAgICAgICAgICByZXR1cm4gTWF0aC5OYU47Ci0gICAgICAg
IGxldCBsZWZ0Qm90dG9tID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwotICAgICAgICBsZXQg
cmlnaHRCb3R0b20gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7Ci0gICAgICAgIGlmIChmbG9h
dGluZ1BhaXIubGVmdCkKLSAgICAgICAgICAgIGxlZnRCb3R0b20gPSB0aGlzLl9mb3JtYXR0aW5n
Q29udGV4dCgpLmFic29sdXRlTWFyZ2luQm94KGZsb2F0aW5nUGFpci5sZWZ0KS5ib3R0b20oKTsK
LSAgICAgICAgaWYgKGZsb2F0aW5nUGFpci5yaWdodCkKLSAgICAgICAgICAgIHJpZ2h0Qm90dG9t
ID0gdGhpcy5fZm9ybWF0dGluZ0NvbnRleHQoKS5hYnNvbHV0ZU1hcmdpbkJveChmbG9hdGluZ1Bh
aXIucmlnaHQpLmJvdHRvbSgpOwotICAgICAgICByZXR1cm4gTWF0aC5taW4obGVmdEJvdHRvbSwg
cmlnaHRCb3R0b20pOwotICAgIH0KLQotICAgIF9hdmFpbGFibGVTcGFjZShjb250YWluaW5nQmxv
Y2ssIGZsb2F0aW5nUGFpcikgewotICAgICAgICBpZiAoZmxvYXRpbmdQYWlyLmxlZnQgJiYgZmxv
YXRpbmdQYWlyLnJpZ2h0KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRpbmdDb250
ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3goZmxvYXRpbmdQYWlyLnJpZ2h0KS5sZWZ0KCkgLSB0aGlz
Ll9mb3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRlTWFyZ2luQm94KGZsb2F0aW5nUGFpci5sZWZ0
KS5yaWdodCgpOwotICAgICAgICBpZiAoZmxvYXRpbmdQYWlyLmxlZnQpCi0gICAgICAgICAgICBy
ZXR1cm4gY29udGFpbmluZ0Jsb2NrLmNvbnRlbnRCb3goKS53aWR0aCgpIC0gKHRoaXMuX2Zvcm1h
dHRpbmdDb250ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3goZmxvYXRpbmdQYWlyLmxlZnQpLnJpZ2h0
KCkgLSB0aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRlQm9yZGVyQm94KGNvbnRhaW5p
bmdCbG9jaykubGVmdCgpKTsKLSAgICAgICAgaWYgKGZsb2F0aW5nUGFpci5yaWdodCkKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRlTWFyZ2luQm94
KGZsb2F0aW5nUGFpci5yaWdodCkubGVmdCgpOwotICAgICAgICByZXR1cm4gY29udGFpbmluZ0Js
b2NrLmNvbnRlbnRCb3goKS53aWR0aCgpOwotICAgIH0KLQotICAgIF9maW5kRmxvYXRpbmdBdFZl
cnRpY2FsUG9zaXRpb24odmVydGljYWxQb3NpdGlvbiwgZmxvYXRpbmdTdGFjaykgewotICAgICAg
ICBsZXQgaW5kZXggPSBmbG9hdGluZ1N0YWNrLmxlbmd0aDsKLSAgICAgICAgd2hpbGUgKC0taW5k
ZXggPj0gMCAmJiB0aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRlTWFyZ2luQm94KGZs
b2F0aW5nU3RhY2tbaW5kZXhdKS5ib3R0b20oKSA8PSB2ZXJ0aWNhbFBvc2l0aW9uKTsKLSAgICAg
ICAgcmV0dXJuIGluZGV4ID49IDAgPyBmbG9hdGluZ1N0YWNrW2luZGV4XSA6IG51bGw7Ci0gICAg
fQotCi0gICAgX2lzRW1wdHkoKSB7Ci0gICAgICAgIHJldHVybiAhdGhpcy5tX2xlZnRGbG9hdGlu
Z0JveFN0YWNrLmxlbmd0aCAmJiAhdGhpcy5tX3JpZ2h0RmxvYXRpbmdCb3hTdGFjay5sZW5ndGg7
Ci0gICAgfQotCi0gICAgX2FkanVzdGVkRmxvYXRpbmdQb3NpdGlvbihmbG9hdGluZ0JveCwgdmVy
dGljYWxQb3NpdGlvbiwgbGVmdFJpZ2h0RmxvYXRpbmdzKSB7Ci0gICAgICAgIGxldCBjb250YWlu
aW5nQmxvY2sgPSBmbG9hdGluZ0JveC5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgLy8gQ29u
dmVydCBhbGwgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gZm9ybWF0dGluZyBjb250ZXh0J3Mgcm9v
dC4KLSAgICAgICAgbGV0IGxlZnQgPSB0aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRl
Q29udGVudEJveChjb250YWluaW5nQmxvY2spLmxlZnQoKTsKLSAgICAgICAgbGV0IHJpZ2h0ID0g
dGhpcy5fZm9ybWF0dGluZ0NvbnRleHQoKS5hYnNvbHV0ZUNvbnRlbnRCb3goY29udGFpbmluZ0Js
b2NrKS5yaWdodCgpOwotICAgICAgICBpZiAobGVmdFJpZ2h0RmxvYXRpbmdzKSB7Ci0gICAgICAg
ICAgICBpZiAobGVmdFJpZ2h0RmxvYXRpbmdzLmxlZnQpIHsKLSAgICAgICAgICAgICAgICBsZXQg
ZmxvYXRpbmdCb3hSaWdodCA9IHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVNYXJn
aW5Cb3gobGVmdFJpZ2h0RmxvYXRpbmdzLmxlZnQpLnJpZ2h0KCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGZsb2F0aW5nQm94UmlnaHQgPiBsZWZ0KQotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0g
ZmxvYXRpbmdCb3hSaWdodDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxlZnRS
aWdodEZsb2F0aW5ncy5yaWdodCkgewotICAgICAgICAgICAgICAgIGxldCBmbG9hdGluZ0JveExl
ZnQgPSB0aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRlTWFyZ2luQm94KGxlZnRSaWdo
dEZsb2F0aW5ncy5yaWdodCkubGVmdCgpOwotICAgICAgICAgICAgICAgIGlmIChmbG9hdGluZ0Jv
eExlZnQgPCByaWdodCkKLSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBmbG9hdGluZ0JveExl
ZnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbGVmdCArPSB0aGlzLl9mb3Jt
YXR0aW5nQ29udGV4dCgpLm1hcmdpbkxlZnQoZmxvYXRpbmdCb3gpOwotICAgICAgICByaWdodCAt
PSB0aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLm1hcmdpblJpZ2h0KGZsb2F0aW5nQm94KTsKLSAg
ICAgICAgdmVydGljYWxQb3NpdGlvbiArPSB0aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLm1hcmdp
blRvcChmbG9hdGluZ0JveCk7Ci0gICAgICAgIC8vIE5vIGNvbnZlcnQgdGhlbSBiYWNrIHJlbGF0
aXZlIHRvIHRoZSBmbG9hdGluZ0JveCdzIGNvbnRhaW5pbmcgYmxvY2suCi0gICAgICAgIGxldCBj
b250YWluaW5nQmxvY2tMZWZ0ID0gdGhpcy5fZm9ybWF0dGluZ0NvbnRleHQoKS5hYnNvbHV0ZUJv
cmRlckJveChjb250YWluaW5nQmxvY2spLmxlZnQoKTsKLSAgICAgICAgbGV0IGNvbnRhaW5pbmdC
bG9ja1RvcCA9IHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVCb3JkZXJCb3goY29u
dGFpbmluZ0Jsb2NrKS50b3AoKTsKLSAgICAgICAgbGVmdCAtPSBjb250YWluaW5nQmxvY2tMZWZ0
OwotICAgICAgICByaWdodCAtPSBjb250YWluaW5nQmxvY2tMZWZ0OwotICAgICAgICB2ZXJ0aWNh
bFBvc2l0aW9uIC09IGNvbnRhaW5pbmdCbG9ja1RvcDsKLQotICAgICAgICBpZiAoVXRpbHMuaXNG
bG9hdGluZ0xlZnQoZmxvYXRpbmdCb3gpIHx8ICFVdGlscy5pc0Zsb2F0aW5nUG9zaXRpb25lZChm
bG9hdGluZ0JveCkpCi0gICAgICAgICAgICByZXR1cm4gbmV3IExheW91dFBvaW50KHZlcnRpY2Fs
UG9zaXRpb24sIGxlZnQpOwotICAgICAgICByZXR1cm4gbmV3IExheW91dFBvaW50KHZlcnRpY2Fs
UG9zaXRpb24sIHJpZ2h0IC0gZmxvYXRpbmdCb3gucmVjdCgpLndpZHRoKCkpOwotICAgIH0KLQot
ICAgIF9ib3R0b20oZmxvYXRpbmdTdGFjaykgewotICAgICAgICBpZiAoIWZsb2F0aW5nU3RhY2sg
fHwgIWZsb2F0aW5nU3RhY2subGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIE51bWJlci5OYU47
Ci0gICAgICAgIGxldCBtYXggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Ci0gICAgICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgZmxvYXRpbmdTdGFjay5sZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IG1heCA9IE1hdGgubWF4KHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVNYXJnaW5C
b3goZmxvYXRpbmdTdGFja1tpXSkuYm90dG9tKCksIG1heCk7Ci0gICAgICAgIHJldHVybiBtYXg7
Ci0gICAgfQotCi0gICAgX2Zvcm1hdHRpbmdDb250ZXh0KCkgewotICAgICAgICByZXR1cm4gdGhp
cy5tX2Zvcm1hdHRpbmdDb250ZXh0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0xheW91
dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0LmpzIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9y
bWF0dGluZ0NvbnRleHQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjMmMzYzI0
OWEzM2U1MDY1NjQ5ZjI4NDMxZjgzYTVkNzNmMGJlNzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0Nv
bnRleHQuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotY2xhc3MgRm9ybWF0dGluZ0NvbnRleHQgewot
ICAgIGNvbnN0cnVjdG9yKHJvb3RDb250YWluZXIpIHsKLSAgICAgICAgdGhpcy5tX3Jvb3RDb250
YWluZXIgPSByb290Q29udGFpbmVyOwotICAgICAgICB0aGlzLm1fZmxvYXRpbmdDb250ZXh0ID0g
bnVsbDsKLSAgICB9Ci0KLSAgICByb290Q29udGFpbmVyKCkgewotICAgICAgICByZXR1cm4gdGhp
cy5tX3Jvb3RDb250YWluZXI7Ci0gICAgfQotCi0gICAgZmxvYXRpbmdDb250ZXh0KCkgewotICAg
ICAgICByZXR1cm4gdGhpcy5tX2Zsb2F0aW5nQ29udGV4dDsKLSAgICB9Ci0KLSAgICBsYXlvdXQo
bGF5b3V0Q29udGV4dCkgewotICAgIH0KLQotICAgIGNvbXB1dGVXaWR0aChib3gpIHsKLSAgICB9
Ci0KLSAgICBjb21wdXRlSGVpZ2h0KGJveCkgewotICAgIH0KLQotICAgIG1hcmdpblRvcChib3gp
IHsKLSAgICAgICAgcmV0dXJuIFV0aWxzLmNvbXB1dGVkTWFyZ2luVG9wKGJveCk7Ci0gICAgfQot
ICAgIAotICAgIG1hcmdpbkxlZnQoYm94KSB7Ci0gICAgICAgIHJldHVybiBVdGlscy5jb21wdXRl
ZE1hcmdpbkxlZnQoYm94KTsKLSAgICB9Ci0gICAgCi0gICAgbWFyZ2luQm90dG9tKGJveCkgewot
ICAgICAgICByZXR1cm4gVXRpbHMuY29tcHV0ZWRNYXJnaW5Cb3R0b20oYm94KTsKLSAgICB9Ci0g
ICAgCi0gICAgbWFyZ2luUmlnaHQoYm94KSB7Ci0gICAgICAgIHJldHVybiBVdGlscy5jb21wdXRl
ZE1hcmdpblJpZ2h0KGJveCk7Ci0gICAgfQotCi0gICAgYWJzb2x1dGVNYXJnaW5Cb3goYm94KSB7
Ci0gICAgICAgIGxldCBhYnNvbHV0ZUNvbnRlbnRCb3ggPSBVdGlscy5tYXBUb0NvbnRhaW5lcihi
b3gsIHRoaXMucm9vdENvbnRhaW5lcigpKTsKLSAgICAgICAgYWJzb2x1dGVDb250ZW50Qm94Lm1v
dmVCeShuZXcgTGF5b3V0U2l6ZSgtdGhpcy5tYXJnaW5MZWZ0KGJveCksIC10aGlzLm1hcmdpblRv
cChib3gpKSk7Ci0gICAgICAgIGFic29sdXRlQ29udGVudEJveC5ncm93QnkobmV3IExheW91dFNp
emUodGhpcy5tYXJnaW5MZWZ0KGJveCkgKyB0aGlzLm1hcmdpblJpZ2h0KGJveCksIHRoaXMubWFy
Z2luVG9wKGJveCkgKyB0aGlzLm1hcmdpbkJvdHRvbShib3gpKSk7Ci0gICAgICAgIHJldHVybiBh
YnNvbHV0ZUNvbnRlbnRCb3g7Ci0gICAgfQotCi0gICAgYWJzb2x1dGVCb3JkZXJCb3goYm94KSB7
Ci0gICAgICAgIGxldCBib3JkZXJCb3ggPSBib3guYm9yZGVyQm94KCk7Ci0gICAgICAgIGxldCBh
YnNvbHV0ZVJlY3QgPSBuZXcgTGF5b3V0UmVjdChVdGlscy5tYXBUb0NvbnRhaW5lcihib3gsIHRo
aXMucm9vdENvbnRhaW5lcigpKS50b3BMZWZ0KCksIGJvcmRlckJveC5zaXplKCkpOwotICAgICAg
ICBhYnNvbHV0ZVJlY3QubW92ZUJ5KGJvcmRlckJveC50b3BMZWZ0KCkpOwotICAgICAgICByZXR1
cm4gYWJzb2x1dGVSZWN0OwotICAgIH0KLQotICAgIGFic29sdXRlUGFkZGluZ0JveChib3gpIHsK
LSAgICAgICAgbGV0IHBhZGRpbmdCb3ggPSBib3gucGFkZGluZ0JveCgpOwotICAgICAgICBsZXQg
YWJzb2x1dGVSZWN0ID0gbmV3IExheW91dFJlY3QoVXRpbHMubWFwVG9Db250YWluZXIoYm94LCB0
aGlzLnJvb3RDb250YWluZXIoKSkudG9wTGVmdCgpLCBwYWRkaW5nQm94LnNpemUoKSk7Ci0gICAg
ICAgIGFic29sdXRlUmVjdC5tb3ZlQnkocGFkZGluZ0JveC50b3BMZWZ0KCkpOwotICAgICAgICBy
ZXR1cm4gYWJzb2x1dGVSZWN0OwotICAgIH0KLQotICAgIGFic29sdXRlQ29udGVudEJveChib3gp
IHsKLSAgICAgICAgbGV0IGNvbnRlbnRCb3ggPSBib3guY29udGVudEJveCgpOwotICAgICAgICBs
ZXQgYWJzb2x1dGVSZWN0ID0gbmV3IExheW91dFJlY3QoVXRpbHMubWFwVG9Db250YWluZXIoYm94
LCB0aGlzLnJvb3RDb250YWluZXIoKSkudG9wTGVmdCgpLCBjb250ZW50Qm94LnNpemUoKSk7Ci0g
ICAgICAgIGFic29sdXRlUmVjdC5tb3ZlQnkoY29udGVudEJveC50b3BMZWZ0KCkpOwotICAgICAg
ICByZXR1cm4gYWJzb2x1dGVSZWN0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0xheW91
dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0Jsb2NrRm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0LmpzIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQvQmxv
Y2tGb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRlNzI4
YzI4NTA4Nzc5NDMzZWUxMzc1OGM2ZjE0OWRjNTlmNDRiZgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL0xheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0Jsb2NrRm9ybWF0dGluZy9CbG9j
a0Zvcm1hdHRpbmdDb250ZXh0LmpzCkBAIC0wLDAgKzEsMzE3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK2NsYXNzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQg
ZXh0ZW5kcyBGb3JtYXR0aW5nQ29udGV4dCB7CisgICAgY29uc3RydWN0b3Iocm9vdCkgeworICAg
ICAgICBzdXBlcihyb290KTsKKyAgICAgICAgLy8gTmV3IGJsb2NrIGZvcm1hdHRpbmcgY29udGV4
dCBhbHdheXMgZXN0YWJsaXNoZXMgYSBuZXcgZmxvYXRpbmcgY29udGV4dC4KKyAgICAgICAgdGhp
cy5tX2Zsb2F0aW5nQ29udGV4dCA9IG5ldyBGbG9hdGluZ0NvbnRleHQodGhpcyk7CisgICAgfQor
CisgICAgbGF5b3V0KGxheW91dENvbnRleHQpIHsKKyAgICAgICAgLy8gOS40LjEgQmxvY2sgZm9y
bWF0dGluZyBjb250ZXh0cworICAgICAgICAvLyBJbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4
dCwgYm94ZXMgYXJlIGxhaWQgb3V0IG9uZSBhZnRlciB0aGUgb3RoZXIsIHZlcnRpY2FsbHksIGJl
Z2lubmluZyBhdCB0aGUgdG9wIG9mIGEgY29udGFpbmluZyBibG9jay4KKyAgICAgICAgLy8gVGhl
IHZlcnRpY2FsIGRpc3RhbmNlIGJldHdlZW4gdHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5l
ZCBieSB0aGUgJ21hcmdpbicgcHJvcGVydGllcy4KKyAgICAgICAgLy8gVmVydGljYWwgbWFyZ2lu
cyBiZXR3ZWVuIGFkamFjZW50IGJsb2NrLWxldmVsIGJveGVzIGluIGEgYmxvY2sgZm9ybWF0dGlu
ZyBjb250ZXh0IGNvbGxhcHNlLgorICAgICAgICBpZiAoIXRoaXMucm9vdENvbnRhaW5lcigpLmZp
cnN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gVGhpcyBpcyBhIHBv
c3Qtb3JkZXIgdHJlZSB0cmF2ZXJzYWwgbGF5b3V0LgorICAgICAgICBsZXQgbGF5b3V0U3RhY2sg
PSBuZXcgQXJyYXkoKTsKKyAgICAgICAgLy8gVGhlIHJvb3QgY29udGFpbmVyIGxheW91dCBpcyBk
b25lIGluIHRoZSBmb3JtYXR0aW5nIGNvbnRleHQgaXQgbGl2ZXMgaW4sIG5vdCB0aGF0IG9uZSBp
dCBjcmVhdGVzLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoZSBmaXJzdCBjaGlsZC4KKyAgICAgICAg
bGF5b3V0U3RhY2sucHVzaCh0aGlzLnJvb3RDb250YWluZXIoKS5maXJzdENoaWxkKCkpOworICAg
ICAgICAvLyAxLiBHbyBhbGwgdGhlIHdheSBkb3duIHRvIHRoZSBsZWFmIG5vZGUKKyAgICAgICAg
Ly8gMi4gQ29tcHV0ZSBzdGF0aWMgcG9zaXRpb24gYW5kIHdpZHRoIGFzIHdlIHRyYXZlcnMgZG93
bgorICAgICAgICAvLyAzLiBBcyB3ZSBjbGltYiBiYWNrIG9uIHRoZSB0cmVlLCBjb21wdXRlIGhl
aWdodCBhbmQgZmluaWFsaXplIHBvc2l0aW9uCisgICAgICAgIC8vIChBbnkgc3VidHJlZXMgd2l0
aCBuZXcgZm9ybWF0dGluZyBjb250ZXh0cyBuZWVkIHRvIGxheW91dCBzeW5jaHJvbm91c2x5KQor
ICAgICAgICB3aGlsZSAobGF5b3V0U3RhY2subGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBUcmF2
ZXJzIGRvd24gb24gdGhlIGRlc2NlbmRhbnRzIHVudGlsIHdlIGZpbmQgYSBsZWFmIG5vZGUuCisg
ICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIGxldCBib3ggPSBsYXlv
dXRTdGFja1tsYXlvdXRTdGFjay5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICBib3guc2V0
V2lkdGgodGhpcy5jb21wdXRlV2lkdGgoYm94KSk7CisgICAgICAgICAgICAgICAgYm94LnNldFRv
cExlZnQodGhpcy5fY29tcHV0ZVN0YXRpY1Bvc2l0aW9uKGJveCkpOworICAgICAgICAgICAgICAg
IGlmIChib3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxheW91dENvbnRleHQubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHQoYm94LmVzdGFibGlz
aGVkRm9ybWF0dGluZ0NvbnRleHQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWJveC5pc0NvbnRhaW5lcigpIHx8
ICFib3guaGFzQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgbGF5b3V0U3RhY2sucHVzaChib3guZmlyc3RDaGlsZCgpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gQ2xpbWIgYmFjayBvbiB0aGUgYW5jZXN0b3JzIGFuZCBjb21wdXRl
IGhlaWdodC9maW5hbCBwb3NpdGlvbi4KKyAgICAgICAgICAgIHdoaWxlIChsYXlvdXRTdGFjay5s
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAvLyBBbGwgaW5mbG93IGRlc2NlbmRhbnRzIChpZiB0
aGVyZSBhcmUgYW55KSBhcmUgbGFpZCBvdXQgYnkgbm93LiBMZXQncyBjb21wdXRlIHRoZSBib3gn
cyBoZWlnaHQuCisgICAgICAgICAgICAgICAgbGV0IGJveCA9IGxheW91dFN0YWNrLnBvcCgpOwor
ICAgICAgICAgICAgICAgIGJveC5zZXRIZWlnaHQodGhpcy5jb21wdXRlSGVpZ2h0KGJveCkpOwor
ICAgICAgICAgICAgICAgIC8vIEFkanVzdCBwb3NpdGlvbiBub3cgdGhhdCB3ZSBoYXZlIGFsbCB0
aGUgcHJldmlvdXMgZmxvYXRzIHBsYWNlZCBpbiB0aGlzIGNvbnRleHQgLWlmIG5lZWRlZC4KKyAg
ICAgICAgICAgICAgICBib3guc2V0VG9wTGVmdCh0aGlzLmZsb2F0aW5nQ29udGV4dCgpLmNvbXB1
dGVQb3NpdGlvbihib3gpKTsKKyAgICAgICAgICAgICAgICAvLyBNb3ZlIHBvc2l0aW9uZWQgY2hp
bGRyZW4gdG8gdGhlaXIgZmluYWwgcG9zaXRpb24uCisgICAgICAgICAgICAgICAgaWYgKGJveC5p
c0NvbnRhaW5lcigpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BsYWNlSW5GbG93UG9z
aXRpb25lZENoaWxkcmVuKGJveCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFBsYWNlIHRoZSBv
dXQgb2YgZmxvdyBjb250ZW50LgorICAgICAgICAgICAgICAgICAgICB0aGlzLl9wbGFjZU91dE9m
Rmxvd0Rlc2NlbmRhbnRzKGJveCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChib3gubmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGFj
ay5wdXNoKGJveC5uZXh0U2libGluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEFu
ZCBmaW5hbGx5IHBsYWNlIHRoZSBvdXQgb2YgZmxvdyBkZXNjZW5kYW50cyBmb3IgdGhlIHJvb3Qu
CisgICAgICAgIHRoaXMuX3BsYWNlT3V0T2ZGbG93RGVzY2VuZGFudHModGhpcy5yb290Q29udGFp
bmVyKCkpOworICAgfQorCisgICAgY29tcHV0ZVdpZHRoKGJveCkgeworICAgICAgICBpZiAoYm94
LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1
dGVPdXRPZkZsb3dXaWR0aChib3gpOworICAgICAgICBpZiAoYm94LmlzRmxvYXRpbmdQb3NpdGlv
bmVkKCkpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUZsb2F0aW5nV2lkdGgoYm94
KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVJbkZsb3dXaWR0aChib3gpOworICAgIH0K
KworICAgIGNvbXB1dGVIZWlnaHQoYm94KSB7CisgICAgICAgIGlmIChib3guaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZU91dE9mRmxvd0hl
aWdodChib3gpOworICAgICAgICBpZiAoYm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUZsb2F0aW5nSGVpZ2h0KGJveCk7CisgICAgICAg
IHJldHVybiB0aGlzLl9jb21wdXRlSW5GbG93SGVpZ2h0KGJveCk7CisgICAgfQorCisgICAgbWFy
Z2luVG9wKGJveCkgeworICAgICAgICByZXR1cm4gQmxvY2tNYXJnaW5Db2xsYXBzZS5tYXJnaW5U
b3AoYm94KTsKKyAgICB9CisKKyAgICBtYXJnaW5Cb3R0b20oYm94KSB7CisgICAgICAgIHJldHVy
biBCbG9ja01hcmdpbkNvbGxhcHNlLm1hcmdpbkJvdHRvbShib3gpOworICAgIH0KKworICAgIF9j
b21wdXRlU3RhdGljUG9zaXRpb24oYm94KSB7CisgICAgICAgIC8vIEluIGEgYmxvY2sgZm9ybWF0
dGluZyBjb250ZXh0LCBib3hlcyBhcmUgbGFpZCBvdXQgb25lIGFmdGVyIHRoZSBvdGhlciwgdmVy
dGljYWxseSwgYmVnaW5uaW5nIGF0IHRoZSB0b3Agb2YgYSBjb250YWluaW5nIGJsb2NrLgorICAg
ICAgICAvLyBUaGUgdmVydGljYWwgZGlzdGFuY2UgYmV0d2VlbiB0d28gc2libGluZyBib3hlcyBp
cyBkZXRlcm1pbmVkIGJ5IHRoZSAnbWFyZ2luJyBwcm9wZXJ0aWVzLgorICAgICAgICAvLyBWZXJ0
aWNhbCBtYXJnaW5zIGJldHdlZW4gYWRqYWNlbnQgYmxvY2stbGV2ZWwgYm94ZXMgaW4gYSBibG9j
ayBmb3JtYXR0aW5nIGNvbnRleHQgY29sbGFwc2UuCisgICAgICAgIGxldCBwYXJlbnQgPSBib3gu
cGFyZW50KCk7CisgICAgICAgIC8vIFN0YXJ0IGZyb20gdGhlIHRvcCBvZiB0aGUgY29udGFpbmVy
J3MgY29udGVudCBib3guCisgICAgICAgIGxldCBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSBib3gu
cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7CisgICAgICAgIGxldCBjb250ZW50Qm90dG9tID0gcHJl
dmlvdXNJbkZsb3dTaWJsaW5nID8gcHJldmlvdXNJbkZsb3dTaWJsaW5nLmJvdHRvbVJpZ2h0KCku
dG9wKCkgKyB0aGlzLm1hcmdpbkJvdHRvbShwcmV2aW91c0luRmxvd1NpYmxpbmcpIDogcGFyZW50
LmNvbnRlbnRCb3goKS50b3AoKTsKKyAgICAgICAgbGV0IHBvc2l0aW9uID0gbmV3IExheW91dFBv
aW50KGNvbnRlbnRCb3R0b20sIHBhcmVudC5jb250ZW50Qm94KCkubGVmdCgpKTsKKyAgICAgICAg
cG9zaXRpb24ubW92ZUJ5KG5ldyBMYXlvdXRTaXplKHRoaXMubWFyZ2luTGVmdChib3gpLCB0aGlz
Lm1hcmdpblRvcChib3gpKSk7CisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKyAgICB9CisKKyAg
ICBfcGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4oY29udGFpbmVyKSB7CisgICAgICAgIGZv
ciAobGV0IGluRmxvd0NoaWxkID0gY29udGFpbmVyLmZpcnN0SW5GbG93Q2hpbGQoKTsgaW5GbG93
Q2hpbGQ7IGluRmxvd0NoaWxkID0gaW5GbG93Q2hpbGQubmV4dEluRmxvd1NpYmxpbmcoKSkKKyAg
ICAgICAgICAgIGluRmxvd0NoaWxkLnNldFRvcExlZnQodGhpcy5fY29tcHV0ZUluRmxvd1Bvc2l0
aW9uZWRQb3NpdGlvbihpbkZsb3dDaGlsZCkpOworICAgIH0KKworICAgIF9wbGFjZU91dE9mRmxv
d0Rlc2NlbmRhbnRzKGNvbnRhaW5lcikgeworICAgICAgICBsZXQgb3V0T2ZGbG93RGVzY2VuZGFu
dHMgPSBVdGlscy5jb2xsZWN0T3V0T2ZGbG93RGVzY2VuZGFudHMoY29udGFpbmVyKTsKKyAgICAg
ICAgZm9yIChsZXQgb3V0T2ZGbG93Qm94IG9mIG91dE9mRmxvd0Rlc2NlbmRhbnRzKQorICAgICAg
ICAgICAgb3V0T2ZGbG93Qm94LnNldFRvcExlZnQodGhpcy5fY29tcHV0ZU91dE9mRmxvd1Bvc2l0
aW9uKG91dE9mRmxvd0JveCkpOworICAgIH0KKworICAgIF9jb21wdXRlT3V0T2ZGbG93V2lkdGgo
Ym94KSB7CisgICAgICAgIC8vIDEwLjMuNyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBs
YWNlZCBlbGVtZW50cworCisgICAgICAgIC8vIDEuICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgJ2F1
dG8nIGFuZCAncmlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10
by1maXQuIFRoZW4gc29sdmUgZm9yICdsZWZ0JworICAgICAgICAvLyAyLiAnbGVmdCcgYW5kICdy
aWdodCcgYXJlICdhdXRvJyBhbmQgJ3dpZHRoJyBpcyBub3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAn
ZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcKKyAgICAgICAg
Ly8gICAgIHRoZSBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRyJyBzZXQg
J2xlZnQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIG90aGVyd2lzZSBzZXQgJ3JpZ2h0JyB0byB0
aGUgc3RhdGljIHBvc2l0aW9uLgorICAgICAgICAvLyAgICAgVGhlbiBzb2x2ZSBmb3IgJ2xlZnQn
IChpZiAnZGlyZWN0aW9uIGlzICdydGwnKSBvciAncmlnaHQnIChpZiAnZGlyZWN0aW9uJyBpcyAn
bHRyJykuCisgICAgICAgIC8vIDMuICd3aWR0aCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyBhbmQg
J2xlZnQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10by1maXQgLiBU
aGVuIHNvbHZlIGZvciAncmlnaHQnCisgICAgICAgIC8vIDQuICdsZWZ0JyBpcyAnYXV0bycsICd3
aWR0aCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdsZWZ0Jwor
ICAgICAgICAvLyA1LiAnd2lkdGgnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSBu
b3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnd2lkdGgnCisgICAgICAgIC8vIDYuICdyaWdodCcg
aXMgJ2F1dG8nLCAnbGVmdCcgYW5kICd3aWR0aCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUg
Zm9yICdyaWdodCcKKyAgICAgICAgbGV0IHdpZHRoID0gTnVtYmVyLk5hTjsKKyAgICAgICAgaWYg
KFV0aWxzLmlzV2lkdGhBdXRvKGJveCkgJiYgVXRpbHMuaXNMZWZ0QXV0byhib3gpICYmIFV0aWxz
LmlzUmlnaHRBdXRvKGJveCkpCisgICAgICAgICAgICB3aWR0aCA9IHRoaXMuX3Nocmlua1RvRml0
V2lkdGgoYm94KTsKKyAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNMZWZ0QXV0byhib3gpICYmIFV0
aWxzLmlzV2lkdGhBdXRvKGJveCkgJiYgIVV0aWxzLmlzUmlnaHRBdXRvKGJveCkpCisgICAgICAg
ICAgICB3aWR0aCA9IHRoaXMuX3Nocmlua1RvRml0V2lkdGgoYm94KTsgLy8gMQorICAgICAgICBl
bHNlIGlmIChVdGlscy5pc0xlZnRBdXRvKGJveCkgJiYgVXRpbHMuaXNSaWdodEF1dG8oYm94KSAm
JiAhVXRpbHMuaXNXaWR0aEF1dG8oYm94KSkKKyAgICAgICAgICAgIHdpZHRoID0gVXRpbHMud2lk
dGgoYm94KTsgLy8gMgorICAgICAgICBlbHNlIGlmIChVdGlscy5pc1dpZHRoQXV0byhib3gpICYm
IFV0aWxzLmlzUmlnaHRBdXRvKGJveCkgJiYgIVV0aWxzLmlzTGVmdEF1dG8oYm94KSkKKyAgICAg
ICAgICAgIHdpZHRoID0gdGhpcy5fc2hyaW5rVG9GaXRXaWR0aChib3gpOyAvLyAzCisgICAgICAg
IGVsc2UgaWYgKFV0aWxzLmlzTGVmdEF1dG8oYm94KSAmJiAhVXRpbHMuaXNXaWR0aEF1dG8oYm94
KSAmJiAhVXRpbHMuaXNSaWdodEF1dG8oYm94KSkKKyAgICAgICAgICAgIHdpZHRoID0gVXRpbHMu
d2lkdGgoYm94KTsgLy8gNAorICAgICAgICBlbHNlIGlmIChVdGlscy5pc1dpZHRoQXV0byhib3gp
ICYmICFVdGlscy5pc0xlZnRBdXRvKGJveCkgJiYgIVV0aWxzLmlzUmlnaHRBdXRvKGJveCkpCisg
ICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KDAsIGJveC5jb250YWluaW5nQmxvY2soKS5jb250
ZW50Qm94KCkud2lkdGgoKSAtIFV0aWxzLnJpZ2h0KGJveCkgLSBVdGlscy5sZWZ0KGJveCkpOyAv
LyA1CisgICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzUmlnaHRBdXRvKGJveCkgJiYgIVV0aWxzLmlz
TGVmdEF1dG8oYm94KSAmJiAhVXRpbHMuaXNXaWR0aEF1dG8oYm94KSkKKyAgICAgICAgICAgIHdp
ZHRoID0gVXRpbHMud2lkdGgoYm94KTsgLy8gNgorICAgICAgICBlbHNlCisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoICsgVXRpbHMuY29tcHV0
ZWRIb3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZyhib3gpOworICAgIH0KKworICAgIF9jb21wdXRl
RmxvYXRpbmdXaWR0aChib3gpIHsKKyAgICAgICAgLy8gRklYTUU6IG1pc3NpbmcgY2FzZXMKKyAg
ICAgICAgcmV0dXJuIFV0aWxzLndpZHRoKGJveCkgKyBVdGlscy5jb21wdXRlZEhvcml6b250YWxC
b3JkZXJBbmRQYWRkaW5nKGJveCk7CisgICAgfQorCisgICAgX2NvbXB1dGVJbkZsb3dXaWR0aChi
b3gpIHsKKyAgICAgICAgaWYgKFV0aWxzLmlzV2lkdGhBdXRvKGJveCkpCisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fY29tcHV0ZUhvcml6b250YWxDb25zdHJhaW50KGJveCk7CisgICAgICAgIHJl
dHVybiBVdGlscy53aWR0aChib3gpICsgVXRpbHMuY29tcHV0ZWRIb3Jpem9udGFsQm9yZGVyQW5k
UGFkZGluZyhib3gpOworICAgIH0KKworICAgIF9jb21wdXRlT3V0T2ZGbG93SGVpZ2h0KGJveCkg
eworICAgICAgICAvLyAxLiBJZiBhbGwgdGhyZWUgb2YgJ3RvcCcsICdoZWlnaHQnLCBhbmQgJ2Jv
dHRvbScgYXJlIGF1dG8sIHNldCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9uIGFuZCBhcHBs
eSBydWxlIG51bWJlciB0aHJlZSBiZWxvdy4KKyAgICAgICAgLy8gMi4gSWYgbm9uZSBvZiB0aGUg
dGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9t
JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIKKyAgICAgICAgLy8gICAgdGhl
IGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcy4g
SWYgb25lIG9mICdtYXJnaW4tdG9wJyBvciAnbWFyZ2luLWJvdHRvbScgaXMgJ2F1dG8nLAorICAg
ICAgICAvLyAgICBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuIElmIHRoZSB2YWx1
ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20nIGFu
ZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBwaWNrIHRoZSBv
bmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorCisgICAgICAgIC8v
IDMuICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnYm90dG9tJyBpcyBub3QgJ2F1
dG8nLCB0aGVuIHRoZSBoZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYuNywK
KyAgICAgICAgLy8gICAgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21h
cmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcKKyAgICAgICAgLy8gNC4gJ3Rv
cCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRo
ZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIHNldCAnYXV0bycgdmFsdWVzCisg
ICAgICAgIC8vICAgIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBh
bmQgc29sdmUgZm9yICdib3R0b20nCisgICAgICAgIC8vIDUuICdoZWlnaHQnIGFuZCAnYm90dG9t
JyBhcmUgJ2F1dG8nIGFuZCAndG9wJyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSBoZWlnaHQgaXMg
YmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYuNywKKyAgICAgICAgLy8gICAgc2V0ICdhdXRv
JyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBz
b2x2ZSBmb3IgJ2JvdHRvbScKKyAgICAgICAgLy8gNi4gJ3RvcCcgaXMgJ2F1dG8nLCAnaGVpZ2h0
JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9y
ICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3Rv
cCcKKyAgICAgICAgLy8gNy4gJ2hlaWdodCcgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2JvdHRvbScg
YXJlIG5vdCAnYXV0bycsIHRoZW4gJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAn
bWFyZ2luLWJvdHRvbScgYXJlIHNldCB0byAwIGFuZCBzb2x2ZSBmb3IgJ2hlaWdodCcKKyAgICAg
ICAgLy8gOC4gJ2JvdHRvbScgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2hlaWdodCcgYXJlIG5vdCAn
YXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdp
bi1ib3R0b20nIHRvIDAgYW5kIHNvbHZlIGZvciAnYm90dG9tJworICAgICAgICBsZXQgaGVpZ2h0
ID0gTnVtYmVyLk5hTjsKKyAgICAgICAgaWYgKFV0aWxzLmlzSGVpZ2h0QXV0byhib3gpICYmIFV0
aWxzLmlzQm90dG9tQXV0byhib3gpICYmIFV0aWxzLmlzVG9wQXV0byhib3gpKQorICAgICAgICAg
ICAgaGVpZ2h0ID0gdGhpcy5fY29tcHV0ZUNvbnRlbnRIZWlnaHQoYm94KTsgLy8gMQorICAgICAg
ICBlbHNlIGlmIChVdGlscy5pc1RvcEF1dG8oKGJveCkpICYmIFV0aWxzLmlzSGVpZ2h0QXV0bygo
Ym94KSkgJiYgIVV0aWxzLmlzQm90dG9tQXV0bygoYm94KSkpCisgICAgICAgICAgICBoZWlnaHQg
PSB0aGlzLl9jb21wdXRlQ29udGVudEhlaWdodChib3gpOyAvLyAzCisgICAgICAgIGVsc2UgaWYg
KFV0aWxzLmlzVG9wQXV0bygoYm94KSkgJiYgVXRpbHMuaXNCb3R0b21BdXRvKChib3gpKSAmJiAh
VXRpbHMuaXNIZWlnaHRBdXRvKChib3gpKSkKKyAgICAgICAgICAgIGhlaWdodCA9IFV0aWxzLmhl
aWdodChib3gpOyAvLyA0CisgICAgICAgIGVsc2UgaWYgKFV0aWxzLmlzSGVpZ2h0QXV0bygoYm94
KSkgJiYgVXRpbHMuaXNCb3R0b21BdXRvKChib3gpKSAmJiAhVXRpbHMuaXNUb3BBdXRvKChib3gp
KSkKKyAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuX2NvbXB1dGVDb250ZW50SGVpZ2h0KGJveCk7
IC8vIDUKKyAgICAgICAgZWxzZSBpZiAoVXRpbHMuaXNUb3BBdXRvKChib3gpKSAmJiAhVXRpbHMu
aXNIZWlnaHRBdXRvKChib3gpKSAmJiAhVXRpbHMuaXNCb3R0b21BdXRvKChib3gpKSkKKyAgICAg
ICAgICAgIGhlaWdodCA9IFV0aWxzLmhlaWdodChib3gpOyAvLyA2CisgICAgICAgIGVsc2UgaWYg
KFV0aWxzLmlzSGVpZ2h0QXV0bygoYm94KSkgJiYgIVV0aWxzLmlzVG9wQXV0bygoYm94KSkgJiYg
IVV0aWxzLmlzQm90dG9tQXV0bygoYm94KSkpCisgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1h
eCgwLCBib3guY29udGFpbmluZ0Jsb2NrKCkuY29udGVudEJveCgpLmhlaWdodCgpIC0gVXRpbHMu
Ym90dG9tKGJveCkgLSBVdGlscy50b3AoYm94KSk7IC8vIDcKKyAgICAgICAgZWxzZSBpZiAoVXRp
bHMuaXNCb3R0b21BdXRvKChib3gpKSAmJiAhVXRpbHMuaXNUb3BBdXRvKChib3gpKSAmJiAhVXRp
bHMuaXNIZWlnaHRBdXRvKChib3gpKSkKKyAgICAgICAgICAgIGhlaWdodCA9IFV0aWxzLmhlaWdo
dChib3gpOyAvLyA4CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gaGVpZ2h0ICsgVXRpbHMuY29tcHV0ZWRWZXJ0aWNhbEJvcmRl
ckFuZFBhZGRpbmcoYm94KTsKKyAgICB9CisKKyAgICBfY29tcHV0ZUZsb2F0aW5nSGVpZ2h0KGJv
eCkgeworICAgICAgICAvLyBGSVhNRTogbWlzc2luZyBjYXNlcworICAgICAgICByZXR1cm4gVXRp
bHMuaGVpZ2h0KGJveCkgKyBVdGlscy5jb21wdXRlZFZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZyhi
b3gpOworICAgIH0KKworICAgIF9jb21wdXRlSW5GbG93SGVpZ2h0KGJveCkgeworICAgICAgICBp
ZiAoVXRpbHMuaXNIZWlnaHRBdXRvKGJveCkpIHsKKyAgICAgICAgICAgIC8vIE9ubHkgY2hpbGRy
ZW4gaW4gdGhlIG5vcm1hbCBmbG93IGFyZSB0YWtlbiBpbnRvIGFjY291bnQgKGkuZS4sIGZsb2F0
aW5nIGJveGVzIGFuZCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGlnbm9yZWQsCisg
ICAgICAgICAgICAvLyBhbmQgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGJveGVzIGFyZSBjb25zaWRl
cmVkIHdpdGhvdXQgdGhlaXIgb2Zmc2V0KS4gTm90ZSB0aGF0IHRoZSBjaGlsZCBib3ggbWF5IGJl
IGFuIGFub255bW91cyBibG9jayBib3guCisKKyAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50J3Mg
aGVpZ2h0IGlzIHRoZSBkaXN0YW5jZSBmcm9tIGl0cyB0b3AgY29udGVudCBlZGdlIHRvIHRoZSBm
aXJzdCBhcHBsaWNhYmxlIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgICAvLyAxLiB0aGUg
Ym90dG9tIGVkZ2Ugb2YgdGhlIGxhc3QgbGluZSBib3gsIGlmIHRoZSBib3ggZXN0YWJsaXNoZXMg
YSBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IHdpdGggb25lIG9yIG1vcmUgbGluZXMKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9jb21wdXRlQ29udGVudEhlaWdodChib3gpICsgVXRpbHMuY29t
cHV0ZWRWZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmcoYm94KTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gVXRpbHMuaGVpZ2h0KGJveCkgKyBVdGlscy5jb21wdXRlZFZlcnRpY2FsQm9yZGVyQW5k
UGFkZGluZyhib3gpOworICAgIH0KKworICAgIF9jb21wdXRlSG9yaXpvbnRhbENvbnN0cmFpbnQo
Ym94KSB7CisgICAgICAgIGxldCBob3Jpem9udGFsQ29uc3RyYWludCA9IGJveC5jb250YWluaW5n
QmxvY2soKS5jb250ZW50Qm94KCkud2lkdGgoKTsKKyAgICAgICAgaG9yaXpvbnRhbENvbnN0cmFp
bnQgLT0gdGhpcy5tYXJnaW5MZWZ0KGJveCkgKyB0aGlzLm1hcmdpblJpZ2h0KGJveCk7CisgICAg
ICAgIHJldHVybiBob3Jpem9udGFsQ29uc3RyYWludDsKKyAgICB9CisKKyAgICBfY29tcHV0ZUNv
bnRlbnRIZWlnaHQoYm94KSB7CisgICAgICAgIC8vIDEwLjYuMyBCbG9jay1sZXZlbCBub24tcmVw
bGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGNvbXB1dGVzIHRv
ICd2aXNpYmxlJworICAgICAgICAvLyBUaGUgZWxlbWVudCdzIGhlaWdodCBpcyB0aGUgZGlzdGFu
Y2UgZnJvbSBpdHMgdG9wIGNvbnRlbnQgZWRnZSB0byB0aGUgZmlyc3QgYXBwbGljYWJsZSBvZiB0
aGUgZm9sbG93aW5nOgorICAgICAgICAvLyAxLiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGxhc3Qg
bGluZSBib3gsIGlmIHRoZSBib3ggZXN0YWJsaXNoZXMgYSBpbmxpbmUgZm9ybWF0dGluZyBjb250
ZXh0IHdpdGggb25lIG9yIG1vcmUgbGluZXMKKyAgICAgICAgLy8gMi4gdGhlIGJvdHRvbSBlZGdl
IG9mIHRoZSBib3R0b20gKHBvc3NpYmx5IGNvbGxhcHNlZCkgbWFyZ2luIG9mIGl0cyBsYXN0IGlu
LWZsb3cgY2hpbGQsIGlmIHRoZSBjaGlsZCdzIGJvdHRvbSBtYXJnaW4gZG9lcyBub3QgY29sbGFw
c2UKKyAgICAgICAgLy8gICAgd2l0aCB0aGUgZWxlbWVudCdzIGJvdHRvbSBtYXJnaW4KKyAgICAg
ICAgLy8gMy4gdGhlIGJvdHRvbSBib3JkZXIgZWRnZSBvZiB0aGUgbGFzdCBpbi1mbG93IGNoaWxk
IHdob3NlIHRvcCBtYXJnaW4gZG9lc24ndCBjb2xsYXBzZSB3aXRoIHRoZSBlbGVtZW50J3MgYm90
dG9tIG1hcmdpbgorICAgICAgICAvLyA0LiB6ZXJvLCBvdGhlcndpc2UKKyAgICAgICAgLy8gT25s
eSBjaGlsZHJlbiBpbiB0aGUgbm9ybWFsIGZsb3cgYXJlIHRha2VuIGludG8gYWNjb3VudC4KKyAg
ICAgICAgaWYgKCFib3guaXNDb250YWluZXIoKSB8fCAhYm94Lmhhc0luRmxvd0NoaWxkKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgbGV0IHRvcCA9IGJveC5jb250ZW50Qm94KCku
dG9wKCk7CisgICAgICAgIGxldCBsYXN0SW5GbG93Q2hpbGQgPSBib3gubGFzdEluRmxvd0NoaWxk
KCk7CisKKyAgICAgICAgbGV0IGJvdHRvbSA9IGxhc3RJbkZsb3dDaGlsZC5yZWN0KCkuYm90dG9t
KCkgKyB0aGlzLm1hcmdpbkJvdHRvbShsYXN0SW5GbG93Q2hpbGQpOworICAgICAgICAvLyBGSVhN
RTogbWFyZ2luIGZvciBib2R5CisgICAgICAgIGlmIChsYXN0SW5GbG93Q2hpbGQubmFtZSgpID09
ICJSZW5kZXJCb2R5IiAmJiBVdGlscy5pc0hlaWdodEF1dG8obGFzdEluRmxvd0NoaWxkKSAmJiAh
bGFzdEluRmxvd0NoaWxkLmNvbnRlbnRCb3goKS5oZWlnaHQoKSkKKyAgICAgICAgICAgIGJvdHRv
bSAtPSB0aGlzLm1hcmdpbkJvdHRvbShsYXN0SW5GbG93Q2hpbGQpOworICAgICAgICAvLyBGSVhN
RTogZmlndXJlIG91dCB3aHkgZmxvYXRpbmdzIHBhcnQgb2YgdGhlIGluaXRpYWwgYmxvY2sgZm9y
bWF0dGluZyBjb250ZXh0IGdldCBwcm9wYWdhdGVkIHRvIEhUTUwKKyAgICAgICAgaWYgKGJveC5u
b2RlKCkudGFnTmFtZSA9PSAiSFRNTCIpIHsKKyAgICAgICAgICAgIGxldCBmbG9hdGluZ0JvdHRv
bSA9IHRoaXMuZmxvYXRpbmdDb250ZXh0KCkuYm90dG9tKCk7CisgICAgICAgICAgICBpZiAoIU51
bWJlci5pc05hTihmbG9hdGluZ0JvdHRvbSkpCisgICAgICAgICAgICAgICAgYm90dG9tID0gTWF0
aC5tYXgoZmxvYXRpbmdCb3R0b20sIGJvdHRvbSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGJvdHRvbSAtIHRvcDsKKyAgICB9CisKKyAgICBfY29tcHV0ZUluRmxvd1Bvc2l0aW9uZWRQb3Np
dGlvbihib3gpIHsKKyAgICAgICAgLy8gU3RhcnQgd2l0aCB0aGUgb3JpZ2luYWwsIHN0YXRpYyBw
b3NpdGlvbi4KKyAgICAgICAgbGV0IHJlbGF0aXZlUG9zaXRpb24gPSBib3gudG9wTGVmdCgpOwor
ICAgICAgICAvLyBUb3AvYm90dG9tCisgICAgICAgIGlmICghVXRpbHMuaXNUb3BBdXRvKGJveCkp
CisgICAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uLnNoaWZ0VG9wKFV0aWxzLnRvcChib3gpKTsK
KyAgICAgICAgZWxzZSBpZiAoIVV0aWxzLmlzQm90dG9tQXV0byhib3gpKQorICAgICAgICAgICAg
cmVsYXRpdmVQb3NpdGlvbi5zaGlmdFRvcCgtVXRpbHMuYm90dG9tKGJveCkpOworICAgICAgICAv
LyBMZWZ0L3JpZ2h0CisgICAgICAgIGlmICghVXRpbHMuaXNMZWZ0QXV0byhib3gpKQorICAgICAg
ICAgICAgcmVsYXRpdmVQb3NpdGlvbi5zaGlmdExlZnQoVXRpbHMubGVmdChib3gpKTsKKyAgICAg
ICAgZWxzZSBpZiAoIVV0aWxzLmlzUmlnaHRBdXRvKGJveCkpCisgICAgICAgICAgICByZWxhdGl2
ZVBvc2l0aW9uLnNoaWZ0TGVmdCgtVXRpbHMucmlnaHQoYm94KSk7CisgICAgICAgIHJldHVybiBy
ZWxhdGl2ZVBvc2l0aW9uOworICAgIH0KKworICAgIF9jb21wdXRlT3V0T2ZGbG93UG9zaXRpb24o
Ym94KSB7CisgICAgICAgIGxldCBjb250YWluZXJTaXplID0gYm94LmNvbnRhaW5pbmdCbG9jaygp
LmNvbnRlbnRCb3goKS5zaXplKCk7CisgICAgICAgIC8vIFRvcC9ib3R0b20KKyAgICAgICAgbGV0
IHRvcCA9IE51bWJlci5OYU47CisgICAgICAgIGlmIChVdGlscy5pc1RvcEF1dG8oYm94KSAmJiBV
dGlscy5pc0JvdHRvbUF1dG8oYm94KSkgeworICAgICAgICAgICAgLy8gQ29udmVydCBzdGF0aWMg
cG9zaXRpb24gdG8gYWJzb2x1dGUuCisgICAgICAgICAgICB0b3AgPSBVdGlscy5tYXBTdGF0aWNU
b0Fic29sdXRlKGJveCkudG9wKCk7CisgICAgICAgIH0gZWxzZSBpZiAoIVV0aWxzLmlzVG9wQXV0
byhib3gpKQorICAgICAgICAgICAgdG9wID0gVXRpbHMudG9wKGJveCkgKyB0aGlzLm1hcmdpblRv
cChib3gpOworICAgICAgICBlbHNlIGlmICghVXRpbHMuaXNCb3R0b21BdXRvKGJveCkpCisgICAg
ICAgICAgICB0b3AgPSBjb250YWluZXJTaXplLmhlaWdodCgpIC0gVXRpbHMuYm90dG9tKGJveCkg
LSBib3gucmVjdCgpLmhlaWdodCgpIC0gdGhpcy5tYXJnaW5Cb3R0b20oYm94KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIC8vIExlZnQv
cmlnaHQKKyAgICAgICAgbGV0IGxlZnQgPSBOdW1iZXIuTmFOOworICAgICAgICBpZiAoVXRpbHMu
aXNMZWZ0QXV0byhib3gpICYmIFV0aWxzLmlzUmlnaHRBdXRvKGJveCkpIHsKKyAgICAgICAgICAg
IC8vIENvbnZlcnQgc3RhdGljIHBvc2l0aW9uIHRvIGFic29sdXRlLgorICAgICAgICAgICAgbGVm
dCA9IFV0aWxzLm1hcFN0YXRpY1RvQWJzb2x1dGUoYm94KS5sZWZ0KCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIVV0aWxzLmlzTGVmdEF1dG8oYm94KSkKKyAgICAgICAgICAgIGxlZnQgPSBVdGlscy5s
ZWZ0KGJveCkgKyB0aGlzLm1hcmdpbkxlZnQoYm94KTsKKyAgICAgICAgZWxzZSBpZiAoIVV0aWxz
LmlzUmlnaHRBdXRvKGJveCkpCisgICAgICAgICAgICBsZWZ0ID0gY29udGFpbmVyU2l6ZS53aWR0
aCgpIC0gVXRpbHMucmlnaHQoYm94KSAtIGJveC5yZWN0KCkud2lkdGgoKSAtIHRoaXMubWFyZ2lu
UmlnaHQoYm94KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBuZXcgTGF5b3V0UG9pbnQodG9wLCBsZWZ0KTsKKyAgICB9CisK
KyAgICBfc2hyaW5rVG9GaXRXaWR0aChib3gpIHsKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMg
bmFpdmUuCisgICAgICAgIEFTU0VSVChVdGlscy5pc1dpZHRoQXV0byhib3gpKTsKKyAgICAgICAg
aWYgKCFib3guaXNDb250YWluZXIoKSB8fCAhYm94Lmhhc0NoaWxkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgbGV0IHdpZHRoID0gMDsKKyAgICAgICAgZm9yIChsZXQgaW5GbG93
Q2hpbGQgPSBib3guZmlyc3RJbkZsb3dDaGlsZCgpOyBpbkZsb3dDaGlsZDsgaW5GbG93Q2hpbGQg
PSBpbkZsb3dDaGlsZC5uZXh0SW5GbG93U2libGluZygpKSB7CisgICAgICAgICAgICBsZXQgd2lk
dGhDYW5kaWRhdGUgPSBVdGlscy5pc1dpZHRoQXV0byhpbkZsb3dDaGlsZCkgPyB0aGlzLl9zaHJp
bmtUb0ZpdFdpZHRoKGluRmxvd0NoaWxkKSA6IFV0aWxzLndpZHRoKGluRmxvd0NoaWxkKTsKKyAg
ICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIHdpZHRoQ2FuZGlkYXRlICsgVXRpbHMu
Y29tcHV0ZWRIb3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZyhpbkZsb3dDaGlsZCkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB3aWR0aDsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xz
L0xheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0Jsb2NrRm9ybWF0dGluZy9CbG9ja01h
cmdpbkNvbGxhcHNlLmpzIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQv
QmxvY2tGb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTgyNTlh
NTk5OGExMzdlNjUyODFlNzcyMWEyMzMwYTVjNzdhODFjNgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL0xheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0Jsb2NrRm9ybWF0dGluZy9CbG9j
a01hcmdpbkNvbGxhcHNlLmpzCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK2NsYXNzIEJsb2NrTWFyZ2luQ29sbGFwc2UgeworCisg
ICAgc3RhdGljIG1hcmdpblRvcChib3gpIHsKKyAgICAgICAgaWYgKGJveC5pc0Fub255bW91cygp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIC8vIFRPRE86IHRha2UgX2hhc0Fkam9p
bmluZ01hcmdpblRvcEFuZEJvdHRvbSgpIGludG8gYWNjb3VudC4KKyAgICAgICAgaWYgKHRoaXMu
X2lzTWFyZ2luVG9wQ29sbGFwc2VkV2l0aFBhcmVudChib3gpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIC8vIEZsb2F0cyBhbmQgb3V0IG9mIGZsb3cgcG9zaXRpb25lZCBib3hlcyBk
byBub3QgY29sbGFwc2UgdGhlaXIgbWFyZ2lucy4KKyAgICAgICAgaWYgKCF0aGlzLl9pc01hcmdp
blRvcENvbGxhcHNlZFdpdGhTaWJsaW5nKGJveCkpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
bm9uQ29sbGFwc2VkTWFyZ2luVG9wKGJveCk7CisgICAgICAgIC8vIFRoZSBib3R0b20gbWFyZ2lu
IG9mIGFuIGluLWZsb3cgYmxvY2stbGV2ZWwgZWxlbWVudCBhbHdheXMgY29sbGFwc2VzIHdpdGgg
dGhlIHRvcCBtYXJnaW4gb2YgaXRzIG5leHQgaW4tZmxvdyBibG9jay1sZXZlbCBzaWJsaW5nLAor
ICAgICAgICAvLyB1bmxlc3MgdGhhdCBzaWJsaW5nIGhhcyBjbGVhcmFuY2UuCisgICAgICAgIGxl
dCBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSBib3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7Cisg
ICAgICAgIGlmIChwcmV2aW91c0luRmxvd1NpYmxpbmcpIHsKKyAgICAgICAgICAgIGxldCBwcmV2
aW91c1NpYmxpbmdNYXJnaW5Cb3R0b20gPSB0aGlzLl9ub25Db2xsYXBzZWRNYXJnaW5Cb3R0b20o
cHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKKyAgICAgICAgICAgIGxldCBtYXJnaW5Ub3AgPSB0aGlz
Ll9ub25Db2xsYXBzZWRNYXJnaW5Ub3AoYm94KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9t
YXJnaW5WYWx1ZShtYXJnaW5Ub3AsIHByZXZpb3VzU2libGluZ01hcmdpbkJvdHRvbSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX25vbkNvbGxhcHNlZE1hcmdpblRvcChib3gpOwor
ICAgIH0KKworICAgIHN0YXRpYyBtYXJnaW5Cb3R0b20oYm94KSB7CisgICAgICAgIGlmIChib3gu
aXNBbm9ueW1vdXMoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAvLyBUT0RPOiB0
YWtlIF9oYXNBZGpvaW5pbmdNYXJnaW5Ub3BBbmRCb3R0b20oKSBpbnRvIGFjY291bnQuCisgICAg
ICAgIGlmICh0aGlzLl9pc01hcmdpbkJvdHRvbUNvbGxhcHNlZFdpdGhQYXJlbnQoYm94KSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAvLyBGbG9hdHMgYW5kIG91dCBvZiBmbG93IHBv
c2l0aW9uZWQgYm94ZXMgZG8gbm90IGNvbGxhcHNlIHRoZWlyIG1hcmdpbnMuCisgICAgICAgIGlm
ICghdGhpcy5faXNNYXJnaW5Cb3R0b21Db2xsYXBzZWRXaXRoU2libGluZyhib3gpKQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX25vbkNvbGxhcHNlZE1hcmdpbkJvdHRvbShib3gpOworICAgICAg
ICAvLyBUaGUgYm90dG9tIG1hcmdpbiBvZiBhbiBpbi1mbG93IGJsb2NrLWxldmVsIGVsZW1lbnQg
YWx3YXlzIGNvbGxhcHNlcyB3aXRoIHRoZSB0b3AgbWFyZ2luIG9mIGl0cyBuZXh0IGluLWZsb3cg
YmxvY2stbGV2ZWwgc2libGluZywKKyAgICAgICAgLy8gdW5sZXNzIHRoYXQgc2libGluZyBoYXMg
Y2xlYXJhbmNlLgorICAgICAgICBpZiAoYm94Lm5leHRJbkZsb3dTaWJsaW5nKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vbkNvbGxhcHNlZE1hcmdpbkJv
dHRvbShib3gpOworICAgIH0KKworICAgIHN0YXRpYyBfaXNNYXJnaW5Ub3BDb2xsYXBzZWRXaXRo
U2libGluZyhib3gpIHsKKyAgICAgICAgaWYgKGJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWJveC5pc1Bvc2l0aW9uZWQo
KSB8fCBib3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgLy8gT3V0IG9mIGZsb3cgcG9zaXRpb25lZC4KKyAgICAgICAgQVNTRVJUKGJveC5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CisgICAgICAgIHJldHVybiBVdGlscy5pc1RvcEF1dG8o
Ym94KTsKKyAgICB9CisKKyAgICBzdGF0aWMgX2lzTWFyZ2luQm90dG9tQ29sbGFwc2VkV2l0aFNp
YmxpbmcoYm94KSB7CisgICAgICAgIGlmIChib3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFib3guaXNQb3NpdGlvbmVkKCkg
fHwgYm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIC8vIE91dCBvZiBmbG93IHBvc2l0aW9uZWQuCisgICAgICAgIEFTU0VSVChib3guaXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpOworICAgICAgICByZXR1cm4gVXRpbHMuaXNCb3R0b21BdXRv
KGJveCk7CisgICAgfQorCisgICAgc3RhdGljIF9pc01hcmdpblRvcENvbGxhcHNlZFdpdGhQYXJl
bnQoYm94KSB7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpbmZsb3cgY2hpbGQgY291bGQgcHJvcGFn
YXRlIGl0cyB0b3AgbWFyZ2luIHRvIHBhcmVudC4KKyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMu
b3JnL1RSL0NTUzIxL2JveC5odG1sI2NvbGxhcHNpbmctbWFyZ2lucworICAgICAgICBpZiAoYm94
LmlzQW5vbnltb3VzKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChi
b3guaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBsZXQgcGFyZW50ID0gYm94LnBhcmVudCgpOworICAgICAgICAvLyBJ
cyB0aGlzIGJveCB0aGUgZmlyc3QgaW5sZmxvdyBjaGlsZD8KKyAgICAgICAgaWYgKHBhcmVudC5m
aXJzdEluRmxvd0NoaWxkKCkgIT0gYm94KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAocGFyZW50LmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBNYXJnaW5zIG9mIHRoZSByb290IGVs
ZW1lbnQncyBib3ggZG8gbm90IGNvbGxhcHNlLgorICAgICAgICBpZiAocGFyZW50LmlzUm9vdEVs
ZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKFV0aWxzLmhh
c0JvcmRlclRvcChwYXJlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoVXRpbHMuaGFzUGFkZGluZ1RvcChwYXJlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgX2lzTWFyZ2luQm90
dG9tQ29sbGFwc2VkV2l0aFBhcmVudChib3gpIHsKKyAgICAgICAgLy8gbGFzdCBpbmZsb3cgYm94
IHRvIHBhcmVudC4KKyAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL2JveC5o
dG1sI2NvbGxhcHNpbmctbWFyZ2lucworICAgICAgICBpZiAoYm94LmlzQW5vbnltb3VzKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChib3guaXNGbG9hdGluZ09yT3V0
T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBs
ZXQgcGFyZW50ID0gYm94LnBhcmVudCgpOworICAgICAgICAvLyBJcyB0aGlzIHRoZSBsYXN0IGlu
bGZsb3cgY2hpbGQ/CisgICAgICAgIGlmIChwYXJlbnQubGFzdEluRmxvd0NoaWxkKCkgIT0gYm94
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAocGFyZW50LmVzdGFibGlz
aGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAvLyBNYXJnaW5zIG9mIHRoZSByb290IGVsZW1lbnQncyBib3ggZG8gbm90IGNvbGxh
cHNlLgorICAgICAgICBpZiAocGFyZW50LmlzUm9vdEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKFV0aWxzLmhhc0JvcmRlclRvcChwYXJlbnQpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoVXRpbHMuaGFzUGFkZGluZ1RvcChw
YXJlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIVV0aWxzLmlz
SGVpZ2h0QXV0byhwYXJlbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgX25vbkNvbGxhcHNlZE1hcmdpblRvcChi
b3gpIHsKKyAgICAgICAgLy8gTm9uIGNvbGxhcHNlZCBtYXJnaW4gdG9wIGluY2x1ZGVzIGNvbGxh
cHNlZCBtYXJnaW4gZnJvbSBpbmZsb3cgZmlyc3QgY2hpbGQuCisgICAgICAgIHJldHVybiB0aGlz
Ll9tYXJnaW5WYWx1ZShVdGlscy5jb21wdXRlZE1hcmdpblRvcChib3gpLCB0aGlzLl9jb2xsYXBz
ZWRNYXJnaW5Ub3BGcm9tRmlyc3RDaGlsZChib3gpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgX25v
bkNvbGxhcHNlZE1hcmdpbkJvdHRvbShib3gpIHsKKyAgICAgICAgLy8gTm9uIGNvbGxhcHNlZCBt
YXJnaW4gYm90dG9tIGluY2x1ZGVzIGNvbGxhcHNlZCBtYXJnaW4gZnJvbSBpbmZsb3cgbGFzdCBj
aGlsZC4KKyAgICAgICAgcmV0dXJuIHRoaXMuX21hcmdpblZhbHVlKFV0aWxzLmNvbXB1dGVkTWFy
Z2luQm90dG9tKGJveCksIHRoaXMuX2NvbGxhcHNlZE1hcmdpbkJvdHRvbUZyb21MYXN0Q2hpbGQo
Ym94KSk7CisgICAgfQorCisgICAgc3RhdGljIF9jb2xsYXBzZWRNYXJnaW5Ub3BGcm9tRmlyc3RD
aGlsZChib3gpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpcnN0IGNoaWxkIGNvbGxhcHNl
cyBpdHMgbWFyZ2luIHRvcC4KKyAgICAgICAgaWYgKCFib3guaXNDb250YWluZXIoKSB8fCAhYm94
LmZpcnN0SW5GbG93Q2hpbGQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBsZXQg
Zmlyc3RJbkZsb3dDaGlsZCA9IGJveC5maXJzdEluRmxvd0NoaWxkKCk7CisgICAgICAgIGlmICgh
dGhpcy5faXNNYXJnaW5Ub3BDb2xsYXBzZWRXaXRoUGFyZW50KGZpcnN0SW5GbG93Q2hpbGQpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIC8vIENvbGxlY3QgY29sbGFwc2VkIG1hcmdp
biB0b3AgcmVjdXJzaXZlbHkuCisgICAgICAgIHJldHVybiB0aGlzLl9tYXJnaW5WYWx1ZShVdGls
cy5jb21wdXRlZE1hcmdpblRvcChmaXJzdEluRmxvd0NoaWxkKSwgdGhpcy5fY29sbGFwc2VkTWFy
Z2luVG9wRnJvbUZpcnN0Q2hpbGQoZmlyc3RJbkZsb3dDaGlsZCkpOworICAgIH0KKworICAgIHN0
YXRpYyBfY29sbGFwc2VkTWFyZ2luQm90dG9tRnJvbUxhc3RDaGlsZChib3gpIHsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhlIGxhc3QgY2hpbGQgcHJvcGFnYXRlcyBpdHMgbWFyZ2luIGJvdHRvbS4K
KyAgICAgICAgaWYgKCFib3guaXNDb250YWluZXIoKSB8fCAhYm94Lmxhc3RJbkZsb3dDaGlsZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGxldCBsYXN0SW5GbG93Q2hpbGQgPSBi
b3gubGFzdEluRmxvd0NoaWxkKCk7CisgICAgICAgIGlmICghdGhpcy5faXNNYXJnaW5Cb3R0b21D
b2xsYXBzZWRXaXRoUGFyZW50KGxhc3RJbkZsb3dDaGlsZCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgLy8gQ29sbGVjdCBjb2xsYXBzZWQgbWFyZ2luIGJvdHRvbSByZWN1cnNpdmVs
eS4KKyAgICAgICAgcmV0dXJuIHRoaXMuX21hcmdpblZhbHVlKFV0aWxzLmNvbXB1dGVkTWFyZ2lu
Qm90dG9tKGxhc3RJbkZsb3dDaGlsZCksIHRoaXMuX2NvbGxhcHNlZE1hcmdpbkJvdHRvbUZyb21M
YXN0Q2hpbGQobGFzdEluRmxvd0NoaWxkKSk7CisgICAgfQorCisgICAgc3RhdGljIF9tYXJnaW5W
YWx1ZShjdXJyZW50TWFyZ2luVmFsdWUsIGNhbmRpZGF0ZU1hcmdpblZhbHVlKSB7CisgICAgICAg
IGlmICghY2FuZGlkYXRlTWFyZ2luVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudE1h
cmdpblZhbHVlOworICAgICAgICBpZiAoIWN1cnJlbnRNYXJnaW5WYWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBjYW5kaWRhdGVNYXJnaW5WYWx1ZTsKKyAgICAgICAgLy8gQm90aCBtYXJnaW5zIGFy
ZSBwb3NpdGl2ZS4KKyAgICAgICAgaWYgKGNhbmRpZGF0ZU1hcmdpblZhbHVlID4gMCAmJiBjdXJy
ZW50TWFyZ2luVmFsdWUgPiAwKQorICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KGNhbmRpZGF0
ZU1hcmdpblZhbHVlLCBjdXJyZW50TWFyZ2luVmFsdWUpCisgICAgICAgIC8vIEJvdGggbWFyZ2lu
cyBhcmUgbmVnYXRpdmUuCisgICAgICAgIGlmIChjYW5kaWRhdGVNYXJnaW5WYWx1ZSA8IDAgJiYg
Y3VycmVudE1hcmdpblZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwIC0gTWF0aC5tYXgo
TWF0aC5hYnMoY2FuZGlkYXRlTWFyZ2luVmFsdWUpLCBNYXRoLmFicyhjdXJyZW50TWFyZ2luVmFs
dWUpKQorICAgICAgICAvLyBPbmUgb2YgdGhlIG1hcmdpbnMgaXMgbmVnYXRpdmUuCisgICAgICAg
IHJldHVybiBjdXJyZW50TWFyZ2luVmFsdWUgKyBjYW5kaWRhdGVNYXJnaW5WYWx1ZTsKKyAgICB9
CisKKyAgICBzdGF0aWMgX2hhc0Fkam9pbmluZ01hcmdpblRvcEFuZEJvdHRvbShib3gpIHsKKyAg
ICAgICAgLy8gVHdvIG1hcmdpbnMgYXJlIGFkam9pbmluZyBpZiBhbmQgb25seSBpZjoKKyAgICAg
ICAgLy8gMS4gYm90aCBiZWxvbmcgdG8gaW4tZmxvdyBibG9jay1sZXZlbCBib3hlcyB0aGF0IHBh
cnRpY2lwYXRlIGluIHRoZSBzYW1lIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dAorICAgICAgICAv
LyAyLiBubyBsaW5lIGJveGVzLCBubyBjbGVhcmFuY2UsIG5vIHBhZGRpbmcgYW5kIG5vIGJvcmRl
ciBzZXBhcmF0ZSB0aGVtIChOb3RlIHRoYXQgY2VydGFpbiB6ZXJvLWhlaWdodCBsaW5lIGJveGVz
IChzZWUgOS40LjIpIGFyZSBpZ25vcmVkIGZvciB0aGlzIHB1cnBvc2UuKQorICAgICAgICAvLyAz
LiBib3RoIGJlbG9uZyB0byB2ZXJ0aWNhbGx5LWFkamFjZW50IGJveCBlZGdlcywgaS5lLiBmb3Jt
IG9uZSBvZiB0aGUgZm9sbG93aW5nIHBhaXJzOgorICAgICAgICAvLyAgICAgICAgdG9wIG1hcmdp
biBvZiBhIGJveCBhbmQgdG9wIG1hcmdpbiBvZiBpdHMgZmlyc3QgaW4tZmxvdyBjaGlsZAorICAg
ICAgICAvLyAgICAgICAgYm90dG9tIG1hcmdpbiBvZiBib3ggYW5kIHRvcCBtYXJnaW4gb2YgaXRz
IG5leHQgaW4tZmxvdyBmb2xsb3dpbmcgc2libGluZworICAgICAgICAvLyAgICAgICAgYm90dG9t
IG1hcmdpbiBvZiBhIGxhc3QgaW4tZmxvdyBjaGlsZCBhbmQgYm90dG9tIG1hcmdpbiBvZiBpdHMg
cGFyZW50IGlmIHRoZSBwYXJlbnQgaGFzICdhdXRvJyBjb21wdXRlZCBoZWlnaHQKKyAgICAgICAg
Ly8gICAgICAgIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgb2YgYSBib3ggdGhhdCBkb2VzIG5vdCBl
c3RhYmxpc2ggYSBuZXcgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IGFuZCB0aGF0IGhhcyB6ZXJv
IGNvbXB1dGVkICdtaW4taGVpZ2h0JywKKyAgICAgICAgLy8gICAgICAgIHplcm8gb3IgJ2F1dG8n
IGNvbXB1dGVkICdoZWlnaHQnLCBhbmQgbm8gaW4tZmxvdyBjaGlsZHJlbgorICAgICAgICAvLyBB
IGNvbGxhcHNlZCBtYXJnaW4gaXMgY29uc2lkZXJlZCBhZGpvaW5pbmcgdG8gYW5vdGhlciBtYXJn
aW4gaWYgYW55IG9mIGl0cyBjb21wb25lbnQgbWFyZ2lucyBpcyBhZGpvaW5pbmcgdG8gdGhhdCBt
YXJnaW4uCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Ub29s
cy9MYXlvdXRSZWxvYWRlZC9Gb3JtYXR0aW5nQ29udGV4dC9GbG9hdGluZ0NvbnRleHQuanMgYi9U
b29scy9MYXlvdXRSZWxvYWRlZC9Gb3JtYXR0aW5nQ29udGV4dC9GbG9hdGluZ0NvbnRleHQuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTgzMjEyOGQ0ZDY1OTdkZGQ5YTU1MTdmZWZjYjg4NWJhNmY3MDkyYQotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL0Zvcm1hdHRpbmdDb250ZXh0L0Zs
b2F0aW5nQ29udGV4dC5qcwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK2NsYXNzIEZsb2F0aW5nQ29udGV4dCB7CisgICAgY29u
c3RydWN0b3IoZm9ybWF0dGluZ0NvbnRleHQpIHsKKyAgICAgICAgdGhpcy5tX2xlZnRGbG9hdGlu
Z0JveFN0YWNrID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMubV9yaWdodEZsb2F0aW5nQm94
U3RhY2sgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5tX2xhc3RGbG9hdGluZyA9IG51bGw7
CisgICAgICAgIHRoaXMubV9mb3JtYXR0aW5nQ29udGV4dCA9IGZvcm1hdHRpbmdDb250ZXh0Owor
ICAgIH0KKworICAgIGNvbXB1dGVQb3NpdGlvbihib3gpIHsKKyAgICAgICAgaWYgKGJveC5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBib3gudG9wTGVmdCgpOwor
ICAgICAgICBpZiAoYm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgIGxl
dCBwb3NpdGlvbiA9IHRoaXMuX3Bvc2l0aW9uRm9yRmxvYXRpbmcoYm94KTsKKyAgICAgICAgICAg
IHRoaXMuX2FkZEZsb2F0aW5nKGJveCk7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKFV0aWxzLmhhc0NsZWFyKGJveCkpCisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fcG9zaXRpb25Gb3JDbGVhcihib3gpOworICAgICAgICAvLyBJbnRydWRpbmcg
ZmxvYXRzIG1pZ2h0IGZvcmNlIHRoaXMgYm94IG1vdmUuCisgICAgICAgIHJldHVybiB0aGlzLl9j
b21wdXRlUG9zaXRpb25Ub0F2b2lkSW50cnVkaW5nRmxvYXRzKGJveCk7CisgICAgfQorCisgICAg
Ym90dG9tKCkgeworICAgICAgICBsZXQgbGVmdEJvdHRvbSA9IHRoaXMuX2JvdHRvbSh0aGlzLm1f
bGVmdEZsb2F0aW5nQm94U3RhY2spOworICAgICAgICBsZXQgcmlnaHRCb3R0b20gPSB0aGlzLl9i
b3R0b20odGhpcy5tX3JpZ2h0RmxvYXRpbmdCb3hTdGFjayk7CisgICAgICAgIGlmIChOdW1iZXIu
aXNOYU4obGVmdEJvdHRvbSkgJiYgTnVtYmVyLmlzTmFOKHJpZ2h0Qm90dG9tKSkKKyAgICAgICAg
ICAgIHJldHVybiBOdW1iZXIuTmFOOworICAgICAgICBpZiAoIU51bWJlci5pc05hTihsZWZ0Qm90
dG9tKSAmJiAhTnVtYmVyLmlzTmFOKHJpZ2h0Qm90dG9tKSkKKyAgICAgICAgICAgIHJldHVybiBN
YXRoLm1heChsZWZ0Qm90dG9tLCByaWdodEJvdHRvbSk7CisgICAgICAgIGlmICghTnVtYmVyLmlz
TmFOKGxlZnRCb3R0b20pKQorICAgICAgICAgICAgcmV0dXJuIGxlZnRCb3R0b207CisgICAgICAg
IHJldHVybiByaWdodEJvdHRvbTsKKyAgICB9CisKKyAgICBfcG9zaXRpb25Gb3JGbG9hdGluZyhm
bG9hdGluZ0JveCkgeworICAgICAgICBpZiAodGhpcy5faXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2FkanVzdGVkRmxvYXRpbmdQb3NpdGlvbihmbG9hdGluZ0JveCwgdGhpcy5f
Zm9ybWF0dGluZ0NvbnRleHQoKS5hYnNvbHV0ZU1hcmdpbkJveChmbG9hdGluZ0JveCkudG9wKCkp
OworICAgICAgICBsZXQgdmVydGljYWxQb3NpdGlvbiA9IE1hdGgubWF4KHRoaXMuX2Zvcm1hdHRp
bmdDb250ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3goZmxvYXRpbmdCb3gpLnRvcCgpLCB0aGlzLl9m
b3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRlTWFyZ2luQm94KHRoaXMubV9sYXN0RmxvYXRpbmcp
LnRvcCgpKTsKKyAgICAgICAgbGV0IHNwYWNlTmVlZGVkID0gdGhpcy5fZm9ybWF0dGluZ0NvbnRl
eHQoKS5hYnNvbHV0ZU1hcmdpbkJveChmbG9hdGluZ0JveCkud2lkdGgoKTsKKyAgICAgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgICAgIGxldCBmbG9hdGluZ1BhaXIgPSB0aGlzLl9maW5kSW5u
ZXJNb3N0TGVmdEFuZFJpZ2h0KHZlcnRpY2FsUG9zaXRpb24pOworICAgICAgICAgICAgaWYgKHRo
aXMuX2F2YWlsYWJsZVNwYWNlKGZsb2F0aW5nQm94LmNvbnRhaW5pbmdCbG9jaygpLCBmbG9hdGlu
Z1BhaXIpID49IHNwYWNlTmVlZGVkKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGp1
c3RlZEZsb2F0aW5nUG9zaXRpb24oZmxvYXRpbmdCb3gsIHZlcnRpY2FsUG9zaXRpb24sIGZsb2F0
aW5nUGFpcik7CisgICAgICAgICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0gdGhpcy5fbW92ZVRvTmV4
dFZlcnRpY2FsUG9zaXRpb24oZmxvYXRpbmdQYWlyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gTWF0aC5OYW47CisgICAgfQorCisgICAgX3Bvc2l0aW9uRm9yQ2xlYXIoYm94KSB7CisgICAg
ICAgIEFTU0VSVChVdGlscy5oYXNDbGVhcihib3gpKTsKKyAgICAgICAgaWYgKHRoaXMuX2lzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBib3gudG9wTGVmdCgpOworCisgICAgICAgIGxldCBs
ZWZ0Qm90dG9tID0gTnVtYmVyLk5hTjsKKyAgICAgICAgbGV0IHJpZ2h0Qm90dG9tID0gTnVtYmVy
Lk5hTjsKKyAgICAgICAgaWYgKFV0aWxzLmhhc0NsZWFyTGVmdChib3gpIHx8IFV0aWxzLmhhc0Ns
ZWFyQm90aChib3gpKQorICAgICAgICAgICAgbGVmdEJvdHRvbSA9IHRoaXMuX2JvdHRvbSh0aGlz
Lm1fbGVmdEZsb2F0aW5nQm94U3RhY2spOworICAgICAgICBpZiAoVXRpbHMuaGFzQ2xlYXJSaWdo
dChib3gpIHx8IFV0aWxzLmhhc0NsZWFyQm90aChib3gpKQorICAgICAgICAgICAgcmlnaHRCb3R0
b20gPSB0aGlzLl9ib3R0b20odGhpcy5tX3JpZ2h0RmxvYXRpbmdCb3hTdGFjayk7CisKKyAgICAg
ICAgaWYgKCFOdW1iZXIuaXNOYU4obGVmdEJvdHRvbSkgJiYgIU51bWJlci5pc05hTihyaWdodEJv
dHRvbSkpCisgICAgICAgICAgICByZXR1cm4gbmV3IExheW91dFBvaW50KE1hdGgubWF4KGxlZnRC
b3R0b20sIHJpZ2h0Qm90dG9tKSwgYm94LnJlY3QoKS5sZWZ0KCkpOworICAgICAgICBpZiAoIU51
bWJlci5pc05hTihsZWZ0Qm90dG9tKSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgTGF5b3V0UG9p
bnQobGVmdEJvdHRvbSwgYm94LnJlY3QoKS5sZWZ0KCkpOworICAgICAgICBpZiAoIU51bWJlci5p
c05hTihyaWdodEJvdHRvbSkpCisgICAgICAgICAgICByZXR1cm4gbmV3IExheW91dFBvaW50KHJp
Z2h0Qm90dG9tLCBib3gucmVjdCgpLmxlZnQoKSk7CisgICAgICAgIHJldHVybiBib3gudG9wTGVm
dCgpOworICAgIH0KKworICAgIF9jb21wdXRlUG9zaXRpb25Ub0F2b2lkSW50cnVkaW5nRmxvYXRz
KGJveCkgeworICAgICAgICBpZiAoIWJveC5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRl
eHQoKSB8fCB0aGlzLl9pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gYm94LnRvcExlZnQo
KTsKKyAgICAgICAgLy8gVGhlIGJvcmRlciBib3ggb2YgYSB0YWJsZSwgYSBibG9jay1sZXZlbCBy
ZXBsYWNlZCBlbGVtZW50LCBvciBhbiBlbGVtZW50IGluIHRoZSBub3JtYWwgZmxvdyB0aGF0IGVz
dGFibGlzaGVzCisgICAgICAgIC8vIGEgbmV3IGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCAoc3Vj
aCBhcyBhbiBlbGVtZW50IHdpdGggJ292ZXJmbG93JyBvdGhlciB0aGFuICd2aXNpYmxlJykgbXVz
dCBub3Qgb3ZlcmxhcCB0aGUKKyAgICAgICAgLy8gbWFyZ2luIGJveCBvZiBhbnkgZmxvYXRzIGlu
IHRoZSBzYW1lIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dCBhcyB0aGUgZWxlbWVudCBpdHNlbGYu
CisgICAgICAgIC8vIEZvciBzb21lIHJlYXNvbiwgd2UgcG9zaXRpb24gdGhpcyBhcyBpZiBpdCB3
YXMgZmxvYXRpbmcgbGVmdC4KKyAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uRm9yRmxvYXRp
bmcoYm94KTsKKyAgICB9CisKKyAgICBfYWRkRmxvYXRpbmcoZmxvYXRpbmdCb3gpIHsKKyAgICAg
ICAgdGhpcy5tX2xhc3RGbG9hdGluZyA9IGZsb2F0aW5nQm94OworICAgICAgICBpZiAoVXRpbHMu
aXNGbG9hdGluZ0xlZnQoZmxvYXRpbmdCb3gpKSB7CisgICAgICAgICAgICB0aGlzLm1fbGVmdEZs
b2F0aW5nQm94U3RhY2sucHVzaChmbG9hdGluZ0JveCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgdGhpcy5tX3JpZ2h0RmxvYXRpbmdCb3hTdGFjay5wdXNoKGZsb2F0
aW5nQm94KTsKKyAgICB9CisKKyAgICBfZmluZElubmVyTW9zdExlZnRBbmRSaWdodCh2ZXJ0aWNh
bFBvc2l0aW9uKSB7CisgICAgICAgIGxldCBsZWZ0RmxvYXRpbmcgPSB0aGlzLl9maW5kRmxvYXRp
bmdBdFZlcnRpY2FsUG9zaXRpb24odmVydGljYWxQb3NpdGlvbiwgdGhpcy5tX2xlZnRGbG9hdGlu
Z0JveFN0YWNrKTsKKyAgICAgICAgbGV0IHJpZ2h0RmxvYXRpbmcgPSB0aGlzLl9maW5kRmxvYXRp
bmdBdFZlcnRpY2FsUG9zaXRpb24odmVydGljYWxQb3NpdGlvbiwgdGhpcy5tX3JpZ2h0RmxvYXRp
bmdCb3hTdGFjayk7CisgICAgICAgIHJldHVybiB7IGxlZnQ6IGxlZnRGbG9hdGluZywgcmlnaHQ6
IHJpZ2h0RmxvYXRpbmcgfTsKKyAgICB9CisKKyAgICBfbW92ZVRvTmV4dFZlcnRpY2FsUG9zaXRp
b24oZmxvYXRpbmdQYWlyKSB7CisgICAgICAgIGlmICghZmxvYXRpbmdQYWlyLmxlZnQgJiYgIWZs
b2F0aW5nUGFpci5yaWdodCkKKyAgICAgICAgICAgIHJldHVybiBNYXRoLk5hTjsKKyAgICAgICAg
bGV0IGxlZnRCb3R0b20gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CisgICAgICAgIGxldCBy
aWdodEJvdHRvbSA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKKyAgICAgICAgaWYgKGZsb2F0
aW5nUGFpci5sZWZ0KQorICAgICAgICAgICAgbGVmdEJvdHRvbSA9IHRoaXMuX2Zvcm1hdHRpbmdD
b250ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3goZmxvYXRpbmdQYWlyLmxlZnQpLmJvdHRvbSgpOwor
ICAgICAgICBpZiAoZmxvYXRpbmdQYWlyLnJpZ2h0KQorICAgICAgICAgICAgcmlnaHRCb3R0b20g
PSB0aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRlTWFyZ2luQm94KGZsb2F0aW5nUGFp
ci5yaWdodCkuYm90dG9tKCk7CisgICAgICAgIHJldHVybiBNYXRoLm1pbihsZWZ0Qm90dG9tLCBy
aWdodEJvdHRvbSk7CisgICAgfQorCisgICAgX2F2YWlsYWJsZVNwYWNlKGNvbnRhaW5pbmdCbG9j
aywgZmxvYXRpbmdQYWlyKSB7CisgICAgICAgIGlmIChmbG9hdGluZ1BhaXIubGVmdCAmJiBmbG9h
dGluZ1BhaXIucmlnaHQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGluZ0NvbnRl
eHQoKS5hYnNvbHV0ZU1hcmdpbkJveChmbG9hdGluZ1BhaXIucmlnaHQpLmxlZnQoKSAtIHRoaXMu
X2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3goZmxvYXRpbmdQYWlyLmxlZnQp
LnJpZ2h0KCk7CisgICAgICAgIGlmIChmbG9hdGluZ1BhaXIubGVmdCkKKyAgICAgICAgICAgIHJl
dHVybiBjb250YWluaW5nQmxvY2suY29udGVudEJveCgpLndpZHRoKCkgLSAodGhpcy5fZm9ybWF0
dGluZ0NvbnRleHQoKS5hYnNvbHV0ZU1hcmdpbkJveChmbG9hdGluZ1BhaXIubGVmdCkucmlnaHQo
KSAtIHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVCb3JkZXJCb3goY29udGFpbmlu
Z0Jsb2NrKS5sZWZ0KCkpOworICAgICAgICBpZiAoZmxvYXRpbmdQYWlyLnJpZ2h0KQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3go
ZmxvYXRpbmdQYWlyLnJpZ2h0KS5sZWZ0KCk7CisgICAgICAgIHJldHVybiBjb250YWluaW5nQmxv
Y2suY29udGVudEJveCgpLndpZHRoKCk7CisgICAgfQorCisgICAgX2ZpbmRGbG9hdGluZ0F0VmVy
dGljYWxQb3NpdGlvbih2ZXJ0aWNhbFBvc2l0aW9uLCBmbG9hdGluZ1N0YWNrKSB7CisgICAgICAg
IGxldCBpbmRleCA9IGZsb2F0aW5nU3RhY2subGVuZ3RoOworICAgICAgICB3aGlsZSAoLS1pbmRl
eCA+PSAwICYmIHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3goZmxv
YXRpbmdTdGFja1tpbmRleF0pLmJvdHRvbSgpIDw9IHZlcnRpY2FsUG9zaXRpb24pOworICAgICAg
ICByZXR1cm4gaW5kZXggPj0gMCA/IGZsb2F0aW5nU3RhY2tbaW5kZXhdIDogbnVsbDsKKyAgICB9
CisKKyAgICBfaXNFbXB0eSgpIHsKKyAgICAgICAgcmV0dXJuICF0aGlzLm1fbGVmdEZsb2F0aW5n
Qm94U3RhY2subGVuZ3RoICYmICF0aGlzLm1fcmlnaHRGbG9hdGluZ0JveFN0YWNrLmxlbmd0aDsK
KyAgICB9CisKKyAgICBfYWRqdXN0ZWRGbG9hdGluZ1Bvc2l0aW9uKGZsb2F0aW5nQm94LCB2ZXJ0
aWNhbFBvc2l0aW9uLCBsZWZ0UmlnaHRGbG9hdGluZ3MpIHsKKyAgICAgICAgbGV0IGNvbnRhaW5p
bmdCbG9jayA9IGZsb2F0aW5nQm94LmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICAvLyBDb252
ZXJ0IGFsbCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byBmb3JtYXR0aW5nIGNvbnRleHQncyByb290
LgorICAgICAgICBsZXQgbGVmdCA9IHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVD
b250ZW50Qm94KGNvbnRhaW5pbmdCbG9jaykubGVmdCgpOworICAgICAgICBsZXQgcmlnaHQgPSB0
aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRlQ29udGVudEJveChjb250YWluaW5nQmxv
Y2spLnJpZ2h0KCk7CisgICAgICAgIGlmIChsZWZ0UmlnaHRGbG9hdGluZ3MpIHsKKyAgICAgICAg
ICAgIGlmIChsZWZ0UmlnaHRGbG9hdGluZ3MubGVmdCkgeworICAgICAgICAgICAgICAgIGxldCBm
bG9hdGluZ0JveFJpZ2h0ID0gdGhpcy5fZm9ybWF0dGluZ0NvbnRleHQoKS5hYnNvbHV0ZU1hcmdp
bkJveChsZWZ0UmlnaHRGbG9hdGluZ3MubGVmdCkucmlnaHQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZmxvYXRpbmdCb3hSaWdodCA+IGxlZnQpCisgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBm
bG9hdGluZ0JveFJpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGVmdFJp
Z2h0RmxvYXRpbmdzLnJpZ2h0KSB7CisgICAgICAgICAgICAgICAgbGV0IGZsb2F0aW5nQm94TGVm
dCA9IHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkuYWJzb2x1dGVNYXJnaW5Cb3gobGVmdFJpZ2h0
RmxvYXRpbmdzLnJpZ2h0KS5sZWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKGZsb2F0aW5nQm94
TGVmdCA8IHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICByaWdodCA9IGZsb2F0aW5nQm94TGVm
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsZWZ0ICs9IHRoaXMuX2Zvcm1h
dHRpbmdDb250ZXh0KCkubWFyZ2luTGVmdChmbG9hdGluZ0JveCk7CisgICAgICAgIHJpZ2h0IC09
IHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkubWFyZ2luUmlnaHQoZmxvYXRpbmdCb3gpOworICAg
ICAgICB2ZXJ0aWNhbFBvc2l0aW9uICs9IHRoaXMuX2Zvcm1hdHRpbmdDb250ZXh0KCkubWFyZ2lu
VG9wKGZsb2F0aW5nQm94KTsKKyAgICAgICAgLy8gTm8gY29udmVydCB0aGVtIGJhY2sgcmVsYXRp
dmUgdG8gdGhlIGZsb2F0aW5nQm94J3MgY29udGFpbmluZyBibG9jay4KKyAgICAgICAgbGV0IGNv
bnRhaW5pbmdCbG9ja0xlZnQgPSB0aGlzLl9mb3JtYXR0aW5nQ29udGV4dCgpLmFic29sdXRlQm9y
ZGVyQm94KGNvbnRhaW5pbmdCbG9jaykubGVmdCgpOworICAgICAgICBsZXQgY29udGFpbmluZ0Js
b2NrVG9wID0gdGhpcy5fZm9ybWF0dGluZ0NvbnRleHQoKS5hYnNvbHV0ZUJvcmRlckJveChjb250
YWluaW5nQmxvY2spLnRvcCgpOworICAgICAgICBsZWZ0IC09IGNvbnRhaW5pbmdCbG9ja0xlZnQ7
CisgICAgICAgIHJpZ2h0IC09IGNvbnRhaW5pbmdCbG9ja0xlZnQ7CisgICAgICAgIHZlcnRpY2Fs
UG9zaXRpb24gLT0gY29udGFpbmluZ0Jsb2NrVG9wOworCisgICAgICAgIGlmIChVdGlscy5pc0Zs
b2F0aW5nTGVmdChmbG9hdGluZ0JveCkgfHwgIVV0aWxzLmlzRmxvYXRpbmdQb3NpdGlvbmVkKGZs
b2F0aW5nQm94KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgTGF5b3V0UG9pbnQodmVydGljYWxQ
b3NpdGlvbiwgbGVmdCk7CisgICAgICAgIHJldHVybiBuZXcgTGF5b3V0UG9pbnQodmVydGljYWxQ
b3NpdGlvbiwgcmlnaHQgLSBmbG9hdGluZ0JveC5yZWN0KCkud2lkdGgoKSk7CisgICAgfQorCisg
ICAgX2JvdHRvbShmbG9hdGluZ1N0YWNrKSB7CisgICAgICAgIGlmICghZmxvYXRpbmdTdGFjayB8
fCAhZmxvYXRpbmdTdGFjay5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5hTjsK
KyAgICAgICAgbGV0IG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTsKKyAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBmbG9hdGluZ1N0YWNrLmxlbmd0aDsgKytpKQorICAgICAgICAgICAg
bWF4ID0gTWF0aC5tYXgodGhpcy5fZm9ybWF0dGluZ0NvbnRleHQoKS5hYnNvbHV0ZU1hcmdpbkJv
eChmbG9hdGluZ1N0YWNrW2ldKS5ib3R0b20oKSwgbWF4KTsKKyAgICAgICAgcmV0dXJuIG1heDsK
KyAgICB9CisKKyAgICBfZm9ybWF0dGluZ0NvbnRleHQoKSB7CisgICAgICAgIHJldHVybiB0aGlz
Lm1fZm9ybWF0dGluZ0NvbnRleHQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTGF5b3V0
UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQvRm9ybWF0dGluZ0NvbnRleHQuanMgYi9Ub29scy9M
YXlvdXRSZWxvYWRlZC9Gb3JtYXR0aW5nQ29udGV4dC9Gb3JtYXR0aW5nQ29udGV4dC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYzJjM2MyNDlhMzNlNTA2NTY0OWYyODQzMWY4M2E1ZDczZjBiZTc1Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQvRm9ybWF0
dGluZ0NvbnRleHQuanMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK2NsYXNzIEZvcm1hdHRpbmdDb250ZXh0IHsKKyAgICBjb25z
dHJ1Y3Rvcihyb290Q29udGFpbmVyKSB7CisgICAgICAgIHRoaXMubV9yb290Q29udGFpbmVyID0g
cm9vdENvbnRhaW5lcjsKKyAgICAgICAgdGhpcy5tX2Zsb2F0aW5nQ29udGV4dCA9IG51bGw7Cisg
ICAgfQorCisgICAgcm9vdENvbnRhaW5lcigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubV9yb290
Q29udGFpbmVyOworICAgIH0KKworICAgIGZsb2F0aW5nQ29udGV4dCgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMubV9mbG9hdGluZ0NvbnRleHQ7CisgICAgfQorCisgICAgbGF5b3V0KGxheW91dENv
bnRleHQpIHsKKyAgICB9CisKKyAgICBjb21wdXRlV2lkdGgoYm94KSB7CisgICAgfQorCisgICAg
Y29tcHV0ZUhlaWdodChib3gpIHsKKyAgICB9CisKKyAgICBtYXJnaW5Ub3AoYm94KSB7CisgICAg
ICAgIHJldHVybiBVdGlscy5jb21wdXRlZE1hcmdpblRvcChib3gpOworICAgIH0KKyAgICAKKyAg
ICBtYXJnaW5MZWZ0KGJveCkgeworICAgICAgICByZXR1cm4gVXRpbHMuY29tcHV0ZWRNYXJnaW5M
ZWZ0KGJveCk7CisgICAgfQorICAgIAorICAgIG1hcmdpbkJvdHRvbShib3gpIHsKKyAgICAgICAg
cmV0dXJuIFV0aWxzLmNvbXB1dGVkTWFyZ2luQm90dG9tKGJveCk7CisgICAgfQorICAgIAorICAg
IG1hcmdpblJpZ2h0KGJveCkgeworICAgICAgICByZXR1cm4gVXRpbHMuY29tcHV0ZWRNYXJnaW5S
aWdodChib3gpOworICAgIH0KKworICAgIGFic29sdXRlTWFyZ2luQm94KGJveCkgeworICAgICAg
ICBsZXQgYWJzb2x1dGVDb250ZW50Qm94ID0gVXRpbHMubWFwVG9Db250YWluZXIoYm94LCB0aGlz
LnJvb3RDb250YWluZXIoKSk7CisgICAgICAgIGFic29sdXRlQ29udGVudEJveC5tb3ZlQnkobmV3
IExheW91dFNpemUoLXRoaXMubWFyZ2luTGVmdChib3gpLCAtdGhpcy5tYXJnaW5Ub3AoYm94KSkp
OworICAgICAgICBhYnNvbHV0ZUNvbnRlbnRCb3guZ3Jvd0J5KG5ldyBMYXlvdXRTaXplKHRoaXMu
bWFyZ2luTGVmdChib3gpICsgdGhpcy5tYXJnaW5SaWdodChib3gpLCB0aGlzLm1hcmdpblRvcChi
b3gpICsgdGhpcy5tYXJnaW5Cb3R0b20oYm94KSkpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVD
b250ZW50Qm94OworICAgIH0KKworICAgIGFic29sdXRlQm9yZGVyQm94KGJveCkgeworICAgICAg
ICBsZXQgYm9yZGVyQm94ID0gYm94LmJvcmRlckJveCgpOworICAgICAgICBsZXQgYWJzb2x1dGVS
ZWN0ID0gbmV3IExheW91dFJlY3QoVXRpbHMubWFwVG9Db250YWluZXIoYm94LCB0aGlzLnJvb3RD
b250YWluZXIoKSkudG9wTGVmdCgpLCBib3JkZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgYWJzb2x1
dGVSZWN0Lm1vdmVCeShib3JkZXJCb3gudG9wTGVmdCgpKTsKKyAgICAgICAgcmV0dXJuIGFic29s
dXRlUmVjdDsKKyAgICB9CisKKyAgICBhYnNvbHV0ZVBhZGRpbmdCb3goYm94KSB7CisgICAgICAg
IGxldCBwYWRkaW5nQm94ID0gYm94LnBhZGRpbmdCb3goKTsKKyAgICAgICAgbGV0IGFic29sdXRl
UmVjdCA9IG5ldyBMYXlvdXRSZWN0KFV0aWxzLm1hcFRvQ29udGFpbmVyKGJveCwgdGhpcy5yb290
Q29udGFpbmVyKCkpLnRvcExlZnQoKSwgcGFkZGluZ0JveC5zaXplKCkpOworICAgICAgICBhYnNv
bHV0ZVJlY3QubW92ZUJ5KHBhZGRpbmdCb3gudG9wTGVmdCgpKTsKKyAgICAgICAgcmV0dXJuIGFi
c29sdXRlUmVjdDsKKyAgICB9CisKKyAgICBhYnNvbHV0ZUNvbnRlbnRCb3goYm94KSB7CisgICAg
ICAgIGxldCBjb250ZW50Qm94ID0gYm94LmNvbnRlbnRCb3goKTsKKyAgICAgICAgbGV0IGFic29s
dXRlUmVjdCA9IG5ldyBMYXlvdXRSZWN0KFV0aWxzLm1hcFRvQ29udGFpbmVyKGJveCwgdGhpcy5y
b290Q29udGFpbmVyKCkpLnRvcExlZnQoKSwgY29udGVudEJveC5zaXplKCkpOworICAgICAgICBh
YnNvbHV0ZVJlY3QubW92ZUJ5KGNvbnRlbnRCb3gudG9wTGVmdCgpKTsKKyAgICAgICAgcmV0dXJu
IGFic29sdXRlUmVjdDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9MYXlvdXRSZWxvYWRl
ZC9Gb3JtYXR0aW5nQ29udGV4dC9JbmxpbmVGb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmpzIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQvSW5saW5lRm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGM4MjI2ZDUw
NmJmNjkyNjU3NDM5MWUyYzUwYzM3OWZjMWQxZTYzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
TGF5b3V0UmVsb2FkZWQvRm9ybWF0dGluZ0NvbnRleHQvSW5saW5lRm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5qcwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2NsYXNzIElubGluZUZvcm1hdHRpbmdDb250ZXh0
IGV4dGVuZHMgRm9ybWF0dGluZ0NvbnRleHQgeworICAgIGNvbnN0cnVjdG9yKHJvb3QpIHsKKyAg
ICAgICAgc3VwZXIocm9vdCk7CisgICAgICAgIC8vIElmIHRoZSBibG9jayBjb250YWluZXIgYm94
IHRoYXQgaW5pdGlhdGVzIHRoaXMgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4IGFsc28gZXN0YWJs
aXNoZXMgYSBibG9jayBjb250ZXh0LCBjcmVhdGUgYSBuZXcgZmxvYXQgZm9yIHVzLgorICAgICAg
ICBBU1NFUlQocm9vdC5pc0Jsb2NrQ29udGFpbmVyQm94KCkpOworICAgICAgICBpZiAocm9vdC5l
c3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIHRoaXMubV9m
bG9hdGluZ0NvbnRleHQgPSBuZXcgRmxvYXRpbmdDb250ZXh0KHRoaXMpOworICAgICAgICAvLyBU
T0RPOiBGbG9hdHMgbmVlZCB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQuCisgICAgICAgIHRoaXMu
bV9saW5lID0gbmV3IExpbmUocm9vdC5jb250ZW50Qm94KCkud2lkdGgoKSk7CisgICAgICAgIHRo
aXMubV9saW5lcyA9IG5ldyBBcnJheSgpOworICAgIH0KKworICAgIGxheW91dChsYXlvdXRDb250
ZXh0KSB7CisgICAgICAgIC8vIDkuNC4yIElubGluZSBmb3JtYXR0aW5nIGNvbnRleHRzCisgICAg
ICAgIC8vIEluIGFuIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQsIGJveGVzIGFyZSBsYWlkIG91
dCBob3Jpem9udGFsbHksIG9uZSBhZnRlciB0aGUgb3RoZXIsIGJlZ2lubmluZyBhdCB0aGUgdG9w
IG9mIGEgY29udGFpbmluZyBibG9jay4KKyAgICAgICAgaWYgKCF0aGlzLnJvb3RDb250YWluZXIo
KS5maXJzdENoaWxkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIFRoaXMgaXMg
YSBwb3N0LW9yZGVyIHRyZWUgdHJhdmVyc2FsIGxheW91dC4KKyAgICAgICAgbGV0IGxheW91dFN0
YWNrID0gbmV3IEFycmF5KCk7CisgICAgICAgIC8vIFRoZSByb290IGNvbnRhaW5lciBsYXlvdXQg
aXMgZG9uZSBpbiB0aGUgZm9ybWF0dGluZyBjb250ZXh0IGl0IGxpdmVzIGluLCBub3QgdGhhdCBv
bmUgaXQgY3JlYXRlcywgc28gbGV0J3Mgc3RhcnQgd2l0aCB0aGUgZmlyc3QgY2hpbGQuCisgICAg
ICAgIGxheW91dFN0YWNrLnB1c2godGhpcy5yb290Q29udGFpbmVyKCkuZmlyc3RDaGlsZCgpKTsK
KyAgICAgICAgd2hpbGUgKGxheW91dFN0YWNrLmxlbmd0aCkgeworICAgICAgICAgICAgLy8gVHJh
dmVycyBkb3duIG9uIHRoZSBkZXNjZW5kYW50cyB1bnRpbCB3ZSBmaW5kIGEgbGVhZiBub2RlLgor
ICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBsZXQgYm94ID0gbGF5
b3V0U3RhY2tbbGF5b3V0U3RhY2subGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgaWYgKGJv
eC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bGF5b3V0Q29udGV4dC5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dChib3guZXN0YWJsaXNoZWRGb3Jt
YXR0aW5nQ29udGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYm94LmlzQ29udGFpbmVyKCkgfHwgIWJveC5o
YXNDaGlsZCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBs
YXlvdXRTdGFjay5wdXNoKGJveC5maXJzdENoaWxkKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgd2hpbGUgKGxheW91dFN0YWNrLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGxldCBi
b3ggPSBsYXlvdXRTdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVJbmxp
bmVCb3goYm94KTsKKyAgICAgICAgICAgICAgICBpZiAoYm94Lm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbGF5b3V0U3RhY2sucHVzaChib3gubmV4dFNpYmxpbmcoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAvLyBBbmQgZmluYWxseSBwbGFjZSB0aGUgb3V0IG9mIGZs
b3cgZGVzY2VuZGFudHMgZm9yIHRoZSByb290LgorICAgICAgICAvL3RoaXMuX3BsYWNlT3V0T2ZG
bG93RGVzY2VuZGFudHModGhpcy5yb290Q29udGFpbmVyKCkpOworICAgfQorCisgICAgX2hhbmRs
ZUlubGluZUJveChpbmxpbmVCb3gpIHsKKyAgICAgICAgaWYgKGlubGluZUJveC50ZXh0KCkpCisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlVGV4dChpbmxpbmVCb3gpOworICAgIH0KKwor
ICAgIF9oYW5kbGVUZXh0KGlubGluZUJveCkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBh
IGV4dHJlbWVseSBzaW1wbGUgbGluZSBicmVha2luZyBhbGdvcml0aG0uCisgICAgICAgIGxldCBl
bmRQb3NpdGlvbiA9IGlubGluZUJveC50ZXh0KCkubGVuZ3RoKCkgLSAxOworICAgICAgICBsZXQg
Y3VycmVudFBvc2l0aW9uID0gMDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IGVu
ZFBvc2l0aW9uKSB7CisgICAgICAgICAgICBsZXQgYnJlYWtpbmdQb3NpdGlvbiA9IFV0aWxzLm5l
eHRCcmVha2luZ09wcG9ydHVuaXR5KGlubGluZUJveC50ZXh0KCksIGN1cnJlbnRQb3NpdGlvbik7
CisgICAgICAgICAgICBpZiAoYnJlYWtpbmdQb3NpdGlvbiA9PSBjdXJyZW50UG9zaXRpb24pCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBsZXQgZnJhZ21lbnRXaWR0aCA9IFV0
aWxzLm1lYXN1cmVUZXh0KGlubGluZUJveC50ZXh0KCksIGN1cnJlbnRQb3NpdGlvbiwgYnJlYWtp
bmdQb3NpdGlvbik7CisgICAgICAgICAgICBpZiAodGhpcy5fbGluZSgpLmF2YWlsYWJsZVdpZHRo
KCkgPCBmcmFnbWVudFdpZHRoICYmICF0aGlzLl9saW5lKCkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIHRoaXMuX2NvbW1pdExpbmUoKTsKKyAgICAgICAgICAgIHRoaXMuX2xpbmUoKS5hcHBl
bmRGcmFnbWVudChjdXJyZW50UG9zaXRpb24sIGJyZWFraW5nUG9zaXRpb24sIGZyYWdtZW50V2lk
dGgpOworICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gYnJlYWtpbmdQb3NpdGlvbjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIF9jb21taXRMaW5lKCkgeworICAgICAgICB0aGlzLm1fbGlu
ZXMucHVzaCh0aGlzLl9saW5lKCkpOworICAgICAgICAvLyBUT0RPOiBGbG9hdHMgbmVlZCB0byBi
ZSB0YWtlbiBpbnRvIGFjY291bnQuCisgICAgICAgIHRoaXMubV9saW5lID0gbmV3IExpbmUodGhp
cy5yb290Q29udGFpbmVyKCkuY29udGVudEJveCgpLndpZHRoKCkpOworICAgIH0KKworICAgIF9s
aW5lKCkgeworICAgICAgICByZXR1cm4gdGhpcy5tX2xpbmU7CisgICAgfQorfQorCmRpZmYgLS1n
aXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9Gb3JtYXR0aW5nQ29udGV4dC9JbmxpbmVGb3JtYXR0
aW5nL0xpbmUuanMgYi9Ub29scy9MYXlvdXRSZWxvYWRlZC9Gb3JtYXR0aW5nQ29udGV4dC9Jbmxp
bmVGb3JtYXR0aW5nL0xpbmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTc4ZjU5ZjQ0ZTg3MDA1YTRjYjM1NjZi
NzhiMWQ3ZjgzYmQxOGNiOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0xheW91dFJlbG9hZGVk
L0Zvcm1hdHRpbmdDb250ZXh0L0lubGluZUZvcm1hdHRpbmcvTGluZS5qcwpAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworY2xhc3Mg
TGluZSB7CisgICAgY29uc3RydWN0b3IoYXZhaWxhYmxlV2lkdGgpIHsKKyAgICAgICAgdGhpcy5t
X2F2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlV2lkdGg7CisgICAgICAgIHRoaXMubV9mcmFnbWVu
dHMgPSBuZXcgQXJyYXkoKTsKKyAgICB9CisKKyAgICBpc0VtcHR5KCkgeworICAgICAgICByZXR1
cm4gIXRoaXMubV9mcmFnbWVudHMubGVuZ3RoOworICAgIH0KKworICAgIGF2YWlsYWJsZVdpZHRo
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5tX2F2YWlsYWJsZVdpZHRoOworICAgIH0KKworICAg
IGFwcGVuZEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB3aWR0aCkgeworICAg
ICAgICB0aGlzLm1fYXZhaWxhYmxlV2lkdGggLT0gd2lkdGg7CisgICAgICAgIHRoaXMubV9mcmFn
bWVudHMucHVzaCh7c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHdpZHRofSk7CisKKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9Jbml0aWFsQmxvY2tDb250YWlu
ZXIuanMgYi9Ub29scy9MYXlvdXRSZWxvYWRlZC9Jbml0aWFsQmxvY2tDb250YWluZXIuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYWI1NDhlMTdhNWU0ZWFhZjdhNTQxM2JjMjE1
OThmMWJmMzc4ZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvVG9vbHMvTGF5b3V0UmVsb2FkZWQvSW5pdGlhbEJsb2NrQ29udGFpbmVyLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLWNsYXNzIEluaXRpYWxCbG9ja0NvbnRhaW5lciBleHRlbmRzIEJsb2NrQ29u
dGFpbmVyIHsKLSAgICBjb25zdHJ1Y3Rvcihkb2N1bWVudCwgaWQsIG5hbWUpIHsKLSAgICAgICAg
c3VwZXIoZG9jdW1lbnQsIGlkKTsKLSAgICB9Ci0KLSAgICBlc3RhYmxpc2hlc0Jsb2NrRm9ybWF0
dGluZ0NvbnRleHQoKSB7Ci0gICAgICAgIC8vIElDQiBhbHdheXMgY3JlYXRlcyBhIG5ldyAoaW5p
dGFsKSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHBhZGRpbmdCb3goKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmJvcmRlckJveCgp
OwotICAgIH0KLQotICAgIGNvbnRlbnRCb3goKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmJvcmRl
ckJveCgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0xheW91dFJlbG9hZGVkL0lubGlu
ZUJveC5qcyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL0lubGluZUJveC5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNGEyZWQ1MDQzMDdjMThkZDFlOTNmODM0ZWEwNjMyOTZmN2RmZWRh
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9M
YXlvdXRSZWxvYWRlZC9JbmxpbmVCb3guanMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotY2xhc3MgSW5s
aW5lQm94IGV4dGVuZHMgQm94IHsKLSAgICBjb25zdHJ1Y3Rvcihub2RlLCBpZCkgewotICAgICAg
ICBzdXBlcihub2RlLCBpZCk7Ci0gICAgICAgIHRoaXMubV90ZXh0ID0gbnVsbDsKLSAgICB9Ci0K
LSAgICBzZXRUZXh0KHRleHQpIHsKLSAgICAgICAgdGhpcy5tX3RleHQgPSB0ZXh0OwotICAgIH0K
LQotICAgIHRleHQoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1fdGV4dDsKLSAgICB9Ci19CmRp
ZmYgLS1naXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5q
cyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmIwM2Y2NmVlZDc5YjY4ZDYyNDRjYTJkZWYyN2Qz
ZmQ0OTA0OWUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL0xheW91dFJlbG9hZGVkL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmpzCisrKyAvZGV2
L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi1jbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCBleHRlbmRzIEZvcm1hdHRp
bmdDb250ZXh0IHsKLSAgICBjb25zdHJ1Y3Rvcihyb290KSB7Ci0gICAgICAgIHN1cGVyKHJvb3Qp
OwotICAgICAgICAvLyBJZiB0aGUgYmxvY2sgY29udGFpbmVyIGJveCB0aGF0IGluaXRpYXRlcyB0
aGlzIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleCBhbHNvIGVzdGFibGlzaGVzIGEgYmxvY2sgY29u
dGV4dCwgY3JlYXRlIGEgbmV3IGZsb2F0IGZvciB1cy4KLSAgICAgICAgQVNTRVJUKHJvb3QuaXNC
bG9ja0NvbnRhaW5lckJveCgpKTsKLSAgICAgICAgaWYgKHJvb3QuZXN0YWJsaXNoZXNCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICB0aGlzLm1fZmxvYXRpbmdDb250ZXh0ID0g
bmV3IEZsb2F0aW5nQ29udGV4dCh0aGlzKTsKLSAgICB9Ci0KLSAgICBsYXlvdXQobGF5b3V0Q29u
dGV4dCkgewotICAgICAgICAvLyA5LjQuMiBJbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0cwotICAg
ICAgICAvLyBJbiBhbiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0LCBib3hlcyBhcmUgbGFpZCBv
dXQgaG9yaXpvbnRhbGx5LCBvbmUgYWZ0ZXIgdGhlIG90aGVyLCBiZWdpbm5pbmcgYXQgdGhlIHRv
cCBvZiBhIGNvbnRhaW5pbmcgYmxvY2suCi0gICAgICAgIGlmICghdGhpcy5yb290Q29udGFpbmVy
KCkuZmlyc3RDaGlsZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAvLyBUaGlzIGlz
IGEgcG9zdC1vcmRlciB0cmVlIHRyYXZlcnNhbCBsYXlvdXQuCi0gICAgICAgIGxldCBsYXlvdXRT
dGFjayA9IG5ldyBBcnJheSgpOwotICAgICAgICAvLyBUaGUgcm9vdCBjb250YWluZXIgbGF5b3V0
IGlzIGRvbmUgaW4gdGhlIGZvcm1hdHRpbmcgY29udGV4dCBpdCBsaXZlcyBpbiwgbm90IHRoYXQg
b25lIGl0IGNyZWF0ZXMsIHNvIGxldCdzIHN0YXJ0IHdpdGggdGhlIGZpcnN0IGNoaWxkLgotICAg
ICAgICBsYXlvdXRTdGFjay5wdXNoKHRoaXMucm9vdENvbnRhaW5lcigpLmZpcnN0Q2hpbGQoKSk7
Ci0gICAgICAgIHdoaWxlIChsYXlvdXRTdGFjay5sZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIFRy
YXZlcnMgZG93biBvbiB0aGUgZGVzY2VuZGFudHMgdW50aWwgd2UgZmluZCBhIGxlYWYgbm9kZS4K
LSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgbGV0IGJveCA9IGxh
eW91dFN0YWNrW2xheW91dFN0YWNrLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgICAgIGlmIChi
b3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGxheW91dENvbnRleHQubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHQoYm94LmVzdGFibGlzaGVkRm9y
bWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWJveC5pc0NvbnRhaW5lcigpIHx8ICFib3gu
aGFzQ2hpbGQoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
bGF5b3V0U3RhY2sucHVzaChib3guZmlyc3RDaGlsZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHdoaWxlIChsYXlvdXRTdGFjay5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBsZXQg
Ym94ID0gbGF5b3V0U3RhY2sucG9wKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlSW5s
aW5lQm94KGJveCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJveC5uZXh0U2libGluZygpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGxheW91dFN0YWNrLnB1c2goYm94Lm5leHRTaWJsaW5nKCkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQW5kIGZpbmFsbHkgcGxhY2UgdGhlIG91dCBvZiBm
bG93IGRlc2NlbmRhbnRzIGZvciB0aGUgcm9vdC4KLSAgICAgICAgLy90aGlzLl9wbGFjZU91dE9m
Rmxvd0Rlc2NlbmRhbnRzKHRoaXMucm9vdENvbnRhaW5lcigpKTsKLSAgIH0KLQotICAgIF9oYW5k
bGVJbmxpbmVCb3goaW5saW5lQm94KSB7Ci0gICAgICAgIGlmIChpbmxpbmVCb3gudGV4dCgpKQot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZVRleHQoaW5saW5lQm94KTsKLSAgICB9Ci0K
LSAgICBfaGFuZGxlVGV4dChpbmxpbmVCb3gpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSBleHRyZW1lbHkgc2ltcGxlIGxpbmUgYnJlYWtpbmcgYWxnb3JpdGhtLgotICAgICAgICBsZXQg
ZW5kUG9zaXRpb24gPSBpbmxpbmVCb3gudGV4dCgpLmxlbmdodCgpIC0gMTsKLSAgICAgICAgbGV0
IGN1cnJlbnRQb3NpdGlvbiA9IDA7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50UG9zaXRpb24gPCBl
bmRQb3NpdGlvbikgewotICAgICAgICAgICAgbGV0IGJyZWFraW5nUG9zaXRpb24gPSBVdGlscy5u
ZXh0QnJlYWtpbmdPcHBvcnR1bml0eShpbmxpbmVCb3gudGV4dCgpLCBjdXJyZW50UG9zaXRpb24p
OwotICAgICAgICAgICAgbGV0IGZyYWdtZW50V2lkdGggPSBVdGlscy5tZWFzdXJlVGV4dChpbmxp
bmVCb3gsIGN1cnJlbnRQb3NpdGlvbiwgYnJlYWtpbmdQb3NpdGlvbik7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5saW5lKCkuYXZhaWxhYmxlV2lkdGgoKSA+PSBmcmFnbWVudFdpZHRoIHx8IHRoaXMu
bGluZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIHRoaXMubGluZSgpLmFwcGVuZEZy
YWdtZW50KGN1cnJlbnRQb3NpdGlvbiwgYnJlYWtpbmdQb3NpdGlvbiwgZnJhZ21lbnRXaWR0aCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRoaXMubGluZSgpLmNvbW1p
dEN1cnJlbnRMaW5lKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5saW5lKCkuYXBwZW5kRnJhZ21l
bnQoY3VycmVudFBvc2l0aW9uLCBicmVha2luZ1Bvc2l0aW9uLCBmcmFnbWVudFdpZHRoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IGJyZWFraW5nUG9zaXRp
b247Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL0xheW91dFJlbG9h
ZGVkL0xheW91dFJlbG9hZGVkLnhjd29ya3NwYWNlL2NvbnRlbnRzLnhjd29ya3NwYWNlZGF0YSBi
L1Rvb2xzL0xheW91dFJlbG9hZGVkL0xheW91dFJlbG9hZGVkLnhjd29ya3NwYWNlL2NvbnRlbnRz
Lnhjd29ya3NwYWNlZGF0YQppbmRleCA3NWE1Mjg5MGM2NWUwYjYzYmQyYmVmYjY5MTcxNTY5ZDE3
OWNkMTBkLi4xNWI3NjllZWMwOTk0NDk3MGFiYjljMDc3NzA5ZWU4OWUzMTVjOWNkIDEwMDY0NAot
LS0gYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRSZWxvYWRlZC54Y3dvcmtzcGFjZS9jb250
ZW50cy54Y3dvcmtzcGFjZWRhdGEKKysrIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvTGF5b3V0UmVs
b2FkZWQueGN3b3Jrc3BhY2UvY29udGVudHMueGN3b3Jrc3BhY2VkYXRhCkBAIC0xLDk0ICsxLDI2
IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPFdvcmtzcGFjZQog
ICAgdmVyc2lvbiA9ICIxLjAiPgotICAgPEdyb3VwCi0gICAgICBsb2NhdGlvbiA9ICJjb250YWlu
ZXI6IgotICAgICAgbmFtZSA9ICJUZXN0Ij4KLSAgICAgIDxGaWxlUmVmCi0gICAgICAgICBsb2Nh
dGlvbiA9ICJncm91cDp0ZXN0L2luZGV4Lmh0bWwiPgotICAgICAgPC9GaWxlUmVmPgotICAgICAg
PEZpbGVSZWYKLSAgICAgICAgIGxvY2F0aW9uID0gImdyb3VwOnRlc3QvVGVzdEhhcm5lc3MuanMi
PgotICAgICAgPC9GaWxlUmVmPgotICAgPC9Hcm91cD4KLSAgIDxHcm91cAotICAgICAgbG9jYXRp
b24gPSAiY29udGFpbmVyOiIKLSAgICAgIG5hbWUgPSAiTWlzYyI+Ci0gICAgICA8RmlsZVJlZgot
ICAgICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6bWlzYy9oZWFkZXJzL0xheW91dENvbnRleHQuaCI+
Ci0gICAgICA8L0ZpbGVSZWY+Ci0gICAgICA8RmlsZVJlZgotICAgICAgICAgbG9jYXRpb24gPSAi
Z3JvdXA6bWlzYy9oZWFkZXJzL0Zvcm1hdHRpbmdDb250ZXh0LmgiPgotICAgICAgPC9GaWxlUmVm
PgotICAgICAgPEZpbGVSZWYKLSAgICAgICAgIGxvY2F0aW9uID0gImdyb3VwOm1pc2MvaGVhZGVy
cy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmgiPgotICAgICAgPC9GaWxlUmVmPgotICAgICAgPEZp
bGVSZWYKLSAgICAgICAgIGxvY2F0aW9uID0gImdyb3VwOm1pc2MvaGVhZGVycy9GbG9hdGluZ0Nv
bnRleHQuaCI+Ci0gICAgICA8L0ZpbGVSZWY+Ci0gICAgICA8RmlsZVJlZgotICAgICAgICAgbG9j
YXRpb24gPSAiZ3JvdXA6bWlzYy9oZWFkZXJzL0Jsb2NrTWFyZ2luQ29sbGFwc2UuaCI+Ci0gICAg
ICA8L0ZpbGVSZWY+Ci0gICAgICA8RmlsZVJlZgotICAgICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6
bWlzYy9oZWFkZXJzL0JveC5oIj4KLSAgICAgIDwvRmlsZVJlZj4KLSAgICAgIDxGaWxlUmVmCi0g
ICAgICAgICBsb2NhdGlvbiA9ICJncm91cDptaXNjL2hlYWRlcnMvQ29udGFpbmVyLmgiPgotICAg
ICAgPC9GaWxlUmVmPgotICAgICAgPEZpbGVSZWYKLSAgICAgICAgIGxvY2F0aW9uID0gImdyb3Vw
Om1pc2MvaGVhZGVycy9CbG9ja0NvbnRhaW5lci5oIj4KLSAgICAgIDwvRmlsZVJlZj4KLSAgICAg
IDxGaWxlUmVmCi0gICAgICAgICBsb2NhdGlvbiA9ICJncm91cDptaXNjL2hlYWRlcnMvSW5pdGlh
bEJsb2NrQ29udGFpbmVyLmgiPgotICAgICAgPC9GaWxlUmVmPgotICAgICAgPEZpbGVSZWYKLSAg
ICAgICAgIGxvY2F0aW9uID0gImdyb3VwOm1pc2MvaGVhZGVycy9JbmxpbmVCb3guaCI+Ci0gICAg
ICA8L0ZpbGVSZWY+Ci0gICAgICA8RmlsZVJlZgotICAgICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6
bWlzYy9oZWFkZXJzL1RleHQuaCI+Ci0gICAgICA8L0ZpbGVSZWY+Ci0gICA8L0dyb3VwPgogICAg
PEZpbGVSZWYKLSAgICAgIGxvY2F0aW9uID0gImdyb3VwOlJFQURNRS5tZCI+Ci0gICA8L0ZpbGVS
ZWY+Ci0gICA8RmlsZVJlZgotICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6TGF5b3V0LmpzIj4KLSAg
IDwvRmlsZVJlZj4KLSAgIDxGaWxlUmVmCi0gICAgICBsb2NhdGlvbiA9ICJncm91cDpMYXlvdXRD
b250ZXh0LmpzIj4KLSAgIDwvRmlsZVJlZj4KLSAgIDxGaWxlUmVmCi0gICAgICBsb2NhdGlvbiA9
ICJncm91cDpGb3JtYXR0aW5nQ29udGV4dC5qcyI+Ci0gICA8L0ZpbGVSZWY+Ci0gICA8RmlsZVJl
ZgotICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5qcyI+Ci0g
ICA8L0ZpbGVSZWY+Ci0gICA8RmlsZVJlZgotICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuanMiPgotICAgPC9GaWxlUmVmPgotICAgPEZpbGVSZWYKLSAgICAg
IGxvY2F0aW9uID0gImdyb3VwOkZsb2F0aW5nQ29udGV4dC5qcyI+CisgICAgICBsb2NhdGlvbiA9
ICJncm91cDp0ZXN0Ij4KICAgIDwvRmlsZVJlZj4KICAgIDxGaWxlUmVmCi0gICAgICBsb2NhdGlv
biA9ICJncm91cDpCbG9ja01hcmdpbkNvbGxhcHNlLmpzIj4KKyAgICAgIGxvY2F0aW9uID0gImdy
b3VwOm1pc2MiPgogICAgPC9GaWxlUmVmPgogICAgPEZpbGVSZWYKLSAgICAgIGxvY2F0aW9uID0g
Imdyb3VwOkJveC5qcyI+CisgICAgICBsb2NhdGlvbiA9ICJncm91cDpGb3JtYXR0aW5nQ29udGV4
dCI+CiAgICA8L0ZpbGVSZWY+CiAgICA8RmlsZVJlZgotICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6
Q29udGFpbmVyLmpzIj4KKyAgICAgIGxvY2F0aW9uID0gImdyb3VwOkxheW91dFRyZWUiPgogICAg
PC9GaWxlUmVmPgogICAgPEZpbGVSZWYKLSAgICAgIGxvY2F0aW9uID0gImdyb3VwOkJsb2NrQ29u
dGFpbmVyLmpzIj4KLSAgIDwvRmlsZVJlZj4KLSAgIDxGaWxlUmVmCi0gICAgICBsb2NhdGlvbiA9
ICJncm91cDpJbml0aWFsQmxvY2tDb250YWluZXIuanMiPgorICAgICAgbG9jYXRpb24gPSAiZ3Jv
dXA6UkVBRE1FLm1kIj4KICAgIDwvRmlsZVJlZj4KICAgIDxGaWxlUmVmCi0gICAgICBsb2NhdGlv
biA9ICJncm91cDpJbmxpbmVCb3guanMiPgorICAgICAgbG9jYXRpb24gPSAiZ3JvdXA6TGF5b3V0
LmpzIj4KICAgIDwvRmlsZVJlZj4KICAgIDxGaWxlUmVmCi0gICAgICBsb2NhdGlvbiA9ICJncm91
cDpUZXh0LmpzIj4KKyAgICAgIGxvY2F0aW9uID0gImdyb3VwOkxheW91dENvbnRleHQuanMiPgog
ICAgPC9GaWxlUmVmPgogICAgPEZpbGVSZWYKICAgICAgIGxvY2F0aW9uID0gImdyb3VwOlV0aWxz
LmpzIj4KZGlmZiAtLWdpdCBhL1Rvb2xzL0xheW91dFJlbG9hZGVkL0xheW91dFRyZWUvQmxvY2tD
b250YWluZXIuanMgYi9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRUcmVlL0Jsb2NrQ29udGFp
bmVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM5NDkxYzE5OTA4ODRmZDY5ZGUwZGNhNGM3OGZmNGZmNTZiN2Q5
NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRUcmVlL0Js
b2NrQ29udGFpbmVyLmpzCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCitjbGFzcyBCbG9ja0NvbnRhaW5lciBleHRlbmRzIENvbnRh
aW5lciB7CisgICAgY29uc3RydWN0b3Iobm9kZSwgaWQpIHsKKyAgICAgICAgc3VwZXIobm9kZSwg
aWQpOworICAgIH0KKworICAgIGVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSB7
CisgICAgICAgIC8vIDkuNC4yIElubGluZSBmb3JtYXR0aW5nIGNvbnRleHRzCisgICAgICAgIC8v
IEFuIGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgaXMgZXN0YWJsaXNoZWQgYnkgYSBibG9jayBj
b250YWluZXIgYm94IHRoYXQgY29udGFpbnMgbm8gYmxvY2stbGV2ZWwgYm94ZXMuCisgICAgICAg
IGZvciAobGV0IGNoaWxkID0gdGhpcy5maXJzdEluRmxvd0NoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLm5leHRJbkZsb3dTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC5pc0Js
b2NrTGV2ZWxCb3goKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRoaXMuaGFzSW5GbG93Q2hpbGQoKTsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRUcmVlL0JveC5qcyBiL1Rvb2xzL0xheW91
dFJlbG9hZGVkL0xheW91dFRyZWUvQm94LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1NmIwOGE3YjBhYzcwMTQ2
N2RmNTkxNDk1NTllMDZiZjZlMjZhOGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9MYXlvdXRS
ZWxvYWRlZC9MYXlvdXRUcmVlL0JveC5qcwpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2NsYXNzIEJveCB7CisgICAgY29uc3Ry
dWN0b3Iobm9kZSwgaWQpIHsKKyAgICAgICAgdGhpcy5tX2lkID0gaWQ7CisgICAgICAgIHRoaXMu
bV9yZW5kZXJlck5hbWUgPSBudWxsOworICAgICAgICB0aGlzLm1fbm9kZSA9IG5vZGU7CisgICAg
ICAgIHRoaXMubV9wYXJlbnQgPSBudWxsOworICAgICAgICB0aGlzLm1fbmV4dFNpYmxpbmcgPSBu
dWxsOworICAgICAgICB0aGlzLm1fcHJldmlvdXNTaWJsaW5nID0gbnVsbDsKKyAgICAgICAgdGhp
cy5tX2lzQW5vbnltb3VzID0gZmFsc2U7CisgICAgICAgIHRoaXMubV9yZWN0ID0gbmV3IExheW91
dFJlY3QobmV3IExheW91dFBvaW50KDAsIDApLCBuZXcgTGF5b3V0U2l6ZSgwLCAwKSk7CisgICAg
ICAgIHRoaXMubV9lc3RhYmxpc2hlZEZvcm1hdHRpbmdDb250ZXh0ID0gbnVsbDsKKyAgICB9CisK
KyAgICBpZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubV9pZDsKKyAgICB9CisKKyAgICBzZXRS
ZW5kZXJlck5hbWUobmFtZSkgeworICAgICAgICB0aGlzLm1fcmVuZGVyZXJOYW1lID0gbmFtZTsK
KyAgICB9CisKKyAgICBuYW1lKCkgeworICAgICAgICByZXR1cm4gdGhpcy5tX3JlbmRlcmVyTmFt
ZTsKKyAgICB9CisKKyAgICBub2RlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5tX25vZGU7Cisg
ICAgfQorCisgICAgcGFyZW50KCkgeworICAgICAgICByZXR1cm4gdGhpcy5tX3BhcmVudDsKKyAg
ICB9CisKKyAgICBuZXh0U2libGluZygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubV9uZXh0U2li
bGluZzsKKyAgICB9CisKKyAgICBuZXh0SW5GbG93U2libGluZygpIHsKKyAgICAgICAgbGV0IG5l
eHRJbkZsb3dTaWJsaW5nID0gdGhpcy5uZXh0U2libGluZygpOworICAgICAgICB3aGlsZSAobmV4
dEluRmxvd1NpYmxpbmcpIHsKKyAgICAgICAgICAgIGlmIChuZXh0SW5GbG93U2libGluZy5pc0lu
RmxvdygpKQorICAgICAgICAgICAgICAgIHJldHVybiBuZXh0SW5GbG93U2libGluZzsKKyAgICAg
ICAgICAgIG5leHRJbkZsb3dTaWJsaW5nID0gbmV4dEluRmxvd1NpYmxpbmcubmV4dFNpYmxpbmco
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwcmV2aW91
c1NpYmxpbmcoKSB7CisgICAgICAgIHJldHVybiB0aGlzLm1fcHJldmlvdXNTaWJsaW5nOworICAg
IH0KKworICAgIHByZXZpb3VzSW5GbG93U2libGluZygpIHsKKyAgICAgICAgbGV0IHByZXZpb3Vz
SW5GbG93U2libGluZyA9IHRoaXMucHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIHdoaWxlIChw
cmV2aW91c0luRmxvd1NpYmxpbmcpIHsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0luRmxvd1Np
YmxpbmcuaXNJbkZsb3coKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNJbkZsb3dT
aWJsaW5nOworICAgICAgICAgICAgcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gcHJldmlvdXNJbkZs
b3dTaWJsaW5nLnByZXZpb3VzU2libGluZygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxsOworICAgIH0KKworICAgIHNldFBhcmVudChwYXJlbnQpIHsKKyAgICAgICAgdGhpcy5tX3Bh
cmVudCA9IHBhcmVudDsKKyAgICB9CisKKyAgICBzZXROZXh0U2libGluZyhuZXh0U2libGluZykg
eworICAgICAgICB0aGlzLm1fbmV4dFNpYmxpbmcgPSBuZXh0U2libGluZzsKKyAgICB9CisgICAg
CisgICAgc2V0UHJldmlvdXNTaWJsaW5nKHByZXZpb3VzU2libGluZykgeworICAgICAgICB0aGlz
Lm1fcHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNTaWJsaW5nOworICAgIH0KKworICAgIHJlY3Qo
KSB7CisgICAgICAgIHJldHVybiB0aGlzLm1fcmVjdC5jbG9uZSgpOworICAgIH0KKworICAgIHRv
cExlZnQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlY3QoKS50b3BMZWZ0KCk7CisgICAgfQor
CisgICAgYm90dG9tUmlnaHQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlY3QoKS5ib3R0b21S
aWdodCgpOworICAgIH0KKworICAgIHNldFRvcExlZnQodG9wTGVmdCkgeworICAgICAgICB0aGlz
Lm1fcmVjdC5zZXRUb3BMZWZ0KHRvcExlZnQpOworICAgIH0KKworICAgIHNldFNpemUoc2l6ZSkg
eworICAgICAgICB0aGlzLm1fcmVjdC5zZXRTaXplKHNpemUpOworICAgIH0KKworICAgIHNldFdp
ZHRoKHdpZHRoKSB7CisgICAgICAgIHRoaXMubV9yZWN0LnNldFdpZHRoKHdpZHRoKTsKKyAgICB9
CisKKyAgICBzZXRIZWlnaHQoaGVpZ2h0KSB7CisgICAgICAgIHRoaXMubV9yZWN0LnNldEhlaWdo
dChoZWlnaHQpOworICAgIH0KKworICAgIGlzQ29udGFpbmVyKCkgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaXNCbG9ja0xldmVsQm94KCkgeworICAgICAgICByZXR1cm4g
VXRpbHMuaXNCbG9ja0xldmVsRWxlbWVudCh0aGlzLm5vZGUoKSk7CisgICAgfQorCisgICAgaXNC
bG9ja0NvbnRhaW5lckJveCgpIHsKKyAgICAgICAgcmV0dXJuIFV0aWxzLmlzQmxvY2tDb250YWlu
ZXJFbGVtZW50KHRoaXMubm9kZSgpKTsKKyAgICB9CisKKyAgICBpc0lubGluZUxldmVsQm94KCkg
eworICAgICAgICByZXR1cm4gVXRpbHMuaXNJbmxpbmVMZXZlbEVsZW1lbnQodGhpcy5ub2RlKCkp
OworICAgIH0KKworICAgIHNldElzQW5vbnltb3VzKCkgeworICAgICAgICB0aGlzLm1faXNBbm9u
eW1vdXMgPSB0cnVlOworICAgIH0KKworICAgIGlzQW5vbnltb3VzKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5tX2lzQW5vbnltb3VzOworICAgIH0KKworICAgIGVzdGFibGlzaGVzRm9ybWF0dGlu
Z0NvbnRleHQoKSB7CisgICAgICAgIGlmICh0aGlzLmlzQW5vbnltb3VzKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0aGlzLmVzdGFibGlzaGVzQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dCgpIHx8IHRoaXMuZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCgpOworICAgIH0KKworICAgIGVzdGFibGlzaGVkRm9ybWF0dGluZ0NvbnRleHQoKSB7CisgICAg
ICAgIGlmICh0aGlzLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSAmJiAhdGhpcy5tX2Vz
dGFibGlzaGVkRm9ybWF0dGluZ0NvbnRleHQpCisgICAgICAgICAgICB0aGlzLm1fZXN0YWJsaXNo
ZWRGb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMuZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0KCkgPyBuZXcgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCh0aGlzKSA6IG5ldyBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRoaXMubV9lc3RhYmxpc2hlZEZv
cm1hdHRpbmdDb250ZXh0OworICAgIH0KKworICAgIGVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5n
Q29udGV4dCgpIHsKKyAgICAgICAgLy8gOS40LjEgQmxvY2sgZm9ybWF0dGluZyBjb250ZXh0cwor
ICAgICAgICAvLyBGbG9hdHMsIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVtZW50cywgYmxvY2sg
Y29udGFpbmVycyAoc3VjaCBhcyBpbmxpbmUtYmxvY2tzLCB0YWJsZS1jZWxscywgYW5kIHRhYmxl
LWNhcHRpb25zKQorICAgICAgICAvLyB0aGF0IGFyZSBub3QgYmxvY2sgYm94ZXMsIGFuZCBibG9j
ayBib3hlcyB3aXRoICdvdmVyZmxvdycgb3RoZXIgdGhhbiAndmlzaWJsZScgKGV4Y2VwdCB3aGVu
IHRoYXQgdmFsdWUgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpCisgICAgICAg
IC8vIGVzdGFibGlzaCBuZXcgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0cyBmb3IgdGhlaXIgY29u
dGVudHMuCisgICAgICAgIHJldHVybiB0aGlzLmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgfHwgdGhp
cy5pc0Fic29sdXRlUG9zaXRpb25lZCgpIHx8ICh0aGlzLmlzQmxvY2tDb250YWluZXJCb3goKSAm
JiAhdGhpcy5pc0Jsb2NrTGV2ZWxCb3goKSkKKyAgICAgICAgICAgIHx8ICh0aGlzLmlzQmxvY2tM
ZXZlbEJveCgpICYmICFVdGlscy5pc092ZXJmbG93VmlzaWJsZSh0aGlzKSk7CisgICAgfQorCisg
ICAgZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlzUG9zaXRpb25lZCgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgdGhpcy5pc1JlbGF0aXZlUG9zaXRpb25lZCgp
OworICAgIH0KKworICAgIGlzUmVsYXRpdmVQb3NpdGlvbmVkKCkgeworICAgICAgICByZXR1cm4g
VXRpbHMuaXNSZWxhdGl2ZVBvc2l0aW9uZWQodGhpcyk7CisgICAgfQorCisgICAgaXNBYnNvbHV0
ZVBvc2l0aW9uZWQoKSB7CisgICAgICAgIHJldHVybiBVdGlscy5pc0Fic29sdXRlUG9zaXRpb25l
ZCh0aGlzKTsKKyAgICB9CisKKyAgICBpc0ZpeGVkUG9zaXRpb25lZCgpIHsKKyAgICAgICAgcmV0
dXJuIFV0aWxzLmlzRml4ZWRQb3NpdGlvbmVkKHRoaXMpOworICAgIH0KKworICAgIGlzSW5GbG93
KCkgeworICAgICAgICBpZiAodGhpcy5pc0Fub255bW91cygpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiAhdGhpcy5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlv
bmVkKCk7CisgICAgfQorCisgICAgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5pc0Fic29sdXRlUG9zaXRpb25lZCgpIHx8IHRoaXMuaXNGaXhlZFBvc2l0aW9u
ZWQoKTsKKyAgICB9CisKKyAgICBpc0luRmxvd1Bvc2l0aW9uZWQoKSB7CisgICAgICAgIHJldHVy
biB0aGlzLmlzUG9zaXRpb25lZCgpICYmICF0aGlzLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpOwor
ICAgIH0KKworICAgIGlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgeworICAgICAgICByZXR1cm4gVXRp
bHMuaXNGbG9hdGluZ1Bvc2l0aW9uZWQodGhpcyk7CisgICAgfQorCisgICAgaXNGbG9hdGluZ09y
T3V0T2ZGbG93UG9zaXRpb25lZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaXNGbG9hdGluZ1Bv
c2l0aW9uZWQoKSB8fCB0aGlzLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpOworICAgIH0KKworICAg
IGlzUm9vdEVsZW1lbnQoKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBqdXN0IGJl
IGEgc2ltcGxlIGluc3RhbmNlb2YgY2hlY2ssIGJ1dCB3ZSBhcmUgaW4gdGhlIG1haW5mcmFtZSB3
aGlsZSB0aGUgdGVzdCBkb2N1bWVudCBpcyBpbiBhbiBpZnJhbWUKKyAgICAgICAgLy8gTGV0J3Mg
anVzdCByZXR1cm4gcm9vdCBmb3IgYm90aCB0aGUgUmVuZGVyVmlldyBhbmQgdGhlIDxodG1sPiBl
bGVtZW50LgorICAgICAgICByZXR1cm4gIXRoaXMucGFyZW50KCkgfHwgIXRoaXMucGFyZW50KCku
cGFyZW50KCk7CisgICAgfQorCisgICAgY29udGFpbmluZ0Jsb2NrKCkgeworICAgICAgICBpZiAo
IXRoaXMucGFyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKCF0
aGlzLmlzUG9zaXRpb25lZCgpIHx8IHRoaXMuaXNJbkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKTsKKyAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMucGFy
ZW50KCk7CisgICAgICAgIHdoaWxlIChwYXJlbnQucGFyZW50KCkpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLmlzQWJzb2x1dGVQb3NpdGlvbmVkKCkgJiYgcGFyZW50LmlzUG9zaXRpb25lZCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7CisgICAgICAgICAgICBwYXJlbnQgPSBwYXJl
bnQucGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBhcmVudDsKKyAgICB9CisK
KyAgICBib3JkZXJCb3goKSB7CisgICAgICAgIHJldHVybiBuZXcgTGF5b3V0UmVjdChuZXcgTGF5
b3V0UG9pbnQoMCwgMCksIHRoaXMucmVjdCgpLnNpemUoKSk7CisgICAgfQorCisgICAgcGFkZGlu
Z0JveCgpIHsKKyAgICAgICAgbGV0IHBhZGRpbmdCb3ggPSB0aGlzLmJvcmRlckJveCgpOworICAg
ICAgICBsZXQgYm9yZGVyU2l6ZSA9IFV0aWxzLmNvbXB1dGVkQm9yZGVyVG9wTGVmdCh0aGlzKTsK
KyAgICAgICAgcGFkZGluZ0JveC5tb3ZlQnkoYm9yZGVyU2l6ZSk7CisgICAgICAgIHBhZGRpbmdC
b3guc2hyaW5rQnkoYm9yZGVyU2l6ZSk7CisgICAgICAgIHBhZGRpbmdCb3guc2hyaW5rQnkoVXRp
bHMuY29tcHV0ZWRCb3JkZXJCb3R0b21SaWdodCh0aGlzKSk7CisgICAgICAgIHJldHVybiBwYWRk
aW5nQm94OworICAgIH0KKworICAgIGNvbnRlbnRCb3goKSB7CisgICAgICAgIGxldCBjb250ZW50
Qm94ID0gdGhpcy5wYWRkaW5nQm94KCk7CisgICAgICAgIGxldCBwYWRkaW5nU2l6ZSA9IFV0aWxz
LmNvbXB1dGVkUGFkZGluZ1RvcExlZnQodGhpcyk7CisgICAgICAgIGNvbnRlbnRCb3gubW92ZUJ5
KHBhZGRpbmdTaXplKTsKKyAgICAgICAgY29udGVudEJveC5zaHJpbmtCeShwYWRkaW5nU2l6ZSk7
CisgICAgICAgIGNvbnRlbnRCb3guc2hyaW5rQnkoVXRpbHMuY29tcHV0ZWRQYWRkaW5nQm90dG9t
UmlnaHQodGhpcykpOworICAgICAgICByZXR1cm4gY29udGVudEJveDsKKyAgICB9Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRUcmVlL0NvbnRhaW5lci5qcyBiL1Rv
b2xzL0xheW91dFJlbG9hZGVkL0xheW91dFRyZWUvQ29udGFpbmVyLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0
ZjYzMTAyZmVhMGYwZDJhYzYwM2U1NTgwYmMzNmJiYmQxZDRiYTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRUcmVlL0NvbnRhaW5lci5qcwpAQCAtMCwwICsx
LDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworY2xh
c3MgQ29udGFpbmVyIGV4dGVuZHMgQm94IHsKKyAgICBjb25zdHJ1Y3Rvcihub2RlLCBpZCkgewor
ICAgICAgICBzdXBlcihub2RlLCBpZCk7CisgICAgICAgIHRoaXMubV9maXJzdENoaWxkID0gbnVs
bDsKKyAgICAgICAgdGhpcy5tX2xhc3RDaGlsZCA9IG51bGw7CisgICAgfQorCisgICAgaXNDb250
YWluZXIoKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHNldEZpcnN0Q2hp
bGQoZmlyc3RDaGlsZCkgeworICAgICAgICB0aGlzLm1fZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQ7
CisgICAgfQorICAgIAorICAgIHNldExhc3RDaGlsZChsYXN0Q2hpbGQpIHsKKyAgICAgICAgdGhp
cy5tX2xhc3RDaGlsZCA9IGxhc3RDaGlsZDsKKyAgICB9CisKKyAgICBmaXJzdENoaWxkKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5tX2ZpcnN0Q2hpbGQ7CisgICAgfQorCisgICAgZmlyc3RJbkZs
b3dDaGlsZCgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmhhc0NoaWxkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgbGV0IGZpcnN0Q2hpbGQgPSB0aGlzLmZpcnN0Q2hpbGQoKTsK
KyAgICAgICAgaWYgKGZpcnN0Q2hpbGQuaXNJbkZsb3coKSkKKyAgICAgICAgICAgIHJldHVybiBm
aXJzdENoaWxkOworICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC5uZXh0SW5GbG93U2libGluZygp
OworICAgIH0KKworICAgIGxhc3RDaGlsZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubV9sYXN0
Q2hpbGQ7CisgICAgfQorCisgICAgbGFzdEluRmxvd0NoaWxkKCkgeworICAgICAgICBpZiAoIXRo
aXMuaGFzQ2hpbGQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBsZXQgbGFz
dENoaWxkID0gdGhpcy5sYXN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKGxhc3RDaGlsZC5pc0luRmxv
dygpKQorICAgICAgICAgICAgcmV0dXJuIGxhc3RDaGlsZDsKKyAgICAgICAgcmV0dXJuIGxhc3RD
aGlsZC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKKyAgICB9CisKKyAgICBoYXNDaGlsZCgpIHsK
KyAgICAgICAgcmV0dXJuICEhdGhpcy5maXJzdENoaWxkKCk7CisgICAgfQorCisgICAgaGFzSW5G
bG93Q2hpbGQoKSB7CisgICAgICAgIHJldHVybiAhIXRoaXMuZmlyc3RJbkZsb3dDaGlsZCgpOwor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0xheW91dFJlbG9hZGVkL0xheW91dFRyZWUvSW5p
dGlhbEJsb2NrQ29udGFpbmVyLmpzIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvTGF5b3V0VHJlZS9J
bml0aWFsQmxvY2tDb250YWluZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRhYjU0OGUxN2E1ZTRlYWFmN2E1
NDEzYmMyMTU5OGYxYmYzNzhkYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0xheW91dFJlbG9h
ZGVkL0xheW91dFRyZWUvSW5pdGlhbEJsb2NrQ29udGFpbmVyLmpzCkBAIC0wLDAgKzEsNDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitjbGFzcyBJbml0
aWFsQmxvY2tDb250YWluZXIgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lciB7CisgICAgY29uc3RydWN0
b3IoZG9jdW1lbnQsIGlkLCBuYW1lKSB7CisgICAgICAgIHN1cGVyKGRvY3VtZW50LCBpZCk7Cisg
ICAgfQorCisgICAgZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkgeworICAgICAg
ICAvLyBJQ0IgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgKGluaXRhbCkgYmxvY2sgZm9ybWF0dGluZyBj
b250ZXh0LgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwYWRkaW5nQm94KCkg
eworICAgICAgICByZXR1cm4gdGhpcy5ib3JkZXJCb3goKTsKKyAgICB9CisKKyAgICBjb250ZW50
Qm94KCkgeworICAgICAgICByZXR1cm4gdGhpcy5ib3JkZXJCb3goKTsKKyAgICB9Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRUcmVlL0lubGluZUJveC5qcyBiL1Rv
b2xzL0xheW91dFJlbG9hZGVkL0xheW91dFRyZWUvSW5saW5lQm94LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRh
MmVkNTA0MzA3YzE4ZGQxZTkzZjgzNGVhMDYzMjk2ZjdkZmVkYWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRUcmVlL0lubGluZUJveC5qcwpAQCAtMCwwICsx
LDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworY2xh
c3MgSW5saW5lQm94IGV4dGVuZHMgQm94IHsKKyAgICBjb25zdHJ1Y3Rvcihub2RlLCBpZCkgewor
ICAgICAgICBzdXBlcihub2RlLCBpZCk7CisgICAgICAgIHRoaXMubV90ZXh0ID0gbnVsbDsKKyAg
ICB9CisKKyAgICBzZXRUZXh0KHRleHQpIHsKKyAgICAgICAgdGhpcy5tX3RleHQgPSB0ZXh0Owor
ICAgIH0KKworICAgIHRleHQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLm1fdGV4dDsKKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRUcmVlL1RleHQuanMg
Yi9Ub29scy9MYXlvdXRSZWxvYWRlZC9MYXlvdXRUcmVlL1RleHQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJk
MDRjMWMxYzYxOTJjZDVkN2RlM2U0Nzg5NzJmZTkxNDQ2MTE4NQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL0xheW91dFJlbG9hZGVkL0xheW91dFRyZWUvVGV4dC5qcwpAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworY2xhc3MgVGV4
dCB7CisgICAgY29uc3RydWN0b3Iobm9kZSwgaWQsIGlubGluZUJveCkgeworICAgICAgICB0aGlz
Lm1fbm9kZSA9IG5vZGU7CisgICAgICAgIHRoaXMubV9pZCA9IGlkOworICAgICAgICB0aGlzLm1f
aW5saW5lQm94ID0gaW5saW5lQm94OworICAgIH0KKworICAgIG5vZGUoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLm1fbm9kZTsKKyAgICB9CisKKyAgICBjb250ZW50KCkgeworICAgICAgICByZXR1
cm4gdGhpcy5tX25vZGUud2hvbGVUZXh0OworICAgIH0KKworICAgIGxlbmd0aCgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuY29udGVudCgpLmxlbmd0aDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9U
b29scy9MYXlvdXRSZWxvYWRlZC9UZXh0LmpzIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQvVGV4dC5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVmNTg4ODhlY2U3NDM5N2ZhZTQ3ZTAx
ZjkwN2Q5MTBlYjcyM2VhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9MYXlvdXRSZWxvYWRlZC9UZXh0LmpzCisrKyAvZGV2L251bGwKQEAgLTEs
MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LWNsYXNzIFRleHQgewotICAgIGNvbnN0cnVjdG9yKG5vZGUsIGlkLCBpbmxpbmVCb3gpIHsKLSAg
ICAgICAgdGhpcy5tX25vZGUgPSBub2RlOwotICAgICAgICB0aGlzLm1faWQgPSBpZDsKLSAgICAg
ICAgdGhpcy5tX2lubGluZUJveCA9IGlubGluZUJveDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9U
b29scy9MYXlvdXRSZWxvYWRlZC9VdGlscy5qcyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL1V0aWxz
LmpzCmluZGV4IDU2MjdkYTk4OWU4MDA5OTE2ZTJiMDU3ZWVmMzBmZjJlYjU2Zjk1OGUuLmJjZjMw
MDMwNDdmNTU4MzlkNDNkYTBmNTBiZTNmYjJkMTU0MTM1NmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0xh
eW91dFJlbG9hZGVkL1V0aWxzLmpzCisrKyBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL1V0aWxzLmpz
CkBAIC01MDEsMTQgKzUwMSwxNCBAQCBjbGFzcyBVdGlscyB7CiAgICAgICAgIHJldHVybiBvdXRP
ZkZsb3dCb3hlczsKICAgICB9CiAKLSAgICBzdGF0aWMgbmV4dEJyZWFraW5nT3Bwb3J0dW5pdHko
aW5saW5lQm94LCBjdXJyZW50UG9zaXRpb24pCisgICAgc3RhdGljIG5leHRCcmVha2luZ09wcG9y
dHVuaXR5KHRleHRCb3gsIGN1cnJlbnRQb3NpdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiB3
aW5kb3cubmV4dEJyZWFraW5nT3Bwb3J0dW5pdHkoaW5saW5lQm94LnRleHQoKSwgY3VycmVudFBv
c2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIHdpbmRvdy5uZXh0QnJlYWtpbmdPcHBvcnR1bml0eSh0
ZXh0Qm94LmNvbnRlbnQoKSwgY3VycmVudFBvc2l0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
bWVhc3VyZVRleHQoaW5saW5lQm94LCBzdGFydCwgZW5kKQorICAgIHN0YXRpYyBtZWFzdXJlVGV4
dCh0ZXhCb3gsIHN0YXJ0LCBlbmQpCiAgICAgewotICAgICAgICByZXR1cm4gaW5saW5lQm94Lm5v
ZGUoKS5tZWFzdXJlVGV4dChzdGFydCwgZW5kKTsKKyAgICAgICAgcmV0dXJuIHRleEJveC5ub2Rl
KCkudGV4dFdpZHRoKHN0YXJ0LCBlbmQpOwogICAgIH0KIAogICAgIC8vICJSZW5kZXJWaWV3IGF0
ICgwLDApIHNpemUgMTMxN3gzNjZcbiBIVE1MIFJlbmRlckJsb2NrIGF0ICgwLDApIHNpemUgMTMx
N3gxMTZcbiAgQk9EWSBSZW5kZXJCb2R5IGF0ICg4LDgpIHNpemUgMTMwMXgxMDBcbiAgIERJViBS
ZW5kZXJCbG9jayBhdCAoMCwwKSBzaXplIDEwMHgxMDBcbiI7CmRpZmYgLS1naXQgYS9Ub29scy9M
YXlvdXRSZWxvYWRlZC9taXNjL2hlYWRlcnMvTGluZS5oIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQv
bWlzYy9oZWFkZXJzL0xpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzVkOWYzNDVkZWY0Yjc4MTdlMTMxMmNj
Yjk4ZTViNDk4NDgxYWNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTGF5b3V0UmVsb2FkZWQv
bWlzYy9oZWFkZXJzL0xpbmUuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbmFtZXNwYWNlIExheW91dFJlbG9hZGVkIHsKKwor
Y2xhc3MgTGluZSB7CitwdWJsaWM6CisgICAgTGluZShMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRo
KTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIExheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgoKSBjb25zdDsKKworICAgIHZvaWQgYXBwZW5kRnJhZ21lbnQodW5zaWduZWQgc3RhcnRQ
b3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24sIExheW91dFVuaXQgd2lkdGgpOworCitwcml2
YXRlOgorICAgIHN0cnVjdCBGcmFnbWVudCB7CisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnQ7Cisg
ICAgICAgIHVuc2lnbmVkIG1fZW5kOworICAgICAgICBMYXlvdXRVbnRpIG1fd2lkdGg7CisgICAg
fTsKKworICAgIFZlY3RvcjxGcmFnbWVudD4gbV9mcmFnbWVudHM7CisgICAgTGF5b3V0VW5pdCBt
X2F2YWlsYWJsZVdpZHRoOworfTsKKworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTGF5b3V0UmVsb2Fk
ZWQvbWlzYy9oZWFkZXJzL1RleHQuaCBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL21pc2MvaGVhZGVy
cy9UZXh0LmgKaW5kZXggYWE5OWRlOTdhN2Q1YzNmYjEyZWM1OTk0OTQ1OWM5OWE2N2ZlM2U4My4u
OWE3ZTkyYjQzODJlZWI4OWM5NmRjNmY3ZjNiOTY0NjY2MDcxZmU5MCAxMDA2NDQKLS0tIGEvVG9v
bHMvTGF5b3V0UmVsb2FkZWQvbWlzYy9oZWFkZXJzL1RleHQuaAorKysgYi9Ub29scy9MYXlvdXRS
ZWxvYWRlZC9taXNjL2hlYWRlcnMvVGV4dC5oCkBAIC0zMiw2ICszMiw5IEBAIHB1YmxpYzoKICAg
ICBUZXh0KE5vZGUqLCB1bnNpZ25lZCBpZCwgSW5saW5lQm94JiBwYXJlbnQpOwogICAgIH5UZXh0
KCk7CiAKKyAgICBTdHJpbmcmIGNvbnRlbnQoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKTsKKwog
cHJpdmF0ZToKICAgICBJbmxpbmVCb3gmIG1fcGFyZW50OwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0xheW91dFJlbG9hZGVkL3Rlc3QvaW5kZXguaHRtbCBiL1Rvb2xzL0xheW91dFJlbG9hZGVkL3Rl
c3QvaW5kZXguaHRtbAppbmRleCAzNmNiOWI2YzAzMWNkNTg5MGY0ZWY4ODU1ODc2NzE5ODE3ODg1
MTYyLi42MjhhN2YxYTFlN2JkNWQ4ZDcwMTBlODAxMTY1Zjk5Yzk3NGRhYjM0IDEwMDY0NAotLS0g
YS9Ub29scy9MYXlvdXRSZWxvYWRlZC90ZXN0L2luZGV4Lmh0bWwKKysrIGIvVG9vbHMvTGF5b3V0
UmVsb2FkZWQvdGVzdC9pbmRleC5odG1sCkBAIC03NiwxNyArNzYsMTggQEAgYWRkSlMoIi4uL1V0
aWxzLmpzIik7CiBhZGRKUygiLi4vTGF5b3V0LmpzIik7CiBhZGRKUygiLi4vVHJlZUJ1aWxkZXIu
anMiKTsKIGFkZEpTKCIuLi9MYXlvdXRDb250ZXh0LmpzIik7Ci1hZGRKUygiLi4vQm94LmpzIik7
Ci1hZGRKUygiLi4vQ29udGFpbmVyLmpzIik7Ci1hZGRKUygiLi4vQmxvY2tDb250YWluZXIuanMi
KTsKLWFkZEpTKCIuLi9Jbml0aWFsQmxvY2tDb250YWluZXIuanMiKTsKLWFkZEpTKCIuLi9Jbmxp
bmVCb3guanMiKTsKLWFkZEpTKCIuLi9UZXh0LmpzIik7Ci1hZGRKUygiLi4vRm9ybWF0dGluZ0Nv
bnRleHQuanMiKTsKLWFkZEpTKCIuLi9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmpzIik7Ci1hZGRK
UygiLi4vSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuanMiKTsKLWFkZEpTKCIuLi9GbG9hdGluZ0Nv
bnRleHQuanMiKTsKLWFkZEpTKCIuLi9CbG9ja01hcmdpbkNvbGxhcHNlLmpzIikKK2FkZEpTKCIu
Li9MYXlvdXRUcmVlL0JveC5qcyIpOworYWRkSlMoIi4uL0xheW91dFRyZWUvQ29udGFpbmVyLmpz
Iik7CithZGRKUygiLi4vTGF5b3V0VHJlZS9CbG9ja0NvbnRhaW5lci5qcyIpOworYWRkSlMoIi4u
L0xheW91dFRyZWUvSW5pdGlhbEJsb2NrQ29udGFpbmVyLmpzIik7CithZGRKUygiLi4vTGF5b3V0
VHJlZS9JbmxpbmVCb3guanMiKTsKK2FkZEpTKCIuLi9MYXlvdXRUcmVlL1RleHQuanMiKTsKK2Fk
ZEpTKCIuLi9Gb3JtYXR0aW5nQ29udGV4dC9Gb3JtYXR0aW5nQ29udGV4dC5qcyIpOworYWRkSlMo
Ii4uL0Zvcm1hdHRpbmdDb250ZXh0L0Zsb2F0aW5nQ29udGV4dC5qcyIpOworYWRkSlMoIi4uL0Zv
cm1hdHRpbmdDb250ZXh0L0Jsb2NrRm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0Lmpz
Iik7CithZGRKUygiLi4vRm9ybWF0dGluZ0NvbnRleHQvQmxvY2tGb3JtYXR0aW5nL0Jsb2NrTWFy
Z2luQ29sbGFwc2UuanMiKTsKK2FkZEpTKCIuLi9Gb3JtYXR0aW5nQ29udGV4dC9JbmxpbmVGb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmpzIik7CithZGRKUygiLi4vRm9ybWF0dGlu
Z0NvbnRleHQvSW5saW5lRm9ybWF0dGluZy9MaW5lLmpzIik7CiAKIGxldCBmYWlsZWRUZXN0cyA9
IFtdOwogCg==
</data>
<flag name="review"
          id="354193"
          type_id="1"
          status="+"
          setter="wenson_hsieh"
    />
          </attachment>
      

    </bug>

</bugzilla>