<?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>215410</bug_id>
          
          <creation_ts>2020-08-12 05:43:53 -0700</creation_ts>
          <short_desc>[LFC][IFC] Finalize InlineBox alignment in LineBox</short_desc>
          <delta_ts>2020-09-07 11:54:29 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=216160</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>215752</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1679727</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-08-12 05:43:53 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679728</commentid>
    <comment_count>1</comment_count>
      <attachid>406455</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-12 05:45:24 -0700</bug_when>
    <thetext>Created attachment 406455
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679850</commentid>
    <comment_count>2</comment_count>
      <attachid>406481</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-12 15:13:31 -0700</bug_when>
    <thetext>Created attachment 406481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681327</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-19 05:44:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/67398052&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683976</commentid>
    <comment_count>4</comment_count>
      <attachid>407560</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-29 21:20:13 -0700</bug_when>
    <thetext>Created attachment 407560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684224</commentid>
    <comment_count>5</comment_count>
      <attachid>407618</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-31 13:01:13 -0700</bug_when>
    <thetext>Created attachment 407618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684805</commentid>
    <comment_count>6</comment_count>
      <attachid>407618</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-02 08:07:20 -0700</bug_when>
    <thetext>Comment on attachment 407618
Patch

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

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp:514
&gt; -    // Compute box final geometry.
&gt; +    // Compute final box geometry.

Solid progression.

&gt; Source/WebCore/layout/inlineformatting/InlineLineBox.cpp:191
&gt; +    auto lineIsConsideredEmpty = !lineHasImaginaryStrut || isLineVisuallyEmpty == IsLineVisuallyEmpty::Yes ? InlineBox::IsConsideredEmpty::Yes : InlineBox::IsConsideredEmpty::No;

For this sort of things bools would read better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684849</commentid>
    <comment_count>7</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-02 09:46:09 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #6)
&gt; Comment on attachment 407618 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407618&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp:514
&gt; &gt; -    // Compute box final geometry.
&gt; &gt; +    // Compute final box geometry.
&gt; 
&gt; Solid progression.
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineLineBox.cpp:191
&gt; &gt; +    auto lineIsConsideredEmpty = !lineHasImaginaryStrut || isLineVisuallyEmpty == IsLineVisuallyEmpty::Yes ? InlineBox::IsConsideredEmpty::Yes : InlineBox::IsConsideredEmpty::No;
&gt; 
&gt; For this sort of things bools would read better.
Yeah, agree. I&apos;ll look into this (in a separate patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685111</commentid>
    <comment_count>8</comment_count>
      <attachid>407850</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-02 19:00:40 -0700</bug_when>
    <thetext>Created attachment 407850
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685224</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-03 03:15:09 -0700</bug_when>
    <thetext>Committed r266509: &lt;https://trac.webkit.org/changeset/266509&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407850.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685610</commentid>
    <comment_count>10</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-09-04 05:35:20 -0700</bug_when>
    <thetext>(In reply to EWS from comment #9)
&gt; Committed r266509: &lt;https://trac.webkit.org/changeset/266509&gt;
Seems like this broke css2.1/t0905-c5525-fltwidth-00-c-g.html on ios-wk2. EWS also indicated that failure on previous version of this patch.

History: https://results.webkit.org/?suite=layout-tests&amp;test=css2.1%2Ft0905-c5525-fltwidth-00-c-g.html

e.g.: https://build.webkit.org/results/Apple%20iOS%2013%20Simulator%20Release%20WK2%20(Tests)/r266509%20(6539)/results.html

-        RenderText {#text} at (392,0) size 784x519
+        RenderText {#text} at (392,0) size 785x519

-          text run at (745,360) width 39: &quot;this is&quot;
+          text run at (745,360) width 40: &quot;this is&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685611</commentid>
    <comment_count>11</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-04 05:37:58 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #10)
&gt; (In reply to EWS from comment #9)
&gt; &gt; Committed r266509: &lt;https://trac.webkit.org/changeset/266509&gt;
&gt; Seems like this broke css2.1/t0905-c5525-fltwidth-00-c-g.html on ios-wk2.
&gt; EWS also indicated that failure on previous version of this patch.
&gt; 
&gt; History:
&gt; https://results.webkit.org/?suite=layout-tests&amp;test=css2.1%2Ft0905-c5525-
&gt; fltwidth-00-c-g.html
&gt; 
&gt; e.g.:
&gt; https://build.webkit.org/results/
&gt; Apple%20iOS%2013%20Simulator%20Release%20WK2%20(Tests)/r266509%20(6539)/
&gt; results.html
&gt; 
&gt; -        RenderText {#text} at (392,0) size 784x519
&gt; +        RenderText {#text} at (392,0) size 785x519
&gt; 
&gt; -          text run at (745,360) width 39: &quot;this is&quot;
&gt; +          text run at (745,360) width 40: &quot;this is&quot;
Thanks. looking into it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685624</commentid>
    <comment_count>12</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-09-04 07:00:56 -0700</bug_when>
    <thetext>Thanks. This is somewhat urgent as it is slowing down iOS-wk2 EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685626</commentid>
    <comment_count>13</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-09-04 07:25:37 -0700</bug_when>
    <thetext>Actually the test was already marked as failing in r266565. So, not so urgent, but would be good to fix soon anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685629</commentid>
    <comment_count>14</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-04 07:35:43 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #13)
&gt; Actually the test was already marked as failing in r266565. So, not so
&gt; urgent, but would be good to fix soon anyways.
Yeah I noticed it too. I briefly looked and it seemed like a rounding issue in the output and does not affect functionality. Will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685808</commentid>
    <comment_count>15</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-04 12:12:44 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #13)
&gt; Actually the test was already marked as failing in r266565. So, not so
&gt; urgent, but would be good to fix soon anyways.
Yeah, so as I suspected this is an float arithmetic issue:

&quot;This is a very unfortunate float arithmetic issue where the run&apos;s x position is now 0.000061px off -and the ceil() operation in &quot;dump renderer as text&quot; results in a different integral value -&gt;
rect.x(745.766968) rect.width(38.233074) ceilf 785.000000
rect.x(745.766907) rect.width(38.233074) ceilf 784.000000&quot;

will rebaseline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686400</commentid>
    <comment_count>16</comment_count>
      <attachid>408188</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-07 11:28:10 -0700</bug_when>
    <thetext>Created attachment 408188
Rebaseline patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686401</commentid>
    <comment_count>17</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-07 11:30:43 -0700</bug_when>
    <thetext>reopen for the rebaseline patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686410</commentid>
    <comment_count>18</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-07 11:54:28 -0700</bug_when>
    <thetext>Committed r266707: &lt;https://trac.webkit.org/changeset/266707&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408188.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406455</attachid>
            <date>2020-08-12 05:45:24 -0700</date>
            <delta_ts>2020-08-12 15:13:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215410-20200812054523.patch</filename>
            <type>text/plain</type>
            <size>52623</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUxNWJhNzhmMWQ0OGFk
ZDI4MTNlYzQ2YzJiMjBlMDFkYzkwOWY2ZS4uNmM0NjgxOTNjMjJjMDEwNWMyYTkyYzQwMjRiMDdm
NTI2NzQ1NmY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDIwLTA4LTEyICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBGaW5hbGl6
ZSBJbmxpbmVCb3ggYWxpZ25tZW50IGluIExpbmVCb3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdJUC4KKworICAgICAgICAqIGxheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29uc3RyYWludHNGb3JM
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjppbml0aWFsTGlu
ZUhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmNvbGxlY3RIYW5naW5nQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Omhvcml6b250YWxBbGlnbm1lbnRPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYWxmTGVhZGluZ01ldHJpY3MpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OkxpbmVCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjptX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lQm94Rm9yTGF5b3V0Qm94IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lUmVjdEZvclRleHRSdW4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpjb25zdHJ1Y3RJbmxpbmVCb3hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmFsaWduVmVydGljYWxseSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnJlY3RGb3JSdW4gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjphbGlnbkhvcml6b250
YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmFkanVz
dEJhc2VsaW5lQW5kTGluZUhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmNvbGxlY3RIYW5naW5nQ29udGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OkFzY2VudEFuZERlc2NlbnQ6Omhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUJv
eDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
OjpJbmxpbmVCb3g6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94Ojpsb2dpY2FsV2lkdGggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxIZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmJh
c2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5l
Qm94OjpkZXNjZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6
SW5saW5lQm94OjpzZXRMb2dpY2FsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJveDo6SW5saW5lQm94OjpzZXRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmlzQXRvbWljSW5saW5lTGV2ZWxCb3ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OnNldEhhc1N0cnV0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpoYXNTdHJ1
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmFsaWdubWVudEJh
c2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QXNjZW50QW5kRGVzY2Vu
dDo6aGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJveDo6YXNjZW50QW5kRGVzY2VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCb3g6OnNldFNjcm9sbGFibGVPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUJveDo6SW5saW5lQm94KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0TG9naWNhbEhlaWdo
dElmR3JlYXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6
OnNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJveDo6c2V0QXNjZW50SWZHcmVhdGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0RGVzY2VudElmR3JlYXRlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmhhbGZMZWFkaW5nTWV0cmlj
cyk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OlJ1bjo6
bG9naWNhbFJpZ2h0IGNvbnN0KToKKwogMjAyMC0wOC0wNSAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gU3RhcnQgY29uc3RydWN0aW5nIElubGlu
ZUJveGVzIGZvciBpbmxpbmUgcnVucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CmluZGV4IGY3MTZjNTEyYTg5N2Y0YmVhM2QyMDFjNTA2MGU5YmEzZjIzYzRlYjkuLjU2YmEzYzAy
MjA4M2YzMWNjYzNkNDQwZWFiYTA1NDExNDQxMzg5NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dC5jcHAKQEAgLTE2Nyw4ICsxNjcsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENv
bgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH07Ci0gICAgICAgIGF1dG8gbGluZVJlY3QgPSBEaXNwbGF5OjpJbmxp
bmVSZWN0IHsgbGluZUNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5lLmxpbmVMb2dpY2Fs
V2lkdGgoKSwgbGluZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHR9OwotICAgICAgICBhdXRvIGxpbmVC
b3ggPSBMaW5lQm94IHsgKnRoaXMsIGxpbmVSZWN0LCBsaW5lQ29udGVudC5ydW5zLCBsaW5lLmlz
VmlzdWFsbHlFbXB0eSgpID8gTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVzIDogTGlu
ZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm8sIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCgpID8gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQm94
OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vIH07CisgICAgICAgIGF1dG8gbGluZUJv
eCA9IExpbmVCb3ggeyAqdGhpcywgbGluZUNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BMZWZ0LCBsaW5l
LmxpbmVMb2dpY2FsV2lkdGgoKSwgbGluZUNvbnRlbnQucnVucywgbGluZS5pc1Zpc3VhbGx5RW1w
dHkoKSA/IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6OlllcyA6IExpbmVCb3g6OklzTGlu
ZVZpc3VhbGx5RW1wdHk6Ok5vLCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQoKSA/IExpbmVC
b3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzIDogTGluZUJveDo6SXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50OjpObyB9OwogICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5l
KGxpbmVDb250ZW50LCBsaW5lQm94LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKIAogICAgICAg
ICBpZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CkBAIC00MTUsMTQgKzQxNCwxMyBA
QCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRp
bmdDb250ZXh0Ojpjb25zdHJhaW50c0ZvcgogewogICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0g
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0OwogICAgIGF1dG8gbGluZUxvZ2ljYWxS
aWdodCA9IGxpbmVMb2dpY2FsTGVmdCArIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lk
dGg7Ci0gICAgYXV0byBpbml0aWFsTGluZUhlaWdodCA9IHF1aXJrcygpLmluaXRpYWxMaW5lSGVp
Z2h0KHJvb3QoKSk7CiAgICAgYXV0byBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgPSBmYWxzZTsK
IAogICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgcm9vdCgpLCAq
dGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdTdGF0ZSgpIH07CiAgICAgLy8gQ2hlY2sg
Zm9yIGludHJ1ZGluZyBmbG9hdHMgYW5kIGFkanVzdCBsb2dpY2FsIGxlZnQvYXZhaWxhYmxlIHdp
ZHRoIGZvciB0aGlzIGxpbmUgYWNjb3JkaW5nbHkuCiAgICAgaWYgKCFmbG9hdGluZ0NvbnRleHQu
aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgdmFyaWFibGUg
bGluZSBoZWlnaHQsIHdoZXJlIHRoZSBpbnRydXNpdmUgZmxvYXRzIHNob3VsZCBiZSBwcm9iZWQg
YXMgdGhlIGxpbmUgaGVpZ2h0IGdyb3dzLgotICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMg
PSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHModG9MYXlvdXRVbml0KGxpbmVMb2dpY2FsVG9w
KSwgdG9MYXlvdXRVbml0KGxpbmVMb2dpY2FsVG9wICsgaW5pdGlhbExpbmVIZWlnaHQpKTsKKyAg
ICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0gZmxvYXRpbmdDb250ZXh0LmNvbnN0cmFpbnRz
KHRvTGF5b3V0VW5pdChsaW5lTG9naWNhbFRvcCksIHRvTGF5b3V0VW5pdChsaW5lTG9naWNhbFRv
cCArIHF1aXJrcygpLmluaXRpYWxMaW5lSGVpZ2h0KCkpKTsKICAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlc2UgY29uc3RyYWludHMgYWN0dWFsbHkgcHV0IGxpbWl0YXRpb24gb24gdGhlIGxpbmUuCiAg
ICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0
LT54IDw9IGxpbmVMb2dpY2FsTGVmdCkKICAgICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVm
dCA9IHsgfTsKQEAgLTQ3OCw3ICs0NzYsNyBAQCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25zdHJhaW50c0ZvcgogICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkoKS5jb21wdXRlZFRleHRJbmRlbnQocm9vdCwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKS52YWx1ZU9yKElubGluZUxheW91dFVuaXQgeyB9KTsKICAgICB9OwogICAg
IGxpbmVMb2dpY2FsTGVmdCArPSBjb21wdXRlZFRleHRJbmRlbnQoKTsKLSAgICByZXR1cm4gTGlu
ZUNvbnN0cmFpbnRzIHsgeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGxpbmVM
b2dpY2FsUmlnaHQgLSBsaW5lTG9naWNhbExlZnQsIGluaXRpYWxMaW5lSGVpZ2h0LCBsaW5lSXND
b25zdHJhaW5lZEJ5RmxvYXQgfTsKKyAgICByZXR1cm4gTGluZUNvbnN0cmFpbnRzIHsgeyBsaW5l
TG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGxpbmVMb2dpY2FsUmlnaHQgLSBsaW5lTG9n
aWNhbExlZnQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB9OwogfQogCiB2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRD
b250ZXh0OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IExpbmVCb3gmIGxpbmVCb3gs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKQpAQCAt
NTEwLDE0ICs1MDgsMTEgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxh
eUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGkKICAgICBhdXRvIGxpbmVJ
bmtPdmVyZmxvdyA9IGxpbmVCb3guc2Nyb2xsYWJsZU92ZXJmbG93KCk7CiAgICAgLy8gQ29tcHV0
ZSBib3ggZmluYWwgZ2VvbWV0cnkuCiAgICAgZm9yIChhdXRvJiBsaW5lUnVuIDogbGluZUNvbnRl
bnQucnVucykgewotICAgICAgICBhdXRvJiBsb2dpY2FsUmVjdCA9IGxpbmVCb3gucmVjdEZvclJ1
bihsaW5lUnVuKTsKICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3go
KTsKLQotICAgICAgICAvLyBBZGQgZmluYWwgZGlzcGxheSBydW5zIHRvIHN0YXRlIGZpcnN0Lgog
ICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVycyAoPHNwYW4+KSBkb24ndCBnZW5lcmF0
ZSBkaXNwbGF5IHJ1bnMgYW5kIG5laXRoZXIgZG8gY29tcGxldGVseSBjb2xsYXBzZWQgcnVucy4K
LSAgICAgICAgYXV0byBpbml0aWF0ZXNJbmxpbmVSdW4gPSAhbGluZVJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgJiYgIWxpbmVSdW4uaXNDb250YWluZXJFbmQoKTsKKyAgICAgICAgYXV0byBpbml0aWF0
ZXNJbmxpbmVSdW4gPSBsaW5lUnVuLmlzVGV4dCgpIHx8IGxpbmVSdW4uaXNMaW5lQnJlYWsoKSB8
fCBsaW5lUnVuLmlzQm94KCk7CiAgICAgICAgIGlmIChpbml0aWF0ZXNJbmxpbmVSdW4pIHsKLSAg
ICAgICAgICAgIGF1dG8gY29tcHV0ZWRJbmtPdmVyZmxvdyA9IFsmXSB7CisgICAgICAgICAgICBh
dXRvIGNvbXB1dGVkSW5rT3ZlcmZsb3cgPSBbJl0gKGNvbnN0IGF1dG8mIGxvZ2ljYWxSZWN0KSB7
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24tdGV4dCBpbmsg
b3ZlcmZsb3cuCiAgICAgICAgICAgICAgICAgaWYgKCFsaW5lUnVuLmlzVGV4dCgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbG9naWNhbFJlY3Q7CkBAIC01MzMsNTMgKzUyOCwzNCBAQCB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0
IExpbmVMYXlvdXRDb250ZXh0OjpMaQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5rT3ZlcmZsb3c7CiAgICAgICAgICAgICB9OwotICAgICAgICAgICAgYXV0byBp
bmtPdmVyZmxvdyA9IGNvbXB1dGVkSW5rT3ZlcmZsb3coKTsKKyAgICAgICAgICAgIGF1dG8gbG9n
aWNhbFJlY3QgPSBsaW5lUnVuLmlzQm94KCkgPyBsaW5lQm94LmlubGluZUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpLmxvZ2ljYWxSZWN0KCkgOiBsaW5lQm94LmlubGluZVJlY3RGb3JUZXh0UnVu
KGxpbmVSdW4pOworICAgICAgICAgICAgLy8gSW5saW5lIGJveGVzIGFyZSByZWxhdGl2ZSB0byB0
aGUgbGluZSBib3ggd2hpbGUgZmluYWwgRGlzcGxheTo6UnVucyBuZWVkIHRvIGJlIHJlbGF0aXZl
IHRvIHRoZSBwYXJlbnQgRGlzcGxheTpCb3gKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGRu
J3Qgd2UganVzdCBsZWF2ZSB0aGVtIGJlIHJlbGF0aXZlIHRvIHRoZSBsaW5lIGJveD8KKyAgICAg
ICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmVIb3Jpem9udGFsbHkobGluZUJveC5sb2dpY2FsTGVmdCgp
KTsKKyAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmVWZXJ0aWNhbGx5KGxpbmVCb3gubG9naWNh
bFRvcCgpKTsKKyAgICAgICAgICAgIGF1dG8gaW5rT3ZlcmZsb3cgPSBjb21wdXRlZElua092ZXJm
bG93KGxvZ2ljYWxSZWN0KTsKICAgICAgICAgICAgIGxpbmVJbmtPdmVyZmxvdy5leHBhbmRUb0Nv
bnRhaW4oaW5rT3ZlcmZsb3cpOwotICAgICAgICAgICAgaW5saW5lQ29udGVudC5ydW5zLmFwcGVu
ZCh7IGxpbmVJbmRleCwgbGluZVJ1bi5sYXlvdXRCb3goKSwgbG9naWNhbFJlY3QsIGlua092ZXJm
bG93LCBsaW5lUnVuLmV4cGFuc2lvbigpLCBsaW5lUnVuLnRleHRDb250ZW50KCkgfSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobGluZVJ1bi5pc1RleHQoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGlmIChsaW5lUnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBTaW5jZSA8YnI+IGFuZCA8d2JyPiBydW5zIGhhdmUgYXNzb2NpYXRlZCBET00g
ZWxlbWVudHMsIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IGEgZGlzcGxheSBib3ggaGVyZS4g
Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlubGluZUNvbnRlbnQucnVucy5h
cHBlbmQoeyBsaW5lSW5kZXgsIGxheW91dEJveCwgbG9naWNhbFJlY3QsIGlua092ZXJmbG93LCBs
aW5lUnVuLmV4cGFuc2lvbigpLCBsaW5lUnVuLnRleHRDb250ZW50KCkgfSk7CiAgICAgICAgIH0K
IAotICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgYm94IChyZXBsYWNlZCBvciBpbmxpbmUtYmxvY2sp
Ci0gICAgICAgIGlmIChsaW5lUnVuLmlzQm94KCkpIHsKLSAgICAgICAgICAgIGF1dG8gdG9wTGVm
dCA9IGxvZ2ljYWxSZWN0LnRvcExlZnQoKTsKKyAgICAgICAgLy8gQ3JlYXRlIGRpc3BsYXkgYm94
ZXMuCisgICAgICAgIC8vIEZJWE1FOiBTaW5jZSA8YnI+IGFuZCA8d2JyPiBydW5zIGhhdmUgYXNz
b2NpYXRlZCBET00gZWxlbWVudHMsIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IGEgZGlzcGxh
eSBib3ggaGVyZS4gCisgICAgICAgIGF1dG8gaW5pdGlhdGVzRGlzcGxheUJveCA9IGxpbmVSdW4u
aXNCb3goKSB8fCBsaW5lUnVuLmlzQ29udGFpbmVyU3RhcnQoKTsKKyAgICAgICAgaWYgKGluaXRp
YXRlc0Rpc3BsYXlCb3gpIHsKKyAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0
aW5nU3RhdGUuZGlzcGxheUJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgYXV0byYgaW5saW5l
Qm94ID0gbGluZUJveC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAg
ICAgIGF1dG8gdG9wTGVmdCA9IGlubGluZUJveC5sb2dpY2FsUmVjdCgpLnRvcExlZnQoKTsKICAg
ICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAg
ICAgICAgdG9wTGVmdCArPSBnZW9tZXRyeSgpLmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNl
dChsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKICAgICAg
ICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh0b0xheW91dFBvaW50KHRvcExlZnQpKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5saW5lIGxldmVs
IGNvbnRhaW5lciBzdGFydCAoPHNwYW4+KQotICAgICAgICBpZiAobGluZVJ1bi5pc0NvbnRhaW5l
clN0YXJ0KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3Rh
dGUuZGlzcGxheUJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BM
ZWZ0KHRvTGF5b3V0UG9pbnQobG9naWNhbFJlY3QudG9wTGVmdCgpKSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElubGluZSBsZXZlbCBjb250YWluZXIg
ZW5kICg8L3NwYW4+KQotICAgICAgICBpZiAobGluZVJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7Ci0g
ICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3go
bGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVk
KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZmxvd09mZnNldCA9IGdlb21ldHJ5KCkuaW5G
bG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzKTsKLSAgICAgICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVIb3Jpem9udGFsbHkoaW5mbG93
T2Zmc2V0LndpZHRoKCkpOwotICAgICAgICAgICAgICAgIGRpc3BsYXlCb3gubW92ZVZlcnRpY2Fs
bHkoaW5mbG93T2Zmc2V0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzQ29u
dGFpbmVyU3RhcnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94V2lkdGggPSBp
bmxpbmVCb3gubG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICAgICAgYXV0byBjb250ZW50Qm94
V2lkdGggPSBtYXJnaW5Cb3hXaWR0aCAtIChkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBkaXNw
bGF5Qm94LmJvcmRlckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDAp
KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRSBmaXggaXQgZm9yIG11bHRpbGluZS4KKyAgICAg
ICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aCh0b0xheW91dFVuaXQoY29u
dGVudEJveFdpZHRoKSk7CisgICAgICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94
SGVpZ2h0KHRvTGF5b3V0VW5pdChpbmxpbmVCb3gubG9naWNhbEhlaWdodCgpKSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBhdXRvIG1hcmdpbkJveFdpZHRoID0gbG9naWNhbFJlY3QubGVm
dCgpIC0gZGlzcGxheUJveC5sZWZ0KCk7Ci0gICAgICAgICAgICBhdXRvIGNvbnRlbnRCb3hXaWR0
aCA9IG1hcmdpbkJveFdpZHRoIC0gKGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlC
b3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCkpOwot
ICAgICAgICAgICAgLy8gRklYTUUgZml4IGl0IGZvciBtdWx0aWxpbmUuCi0gICAgICAgICAgICBk
aXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aCh0b0xheW91dFVuaXQoY29udGVudEJveFdpZHRo
KSk7Ci0gICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQodG9MYXlvdXRV
bml0KGxvZ2ljYWxSZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAvLyBGSVhN
RTogVGhpcyBpcyB3aGVyZSB0aGUgbG9naWNhbCB0byBwaHlzaWNhbCB0cmFuc2xhdGUgc2hvdWxk
IGhhcHBlbi4KICAgICBpbmxpbmVDb250ZW50LmxpbmVCb3hlcy5hcHBlbmQoeyBsaW5lQm94Lmxv
Z2ljYWxSZWN0KCksIGxpbmVCb3guc2Nyb2xsYWJsZU92ZXJmbG93KCksIGxpbmVJbmtPdmVyZmxv
dywgbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0LmgKaW5kZXggMzNlYzg4ZjY2Yjg4MTBlMDExMjUwOGM5MTAxMWY3MTUzMzhiNTBlYy4u
ZmIwNDBlNjhjODE2OGI4YWI5YWY1M2MxY2QwYjYyNTI4NmMzMWM3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5oCkBAIC00NiwxMiArNDYsOSBAQCBwdWJsaWM6CiAgICAgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29udGV4dFJv
b3QsIElubGluZUZvcm1hdHRpbmdTdGF0ZSYpOwogICAgIHZvaWQgbGF5b3V0SW5GbG93Q29udGVu
dChJbnZhbGlkYXRpb25TdGF0ZSYsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYp
IG92ZXJyaWRlOwogCi1wcml2YXRlOgotICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7Ci0KICAgICBjbGFzcyBR
dWlya3MgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyB7CiAgICAgcHVibGljOgot
ICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGluaXRpYWxMaW5lSGVpZ2h0KGNvbnN0IENvbnRhaW5l
ckJveCYgZm9ybWF0dGluZ1Jvb3QpIGNvbnN0OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGlu
aXRpYWxMaW5lSGVpZ2h0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQg
Y2xhc3MgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CkBAIC02Miw2ICs1OSw5IEBAIHByaXZhdGU6
CiAgICAgfTsKICAgICBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzIHF1aXJrcygpIGNv
bnN0IHsgcmV0dXJuIFF1aXJrcygqdGhpcyk7IH0KIAorcHJpdmF0ZToKKyAgICBJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJy
aWRlOworCiAgICAgY2xhc3MgR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5IHsKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5s
aW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGVWZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwpAQCAtOTAsNyAr
OTAsNiBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBMaW5lQ29uc3RyYWludHMgewogICAgICAgICBJ
bmxpbmVMYXlvdXRQb2ludCBsb2dpY2FsVG9wTGVmdDsKICAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBhdmFpbGFibGVMb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQg
bGluZUhlaWdodCB7IDAgfTsKICAgICAgICAgYm9vbCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQg
eyBmYWxzZSB9OwogICAgIH07CiAgICAgTGluZUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzRm9yTGlu
ZShjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dp
Y2FsVG9wKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApp
bmRleCBkODRhOGJlZDhjYmRiMjJmYjdiZWNkZTA4YjI3MWE4MGQ0NTZlNDg5Li4wNjMxMTdjYTdl
M2VhM2YzYTdiOTQ1Y2FkZWNlZDU3ZDI1NDIzYmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCkBAIC0zMSwxNCArMzEsMTMgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCi1JbmxpbmVMYXlvdXRVbml0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmluaXRpYWxMaW5lSGVpZ2h0KGNvbnN0IENvbnRhaW5l
ckJveCYgZm9ybWF0dGluZ1Jvb3QpIGNvbnN0CitJbmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpRdWlya3M6OmluaXRpYWxMaW5lSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBJ
bmxpbmVMYXlvdXRVbml0IGNvbXB1dGVkTGluZUhlaWdodCA9IGZvcm1hdHRpbmdSb290LnN0eWxl
KCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CiAgICAgLy8gTmVnYXRpdmUgbGluZUhlaWdodCB2YWx1
ZSBtZWFucyB0aGUgbGluZS1oZWlnaHQgaXMgbm90IHNldAotICAgIGlmIChsYXlvdXRTdGF0ZSgp
LmluTm9RdWlya3NNb2RlKCkgfHwgIWZvcm1hdHRpbmdSb290LnN0eWxlKCkubGluZUhlaWdodCgp
LmlzTmVnYXRpdmUoKSkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkTGluZUhlaWdodDsKLQotICAg
IHJldHVybiBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3MoZm9ybWF0dGluZ1Jvb3Quc3R5bGUo
KS5mb250TWV0cmljcygpLCAwX2x1KS5oZWlnaHQoKTsKKyAgICBhdXRvJiByb290ID0gZm9ybWF0
dGluZ0NvbnRleHQoKS5yb290KCk7CisgICAgaWYgKGxheW91dFN0YXRlKCkuaW5Ob1F1aXJrc01v
ZGUoKSB8fCAhcm9vdC5zdHlsZSgpLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkpCisgICAgICAg
IHJldHVybiByb290LnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisgICAgcmV0dXJuIHJv
b3Quc3R5bGUoKS5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJv
eC5jcHAKaW5kZXggNmFlYWZlM2EzNDlkNzE5NzViMWYyNzI1NjE5MzEwNzI5ZDYxZjk5ZS4uNWQ5
ZDA0NGRjZmI3ODI2MzUyOWNkNjRlOWNjYTI0NzlmYWU5Yzc1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAK
QEAgLTUyLDEzNyArNTIsMTU2IEBAIHZvaWQgSGFuZ2luZ0NvbnRlbnQ6OnJlc2V0KCkKICAgICBt
X3dpZHRoID0gIDA7CiB9CiAKLUxpbmVCb3g6OkxpbmVCb3goY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBEaXNwbGF5OjpJbmxpbmVS
ZWN0JiBsaW5lUmVjdCwgY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZp
c3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkKLSAgICA6IG1faW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgLCBtX3J1bnMocnVucykKLSAg
ICAsIG1fcmVjdChsaW5lUmVjdCkKLSAgICAsIG1fcm9vdElubGluZUJveChJbmxpbmVCb3ggeyBs
aW5lUmVjdCwgeyB9LCBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5yb290KCkgfSkKK3N0YXRpYyBI
YW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIHJ1bnMsIExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpCiB7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1Zh
bGlkQWxpZ25tZW50QmFzZWxpbmUgPSB0cnVlOwotI2VuZGlmCi0gICAgYXV0byYgcm9vdFN0eWxl
ID0gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQucm9vdCgpLnN0eWxlKCk7Ci0gICAgYXV0byBoYWxm
TGVhZGluZ01ldHJpY3MgPSB0aGlzLT5oYWxmTGVhZGluZ01ldHJpY3Mocm9vdFN0eWxlLmZvbnRN
ZXRyaWNzKCksIGxpbmVSZWN0LmhlaWdodCgpKTsKLQotICAgIG1fcm9vdElubGluZUJveC5hc2Nl
bnRBbmREZXNjZW50ID0gaGFsZkxlYWRpbmdNZXRyaWNzOwotICAgIG1fYWxpZ25tZW50QmFzZWxp
bmUgPSBoYWxmTGVhZGluZ01ldHJpY3MuYXNjZW50OwotCi0gICAgYXV0byBjb250ZW50TG9naWNh
bFdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1
bnMpIHsKLSAgICAgICAgYXV0byBydW5IZWlnaHQgPSBbJl0oKSAtPiBJbmxpbmVMYXlvdXRVbml0
IHsKLSAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVuLnN0eWxlKCkuZm9udE1ldHJp
Y3MoKTsKLSAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgICAg
ICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICAgICAg
ICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICAgICAgICAgIGF1dG8m
IGJveEdlb21ldHJ5ID0gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5
b3V0Qm94KTsKLSAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpIHx8IGxh
eW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBi
b3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIC8vIE5vbi1yZXBs
YWNlZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xl
YWRpbmcgYnV0IHRoZWlyIG1hcmdpbiBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVudCBoZWln
aHQgaGVyZS4KLSAgICAgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQo
KTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5LiBEbyBu
b3QgbWFrZSBhbiBpbmxpbmUgYm94IGZvciBlYWNoIHJ1bi4KLSAgICAgICAgbV9pbmxpbmVCb3hM
aXN0LmFwcGVuZChJbmxpbmVCb3ggeyB7IDAsIHJ1bi5sb2dpY2FsTGVmdCgpLCBydW4ubG9naWNh
bFdpZHRoKCksIHJ1bkhlaWdodCgpIH0sIGhhbGZMZWFkaW5nTWV0cmljcywgcnVuLmxheW91dEJv
eCgpIH0pOwotICAgICAgICBjb250ZW50TG9naWNhbFdpZHRoICs9IHJ1bi5sb2dpY2FsV2lkdGgo
KTsKLSAgICB9Ci0gICAgYWxpZ25WZXJ0aWNhbGx5KCk7Ci0gICAgYWxpZ25Ib3Jpem9udGFsbHko
bGluZVJlY3Qud2lkdGgoKSAtIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGlzTGFzdExpbmVXaXRoSW5s
aW5lQ29udGVudCk7Ci0KLSAgICBpZiAoaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1
YWxseUVtcHR5OjpZZXMpIHsKLSAgICAgICAgbV9yZWN0LnNldEhlaWdodCh7IH0pOwotICAgICAg
ICBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2VudCA9IHsgfTsKKyAgICBhdXRvIGhhbmdp
bmdDb250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OworICAgIGlmIChpc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQgPT0gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMp
CisgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKKyAgICBmb3IgKGF1
dG8mIHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UocnVucykpIHsKKyAgICAgICAgaWYgKHJ1
bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7CisgICAgICAgICAg
ICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2Vy
dmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3Bh
Y2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFp
bGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWls
aW5nV2hpdGVzcGFjZVdpZHRoKCkpOwogICAgIH0KKyAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7
CiB9CiAKLWNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIExpbmVCb3g6OnJlY3RGb3JSdW4oY29u
c3QgTGluZUJ1aWxkZXI6OlJ1biYgcnVuKSBjb25zdAorc3RhdGljIE9wdGlvbmFsPElubGluZUxh
eW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1
bkxpc3QmIHJ1bnMsIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBJbmxpbmVMYXlvdXRVbml0IGxp
bmVMb2dpY2FsV2lkdGgsIExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lKQogewotICAgIHJldHVybiBtX2lubGluZUJveExpc3RbbV9ydW5Ub0lubGluZUJveE1h
cC5nZXQoJnJ1bildLnJlY3Q7Ci19CisgICAgaWYgKHJ1bnMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4geyB9OworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBsaW5lTG9naWNhbFdpZHRoOwor
ICAgIGZvciAoYXV0byYgcnVuIDogcnVucykKKyAgICAgICAgYXZhaWxhYmxlV2lkdGggLT0gcnVu
LmxvZ2ljYWxXaWR0aCgpOwogCi12b2lkIExpbmVCb3g6OmFsaWduSG9yaXpvbnRhbGx5KElubGlu
ZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBp
c0xhc3RMaW5lKQotewotICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0Nv
bnRlbnQoaXNMYXN0TGluZSk7CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IGNvbGxlY3RIYW5n
aW5nQ29udGVudChydW5zLCBpc0xhc3RMaW5lKTsKICAgICBhdmFpbGFibGVXaWR0aCArPSBoYW5n
aW5nQ29udGVudC53aWR0aCgpOwotICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8IGF2YWlsYWJs
ZVdpZHRoIDw9IDApCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXZhaWxhYmxlV2lkdGggPD0g
MCkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxp
Z25tZW50ID0gWyZdIHsKLSAgICAgICAgYXV0byYgcm9vdFN0eWxlID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5yb290KCkuc3R5bGUoKTsKLSAgICAgICAgaWYgKHJvb3RTdHlsZS50ZXh0QWxpZ24oKSAh
PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICAgICAgcmV0dXJuIHJvb3RTdHlsZS50
ZXh0QWxpZ24oKTsKKyAgICAgICAgaWYgKHRleHRBbGlnbiAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5KQorICAgICAgICAgICAgcmV0dXJuIHRleHRBbGlnbjsKICAgICAgICAgLy8gVGV4dCBpcyBq
dXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0LWp1
c3RpZnkgcHJvcGVydHksCiAgICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0aGUg
bGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFzdCwK
ICAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVu
ZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KLSAgICAgICAgaWYgKG1fcnVucy5sYXN0
KCkuaXNMaW5lQnJlYWsoKSB8fCBpc0xhc3RMaW5lID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudDo6WWVzKQorICAgICAgICBpZiAocnVucy5sYXN0KCkuaXNMaW5lQnJlYWsoKSB8fCBpc0xh
c3RMaW5lID09IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQogICAg
ICAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6OlN0YXJ0OwogICAgICAgICByZXR1cm4gVGV4
dEFsaWduTW9kZTo6SnVzdGlmeTsKICAgICB9KCk7CiAKLSAgICBpZiAoY29tcHV0ZWRIb3Jpem9u
dGFsQWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAgYXV0byBh
Y2N1bXVsYXRlZEV4cGFuc2lvbiA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgewotICAg
ICAgICAgICAgbV9pbmxpbmVCb3hMaXN0W2luZGV4XS5yZWN0Lm1vdmVIb3Jpem9udGFsbHkoYWNj
dW11bGF0ZWRFeHBhbnNpb24pOwotICAgICAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0g
bV9ydW5zW2luZGV4XS5leHBhbnNpb24oKS5ob3Jpem9udGFsRXhwYW5zaW9uOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGxpbmVBbGlnbm1lbnRPZmZzZXQgPSBPcHRpb25h
bDxJbmxpbmVMYXlvdXRVbml0PiB7IH07CisKKyAgICBzd2l0Y2ggKGNvbXB1dGVkSG9yaXpvbnRh
bEFsaWdubWVudCkgeworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OldlYktpdExlZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5k
OgorICAgICAgICBsaW5lQWxpZ25tZW50T2Zmc2V0ID0gYXZhaWxhYmxlV2lkdGg7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICBsaW5lQWxpZ25tZW50T2Zmc2V0ID0gYXZh
aWxhYmxlV2lkdGggLyAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6
Okp1c3RpZnk6CisgICAgICAgIC8vIFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgaXMgYSBydW4gYWxp
Z25tZW50IChhbmQgd2Ugb25seSBkbyBpbmxpbmUgYm94IGFsaWdubWVudCBoZXJlKQorICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lF
VCgpOworICAgICAgICBicmVhazsKICAgICB9CisgICAgcmV0dXJuIGxpbmVBbGlnbm1lbnRPZmZz
ZXQ7Cit9CiAKLSAgICBhdXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQgPSBbJl0gKGF1dG8gYXZh
aWxhYmxlV2lkdGgpIC0+IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKLSAgICAgICAgc3dp
dGNoIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQpIHsKLSAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0g
ICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgICAgICByZXR1cm4geyB9
OwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVX
aWR0aCwgMCk7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgICAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCAvIDIsIDApOwotICAgICAgICBj
YXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH07CitpbmxpbmUgc3RhdGljIExp
bmVCb3g6OklubGluZUJveDo6QXNjZW50QW5kRGVzY2VudCBoYWxmTGVhZGluZ01ldHJpY3MoY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2Fs
SGVpZ2h0KQoreworICAgIGF1dG8gYXNjZW50ID0gZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKTsK
KyAgICBhdXRvIGRlc2NlbnQgPSBmb250TWV0cmljcy5mbG9hdERlc2NlbnQoKTsKKyAgICAvLyAx
MC44LjEgTGVhZGluZyBhbmQgaGFsZi1sZWFkaW5nCisgICAgYXV0byBoYWxmTGVhZGluZyA9IChs
aW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KSkgLyAyOworICAgIC8vIElubGlu
ZSB0cmVlIGhlaWdodCBpcyBhbGwgaW50ZWdlciBiYXNlZC4KKyAgICByZXR1cm4geyBmbG9vcmYo
YXNjZW50ICsgaGFsZkxlYWRpbmcpLCBjZWlsZihkZXNjZW50ICsgaGFsZkxlYWRpbmcpIH07Cit9
CiAKLSAgICBpZiAoYXV0byBhZGp1c3RtZW50ID0gYWRqdXN0bWVudEZvckFsaWdubWVudChhdmFp
bGFibGVXaWR0aCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVCb3ggOiBtX2lubGluZUJv
eExpc3QpCi0gICAgICAgICAgICBpbmxpbmVCb3gucmVjdC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1
c3RtZW50KTsKLSAgICB9CitMaW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveChjb25zdCBEaXNw
bGF5OjpJbmxpbmVSZWN0JiByZWN0LCBJbmxpbmVMYXlvdXRVbml0IHN5bnRoZXRpY0Jhc2VsaW5l
KQorICAgIDogbV9sb2dpY2FsUmVjdChyZWN0KQorICAgICwgbV9iYXNlbGluZShzeW50aGV0aWNC
YXNlbGluZSkKKyAgICAsIG1faXNBdG9taWNJbmxpbmVMZXZlbEJveCh0cnVlKQorICAgICwgbV9o
YXNTdHJ1dCh0cnVlKQorewogfQogCi12b2lkIExpbmVCb3g6OmFsaWduVmVydGljYWxseSgpCitM
aW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveChjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBy
ZWN0LCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lLCBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQs
IGJvb2wgaGFzU3RydXQpCisgICAgOiBtX2xvZ2ljYWxSZWN0KHJlY3QpCisgICAgLCBtX2Jhc2Vs
aW5lKGJhc2VsaW5lKQorICAgICwgbV9kZXNjZW50KGRlc2NlbnQpCisgICAgLCBtX2hhc1N0cnV0
KGhhc1N0cnV0KQoreworfQorCitMaW5lQm94OjpMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSW5saW5lTGF5b3V0UG9p
bnQmIHRvcExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCAgY29uc3QgTGluZUJ1
aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlF
bXB0eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCkKKyAgICA6IG1fcmVjdCh0b3BMZWZ0LCBsb2dpY2FsV2lkdGgsIHsgfSkKKyAgICAsIG1f
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCiB7Ci0gICAg
YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0gICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZs
b3dSZWN0ID0gbG9naWNhbFJlY3QoKTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgbV9pbmxpbmVCb3hMaXN0LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBpbmxp
bmVCb3ggPSBtX2lubGluZUJveExpc3RbaW5kZXhdOwotICAgICAgICBhdXRvJiBydW4gPSBtX3J1
bnNbaW5kZXhdOwotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVCb3gubGF5b3V0Qm94
OwotICAgICAgICBhdXRvIGlubGluZUJveEhlaWdodCA9IGlubGluZUJveC5yZWN0LmhlaWdodCgp
OworICAgIGNvbnN0cnVjdElubGluZUJveGVzKHJ1bnMsIGlzTGluZVZpc3VhbGx5RW1wdHkpOwor
ICAgIGFsaWduVmVydGljYWxseSgpOworICAgIC8vIENvbXB1dGUgc2Nyb2xsYWJsZSBvdmVyZmxv
dy4KKyAgICBtX3Njcm9sbGFibGVPdmVyZmxvdyA9IG1fcmVjdDsKKyAgICBtX3Njcm9sbGFibGVP
dmVyZmxvdy5leHBhbmRUb0NvbnRhaW4obV9yb290SW5saW5lQm94LmxvZ2ljYWxSZWN0KCkpOwor
ICAgIGZvciAoYXV0byYgaW5saW5lQm94RW50cnkgOiBtX2lubGluZUJveFJlY3RNYXApCisgICAg
ICAgIG1fc2Nyb2xsYWJsZU92ZXJmbG93LmV4cGFuZFRvQ29udGFpbihpbmxpbmVCb3hFbnRyeS52
YWx1ZS0+bG9naWNhbFJlY3QoKSk7CisgICAgbV9saW5lQWxpZ25tZW50T2Zmc2V0ID0gaG9yaXpv
bnRhbEFsaWdubWVudE9mZnNldChydW5zLCBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5yb290KCku
c3R5bGUoKS50ZXh0QWxpZ24oKSwgbG9naWNhbFdpZHRoLCBpc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQpOworfQogCi0gICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQg
eyB9OwotICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0
aWNhbEFsaWduKCk7Ci0gICAgICAgIGF1dG8gYXNjZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKTsKK2NvbnN0IExpbmVCb3g6OklubGluZUJveCYgTGluZUJveDo6
aW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAoreworICAg
IEFTU0VSVCgmbGF5b3V0Qm94ICE9ICZmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKSk7CisgICAg
cmV0dXJuICptX2lubGluZUJveFJlY3RNYXAuZ2V0KCZsYXlvdXRCb3gpOworfQogCi0gICAgICAg
IHN3aXRjaCAodmVydGljYWxBbGlnbikgewotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJh
c2VsaW5lOgotICAgICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpIHx8IHJ1bi5pc1RleHQo
KSkKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUoKSAtIGFz
Y2VudDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYWxp
Z25tZW50QmFzZWxpbmUoKSAtIGFzY2VudCAtIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpIC0gYm94
R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgeworRGlzcGxheTo6SW5saW5lUmVjdCBMaW5lQm94Ojpp
bmxpbmVSZWN0Rm9yVGV4dFJ1bihjb25zdCBMaW5lQnVpbGRlcjo6UnVuJiBydW4pIGNvbnN0Cit7
CisgICAgQVNTRVJUKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSk7CisgICAgYXV0
byBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0ID0gbV9saW5lQWxpZ25tZW50T2Zmc2V0LnZhbHVl
T3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pOworICAgIGF1dG8gaW5saW5lQm94UmVjdCA9IG1fcm9v
dElubGluZUJveC5sb2dpY2FsUmVjdCgpOworICAgIGlmICgmcnVuLmxheW91dEJveCgpLnBhcmVu
dCgpICE9ICZmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKSkKKyAgICAgICAgaW5saW5lQm94UmVj
dCA9IG1faW5saW5lQm94UmVjdE1hcC5nZXQoJnJ1bi5sYXlvdXRCb3goKS5wYXJlbnQoKSktPmxv
Z2ljYWxSZWN0KCk7CisgICAgcmV0dXJuIHsgaW5saW5lQm94UmVjdC50b3AoKSwgaG9yaXpvbnRh
bEFsaWdubWVudE9mZnNldCArIHJ1bi5sb2dpY2FsTGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCks
IGlubGluZUJveFJlY3QuaGVpZ2h0KCkgfTsKK30KKwordm9pZCBMaW5lQm94Ojpjb25zdHJ1Y3RJ
bmxpbmVCb3hlcyhjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVucywgSXNMaW5lVmlzdWFs
bHlFbXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5KQoreworICAgIC8vIEZJWE1FOiBDYW4ndCB1c2Ug
ZmxvYXQgZm9udCBtZXRyaWMgdmFsdWVzIGJlY2F1c2Ugb2YgLT4gZmxvYXQgbGluZVNwYWNpbmcg
PSBscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKSBp
biBGb250Q29jb2EubW0KKyAgICBhdXRvIGluUXVpcmtzTW9kZSA9IGxheW91dFN0YXRlKCkuaW5R
dWlya3NNb2RlKCk7CisgICAgYXV0byYgZm9udE1ldHJpY3MgPSBmb3JtYXR0aW5nQ29udGV4dCgp
LnJvb3QoKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgYXV0byByb290SW5saW5lUmVjdCA9
IERpc3BsYXk6OklubGluZVJlY3QgeyB7IH0sIHsgfSwgbG9naWNhbFdpZHRoKCksIGZvbnRNZXRy
aWNzLmZsb2F0TGluZVNwYWNpbmcoKSB9OworICAgIGF1dG8gcm9vdElubGluZUJhc2VsaW5lID0g
cm91bmRmKGZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworICAgIGF1dG8gcm9vdElubGluZURl
c2NlbnQgPSByb3VuZGYoZm9udE1ldHJpY3MuZmxvYXREZXNjZW50KCkpOworICAgIG1fcm9vdElu
bGluZUJveCA9IElubGluZUJveCB7IHJvb3RJbmxpbmVSZWN0LCByb290SW5saW5lQmFzZWxpbmUs
IHJvb3RJbmxpbmVEZXNjZW50LCAhaW5RdWlya3NNb2RlICYmIGlzTGluZVZpc3VhbGx5RW1wdHkg
PT0gSXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm8gfTsKKworICAgIGF1dG8gaG9yaXpvbnRhbEFsaWdu
bWVudE9mZnNldCA9IG1fbGluZUFsaWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVu
aXQgeyB9KTsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5
b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBhdXRvIHJ1bkxvZ2ljYWxMZWZ0ID0g
aG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCArIHJ1bi5sb2dpY2FsTGVmdCgpOworICAgICAgICBp
ZiAocnVuLmlzQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0
dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgaWYg
KGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRp
bmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUo
ZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKICAgICAgICAgICAgICAgICAvLyBT
cGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVt
cHR5LgotICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGZvcm1hdHRp
bmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpLmJhc2VsaW5l
KCk7CisgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUu
ZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZUJveC50b3AoKSArIGxhc3RMaW5l
Qm94LmJhc2VsaW5lKCk7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGlubGluZS1ibG9jaydzIGJh
c2VsaW5lIG9mZnNldCBpcyByZWxhdGl2ZSB0byBpdHMgY29udGVudCBib3guIExldCdzIGNvbnZl
cnQgaXQgcmVsYXRpdmUgdG8gdGhlIG1hcmdpbiBib3guCiAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgIF9fX19fX19fX19fX19fXyA8LSBtYXJnaW4gYm94CiAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgfApAQCAtMTk1LDE1NSArMjE0LDEzNiBAQCB2b2lkIExpbmVCb3g6OmFsaWduVmVy
dGljYWxseSgpCiAgICAgICAgICAgICAgICAgLy8gICAgIHRleHQgfCB8IHwgICB2IHRleHQKICAg
ICAgICAgICAgICAgICAvLyAgICAgLS0tLS18LXwtfC0tLS0tLS0tLS0gPC0gYmFzZWxpbmUKICAg
ICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAg
ICAgIGF1dG8gYmFzZWxpbmVGcm9tTWFyZ2luQm94ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3Jl
KCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52
YWx1ZU9yKDApICsgaW5saW5lQmxvY2tCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBsb2dpY2Fs
VG9wID0gYWxpZ25tZW50QmFzZWxpbmUoKSAtIGJhc2VsaW5lRnJvbU1hcmdpbkJveDsKKyAgICAg
ICAgICAgICAgICBhdXRvIGFkanVzdGVkQmFzZWxpbmUgPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZv
cmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgp
LnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOworICAgICAgICAgICAgICAgIGF1dG8g
aW5saW5lQm94UmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyB7IH0sIHJ1bkxvZ2ljYWxMZWZ0
LCBydW4ubG9naWNhbFdpZHRoKCksIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpIH07Cisg
ICAgICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmbGF5b3V0Qm94LCBtYWtlVW5p
cXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgYWRqdXN0ZWRCYXNlbGluZSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAg
ICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNh
bEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSAr
IGlubGluZUJveEhlaWdodCArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOworICAgICAgICAg
ICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7
IHsgfSwgcnVuTG9naWNhbExlZnQsIHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0IH07Cisg
ICAgICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmbGF5b3V0Qm94LCBtYWtlVW5p
cXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgcnVuSGVpZ2h0KSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0g
ICAgICAgICAgICBsb2dpY2FsVG9wID0gMF9sdTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBs
b2dpY2FsQm90dG9tKCkgLSBpbmxpbmVCb3hIZWlnaHQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChydW4uaXNDb250YWluZXJT
dGFydCgpKSB7CisgICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IGxheW91dEJveC5zdHls
ZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgICAgICAgICBhdXRvIGluaXRpYWxXaWR0aCA9IGxvZ2lj
YWxXaWR0aCgpIC0gcnVuTG9naWNhbExlZnQ7CisgICAgICAgICAgICBBU1NFUlQoaW5pdGlhbFdp
ZHRoID49IDApOworICAgICAgICAgICAgYXV0byBsb2dpY2FsSGVpZ2h0ID0gZm9udE1ldHJpY3Mu
ZmxvYXRMaW5lU3BhY2luZygpOworICAgICAgICAgICAgYXV0byBiYXNlbGluZSA9IHJvdW5kZiho
YWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIGxvZ2ljYWxIZWlnaHQpLmFzY2VudCk7Cisg
ICAgICAgICAgICBhdXRvIGRlc2NlbnQgPSByb3VuZGYoZm9udE1ldHJpY3MuZmxvYXREZXNjZW50
KCkpOworICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVj
dCB7IHsgfSwgcnVuTG9naWNhbExlZnQsIGluaXRpYWxXaWR0aCwgbG9naWNhbEhlaWdodCB9Owor
ICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmbGF5b3V0Qm94LCBtYWtlVW5pcXVl
PElubGluZUJveD4oaW5saW5lQm94UmVjdCwgYmFzZWxpbmUsIGRlc2NlbnQsICFpblF1aXJrc01v
ZGUgJiYgaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVtcHR5OjpObykpOwor
ICAgICAgICB9IGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAv
LyBBZGp1c3QgdGhlIGxvZ2ljYWwgd2lkdGggd2hlbiB0aGUgaW5saW5lIGxldmVsIGNvbnRhaW5l
ciBjbG9zZXMgb24gdGhpcyBsaW5lLgorICAgICAgICAgICAgYXV0byYgaW5saW5lQm94ID0gKm1f
aW5saW5lQm94UmVjdE1hcC5nZXQoJmxheW91dEJveCk7CisgICAgICAgICAgICBpbmxpbmVCb3gu
c2V0TG9naWNhbFdpZHRoKHJ1bi5sb2dpY2FsUmlnaHQoKSAtIGlubGluZUJveC5sb2dpY2FsTGVm
dCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICgocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVh
aygpKSAmJiBpblF1aXJrc01vZGUpIHsKKyAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5lckJveCA9
IHJ1bi5sYXlvdXRCb3goKS5wYXJlbnQoKTsKKyAgICAgICAgICAgICZjb250YWluZXJCb3ggPT0g
JmZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpID8gbV9yb290SW5saW5lQm94LnNldEhhc1N0cnV0
KCkgOiBtX2lubGluZUJveFJlY3RNYXAuZ2V0KCZjb250YWluZXJCb3gpLT5zZXRIYXNTdHJ1dCgp
OwogICAgICAgICB9Ci0gICAgICAgIGF1dG8mIGlubGluZUJveFJlY3QgPSBpbmxpbmVCb3gucmVj
dDsKLSAgICAgICAgaW5saW5lQm94UmVjdC5zZXRUb3AobG9naWNhbFRvcCk7Ci0gICAgICAgIC8v
IEFkanVzdCBzY3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBydW4gb3ZlcmZsb3dzIHRoZSBsaW5l
LgotICAgICAgICBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRh
aW4oaW5saW5lQm94UmVjdCk7Ci0gICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9tIHJlbGF0aXZl
IHRvIHRoZSBsaW5lIHRvcC9sZWZ0IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBib3JkZXIgYm94
IHRvcC9sZWZ0LgotICAgICAgICBpbmxpbmVCb3hSZWN0Lm1vdmVWZXJ0aWNhbGx5KHRoaXMtPmxv
Z2ljYWxUb3AoKSk7Ci0gICAgICAgIGlubGluZUJveFJlY3QubW92ZUhvcml6b250YWxseShsb2dp
Y2FsTGVmdCgpKTsKICAgICB9Ci0gICAgc2V0U2Nyb2xsYWJsZU92ZXJmbG93KHNjcm9sbGFibGVP
dmVyZmxvd1JlY3QpOwogfQogCi12b2lkIExpbmVCb3g6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhl
aWdodCgpCit2b2lkIExpbmVCb3g6OmFsaWduVmVydGljYWxseSgpCiB7Ci0gICAgdW5zaWduZWQg
aW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKLSAgICBhdXRvIGhhc1NlZW5EaXJlY3RU
ZXh0T3JMaW5lQnJlYWsgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgbV9pbmxpbmVCb3hMaXN0LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBpbmxp
bmVCb3ggPSBtX2lubGluZUJveExpc3RbaW5kZXhdOwotICAgICAgICBhdXRvJiBsYXlvdXRCb3gg
PSBpbmxpbmVCb3gubGF5b3V0Qm94OwotICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5z
dHlsZSgpOwotICAgICAgICBhdXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOwotICAgICAgICBpZiAo
cnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICAvLyBGb3Ig
dGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUgZWl0aGVyIHRocm91Z2ggdGhlIGluaXRp
YWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBjb250ZXh0IHJvb3QpIG9yCi0gICAgICAg
ICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFpbmVyIChzdGFydCkuIE5vcm1hbGx5IHRo
ZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0cmV0Y2ggdGhlIGxpbmUuCi0gICAgICAg
ICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3Vn
aCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgIC8vIDEuIENvbXB1dGUgbGluZSBib3ggaGVpZ2h0L2FsaWdubWVudCBiYXNlbGluZSBi
eSBwbGFjaW5nIHRoZSBpbmxpbmUgYm94ZXMgdmVydGljYWxseS4KKyAgICAvLyAyLiBBZGp1c3Qg
dGhlIGlubGluZSBib3ggdmVydGljYWwgcG9zaXRpb24uCisgICAgYXV0byYgcm9vdFN0eWxlID0g
Zm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCkuc3R5bGUoKTsKKyAgICBhdXRvIHJlY29tbWVuZGVk
TGluZUJveEhlaWdodCA9IFdURjo6T3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4geyB9OworICAg
IGlmICghcm9vdFN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkpIAorICAgICAgICByZWNv
bW1lbmRlZExpbmVCb3hIZWlnaHQgPSByb290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisK
KyAgICBhdXRvIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Cisg
ICAgYXV0byBhbGlnbm1lbnRCYXNlbGluZSA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgIGF1
dG8gY29tcHV0ZUxpbmVCb3hIZWlnaHQgPSBbJl0oYXV0byYgaW5saW5lQm94LCBhdXRvIHRleHRB
bGlnbk1vZGUpIHsKKyAgICAgICAgc3dpdGNoICh0ZXh0QWxpZ25Nb2RlKSB7CisgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6IHsKKyAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVP
dmVyZmxvdyA9IGlubGluZUJveC5iYXNlbGluZSgpIC0gYWxpZ25tZW50QmFzZWxpbmU7CisgICAg
ICAgICAgICBpZiAoYmFzZWxpbmVPdmVyZmxvdyA+IDApIHsKKyAgICAgICAgICAgICAgICBjb250
ZW50TG9naWNhbEhlaWdodCArPSBiYXNlbGluZU92ZXJmbG93OyAvLyArIHN0ZDo6bWF4KDAuMGYs
IGFsaWdubWVudEJhc2VsaW5lIC0gY29udGVudExvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAg
ICAgIGFsaWdubWVudEJhc2VsaW5lICs9IGJhc2VsaW5lT3ZlcmZsb3c7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhaykgewotICAgICAg
ICAgICAgICAgIC8vIGUuZyBkaXY+Zmlyc3QgdGV4dDwvZGl2PiBvciA8ZGl2PjxzcGFuPm5lc3Rl
ZDxzcGFuPmZpcnN0IGRpcmVjdCB0ZXh0PC9kaXY+LgotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgLy8gVGFibGUgY2VsbHMsIGlubGluZS1ibG9jayBib3hlcyBtYXkgc3Ry
ZXRjaCB0aGUgbGluZSBiZXlvbmQgdGhlaXIgYmFzZWxpbmUuCisgICAgICAgICAgICBhdXRvIGJl
bG93QmFzZWxpbmUgPSBpbmxpbmVCb3guZGVzY2VudCgpLnZhbHVlT3IoaW5saW5lQm94LmxvZ2lj
YWxIZWlnaHQoKSAtIGlubGluZUJveC5iYXNlbGluZSgpKTsKKyAgICAgICAgICAgIGF1dG8gYmVs
b3dCYXNlbGluZU92ZXJmbG93ID0gYmVsb3dCYXNlbGluZSAtIChjb250ZW50TG9naWNhbEhlaWdo
dCAtIGFsaWdubWVudEJhc2VsaW5lKTsKKyAgICAgICAgICAgIGlmIChiZWxvd0Jhc2VsaW5lT3Zl
cmZsb3cgPiAwKQorICAgICAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ICs9IGJlbG93
QmFzZWxpbmVPdmVyZmxvdzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOiB7CisgICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0g
aW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIGNvbnRlbnRMb2dpY2FsSGVpZ2h0OworICAgICAg
ICAgICAgaWYgKG92ZXJmbG93ID4gMCkKKyAgICAgICAgICAgICAgICBjb250ZW50TG9naWNhbEhl
aWdodCArPSBvdmVyZmxvdzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7CisgICAgICAgICAgICBhdXRvIG92ZXJmbG93
ID0gaW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIGNvbnRlbnRMb2dpY2FsSGVpZ2h0OworICAg
ICAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgeworICAgICAgICAgICAgICAgIGNvbnRlbnRMb2dp
Y2FsSGVpZ2h0ICs9IG92ZXJmbG93OworICAgICAgICAgICAgICAgIGFsaWdubWVudEJhc2VsaW5l
ICs9IG92ZXJmbG93OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaGFzU2VlbkRpcmVjdFRl
eHRPckxpbmVCcmVhayA9IHRydWU7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgaW4gcXVpcmtzIG1v
ZGUgd2hlcmUgdGhlIGZvbnQtbWV0cmljcyBtaWdodCBjaGFuZ2UgdGhlIGxpbmUgbGluZSBoZWln
aHQvYmFzZWxpbmUgYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRleHQgY29udGVudCBvbiB0aGUgbGlu
ZQotICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiBhbiBpbmxpbmUgY29udGFpbmVyLgotICAgICAg
ICAgICAgYXV0byBoYWxmTGVhZGluZyA9IExpbmVCb3g6OmhhbGZMZWFkaW5nTWV0cmljcyhzdHls
ZS5mb250TWV0cmljcygpLCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAg
ICBzZXRBc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuYXNjZW50KTsKLSAgICAgICAgICAgIHNl
dERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuZGVzY2VudCk7Ci0gICAgICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmhlaWdodCgpKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAo
cnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJO
ZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRo
ZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdp
bnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVp
Z2h0LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygp
OwotICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWdu
OjpCYXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQm94
OjpoYWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdo
dCgpKTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVz
Y2VudCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2
YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCi0gICAg
ICAgICAgICAgICAgICAgIHNldERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuZGVzY2VudCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmFzY2VudCA+IDApCi0gICAgICAgICAg
ICAgICAgICAgIHNldEFzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5hc2NlbnQpOwotICAgICAg
ICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoYXNjZW50QW5kRGVzY2VudCgpLmhl
aWdodCgpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNldExvZ2ljYWxI
ZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOiB7CisgICAgICAgICAgICAv
LyBGSVhNRToKKyAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSBpbmxpbmVCb3gubG9naWNhbEhl
aWdodCgpIC0gY29udGVudExvZ2ljYWxIZWlnaHQ7CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cg
PiAwKSB7CisgICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxIZWlnaHQgKz0gb3ZlcmZsb3c7
CisgICAgICAgICAgICAgICAgYWxpZ25tZW50QmFzZWxpbmUgKz0gb3ZlcmZsb3c7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfTsKIAotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyRW5k
KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZl
IGFscmVhZHkgYmVlbiBhZGp1c3RlZCBhdCBDb250YWluZXJTdGFydC4KLSAgICAgICAgICAgIEFT
U0VSVChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpOwotICAgICAgICAgICAgLS1pbmxpbmVD
b250YWluZXJOZXN0aW5nTGV2ZWw7CisgICAgaWYgKCFyZWNvbW1lbmRlZExpbmVCb3hIZWlnaHQg
JiYgbV9yb290SW5saW5lQm94Lmhhc1N0cnV0KCkpCisgICAgICAgIGNvbXB1dGVMaW5lQm94SGVp
Z2h0KG1fcm9vdElubGluZUJveCwgVmVydGljYWxBbGlnbjo6QmFzZWxpbmUpOworICAgIGZvciAo
YXV0byYgaW5saW5lQm94RW50cnkgOiBtX2lubGluZUJveFJlY3RNYXApIHsKKyAgICAgICAgYXV0
byYgaW5saW5lQm94ID0gKmlubGluZUJveEVudHJ5LnZhbHVlOworICAgICAgICBpZiAoIWlubGlu
ZUJveC5oYXNTdHJ1dCgpKSB7CisgICAgICAgICAgICAvLyBJbmxpbmUgYm94IHdpdGggbm8gc3Ry
dXQgZG9lcyBub3QgY29udHJpYnV0ZSB0byB0aGUgaGVpZ2h0IG9mIHRoZSBsaW5lIGJveC4KKyAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCBpbiBzdHJpY3QgbW9kZSBldmVyeSBpbmxpbmUgYm94IGhh
cyB0aGUgaW5pdGlhbCBzdHJ1dC4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAg
ICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0
KCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUudmVydGljYWxBbGlnbigpKSB7Ci0gICAg
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAgICAgICAgICAg
aWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVz
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJbmxp
bmUtYmxvY2tzIHdpdGggaW5saW5lIGNvbnRlbnQgYWx3YXlzIGhhdmUgYmFzZWxpbmVzLgotICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVz
dGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5
b3V0Qm94KSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFz
dCBvbmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgYXV0
byYgbGFzdExpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+
bGluZUJveGVzLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQg
PSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsg
Ym94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgICAg
IHNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKGJlZm9yZUhlaWdodCArIGxhc3RMaW5lQm94
LmJhc2VsaW5lKCkpOwotICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVh
dGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gTm9uIGlubGluZS1ibG9jayBib3hlcyBzaXQgb24gdGhlIGJhc2VsaW5l
IChpbmNsdWRpbmcgdGhlaXIgYm90dG9tIG1hcmdpbikuCi0gICAgICAgICAgICAgICAgICAgIHNl
dEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAv
LyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50IGlzIGEgdGhp
bmcpLgotICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdp
bkJveEhlaWdodCArIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KDAsIGFzY2VudEFuZERlc2Nl
bnQoKS5kZXNjZW50KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0g
ICAgICAgICAgICAgICAgLy8gVG9wIGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFz
ZWxpbmUsIGl0IG9ubHkgcHVzaGVzIHRoZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBkb3du
LgotICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVp
Z2h0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxB
bGlnbjo6Qm90dG9tOiB7Ci0gICAgICAgICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwg
Y29udGVudCBwdXNoZXMgdGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRv
cC4KLSAgICAgICAgICAgICAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdo
dCgpOwotICAgICAgICAgICAgICAgIGlmIChtYXJnaW5Cb3hIZWlnaHQgPiBsaW5lTG9naWNhbEhl
aWdodCkgewotICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1h
cmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIHNldEFsaWdubWVudEJhc2VsaW5l
SWZHcmVhdGVyKGFsaWdubWVudEJhc2VsaW5lKCkgKyAobWFyZ2luQm94SGVpZ2h0IC0gbGluZUxv
Z2ljYWxIZWlnaHQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9CisgICAgICAgIGlmIChyZWNvbW1lbmRlZExpbmVCb3hIZWlnaHQgJiYgIWlubGlu
ZUJveC5pc0F0b21pY0lubGluZUxldmVsQm94KCkpIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CisgICAgICAgIGF1dG8mIGxheW91dEJveCA9ICppbmxpbmVCb3hFbnRyeS5rZXk7
CisgICAgICAgIGNvbXB1dGVMaW5lQm94SGVpZ2h0KGlubGluZUJveCwgbGF5b3V0Qm94LnN0eWxl
KCkudmVydGljYWxBbGlnbigpKTsKICAgICB9Ci19CiAKLUhhbmdpbmdDb250ZW50IExpbmVCb3g6
OmNvbGxlY3RIYW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdAotewotICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQg
PSBIYW5naW5nQ29udGVudCB7IH07Ci0gICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCA9PSBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcykKLSAgICAgICAgaGFuZ2luZ0Nv
bnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOwotICAgIGZvciAoYXV0byYgcnVuIDogV1RGOjptYWtl
UmV2ZXJzZWRSYW5nZShtX3J1bnMpKSB7Ci0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJTdGFy
dCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgaGFuZ2luZ0NvbnRlbnQu
c2V0SXNDb25kaXRpb25hbCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCFydW4uaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCisgICAgYXV0byBsaW5lQm94
TG9naWNhbEhlaWdodCA9IHN0ZDo6bWF4KHJlY29tbWVuZGVkTGluZUJveEhlaWdodC52YWx1ZU9y
KElubGluZUxheW91dFVuaXQgeyB9KSwgY29udGVudExvZ2ljYWxIZWlnaHQpOworICAgIG1fcmVj
dC5zZXRIZWlnaHQobGluZUJveExvZ2ljYWxIZWlnaHQpOworCisgICAgYXV0byBhZGp1c3RJbmxp
bmVCb3hUb3AgPSBbJl0oYXV0byYgaW5saW5lQm94LCBhdXRvIHRleHRBbGlnbk1vZGUpIHsKKyAg
ICAgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Cisg
ICAgICAgIHN3aXRjaCAodGV4dEFsaWduTW9kZSkgeworICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OkJhc2VsaW5lOgorICAgICAgICAgICAgaW5saW5lQm94TG9naWNhbFRvcCA9IGFsaWdubWVu
dEJhc2VsaW5lIC0gaW5saW5lQm94LmJhc2VsaW5lKCk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHByZXNlcnZlZCBvciBodW5nIHdoaXRlc3BhY2Uu
Ci0gICAgICAgIGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJl
V3JhcCkKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CisgICAgICAgICAgICBpbmxp
bmVCb3hMb2dpY2FsVG9wID0geyB9OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIFRo
aXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3
aGl0ZXNwYWNlLgotICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hp
dGVzcGFjZVdpZHRoKCkpOworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKKyAg
ICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBsb2dpY2FsQm90dG9tKCkgLSBpbmxpbmVC
b3gubG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6TWlkZGxlOgorICAgICAgICAgICAgaW5saW5lQm94TG9naWNhbFRvcCA9IGxv
Z2ljYWxCb3R0b20oKSAtIGlubGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5U
RURfWUVUKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpbmxpbmVC
b3guc2V0TG9naWNhbFRvcChpbmxpbmVCb3hMb2dpY2FsVG9wKTsKKyAgICB9OworCisgICAgYWRq
dXN0SW5saW5lQm94VG9wKG1fcm9vdElubGluZUJveCwgVmVydGljYWxBbGlnbjo6QmFzZWxpbmUp
OworICAgIGZvciAoYXV0byYgaW5saW5lQm94RW50cnkgOiBtX2lubGluZUJveFJlY3RNYXApIHsK
KyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gKmlubGluZUJveEVudHJ5LmtleTsKKyAgICAgICAg
YXV0byYgaW5saW5lQm94ID0gKmlubGluZUJveEVudHJ5LnZhbHVlOworICAgICAgICBhZGp1c3RJ
bmxpbmVCb3hUb3AoaW5saW5lQm94LCBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkp
OwogICAgIH0KLSAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaApp
bmRleCBhYjk0NWQ0NjIyZTRiZGFiMTUwMzRjYTllOTE1ZTBlZjFhMDY4MzJlLi4wYzkzOTU0ZmEw
OTEyNTJhNzUwNjk4NzdkOTNiM2RmMmYzMDZjY2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCkBAIC0zMCwzNCAr
MzAsNTggQEAKICNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCiAjaW5jbHVkZSAiRGlzcGxheUlubGlu
ZVJlY3QuaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lQnVpbGRlci5oIgorI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlv
dXQgewogCiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLXN0cnVjdCBIYW5naW5nQ29u
dGVudDsKLQotc3RydWN0IEFzY2VudEFuZERlc2NlbnQgewotICAgIElubGluZUxheW91dFVuaXQg
aGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYXNjZW50ICsgZGVzY2VudDsgfQotCi0gICAgSW5saW5l
TGF5b3V0VW5pdCBhc2NlbnQgeyAwIH07Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50IHsg
MCB9OwotfTsKIAogY2xhc3MgTGluZUJveCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgc3RydWN0IElubGluZUJveCB7Ci0gICAgICAgIElubGluZUJveChjb25z
dCBEaXNwbGF5OjpJbmxpbmVSZWN0JiwgY29uc3QgQXNjZW50QW5kRGVzY2VudCYsIGNvbnN0IEJv
eCYpOwotCi0gICAgICAgIERpc3BsYXk6OklubGluZVJlY3QgcmVjdDsKLSAgICAgICAgQXNjZW50
QW5kRGVzY2VudCBhc2NlbnRBbmREZXNjZW50OwotICAgICAgICBjb25zdCBCb3gmIGxheW91dEJv
eDsKKyAgICAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTkxJTkUoSW5saW5lQm94KTsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0cnVjdCBBc2NlbnRBbmREZXNjZW50IHsKKyAgICAgICAgICAg
IElubGluZUxheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYXNjZW50ICsgZGVzY2Vu
dDsgfQorCisgICAgICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGFzY2VudCB7IDAgfTsKKyAgICAg
ICAgICAgIElubGluZUxheW91dFVuaXQgZGVzY2VudCB7IDAgfTsKKyAgICAgICAgfTsKKyAgICAg
ICAgSW5saW5lQm94KGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmLCBJbmxpbmVMYXlvdXRVbml0
IHN5bnRoZXRpY0Jhc2VsaW5lKTsKKyAgICAgICAgSW5saW5lQm94KGNvbnN0IERpc3BsYXk6Oklu
bGluZVJlY3QmLCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lLCBJbmxpbmVMYXlvdXRVbml0IGRl
c2NlbnQsIGJvb2wgaGFzU3RydXQpOworICAgICAgICBJbmxpbmVCb3goKSA9IGRlZmF1bHQ7CisK
KyAgICAgICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbG9naWNhbFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX2xvZ2ljYWxSZWN0OyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNh
bFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9wKCk7IH0KKyAgICAgICAgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Qu
bGVmdCgpOyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9CisgICAgICAgIElubGluZUxheW91dFVu
aXQgbG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCk7
IH0KKworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4g
bV9iYXNlbGluZTsgfQorICAgICAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBkZXNjZW50
KCkgY29uc3QgeyByZXR1cm4gbV9kZXNjZW50OyB9CisKKyAgICAgICAgdm9pZCBzZXRMb2dpY2Fs
VG9wKElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCkgeyBtX2xvZ2ljYWxSZWN0LnNldFRvcChs
b2dpY2FsVG9wKTsgfQorICAgICAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxXaWR0aCkgeyBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7
IH0KKworICAgICAgICBib29sIGlzQXRvbWljSW5saW5lTGV2ZWxCb3goKSBjb25zdCB7IHJldHVy
biBtX2lzQXRvbWljSW5saW5lTGV2ZWxCb3g7IH0KKworICAgICAgICAvLyAhISEgQ2hhbmdlIGl0
IHRvIHNvbWV0aGluZyBsaWtlIGhhcyBjb250ZW50LgorICAgICAgICB2b2lkIHNldEhhc1N0cnV0
KCkgeyBtX2hhc1N0cnV0ID0gdHJ1ZTsgfQorICAgICAgICBib29sIGhhc1N0cnV0KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNTdHJ1dDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgRGlzcGxheTo6
SW5saW5lUmVjdCBtX2xvZ2ljYWxSZWN0OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fYmFz
ZWxpbmU7CisgICAgICAgIE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IG1fZGVzY2VudDsKKyAg
ICAgICAgYm9vbCBtX2lzQXRvbWljSW5saW5lTGV2ZWxCb3ggeyBmYWxzZSB9OworICAgICAgICBi
b29sIG1faGFzU3RydXQgeyBmYWxzZSB9OwogICAgIH07CiAKICAgICBlbnVtIGNsYXNzIElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCB7IE5vLCBZZXMgfTsKICAgICBlbnVtIGNsYXNzIElzTGlu
ZVZpc3VhbGx5RW1wdHkgeyBObywgWWVzIH07Ci0gICAgTGluZUJveChjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYsIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmLCBjb25zdCBMaW5lQnVp
bGRlcjo6UnVuTGlzdCYsIElzTGluZVZpc3VhbGx5RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudCk7CisgICAgTGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNv
bnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCwgY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5LCBJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwogCiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5sZWZ0KCk7IH0KICAgICBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9CkBA
IC02OSwxMTQgKzkzLDQzIEBAIHB1YmxpYzoKICAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0
JiBsb2dpY2FsUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IERpc3Bs
YXk6OklubGluZVJlY3QmIHNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsYWJsZU92ZXJmbG93OyB9CiAKLSAgICBzdGF0aWMgQXNjZW50QW5kRGVzY2VudCBoYWxmTGVh
ZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dp
Y2FsSGVpZ2h0KTsKLQotICAgIC8vIEFsaWdtZW50IGJhc2VsaW5lIGZyb20gbGluZSBsb2dpY2Fs
IHRvcC4KLSAgICAvLwotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgbGluZSBsb2dpY2Fs
IHRvcCAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLSAodG9wIGFsaWduKQotICAgIC8vICAgICAgICAg
ICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgotICAg
IC8vICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAg
ICAgICAgfAotICAgIC8vICAgXiAgICAgICAgIHwgYWxpZ25tZW50IGJhc2VsaW5lICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgfCBhbGlnbm1lbnQgYmFzZWxpbmUKLSAgICAvLyAgIHwgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKLSAgICAv
LyAgIHwgYXNjZW50ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXNjZW50
ICAgIHwKLSAgICAvLyAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHYgICAgICAgICAgIHYKLSAgICAvLyAgIHYgICAgICAgICB2ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0gYmFzZWxpbmUKLSAgICAvLyAgIC0tLS0t
LS0tLS0tLS0tLS0tIGJhc2VsaW5lICAgICAgICAgICAgICAgICAgIF4KLSAgICAvLyAgIF4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGVzY2VudAotICAgIC8v
ICAgfCBkZXNjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgIGNv
bnN0IElubGluZUJveCYgaW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYpIGNvbnN0Owor
ICAgIERpc3BsYXk6OklubGluZVJlY3QgaW5saW5lUmVjdEZvclRleHRSdW4oY29uc3QgTGluZUJ1
aWxkZXI6OlJ1biYpIGNvbnN0OworCisgICAgLy8gX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18gbGluZSBib3ggbG9naWNhbCB0b3AKKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICBeCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgfAorICAg
IC8vICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIHJvb3QgaW5saW5lIGJv
eAorICAgIC8vICAgXiAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgIHwgICAgICAgICAgICAg
ICAgICB8CisgICAgLy8gICB8IHJvb3QgbGluZSBhc2NlbnQgfAorICAgIC8vICAgfCAgICAgICAg
ICAgICAgICAgIHwKKyAgICAvLyAgIHYgICAgICAgICAgICAgICAgICB2CisgICAgLy8gICBfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gYWxpZ25tZW50
IGJhc2VsaW5lCisgICAgLy8gICBeCisgICAgLy8gICB8IHJvb3QgbGluZSBkZXNjZW50CiAgICAg
Ly8gICB2Ci0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSAgICBsaW5lIGxvZ2ljYWwgYm90dG9t
ICAtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgSW5saW5lTGF5b3V0VW5pdCBhbGlnbm1lbnRCYXNl
bGluZSgpIGNvbnN0OwotCi0gICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgcmVjdEZvclJ1
bihjb25zdCBMaW5lQnVpbGRlcjo6UnVuJikgY29uc3Q7CisgICAgLy8gICBfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXworICAgIC8vIF9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fIGxpbmUgYm94IGxvZ2ljYWwgYm90dG9tCisgICAg
SW5saW5lTGF5b3V0VW5pdCBhbGlnbm1lbnRCYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBtX3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsgfQog
CiBwcml2YXRlOgotICAgIGNvbnN0IEFzY2VudEFuZERlc2NlbnQmIGFzY2VudEFuZERlc2NlbnQo
KSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2VudDsgfQotCi0g
ICAgdm9pZCBzZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsK
LSAgICB2b2lkIHNldEFzY2VudElmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsKLSAgICB2b2lk
IHNldERlc2NlbnRJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRMb2dp
Y2FsSGVpZ2h0SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwotCi0gICAgdm9pZCBzZXRTY3Jv
bGxhYmxlT3ZlcmZsb3coY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgcmVjdCkgeyBtX3Njcm9s
bGFibGVPdmVyZmxvdyA9IHJlY3Q7IH0KLQotICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoSW5s
aW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
KTsKKyAgICB2b2lkIGNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmVCdWlsZGVyOjpSdW5M
aXN0JiwgSXNMaW5lVmlzdWFsbHlFbXB0eSk7CiAgICAgdm9pZCBhbGlnblZlcnRpY2FsbHkoKTsK
LSAgICB2b2lkIGFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwotCi0gICAgSGFuZ2luZ0Nv
bnRlbnQgY29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkg
Y29uc3Q7CiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0Nv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9CiAgICAg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRl
eHQoKS5sYXlvdXRTdGF0ZSgpOyB9CiAKIHByaXZhdGU6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBib29sIG1faGFzVmFsaWRBbGlnbm1lbnRCYXNlbGluZSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAg
ICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDsKLSAgICBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOwogICAgIERpc3BsYXk6
OklubGluZVJlY3QgbV9yZWN0OwogICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9zY3JvbGxhYmxl
T3ZlcmZsb3c7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBtX2FsaWdubWVudEJhc2VsaW5lIHsgMCB9
OwotICAgIElubGluZUJveCBtX3Jvb3RJbmxpbmVCb3g7Ci0gICAgVmVjdG9yPElubGluZUJveD4g
bV9pbmxpbmVCb3hMaXN0OwotICAgIEhhc2hNYXA8Y29uc3QgTGluZUJ1aWxkZXI6OlJ1biosIHNp
emVfdD4gbV9ydW5Ub0lubGluZUJveE1hcDsKLX07Ci0KLWlubGluZSBMaW5lQm94OjpJbmxpbmVC
b3g6OklubGluZUJveChjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiByZWN0LCBjb25zdCBBc2Nl
bnRBbmREZXNjZW50JiBhc2NlbnRBbmREZXNjZW50LCBjb25zdCBCb3gmIGxheW91dEJveCkKLSAg
ICA6IHJlY3QocmVjdCkKLSAgICAsIGFzY2VudEFuZERlc2NlbnQoYXNjZW50QW5kRGVzY2VudCkK
LSAgICAsIGxheW91dEJveChsYXlvdXRCb3gpCi17Ci19CiAKLWlubGluZSB2b2lkIExpbmVCb3g6
OnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
KQotewotICAgIGlmIChsb2dpY2FsSGVpZ2h0IDw9IG1fcmVjdC5oZWlnaHQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fcmVjdC5zZXRIZWlnaHQobG9naWNhbEhlaWdodCk7Ci19Ci0KLWlubGlu
ZSB2b2lkIExpbmVCb3g6OnNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKElubGluZUxheW91
dFVuaXQgYWxpZ25tZW50QmFzZWxpbmUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2hh
c1ZhbGlkQWxpZ25tZW50QmFzZWxpbmUgPSB0cnVlOwotI2VuZGlmCi0gICAgbV9hbGlnbm1lbnRC
YXNlbGluZSA9IHN0ZDo6bWF4KGFsaWdubWVudEJhc2VsaW5lLCBtX2FsaWdubWVudEJhc2VsaW5l
KTsKLX0KLQotaW5saW5lIHZvaWQgTGluZUJveDo6c2V0QXNjZW50SWZHcmVhdGVyKElubGluZUxh
eW91dFVuaXQgYXNjZW50KQotewotICAgIGlmIChhc2NlbnQgPCBtX3Jvb3RJbmxpbmVCb3guYXNj
ZW50QW5kRGVzY2VudC5hc2NlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBzZXRBbGlnbm1lbnRC
YXNlbGluZUlmR3JlYXRlcihhc2NlbnQpOwotICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmRE
ZXNjZW50LmFzY2VudCA9IGFzY2VudDsKLX0KLQotaW5saW5lIHZvaWQgTGluZUJveDo6c2V0RGVz
Y2VudElmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQpCi17Ci0gICAgaWYgKGRlc2Nl
bnQgPCBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2VudC5kZXNjZW50KQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9yb290SW5saW5lQm94LmFzY2VudEFuZERlc2NlbnQuZGVzY2VudCA9IGRl
c2NlbnQ7Ci19Ci0KLWlubGluZSBJbmxpbmVMYXlvdXRVbml0IExpbmVCb3g6OmFsaWdubWVudEJh
c2VsaW5lKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEFsaWdubWVudEJhc2VsaW5l
KTsKLSAgICByZXR1cm4gbV9hbGlnbm1lbnRCYXNlbGluZTsKLX0KKyAgICBJbmxpbmVCb3ggbV9y
b290SW5saW5lQm94OwogCi1pbmxpbmUgQXNjZW50QW5kRGVzY2VudCBMaW5lQm94OjpoYWxmTGVh
ZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBJbmxpbmVMYXlvdXRV
bml0IGxpbmVMb2dpY2FsSGVpZ2h0KQotewotICAgIGF1dG8gYXNjZW50ID0gZm9udE1ldHJpY3Mu
YXNjZW50KCk7Ci0gICAgYXV0byBkZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOwotICAg
IC8vIDEwLjguMSBMZWFkaW5nIGFuZCBoYWxmLWxlYWRpbmcKLSAgICBhdXRvIGhhbGZMZWFkaW5n
ID0gKGxpbmVMb2dpY2FsSGVpZ2h0IC0gKGFzY2VudCArIGRlc2NlbnQpKSAvIDI7Ci0gICAgLy8g
SW5saW5lIHRyZWUgaGVpZ2h0IGlzIGFsbCBpbnRlZ2VyIGJhc2VkLgotICAgIGF1dG8gYWRqdXN0
ZWRBc2NlbnQgPSBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PihmbG9vcmYoYXNjZW50ICsgaGFs
ZkxlYWRpbmcpLCAwKTsKLSAgICBhdXRvIGFkanVzdGVkRGVzY2VudCA9IHN0ZDo6bWF4PElubGlu
ZUxheW91dFVuaXQ+KGNlaWxmKGRlc2NlbnQgKyBoYWxmTGVhZGluZyksIDApOwotICAgIHJldHVy
biB7IGFkanVzdGVkQXNjZW50LCBhZGp1c3RlZERlc2NlbnQgfTsKLX0KKyAgICBPcHRpb25hbDxJ
bmxpbmVMYXlvdXRVbml0PiBtX2xpbmVBbGlnbm1lbnRPZmZzZXQ7CisgICAgSGFzaE1hcDxjb25z
dCBCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lQm94Pj4gbV9pbmxpbmVCb3hSZWN0TWFwOwor
ICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250
ZXh0OworfTsKIAogfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKaW5kZXggMjVkZTA5N2VjY2M3OGU4
NmQ3MjgyYzBhNDY0ZTUzYmM4OGU2MDM5Zi4uYzg0NWJjMGJjNGViYTcxOTNhY2M3MzI2MzNlYzQ3
OGQ3MjI0ZDRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCkBAIC03OCw2ICs3OCw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9naWNhbFdpZHRoOyB9CiAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExl
ZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0OyB9CisgICAgICAgIElubGluZUxheW91
dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxvZ2lj
YWxXaWR0aCgpOyB9CiAKICAgICAgICAgY29uc3QgRGlzcGxheTo6UnVuOjpFeHBhbnNpb24mIGV4
cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uOyB9CiAgICAgICAgIGJvb2wgaGFz
RXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQ7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406481</attachid>
            <date>2020-08-12 15:13:31 -0700</date>
            <delta_ts>2020-08-29 21:20:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215410-20200812151330.patch</filename>
            <type>text/plain</type>
            <size>55111</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUxNWJhNzhmMWQ0OGFk
ZDI4MTNlYzQ2YzJiMjBlMDFkYzkwOWY2ZS4uZmMzMzM3M2JmYTkwZTVjMjZmNTQxODkxYWVlMzE2
NTkwOGJjYzJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIwLTA4LTEyICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBGaW5hbGl6
ZSBJbmxpbmVCb3ggYWxpZ25tZW50IGluIExpbmVCb3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29tcGxldGVzIHRoZSBJbmxpbmVC
b3ggdHJhbnNpdGlvbi4KKworICAgICAgICBMaW5lQm94IG5vdyBoYXMgYSBkZWRpY2F0ZWQgcm9v
dCBpbmxpbmUgYm94IGFuZCBhZGRpdGlvbmFsIGlubGluZSBib3hlcyBhcyBuZWVkZWQuCisgICAg
ICAgIEJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYWxpZ25tZW50cyBhcmUgcGVyZm9ybWVk
IG9uIHRoZSBpbmxpbmUgYm94ZXMgYXMgb3Bwb3NlZCB0byBvbiB0aGUgcnVucy4KKworICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29uc3RyYWludHNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
UXVpcmtzOjppbml0aWFsTGluZUhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OmNvbGxlY3RIYW5naW5nQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Omhvcml6
b250YWxBbGlnbm1lbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYWxmTGVh
ZGluZ01ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVC
b3g6OklubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OkxpbmVC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjptX2lubGluZUZvcm1hdHRpbmdDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lQm94Rm9yTGF5b3V0
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lUmVj
dEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpj
b25zdHJ1Y3RJbmxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6
OmFsaWduVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnJl
Y3RGb3JSdW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94OjphbGlnbkhvcml6b250YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmNvbGxlY3RIYW5naW5nQ29udGVudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OkFz
Y2VudEFuZERlc2NlbnQ6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCb3g6OklubGluZUJveDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxMZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94Ojpsb2dpY2Fs
V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVC
b3g6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94OjpJbmxpbmVCb3g6OmJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJveDo6SW5saW5lQm94OjpkZXNjZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpzZXRMb2dpY2FsVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpzZXRMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmlzQXRvbWljSW5saW5l
TGV2ZWxCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxp
bmVCb3g6OnNldEhhc1N0cnV0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6
SW5saW5lQm94OjpoYXNTdHJ1dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCb3g6OmFsaWdubWVudEJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QXNjZW50QW5kRGVzY2VudDo6aGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJveDo6YXNjZW50QW5kRGVzY2VudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldFNjcm9sbGFibGVPdmVyZmxv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUJv
eDo6SW5saW5lQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eDo6c2V0TG9naWNhbEhlaWdodElmR3JlYXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCb3g6OnNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0QXNjZW50SWZHcmVhdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0RGVzY2Vu
dElmR3JlYXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6
OmhhbGZMZWFkaW5nTWV0cmljcyk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKwogMjAyMC0wOC0wNSAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gU3RhcnQg
Y29uc3RydWN0aW5nIElubGluZUJveGVzIGZvciBpbmxpbmUgcnVucwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlJbmxpbmVSZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZVJlY3QuaAppbmRleCAy
N2JlMDhmZGEwNTZiOWM2MmQ0MGMyMDMxYjQ3YzYwMTU4NjcxZjcwLi41YzA1OGRjNjk2MDgyMjRm
N2E1MDA2N2RhOWVhZGEzNjljYTQ2NDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZVJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZVJlY3QuaApAQCAtNTgsNiArNTgsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCk7CiAg
ICAgdm9pZCBtb3ZlVmVydGljYWxseShJbmxpbmVMYXlvdXRVbml0KTsKKyAgICB2b2lkIG1vdmVC
eShJbmxpbmVMYXlvdXRQb2ludCk7CiAKICAgICB2b2lkIGV4cGFuZChPcHRpb25hbDxJbmxpbmVM
YXlvdXRVbml0PiwgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4pOwogICAgIHZvaWQgZXhwYW5k
VG9Db250YWluKGNvbnN0IElubGluZVJlY3QmKTsKQEAgLTIzNiw2ICsyMzcsMTMgQEAgaW5saW5l
IHZvaWQgSW5saW5lUmVjdDo6bW92ZVZlcnRpY2FsbHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQp
CiAgICAgbV9yZWN0Lm1vdmUoSW5saW5lTGF5b3V0U2l6ZSB7IDAsIG9mZnNldCB9KTsKIH0KIAor
aW5saW5lIHZvaWQgSW5saW5lUmVjdDo6bW92ZUJ5KElubGluZUxheW91dFBvaW50IG9mZnNldCkK
K3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7CisgICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0
KTsKKyAgICBtX3JlY3QubW92ZUJ5KG9mZnNldCk7Cit9CisKIGlubGluZSB2b2lkIElubGluZVJl
Y3Q6OmV4cGFuZChPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB3aWR0aCwgT3B0aW9uYWw8SW5s
aW5lTGF5b3V0VW5pdD4gaGVpZ2h0KQogewogICAgIEFTU0VSVCghd2lkdGggfHwgbV9oYXNWYWxp
ZFdpZHRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBmNzE2YzUx
MmE4OTdmNGJlYTNkMjAxYzUwNjBlOWJhM2YyM2M0ZWI5Li4wMjkyYTJhZjg4NmM2NWFjMjIxNGJk
YjFkNzg3YmY5NzQwNGY2ZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CkBAIC0xNjcsOCArMTY3LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxh
eW91dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9OwotICAgICAgICBhdXRvIGxpbmVSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IGxpbmVD
b25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgbGluZS5saW5lTG9naWNhbFdpZHRoKCksIGxpbmVD
b25zdHJhaW50cy5saW5lSGVpZ2h0fTsKLSAgICAgICAgYXV0byBsaW5lQm94ID0gTGluZUJveCB7
ICp0aGlzLCBsaW5lUmVjdCwgbGluZUNvbnRlbnQucnVucywgbGluZS5pc1Zpc3VhbGx5RW1wdHko
KSA/IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6OlllcyA6IExpbmVCb3g6OklzTGluZVZp
c3VhbGx5RW1wdHk6Ok5vLCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQoKSA/IExpbmVCb3g6
OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzIDogTGluZUJveDo6SXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50OjpObyB9OworICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94IHsg
KnRoaXMsIGxpbmVDb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgbGluZS5saW5lTG9naWNhbFdp
ZHRoKCksIGxpbmVDb250ZW50LnJ1bnMsIGxpbmUuaXNWaXN1YWxseUVtcHR5KCkgPyBMaW5lQm94
OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMgOiBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5
OjpObywgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KCkgPyBMaW5lQm94OjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudDo6Tm8gfTsKICAgICAgICAgc2V0RGlzcGxheUJveGVzRm9yTGluZShsaW5lQ29udGVudCwg
bGluZUJveCwgY29uc3RyYWludHMuaG9yaXpvbnRhbCk7CiAKICAgICAgICAgaWYgKCFsaW5lQ29u
dGVudFJhbmdlLmlzRW1wdHkoKSkgewpAQCAtNDE1LDE0ICs0MTQsMTMgQEAgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OkxpbmVDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29u
c3RyYWludHNGb3IKIHsKICAgICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGhvcml6b250YWxDb25z
dHJhaW50cy5sb2dpY2FsTGVmdDsKICAgICBhdXRvIGxpbmVMb2dpY2FsUmlnaHQgPSBsaW5lTG9n
aWNhbExlZnQgKyBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwotICAgIGF1dG8g
aW5pdGlhbExpbmVIZWlnaHQgPSBxdWlya3MoKS5pbml0aWFsTGluZUhlaWdodChyb290KCkpOwog
ICAgIGF1dG8gbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0ID0gZmFsc2U7CiAKICAgICBhdXRvIGZs
b2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IHJvb3QoKSwgKnRoaXMsIGZvcm1hdHRp
bmdTdGF0ZSgpLmZsb2F0aW5nU3RhdGUoKSB9OwogICAgIC8vIENoZWNrIGZvciBpbnRydWRpbmcg
ZmxvYXRzIGFuZCBhZGp1c3QgbG9naWNhbCBsZWZ0L2F2YWlsYWJsZSB3aWR0aCBmb3IgdGhpcyBs
aW5lIGFjY29yZGluZ2x5LgogICAgIGlmICghZmxvYXRpbmdDb250ZXh0LmlzRW1wdHkoKSkgewog
ICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHZhcmlhYmxlIGxpbmUgaGVpZ2h0LCB3
aGVyZSB0aGUgaW50cnVzaXZlIGZsb2F0cyBzaG91bGQgYmUgcHJvYmVkIGFzIHRoZSBsaW5lIGhl
aWdodCBncm93cy4KLSAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0gZmxvYXRpbmdDb250
ZXh0LmNvbnN0cmFpbnRzKHRvTGF5b3V0VW5pdChsaW5lTG9naWNhbFRvcCksIHRvTGF5b3V0VW5p
dChsaW5lTG9naWNhbFRvcCArIGluaXRpYWxMaW5lSGVpZ2h0KSk7CisgICAgICAgIGF1dG8gZmxv
YXRDb25zdHJhaW50cyA9IGZsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyh0b0xheW91dFVuaXQo
bGluZUxvZ2ljYWxUb3ApLCB0b0xheW91dFVuaXQobGluZUxvZ2ljYWxUb3AgKyBxdWlya3MoKS5p
bml0aWFsTGluZUhlaWdodCgpKSk7CiAgICAgICAgIC8vIENoZWNrIGlmIHRoZXNlIGNvbnN0cmFp
bnRzIGFjdHVhbGx5IHB1dCBsaW1pdGF0aW9uIG9uIHRoZSBsaW5lLgogICAgICAgICBpZiAoZmxv
YXRDb25zdHJhaW50cy5sZWZ0ICYmIGZsb2F0Q29uc3RyYWludHMubGVmdC0+eCA8PSBsaW5lTG9n
aWNhbExlZnQpCiAgICAgICAgICAgICBmbG9hdENvbnN0cmFpbnRzLmxlZnQgPSB7IH07CkBAIC00
NzgsNyArNDc2LDcgQEAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmVDb25zdHJhaW50cyBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29uc3RyYWludHNGb3IKICAgICAgICAgcmV0dXJuIGdl
b21ldHJ5KCkuY29tcHV0ZWRUZXh0SW5kZW50KHJvb3QsIGhvcml6b250YWxDb25zdHJhaW50cyku
dmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSk7CiAgICAgfTsKICAgICBsaW5lTG9naWNhbExl
ZnQgKz0gY29tcHV0ZWRUZXh0SW5kZW50KCk7Ci0gICAgcmV0dXJuIExpbmVDb25zdHJhaW50cyB7
IHsgbGluZUxvZ2ljYWxMZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCBsaW5lTG9naWNhbFJpZ2h0IC0g
bGluZUxvZ2ljYWxMZWZ0LCBpbml0aWFsTGluZUhlaWdodCwgbGluZUlzQ29uc3RyYWluZWRCeUZs
b2F0IH07CisgICAgcmV0dXJuIExpbmVDb25zdHJhaW50cyB7IHsgbGluZUxvZ2ljYWxMZWZ0LCBs
aW5lTG9naWNhbFRvcCB9LCBsaW5lTG9naWNhbFJpZ2h0IC0gbGluZUxvZ2ljYWxMZWZ0LCBsaW5l
SXNDb25zdHJhaW5lZEJ5RmxvYXQgfTsKIH0KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNv
bnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBMaW5lQm94JiBsaW5lQm94LCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykKQEAgLTUwOCwxNiArNTA2LDEz
IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUo
Y29uc3QgTGluZUxheW91dENvbnRleHQ6OkxpCiAgICAgYXV0byYgaW5saW5lQ29udGVudCA9IGZv
cm1hdHRpbmdTdGF0ZS5lbnN1cmVEaXNwbGF5SW5saW5lQ29udGVudCgpOwogICAgIGF1dG8gbGlu
ZUluZGV4ID0gaW5saW5lQ29udGVudC5saW5lQm94ZXMuc2l6ZSgpOwogICAgIGF1dG8gbGluZUlu
a092ZXJmbG93ID0gbGluZUJveC5zY3JvbGxhYmxlT3ZlcmZsb3coKTsKLSAgICAvLyBDb21wdXRl
IGJveCBmaW5hbCBnZW9tZXRyeS4KKyAgICAvLyBDb21wdXRlIGZpbmFsIGJveCBnZW9tZXRyeS4K
ICAgICBmb3IgKGF1dG8mIGxpbmVSdW4gOiBsaW5lQ29udGVudC5ydW5zKSB7Ci0gICAgICAgIGF1
dG8mIGxvZ2ljYWxSZWN0ID0gbGluZUJveC5yZWN0Rm9yUnVuKGxpbmVSdW4pOwogICAgICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBsaW5lUnVuLmxheW91dEJveCgpOwotCi0gICAgICAgIC8vIEFkZCBm
aW5hbCBkaXNwbGF5IHJ1bnMgdG8gc3RhdGUgZmlyc3QuCiAgICAgICAgIC8vIElubGluZSBsZXZl
bCBjb250YWluZXJzICg8c3Bhbj4pIGRvbid0IGdlbmVyYXRlIGRpc3BsYXkgcnVucyBhbmQgbmVp
dGhlciBkbyBjb21wbGV0ZWx5IGNvbGxhcHNlZCBydW5zLgotICAgICAgICBhdXRvIGluaXRpYXRl
c0lubGluZVJ1biA9ICFsaW5lUnVuLmlzQ29udGFpbmVyU3RhcnQoKSAmJiAhbGluZVJ1bi5pc0Nv
bnRhaW5lckVuZCgpOworICAgICAgICBhdXRvIGluaXRpYXRlc0lubGluZVJ1biA9IGxpbmVSdW4u
aXNUZXh0KCkgfHwgbGluZVJ1bi5pc0xpbmVCcmVhaygpIHx8IGxpbmVSdW4uaXNCb3goKTsKICAg
ICAgICAgaWYgKGluaXRpYXRlc0lubGluZVJ1bikgewotICAgICAgICAgICAgYXV0byBjb21wdXRl
ZElua092ZXJmbG93ID0gWyZdIHsKKyAgICAgICAgICAgIGF1dG8gY29tcHV0ZWRJbmtPdmVyZmxv
dyA9IFsmXSAoY29uc3QgYXV0byYgbG9naWNhbFJlY3QpIHsKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIG5vbi10ZXh0IGluayBvdmVyZmxvdy4KICAgICAgICAgICAg
ICAgICBpZiAoIWxpbmVSdW4uaXNUZXh0KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBs
b2dpY2FsUmVjdDsKQEAgLTUzMyw1MyArNTI4LDMzIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUxheW91dENvbnRleHQ6Okxp
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBpbmtPdmVyZmxvdzsK
ICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBhdXRvIGlua092ZXJmbG93ID0gY29tcHV0ZWRJ
bmtPdmVyZmxvdygpOworICAgICAgICAgICAgYXV0byBsb2dpY2FsUmVjdCA9IGxpbmVSdW4uaXNC
b3goKSA/IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkubG9naWNhbFJl
Y3QoKSA6IGxpbmVCb3guaW5saW5lUmVjdEZvclRleHRSdW4obGluZVJ1bik7CisgICAgICAgICAg
ICAvLyBJbmxpbmUgYm94ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBsaW5lIGJveCB3aGlsZSBmaW5h
bCBEaXNwbGF5OjpSdW5zIG5lZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBEaXNwbGF5
OkJveAorICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZG4ndCB3ZSBqdXN0IGxlYXZlIHRoZW0g
YmUgcmVsYXRpdmUgdG8gdGhlIGxpbmUgYm94PworICAgICAgICAgICAgbG9naWNhbFJlY3QubW92
ZUJ5KHsgbGluZUJveC5sb2dpY2FsTGVmdCgpLCBsaW5lQm94LmxvZ2ljYWxUb3AoKSB9KTsKKyAg
ICAgICAgICAgIGF1dG8gaW5rT3ZlcmZsb3cgPSBjb21wdXRlZElua092ZXJmbG93KGxvZ2ljYWxS
ZWN0KTsKICAgICAgICAgICAgIGxpbmVJbmtPdmVyZmxvdy5leHBhbmRUb0NvbnRhaW4oaW5rT3Zl
cmZsb3cpOwotICAgICAgICAgICAgaW5saW5lQ29udGVudC5ydW5zLmFwcGVuZCh7IGxpbmVJbmRl
eCwgbGluZVJ1bi5sYXlvdXRCb3goKSwgbG9naWNhbFJlY3QsIGlua092ZXJmbG93LCBsaW5lUnVu
LmV4cGFuc2lvbigpLCBsaW5lUnVuLnRleHRDb250ZW50KCkgfSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobGluZVJ1bi5pc1RleHQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIGlmIChsaW5lUnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBT
aW5jZSA8YnI+IGFuZCA8d2JyPiBydW5zIGhhdmUgYXNzb2NpYXRlZCBET00gZWxlbWVudHMsIHdl
IG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IGEgZGlzcGxheSBib3ggaGVyZS4gCi0gICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlubGluZUNvbnRlbnQucnVucy5hcHBlbmQoeyBsaW5l
SW5kZXgsIGxheW91dEJveCwgbG9naWNhbFJlY3QsIGlua092ZXJmbG93LCBsaW5lUnVuLmV4cGFu
c2lvbigpLCBsaW5lUnVuLnRleHRDb250ZW50KCkgfSk7CiAgICAgICAgIH0KIAotICAgICAgICAv
LyBJbmxpbmUgbGV2ZWwgYm94IChyZXBsYWNlZCBvciBpbmxpbmUtYmxvY2spCi0gICAgICAgIGlm
IChsaW5lUnVuLmlzQm94KCkpIHsKLSAgICAgICAgICAgIGF1dG8gdG9wTGVmdCA9IGxvZ2ljYWxS
ZWN0LnRvcExlZnQoKTsKKyAgICAgICAgLy8gQ3JlYXRlIGRpc3BsYXkgYm94ZXMuCisgICAgICAg
IC8vIEZJWE1FOiBTaW5jZSA8YnI+IGFuZCA8d2JyPiBydW5zIGhhdmUgYXNzb2NpYXRlZCBET00g
ZWxlbWVudHMsIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IGEgZGlzcGxheSBib3ggaGVyZS4g
CisgICAgICAgIGF1dG8gaW5pdGlhdGVzRGlzcGxheUJveCA9IGxpbmVSdW4uaXNCb3goKSB8fCBs
aW5lUnVuLmlzQ29udGFpbmVyU3RhcnQoKTsKKyAgICAgICAgaWYgKGluaXRpYXRlc0Rpc3BsYXlC
b3gpIHsKKyAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlz
cGxheUJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgYXV0byYgaW5saW5lQm94ID0gbGluZUJv
eC5pbmxpbmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gdG9w
TGVmdCA9IGlubGluZUJveC5sb2dpY2FsUmVjdCgpLnRvcExlZnQoKTsKICAgICAgICAgICAgIGlm
IChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgdG9wTGVm
dCArPSBnZW9tZXRyeSgpLmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0g
Zm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKICAgICAgICAgICAgIGRpc3Bs
YXlCb3guc2V0VG9wTGVmdCh0b0xheW91dFBvaW50KHRvcExlZnQpKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5saW5lIGxldmVsIGNvbnRhaW5lciBz
dGFydCAoPHNwYW4+KQotICAgICAgICBpZiAobGluZVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsK
LSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUJv
eChsYXlvdXRCb3gpOwotICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHRvTGF5b3V0
UG9pbnQobG9naWNhbFJlY3QudG9wTGVmdCgpKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElubGluZSBsZXZlbCBjb250YWluZXIgZW5kICg8L3NwYW4+
KQotICAgICAgICBpZiAobGluZVJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7Ci0gICAgICAgICAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsK
LSAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGluZmxvd09mZnNldCA9IGdlb21ldHJ5KCkuaW5GbG93UG9zaXRpb25l
ZFBvc2l0aW9uT2Zmc2V0KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICAg
ICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVIb3Jpem9udGFsbHkoaW5mbG93T2Zmc2V0LndpZHRo
KCkpOwotICAgICAgICAgICAgICAgIGRpc3BsYXlCb3gubW92ZVZlcnRpY2FsbHkoaW5mbG93T2Zm
c2V0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChsaW5lUnVuLmlzQ29udGFpbmVyU3RhcnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94V2lkdGggPSBpbmxpbmVCb3gubG9n
aWNhbFdpZHRoKCk7CisgICAgICAgICAgICAgICAgYXV0byBjb250ZW50Qm94V2lkdGggPSBtYXJn
aW5Cb3hXaWR0aCAtIChkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRl
ckxlZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApKTsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogRml4IGl0IGZvciBtdWx0aWxpbmUuCisgICAgICAgICAgICAgICAg
ZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgodG9MYXlvdXRVbml0KGNvbnRlbnRCb3hXaWR0
aCkpOworICAgICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodCh0b0xh
eW91dFVuaXQoaW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSkpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXV0byBtYXJnaW5Cb3hXaWR0aCA9IGxvZ2ljYWxSZWN0LmxlZnQoKSAtIGRpc3Bs
YXlCb3gubGVmdCgpOwotICAgICAgICAgICAgYXV0byBjb250ZW50Qm94V2lkdGggPSBtYXJnaW5C
b3hXaWR0aCAtIChkaXNwbGF5Qm94Lm1hcmdpblN0YXJ0KCkgKyBkaXNwbGF5Qm94LmJvcmRlckxl
ZnQoKSArIGRpc3BsYXlCb3gucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApKTsKLSAgICAgICAgICAg
IC8vIEZJWE1FIGZpeCBpdCBmb3IgbXVsdGlsaW5lLgotICAgICAgICAgICAgZGlzcGxheUJveC5z
ZXRDb250ZW50Qm94V2lkdGgodG9MYXlvdXRVbml0KGNvbnRlbnRCb3hXaWR0aCkpOwotICAgICAg
ICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KHRvTGF5b3V0VW5pdChsb2dpY2Fs
UmVjdC5oZWlnaHQoKSkpOwotICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
d2hlcmUgdGhlIGxvZ2ljYWwgdG8gcGh5c2ljYWwgdHJhbnNsYXRlIHNob3VsZCBoYXBwZW4uCiAg
ICAgaW5saW5lQ29udGVudC5saW5lQm94ZXMuYXBwZW5kKHsgbGluZUJveC5sb2dpY2FsUmVjdCgp
LCBsaW5lQm94LnNjcm9sbGFibGVPdmVyZmxvdygpLCBsaW5lSW5rT3ZlcmZsb3csIGxpbmVCb3gu
YWxpZ25tZW50QmFzZWxpbmUoKSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmlu
ZGV4IDMzZWM4OGY2NmI4ODEwZTAxMTI1MDhjOTEwMTFmNzE1MzM4YjUwZWMuLmZiMDQwZTY4Yzgx
NjhiOGFiOWFmNTNjMWNkMGI2MjUyODZjMzFjNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaApAQCAtNDYsMTIgKzQ2LDkgQEAgcHVibGljOgogICAgIElubGluZUZvcm1hdHRpbmdD
b250ZXh0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBJbmxpbmVG
b3JtYXR0aW5nU3RhdGUmKTsKICAgICB2b2lkIGxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0
aW9uU3RhdGUmLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKSBvdmVycmlkZTsK
IAotcHJpdmF0ZToKLSAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJyaWRlOwotCiAgICAgY2xhc3MgUXVpcmtzIDogcHVi
bGljIEZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3MgewogICAgIHB1YmxpYzoKLSAgICAgICAgSW5s
aW5lTGF5b3V0VW5pdCBpbml0aWFsTGluZUhlaWdodChjb25zdCBDb250YWluZXJCb3gmIGZvcm1h
dHRpbmdSb290KSBjb25zdDsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBpbml0aWFsTGluZUhl
aWdodCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OwpAQCAtNjIsNiArNTksOSBAQCBwcml2YXRlOgogICAgIH07CiAg
ICAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyBxdWlya3MoKSBjb25zdCB7IHJldHVy
biBRdWlya3MoKnRoaXMpOyB9CiAKK3ByaXZhdGU6CisgICAgSW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBvdmVycmlkZTsKKwogICAg
IGNsYXNzIEdlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSB7CiAg
ICAgcHVibGljOgogICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGlubGluZUJsb2NrSGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNv
bnN0IE92ZXJyaWRlVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKQEAgLTkwLDcgKzkwLDYgQEAgcHJp
dmF0ZToKICAgICBzdHJ1Y3QgTGluZUNvbnN0cmFpbnRzIHsKICAgICAgICAgSW5saW5lTGF5b3V0
UG9pbnQgbG9naWNhbFRvcExlZnQ7CiAgICAgICAgIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
TG9naWNhbFdpZHRoIHsgMCB9OwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVIZWlnaHQg
eyAwIH07CiAgICAgICAgIGJvb2wgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsK
ICAgICB9OwogICAgIExpbmVDb25zdHJhaW50cyBjb25zdHJhaW50c0ZvckxpbmUoY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbFRvcCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggZDg0YThi
ZWQ4Y2JkYjIyZmI3YmVjZGUwOGIyNzFhODBkNDU2ZTQ4OS4uMDYzMTE3Y2E3ZTNlYTNmM2E3Yjk0
NWNhZGVjZWQ1N2QyNTQyM2JmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0UXVpcmtzLmNwcApAQCAtMzEsMTQgKzMxLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgTGF5b3V0IHsKIAotSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6UXVpcmtzOjppbml0aWFsTGluZUhlaWdodChjb25zdCBDb250YWluZXJCb3gmIGZvcm1h
dHRpbmdSb290KSBjb25zdAorSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6UXVpcmtzOjppbml0aWFsTGluZUhlaWdodCgpIGNvbnN0CiB7Ci0gICAgSW5saW5lTGF5b3V0
VW5pdCBjb21wdXRlZExpbmVIZWlnaHQgPSBmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmNvbXB1dGVk
TGluZUhlaWdodCgpOwogICAgIC8vIE5lZ2F0aXZlIGxpbmVIZWlnaHQgdmFsdWUgbWVhbnMgdGhl
IGxpbmUtaGVpZ2h0IGlzIG5vdCBzZXQKLSAgICBpZiAobGF5b3V0U3RhdGUoKS5pbk5vUXVpcmtz
TW9kZSgpIHx8ICFmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZl
KCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlZExpbmVIZWlnaHQ7Ci0KLSAgICByZXR1cm4gTGlu
ZUJveDo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvcm1hdHRpbmdSb290LnN0eWxlKCkuZm9udE1ldHJp
Y3MoKSwgMF9sdSkuaGVpZ2h0KCk7CisgICAgYXV0byYgcm9vdCA9IGZvcm1hdHRpbmdDb250ZXh0
KCkucm9vdCgpOworICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluTm9RdWlya3NNb2RlKCkgfHwgIXJv
b3Quc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKQorICAgICAgICByZXR1cm4gcm9v
dC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpOworICAgIHJldHVybiByb290LnN0eWxlKCku
Zm9udE1ldHJpY3MoKS5mbG9hdEhlaWdodCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCmluZGV4
IDZhZWFmZTNhMzQ5ZDcxOTc1YjFmMjcyNTYxOTMxMDcyOWQ2MWY5OWUuLjk4ZmFlMzRjZGI3OGQ0
NTAyNGU1OGQ5Nzg4ZTRjZmUyNTM4ODc5MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCkBAIC0zMSw2ICsz
MSwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKK3N0cnVj
dCBBc2NlbnRBbmREZXNjZW50IHsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIGFzY2VudCArIGRlc2NlbnQ7IH0KKworICAgIElubGluZUxheW91dFVuaXQgYXNj
ZW50IHsgMCB9OworICAgIElubGluZUxheW91dFVuaXQgZGVzY2VudCB7IDAgfTsKK307CisKIHN0
cnVjdCBIYW5naW5nQ29udGVudCB7CiBwdWJsaWM6CiAgICAgdm9pZCByZXNldCgpOwpAQCAtNTIs
MTM3ICs1OSwxNTYgQEAgdm9pZCBIYW5naW5nQ29udGVudDo6cmVzZXQoKQogICAgIG1fd2lkdGgg
PSAgMDsKIH0KIAotTGluZUJveDo6TGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxp
bmVSZWN0LCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVucywgSXNMaW5lVmlzdWFsbHlF
bXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4
dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKLSAgICAsIG1fcnVucyhydW5zKQotICAgICwgbV9y
ZWN0KGxpbmVSZWN0KQotICAgICwgbV9yb290SW5saW5lQm94KElubGluZUJveCB7IGxpbmVSZWN0
LCB7IH0sIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LnJvb3QoKSB9KQorc3RhdGljIEhhbmdpbmdD
b250ZW50IGNvbGxlY3RIYW5naW5nQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYg
cnVucywgTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCkKIHsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1faGFzVmFsaWRBbGln
bm1lbnRCYXNlbGluZSA9IHRydWU7Ci0jZW5kaWYKLSAgICBhdXRvJiByb290U3R5bGUgPSBpbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5yb290KCkuc3R5bGUoKTsKLSAgICBhdXRvIGhhbGZMZWFkaW5n
TWV0cmljcyA9IHRoaXMtPmhhbGZMZWFkaW5nTWV0cmljcyhyb290U3R5bGUuZm9udE1ldHJpY3Mo
KSwgbGluZVJlY3QuaGVpZ2h0KCkpOwotCi0gICAgbV9yb290SW5saW5lQm94LmFzY2VudEFuZERl
c2NlbnQgPSBoYWxmTGVhZGluZ01ldHJpY3M7Ci0gICAgbV9hbGlnbm1lbnRCYXNlbGluZSA9IGhh
bGZMZWFkaW5nTWV0cmljcy5hc2NlbnQ7Ci0KLSAgICBhdXRvIGNvbnRlbnRMb2dpY2FsV2lkdGgg
PSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewot
ICAgICAgICBhdXRvIHJ1bkhlaWdodCA9IFsmXSgpIC0+IElubGluZUxheW91dFVuaXQgewotICAg
ICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBydW4uc3R5bGUoKS5mb250TWV0cmljcygpOwot
ICAgICAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIGlm
IChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQotICAgICAgICAgICAgYXV0
byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAgICAgICAgYXV0byYgYm94R2Vv
bWV0cnkgPSBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
OwotICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc1JlcGxhY2VkQm94KCkgfHwgbGF5b3V0Qm94
LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJveEdlb21l
dHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKLQotICAgICAgICAgICAgLy8gTm9uLXJlcGxhY2VkIGlu
bGluZSBib3ggKGUuZy4gaW5saW5lLWJsb2NrKS4gSXQgbG9va3MgYSBiaXQgbWlzbGVhZGluZyBi
dXQgdGhlaXIgbWFyZ2luIGJveCBpcyBjb25zaWRlcmVkIHRoZSBjb250ZW50IGhlaWdodCBoZXJl
LgotICAgICAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwotICAg
ICAgICB9OwotICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkuIERvIG5vdCBtYWtl
IGFuIGlubGluZSBib3ggZm9yIGVhY2ggcnVuLgotICAgICAgICBtX2lubGluZUJveExpc3QuYXBw
ZW5kKElubGluZUJveCB7IHsgMCwgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgo
KSwgcnVuSGVpZ2h0KCkgfSwgaGFsZkxlYWRpbmdNZXRyaWNzLCBydW4ubGF5b3V0Qm94KCkgfSk7
Ci0gICAgICAgIGNvbnRlbnRMb2dpY2FsV2lkdGggKz0gcnVuLmxvZ2ljYWxXaWR0aCgpOwotICAg
IH0KLSAgICBhbGlnblZlcnRpY2FsbHkoKTsKLSAgICBhbGlnbkhvcml6b250YWxseShsaW5lUmVj
dC53aWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KTsKLQotICAgIGlmIChpc0xpbmVWaXN1YWxseUVtcHR5ID09IElzTGluZVZpc3VhbGx5RW1w
dHk6OlllcykgewotICAgICAgICBtX3JlY3Quc2V0SGVpZ2h0KHsgfSk7Ci0gICAgICAgIG1fcm9v
dElubGluZUJveC5hc2NlbnRBbmREZXNjZW50ID0geyB9OworICAgIGF1dG8gaGFuZ2luZ0NvbnRl
bnQgPSBIYW5naW5nQ29udGVudCB7IH07CisgICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudCA9PSBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcykKKyAgICAg
ICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25kaXRpb25hbCgpOworICAgIGZvciAoYXV0byYgcnVu
IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShydW5zKSkgeworICAgICAgICBpZiAocnVuLmlzQ29u
dGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGhhbmdp
bmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3Ig
aHVuZyB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9
IFdoaXRlU3BhY2U6OlByZVdyYXApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gVGhp
cyBpcyBlaXRoZXIgYSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdo
aXRlc3BhY2UuCisgICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGgoKSk7CiAgICAgfQorICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKIH0KIAot
Y29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgTGluZUJveDo6cmVjdEZvclJ1bihjb25zdCBMaW5l
QnVpbGRlcjo6UnVuJiBydW4pIGNvbnN0CitzdGF0aWMgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5p
dD4gaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldChjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYg
cnVucywgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIElubGluZUxheW91dFVuaXQgbGluZUxvZ2lj
YWxXaWR0aCwgTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmUp
CiB7Ci0gICAgcmV0dXJuIG1faW5saW5lQm94TGlzdFttX3J1blRvSW5saW5lQm94TWFwLmdldCgm
cnVuKV0ucmVjdDsKLX0KKyAgICBpZiAocnVucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7
IH07CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmVMb2dpY2FsV2lkdGg7CisgICAgZm9y
IChhdXRvJiBydW4gOiBydW5zKQorICAgICAgICBhdmFpbGFibGVXaWR0aCAtPSBydW4ubG9naWNh
bFdpZHRoKCk7CiAKLXZvaWQgTGluZUJveDo6YWxpZ25Ib3Jpem9udGFsbHkoSW5saW5lTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExp
bmUpCi17Ci0gICAgYXV0byBoYW5naW5nQ29udGVudCA9IGNvbGxlY3RIYW5naW5nQ29udGVudChp
c0xhc3RMaW5lKTsKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250
ZW50KHJ1bnMsIGlzTGFzdExpbmUpOwogICAgIGF2YWlsYWJsZVdpZHRoICs9IGhhbmdpbmdDb250
ZW50LndpZHRoKCk7Ci0gICAgaWYgKG1fcnVucy5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGgg
PD0gMCkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChhdmFpbGFibGVXaWR0aCA8PSAwKQorICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQg
PSBbJl0gewotICAgICAgICBhdXRvJiByb290U3R5bGUgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnJv
b3QoKS5zdHlsZSgpOwotICAgICAgICBpZiAocm9vdFN0eWxlLnRleHRBbGlnbigpICE9IFRleHRB
bGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgICAgICByZXR1cm4gcm9vdFN0eWxlLnRleHRBbGln
bigpOworICAgICAgICBpZiAodGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisg
ICAgICAgICAgICByZXR1cm4gdGV4dEFsaWduOwogICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmll
ZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBw
cm9wZXJ0eSwKICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJv
eC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAogICAgICAg
ICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRo
ZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgotICAgICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xp
bmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZ
ZXMpCisgICAgICAgIGlmIChydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUg
PT0gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCiAgICAgICAgICAg
ICByZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7CiAgICAgICAgIHJldHVybiBUZXh0QWxpZ25N
b2RlOjpKdXN0aWZ5OwogICAgIH0oKTsKIAotICAgIGlmIChjb21wdXRlZEhvcml6b250YWxBbGln
bm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICBhdXRvIGFjY3VtdWxh
dGVkRXhwYW5zaW9uID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBtX3J1bnMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAg
ICBtX2lubGluZUJveExpc3RbaW5kZXhdLnJlY3QubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRl
ZEV4cGFuc2lvbik7Ci0gICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBtX3J1bnNb
aW5kZXhdLmV4cGFuc2lvbigpLmhvcml6b250YWxFeHBhbnNpb247Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuOworICAgIGF1dG8gbGluZUFsaWdubWVudE9mZnNldCA9IE9wdGlvbmFsPElubGlu
ZUxheW91dFVuaXQ+IHsgfTsKKworICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25t
ZW50KSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6V2ViS2l0TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgorICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6V2ViS2l0UmlnaHQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAg
ICAgIGxpbmVBbGlnbm1lbnRPZmZzZXQgPSBhdmFpbGFibGVXaWR0aDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpXZWJLaXRDZW50ZXI6CisgICAgICAgIGxpbmVBbGlnbm1lbnRPZmZzZXQgPSBhdmFpbGFibGVX
aWR0aCAvIDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlm
eToKKyAgICAgICAgLy8gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSBpcyBhIHJ1biBhbGlnbm1lbnQg
KGFuZCB3ZSBvbmx5IGRvIGlubGluZSBib3ggYWxpZ25tZW50IGhlcmUpCisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KKyAgICByZXR1cm4gbGluZUFsaWdubWVudE9mZnNldDsKK30K
IAotICAgIGF1dG8gYWRqdXN0bWVudEZvckFsaWdubWVudCA9IFsmXSAoYXV0byBhdmFpbGFibGVX
aWR0aCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gewotICAgICAgICBzd2l0Y2ggKGNv
bXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCkgewotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OkxlZnQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKLSAgICAgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0UmlnaHQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoLCAw
KTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElu
bGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoIC8gMiwgMCk7Ci0gICAgICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfTsKK2lubGluZSBzdGF0aWMgQXNjZW50QW5k
RGVzY2VudCBoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNz
LCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQoreworICAgIGF1dG8gYXNjZW50
ID0gZm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKTsKKyAgICBhdXRvIGRlc2NlbnQgPSBmb250TWV0
cmljcy5mbG9hdERlc2NlbnQoKTsKKyAgICAvLyAxMC44LjEgTGVhZGluZyBhbmQgaGFsZi1sZWFk
aW5nCisgICAgYXV0byBoYWxmTGVhZGluZyA9IChsaW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQg
KyBkZXNjZW50KSkgLyAyOworICAgIC8vIElubGluZSB0cmVlIGhlaWdodCBpcyBhbGwgaW50ZWdl
ciBiYXNlZC4KKyAgICByZXR1cm4geyBmbG9vcmYoYXNjZW50ICsgaGFsZkxlYWRpbmcpLCBjZWls
ZihkZXNjZW50ICsgaGFsZkxlYWRpbmcpIH07Cit9CiAKLSAgICBpZiAoYXV0byBhZGp1c3RtZW50
ID0gYWRqdXN0bWVudEZvckFsaWdubWVudChhdmFpbGFibGVXaWR0aCkpIHsKLSAgICAgICAgZm9y
IChhdXRvJiBpbmxpbmVCb3ggOiBtX2lubGluZUJveExpc3QpCi0gICAgICAgICAgICBpbmxpbmVC
b3gucmVjdC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICB9CitMaW5lQm94OjpJ
bmxpbmVCb3g6OklubGluZUJveChjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiByZWN0LCBJbmxp
bmVMYXlvdXRVbml0IHN5bnRoZXRpY0Jhc2VsaW5lKQorICAgIDogbV9sb2dpY2FsUmVjdChyZWN0
KQorICAgICwgbV9iYXNlbGluZShzeW50aGV0aWNCYXNlbGluZSkKKyAgICAsIG1faXNWaXN1YWxs
eUVtcHR5KGZhbHNlKQorICAgICwgbV9pc0F0b21pYyh0cnVlKQorewogfQogCi12b2lkIExpbmVC
b3g6OmFsaWduVmVydGljYWxseSgpCitMaW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveChjb25z
dCBEaXNwbGF5OjpJbmxpbmVSZWN0JiByZWN0LCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lLCBJ
bmxpbmVMYXlvdXRVbml0IGRlc2NlbnQsIElzVmlzdWFsbHlFbXB0eSBpc1Zpc3VhbGx5RW1wdHkp
CisgICAgOiBtX2xvZ2ljYWxSZWN0KHJlY3QpCisgICAgLCBtX2Jhc2VsaW5lKGJhc2VsaW5lKQor
ICAgICwgbV9kZXNjZW50KGRlc2NlbnQpCisgICAgLCBtX2lzVmlzdWFsbHlFbXB0eShpc1Zpc3Vh
bGx5RW1wdHkgPT0gSXNWaXN1YWxseUVtcHR5OjpZZXMpCiB7Ci0gICAgYWRqdXN0QmFzZWxpbmVB
bmRMaW5lSGVpZ2h0KCk7Ci0gICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0ID0gbG9naWNh
bFJlY3QoKTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9pbmxpbmVCb3hM
aXN0LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBtX2lubGlu
ZUJveExpc3RbaW5kZXhdOwotICAgICAgICBhdXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOwotICAg
ICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVCb3gubGF5b3V0Qm94OwotICAgICAgICBhdXRv
IGlubGluZUJveEhlaWdodCA9IGlubGluZUJveC5yZWN0LmhlaWdodCgpOwotCi0gICAgICAgIGF1
dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAgICBhdXRvIHZlcnRp
Y2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7Ci0gICAgICAgIGF1
dG8gYXNjZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKLQot
ICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZToKLSAgICAgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSB8fCBydW4u
aXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGFsaWdubWVudEJhc2VsaW5l
KCkgLSBhc2NlbnQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFydCgp
KSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRv
cCA9IGFsaWdubWVudEJhc2VsaW5lKCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5ib3JkZXJUb3Ao
KSAtIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxp
c2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKK30KKworTGluZUJveDo6TGluZUJveChj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGNv
bnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCwgIGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVt
cHR5IGlzTGluZVZpc3VhbGx5RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQpCisgICAgOiBtX3JlY3QodG9wTGVmdCwgbG9naWNhbFdp
ZHRoLCB7IH0pCisgICAgLCBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQoreworICAgIGNvbnN0cnVjdElubGluZUJveGVzKHJ1bnMsIGlzTGluZVZpc3Vh
bGx5RW1wdHkpOworICAgIGFsaWduVmVydGljYWxseSgpOworICAgIG1fc2Nyb2xsYWJsZU92ZXJm
bG93ID0gbV9yZWN0OworICAgIG1fc2Nyb2xsYWJsZU92ZXJmbG93LmV4cGFuZFRvQ29udGFpbiht
X3Jvb3RJbmxpbmVCb3gubG9naWNhbFJlY3QoKSk7CisgICAgZm9yIChhdXRvJiBpbmxpbmVCb3hF
bnRyeSA6IG1faW5saW5lQm94UmVjdE1hcCkKKyAgICAgICAgbV9zY3JvbGxhYmxlT3ZlcmZsb3cu
ZXhwYW5kVG9Db250YWluKGlubGluZUJveEVudHJ5LnZhbHVlLT5sb2dpY2FsUmVjdCgpKTsKKyAg
ICBtX2xpbmVBbGlnbm1lbnRPZmZzZXQgPSBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KHJ1bnMs
IGlubGluZUZvcm1hdHRpbmdDb250ZXh0LnJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsb2dp
Y2FsV2lkdGgsIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Cit9CisKK2NvbnN0IExpbmVC
b3g6OklubGluZUJveCYgTGluZUJveDo6aW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYg
bGF5b3V0Qm94KSBjb25zdAoreworICAgIEFTU0VSVCgmbGF5b3V0Qm94ICE9ICZmb3JtYXR0aW5n
Q29udGV4dCgpLnJvb3QoKSk7CisgICAgcmV0dXJuICptX2lubGluZUJveFJlY3RNYXAuZ2V0KCZs
YXlvdXRCb3gpOworfQorCitEaXNwbGF5OjpJbmxpbmVSZWN0IExpbmVCb3g6OmlubGluZVJlY3RG
b3JUZXh0UnVuKGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mIHJ1bikgY29uc3QKK3sKKyAgICBBU1NF
UlQocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKTsKKyAgICBhdXRvIGhvcml6b250
YWxBbGlnbm1lbnRPZmZzZXQgPSBtX2xpbmVBbGlnbm1lbnRPZmZzZXQudmFsdWVPcihJbmxpbmVM
YXlvdXRVbml0IHsgfSk7CisgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0gbV9yb290SW5saW5lQm94
LmxvZ2ljYWxSZWN0KCk7CisgICAgaWYgKCZydW4ubGF5b3V0Qm94KCkucGFyZW50KCkgIT0gJmZv
cm1hdHRpbmdDb250ZXh0KCkucm9vdCgpKQorICAgICAgICBpbmxpbmVCb3hSZWN0ID0gbV9pbmxp
bmVCb3hSZWN0TWFwLmdldCgmcnVuLmxheW91dEJveCgpLnBhcmVudCgpKS0+bG9naWNhbFJlY3Qo
KTsKKyAgICByZXR1cm4geyBpbmxpbmVCb3hSZWN0LnRvcCgpLCBob3Jpem9udGFsQWxpZ25tZW50
T2Zmc2V0ICsgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwgaW5saW5lQm94
UmVjdC5oZWlnaHQoKSB9OworfQorCit2b2lkIExpbmVCb3g6OmNvbnN0cnVjdElubGluZUJveGVz
KGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlz
TGluZVZpc3VhbGx5RW1wdHkpCit7CisgICAgYXV0byBpbmxpbmVCb3hIYXNJbWFnaW5hcnlTdHJ1
dCA9ICFsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpOworICAgIGF1dG8gaW5saW5lQm94SXNW
aXN1YWxseUVtcHR5ID0gIWlubGluZUJveEhhc0ltYWdpbmFyeVN0cnV0IHx8IGlzTGluZVZpc3Vh
bGx5RW1wdHkgPT0gSXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVzID8gSW5saW5lQm94OjpJc1Zpc3Vh
bGx5RW1wdHk6OlllcyA6IElubGluZUJveDo6SXNWaXN1YWxseUVtcHR5OjpObzsKKyAgICAvLyBG
SVhNRTogQ2FuJ3QgdXNlIGZsb2F0IGZvbnQgbWV0cmljIHZhbHVlcyBiZWNhdXNlIG9mIC0+IGZs
b2F0IGxpbmVTcGFjaW5nID0gbHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxy
b3VuZGYobGluZUdhcCkgaW4gRm9udENvY29hLm1tCisgICAgYXV0byYgZm9udE1ldHJpY3MgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgYXV0
byByb290SW5saW5lUmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyB7IH0sIHsgfSwgbG9naWNh
bFdpZHRoKCksIGZvbnRNZXRyaWNzLmZsb2F0TGluZVNwYWNpbmcoKSB9OworICAgIGF1dG8gcm9v
dElubGluZUJhc2VsaW5lID0gcm91bmRmKGZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkpOworICAg
IGF1dG8gcm9vdElubGluZURlc2NlbnQgPSByb3VuZGYoZm9udE1ldHJpY3MuZmxvYXREZXNjZW50
KCkpOworICAgIG1fcm9vdElubGluZUJveCA9IElubGluZUJveCB7IHJvb3RJbmxpbmVSZWN0LCBy
b290SW5saW5lQmFzZWxpbmUsIHJvb3RJbmxpbmVEZXNjZW50LCBpbmxpbmVCb3hJc1Zpc3VhbGx5
RW1wdHkgfTsKKworICAgIGF1dG8gaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCA9IG1fbGluZUFs
aWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVuaXQgeyB9KTsKKyAgICBmb3IgKGF1
dG8mIHJ1biA6IHJ1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJv
eCgpOworICAgICAgICBhdXRvIHJ1bkxvZ2ljYWxMZWZ0ID0gaG9yaXpvbnRhbEFsaWdubWVudE9m
ZnNldCArIHJ1bi5sb2dpY2FsTGVmdCgpOworICAgICAgICBpZiAocnVuLmlzQm94KCkpIHsKKyAg
ICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJs
b2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQo
KSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRl
KCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94
PihsYXlvdXRCb3gpKTsKICAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRl
IGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgotICAgICAgICAgICAgICAg
IGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5l
Q29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpLmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAg
YXV0byYgbGFzdExpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQo
KS0+bGluZUJveGVzLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFz
ZWxpbmUgPSBsYXN0TGluZUJveC50b3AoKSArIGxhc3RMaW5lQm94LmJhc2VsaW5lKCk7CiAgICAg
ICAgICAgICAgICAgLy8gVGhlIGlubGluZS1ibG9jaydzIGJhc2VsaW5lIG9mZnNldCBpcyByZWxh
dGl2ZSB0byBpdHMgY29udGVudCBib3guIExldCdzIGNvbnZlcnQgaXQgcmVsYXRpdmUgdG8gdGhl
IG1hcmdpbiBib3guCiAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIF9fX19fX19fX19fX19f
XyA8LSBtYXJnaW4gYm94CiAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfApAQCAtMTk1LDE1
NSArMjIxLDExOCBAQCB2b2lkIExpbmVCb3g6OmFsaWduVmVydGljYWxseSgpCiAgICAgICAgICAg
ICAgICAgLy8gICAgIHRleHQgfCB8IHwgICB2IHRleHQKICAgICAgICAgICAgICAgICAvLyAgICAg
LS0tLS18LXwtfC0tLS0tLS0tLS0gPC0gYmFzZWxpbmUKICAgICAgICAgICAgICAgICAvLwotICAg
ICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVGcm9t
TWFyZ2luQm94ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3Jk
ZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgaW5saW5lQmxv
Y2tCYXNlbGluZTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxp
bmUoKSAtIGJhc2VsaW5lRnJvbU1hcmdpbkJveDsKKyAgICAgICAgICAgICAgICBhdXRvIGFkanVz
dGVkQmFzZWxpbmUgPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJv
cmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVC
bG9ja0Jhc2VsaW5lOworICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQm94UmVjdCA9IERpc3Bs
YXk6OklubGluZVJlY3QgeyB7IH0sIHJ1bkxvZ2ljYWxMZWZ0LCBydW4ubG9naWNhbFdpZHRoKCks
IGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpIH07CisgICAgICAgICAgICAgICAgbV9pbmxp
bmVCb3hSZWN0TWFwLnNldCgmbGF5b3V0Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5l
Qm94UmVjdCwgYWRqdXN0ZWRCYXNlbGluZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0
cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYWxpZ25t
ZW50QmFzZWxpbmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0
cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSArIGlubGluZUJveEhlaWdodCArIGJv
eEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOworICAgICAgICAgICAgICAgIGF1dG8gcnVuSGVpZ2h0
ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYXV0byBp
bmxpbmVCb3hSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IHsgfSwgcnVuTG9naWNhbExlZnQs
IHJ1bi5sb2dpY2FsV2lkdGgoKSwgcnVuSGVpZ2h0IH07CisgICAgICAgICAgICAgICAgbV9pbmxp
bmVCb3hSZWN0TWFwLnNldCgmbGF5b3V0Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5l
Qm94UmVjdCwgcnVuSGVpZ2h0KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICBsb2dpY2FsVG9w
ID0gMF9sdTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OkJvdHRvbToKLSAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsb2dpY2FsQm90dG9tKCkgLSBpbmxp
bmVCb3hIZWlnaHQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7CisgICAgICAgICAg
ICBhdXRvIGluaXRpYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aCgpIC0gcnVuTG9naWNhbExlZnQ7Cisg
ICAgICAgICAgICBBU1NFUlQoaW5pdGlhbFdpZHRoID49IDApOworICAgICAgICAgICAgYXV0byYg
Zm9udE1ldHJpY3MgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpOworICAgICAgICAg
ICAgYXV0byBsb2dpY2FsSGVpZ2h0ID0gZm9udE1ldHJpY3MuZmxvYXRMaW5lU3BhY2luZygpOwor
ICAgICAgICAgICAgYXV0byBiYXNlbGluZSA9IHJvdW5kZihoYWxmTGVhZGluZ01ldHJpY3MoZm9u
dE1ldHJpY3MsIGxvZ2ljYWxIZWlnaHQpLmFzY2VudCk7CisgICAgICAgICAgICBhdXRvIGRlc2Nl
bnQgPSByb3VuZGYoZm9udE1ldHJpY3MuZmxvYXREZXNjZW50KCkpOworICAgICAgICAgICAgYXV0
byBpbmxpbmVCb3hSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IHsgfSwgcnVuTG9naWNhbExl
ZnQsIGluaXRpYWxXaWR0aCwgbG9naWNhbEhlaWdodCB9OworICAgICAgICAgICAgbV9pbmxpbmVC
b3hSZWN0TWFwLnNldCgmbGF5b3V0Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5lQm94
UmVjdCwgYmFzZWxpbmUsIGRlc2NlbnQsIGlubGluZUJveElzVmlzdWFsbHlFbXB0eSkpOworICAg
ICAgICB9IGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAvLyBB
ZGp1c3QgdGhlIGxvZ2ljYWwgd2lkdGggd2hlbiB0aGUgaW5saW5lIGxldmVsIGNvbnRhaW5lciBj
bG9zZXMgb24gdGhpcyBsaW5lLgorICAgICAgICAgICAgYXV0byYgaW5saW5lQm94ID0gKm1faW5s
aW5lQm94UmVjdE1hcC5nZXQoJmxheW91dEJveCk7CisgICAgICAgICAgICBpbmxpbmVCb3guc2V0
TG9naWNhbFdpZHRoKHJ1bi5sb2dpY2FsUmlnaHQoKSAtIGlubGluZUJveC5sb2dpY2FsTGVmdCgp
KTsKKyAgICAgICAgfSBlbHNlIGlmICgocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygp
KSkgeworICAgICAgICAgICAgYXV0byYgY29udGFpbmVyQm94ID0gcnVuLmxheW91dEJveCgpLnBh
cmVudCgpOworICAgICAgICAgICAgJmNvbnRhaW5lckJveCA9PSAmZm9ybWF0dGluZ0NvbnRleHQo
KS5yb290KCkgPyBtX3Jvb3RJbmxpbmVCb3guc2V0SXNWaXN1YWxseU5vbkVtcHR5KCkgOiBtX2lu
bGluZUJveFJlY3RNYXAuZ2V0KCZjb250YWluZXJCb3gpLT5zZXRJc1Zpc3VhbGx5Tm9uRW1wdHko
KTsKICAgICAgICAgfQotICAgICAgICBhdXRvJiBpbmxpbmVCb3hSZWN0ID0gaW5saW5lQm94LnJl
Y3Q7Ci0gICAgICAgIGlubGluZUJveFJlY3Quc2V0VG9wKGxvZ2ljYWxUb3ApOwotICAgICAgICAv
LyBBZGp1c3Qgc2Nyb2xsYWJsZSBvdmVyZmxvdyBpZiB0aGUgcnVuIG92ZXJmbG93cyB0aGUgbGlu
ZS4KLSAgICAgICAgc2Nyb2xsYWJsZU92ZXJmbG93UmVjdC5leHBhbmRWZXJ0aWNhbGx5VG9Db250
YWluKGlubGluZUJveFJlY3QpOwotICAgICAgICAvLyBDb252ZXJ0IHJ1bnMgZnJvbSByZWxhdGl2
ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290J3MgYm9yZGVyIGJv
eCB0b3AvbGVmdC4KLSAgICAgICAgaW5saW5lQm94UmVjdC5tb3ZlVmVydGljYWxseSh0aGlzLT5s
b2dpY2FsVG9wKCkpOwotICAgICAgICBpbmxpbmVCb3hSZWN0Lm1vdmVIb3Jpem9udGFsbHkobG9n
aWNhbExlZnQoKSk7CiAgICAgfQotICAgIHNldFNjcm9sbGFibGVPdmVyZmxvdyhzY3JvbGxhYmxl
T3ZlcmZsb3dSZWN0KTsKIH0KIAotdm9pZCBMaW5lQm94OjphZGp1c3RCYXNlbGluZUFuZExpbmVI
ZWlnaHQoKQordm9pZCBMaW5lQm94OjphbGlnblZlcnRpY2FsbHkoKQogewotICAgIHVuc2lnbmVk
IGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7Ci0gICAgYXV0byBoYXNTZWVuRGlyZWN0
VGV4dE9yTGluZUJyZWFrID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IG1faW5saW5lQm94TGlzdC5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byYgaW5s
aW5lQm94ID0gbV9pbmxpbmVCb3hMaXN0W2luZGV4XTsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94
ID0gaW5saW5lQm94LmxheW91dEJveDsKLSAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3gu
c3R5bGUoKTsKLSAgICAgICAgYXV0byYgcnVuID0gbV9ydW5zW2luZGV4XTsKLSAgICAgICAgaWYg
KHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gRm9y
IHRleHQgY29udGVudCB3ZSBzZXQgdGhlIGJhc2VsaW5lIGVpdGhlciB0aHJvdWdoIHRoZSBpbml0
aWFsIHN0cnV0IChzZXQgYnkgdGhlIGZvcm1hdHRpbmcgY29udGV4dCByb290KSBvcgotICAgICAg
ICAgICAgLy8gdGhyb3VnaCB0aGUgaW5saW5lIGNvbnRhaW5lciAoc3RhcnQpLiBOb3JtYWxseSB0
aGUgdGV4dCBjb250ZW50IGl0c2VsZiBkb2VzIG5vdCBzdHJldGNoIHRoZSBsaW5lLgotICAgICAg
ICAgICAgaWYgKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCkgewotICAgICAgICAgICAgICAg
IC8vIFdlJ3ZlIGFscmVhZHkgYWRqdXN0ZWQgdGhlIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91
Z2ggdGhlIHBhcmVudCBpbmxpbmUgY29udGFpbmVyLiAKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAvLyAxLiBDb21wdXRlIGxpbmUgYm94IGhlaWdodC9hbGlnbm1lbnQgYmFzZWxpbmUg
YnkgcGxhY2luZyB0aGUgaW5saW5lIGJveGVzIHZlcnRpY2FsbHkuCisgICAgLy8gMi4gQWRqdXN0
IHRoZSBpbmxpbmUgYm94IHZlcnRpY2FsIHBvc2l0aW9uLgorICAgIGF1dG8mIHJvb3RTdHlsZSA9
IGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpLnN0eWxlKCk7CisgICAgYXV0byByZWNvbW1lbmRl
ZExpbmVCb3hIZWlnaHQgPSBXVEY6Ok9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKKyAg
ICBpZiAoIXJvb3RTdHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKQorICAgICAgICByZWNv
bW1lbmRlZExpbmVCb3hIZWlnaHQgPSByb290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisK
KyAgICBhdXRvIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Cisg
ICAgYXV0byBhbGlnbm1lbnRCYXNlbGluZSA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgIGF1
dG8gY29tcHV0ZUxpbmVCb3hIZWlnaHQgPSBbJl0oYXV0byYgaW5saW5lQm94LCBhdXRvIHRleHRB
bGlnbk1vZGUpIHsKKyAgICAgICAgc3dpdGNoICh0ZXh0QWxpZ25Nb2RlKSB7CisgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6IHsKKyAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVP
dmVyZmxvdyA9IGlubGluZUJveC5iYXNlbGluZSgpIC0gYWxpZ25tZW50QmFzZWxpbmU7CisgICAg
ICAgICAgICBpZiAoYmFzZWxpbmVPdmVyZmxvdyA+IDApIHsKKyAgICAgICAgICAgICAgICBjb250
ZW50TG9naWNhbEhlaWdodCArPSBiYXNlbGluZU92ZXJmbG93OworICAgICAgICAgICAgICAgIGFs
aWdubWVudEJhc2VsaW5lICs9IGJhc2VsaW5lT3ZlcmZsb3c7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhaykgewotICAgICAgICAgICAg
ICAgIC8vIGUuZyBkaXY+Zmlyc3QgdGV4dDwvZGl2PiBvciA8ZGl2PjxzcGFuPm5lc3RlZDxzcGFu
PmZpcnN0IGRpcmVjdCB0ZXh0PC9kaXY+LgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhayA9IHRy
dWU7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgaW4gcXVpcmtzIG1vZGUgd2hlcmUgdGhlIGZvbnQt
bWV0cmljcyBtaWdodCBjaGFuZ2UgdGhlIGxpbmUgbGluZSBoZWlnaHQvYmFzZWxpbmUgYW5kIHRo
aXMgaXMgdGhlIGZpcnN0IHRleHQgY29udGVudCBvbiB0aGUgbGluZQotICAgICAgICAgICAgLy8g
b3V0c2lkZSBvZiBhbiBpbmxpbmUgY29udGFpbmVyLgotICAgICAgICAgICAgYXV0byBoYWxmTGVh
ZGluZyA9IExpbmVCb3g6OmhhbGZMZWFkaW5nTWV0cmljcyhzdHlsZS5mb250TWV0cmljcygpLCBz
dHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzZXRBc2NlbnRJZkdyZWF0
ZXIoaGFsZkxlYWRpbmcuYXNjZW50KTsKLSAgICAgICAgICAgIHNldERlc2NlbnRJZkdyZWF0ZXIo
aGFsZkxlYWRpbmcuZGVzY2VudCk7Ci0gICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVh
dGVyKGhhbGZMZWFkaW5nLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKLSAgICAgICAgICAg
ICsraW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsOwotICAgICAgICAgICAgLy8gSW5saW5lIGNv
bnRhaW5lcnMgc3RyZXRjaCB0aGUgbGluZSBieSB0aGVpciBmb250IHNpemUuCi0gICAgICAgICAg
ICAvLyBWZXJ0aWNhbCBtYXJnaW5zLCBwYWRkaW5ncyBhbmQgYm9yZGVycyBkb24ndCBjb250cmli
dXRlIHRvIHRoZSBsaW5lIGhlaWdodC4KLSAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0g
c3R5bGUuZm9udE1ldHJpY3MoKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS52ZXJ0aWNhbEFsaWdu
KCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGhh
bGZMZWFkaW5nID0gTGluZUJveDo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBzdHls
ZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gQm90aCBoYWxmbGVh
ZGluZyBhc2NlbnQgYW5kIGRlc2NlbnQgY291bGQgYmUgbmVnYXRpdmUgKHRhbGwgZm9udCB2cy4g
c21hbGwgbGluZS1oZWlnaHQgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5n
LmRlc2NlbnQgPiAwKQotICAgICAgICAgICAgICAgICAgICBzZXREZXNjZW50SWZHcmVhdGVyKGhh
bGZMZWFkaW5nLmRlc2NlbnQpOwotICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2Nl
bnQgPiAwKQotICAgICAgICAgICAgICAgICAgICBzZXRBc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRp
bmcuYXNjZW50KTsKLSAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKGFz
Y2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKGZvbnRNZXRyaWNzLmhlaWdodCgpKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gVGFibGUgY2VsbHMsIGlubGlu
ZS1ibG9jayBib3hlcyBtYXkgc3RyZXRjaCB0aGUgbGluZSBiZXlvbmQgdGhlaXIgYmFzZWxpbmUu
CisgICAgICAgICAgICBhdXRvIGJlbG93QmFzZWxpbmUgPSBpbmxpbmVCb3guZGVzY2VudCgpLnZh
bHVlT3IoaW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUJveC5iYXNlbGluZSgpKTsK
KyAgICAgICAgICAgIGF1dG8gYmVsb3dCYXNlbGluZU92ZXJmbG93ID0gYmVsb3dCYXNlbGluZSAt
IChjb250ZW50TG9naWNhbEhlaWdodCAtIGFsaWdubWVudEJhc2VsaW5lKTsKKyAgICAgICAgICAg
IGlmIChiZWxvd0Jhc2VsaW5lT3ZlcmZsb3cgPiAwKQorICAgICAgICAgICAgICAgIGNvbnRlbnRM
b2dpY2FsSGVpZ2h0ICs9IGJlbG93QmFzZWxpbmVPdmVyZmxvdzsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGUgbGluZSdzIGJhc2VsaW5lIGFuZCBoZWlnaHQgaGF2ZSBhbHJlYWR5IGJl
ZW4gYWRqdXN0ZWQgYXQgQ29udGFpbmVyU3RhcnQuCi0gICAgICAgICAgICBBU1NFUlQoaW5saW5l
Q29udGFpbmVyTmVzdGluZ0xldmVsKTsKLSAgICAgICAgICAgIC0taW5saW5lQ29udGFpbmVyTmVz
dGluZ0xldmVsOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgVmVydGljYWxB
bGlnbjo6VG9wOiB7CisgICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0gaW5saW5lQm94LmxvZ2lj
YWxIZWlnaHQoKSAtIGNvbnRlbnRMb2dpY2FsSGVpZ2h0OworICAgICAgICAgICAgaWYgKG92ZXJm
bG93ID4gMCkKKyAgICAgICAgICAgICAgICBjb250ZW50TG9naWNhbEhlaWdodCArPSBvdmVyZmxv
dzsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5pc0Jv
eCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94
SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoc3R5bGUudmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2Fs
QWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGlu
ZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5saW5l
IGNvbnRlbnQgYWx3YXlzIGhhdmUgYmFzZWxpbmVzLgotICAgICAgICAgICAgICAgICAgICBhdXRv
JiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0
dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBpZiBp
dCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBmb3Jt
YXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJnaW5C
ZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICAgICAgICAgIHNldEFsaWdubWVudEJhc2VsaW5l
SWZHcmVhdGVyKGJlZm9yZUhlaWdodCArIGxhc3RMaW5lQm94LmJhc2VsaW5lKCkpOwotICAgICAg
ICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTm9uIGlu
bGluZS1ibG9jayBib3hlcyBzaXQgb24gdGhlIGJhc2VsaW5lIChpbmNsdWRpbmcgdGhlaXIgYm90
dG9tIG1hcmdpbikuCi0gICAgICAgICAgICAgICAgICAgIHNldEFzY2VudElmR3JlYXRlcihtYXJn
aW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgbmVnYXRpdmUgZGVz
Y2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50IGlzIGEgdGhpbmcpLgotICAgICAgICAgICAgICAg
ICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCArIHN0ZDo6bWF4
PElubGluZUxheW91dFVuaXQ+KDAsIGFzY2VudEFuZERlc2NlbnQoKS5kZXNjZW50KSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICAgICAgLy8gVG9w
IGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFzZWxpbmUsIGl0IG9ubHkgcHVzaGVz
IHRoZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBkb3duLgotICAgICAgICAgICAgICAgIHNl
dExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Ci0gICAg
ICAgICAgICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMgdGhlIGJh
c2VsaW5lIGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAgICAgICBh
dXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgICAg
IGlmIChtYXJnaW5Cb3hIZWlnaHQgPiBsaW5lTG9naWNhbEhlaWdodCkgewotICAgICAgICAgICAg
ICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKGFsaWdubWVudEJh
c2VsaW5lKCkgKyAobWFyZ2luQm94SGVpZ2h0IC0gbGluZUxvZ2ljYWxIZWlnaHQpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURf
WUVUKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6Qm90dG9tOiB7CisgICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0gaW5saW5lQm94LmxvZ2lj
YWxIZWlnaHQoKSAtIGNvbnRlbnRMb2dpY2FsSGVpZ2h0OworICAgICAgICAgICAgaWYgKG92ZXJm
bG93ID4gMCkgeworICAgICAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ICs9IG92ZXJm
bG93OworICAgICAgICAgICAgICAgIGFsaWdubWVudEJhc2VsaW5lICs9IG92ZXJmbG93OwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1F
TlRFRF9ZRVQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfTsKKworICAg
IGF1dG8gc2hvdWxkUm9vdElubGluZUJveFN0cmV0Y2hMaW5lQm94ID0gIXJlY29tbWVuZGVkTGlu
ZUJveEhlaWdodCAmJiAhbV9yb290SW5saW5lQm94LmlzVmlzdWFsbHlFbXB0eSgpOworICAgIGlm
IChzaG91bGRSb290SW5saW5lQm94U3RyZXRjaExpbmVCb3gpCisgICAgICAgIGNvbXB1dGVMaW5l
Qm94SGVpZ2h0KG1fcm9vdElubGluZUJveCwgVmVydGljYWxBbGlnbjo6QmFzZWxpbmUpOworICAg
IGZvciAoYXV0byYgaW5saW5lQm94RW50cnkgOiBtX2lubGluZUJveFJlY3RNYXApIHsKKyAgICAg
ICAgYXV0byYgaW5saW5lQm94ID0gKmlubGluZUJveEVudHJ5LnZhbHVlOworICAgICAgICBhdXRv
IHNob3VsZElubGluZUJveFN0cmV0Y2hMaW5lQm94ID0gIWlubGluZUJveC5pc1Zpc3VhbGx5RW1w
dHkoKSAmJiAoIXJlY29tbWVuZGVkTGluZUJveEhlaWdodCB8fCBpbmxpbmVCb3guaXNBdG9taWMo
KSk7CisgICAgICAgIGlmIChzaG91bGRJbmxpbmVCb3hTdHJldGNoTGluZUJveCkKKyAgICAgICAg
ICAgIGNvbXB1dGVMaW5lQm94SGVpZ2h0KGlubGluZUJveCwgaW5saW5lQm94RW50cnkua2V5LT5z
dHlsZSgpLnZlcnRpY2FsQWxpZ24oKSk7CiAgICAgfQotfQogCi1IYW5naW5nQ29udGVudCBMaW5l
Qm94Ojpjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3QKLXsKLSAgICBhdXRvIGhhbmdpbmdDb250
ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OwotICAgIGlmIChpc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCi0gICAgICAgIGhhbmdp
bmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6
bWFrZVJldmVyc2VkUmFuZ2UobV9ydW5zKSkgewotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVy
U3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIGhhbmdpbmdDb250
ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQorICAgIGF1dG8gbGlu
ZUJveExvZ2ljYWxIZWlnaHQgPSBzdGQ6Om1heChyZWNvbW1lbmRlZExpbmVCb3hIZWlnaHQudmFs
dWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSksIGNvbnRlbnRMb2dpY2FsSGVpZ2h0KTsKKyAgICBt
X3JlY3Quc2V0SGVpZ2h0KGxpbmVCb3hMb2dpY2FsSGVpZ2h0KTsKKworICAgIGF1dG8gYWRqdXN0
SW5saW5lQm94VG9wID0gWyZdKGF1dG8mIGlubGluZUJveCwgYXV0byB0ZXh0QWxpZ25Nb2RlKSB7
CisgICAgICAgIGF1dG8gaW5saW5lQm94TG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9
OworICAgICAgICBzd2l0Y2ggKHRleHRBbGlnbk1vZGUpIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNh
bEFsaWduOjpCYXNlbGluZToKKyAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBhbGln
bm1lbnRCYXNlbGluZSAtIGlubGluZUJveC5iYXNlbGluZSgpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNw
YWNlLgotICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6
OlByZVdyYXApCisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAgICAgICAgICAg
aW5saW5lQm94TG9naWNhbFRvcCA9IHsgfTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAv
LyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxp
bmcgd2hpdGVzcGFjZS4KLSAgICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFpbGlu
Z1doaXRlc3BhY2VXaWR0aCgpKTsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206
CisgICAgICAgICAgICBpbmxpbmVCb3hMb2dpY2FsVG9wID0gbG9naWNhbEJvdHRvbSgpIC0gaW5s
aW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2FsVG9wKGlu
bGluZUJveExvZ2ljYWxUb3ApOworICAgIH07CisKKyAgICBhZGp1c3RJbmxpbmVCb3hUb3AobV9y
b290SW5saW5lQm94LCBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSk7CisgICAgZm9yIChhdXRvJiBp
bmxpbmVCb3hFbnRyeSA6IG1faW5saW5lQm94UmVjdE1hcCkgeworICAgICAgICBhdXRvJiBsYXlv
dXRCb3ggPSAqaW5saW5lQm94RW50cnkua2V5OworICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSAq
aW5saW5lQm94RW50cnkudmFsdWU7CisgICAgICAgIGFkanVzdElubGluZUJveFRvcChpbmxpbmVC
b3gsIGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSk7CiAgICAgfQotICAgIHJldHVy
biBoYW5naW5nQ29udGVudDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCmluZGV4IGFiOTQ1ZDQ2MjJlNGJk
YWIxNTAzNGNhOWU5MTVlMGVmMWEwNjgzMmUuLmM2ZGZhOGNmYzhhMjQwYTBmZDgxYTVhNTBmNDhk
YjVlYzNkZWNmMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKQEAgLTMwLDM0ICszMCw1MSBAQAogI2luY2x1ZGUg
IkRpc3BsYXlCb3guaCIKICNpbmNsdWRlICJEaXNwbGF5SW5saW5lUmVjdC5oIgogI2luY2x1ZGUg
IklubGluZUxpbmVCdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKIGNsYXNzIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0Owotc3RydWN0IEhhbmdpbmdDb250ZW50OwotCi1zdHJ1Y3QgQXNj
ZW50QW5kRGVzY2VudCB7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBhc2NlbnQgKyBkZXNjZW50OyB9Ci0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGFzY2VudCB7
IDAgfTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQgeyAwIH07Ci19OwogCiBjbGFzcyBM
aW5lQm94IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdHJ1
Y3QgSW5saW5lQm94IHsKLSAgICAgICAgSW5saW5lQm94KGNvbnN0IERpc3BsYXk6OklubGluZVJl
Y3QmLCBjb25zdCBBc2NlbnRBbmREZXNjZW50JiwgY29uc3QgQm94Jik7Ci0KLSAgICAgICAgRGlz
cGxheTo6SW5saW5lUmVjdCByZWN0OwotICAgICAgICBBc2NlbnRBbmREZXNjZW50IGFzY2VudEFu
ZERlc2NlbnQ7Ci0gICAgICAgIGNvbnN0IEJveCYgbGF5b3V0Qm94OworICAgICAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lOTElORShJbmxpbmVCb3gpOworICAgIHB1YmxpYzoKKyAgICAgICAg
ZW51bSBjbGFzcyBJc1Zpc3VhbGx5RW1wdHkgeyBZZXMsIE5vIH07CisgICAgICAgIElubGluZUJv
eChjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiwgSW5saW5lTGF5b3V0VW5pdCBzeW50aGV0aWNC
YXNlbGluZSk7CisgICAgICAgIElubGluZUJveChjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0Jiwg
SW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSwgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50LCBJc1Zp
c3VhbGx5RW1wdHkpOworICAgICAgICBJbmxpbmVCb3goKSA9IGRlZmF1bHQ7CisKKyAgICAgICAg
Y29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2xvZ2ljYWxSZWN0OyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFRvcCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9wKCk7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QubGVmdCgpOyB9
CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsUmVjdC53aWR0aCgpOyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNh
bEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCk7IH0KKworICAg
ICAgICBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlbGlu
ZTsgfQorICAgICAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBkZXNjZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9kZXNjZW50OyB9CisKKyAgICAgICAgdm9pZCBzZXRMb2dpY2FsVG9wKElubGlu
ZUxheW91dFVuaXQgbG9naWNhbFRvcCkgeyBtX2xvZ2ljYWxSZWN0LnNldFRvcChsb2dpY2FsVG9w
KTsgfQorICAgICAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aCkgeyBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7IH0KKworICAg
ICAgICBib29sIGlzVmlzdWFsbHlFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWaXN1YWxseUVt
cHR5OyB9CisgICAgICAgIHZvaWQgc2V0SXNWaXN1YWxseU5vbkVtcHR5KCkgeyBtX2lzVmlzdWFs
bHlFbXB0eSA9IGZhbHNlOyB9CisgICAgICAgIGJvb2wgaXNBdG9taWMoKSBjb25zdCB7IHJldHVy
biBtX2lzQXRvbWljOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBEaXNwbGF5OjpJbmxpbmVS
ZWN0IG1fbG9naWNhbFJlY3Q7CisgICAgICAgIElubGluZUxheW91dFVuaXQgbV9iYXNlbGluZTsK
KyAgICAgICAgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gbV9kZXNjZW50OworICAgICAgICBi
b29sIG1faXNWaXN1YWxseUVtcHR5IHsgdHJ1ZSB9OworICAgICAgICBib29sIG1faXNBdG9taWMg
eyBmYWxzZSB9OwogICAgIH07CiAKICAgICBlbnVtIGNsYXNzIElzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudCB7IE5vLCBZZXMgfTsKICAgICBlbnVtIGNsYXNzIElzTGluZVZpc3VhbGx5RW1wdHkg
eyBObywgWWVzIH07Ci0gICAgTGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYs
IGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYs
IElzTGluZVZpc3VhbGx5RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAg
TGluZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IElubGluZUxheW91
dFBvaW50JiB0b3BMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgY29uc3QgTGlu
ZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQpOwogCiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdC5sZWZ0KCk7IH0KICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxS
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9CkBAIC02OSwxMTQgKzg2LDQz
IEBAIHB1YmxpYzoKICAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBsb2dpY2FsUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3Qm
IHNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZU92ZXJmbG93
OyB9CiAKLSAgICBzdGF0aWMgQXNjZW50QW5kRGVzY2VudCBoYWxmTGVhZGluZ01ldHJpY3MoY29u
c3QgRm9udE1ldHJpY3MmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KTsKLQot
ICAgIC8vIEFsaWdtZW50IGJhc2VsaW5lIGZyb20gbGluZSBsb2dpY2FsIHRvcC4KLSAgICAvLwot
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgbGluZSBsb2dpY2FsIHRvcCAgICAgLS0tLS0t
LS0tLS0tLS0tLS0tLSAodG9wIGFsaWduKQotICAgIC8vICAgICAgICAgICAgIF4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgotICAgIC8vICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgfAotICAgIC8v
ICAgXiAgICAgICAgIHwgYWxpZ25tZW50IGJhc2VsaW5lICAgICAgICAgICAgICAgfCAgICAgICAg
ICAgfCBhbGlnbm1lbnQgYmFzZWxpbmUKLSAgICAvLyAgIHwgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKLSAgICAvLyAgIHwgYXNjZW50ICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXNjZW50ICAgIHwKLSAgICAvLyAg
IHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAg
IHYKLSAgICAvLyAgIHYgICAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0gYmFzZWxpbmUKLSAgICAvLyAgIC0tLS0tLS0tLS0tLS0tLS0tIGJh
c2VsaW5lICAgICAgICAgICAgICAgICAgIF4KLSAgICAvLyAgIF4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGVzY2VudAotICAgIC8vICAgfCBkZXNjZW50ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgIGNvbnN0IElubGluZUJveCYg
aW5saW5lQm94Rm9yTGF5b3V0Qm94KGNvbnN0IEJveCYpIGNvbnN0OworICAgIERpc3BsYXk6Oklu
bGluZVJlY3QgaW5saW5lUmVjdEZvclRleHRSdW4oY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYpIGNv
bnN0OworCisgICAgLy8gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18gbGluZSBib3ggbG9naWNhbCB0b3AKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICBeCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fIHJvb3QgaW5saW5lIGJveAorICAgIC8vICAgXiAg
ICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgLy8g
ICB8IHJvb3QgbGluZSBhc2NlbnQgfAorICAgIC8vICAgfCAgICAgICAgICAgICAgICAgIHwKKyAg
ICAvLyAgIHYgICAgICAgICAgICAgICAgICB2CisgICAgLy8gICBfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gYWxpZ25tZW50IGJhc2VsaW5lCisgICAg
Ly8gICBeCisgICAgLy8gICB8IHJvb3QgbGluZSBkZXNjZW50CiAgICAgLy8gICB2Ci0gICAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLSAgICBsaW5lIGxvZ2ljYWwgYm90dG9tICAtLS0tLS0tLS0tLS0t
LS0tLS0tCi0gICAgSW5saW5lTGF5b3V0VW5pdCBhbGlnbm1lbnRCYXNlbGluZSgpIGNvbnN0Owot
Ci0gICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgcmVjdEZvclJ1bihjb25zdCBMaW5lQnVp
bGRlcjo6UnVuJikgY29uc3Q7CisgICAgLy8gICBfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXworICAgIC8vIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fIGxpbmUgYm94IGxvZ2ljYWwgYm90dG9tCisgICAgSW5saW5lTGF5b3V0VW5p
dCBhbGlnbm1lbnRCYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC5sb2dp
Y2FsVG9wKCkgKyBtX3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsgfQogCiBwcml2YXRlOgotICAg
IGNvbnN0IEFzY2VudEFuZERlc2NlbnQmIGFzY2VudEFuZERlc2NlbnQoKSBjb25zdCB7IHJldHVy
biBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2VudDsgfQotCi0gICAgdm9pZCBzZXRBbGln
bm1lbnRCYXNlbGluZUlmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldEFz
Y2VudElmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldERlc2NlbnRJZkdy
ZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVh
dGVyKElubGluZUxheW91dFVuaXQpOwotCi0gICAgdm9pZCBzZXRTY3JvbGxhYmxlT3ZlcmZsb3co
Y29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgcmVjdCkgeyBtX3Njcm9sbGFibGVPdmVyZmxvdyA9
IHJlY3Q7IH0KLQotICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICB2b2lkIGNv
bnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiwgSXNMaW5lVmlz
dWFsbHlFbXB0eSk7CiAgICAgdm9pZCBhbGlnblZlcnRpY2FsbHkoKTsKLSAgICB2b2lkIGFkanVz
dEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwotCi0gICAgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhh
bmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7CiAKICAgICBj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9CiAgICAgTGF5b3V0U3RhdGUmIGxh
eW91dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0
ZSgpOyB9CiAKIHByaXZhdGU6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faGFzVmFs
aWRBbGlnbm1lbnRCYXNlbGluZSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBjb25zdCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICBjb25zdCBM
aW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOwogICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9y
ZWN0OwogICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9zY3JvbGxhYmxlT3ZlcmZsb3c7Ci0gICAg
SW5saW5lTGF5b3V0VW5pdCBtX2FsaWdubWVudEJhc2VsaW5lIHsgMCB9OwotICAgIElubGluZUJv
eCBtX3Jvb3RJbmxpbmVCb3g7Ci0gICAgVmVjdG9yPElubGluZUJveD4gbV9pbmxpbmVCb3hMaXN0
OwotICAgIEhhc2hNYXA8Y29uc3QgTGluZUJ1aWxkZXI6OlJ1biosIHNpemVfdD4gbV9ydW5Ub0lu
bGluZUJveE1hcDsKLX07Ci0KLWlubGluZSBMaW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveChj
b25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiByZWN0LCBjb25zdCBBc2NlbnRBbmREZXNjZW50JiBh
c2NlbnRBbmREZXNjZW50LCBjb25zdCBCb3gmIGxheW91dEJveCkKLSAgICA6IHJlY3QocmVjdCkK
LSAgICAsIGFzY2VudEFuZERlc2NlbnQoYXNjZW50QW5kRGVzY2VudCkKLSAgICAsIGxheW91dEJv
eChsYXlvdXRCb3gpCi17Ci19CiAKLWlubGluZSB2b2lkIExpbmVCb3g6OnNldExvZ2ljYWxIZWln
aHRJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KQotewotICAgIGlmIChs
b2dpY2FsSGVpZ2h0IDw9IG1fcmVjdC5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
cmVjdC5zZXRIZWlnaHQobG9naWNhbEhlaWdodCk7Ci19Ci0KLWlubGluZSB2b2lkIExpbmVCb3g6
OnNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKElubGluZUxheW91dFVuaXQgYWxpZ25tZW50
QmFzZWxpbmUpCi17Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1ZhbGlkQWxpZ25tZW50
QmFzZWxpbmUgPSB0cnVlOwotI2VuZGlmCi0gICAgbV9hbGlnbm1lbnRCYXNlbGluZSA9IHN0ZDo6
bWF4KGFsaWdubWVudEJhc2VsaW5lLCBtX2FsaWdubWVudEJhc2VsaW5lKTsKLX0KLQotaW5saW5l
IHZvaWQgTGluZUJveDo6c2V0QXNjZW50SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQgYXNjZW50
KQotewotICAgIGlmIChhc2NlbnQgPCBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2VudC5h
c2NlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBzZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRl
cihhc2NlbnQpOwotICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50LmFzY2VudCA9
IGFzY2VudDsKLX0KLQotaW5saW5lIHZvaWQgTGluZUJveDo6c2V0RGVzY2VudElmR3JlYXRlcihJ
bmxpbmVMYXlvdXRVbml0IGRlc2NlbnQpCi17Ci0gICAgaWYgKGRlc2NlbnQgPCBtX3Jvb3RJbmxp
bmVCb3guYXNjZW50QW5kRGVzY2VudC5kZXNjZW50KQotICAgICAgICByZXR1cm47Ci0gICAgbV9y
b290SW5saW5lQm94LmFzY2VudEFuZERlc2NlbnQuZGVzY2VudCA9IGRlc2NlbnQ7Ci19Ci0KLWlu
bGluZSBJbmxpbmVMYXlvdXRVbml0IExpbmVCb3g6OmFsaWdubWVudEJhc2VsaW5lKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9oYXNWYWxpZEFsaWdubWVudEJhc2VsaW5lKTsKLSAgICByZXR1cm4g
bV9hbGlnbm1lbnRCYXNlbGluZTsKLX0KKyAgICBJbmxpbmVCb3ggbV9yb290SW5saW5lQm94Owog
Ci1pbmxpbmUgQXNjZW50QW5kRGVzY2VudCBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3MoY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2Fs
SGVpZ2h0KQotewotICAgIGF1dG8gYXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7Ci0gICAg
YXV0byBkZXNjZW50ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOwotICAgIC8vIDEwLjguMSBMZWFk
aW5nIGFuZCBoYWxmLWxlYWRpbmcKLSAgICBhdXRvIGhhbGZMZWFkaW5nID0gKGxpbmVMb2dpY2Fs
SGVpZ2h0IC0gKGFzY2VudCArIGRlc2NlbnQpKSAvIDI7Ci0gICAgLy8gSW5saW5lIHRyZWUgaGVp
Z2h0IGlzIGFsbCBpbnRlZ2VyIGJhc2VkLgotICAgIGF1dG8gYWRqdXN0ZWRBc2NlbnQgPSBzdGQ6
Om1heDxJbmxpbmVMYXlvdXRVbml0PihmbG9vcmYoYXNjZW50ICsgaGFsZkxlYWRpbmcpLCAwKTsK
LSAgICBhdXRvIGFkanVzdGVkRGVzY2VudCA9IHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGNl
aWxmKGRlc2NlbnQgKyBoYWxmTGVhZGluZyksIDApOwotICAgIHJldHVybiB7IGFkanVzdGVkQXNj
ZW50LCBhZGp1c3RlZERlc2NlbnQgfTsKLX0KKyAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0
PiBtX2xpbmVBbGlnbm1lbnRPZmZzZXQ7CisgICAgSGFzaE1hcDxjb25zdCBCb3gqLCBzdGQ6OnVu
aXF1ZV9wdHI8SW5saW5lQm94Pj4gbV9pbmxpbmVCb3hSZWN0TWFwOworICAgIGNvbnN0IElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworfTsKIAogfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IGVkM2MwNmZhOWE2YzI5ZWEwZGM5NTdhZGQ2
ODIwNGRmNjY4ODQ2ZDYuLmJmMDhiMzY1NWVkZmFlNmNhYzJmMjQ1MWY3ODg3YTY5ZWVjZTIzNjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTEwMCwxMCArMTAwLDE2IEBAIHZvaWQgTGlu
ZUJ1aWxkZXI6OmNsb3NlKCkKICAgICAgICAgaWYgKGF2YWlsYWJsZVdpZHRoID4gMCAmJiBleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50KSB7CiAgICAgICAgICAgICAvLyBEaXN0cmlidXRlIHRoZSBl
eHRyYSBzcGFjZS4KICAgICAgICAgICAgIGF1dG8gZXhwYW5zaW9uVG9EaXN0cmlidXRlID0gYXZh
aWxhYmxlV2lkdGggLyBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50OworICAgICAgICAgICAgYXV0
byBhY2N1bXVsYXRlZEV4cGFuc2lvbiA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAgICAgICAg
ICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgICAgICAgICAvLyBFeHBhbmQg
YW5kIG1vdmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KLSAgICAgICAgICAg
ICAgICBpZiAocnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJ1bi5zZXRIb3Jpem9udGFsRXhwYW5zaW9uKGV4cGFuc2lvblRvRGlzdHJpYnV0ZSAqIHJ1
bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOworICAgICAgICAgICAgICAgIC8vIEV4cGFu
ZCBhbmQgbW92ZSBydW5zIGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBhbnNpb24uCisgICAgICAgICAg
ICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworICAgICAg
ICAgICAgICAgIGlmIChydW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgeworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQocnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29tcHV0ZWRFeHBhbnNpb24gPSBleHBhbnNpb25Ub0Rpc3Ry
aWJ1dGUgKiBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOworICAgICAgICAgICAgICAg
ICAgICBydW4uc2V0SG9yaXpvbnRhbEV4cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7CisgICAg
ICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGNvbXB1dGVkRXhwYW5zaW9u
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5oCmluZGV4IDI1ZGUwOTdlY2NjNzhlODZkNzI4MmMwYTQ2NGU1M2JjODhl
NjAzOWYuLmM4NDViYzBiYzRlYmE3MTkzYWNjNzMyNjMzZWM0NzhkNzIyNGQ0ZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuaApAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxXaWR0aDsg
fQogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsTGVmdDsgfQorICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCgp
IGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0KCkgKyBsb2dpY2FsV2lkdGgoKTsgfQogCiAgICAg
ICAgIGNvbnN0IERpc3BsYXk6OlJ1bjo6RXhwYW5zaW9uJiBleHBhbnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX2V4cGFuc2lvbjsgfQogICAgICAgICBib29sIGhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50OyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407560</attachid>
            <date>2020-08-29 21:20:13 -0700</date>
            <delta_ts>2020-08-31 13:01:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215410-20200829212012.patch</filename>
            <type>text/plain</type>
            <size>56651</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Mjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTUzYmU2ZTk1ZWRmMDg4
ZjdlZjQ2N2E0MTJjZTFjNDMwMDAzNmYzNy4uMTNiMDQyNzQzNDJlZmNjZDM3MWJhNzQ5MzFjNDdm
ZTU4ZGUyZDU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIwLTA4LTI4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBGaW5hbGl6
ZSBJbmxpbmVCb3ggYWxpZ25tZW50IGluIExpbmVCb3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29tcGxldGVzIHRoZSBJbmxpbmVC
b3ggdHJhbnNpdGlvbi4KKworICAgICAgICBMaW5lQm94IG5vdyBoYXMgYSBkZWRpY2F0ZWQgcm9v
dCBpbmxpbmUgYm94IGFuZCBhZGRpdGlvbmFsIGlubGluZSBib3hlcyBhcyBuZWVkZWQuCisgICAg
ICAgIEJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYWxpZ25tZW50cyBhcmUgcGVyZm9ybWVk
IG9uIHRoZSBpbmxpbmUgYm94ZXMgYXMgb3Bwb3NlZCB0byBvbiB0aGUgcnVucy4KKworICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29uc3RyYWludHNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
UXVpcmtzOjppbml0aWFsTGluZUhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OmNvbGxlY3RIYW5naW5nQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Omhvcml6
b250YWxBbGlnbm1lbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYWxmTGVh
ZGluZ01ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVC
b3g6OklubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OkxpbmVC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjptX2lubGluZUZvcm1hdHRpbmdDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lQm94Rm9yTGF5b3V0
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lUmVj
dEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpj
b25zdHJ1Y3RJbmxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6
OmFsaWduVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnJl
Y3RGb3JSdW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94OjphbGlnbkhvcml6b250YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmNvbGxlY3RIYW5naW5nQ29udGVudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OkFz
Y2VudEFuZERlc2NlbnQ6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCb3g6OklubGluZUJveDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxMZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94Ojpsb2dpY2Fs
V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVC
b3g6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94OjpJbmxpbmVCb3g6OmJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJveDo6SW5saW5lQm94OjpkZXNjZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpzZXRMb2dpY2FsVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpzZXRMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmlzQXRvbWljSW5saW5l
TGV2ZWxCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxp
bmVCb3g6OnNldEhhc1N0cnV0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6
SW5saW5lQm94OjpoYXNTdHJ1dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCb3g6OmFsaWdubWVudEJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QXNjZW50QW5kRGVzY2VudDo6aGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJveDo6YXNjZW50QW5kRGVzY2VudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldFNjcm9sbGFibGVPdmVyZmxv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUJv
eDo6SW5saW5lQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eDo6c2V0TG9naWNhbEhlaWdodElmR3JlYXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCb3g6OnNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0QXNjZW50SWZHcmVhdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0RGVzY2Vu
dElmR3JlYXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6
OmhhbGZMZWFkaW5nTWV0cmljcyk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKwogMjAyMC0wOC0yOCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gU3RhcnQg
Y29uc3RydWN0aW5nIElubGluZUJveGVzIGZvciBpbmxpbmUgcnVucwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Rpc3BsYXl0cmVlL0Rpc3BsYXlJbmxpbmVSZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZVJlY3QuaAppbmRleCAy
N2JlMDhmZGEwNTZiOWM2MmQ0MGMyMDMxYjQ3YzYwMTU4NjcxZjcwLi41MjNlOGUwMTM1OGUyMjNi
OTA0MzU2MzZlYTM0MjdlNzQ4MWJkMWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZVJlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZGlzcGxheXRyZWUvRGlzcGxheUlubGluZVJlY3QuaApAQCAtNTgsNiArNTgsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIG1vdmVIb3Jpem9udGFsbHkoSW5saW5lTGF5b3V0VW5pdCk7CiAg
ICAgdm9pZCBtb3ZlVmVydGljYWxseShJbmxpbmVMYXlvdXRVbml0KTsKKyAgICB2b2lkIG1vdmVC
eShJbmxpbmVMYXlvdXRQb2ludCk7CiAKICAgICB2b2lkIGV4cGFuZChPcHRpb25hbDxJbmxpbmVM
YXlvdXRVbml0PiwgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4pOwogICAgIHZvaWQgZXhwYW5k
VG9Db250YWluKGNvbnN0IElubGluZVJlY3QmKTsKQEAgLTIzNiw2ICsyMzcsMTMgQEAgaW5saW5l
IHZvaWQgSW5saW5lUmVjdDo6bW92ZVZlcnRpY2FsbHkoSW5saW5lTGF5b3V0VW5pdCBvZmZzZXQp
CiAgICAgbV9yZWN0Lm1vdmUoSW5saW5lTGF5b3V0U2l6ZSB7IDAsIG9mZnNldCB9KTsKIH0KIAor
aW5saW5lIHZvaWQgSW5saW5lUmVjdDo6bW92ZUJ5KElubGluZUxheW91dFBvaW50IG9mZnNldCkK
K3sKKyAgICBBU1NFUlQobV9oYXNWYWxpZFRvcCk7CisgICAgQVNTRVJUKG1faGFzVmFsaWRMZWZ0
KTsKKyAgICBtX3JlY3QubW92ZUJ5KG9mZnNldCk7Cit9CisKIGlubGluZSB2b2lkIElubGluZVJl
Y3Q6OmV4cGFuZChPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB3aWR0aCwgT3B0aW9uYWw8SW5s
aW5lTGF5b3V0VW5pdD4gaGVpZ2h0KQogewogICAgIEFTU0VSVCghd2lkdGggfHwgbV9oYXNWYWxp
ZFdpZHRoKTsKQEAgLTI0NSw3ICsyNTMsMTMgQEAgaW5saW5lIHZvaWQgSW5saW5lUmVjdDo6ZXhw
YW5kKE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHdpZHRoLCBPcHRpb25hbDxJbmxpbmUKIAog
aW5saW5lIHZvaWQgSW5saW5lUmVjdDo6ZXhwYW5kVG9Db250YWluKGNvbnN0IElubGluZVJlY3Qm
IG90aGVyKQogewotICAgIG1fcmVjdCA9IHVuaW9uUmVjdChvdGhlciwgbV9yZWN0KTsKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgIG1faGFzVmFsaWRUb3AgPSB0cnVlOworICAgIG1faGFzVmFsaWRM
ZWZ0ID0gdHJ1ZTsKKyAgICBtX2hhc1ZhbGlkV2lkdGggPSB0cnVlOworICAgIG1faGFzVmFsaWRI
ZWlnaHQgPSB0cnVlOworI2VuZGlmCisgICAgbV9yZWN0LnVuaXRlRXZlbklmRW1wdHkob3RoZXIp
OwogfQogCiBpbmxpbmUgdm9pZCBJbmxpbmVSZWN0OjpleHBhbmRWZXJ0aWNhbGx5VG9Db250YWlu
KGNvbnN0IElubGluZVJlY3QmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
Y3BwCmluZGV4IGJjNDM5ZjBkNTQwODMzZTJiOTVlNWIwYmIwNTlmNjRkZDViMjU5NGQuLjc2ZTc2
ZjI0ZWEwMjRlOTk2OGVlMDk1OWVhZWJmYjU2YjA5MjkwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5jcHAKQEAgLTE2Nyw4ICsxNjcsMTAgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVMYXlv
dXRDb24KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSgpOwogICAgICAgICBs
aW5lLmNsb3NlKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0gICAgICAgIGF1dG8gbGlu
ZVJlY3QgPSBEaXNwbGF5OjpJbmxpbmVSZWN0IHsgbGluZUNvbnN0cmFpbnRzLmxvZ2ljYWxUb3BM
ZWZ0LCBsaW5lLmxpbmVMb2dpY2FsV2lkdGgoKSwgbGluZUNvbnN0cmFpbnRzLmxpbmVIZWlnaHR9
OwotICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94IHsgKnRoaXMsIGxpbmVSZWN0LCBsaW5l
Q29udGVudC5ydW5zLCBsaW5lLmlzVmlzdWFsbHlFbXB0eSgpID8gTGluZUJveDo6SXNMaW5lVmlz
dWFsbHlFbXB0eTo6WWVzIDogTGluZUJveDo6SXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm8sIGlzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCA/IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29u
dGVudDo6WWVzIDogTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObyB9Owor
CisgICAgICAgIGF1dG8gbGluZUlzVmlzdWFsbHlFbXB0eSA9IGxpbmUuaXNWaXN1YWxseUVtcHR5
KCkgPyBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMgOiBMaW5lQm94OjpJc0xpbmVW
aXN1YWxseUVtcHR5OjpObzsKKyAgICAgICAgYXV0byBsYXN0TGluZSA9IGlzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCA/IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVz
IDogTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKKyAgICAgICAgYXV0
byBsaW5lQm94ID0gTGluZUJveCB7ICp0aGlzLCBsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExl
ZnQsIGxpbmUubGluZUxvZ2ljYWxXaWR0aCgpLCBsaW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKSwg
bGluZUNvbnRlbnQucnVucywgbGluZUlzVmlzdWFsbHlFbXB0eSwgbGFzdExpbmV9OwogICAgICAg
ICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxpbmVDb250ZW50LCBsaW5lQm94LCBjb25zdHJhaW50
cy5ob3Jpem9udGFsKTsKIAogICAgICAgICBpZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgp
KSB7CkBAIC00MTcsMTQgKzQxOSwxMyBAQCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUNv
bnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb25zdHJhaW50c0ZvcgogewogICAg
IGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0
OwogICAgIGF1dG8gbGluZUxvZ2ljYWxSaWdodCA9IGxpbmVMb2dpY2FsTGVmdCArIGhvcml6b250
YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0gICAgYXV0byBpbml0aWFsTGluZUhlaWdodCA9
IHF1aXJrcygpLmluaXRpYWxMaW5lSGVpZ2h0KHJvb3QoKSk7CiAgICAgYXV0byBsaW5lSXNDb25z
dHJhaW5lZEJ5RmxvYXQgPSBmYWxzZTsKIAogICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxv
YXRpbmdDb250ZXh0IHsgcm9vdCgpLCAqdGhpcywgZm9ybWF0dGluZ1N0YXRlKCkuZmxvYXRpbmdT
dGF0ZSgpIH07CiAgICAgLy8gQ2hlY2sgZm9yIGludHJ1ZGluZyBmbG9hdHMgYW5kIGFkanVzdCBs
b2dpY2FsIGxlZnQvYXZhaWxhYmxlIHdpZHRoIGZvciB0aGlzIGxpbmUgYWNjb3JkaW5nbHkuCiAg
ICAgaWYgKCFmbG9hdGluZ0NvbnRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3IgdmFyaWFibGUgbGluZSBoZWlnaHQsIHdoZXJlIHRoZSBpbnRydXNpdmUg
ZmxvYXRzIHNob3VsZCBiZSBwcm9iZWQgYXMgdGhlIGxpbmUgaGVpZ2h0IGdyb3dzLgotICAgICAg
ICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWludHModG9M
YXlvdXRVbml0KGxpbmVMb2dpY2FsVG9wKSwgdG9MYXlvdXRVbml0KGxpbmVMb2dpY2FsVG9wICsg
aW5pdGlhbExpbmVIZWlnaHQpKTsKKyAgICAgICAgYXV0byBmbG9hdENvbnN0cmFpbnRzID0gZmxv
YXRpbmdDb250ZXh0LmNvbnN0cmFpbnRzKHRvTGF5b3V0VW5pdChsaW5lTG9naWNhbFRvcCksIHRv
TGF5b3V0VW5pdChsaW5lTG9naWNhbFRvcCArIHF1aXJrcygpLmluaXRpYWxMaW5lSGVpZ2h0KCkp
KTsKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlc2UgY29uc3RyYWludHMgYWN0dWFsbHkgcHV0IGxp
bWl0YXRpb24gb24gdGhlIGxpbmUuCiAgICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQg
JiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54IDw9IGxpbmVMb2dpY2FsTGVmdCkKICAgICAgICAg
ICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9IHsgfTsKQEAgLTQ4MCw3ICs0ODEsNyBAQCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZUNvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250
ZXh0Ojpjb25zdHJhaW50c0ZvcgogICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5jb21wdXRlZFRl
eHRJbmRlbnQocm9vdCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKS52YWx1ZU9yKElubGluZUxheW91
dFVuaXQgeyB9KTsKICAgICB9OwogICAgIGxpbmVMb2dpY2FsTGVmdCArPSBjb21wdXRlZFRleHRJ
bmRlbnQoKTsKLSAgICByZXR1cm4gTGluZUNvbnN0cmFpbnRzIHsgeyBsaW5lTG9naWNhbExlZnQs
IGxpbmVMb2dpY2FsVG9wIH0sIGxpbmVMb2dpY2FsUmlnaHQgLSBsaW5lTG9naWNhbExlZnQsIGlu
aXRpYWxMaW5lSGVpZ2h0LCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgfTsKKyAgICByZXR1cm4g
TGluZUNvbnN0cmFpbnRzIHsgeyBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsVG9wIH0sIGxp
bmVMb2dpY2FsUmlnaHQgLSBsaW5lTG9naWNhbExlZnQsIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9h
dCB9OwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNG
b3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQs
IGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9y
aXpvbnRhbENvbnN0cmFpbnRzKQpAQCAtNTEwLDE2ICs1MTEsMTMgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29u
dGV4dDo6TGkKICAgICBhdXRvJiBpbmxpbmVDb250ZW50ID0gZm9ybWF0dGluZ1N0YXRlLmVuc3Vy
ZURpc3BsYXlJbmxpbmVDb250ZW50KCk7CiAgICAgYXV0byBsaW5lSW5kZXggPSBpbmxpbmVDb250
ZW50LmxpbmVCb3hlcy5zaXplKCk7CiAgICAgYXV0byBsaW5lSW5rT3ZlcmZsb3cgPSBsaW5lQm94
LnNjcm9sbGFibGVPdmVyZmxvdygpOwotICAgIC8vIENvbXB1dGUgYm94IGZpbmFsIGdlb21ldHJ5
LgorICAgIC8vIENvbXB1dGUgZmluYWwgYm94IGdlb21ldHJ5LgogICAgIGZvciAoYXV0byYgbGlu
ZVJ1biA6IGxpbmVDb250ZW50LnJ1bnMpIHsKLSAgICAgICAgYXV0byYgbG9naWNhbFJlY3QgPSBs
aW5lQm94LnJlY3RGb3JSdW4obGluZVJ1bik7CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGxp
bmVSdW4ubGF5b3V0Qm94KCk7Ci0KLSAgICAgICAgLy8gQWRkIGZpbmFsIGRpc3BsYXkgcnVucyB0
byBzdGF0ZSBmaXJzdC4KICAgICAgICAgLy8gSW5saW5lIGxldmVsIGNvbnRhaW5lcnMgKDxzcGFu
PikgZG9uJ3QgZ2VuZXJhdGUgZGlzcGxheSBydW5zIGFuZCBuZWl0aGVyIGRvIGNvbXBsZXRlbHkg
Y29sbGFwc2VkIHJ1bnMuCi0gICAgICAgIGF1dG8gaW5pdGlhdGVzSW5saW5lUnVuID0gIWxpbmVS
dW4uaXNDb250YWluZXJTdGFydCgpICYmICFsaW5lUnVuLmlzQ29udGFpbmVyRW5kKCk7CisgICAg
ICAgIGF1dG8gaW5pdGlhdGVzSW5saW5lUnVuID0gbGluZVJ1bi5pc1RleHQoKSB8fCBsaW5lUnVu
LmlzTGluZUJyZWFrKCkgfHwgbGluZVJ1bi5pc0JveCgpOwogICAgICAgICBpZiAoaW5pdGlhdGVz
SW5saW5lUnVuKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXB1dGVkSW5rT3ZlcmZsb3cgPSBbJl0g
eworICAgICAgICAgICAgYXV0byBjb21wdXRlZElua092ZXJmbG93ID0gWyZdIChjb25zdCBhdXRv
JiBsb2dpY2FsUmVjdCkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igbm9uLXRleHQgaW5rIG92ZXJmbG93LgogICAgICAgICAgICAgICAgIGlmICghbGluZVJ1bi5p
c1RleHQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2ljYWxSZWN0OwpAQCAtNTM1
LDUzICs1MzMsMzMgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0RGlzcGxheUJv
eGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGkKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGlua092ZXJmbG93OwogICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgIGF1dG8gaW5rT3ZlcmZsb3cgPSBjb21wdXRlZElua092ZXJmbG93KCk7CisgICAg
ICAgICAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gbGluZVJ1bi5pc0JveCgpID8gbGluZUJveC5pbmxp
bmVCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5sb2dpY2FsUmVjdCgpIDogbGluZUJveC5pbmxp
bmVSZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKTsKKyAgICAgICAgICAgIC8vIElubGluZSBib3hlcyBh
cmUgcmVsYXRpdmUgdG8gdGhlIGxpbmUgYm94IHdoaWxlIGZpbmFsIERpc3BsYXk6OlJ1bnMgbmVl
ZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgcGFyZW50IERpc3BsYXk6Qm94CisgICAgICAgICAgICAv
LyBGSVhNRTogU2hvdWxkbid0IHdlIGp1c3QgbGVhdmUgdGhlbSBiZSByZWxhdGl2ZSB0byB0aGUg
bGluZSBib3g/CisgICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlQnkoeyBsaW5lQm94LmxvZ2lj
YWxMZWZ0KCksIGxpbmVCb3gubG9naWNhbFRvcCgpIH0pOworICAgICAgICAgICAgYXV0byBpbmtP
dmVyZmxvdyA9IGNvbXB1dGVkSW5rT3ZlcmZsb3cobG9naWNhbFJlY3QpOwogICAgICAgICAgICAg
bGluZUlua092ZXJmbG93LmV4cGFuZFRvQ29udGFpbihpbmtPdmVyZmxvdyk7Ci0gICAgICAgICAg
ICBpbmxpbmVDb250ZW50LnJ1bnMuYXBwZW5kKHsgbGluZUluZGV4LCBsaW5lUnVuLmxheW91dEJv
eCgpLCBsb2dpY2FsUmVjdCwgaW5rT3ZlcmZsb3csIGxpbmVSdW4uZXhwYW5zaW9uKCksIGxpbmVS
dW4udGV4dENvbnRlbnQoKSB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsaW5lUnVuLmlz
VGV4dCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGxpbmVSdW4uaXNM
aW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFNpbmNlIDxicj4gYW5kIDx3YnI+
IHJ1bnMgaGF2ZSBhc3NvY2lhdGVkIERPTSBlbGVtZW50cywgd2UgbWlnaHQgbmVlZCB0byBjb25z
dHJ1Y3QgYSBkaXNwbGF5IGJveCBoZXJlLiAKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgaW5saW5lQ29udGVudC5ydW5zLmFwcGVuZCh7IGxpbmVJbmRleCwgbGF5b3V0Qm94LCBs
b2dpY2FsUmVjdCwgaW5rT3ZlcmZsb3csIGxpbmVSdW4uZXhwYW5zaW9uKCksIGxpbmVSdW4udGV4
dENvbnRlbnQoKSB9KTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIElubGluZSBsZXZlbCBib3gg
KHJlcGxhY2VkIG9yIGlubGluZS1ibG9jaykKLSAgICAgICAgaWYgKGxpbmVSdW4uaXNCb3goKSkg
ewotICAgICAgICAgICAgYXV0byB0b3BMZWZ0ID0gbG9naWNhbFJlY3QudG9wTGVmdCgpOworICAg
ICAgICAvLyBDcmVhdGUgZGlzcGxheSBib3hlcy4KKyAgICAgICAgLy8gRklYTUU6IFNpbmNlIDxi
cj4gYW5kIDx3YnI+IHJ1bnMgaGF2ZSBhc3NvY2lhdGVkIERPTSBlbGVtZW50cywgd2UgbWlnaHQg
bmVlZCB0byBjb25zdHJ1Y3QgYSBkaXNwbGF5IGJveCBoZXJlLiAKKyAgICAgICAgYXV0byBpbml0
aWF0ZXNEaXNwbGF5Qm94ID0gbGluZVJ1bi5pc0JveCgpIHx8IGxpbmVSdW4uaXNDb250YWluZXJT
dGFydCgpOworICAgICAgICBpZiAoaW5pdGlhdGVzRGlzcGxheUJveCkgeworICAgICAgICAgICAg
YXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGxheW91dEJveCk7
CisgICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUJveEZvckxheW91
dEJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgYXV0byB0b3BMZWZ0ID0gaW5saW5lQm94Lmxv
Z2ljYWxSZWN0KCkudG9wTGVmdCgpOwogICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0luRmxv
d1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICB0b3BMZWZ0ICs9IGdlb21ldHJ5KCkuaW5G
bG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzKTsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlz
cGxheUJveChsYXlvdXRCb3gpOwogICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KHRv
TGF5b3V0UG9pbnQodG9wTGVmdCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVyIHN0YXJ0ICg8c3Bhbj4pCi0gICAg
ICAgIGlmIChsaW5lUnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgYXV0byYg
ZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGxheW91dEJveCk7Ci0gICAg
ICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQodG9MYXlvdXRQb2ludChsb2dpY2FsUmVjdC50
b3BMZWZ0KCkpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gSW5saW5lIGxldmVsIGNvbnRhaW5lciBlbmQgKDwvc3Bhbj4pCi0gICAgICAgIGlmIChsaW5l
UnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nU3RhdGUuZGlzcGxheUJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgaWYgKGxh
eW91dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gaW5m
bG93T2Zmc2V0ID0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQobGF5
b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgICAgICAgICAgICAgIGRpc3BsYXlC
b3gubW92ZUhvcml6b250YWxseShpbmZsb3dPZmZzZXQud2lkdGgoKSk7Ci0gICAgICAgICAgICAg
ICAgZGlzcGxheUJveC5tb3ZlVmVydGljYWxseShpbmZsb3dPZmZzZXQuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgaWYgKGxpbmVSdW4uaXNDb250YWluZXJTdGFydCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBtYXJnaW5Cb3hXaWR0aCA9IGlubGluZUJveC5sb2dpY2FsV2lkdGgoKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGNvbnRlbnRCb3hXaWR0aCA9IG1hcmdpbkJveFdpZHRoIC0gKGRpc3Bs
YXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJv
eC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBG
aXggaXQgZm9yIG11bHRpbGluZS4KKyAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRl
bnRCb3hXaWR0aCh0b0xheW91dFVuaXQoY29udGVudEJveFdpZHRoKSk7CisgICAgICAgICAgICAg
ICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KHRvTGF5b3V0VW5pdChpbmxpbmVCb3gu
bG9naWNhbEhlaWdodCgpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIG1hcmdp
bkJveFdpZHRoID0gbG9naWNhbFJlY3QubGVmdCgpIC0gZGlzcGxheUJveC5sZWZ0KCk7Ci0gICAg
ICAgICAgICBhdXRvIGNvbnRlbnRCb3hXaWR0aCA9IG1hcmdpbkJveFdpZHRoIC0gKGRpc3BsYXlC
b3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlzcGxheUJveC5w
YWRkaW5nTGVmdCgpLnZhbHVlT3IoMCkpOwotICAgICAgICAgICAgLy8gRklYTUUgZml4IGl0IGZv
ciBtdWx0aWxpbmUuCi0gICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aCh0
b0xheW91dFVuaXQoY29udGVudEJveFdpZHRoKSk7Ci0gICAgICAgICAgICBkaXNwbGF5Qm94LnNl
dENvbnRlbnRCb3hIZWlnaHQodG9MYXlvdXRVbml0KGxvZ2ljYWxSZWN0LmhlaWdodCgpKSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KICAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGUgbG9naWNhbCB0
byBwaHlzaWNhbCB0cmFuc2xhdGUgc2hvdWxkIGhhcHBlbi4KICAgICBpbmxpbmVDb250ZW50Lmxp
bmVCb3hlcy5hcHBlbmQoeyBsaW5lQm94LmxvZ2ljYWxSZWN0KCksIGxpbmVCb3guc2Nyb2xsYWJs
ZU92ZXJmbG93KCksIGxpbmVJbmtPdmVyZmxvdywgbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgp
IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggNGEyYzEzN2FkY2RlZTc0
ZThmNDQzNzYzMGQ5MDZlZjMzNDZkZjEzOC4uODE3YWNlYjMyNzdhMGY0MDJlZTQzZGY1MTlhYTQx
NzYyZjJhYzkwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC00NiwxMyAr
NDYsMTAgQEAgcHVibGljOgogICAgIElubGluZUZvcm1hdHRpbmdDb250ZXh0KGNvbnN0IENvbnRh
aW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmKTsK
ICAgICB2b2lkIGxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmLCBjb25zdCBD
b25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKLSAgICBJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cygpIG92ZXJyaWRlOwotCiAgICAgY2xhc3MgUXVpcmtzIDogcHVibGljIEZvcm1hdHRpbmdDb250
ZXh0OjpRdWlya3MgewogICAgIHB1YmxpYzoKICAgICAgICAgYm9vbCBsaW5lRGVzY2VudE5lZWRz
Q29sbGFwc2luZyhjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYpIGNvbnN0OwotICAgICAgICBJ
bmxpbmVMYXlvdXRVbml0IGluaXRpYWxMaW5lSGVpZ2h0KGNvbnN0IENvbnRhaW5lckJveCYgZm9y
bWF0dGluZ1Jvb3QpIGNvbnN0OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGluaXRpYWxMaW5l
SGVpZ2h0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ7CkBAIC02Myw2ICs2MCw5IEBAIHByaXZhdGU6CiAgICAgfTsK
ICAgICBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzIHF1aXJrcygpIGNvbnN0IHsgcmV0
dXJuIFF1aXJrcygqdGhpcyk7IH0KIAorcHJpdmF0ZToKKyAgICBJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJyaWRlOworCiAg
ICAgY2xhc3MgR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gaW5saW5lQmxvY2tI
ZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwg
Y29uc3QgT3ZlcnJpZGVWZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwpAQCAtOTEsNyArOTEsNiBAQCBw
cml2YXRlOgogICAgIHN0cnVjdCBMaW5lQ29uc3RyYWludHMgewogICAgICAgICBJbmxpbmVMYXlv
dXRQb2ludCBsb2dpY2FsVG9wTGVmdDsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbGluZUhlaWdo
dCB7IDAgfTsKICAgICAgICAgYm9vbCBsaW5lSXNDb25zdHJhaW5lZEJ5RmxvYXQgeyBmYWxzZSB9
OwogICAgIH07CiAgICAgTGluZUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzRm9yTGluZShjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsVG9wKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAppbmRleCAwZDNl
MDM2MmYwNjkwMjg2ZDRiNmQ1MDY0Yjc4OTg4ZTMwZmQ0YTkxLi4wMTdiYzdkNDBlMzQwYzExZmE2
MGU2OWIwMjAwNTFiOGQ1MzI1NGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHRRdWlya3MuY3BwCkBAIC03MCwxMyArNzAsMTMgQEAgYm9vbCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6UXVpcmtzOjpsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhjb25zdCBMaW5lQnVp
bGQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6UXVpcmtzOjppbml0aWFsTGluZUhlaWdodChjb25zdCBDb250YWluZXJCb3gm
IGZvcm1hdHRpbmdSb290KSBjb25zdAorSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6UXVpcmtzOjppbml0aWFsTGluZUhlaWdodCgpIGNvbnN0CiB7Ci0gICAgSW5saW5l
TGF5b3V0VW5pdCBjb21wdXRlZExpbmVIZWlnaHQgPSBmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmNv
bXB1dGVkTGluZUhlaWdodCgpOwogICAgIC8vIE5lZ2F0aXZlIGxpbmVIZWlnaHQgdmFsdWUgbWVh
bnMgdGhlIGxpbmUtaGVpZ2h0IGlzIG5vdCBzZXQKLSAgICBpZiAobGF5b3V0U3RhdGUoKS5pbk5v
UXVpcmtzTW9kZSgpIHx8ICFmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmxpbmVIZWlnaHQoKS5pc05l
Z2F0aXZlKCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlZExpbmVIZWlnaHQ7Ci0gICAgcmV0dXJu
IExpbmVCb3g6OmhhbGZMZWFkaW5nTWV0cmljcyhmb3JtYXR0aW5nUm9vdC5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCksIGNvbXB1dGVkTGluZUhlaWdodCkuaGVpZ2h0KCk7CisgICAgYXV0byYgcm9vdCA9
IGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpOworICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluTm9R
dWlya3NNb2RlKCkgfHwgIXJvb3Quc3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKQor
ICAgICAgICByZXR1cm4gcm9vdC5zdHlsZSgpLmNvbXB1dGVkTGluZUhlaWdodCgpOworICAgIHJl
dHVybiByb290LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5mbG9hdEhlaWdodCgpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCb3guY3BwCmluZGV4IDYwYjIzY2FkMTRkMzg4ZjQ5ZGE1YzZhNzkzMmY0Y2FlZWNhZDgx
MmEuLmY0MDc5ZjE1MTAyOGQxZTA3NzM1YTcxYTEwOWYxYWMxZDA2ZjQwNGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVC
b3guY3BwCkBAIC0zMSw2ICszMSwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNl
IExheW91dCB7CiAKK3N0cnVjdCBBc2NlbnRBbmREZXNjZW50IHsKKyAgICBJbmxpbmVMYXlvdXRV
bml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGFzY2VudCArIGRlc2NlbnQ7IH0KKworICAgIElu
bGluZUxheW91dFVuaXQgYXNjZW50IHsgMCB9OworICAgIElubGluZUxheW91dFVuaXQgZGVzY2Vu
dCB7IDAgfTsKK307CisKIHN0cnVjdCBIYW5naW5nQ29udGVudCB7CiBwdWJsaWM6CiAgICAgdm9p
ZCByZXNldCgpOwpAQCAtNTIsMTM5ICs1OSwxNTcgQEAgdm9pZCBIYW5naW5nQ29udGVudDo6cmVz
ZXQoKQogICAgIG1fd2lkdGggPSAgMDsKIH0KIAotTGluZUJveDo6TGluZUJveChjb25zdCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IERpc3Bs
YXk6OklubGluZVJlY3QmIGxpbmVSZWN0LCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVu
cywgSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotICAgIDogbV9pbmxp
bmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKLSAgICAsIG1fcnVu
cyhydW5zKQotICAgICwgbV9yZWN0KGxpbmVSZWN0KQotICAgICwgbV9zY3JvbGxhYmxlT3ZlcmZs
b3cobGluZVJlY3QpCi0gICAgLCBtX3Jvb3RJbmxpbmVCb3goSW5saW5lQm94IHsgbGluZVJlY3Qs
IHsgfSwgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQucm9vdCgpIH0pCitzdGF0aWMgSGFuZ2luZ0Nv
bnRlbnQgY29sbGVjdEhhbmdpbmdDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBy
dW5zLCBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJ
bmxpbmVDb250ZW50KQogewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9oYXNWYWxpZEFsaWdu
bWVudEJhc2VsaW5lID0gdHJ1ZTsKLSNlbmRpZgotICAgIGF1dG8mIHJvb3RTdHlsZSA9IGlubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LnJvb3QoKS5zdHlsZSgpOwotICAgIGF1dG8gaGFsZkxlYWRpbmdN
ZXRyaWNzID0gdGhpcy0+aGFsZkxlYWRpbmdNZXRyaWNzKHJvb3RTdHlsZS5mb250TWV0cmljcygp
LCBsaW5lUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVz
Y2VudCA9IGhhbGZMZWFkaW5nTWV0cmljczsKLSAgICBtX2FsaWdubWVudEJhc2VsaW5lID0gaGFs
ZkxlYWRpbmdNZXRyaWNzLmFzY2VudDsKLQotICAgIGF1dG8gY29udGVudExvZ2ljYWxXaWR0aCA9
IElubGluZUxheW91dFVuaXQgeyB9OwotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0g
ICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gWyZdKCkgLT4gSW5saW5lTGF5b3V0VW5pdCB7Ci0gICAg
ICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNzKCk7Ci0g
ICAgICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQotICAgICAgICAgICAgaWYg
KHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgICAgICAgICBhdXRv
JiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7Ci0gICAgICAgICAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGlubGluZUZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7
Ci0gICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBsYXlvdXRCb3gu
aXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0
cnkuY29udGVudEJveEhlaWdodCgpOwotCi0gICAgICAgICAgICAvLyBOb24tcmVwbGFjZWQgaW5s
aW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spLiBJdCBsb29rcyBhIGJpdCBtaXNsZWFkaW5nIGJ1
dCB0aGVpciBtYXJnaW4gYm94IGlzIGNvbnNpZGVyZWQgdGhlIGNvbnRlbnQgaGVpZ2h0IGhlcmUu
Ci0gICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci0gICAg
ICAgIH07Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeS4gRG8gbm90IG1ha2Ug
YW4gaW5saW5lIGJveCBmb3IgZWFjaCBydW4uCi0gICAgICAgIG1faW5saW5lQm94TGlzdC5hcHBl
bmQoSW5saW5lQm94IHsgeyAwLCBydW4ubG9naWNhbExlZnQoKSwgcnVuLmxvZ2ljYWxXaWR0aCgp
LCBydW5IZWlnaHQoKSB9LCBoYWxmTGVhZGluZ01ldHJpY3MsIHJ1bi5sYXlvdXRCb3goKSB9KTsK
LSAgICAgICAgbV9ydW5Ub0lubGluZUJveE1hcC5zZXQoJnJ1biwgbV9pbmxpbmVCb3hMaXN0LnNp
emUoKSAtIDEpOwotICAgICAgICBjb250ZW50TG9naWNhbFdpZHRoICs9IHJ1bi5sb2dpY2FsV2lk
dGgoKTsKLSAgICB9Ci0gICAgbV9zY3JvbGxhYmxlT3ZlcmZsb3cuc2V0V2lkdGgoc3RkOjptYXgo
bGluZVJlY3Qud2lkdGgoKSwgY29udGVudExvZ2ljYWxXaWR0aCkpOwotICAgIGFsaWduVmVydGlj
YWxseSgpOwotICAgIGFsaWduSG9yaXpvbnRhbGx5KGxpbmVSZWN0LndpZHRoKCkgLSBjb250ZW50
TG9naWNhbFdpZHRoLCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOwotCi0gICAgaWYgKGlz
TGluZVZpc3VhbGx5RW1wdHkgPT0gSXNMaW5lVmlzdWFsbHlFbXB0eTo6WWVzKSB7Ci0gICAgICAg
IG1fcmVjdC5zZXRIZWlnaHQoeyB9KTsKLSAgICAgICAgbV9yb290SW5saW5lQm94LmFzY2VudEFu
ZERlc2NlbnQgPSB7IH07CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IEhhbmdpbmdDb250ZW50
IHsgfTsKKyAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IExpbmVCb3g6Oklz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICBoYW5naW5nQ29udGVudC5z
ZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNl
ZFJhbmdlKHJ1bnMpKSB7CisgICAgICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1
bi5pc0NvbnRhaW5lckVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChy
dW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgaGFuZ2luZ0NvbnRlbnQuc2V0SXNDb25k
aXRpb25hbCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFydW4uaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHByZXNlcnZlZCBvciBodW5nIHdoaXRlc3BhY2UuCisg
ICAgICAgIGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNlKCkgIT0gV2hpdGVTcGFjZTo6UHJlV3Jh
cCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1h
bCBvciBjb25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAg
aGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpKTsKICAg
ICB9CisgICAgcmV0dXJuIGhhbmdpbmdDb250ZW50OwogfQogCi12b2lkIExpbmVCb3g6OmFsaWdu
SG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgsIElzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQorc3RhdGljIE9wdGlvbmFsPElubGluZUxheW91
dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxp
c3QmIHJ1bnMsIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVM
b2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHQsIExpbmVC
b3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQogewotICAgIGF1dG8g
aGFuZ2luZ0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoaXNMYXN0TGluZSk7CisgICAg
YXV0byBhdmFpbGFibGVXaWR0aCA9IGxpbmVMb2dpY2FsV2lkdGggLSBjb250ZW50TG9naWNhbEhl
aWdodDsKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KHJ1
bnMsIGlzTGFzdExpbmUpOwogICAgIGF2YWlsYWJsZVdpZHRoICs9IGhhbmdpbmdDb250ZW50Lndp
ZHRoKCk7Ci0gICAgaWYgKG1fcnVucy5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChhdmFpbGFibGVXaWR0aCA8PSAwKQorICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0g
ewotICAgICAgICBhdXRvJiByb290U3R5bGUgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5z
dHlsZSgpOwotICAgICAgICBpZiAocm9vdFN0eWxlLnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1v
ZGU6Okp1c3RpZnkpCi0gICAgICAgICAgICByZXR1cm4gcm9vdFN0eWxlLnRleHRBbGlnbigpOwor
ICAgICAgICBpZiAodGV4dEFsaWduICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAg
ICAgICByZXR1cm4gdGV4dEFsaWduOwogICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2Nv
cmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0
eSwKICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5s
ZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAogICAgICAgICAvLyB0
aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9j
ayBpcyBzdGFydC1hbGlnbmVkLgotICAgICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xpbmVCcmVh
aygpIHx8IGlzTGFzdExpbmUgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCisg
ICAgICAgIGlmIChydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gTGlu
ZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCiAgICAgICAgICAgICByZXR1
cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7CiAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5OwogICAgIH0oKTsKIAotICAgIGlmIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQg
PT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICBhdXRvIGFjY3VtdWxhdGVkRXhw
YW5zaW9uID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBtX3J1bnMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBtX2lu
bGluZUJveExpc3RbaW5kZXhdLnJlY3QubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFu
c2lvbik7Ci0KLSAgICAgICAgICAgIGF1dG8gaG9yaXpvbnRhbEV4cGFuc2lvbiA9IG1fcnVuc1tp
bmRleF0uZXhwYW5zaW9uKCkuaG9yaXpvbnRhbEV4cGFuc2lvbjsKLSAgICAgICAgICAgIG1faW5s
aW5lQm94TGlzdFtpbmRleF0ucmVjdC5leHBhbmRIb3Jpem9udGFsbHkoaG9yaXpvbnRhbEV4cGFu
c2lvbik7Ci0gICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBob3Jpem9udGFsRXhw
YW5zaW9uOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGxpbmVBbGlnbm1l
bnRPZmZzZXQgPSBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7IH07CisKKyAgICBzd2l0Y2gg
KGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCkgeworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6CisgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpSaWdodDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAgICBsaW5lQWxpZ25tZW50T2Zmc2V0ID0gYXZhaWxh
YmxlV2lkdGg7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVy
OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICBsaW5lQWxp
Z25tZW50T2Zmc2V0ID0gYXZhaWxhYmxlV2lkdGggLyAyOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgICAgIC8vIFRleHRBbGlnbk1vZGU6Okp1
c3RpZnkgaXMgYSBydW4gYWxpZ25tZW50IChhbmQgd2Ugb25seSBkbyBpbmxpbmUgYm94IGFsaWdu
bWVudCBoZXJlKQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICBicmVhazsKICAgICB9CisgICAgcmV0dXJu
IGxpbmVBbGlnbm1lbnRPZmZzZXQ7Cit9CiAKLSAgICBhdXRvIGFkanVzdG1lbnRGb3JBbGlnbm1l
bnQgPSBbJl0gKGF1dG8gYXZhaWxhYmxlV2lkdGgpIC0+IE9wdGlvbmFsPElubGluZUxheW91dFVu
aXQ+IHsKLSAgICAgICAgc3dpdGNoIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQpIHsKLSAg
ICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OldlYktpdExlZnQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0Ogot
ICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgICAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlv
dXRVbml0PihhdmFpbGFibGVXaWR0aCwgMCk7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
Q2VudGVyOgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCAv
IDIsIDApOwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH07
CitpbmxpbmUgc3RhdGljIEFzY2VudEFuZERlc2NlbnQgaGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0
IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcywgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhl
aWdodCkKK3sKKyAgICBJbmxpbmVMYXlvdXRVbml0IGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2Vu
dCgpOworICAgIElubGluZUxheW91dFVuaXQgZGVzY2VudCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQo
KTsKKyAgICAvLyAxMC44LjEgTGVhZGluZyBhbmQgaGFsZi1sZWFkaW5nCisgICAgYXV0byBoYWxm
TGVhZGluZyA9IChsaW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KSkgLyAyOwor
ICAgIC8vIElubGluZSB0cmVlIGhlaWdodCBpcyBhbGwgaW50ZWdlciBiYXNlZC4KKyAgICByZXR1
cm4geyBmbG9vcmYoYXNjZW50ICsgaGFsZkxlYWRpbmcpLCBjZWlsZihkZXNjZW50ICsgaGFsZkxl
YWRpbmcpIH07Cit9CiAKLSAgICBpZiAoYXV0byBhZGp1c3RtZW50ID0gYWRqdXN0bWVudEZvckFs
aWdubWVudChhdmFpbGFibGVXaWR0aCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGxpbmUgYm94IHNo
b3VsZCBub3QgbmVlZCB0byBiZSBtb3ZlZCwgb25seSB0aGUgcnVucy4KLSAgICAgICAgbV9yZWN0
Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOwotICAgICAgICBmb3IgKGF1dG8mIGlubGlu
ZUJveCA6IG1faW5saW5lQm94TGlzdCkKLSAgICAgICAgICAgIGlubGluZUJveC5yZWN0Lm1vdmVI
b3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOwotICAgIH0KK0xpbmVCb3g6OklubGluZUJveDo6SW5s
aW5lQm94KGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHJlY3QsIElubGluZUxheW91dFVuaXQg
c3ludGhldGljQmFzZWxpbmUpCisgICAgOiBtX2xvZ2ljYWxSZWN0KHJlY3QpCisgICAgLCBtX2Jh
c2VsaW5lKHN5bnRoZXRpY0Jhc2VsaW5lKQorICAgICwgbV9pc1Zpc3VhbGx5RW1wdHkoZmFsc2Up
CisgICAgLCBtX2lzQXRvbWljKHRydWUpCit7CiB9CiAKLXZvaWQgTGluZUJveDo6YWxpZ25WZXJ0
aWNhbGx5KCkKK0xpbmVCb3g6OklubGluZUJveDo6SW5saW5lQm94KGNvbnN0IERpc3BsYXk6Oklu
bGluZVJlY3QmIHJlY3QsIElubGluZUxheW91dFVuaXQgYmFzZWxpbmUsIElubGluZUxheW91dFVu
aXQgZGVzY2VudCwgSXNWaXN1YWxseUVtcHR5IGlzVmlzdWFsbHlFbXB0eSkKKyAgICA6IG1fbG9n
aWNhbFJlY3QocmVjdCkKKyAgICAsIG1fYmFzZWxpbmUoYmFzZWxpbmUpCisgICAgLCBtX2Rlc2Nl
bnQoZGVzY2VudCkKKyAgICAsIG1faXNWaXN1YWxseUVtcHR5KGlzVmlzdWFsbHlFbXB0eSA9PSBJ
c1Zpc3VhbGx5RW1wdHk6OlllcykKIHsKLSAgICBhZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQo
KTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9pbmxpbmVCb3hMaXN0LnNp
emUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBtX2lubGluZUJveExp
c3RbaW5kZXhdOwotICAgICAgICBhdXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOwotICAgICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVCb3gubGF5b3V0Qm94OwotICAgICAgICBhdXRvIGlubGlu
ZUJveEhlaWdodCA9IGlubGluZUJveC5yZWN0LmhlaWdodCgpOwotCi0gICAgICAgIGF1dG8gbG9n
aWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAgICBhdXRvIHZlcnRpY2FsQWxp
Z24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7Ci0gICAgICAgIGF1dG8gYXNj
ZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKLQotICAgICAg
ICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpC
YXNlbGluZToKLSAgICAgICAgICAgIGlmIChydW4uaXNMaW5lQnJlYWsoKSB8fCBydW4uaXNUZXh0
KCkpCi0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGFsaWdubWVudEJhc2VsaW5lKCkgLSBh
c2NlbnQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IGFs
aWdubWVudEJhc2VsaW5lKCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSAtIGJv
eEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKK30KKworTGluZUJveDo6TGluZUJveChjb25zdCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IElu
bGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwg
SW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbEhlaWdodCwgY29uc3QgTGluZUJ1aWxkZXI6
OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0eSwg
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkK
KyAgICA6IG1fcmVjdCh0b3BMZWZ0LCBsb2dpY2FsV2lkdGgsIHsgfSkKKyAgICAsIG1fc2Nyb2xs
YWJsZU92ZXJmbG93KG1fcmVjdCkKKyAgICAsIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQpCit7CisgICAgbV9saW5lQWxpZ25tZW50T2Zmc2V0ID0gaG9y
aXpvbnRhbEFsaWdubWVudE9mZnNldChydW5zLCBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5yb290
KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgbG9naWNhbFdpZHRoLCBjb250ZW50TG9naWNhbEhlaWdo
dCwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICAvLyBGSVhNRTogbGluZSBib3gg
c2hvdWxkIG5vdCBuZWVkIHRvIGJlIG1vdmVkLCBvbmx5IHRoZSBpbmxpbmUgYm94ZXMuCisgICAg
bV9yZWN0Lm1vdmVIb3Jpem9udGFsbHkobV9saW5lQWxpZ25tZW50T2Zmc2V0LnZhbHVlT3IoSW5s
aW5lTGF5b3V0VW5pdCB7IH0pKTsKKyAgICBjb25zdHJ1Y3RJbmxpbmVCb3hlcyhydW5zLCBpc0xp
bmVWaXN1YWxseUVtcHR5KTsKKyAgICBhbGlnblZlcnRpY2FsbHkoaXNMaW5lVmlzdWFsbHlFbXB0
eSk7CisgICAgLy8KKyAgICBtX3Njcm9sbGFibGVPdmVyZmxvdy5zZXRXaWR0aChzdGQ6Om1heCht
X3Njcm9sbGFibGVPdmVyZmxvdy53aWR0aCgpLCBtX3Jvb3RJbmxpbmVCb3gubG9naWNhbFdpZHRo
KCkpKTsKKyAgICBtX3Njcm9sbGFibGVPdmVyZmxvdy5leHBhbmRWZXJ0aWNhbGx5VG9Db250YWlu
KG1fcm9vdElubGluZUJveC5sb2dpY2FsUmVjdCgpKTsKKyAgICBmb3IgKGF1dG8mIGlubGluZUJv
eEVudHJ5IDogbV9pbmxpbmVCb3hSZWN0TWFwKQorICAgICAgICBtX3Njcm9sbGFibGVPdmVyZmxv
dy5leHBhbmRWZXJ0aWNhbGx5VG9Db250YWluKGlubGluZUJveEVudHJ5LnZhbHVlLT5sb2dpY2Fs
UmVjdCgpKTsKK30KKworY29uc3QgTGluZUJveDo6SW5saW5lQm94JiBMaW5lQm94OjppbmxpbmVC
b3hGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCZsYXlvdXRCb3ggIT0gJmZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpKTsKKyAgICByZXR1cm4g
Km1faW5saW5lQm94UmVjdE1hcC5nZXQoJmxheW91dEJveCk7Cit9CisKK0Rpc3BsYXk6OklubGlu
ZVJlY3QgTGluZUJveDo6aW5saW5lUmVjdEZvclRleHRSdW4oY29uc3QgTGluZUJ1aWxkZXI6OlJ1
biYgcnVuKSBjb25zdAoreworICAgIEFTU0VSVChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJy
ZWFrKCkpOworICAgIGF1dG8gaW5saW5lQm94UmVjdCA9IG1fcm9vdElubGluZUJveC5sb2dpY2Fs
UmVjdCgpOworICAgIGlmICgmcnVuLmxheW91dEJveCgpLnBhcmVudCgpICE9ICZmb3JtYXR0aW5n
Q29udGV4dCgpLnJvb3QoKSkKKyAgICAgICAgaW5saW5lQm94UmVjdCA9IG1faW5saW5lQm94UmVj
dE1hcC5nZXQoJnJ1bi5sYXlvdXRCb3goKS5wYXJlbnQoKSktPmxvZ2ljYWxSZWN0KCk7CisgICAg
cmV0dXJuIHsgaW5saW5lQm94UmVjdC50b3AoKSwgaW5saW5lQm94UmVjdC5sZWZ0KCkgKyBydW4u
bG9naWNhbExlZnQoKSwgcnVuLmxvZ2ljYWxXaWR0aCgpLCBpbmxpbmVCb3hSZWN0LmhlaWdodCgp
IH07Cit9CisKK3ZvaWQgTGluZUJveDo6Y29uc3RydWN0SW5saW5lQm94ZXMoY29uc3QgTGluZUJ1
aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlF
bXB0eSkKK3sKKyAgICBhdXRvIGlubGluZUJveEhhc0ltYWdpbmFyeVN0cnV0ID0gIWxheW91dFN0
YXRlKCkuaW5RdWlya3NNb2RlKCk7CisgICAgYXV0byBpbmxpbmVCb3hJc1Zpc3VhbGx5RW1wdHkg
PSAhaW5saW5lQm94SGFzSW1hZ2luYXJ5U3RydXQgfHwgaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJ
c0xpbmVWaXN1YWxseUVtcHR5OjpZZXMgPyBJbmxpbmVCb3g6OklzVmlzdWFsbHlFbXB0eTo6WWVz
IDogSW5saW5lQm94OjpJc1Zpc3VhbGx5RW1wdHk6Ok5vOworICAgIC8vIEZJWE1FOiAhISEhCisg
ICAgYXV0byYgZm9udE1ldHJpY3MgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgp
LmZvbnRNZXRyaWNzKCk7CisgICAgSW5saW5lTGF5b3V0VW5pdCByb290SW5saW5lQm94SGVpZ2h0
ID0gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisgICAgLy8gRklYTUU6IHdoeSBsb2dpY2FsTGVmdCgp
IHdoeSBub3QgMD8KKyAgICBhdXRvIHJvb3RJbmxpbmVSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVj
dCB7IHsgfSwgeyB9LCB7IH0sIHJvb3RJbmxpbmVCb3hIZWlnaHQgfTsKKyAgICBJbmxpbmVMYXlv
dXRVbml0IHJvb3RJbmxpbmVCYXNlbGluZSA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOworICAgIGF1
dG8gcm9vdElubGluZURlc2NlbnQgPSByb290SW5saW5lQm94SGVpZ2h0IC0gcm9vdElubGluZUJh
c2VsaW5lOworICAgIG1fcm9vdElubGluZUJveCA9IElubGluZUJveCB7IHJvb3RJbmxpbmVSZWN0
LCByb290SW5saW5lQmFzZWxpbmUsIHJvb3RJbmxpbmVEZXNjZW50LCBpbmxpbmVCb3hJc1Zpc3Vh
bGx5RW1wdHkgfTsKKworICAgIGF1dG8gY29udGVudExvZ2ljYWxXaWR0aCA9IElubGluZUxheW91
dFVuaXQgeyB9OworICAgIGZvciAoYXV0byYgcnVuIDogcnVucykgeworICAgICAgICBhdXRvJiBs
YXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgIGNvbnRlbnRMb2dpY2FsV2lkdGgg
Kz0gcnVuLmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBpZiAocnVuLmlzQm94KCkpIHsKKyAgICAg
ICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZv
ckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgYXV0byBsb2dpY2FsTGVmdCA9IHJ1bi5sb2dp
Y2FsTGVmdCgpOworICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkg
JiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAg
ICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJs
aXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRC
b3gpKTsKICAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0
IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgotICAgICAgICAgICAgICAgIGF1dG8gaW5s
aW5lQmxvY2tCYXNlbGluZSA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgp
LT5saW5lQm94ZXMubGFzdCgpLmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgYXV0byYgbGFz
dExpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJv
eGVzLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBs
YXN0TGluZUJveC50b3AoKSArIGxhc3RMaW5lQm94LmJhc2VsaW5lKCk7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIGlubGluZS1ibG9jaydzIGJhc2VsaW5lIG9mZnNldCBpcyByZWxhdGl2ZSB0byBp
dHMgY29udGVudCBib3guIExldCdzIGNvbnZlcnQgaXQgcmVsYXRpdmUgdG8gdGhlIG1hcmdpbiBi
b3guCiAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIF9fX19fX19fX19fX19fXyA8LSBtYXJn
aW4gYm94CiAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfApAQCAtMTk3LDE0OCArMjIyLDEy
NyBAQCB2b2lkIExpbmVCb3g6OmFsaWduVmVydGljYWxseSgpCiAgICAgICAgICAgICAgICAgLy8g
ICAgIHRleHQgfCB8IHwgICB2IHRleHQKICAgICAgICAgICAgICAgICAvLyAgICAgLS0tLS18LXwt
fC0tLS0tLS0tLS0gPC0gYmFzZWxpbmUKICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJv
eChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVGcm9tTWFyZ2luQm94
ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSAr
IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgaW5saW5lQmxvY2tCYXNlbGlu
ZTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUoKSAtIGJh
c2VsaW5lRnJvbU1hcmdpbkJveDsKKyAgICAgICAgICAgICAgICBhdXRvIGFkanVzdGVkQmFzZWxp
bmUgPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgp
ICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2Vs
aW5lOworICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQm94UmVjdCA9IERpc3BsYXk6OklubGlu
ZVJlY3QgeyB7IH0sIGxvZ2ljYWxMZWZ0LCBydW4ubG9naWNhbFdpZHRoKCksIGJveEdlb21ldHJ5
Lm1hcmdpbkJveEhlaWdodCgpIH07CisgICAgICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFw
LnNldCgmbGF5b3V0Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgYWRq
dXN0ZWRCYXNlbGluZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5
b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUo
KSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQ
YWRkaW5nKCkudmFsdWVPcigwX2x1KSArIGlubGluZUJveEhlaWdodCArIGJveEdlb21ldHJ5Lm1h
cmdpbkFmdGVyKCkpOworICAgICAgICAgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gYm94R2VvbWV0
cnkubWFyZ2luQm94SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0
ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IHsgfSwgbG9naWNhbExlZnQsIHJ1bi5sb2dpY2FsV2lk
dGgoKSwgcnVuSGVpZ2h0IH07CisgICAgICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNl
dCgmbGF5b3V0Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgcnVuSGVp
Z2h0KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBW
ZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gMF9sdTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBsb2dpY2FsQm90dG9tKCkgLSBpbmxpbmVCb3hIZWlnaHQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNl
IGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7CisgICAgICAgICAgICBhdXRvIGluaXRpYWxX
aWR0aCA9IGxvZ2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCk7CisgICAgICAgICAgICBB
U1NFUlQoaW5pdGlhbFdpZHRoID49IDApOworICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3Mg
PSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpOworICAgICAgICAgICAgYXV0byBsb2dp
Y2FsSGVpZ2h0ID0gZm9udE1ldHJpY3MuZmxvYXRMaW5lU3BhY2luZygpOworICAgICAgICAgICAg
YXV0byBiYXNlbGluZSA9IHJvdW5kZihoYWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIGxv
Z2ljYWxIZWlnaHQpLmFzY2VudCk7CisgICAgICAgICAgICBhdXRvIGRlc2NlbnQgPSByb3VuZGYo
Zm9udE1ldHJpY3MuZmxvYXREZXNjZW50KCkpOworICAgICAgICAgICAgYXV0byBsb2dpY2FsTGVm
dCA9IHJ1bi5sb2dpY2FsTGVmdCgpOworICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0g
RGlzcGxheTo6SW5saW5lUmVjdCB7IHsgfSwgbG9naWNhbExlZnQsIGluaXRpYWxXaWR0aCwgbG9n
aWNhbEhlaWdodCB9OworICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmbGF5b3V0
Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgYmFzZWxpbmUsIGRlc2Nl
bnQsIGlubGluZUJveElzVmlzdWFsbHlFbXB0eSkpOworICAgICAgICB9IGVsc2UgaWYgKHJ1bi5p
c0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGxvZ2ljYWwgd2lk
dGggd2hlbiB0aGUgaW5saW5lIGxldmVsIGNvbnRhaW5lciBjbG9zZXMgb24gdGhpcyBsaW5lLgor
ICAgICAgICAgICAgYXV0byYgaW5saW5lQm94ID0gKm1faW5saW5lQm94UmVjdE1hcC5nZXQoJmxh
eW91dEJveCk7CisgICAgICAgICAgICBpbmxpbmVCb3guc2V0TG9naWNhbFdpZHRoKHJ1bi5sb2dp
Y2FsUmlnaHQoKSAtIGlubGluZUJveC5sb2dpY2FsTGVmdCgpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICgocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSkgeworICAgICAgICAgICAgYXV0
byYgY29udGFpbmVyQm94ID0gcnVuLmxheW91dEJveCgpLnBhcmVudCgpOworICAgICAgICAgICAg
JmNvbnRhaW5lckJveCA9PSAmZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCkgPyBtX3Jvb3RJbmxp
bmVCb3guc2V0SXNWaXN1YWxseU5vbkVtcHR5KCkgOiBtX2lubGluZUJveFJlY3RNYXAuZ2V0KCZj
b250YWluZXJCb3gpLT5zZXRJc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKICAgICAgICAgfQotICAgICAg
ICBhdXRvJiBpbmxpbmVCb3hSZWN0ID0gaW5saW5lQm94LnJlY3Q7Ci0gICAgICAgIGlubGluZUJv
eFJlY3Quc2V0VG9wKGxvZ2ljYWxUb3ApOwotICAgICAgICAvLyBBZGp1c3Qgc2Nyb2xsYWJsZSBv
dmVyZmxvdyBpZiB0aGUgcnVuIG92ZXJmbG93cyB0aGUgbGluZS4KLSAgICAgICAgbV9zY3JvbGxh
YmxlT3ZlcmZsb3cuZXhwYW5kVmVydGljYWxseVRvQ29udGFpbihpbmxpbmVCb3hSZWN0KTsKLSAg
ICAgICAgLy8gQ29udmVydCBydW5zIGZyb20gcmVsYXRpdmUgdG8gdGhlIGxpbmUgdG9wL2xlZnQg
dG8gdGhlIGZvcm1hdHRpbmcgcm9vdCdzIGJvcmRlciBib3ggdG9wL2xlZnQuCi0gICAgICAgIGlu
bGluZUJveFJlY3QubW92ZVZlcnRpY2FsbHkodGhpcy0+bG9naWNhbFRvcCgpKTsKLSAgICAgICAg
aW5saW5lQm94UmVjdC5tb3ZlSG9yaXpvbnRhbGx5KGxvZ2ljYWxMZWZ0KCkpOwogICAgIH0KKyAg
ICBtX3Jvb3RJbmxpbmVCb3guc2V0TG9naWNhbFdpZHRoKGNvbnRlbnRMb2dpY2FsV2lkdGgpOwog
fQogCi12b2lkIExpbmVCb3g6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpCit2b2lkIExp
bmVCb3g6OmFsaWduVmVydGljYWxseShJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5
RW1wdHkpCiB7Ci0gICAgdW5zaWduZWQgaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsK
LSAgICBhdXRvIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSBmYWxzZTsKLSAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9pbmxpbmVCb3hMaXN0LnNpemUoKTsgKytpbmRl
eCkgewotICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBtX2lubGluZUJveExpc3RbaW5kZXhdOwot
ICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVCb3gubGF5b3V0Qm94OwotICAgICAgICBh
dXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgICAgICBhdXRvJiBydW4gPSBtX3J1
bnNbaW5kZXhdOwotICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygp
KSB7Ci0gICAgICAgICAgICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUg
ZWl0aGVyIHRocm91Z2ggdGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBj
b250ZXh0IHJvb3QpIG9yCi0gICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFp
bmVyIChzdGFydCkuIE5vcm1hbGx5IHRoZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0
cmV0Y2ggdGhlIGxpbmUuCi0gICAgICAgICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xl
dmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGlu
ZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIuIAot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKLSAgICAgICAgICAgICAgICAvLyBlLmcg
ZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJl
Y3QgdGV4dDwvZGl2Pi4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAvLyAxLiBDb21w
dXRlIGxpbmUgYm94IGhlaWdodC9hbGlnbm1lbnQgYmFzZWxpbmUgYnkgcGxhY2luZyB0aGUgaW5s
aW5lIGJveGVzIHZlcnRpY2FsbHkuCisgICAgLy8gMi4gQWRqdXN0IHRoZSBpbmxpbmUgYm94IHZl
cnRpY2FsIHBvc2l0aW9uLgorICAgIGF1dG8mIHJvb3RTdHlsZSA9IGZvcm1hdHRpbmdDb250ZXh0
KCkucm9vdCgpLnN0eWxlKCk7CisgICAgYXV0byByZWNvbW1lbmRlZExpbmVCb3hIZWlnaHQgPSBX
VEY6Ok9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsgfTsKKyAgICBpZiAoIXJvb3RTdHlsZS5s
aW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKQorICAgICAgICByZWNvbW1lbmRlZExpbmVCb3hIZWln
aHQgPSByb290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisgICAgaWYgKGlzTGluZVZpc3Vh
bGx5RW1wdHkgPT0gSXNMaW5lVmlzdWFsbHlFbXB0eTo6Tm8pCisgICAgICAgIHJlY29tbWVuZGVk
TGluZUJveEhlaWdodCA9IHJvb3RTdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKTsKKyAgICBlbHNl
CisgICAgICAgIHJlY29tbWVuZGVkTGluZUJveEhlaWdodCA9IElubGluZUxheW91dFVuaXQgeyB9
OworCisgICAgYXV0byBjb250ZW50TG9naWNhbEhlaWdodCA9IElubGluZUxheW91dFVuaXQgeyB9
OworICAgIGF1dG8gYWxpZ25tZW50QmFzZWxpbmUgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAg
ICBhdXRvIGNvbXB1dGVMaW5lQm94SGVpZ2h0ID0gWyZdKGF1dG8mIGlubGluZUJveCwgYXV0byB0
ZXh0QWxpZ25Nb2RlKSB7CisgICAgICAgIHN3aXRjaCAodGV4dEFsaWduTW9kZSkgeworICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7CisgICAgICAgICAgICBhdXRvIGJhc2Vs
aW5lT3ZlcmZsb3cgPSBpbmxpbmVCb3guYmFzZWxpbmUoKSAtIGFsaWdubWVudEJhc2VsaW5lOwor
ICAgICAgICAgICAgaWYgKGJhc2VsaW5lT3ZlcmZsb3cgPiAwKSB7CisgICAgICAgICAgICAgICAg
Y29udGVudExvZ2ljYWxIZWlnaHQgKz0gYmFzZWxpbmVPdmVyZmxvdzsKKyAgICAgICAgICAgICAg
ICBhbGlnbm1lbnRCYXNlbGluZSArPSBiYXNlbGluZU92ZXJmbG93OwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhayA9IHRydWU7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJT
dGFydCgpKSB7Ci0gICAgICAgICAgICArK2lubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKLSAg
ICAgICAgICAgIC8vIElubGluZSBjb250YWluZXJzIHN0cmV0Y2ggdGhlIGxpbmUgYnkgdGhlaXIg
Zm9udCBzaXplLgotICAgICAgICAgICAgLy8gVmVydGljYWwgbWFyZ2lucywgcGFkZGluZ3MgYW5k
IGJvcmRlcnMgZG9uJ3QgY29udHJpYnV0ZSB0byB0aGUgbGluZSBoZWlnaHQuCi0gICAgICAgICAg
ICBhdXRvJiBmb250TWV0cmljcyA9IHN0eWxlLmZvbnRNZXRyaWNzKCk7Ci0gICAgICAgICAgICBp
ZiAoc3R5bGUudmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBoYWxmTGVhZGluZyA9IExpbmVCb3g6OmhhbGZMZWFkaW5nTWV0
cmljcyhmb250TWV0cmljcywgc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOwotICAgICAgICAg
ICAgICAgIC8vIEJvdGggaGFsZmxlYWRpbmcgYXNjZW50IGFuZCBkZXNjZW50IGNvdWxkIGJlIG5l
Z2F0aXZlICh0YWxsIGZvbnQgdnMuIHNtYWxsIGxpbmUtaGVpZ2h0IHZhbHVlKQotICAgICAgICAg
ICAgICAgIGlmIChoYWxmTGVhZGluZy5kZXNjZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAg
c2V0RGVzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5kZXNjZW50KTsKLSAgICAgICAgICAgICAg
ICBpZiAoaGFsZkxlYWRpbmcuYXNjZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgc2V0QXNj
ZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmFzY2VudCk7Ci0gICAgICAgICAgICAgICAgc2V0TG9n
aWNhbEhlaWdodElmR3JlYXRlcihhc2NlbnRBbmREZXNjZW50KCkuaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihm
b250TWV0cmljcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IC8vIFRhYmxlIGNlbGxzLCBpbmxpbmUtYmxvY2sgYm94ZXMgbWF5IHN0cmV0Y2ggdGhlIGxpbmUg
YmV5b25kIHRoZWlyIGJhc2VsaW5lLgorICAgICAgICAgICAgYXV0byBiZWxvd0Jhc2VsaW5lID0g
aW5saW5lQm94LmRlc2NlbnQoKS52YWx1ZU9yKGlubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSBp
bmxpbmVCb3guYmFzZWxpbmUoKSk7CisgICAgICAgICAgICBhdXRvIGJlbG93QmFzZWxpbmVPdmVy
ZmxvdyA9IGJlbG93QmFzZWxpbmUgLSAoY29udGVudExvZ2ljYWxIZWlnaHQgLSBhbGlnbm1lbnRC
YXNlbGluZSk7CisgICAgICAgICAgICBpZiAoYmVsb3dCYXNlbGluZU92ZXJmbG93ID4gMCkKKyAg
ICAgICAgICAgICAgICBjb250ZW50TG9naWNhbEhlaWdodCArPSBiZWxvd0Jhc2VsaW5lT3ZlcmZs
b3c7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChydW4uaXND
b250YWluZXJFbmQoKSkgewotICAgICAgICAgICAgLy8gVGhlIGxpbmUncyBiYXNlbGluZSBhbmQg
aGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVzdGVkIGF0IENvbnRhaW5lclN0YXJ0LgotICAg
ICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCk7Ci0gICAgICAgICAg
ICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDogeworICAgICAgICAgICAgYXV0byBvdmVy
ZmxvdyA9IGlubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSBjb250ZW50TG9naWNhbEhlaWdodDsK
KyAgICAgICAgICAgIGlmIChvdmVyZmxvdyA+IDApCisgICAgICAgICAgICAgICAgY29udGVudExv
Z2ljYWxIZWlnaHQgKz0gb3ZlcmZsb3c7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
Ci0gICAgICAgIGlmIChydW4uaXNCb3goKSkgewotICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0
cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAg
ICAgICAgICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdo
dCgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSkgewotICAg
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAgICAgICAg
IGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hl
c0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW5s
aW5lLWJsb2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZlIGJhc2VsaW5lcy4KLSAg
ICAgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5l
c3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxh
eW91dEJveCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVh
c3Qgb25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAgICAgICAgIGF1
dG8mIGxhc3RMaW5lQm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCkt
PmxpbmVCb3hlcy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYmVmb3JlSGVpZ2h0
ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSAr
IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAgICAgICAgICAgICAg
ICBzZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJv
eC5iYXNlbGluZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIE5vbiBpbmxpbmUtYmxvY2sgYm94ZXMgc2l0IG9uIHRoZSBiYXNlbGlu
ZSAoaW5jbHVkaW5nIHRoZWlyIGJvdHRvbSBtYXJnaW4pLgotICAgICAgICAgICAgICAgICAgICBz
ZXRBc2NlbnRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gSWdub3JlIG5lZ2F0aXZlIGRlc2NlbnQgKHllcywgbmVnYXRpdmUgZGVzY2VudCBpcyBhIHRo
aW5nKS4KLSAgICAgICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJn
aW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PigwLCBhc2NlbnRBbmREZXNj
ZW50KCkuZGVzY2VudCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsKKyAgICAgICAgICAgIGF1
dG8gb3ZlcmZsb3cgPSBpbmxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0gY29udGVudExvZ2ljYWxI
ZWlnaHQ7CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPiAwKSB7CisgICAgICAgICAgICAgICAg
Y29udGVudExvZ2ljYWxIZWlnaHQgKz0gb3ZlcmZsb3c7CisgICAgICAgICAgICAgICAgYWxpZ25t
ZW50QmFzZWxpbmUgKz0gb3ZlcmZsb3c7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNl
IFZlcnRpY2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVu
dCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBv
ZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCi0gICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdo
dElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsKLSAgICAgICAgICAgICAgICAv
LyBCb3R0b20gYWxpZ25lZCwgdGFsbCBjb250ZW50IHB1c2hlcyB0aGUgYmFzZWxpbmUgZnVydGhl
ciBkb3duIGZyb20gdGhlIGxpbmUgdG9wLgotICAgICAgICAgICAgICAgIGF1dG8gbGluZUxvZ2lj
YWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmdpbkJv
eEhlaWdodCA+IGxpbmVMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldExv
Z2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYWxpZ25tZW50QmFzZWxpbmUoKSArICht
YXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBhdXRvIHNob3VsZFJvb3RJbmxpbmVCb3hTdHJldGNoTGlu
ZUJveCA9ICFyZWNvbW1lbmRlZExpbmVCb3hIZWlnaHQgJiYgIW1fcm9vdElubGluZUJveC5pc1Zp
c3VhbGx5RW1wdHkoKTsKKyAgICBpZiAoc2hvdWxkUm9vdElubGluZUJveFN0cmV0Y2hMaW5lQm94
KQorICAgICAgICBjb21wdXRlTGluZUJveEhlaWdodChtX3Jvb3RJbmxpbmVCb3gsIFZlcnRpY2Fs
QWxpZ246OkJhc2VsaW5lKTsKKyAgICBmb3IgKGF1dG8mIGlubGluZUJveEVudHJ5IDogbV9pbmxp
bmVCb3hSZWN0TWFwKSB7CisgICAgICAgIGF1dG8mIGlubGluZUJveCA9ICppbmxpbmVCb3hFbnRy
eS52YWx1ZTsKKyAgICAgICAgYXV0byBzaG91bGRJbmxpbmVCb3hTdHJldGNoTGluZUJveCA9ICFp
bmxpbmVCb3guaXNWaXN1YWxseUVtcHR5KCkgJiYgKCFyZWNvbW1lbmRlZExpbmVCb3hIZWlnaHQg
fHwgaW5saW5lQm94LmlzQXRvbWljKCkpOworICAgICAgICBpZiAoc2hvdWxkSW5saW5lQm94U3Ry
ZXRjaExpbmVCb3gpCisgICAgICAgICAgICBjb21wdXRlTGluZUJveEhlaWdodChpbmxpbmVCb3gs
IGlubGluZUJveEVudHJ5LmtleS0+c3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkpOwogICAgIH0KLX0K
IAotSGFuZ2luZ0NvbnRlbnQgTGluZUJveDo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0Ci17
Ci0gICAgYXV0byBoYW5naW5nQ29udGVudCA9IEhhbmdpbmdDb250ZW50IHsgfTsKLSAgICBpZiAo
aXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dDo6WWVzKQotICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAg
Zm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKLSAgICAg
ICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0g
ICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRl
c3BhY2UoKSkKKyAgICBhdXRvIGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gc3RkOjptYXgocmVjb21t
ZW5kZWRMaW5lQm94SGVpZ2h0LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pLCBjb250ZW50
TG9naWNhbEhlaWdodCk7CisgICAgbV9yZWN0LnNldEhlaWdodChsaW5lQm94TG9naWNhbEhlaWdo
dCk7CisKKyAgICBhdXRvIGFkanVzdElubGluZUJveFRvcCA9IFsmXShhdXRvJiBpbmxpbmVCb3gs
IGF1dG8gdGV4dEFsaWduTW9kZSkgeworICAgICAgICBhdXRvIGlubGluZUJveExvZ2ljYWxUb3Ag
PSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgc3dpdGNoICh0ZXh0QWxpZ25Nb2RlKSB7
CisgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6CisgICAgICAgICAgICBpbmxp
bmVCb3hMb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUgLSBpbmxpbmVCb3guYmFzZWxpbmUo
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJl
c2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KLSAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRl
U3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OlRvcDoKKyAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSB7IH07CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIgYSBub3JtYWwgb3IgY29uZGl0
aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0gICAgICAgIGhhbmdpbmdDb250
ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSk7CisgICAgICAgIGNhc2Ug
VmVydGljYWxBbGlnbjo6Qm90dG9tOgorICAgICAgICAgICAgaW5saW5lQm94TG9naWNhbFRvcCA9
IGxvZ2ljYWxCb3R0b20oKSAtIGlubGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVN
RU5URURfWUVUKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpbmxp
bmVCb3guc2V0TG9naWNhbFRvcChpbmxpbmVCb3hMb2dpY2FsVG9wKTsKKyAgICB9OworCisgICAg
aWYgKHJlY29tbWVuZGVkTGluZUJveEhlaWdodCkKKyAgICAgICAgYWxpZ25tZW50QmFzZWxpbmUg
PSBzdGQ6Om1heChhbGlnbm1lbnRCYXNlbGluZSwgaGFsZkxlYWRpbmdNZXRyaWNzKHJvb3RTdHls
ZS5mb250TWV0cmljcygpLCAqcmVjb21tZW5kZWRMaW5lQm94SGVpZ2h0KS5hc2NlbnQpOworCisg
ICAgYWRqdXN0SW5saW5lQm94VG9wKG1fcm9vdElubGluZUJveCwgVmVydGljYWxBbGlnbjo6QmFz
ZWxpbmUpOworICAgIGZvciAoYXV0byYgaW5saW5lQm94RW50cnkgOiBtX2lubGluZUJveFJlY3RN
YXApIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gKmlubGluZUJveEVudHJ5LmtleTsKKyAg
ICAgICAgYXV0byYgaW5saW5lQm94ID0gKmlubGluZUJveEVudHJ5LnZhbHVlOworICAgICAgICBh
ZGp1c3RJbmxpbmVCb3hUb3AoaW5saW5lQm94LCBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFs
aWduKCkpOwogICAgIH0KLSAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVC
b3guaAppbmRleCA4OTFjNzMyNTJmODM1ZTRmZWZlNDI5NWI1ZDg0NjZiZGZiNjZiMTk0Li45YzEz
YzJiM2RkODgzMGMyNWViNTBiZTkxYjM2N2M3ZGQ5OGZlOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCkBAIC0z
MCwzNCArMzAsNTEgQEAKICNpbmNsdWRlICJEaXNwbGF5Qm94LmgiCiAjaW5jbHVkZSAiRGlzcGxh
eUlubGluZVJlY3QuaCIKICNpbmNsdWRlICJJbmxpbmVMaW5lQnVpbGRlci5oIgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFj
ZSBMYXlvdXQgewogCiBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLXN0cnVjdCBIYW5n
aW5nQ29udGVudDsKLQotc3RydWN0IEFzY2VudEFuZERlc2NlbnQgewotICAgIElubGluZUxheW91
dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYXNjZW50ICsgZGVzY2VudDsgfQotCi0gICAg
SW5saW5lTGF5b3V0VW5pdCBhc2NlbnQgeyAwIH07Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBkZXNj
ZW50IHsgMCB9OwotfTsKIAogY2xhc3MgTGluZUJveCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgc3RydWN0IElubGluZUJveCB7Ci0gICAgICAgIElubGluZUJv
eChjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiwgY29uc3QgQXNjZW50QW5kRGVzY2VudCYsIGNv
bnN0IEJveCYpOwotCi0gICAgICAgIERpc3BsYXk6OklubGluZVJlY3QgcmVjdDsKLSAgICAgICAg
QXNjZW50QW5kRGVzY2VudCBhc2NlbnRBbmREZXNjZW50OwotICAgICAgICBjb25zdCBCb3gmIGxh
eW91dEJveDsKKyAgICAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTkxJTkUoSW5saW5lQm94
KTsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gY2xhc3MgSXNWaXN1YWxseUVtcHR5IHsgWWVz
LCBObyB9OworICAgICAgICBJbmxpbmVCb3goY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYsIElu
bGluZUxheW91dFVuaXQgc3ludGhldGljQmFzZWxpbmUpOworICAgICAgICBJbmxpbmVCb3goY29u
c3QgRGlzcGxheTo6SW5saW5lUmVjdCYsIElubGluZUxheW91dFVuaXQgYmFzZWxpbmUsIElubGlu
ZUxheW91dFVuaXQgZGVzY2VudCwgSXNWaXN1YWxseUVtcHR5KTsKKyAgICAgICAgSW5saW5lQm94
KCkgPSBkZWZhdWx0OworCisgICAgICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxvZ2lj
YWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdDsgfQorICAgICAgICBJbmxpbmVM
YXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRvcCgp
OyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVy
biBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQorICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Qud2lkdGgoKTsgfQorICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2lj
YWxSZWN0LmhlaWdodCgpOyB9CisKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZWxpbmU7IH0KKyAgICAgICAgT3B0aW9uYWw8SW5saW5lTGF5
b3V0VW5pdD4gZGVzY2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VudDsgfQorCisgICAgICAg
IHZvaWQgc2V0TG9naWNhbFRvcChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIHsgbV9sb2dp
Y2FsUmVjdC5zZXRUb3AobG9naWNhbFRvcCk7IH0KKyAgICAgICAgdm9pZCBzZXRMb2dpY2FsV2lk
dGgoSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpIHsgbV9sb2dpY2FsUmVjdC5zZXRXaWR0
aChsb2dpY2FsV2lkdGgpOyB9CisKKyAgICAgICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX2lzVmlzdWFsbHlFbXB0eTsgfQorICAgICAgICB2b2lkIHNldElzVmlzdWFs
bHlOb25FbXB0eSgpIHsgbV9pc1Zpc3VhbGx5RW1wdHkgPSBmYWxzZTsgfQorICAgICAgICBib29s
IGlzQXRvbWljKCkgY29uc3QgeyByZXR1cm4gbV9pc0F0b21pYzsgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBtX2xvZ2ljYWxSZWN0OworICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IG1fYmFzZWxpbmU7CisgICAgICAgIE9wdGlvbmFsPElubGluZUxheW91dFVu
aXQ+IG1fZGVzY2VudDsKKyAgICAgICAgYm9vbCBtX2lzVmlzdWFsbHlFbXB0eSB7IHRydWUgfTsK
KyAgICAgICAgYm9vbCBtX2lzQXRvbWljIHsgZmFsc2UgfTsKICAgICB9OwogCiAgICAgZW51bSBj
bGFzcyBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgeyBObywgWWVzIH07CiAgICAgZW51bSBj
bGFzcyBJc0xpbmVWaXN1YWxseUVtcHR5IHsgTm8sIFllcyB9OwotICAgIExpbmVCb3goY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiwgY29u
c3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5LCBJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQpOworICAgIExpbmVCb3goY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmLCBjb25zdCBJbmxpbmVMYXlvdXRQb2ludCYgdG9wTGVmdCwgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsV2lkdGgsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxIZWlnaHQsIGNv
bnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiwgSXNMaW5lVmlzdWFsbHlFbXB0eSwgSXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50KTsKIAogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQo
KSBjb25zdCB7IHJldHVybiBtX3JlY3QubGVmdCgpOyB9CiAgICAgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JlY3QucmlnaHQoKTsgfQpAQCAtNjksMTE0
ICs4Niw0MyBAQCBwdWJsaWM6CiAgICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbG9naWNh
bFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBEaXNwbGF5OjpJbmxp
bmVSZWN0JiBzY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVP
dmVyZmxvdzsgfQogCi0gICAgc3RhdGljIEFzY2VudEFuZERlc2NlbnQgaGFsZkxlYWRpbmdNZXRy
aWNzKGNvbnN0IEZvbnRNZXRyaWNzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdo
dCk7Ci0KLSAgICAvLyBBbGlnbWVudCBiYXNlbGluZSBmcm9tIGxpbmUgbG9naWNhbCB0b3AuCi0g
ICAgLy8KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tICAgIGxpbmUgbG9naWNhbCB0b3AgICAg
IC0tLS0tLS0tLS0tLS0tLS0tLS0gKHRvcCBhbGlnbikKLSAgICAvLyAgICAgICAgICAgICBeICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLSAgICAvLyAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIHwK
LSAgICAvLyAgIF4gICAgICAgICB8IGFsaWdubWVudCBiYXNlbGluZSAgICAgICAgICAgICAgIHwg
ICAgICAgICAgIHwgYWxpZ25tZW50IGJhc2VsaW5lCi0gICAgLy8gICB8ICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8Ci0gICAgLy8gICB8IGFz
Y2VudCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFzY2VudCAgICB8Ci0g
ICAgLy8gICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICAg
ICAgICAgICB2Ci0gICAgLy8gICB2ICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tIGJhc2VsaW5lCi0gICAgLy8gICAtLS0tLS0tLS0tLS0t
LS0tLSBiYXNlbGluZSAgICAgICAgICAgICAgICAgICBeCi0gICAgLy8gICBeICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRlc2NlbnQKLSAgICAvLyAgIHwgZGVz
Y2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICBjb25zdCBJbmxp
bmVCb3gmIGlubGluZUJveEZvckxheW91dEJveChjb25zdCBCb3gmKSBjb25zdDsKKyAgICBEaXNw
bGF5OjpJbmxpbmVSZWN0IGlubGluZVJlY3RGb3JUZXh0UnVuKGNvbnN0IExpbmVCdWlsZGVyOjpS
dW4mKSBjb25zdDsKKworICAgIC8vIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fIGxpbmUgYm94IGxvZ2ljYWwgdG9wCisgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgXgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgIF9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyByb290IGlubGluZSBib3gKKyAgICAv
LyAgIF4gICAgICAgICAgICAgICAgICB8CisgICAgLy8gICB8ICAgICAgICAgICAgICAgICAgfAor
ICAgIC8vICAgfCByb290IGxpbmUgYXNjZW50IHwKKyAgICAvLyAgIHwgICAgICAgICAgICAgICAg
ICB8CisgICAgLy8gICB2ICAgICAgICAgICAgICAgICAgdgorICAgIC8vICAgX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGFsaWdubWVudCBiYXNlbGlu
ZQorICAgIC8vICAgXgorICAgIC8vICAgfCByb290IGxpbmUgZGVzY2VudAogICAgIC8vICAgdgot
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgbGluZSBsb2dpY2FsIGJvdHRvbSAgLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgIElubGluZUxheW91dFVuaXQgYWxpZ25tZW50QmFzZWxpbmUoKSBj
b25zdDsKLQotICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHJlY3RGb3JSdW4oY29uc3Qg
TGluZUJ1aWxkZXI6OlJ1biYgcnVuKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveExpc3RbbV9y
dW5Ub0lubGluZUJveE1hcC5nZXQoJnJ1bildLnJlY3Q7IH0KKyAgICAvLyAgIF9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCisgICAgLy8gX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18gbGluZSBib3ggbG9naWNhbCBib3R0b20KKyAg
ICBJbmxpbmVMYXlvdXRVbml0IGFsaWdubWVudEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9y
b290SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIG1fcm9vdElubGluZUJveC5iYXNlbGluZSgpOyB9
CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgQXNjZW50QW5kRGVzY2VudCYgYXNjZW50QW5kRGVzY2Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50OyB9Ci0K
LSAgICB2b2lkIHNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKElubGluZUxheW91dFVuaXQp
OwotICAgIHZvaWQgc2V0QXNjZW50SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwotICAgIHZv
aWQgc2V0RGVzY2VudElmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldExv
Z2ljYWxIZWlnaHRJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCk7Ci0KLSAgICB2b2lkIHNldFNj
cm9sbGFibGVPdmVyZmxvdyhjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiByZWN0KSB7IG1fc2Ny
b2xsYWJsZU92ZXJmbG93ID0gcmVjdDsgfQotCi0gICAgdm9pZCBhbGlnbkhvcml6b250YWxseShJ
bmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoLCBJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQpOwotICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7Ci0gICAgdm9pZCBhZGp1c3RCYXNlbGlu
ZUFuZExpbmVIZWlnaHQoKTsKLSAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRl
bnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25zdDsKKyAgICB2b2lkIGNvbnN0cnVj
dElubGluZUJveGVzKGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiwgSXNMaW5lVmlzdWFsbHlF
bXB0eSk7CisgICAgdm9pZCBhbGlnblZlcnRpY2FsbHkoSXNMaW5lVmlzdWFsbHlFbXB0eSk7CiAK
ICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9CiAgICAgTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlv
dXRTdGF0ZSgpOyB9CiAKIHByaXZhdGU6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1f
aGFzVmFsaWRBbGlnbm1lbnRCYXNlbGluZSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBjb25zdCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICBj
b25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOwogICAgIERpc3BsYXk6OklubGluZVJl
Y3QgbV9yZWN0OwogICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9zY3JvbGxhYmxlT3ZlcmZsb3c7
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBtX2FsaWdubWVudEJhc2VsaW5lIHsgMCB9OwotICAgIElu
bGluZUJveCBtX3Jvb3RJbmxpbmVCb3g7Ci0gICAgVmVjdG9yPElubGluZUJveD4gbV9pbmxpbmVC
b3hMaXN0OwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBiZSByZXBs
YWNlZCBieSBhbiBpbmxpbmUgYm94IG1hcC4KLSAgICBIYXNoTWFwPGNvbnN0IExpbmVCdWlsZGVy
OjpSdW4qLCBzaXplX3Q+IG1fcnVuVG9JbmxpbmVCb3hNYXA7Ci19OwotCi1pbmxpbmUgTGluZUJv
eDo6SW5saW5lQm94OjpJbmxpbmVCb3goY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgcmVjdCwg
Y29uc3QgQXNjZW50QW5kRGVzY2VudCYgYXNjZW50QW5kRGVzY2VudCwgY29uc3QgQm94JiBsYXlv
dXRCb3gpCi0gICAgOiByZWN0KHJlY3QpCi0gICAgLCBhc2NlbnRBbmREZXNjZW50KGFzY2VudEFu
ZERlc2NlbnQpCi0gICAgLCBsYXlvdXRCb3gobGF5b3V0Qm94KQotewotfQogCi1pbmxpbmUgdm9p
ZCBMaW5lQm94OjpzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQgbG9n
aWNhbEhlaWdodCkKLXsKLSAgICBpZiAobG9naWNhbEhlaWdodCA8PSBtX3JlY3QuaGVpZ2h0KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3JlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwot
fQotCi1pbmxpbmUgdm9pZCBMaW5lQm94OjpzZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihJ
bmxpbmVMYXlvdXRVbml0IGFsaWdubWVudEJhc2VsaW5lKQotewotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgbV9oYXNWYWxpZEFsaWdubWVudEJhc2VsaW5lID0gdHJ1ZTsKLSNlbmRpZgotICAgIG1f
YWxpZ25tZW50QmFzZWxpbmUgPSBzdGQ6Om1heChhbGlnbm1lbnRCYXNlbGluZSwgbV9hbGlnbm1l
bnRCYXNlbGluZSk7Ci19Ci0KLWlubGluZSB2b2lkIExpbmVCb3g6OnNldEFzY2VudElmR3JlYXRl
cihJbmxpbmVMYXlvdXRVbml0IGFzY2VudCkKLXsKLSAgICBpZiAoYXNjZW50IDwgbV9yb290SW5s
aW5lQm94LmFzY2VudEFuZERlc2NlbnQuYXNjZW50KQotICAgICAgICByZXR1cm47Ci0gICAgc2V0
QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYXNjZW50KTsKLSAgICBtX3Jvb3RJbmxpbmVCb3gu
YXNjZW50QW5kRGVzY2VudC5hc2NlbnQgPSBhc2NlbnQ7Ci19Ci0KLWlubGluZSB2b2lkIExpbmVC
b3g6OnNldERlc2NlbnRJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50KQotewotICAg
IGlmIChkZXNjZW50IDwgbV9yb290SW5saW5lQm94LmFzY2VudEFuZERlc2NlbnQuZGVzY2VudCkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50LmRl
c2NlbnQgPSBkZXNjZW50OwotfQotCi1pbmxpbmUgSW5saW5lTGF5b3V0VW5pdCBMaW5lQm94Ojph
bGlnbm1lbnRCYXNlbGluZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRBbGlnbm1l
bnRCYXNlbGluZSk7Ci0gICAgcmV0dXJuIG1fYWxpZ25tZW50QmFzZWxpbmU7Ci19CisgICAgSW5s
aW5lQm94IG1fcm9vdElubGluZUJveDsKIAotaW5saW5lIEFzY2VudEFuZERlc2NlbnQgTGluZUJv
eDo6aGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcywgSW5s
aW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCkKLXsKLSAgICBhdXRvIGFzY2VudCA9IGZv
bnRNZXRyaWNzLmFzY2VudCgpOwotICAgIGF1dG8gZGVzY2VudCA9IGZvbnRNZXRyaWNzLmRlc2Nl
bnQoKTsKLSAgICAvLyAxMC44LjEgTGVhZGluZyBhbmQgaGFsZi1sZWFkaW5nCi0gICAgYXV0byBo
YWxmTGVhZGluZyA9IChsaW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KSkgLyAy
OwotICAgIC8vIElubGluZSB0cmVlIGhlaWdodCBpcyBhbGwgaW50ZWdlciBiYXNlZC4KLSAgICBh
dXRvIGFkanVzdGVkQXNjZW50ID0gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oZmxvb3JmKGFz
Y2VudCArIGhhbGZMZWFkaW5nKSwgMCk7Ci0gICAgYXV0byBhZGp1c3RlZERlc2NlbnQgPSBzdGQ6
Om1heDxJbmxpbmVMYXlvdXRVbml0PihjZWlsZihkZXNjZW50ICsgaGFsZkxlYWRpbmcpLCAwKTsK
LSAgICByZXR1cm4geyBhZGp1c3RlZEFzY2VudCwgYWRqdXN0ZWREZXNjZW50IH07Ci19CisgICAg
T3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gbV9saW5lQWxpZ25tZW50T2Zmc2V0OworICAgIEhh
c2hNYXA8Y29uc3QgQm94Kiwgc3RkOjp1bmlxdWVfcHRyPElubGluZUJveD4+IG1faW5saW5lQm94
UmVjdE1hcDsKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDsKK307CiAKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCA5
NWE0NzQzMGI1YjY3ZTZjYWM1ZGRmYTUzOTZjYTEwMjc2MzVjYWU5Li41ZmFmMzZiYjQ1Mzc4ZDQ5
ZWU5NWEwMDA5NjEzMjJkZGQ4ZmE5OTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCkBAIC0x
MTAsMTAgKzExMCwxOCBAQCB2b2lkIExpbmVCdWlsZGVyOjpjbG9zZShib29sIGlzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudCkKICAgICAgICAgaWYgKGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
JiYgYXZhaWxhYmxlV2lkdGgoKSkgewogICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0
cmEgc3BhY2UuCiAgICAgICAgICAgICBhdXRvIGV4cGFuc2lvblRvRGlzdHJpYnV0ZSA9IGF2YWls
YWJsZVdpZHRoKCkgLyBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50OworICAgICAgICAgICAgYXV0
byBhY2N1bXVsYXRlZEV4cGFuc2lvbiA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAgICAgICAg
ICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgICAgICAgICAvLyBFeHBhbmQg
YW5kIG1vdmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KLSAgICAgICAgICAg
ICAgICBpZiAocnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJ1bi5zZXRIb3Jpem9udGFsRXhwYW5zaW9uKGV4cGFuc2lvblRvRGlzdHJpYnV0ZSAqIHJ1
bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOworICAgICAgICAgICAgICAgIC8vIEV4cGFu
ZCBhbmQgbW92ZSBydW5zIGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBhbnNpb24uCisgICAgICAgICAg
ICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworICAgICAg
ICAgICAgICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIEFTU0VSVChydW4uZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbXB1dGVkRXhwYW5z
aW9uID0gZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQoKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgd2h5IHdlIG5lZWQgdG8gc2V0
IGJvdGguCisgICAgICAgICAgICAgICAgcnVuLnNldEhvcml6b250YWxFeHBhbnNpb24oY29tcHV0
ZWRFeHBhbnNpb24pOworICAgICAgICAgICAgICAgIHJ1bi5zaHJpbmtIb3Jpem9udGFsbHkoLWNv
bXB1dGVkRXhwYW5zaW9uKTsKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiAr
PSBjb21wdXRlZEV4cGFuc2lvbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lTGluZUJ1aWxkZXIuaAppbmRleCA2ZjE1OGJhMzFiMWEwMWMwOTU1ZmNkM2FhYjlhYzQ3NmFm
ZGU1NDg0Li40YmE2MWNmZDQ1ODQxNDhlYTY4NzFiZjkwYjExNTFlMDY0MWJkNDIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVp
bGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmgKQEAgLTc3LDYgKzc3LDcgQEAgcHVibGljOgogCiAgICAgICAgIElubGlu
ZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsV2lkdGg7
IH0KICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9naWNhbExlZnQ7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQo
KSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdCgpICsgbG9naWNhbFdpZHRoKCk7IH0KIAogICAg
ICAgICBjb25zdCBEaXNwbGF5OjpSdW46OkV4cGFuc2lvbiYgZXhwYW5zaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9leHBhbnNpb247IH0KICAgICAgICAgYm9vbCBoYXNFeHBhbnNpb25PcHBvcnR1bml0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407618</attachid>
            <date>2020-08-31 13:01:13 -0700</date>
            <delta_ts>2020-09-02 19:00:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215410-20200831130112.patch</filename>
            <type>text/plain</type>
            <size>56123</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ5ODA4ZTQzMzBlZDYy
NTcyNjY1MjJjNzI2ZWEyNmFmYjdjYTk5Mi4uZWJlODUwMTA3NmIzYTVjNGNhYjY5MmRjZWQzNjY2
Y2Y4NTdmNDNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIwLTA4LTI4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBGaW5hbGl6
ZSBJbmxpbmVCb3ggYWxpZ25tZW50IGluIExpbmVCb3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29tcGxldGVzIHRoZSBJbmxpbmVC
b3ggdHJhbnNpdGlvbi4KKworICAgICAgICBMaW5lQm94IG5vdyBoYXMgYSBkZWRpY2F0ZWQgcm9v
dCBpbmxpbmUgYm94IGFuZCBhZGRpdGlvbmFsIGlubGluZSBib3hlcyBhcyBuZWVkZWQuCisgICAg
ICAgIEJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYWxpZ25tZW50cyBhcmUgcGVyZm9ybWVk
IG9uIHRoZSBpbmxpbmUgYm94ZXMgYXMgb3Bwb3NlZCB0byBvbiB0aGUgcnVucy4KKworICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29uc3RyYWludHNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
UXVpcmtzOjppbml0aWFsTGluZUhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OmNvbGxlY3RIYW5naW5nQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Omhvcml6
b250YWxBbGlnbm1lbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYWxmTGVh
ZGluZ01ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVC
b3g6OklubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OkxpbmVC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjptX2lubGluZUZvcm1hdHRpbmdDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lQm94Rm9yTGF5b3V0
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lUmVj
dEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpj
b25zdHJ1Y3RJbmxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6
OmFsaWduVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnJl
Y3RGb3JSdW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94OjphbGlnbkhvcml6b250YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmNvbGxlY3RIYW5naW5nQ29udGVudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OkFz
Y2VudEFuZERlc2NlbnQ6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCb3g6OklubGluZUJveDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxMZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94Ojpsb2dpY2Fs
V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVC
b3g6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94OjpJbmxpbmVCb3g6OmJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJveDo6SW5saW5lQm94OjpkZXNjZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpzZXRMb2dpY2FsVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpzZXRMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmlzQXRvbWljSW5saW5l
TGV2ZWxCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxp
bmVCb3g6OnNldEhhc1N0cnV0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6
SW5saW5lQm94OjpoYXNTdHJ1dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCb3g6OmFsaWdubWVudEJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QXNjZW50QW5kRGVzY2VudDo6aGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJveDo6YXNjZW50QW5kRGVzY2VudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldFNjcm9sbGFibGVPdmVyZmxv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUJv
eDo6SW5saW5lQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eDo6c2V0TG9naWNhbEhlaWdodElmR3JlYXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCb3g6OnNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0QXNjZW50SWZHcmVhdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0RGVzY2Vu
dElmR3JlYXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6
OmhhbGZMZWFkaW5nTWV0cmljcyk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKwogMjAyMC0wOC0zMCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IFRleHRFbmNvZGVyU3RyZWFtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlz
cGxheXRyZWUvRGlzcGxheUlubGluZVJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5SW5saW5lUmVjdC5oCmluZGV4IDI3YmUwOGZkYTA1NmI5YzYyZDQwYzIw
MzFiNDdjNjAxNTg2NzFmNzAuLjUyM2U4ZTAxMzU4ZTIyM2I5MDQzNTYzNmVhMzQyN2U3NDgxYmQx
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5
SW5saW5lUmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNw
bGF5SW5saW5lUmVjdC5oCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbW92
ZUhvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0KTsKICAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5
KElubGluZUxheW91dFVuaXQpOworICAgIHZvaWQgbW92ZUJ5KElubGluZUxheW91dFBvaW50KTsK
IAogICAgIHZvaWQgZXhwYW5kKE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+LCBPcHRpb25hbDxJ
bmxpbmVMYXlvdXRVbml0Pik7CiAgICAgdm9pZCBleHBhbmRUb0NvbnRhaW4oY29uc3QgSW5saW5l
UmVjdCYpOwpAQCAtMjM2LDYgKzIzNywxMyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVSZWN0Ojptb3Zl
VmVydGljYWxseShJbmxpbmVMYXlvdXRVbml0IG9mZnNldCkKICAgICBtX3JlY3QubW92ZShJbmxp
bmVMYXlvdXRTaXplIHsgMCwgb2Zmc2V0IH0pOwogfQogCitpbmxpbmUgdm9pZCBJbmxpbmVSZWN0
Ojptb3ZlQnkoSW5saW5lTGF5b3V0UG9pbnQgb2Zmc2V0KQoreworICAgIEFTU0VSVChtX2hhc1Zh
bGlkVG9wKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIG1fcmVjdC5tb3ZlQnko
b2Zmc2V0KTsKK30KKwogaW5saW5lIHZvaWQgSW5saW5lUmVjdDo6ZXhwYW5kKE9wdGlvbmFsPElu
bGluZUxheW91dFVuaXQ+IHdpZHRoLCBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBoZWlnaHQp
CiB7CiAgICAgQVNTRVJUKCF3aWR0aCB8fCBtX2hhc1ZhbGlkV2lkdGgpOwpAQCAtMjQ1LDcgKzI1
MywxMyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVSZWN0OjpleHBhbmQoT3B0aW9uYWw8SW5saW5lTGF5
b3V0VW5pdD4gd2lkdGgsIE9wdGlvbmFsPElubGluZQogCiBpbmxpbmUgdm9pZCBJbmxpbmVSZWN0
OjpleHBhbmRUb0NvbnRhaW4oY29uc3QgSW5saW5lUmVjdCYgb3RoZXIpCiB7Ci0gICAgbV9yZWN0
ID0gdW5pb25SZWN0KG90aGVyLCBtX3JlY3QpOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9o
YXNWYWxpZFRvcCA9IHRydWU7CisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworICAgIG1faGFz
VmFsaWRXaWR0aCA9IHRydWU7CisgICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYK
KyAgICBtX3JlY3QudW5pdGVFdmVuSWZFbXB0eShvdGhlcik7CiB9CiAKIGlubGluZSB2b2lkIElu
bGluZVJlY3Q6OmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4oY29uc3QgSW5saW5lUmVjdCYgb3Ro
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggYmM0MzlmMGQ1NDA4
MzNlMmI5NWU1YjBiYjA1OWY2NGRkNWIyNTk0ZC4uNzZlNzZmMjRlYTAyNGU5OTY4ZWUwOTU5ZWFl
YmZiNTZiMDkyOTA4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAt
MTY3LDggKzE2NywxMCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0
KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9KCk7CiAgICAgICAgIGxpbmUuY2xvc2UoaXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50KTsKLSAgICAgICAgYXV0byBsaW5lUmVjdCA9IERpc3BsYXk6OklubGlu
ZVJlY3QgeyBsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxpbmUubGluZUxvZ2ljYWxX
aWR0aCgpLCBsaW5lQ29uc3RyYWludHMubGluZUhlaWdodH07Ci0gICAgICAgIGF1dG8gbGluZUJv
eCA9IExpbmVCb3ggeyAqdGhpcywgbGluZVJlY3QsIGxpbmVDb250ZW50LnJ1bnMsIGxpbmUuaXNW
aXN1YWxseUVtcHR5KCkgPyBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMgOiBMaW5l
Qm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpObywgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
ID8gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQm94OjpJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vIH07CisKKyAgICAgICAgYXV0byBsaW5lSXNW
aXN1YWxseUVtcHR5ID0gbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSA/IExpbmVCb3g6OklzTGluZVZp
c3VhbGx5RW1wdHk6OlllcyA6IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6Ok5vOworICAg
ICAgICBhdXRvIGxhc3RMaW5lID0gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID8gTGluZUJv
eDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQm94OjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94IHsg
KnRoaXMsIGxpbmVDb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgbGluZS5saW5lTG9naWNhbFdp
ZHRoKCksIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29udGVudC5ydW5zLCBsaW5l
SXNWaXN1YWxseUVtcHR5LCBsYXN0TGluZX07CiAgICAgICAgIHNldERpc3BsYXlCb3hlc0Zvckxp
bmUobGluZUNvbnRlbnQsIGxpbmVCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwogCiAgICAg
ICAgIGlmICghbGluZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsKQEAgLTQxNywxNCArNDE5LDEz
IEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lQ29uc3RyYWludHMgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yCiB7CiAgICAgYXV0byBsaW5lTG9naWNhbExlZnQg
PSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbExlZnQ7CiAgICAgYXV0byBsaW5lTG9naWNh
bFJpZ2h0ID0gbGluZUxvZ2ljYWxMZWZ0ICsgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aDsKLSAgICBhdXRvIGluaXRpYWxMaW5lSGVpZ2h0ID0gcXVpcmtzKCkuaW5pdGlhbExpbmVI
ZWlnaHQocm9vdCgpKTsKICAgICBhdXRvIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZhbHNl
OwogCiAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCks
ICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKICAgICAvLyBDaGVj
ayBmb3IgaW50cnVkaW5nIGZsb2F0cyBhbmQgYWRqdXN0IGxvZ2ljYWwgbGVmdC9hdmFpbGFibGUg
d2lkdGggZm9yIHRoaXMgbGluZSBhY2NvcmRpbmdseS4KICAgICBpZiAoIWZsb2F0aW5nQ29udGV4
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciB2YXJpYWJs
ZSBsaW5lIGhlaWdodCwgd2hlcmUgdGhlIGludHJ1c2l2ZSBmbG9hdHMgc2hvdWxkIGJlIHByb2Jl
ZCBhcyB0aGUgbGluZSBoZWlnaHQgZ3Jvd3MuCi0gICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50
cyA9IGZsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyh0b0xheW91dFVuaXQobGluZUxvZ2ljYWxU
b3ApLCB0b0xheW91dFVuaXQobGluZUxvZ2ljYWxUb3AgKyBpbml0aWFsTGluZUhlaWdodCkpOwor
ICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWlu
dHModG9MYXlvdXRVbml0KGxpbmVMb2dpY2FsVG9wKSwgdG9MYXlvdXRVbml0KGxpbmVMb2dpY2Fs
VG9wICsgcXVpcmtzKCkuaW5pdGlhbExpbmVIZWlnaHQoKSkpOwogICAgICAgICAvLyBDaGVjayBp
ZiB0aGVzZSBjb25zdHJhaW50cyBhY3R1YWxseSBwdXQgbGltaXRhdGlvbiBvbiB0aGUgbGluZS4K
ICAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLmxl
ZnQtPnggPD0gbGluZUxvZ2ljYWxMZWZ0KQogICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5s
ZWZ0ID0geyB9OwpAQCAtNDgwLDcgKzQ4MSw3IEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yCiAg
ICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmNvbXB1dGVkVGV4dEluZGVudChyb290LCBob3Jpem9u
dGFsQ29uc3RyYWludHMpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pOwogICAgIH07CiAg
ICAgbGluZUxvZ2ljYWxMZWZ0ICs9IGNvbXB1dGVkVGV4dEluZGVudCgpOwotICAgIHJldHVybiBM
aW5lQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgbGlu
ZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwgaW5pdGlhbExpbmVIZWlnaHQsIGxpbmVJ
c0NvbnN0cmFpbmVkQnlGbG9hdCB9OworICAgIHJldHVybiBMaW5lQ29uc3RyYWludHMgeyB7IGxp
bmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVM
b2dpY2FsTGVmdCwgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IH07CiB9CiAKIHZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUxheW91
dENvbnRleHQ6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgTGluZUJveCYgbGluZUJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCkBA
IC01MTAsMTYgKzUxMSwxMyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNw
bGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaQogICAgIGF1dG8mIGlu
bGluZUNvbnRlbnQgPSBmb3JtYXR0aW5nU3RhdGUuZW5zdXJlRGlzcGxheUlubGluZUNvbnRlbnQo
KTsKICAgICBhdXRvIGxpbmVJbmRleCA9IGlubGluZUNvbnRlbnQubGluZUJveGVzLnNpemUoKTsK
ICAgICBhdXRvIGxpbmVJbmtPdmVyZmxvdyA9IGxpbmVCb3guc2Nyb2xsYWJsZU92ZXJmbG93KCk7
Ci0gICAgLy8gQ29tcHV0ZSBib3ggZmluYWwgZ2VvbWV0cnkuCisgICAgLy8gQ29tcHV0ZSBmaW5h
bCBib3ggZ2VvbWV0cnkuCiAgICAgZm9yIChhdXRvJiBsaW5lUnVuIDogbGluZUNvbnRlbnQucnVu
cykgewotICAgICAgICBhdXRvJiBsb2dpY2FsUmVjdCA9IGxpbmVCb3gucmVjdEZvclJ1bihsaW5l
UnVuKTsKICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsKLQot
ICAgICAgICAvLyBBZGQgZmluYWwgZGlzcGxheSBydW5zIHRvIHN0YXRlIGZpcnN0LgogICAgICAg
ICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVycyAoPHNwYW4+KSBkb24ndCBnZW5lcmF0ZSBkaXNw
bGF5IHJ1bnMgYW5kIG5laXRoZXIgZG8gY29tcGxldGVseSBjb2xsYXBzZWQgcnVucy4KLSAgICAg
ICAgYXV0byBpbml0aWF0ZXNJbmxpbmVSdW4gPSAhbGluZVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkg
JiYgIWxpbmVSdW4uaXNDb250YWluZXJFbmQoKTsKKyAgICAgICAgYXV0byBpbml0aWF0ZXNJbmxp
bmVSdW4gPSBsaW5lUnVuLmlzVGV4dCgpIHx8IGxpbmVSdW4uaXNMaW5lQnJlYWsoKSB8fCBsaW5l
UnVuLmlzQm94KCk7CiAgICAgICAgIGlmIChpbml0aWF0ZXNJbmxpbmVSdW4pIHsKLSAgICAgICAg
ICAgIGF1dG8gY29tcHV0ZWRJbmtPdmVyZmxvdyA9IFsmXSB7CisgICAgICAgICAgICBhdXRvIGNv
bXB1dGVkSW5rT3ZlcmZsb3cgPSBbJl0gKGNvbnN0IGF1dG8mIGxvZ2ljYWxSZWN0KSB7CiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24tdGV4dCBpbmsgb3ZlcmZs
b3cuCiAgICAgICAgICAgICAgICAgaWYgKCFsaW5lUnVuLmlzVGV4dCgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbG9naWNhbFJlY3Q7CkBAIC01MzUsNTMgKzUzMywzMyBAQCB2b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVM
YXlvdXRDb250ZXh0OjpMaQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1
cm4gaW5rT3ZlcmZsb3c7CiAgICAgICAgICAgICB9OwotICAgICAgICAgICAgYXV0byBpbmtPdmVy
ZmxvdyA9IGNvbXB1dGVkSW5rT3ZlcmZsb3coKTsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFJl
Y3QgPSBsaW5lUnVuLmlzQm94KCkgPyBsaW5lQm94LmlubGluZUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpLmxvZ2ljYWxSZWN0KCkgOiBsaW5lQm94LmlubGluZVJlY3RGb3JUZXh0UnVuKGxpbmVS
dW4pOworICAgICAgICAgICAgLy8gSW5saW5lIGJveGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgbGlu
ZSBib3ggd2hpbGUgZmluYWwgRGlzcGxheTo6UnVucyBuZWVkIHRvIGJlIHJlbGF0aXZlIHRvIHRo
ZSBwYXJlbnQgRGlzcGxheTpCb3gKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2Ug
anVzdCBsZWF2ZSB0aGVtIGJlIHJlbGF0aXZlIHRvIHRoZSBsaW5lIGJveD8KKyAgICAgICAgICAg
IGxvZ2ljYWxSZWN0Lm1vdmVCeSh7IGxpbmVCb3gubG9naWNhbExlZnQoKSwgbGluZUJveC5sb2dp
Y2FsVG9wKCkgfSk7CisgICAgICAgICAgICBhdXRvIGlua092ZXJmbG93ID0gY29tcHV0ZWRJbmtP
dmVyZmxvdyhsb2dpY2FsUmVjdCk7CiAgICAgICAgICAgICBsaW5lSW5rT3ZlcmZsb3cuZXhwYW5k
VG9Db250YWluKGlua092ZXJmbG93KTsKLSAgICAgICAgICAgIGlubGluZUNvbnRlbnQucnVucy5h
cHBlbmQoeyBsaW5lSW5kZXgsIGxpbmVSdW4ubGF5b3V0Qm94KCksIGxvZ2ljYWxSZWN0LCBpbmtP
dmVyZmxvdywgbGluZVJ1bi5leHBhbnNpb24oKSwgbGluZVJ1bi50ZXh0Q29udGVudCgpIH0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxpbmVSdW4uaXNUZXh0KCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAobGluZVJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogU2luY2UgPGJyPiBhbmQgPHdicj4gcnVucyBoYXZlIGFzc29jaWF0ZWQg
RE9NIGVsZW1lbnRzLCB3ZSBtaWdodCBuZWVkIHRvIGNvbnN0cnVjdCBhIGRpc3BsYXkgYm94IGhl
cmUuIAotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpbmxpbmVDb250ZW50LnJ1
bnMuYXBwZW5kKHsgbGluZUluZGV4LCBsYXlvdXRCb3gsIGxvZ2ljYWxSZWN0LCBpbmtPdmVyZmxv
dywgbGluZVJ1bi5leHBhbnNpb24oKSwgbGluZVJ1bi50ZXh0Q29udGVudCgpIH0pOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gSW5saW5lIGxldmVsIGJveCAocmVwbGFjZWQgb3IgaW5saW5lLWJs
b2NrKQotICAgICAgICBpZiAobGluZVJ1bi5pc0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHRv
cExlZnQgPSBsb2dpY2FsUmVjdC50b3BMZWZ0KCk7CisgICAgICAgIC8vIENyZWF0ZSBkaXNwbGF5
IGJveGVzLgorICAgICAgICAvLyBGSVhNRTogU2luY2UgPGJyPiBhbmQgPHdicj4gcnVucyBoYXZl
IGFzc29jaWF0ZWQgRE9NIGVsZW1lbnRzLCB3ZSBtaWdodCBuZWVkIHRvIGNvbnN0cnVjdCBhIGRp
c3BsYXkgYm94IGhlcmUuIAorICAgICAgICBhdXRvIGluaXRpYXRlc0Rpc3BsYXlCb3ggPSBsaW5l
UnVuLmlzQm94KCkgfHwgbGluZVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCk7CisgICAgICAgIGlmIChp
bml0aWF0ZXNEaXNwbGF5Qm94KSB7CisgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9y
bWF0dGluZ1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8mIGlu
bGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAg
ICAgICAgICBhdXRvIHRvcExlZnQgPSBpbmxpbmVCb3gubG9naWNhbFJlY3QoKS50b3BMZWZ0KCk7
CiAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQogICAgICAg
ICAgICAgICAgIHRvcExlZnQgKz0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25P
ZmZzZXQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgICAgICAgICAgYXV0
byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAg
ICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQodG9MYXlvdXRQb2ludCh0b3BMZWZ0KSk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElubGluZSBs
ZXZlbCBjb250YWluZXIgc3RhcnQgKDxzcGFuPikKLSAgICAgICAgaWYgKGxpbmVSdW4uaXNDb250
YWluZXJTdGFydCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGlu
Z1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0
VG9wTGVmdCh0b0xheW91dFBvaW50KGxvZ2ljYWxSZWN0LnRvcExlZnQoKSkpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFp
bmVyIGVuZCAoPC9zcGFuPikKLSAgICAgICAgaWYgKGxpbmVSdW4uaXNDb250YWluZXJFbmQoKSkg
ewotICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5
Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRp
b25lZCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmZsb3dPZmZzZXQgPSBnZW9tZXRyeSgp
LmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cyk7Ci0gICAgICAgICAgICAgICAgZGlzcGxheUJveC5tb3ZlSG9yaXpvbnRhbGx5KGlu
Zmxvd09mZnNldC53aWR0aCgpKTsKLSAgICAgICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVWZXJ0
aWNhbGx5KGluZmxvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAobGluZVJ1bi5p
c0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG1hcmdpbkJveFdpZHRo
ID0gaW5saW5lQm94LmxvZ2ljYWxXaWR0aCgpOworICAgICAgICAgICAgICAgIGF1dG8gY29udGVu
dEJveFdpZHRoID0gbWFyZ2luQm94V2lkdGggLSAoZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsg
ZGlzcGxheUJveC5ib3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVP
cigwKSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZpeCBpdCBmb3IgbXVsdGlsaW5lLgor
ICAgICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHRvTGF5b3V0VW5p
dChjb250ZW50Qm94V2lkdGgpKTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRl
bnRCb3hIZWlnaHQodG9MYXlvdXRVbml0KGlubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94V2lkdGggPSBsb2dpY2FsUmVj
dC5sZWZ0KCkgLSBkaXNwbGF5Qm94LmxlZnQoKTsKLSAgICAgICAgICAgIGF1dG8gY29udGVudEJv
eFdpZHRoID0gbWFyZ2luQm94V2lkdGggLSAoZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsgZGlz
cGxheUJveC5ib3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigw
KSk7Ci0gICAgICAgICAgICAvLyBGSVhNRSBmaXggaXQgZm9yIG11bHRpbGluZS4KLSAgICAgICAg
ICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHRvTGF5b3V0VW5pdChjb250ZW50Qm94
V2lkdGgpKTsKLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodCh0b0xh
eW91dFVuaXQobG9naWNhbFJlY3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoZSBsb2dpY2FsIHRvIHBoeXNpY2FsIHRyYW5zbGF0ZSBz
aG91bGQgaGFwcGVuLgogICAgIGlubGluZUNvbnRlbnQubGluZUJveGVzLmFwcGVuZCh7IGxpbmVC
b3gubG9naWNhbFJlY3QoKSwgbGluZUJveC5zY3JvbGxhYmxlT3ZlcmZsb3coKSwgbGluZUlua092
ZXJmbG93LCBsaW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaAppbmRleCA0YTJjMTM3YWRjZGVlNzRlOGY0NDM3NjMwZDkwNmVmMzM0NmRm
MTM4Li44MTdhY2ViMzI3N2EwZjQwMmVlNDNkZjUxOWFhNDE3NjJmMmFjOTA2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTQ2LDEzICs0NiwxMCBAQCBwdWJsaWM6CiAgICAg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29u
dGV4dFJvb3QsIElubGluZUZvcm1hdHRpbmdTdGF0ZSYpOwogICAgIHZvaWQgbGF5b3V0SW5GbG93
Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29u
dGVudCYpIG92ZXJyaWRlOwogCi1wcml2YXRlOgotICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7Ci0KICAgICBj
bGFzcyBRdWlya3MgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyB7CiAgICAgcHVi
bGljOgogICAgICAgICBib29sIGxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JikgY29uc3Q7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgaW5pdGlh
bExpbmVIZWlnaHQoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nUm9vdCkgY29uc3Q7Cisg
ICAgICAgIElubGluZUxheW91dFVuaXQgaW5pdGlhbExpbmVIZWlnaHQoKSBjb25zdDsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsK
QEAgLTYzLDYgKzYwLDkgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpRdWlya3MgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gUXVpcmtzKCp0aGlzKTsgfQog
Citwcml2YXRlOgorICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CisKICAgICBjbGFzcyBHZW9tZXRyeSA6IHB1
YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgewogICAgIHB1YmxpYzoKICAgICAgICAg
Q29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxpbmVCbG9ja0hlaWdodEFuZE1hcmdpbihjb25zdCBC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZVZlcnRpY2Fs
VmFsdWVzJikgY29uc3Q7CkBAIC05MSw3ICs5MSw2IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IExp
bmVDb25zdHJhaW50cyB7CiAgICAgICAgIElubGluZUxheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0
OwogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCB7IDAgfTsK
LSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsaW5lSGVpZ2h0IHsgMCB9OwogICAgICAgICBib29s
IGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB7IGZhbHNlIH07CiAgICAgfTsKICAgICBMaW5lQ29u
c3RyYWludHMgY29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYs
IElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWly
a3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmluZGV4IDBkM2UwMzYyZjA2OTAyODZkNGI2ZDUwNjRi
Nzg5ODhlMzBmZDRhOTEuLjAxN2JjN2Q0MGUzNDBjMTFmYTYwZTY5YjAyMDA1MWI4ZDUzMjU0ZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTcw
LDEzICs3MCwxMyBAQCBib29sIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmxpbmVE
ZXNjZW50TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExpbmVCdWlsZAogICAgIHJldHVybiB0cnVlOwog
fQogCi1JbmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6Omlu
aXRpYWxMaW5lSGVpZ2h0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ1Jvb3QpIGNvbnN0
CitJbmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmluaXRp
YWxMaW5lSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGNvbXB1dGVkTGlu
ZUhlaWdodCA9IGZvcm1hdHRpbmdSb290LnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CiAg
ICAgLy8gTmVnYXRpdmUgbGluZUhlaWdodCB2YWx1ZSBtZWFucyB0aGUgbGluZS1oZWlnaHQgaXMg
bm90IHNldAotICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluTm9RdWlya3NNb2RlKCkgfHwgIWZvcm1h
dHRpbmdSb290LnN0eWxlKCkubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSkKLSAgICAgICAgcmV0
dXJuIGNvbXB1dGVkTGluZUhlaWdodDsKLSAgICByZXR1cm4gTGluZUJveDo6aGFsZkxlYWRpbmdN
ZXRyaWNzKGZvcm1hdHRpbmdSb290LnN0eWxlKCkuZm9udE1ldHJpY3MoKSwgY29tcHV0ZWRMaW5l
SGVpZ2h0KS5oZWlnaHQoKTsKKyAgICBhdXRvJiByb290ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5y
b290KCk7CisgICAgaWYgKGxheW91dFN0YXRlKCkuaW5Ob1F1aXJrc01vZGUoKSB8fCAhcm9vdC5z
dHlsZSgpLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkpCisgICAgICAgIHJldHVybiByb290LnN0
eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisgICAgcmV0dXJuIHJvb3Quc3R5bGUoKS5mb250
TWV0cmljcygpLmZsb2F0SGVpZ2h0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKaW5kZXggNjBi
MjNjYWQxNGQzODhmNDlkYTVjNmE3OTMyZjRjYWVlY2FkODEyYS4uOGVjYWFlNmMzNTIzMDc1NTA0
YzRjY2IzZWU4M2I4ZTFhMDk5OTE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKQEAgLTMxLDYgKzMxLDEz
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorc3RydWN0IEFz
Y2VudEFuZERlc2NlbnQgeworICAgIElubGluZUxheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gYXNjZW50ICsgZGVzY2VudDsgfQorCisgICAgSW5saW5lTGF5b3V0VW5pdCBhc2NlbnQg
eyAwIH07CisgICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50IHsgMCB9OworfTsKKwogc3RydWN0
IEhhbmdpbmdDb250ZW50IHsKIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0KCk7CkBAIC01MiwxMzkg
KzU5LDE1MiBAQCB2b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgpCiAgICAgbV93aWR0aCA9ICAw
OwogfQogCi1MaW5lQm94OjpMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbGluZVJl
Y3QsIGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5
IGlzTGluZVZpc3VhbGx5RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpCi0gICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlu
bGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9ydW5zKHJ1bnMpCi0gICAgLCBtX3JlY3Qo
bGluZVJlY3QpCi0gICAgLCBtX3Njcm9sbGFibGVPdmVyZmxvdyhsaW5lUmVjdCkKLSAgICAsIG1f
cm9vdElubGluZUJveChJbmxpbmVCb3ggeyBsaW5lUmVjdCwgeyB9LCBpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5yb290KCkgfSkKK3N0YXRpYyBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0Nv
bnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIExpbmVCb3g6OklzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCiB7Ci0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1ZhbGlkQWxpZ25tZW50QmFzZWxpbmUgPSB0cnVlOwot
I2VuZGlmCi0gICAgYXV0byYgcm9vdFN0eWxlID0gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQucm9v
dCgpLnN0eWxlKCk7Ci0gICAgYXV0byBoYWxmTGVhZGluZ01ldHJpY3MgPSB0aGlzLT5oYWxmTGVh
ZGluZ01ldHJpY3Mocm9vdFN0eWxlLmZvbnRNZXRyaWNzKCksIGxpbmVSZWN0LmhlaWdodCgpKTsK
LQotICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50ID0gaGFsZkxlYWRpbmdNZXRy
aWNzOwotICAgIG1fYWxpZ25tZW50QmFzZWxpbmUgPSBoYWxmTGVhZGluZ01ldHJpY3MuYXNjZW50
OwotCi0gICAgYXV0byBjb250ZW50TG9naWNhbFdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07
Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgYXV0byBydW5IZWlnaHQg
PSBbJl0oKSAtPiBJbmxpbmVMYXlvdXRVbml0IHsKLSAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRy
aWNzID0gcnVuLnN0eWxlKCkuZm9udE1ldHJpY3MoKTsKLSAgICAgICAgICAgIGlmIChydW4uaXNU
ZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRN
ZXRyaWNzLmhlaWdodCgpOwotCi0gICAgICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQo
KSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZm9udE1l
dHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlv
dXRCb3goKTsKLSAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gaW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGlmIChsYXlv
dXRCb3guaXNSZXBsYWNlZEJveCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7
Ci0KLSAgICAgICAgICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1i
bG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdpbiBib3ggaXMg
Y29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KLSAgICAgICAgICAgIHJldHVybiBi
b3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgdGVtcG9yYXJ5LiBEbyBub3QgbWFrZSBhbiBpbmxpbmUgYm94IGZvciBlYWNo
IHJ1bi4KLSAgICAgICAgbV9pbmxpbmVCb3hMaXN0LmFwcGVuZChJbmxpbmVCb3ggeyB7IDAsIHJ1
bi5sb2dpY2FsTGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCksIHJ1bkhlaWdodCgpIH0sIGhhbGZM
ZWFkaW5nTWV0cmljcywgcnVuLmxheW91dEJveCgpIH0pOwotICAgICAgICBtX3J1blRvSW5saW5l
Qm94TWFwLnNldCgmcnVuLCBtX2lubGluZUJveExpc3Quc2l6ZSgpIC0gMSk7Ci0gICAgICAgIGNv
bnRlbnRMb2dpY2FsV2lkdGggKz0gcnVuLmxvZ2ljYWxXaWR0aCgpOwotICAgIH0KLSAgICBtX3Nj
cm9sbGFibGVPdmVyZmxvdy5zZXRXaWR0aChzdGQ6Om1heChsaW5lUmVjdC53aWR0aCgpLCBjb250
ZW50TG9naWNhbFdpZHRoKSk7Ci0gICAgYWxpZ25WZXJ0aWNhbGx5KCk7Ci0gICAgYWxpZ25Ib3Jp
em9udGFsbHkobGluZVJlY3Qud2lkdGgoKSAtIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGlzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCk7Ci0KLSAgICBpZiAoaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJ
c0xpbmVWaXN1YWxseUVtcHR5OjpZZXMpIHsKLSAgICAgICAgbV9yZWN0LnNldEhlaWdodCh7IH0p
OwotICAgICAgICBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2VudCA9IHsgfTsKKyAgICBh
dXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OworICAgIGlmIChpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgPT0gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50OjpZZXMpCisgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKKyAg
ICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UocnVucykpIHsKKyAgICAg
ICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Cisg
ICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRl
c3BhY2UoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZl
IGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bi5zdHlsZSgp
LndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFu
Z2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQo
cnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOwogICAgIH0KKyAgICByZXR1cm4gaGFuZ2lu
Z0NvbnRlbnQ7CiB9CiAKLXZvaWQgTGluZUJveDo6YWxpZ25Ib3Jpem9udGFsbHkoSW5saW5lTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFz
dExpbmUpCitzdGF0aWMgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gaG9yaXpvbnRhbEFsaWdu
bWVudE9mZnNldChjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9k
ZSB0ZXh0QWxpZ24sIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5
b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQgaXNMYXN0TGluZSkKIHsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVj
dEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmUpOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBs
aW5lTG9naWNhbFdpZHRoIC0gY29udGVudExvZ2ljYWxXaWR0aDsKKyAgICBhdXRvIGhhbmdpbmdD
b250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KHJ1bnMsIGlzTGFzdExpbmUpOwogICAgIGF2
YWlsYWJsZVdpZHRoICs9IGhhbmdpbmdDb250ZW50LndpZHRoKCk7Ci0gICAgaWYgKG1fcnVucy5p
c0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChhdmFpbGFibGVXaWR0aCA8PSAwKQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byBj
b21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0gewotICAgICAgICBhdXRvJiByb290U3R5
bGUgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgpOwotICAgICAgICBpZiAocm9v
dFN0eWxlLnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgICAg
ICByZXR1cm4gcm9vdFN0eWxlLnRleHRBbGlnbigpOworICAgICAgICBpZiAodGV4dEFsaWduICE9
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICByZXR1cm4gdGV4dEFsaWduOwog
ICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVj
aWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKICAgICAgICAgLy8gaW4gb3JkZXIg
dG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQg
YnkgdGV4dC1hbGlnbi1sYXN0LAogICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZv
cmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgotICAg
ICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gSXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCisgICAgICAgIGlmIChydW5zLmxhc3QoKS5p
c0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50OjpZZXMpCiAgICAgICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7
CiAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OwotICAgIH0oKTsKLQotICAg
IGlmIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eSkgewotICAgICAgICBhdXRvIGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gSW5saW5lTGF5b3V0VW5p
dCB7IH07Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX3J1bnMuc2l6
ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBtX2lubGluZUJveExpc3RbaW5kZXhdLnJlY3Qu
bW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7CisgICAgfTsKIAotICAgICAg
ICAgICAgYXV0byBob3Jpem9udGFsRXhwYW5zaW9uID0gbV9ydW5zW2luZGV4XS5leHBhbnNpb24o
KS5ob3Jpem9udGFsRXhwYW5zaW9uOwotICAgICAgICAgICAgbV9pbmxpbmVCb3hMaXN0W2luZGV4
XS5yZWN0LmV4cGFuZEhvcml6b250YWxseShob3Jpem9udGFsRXhwYW5zaW9uKTsKLSAgICAgICAg
ICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGhvcml6b250YWxFeHBhbnNpb247Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25t
ZW50KCkpIHsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5k
OgorICAgICAgICByZXR1cm4gYXZhaWxhYmxlV2lkdGg7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpDZW50ZXI6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAg
IHJldHVybiBhdmFpbGFibGVXaWR0aCAvIDI7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5OgorICAgICAgICAvLyBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5IGlzIGEgcnVuIGFsaWdubWVu
dCAoYW5kIHdlIG9ubHkgZG8gaW5saW5lIGJveCBhbGlnbm1lbnQgaGVyZSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lF
VCgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4geyB9OworfQogCi0gICAgYXV0byBhZGp1c3RtZW50Rm9yQWxpZ25tZW50
ID0gWyZdIChhdXRvIGF2YWlsYWJsZVdpZHRoKSAtPiBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0
PiB7Ci0gICAgICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50KSB7Ci0gICAg
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpXZWJLaXRMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKLSAg
ICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAgICAgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0
VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDApOwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNl
bnRlcjoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAg
ICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGggLyAy
LCAwKTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Owor
aW5saW5lIHN0YXRpYyBBc2NlbnRBbmREZXNjZW50IGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWln
aHQpCit7CisgICAgSW5saW5lTGF5b3V0VW5pdCBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQo
KTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7
CisgICAgLy8gMTAuOC4xIExlYWRpbmcgYW5kIGhhbGYtbGVhZGluZworICAgIGF1dG8gaGFsZkxl
YWRpbmcgPSAobGluZUxvZ2ljYWxIZWlnaHQgLSAoYXNjZW50ICsgZGVzY2VudCkpIC8gMjsKKyAg
ICAvLyBJbmxpbmUgdHJlZSBoZWlnaHQgaXMgYWxsIGludGVnZXIgYmFzZWQuCisgICAgcmV0dXJu
IHsgZmxvb3JmKGFzY2VudCArIGhhbGZMZWFkaW5nKSwgY2VpbGYoZGVzY2VudCArIGhhbGZMZWFk
aW5nKSB9OworfQogCi0gICAgaWYgKGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGln
bm1lbnQoYXZhaWxhYmxlV2lkdGgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBsaW5lIGJveCBzaG91
bGQgbm90IG5lZWQgdG8gYmUgbW92ZWQsIG9ubHkgdGhlIHJ1bnMuCi0gICAgICAgIG1fcmVjdC5t
b3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVC
b3ggOiBtX2lubGluZUJveExpc3QpCi0gICAgICAgICAgICBpbmxpbmVCb3gucmVjdC5tb3ZlSG9y
aXpvbnRhbGx5KCphZGp1c3RtZW50KTsKK0xpbmVCb3g6OklubGluZUJveDo6SW5saW5lQm94KGNv
bnN0IERpc3BsYXk6OklubGluZVJlY3QmIHJlY3QsIElubGluZUxheW91dFVuaXQgc3ludGhldGlj
QmFzZWxpbmUpCisgICAgOiBtX2xvZ2ljYWxSZWN0KHJlY3QpCisgICAgLCBtX2Jhc2VsaW5lKHN5
bnRoZXRpY0Jhc2VsaW5lKQorICAgICwgbV9pc0VtcHR5KGZhbHNlKQorICAgICwgbV9pc0F0b21p
Yyh0cnVlKQoreworfQorCitMaW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveChjb25zdCBEaXNw
bGF5OjpJbmxpbmVSZWN0JiByZWN0LCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lLCBJbmxpbmVM
YXlvdXRVbml0IGRlc2NlbnQsIElzQ29uc2lkZXJlZEVtcHR5IGlzQ29uc2lkZXJlZEVtcHR5KQor
ICAgIDogbV9sb2dpY2FsUmVjdChyZWN0KQorICAgICwgbV9iYXNlbGluZShiYXNlbGluZSkKKyAg
ICAsIG1fZGVzY2VudChkZXNjZW50KQorICAgICwgbV9pc0VtcHR5KGlzQ29uc2lkZXJlZEVtcHR5
ID09IElzQ29uc2lkZXJlZEVtcHR5OjpZZXMpCit7Cit9CisKK0xpbmVCb3g6OkxpbmVCb3goY29u
c3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25z
dCBJbmxpbmVMYXlvdXRQb2ludCYgdG9wTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCwgY29uc3QgTGluZUJ1aWxk
ZXI6OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0
eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCkKKyAgICA6IG1fcmVjdCh0b3BMZWZ0LCBsb2dpY2FsV2lkdGgsIHsgfSkKKyAgICAsIG1fc2Ny
b2xsYWJsZU92ZXJmbG93KG1fcmVjdCkKKyAgICAsIG1fY29udGVudExvZ2ljYWxXaWR0aChjb250
ZW50TG9naWNhbFdpZHRoKQorICAgICwgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCkKK3sKKyAgICBtX2xpbmVBbGlnbm1lbnRPZmZzZXQgPSBob3Jpem9u
dGFsQWxpZ25tZW50T2Zmc2V0KHJ1bnMsIHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpLCBsb2dp
Y2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCk7CisgICAgaWYgKG1fbGluZUFsaWdubWVudE9mZnNldCkgeworICAgICAgICAvLyBGSVhNRTog
bGluZSBib3ggc2hvdWxkIG5vdCBuZWVkIHRvIGJlIG1vdmVkLCBvbmx5IHRoZSBpbmxpbmUgYm94
ZXMuCisgICAgICAgIG1fcmVjdC5tb3ZlSG9yaXpvbnRhbGx5KCptX2xpbmVBbGlnbm1lbnRPZmZz
ZXQpOwogICAgIH0KKyAgICBjb25zdHJ1Y3RJbmxpbmVCb3hlcyhydW5zLCBpc0xpbmVWaXN1YWxs
eUVtcHR5KTsKKyAgICBhbGlnblZlcnRpY2FsbHkoaXNMaW5lVmlzdWFsbHlFbXB0eSk7CisgICAg
Ly8gQ29tcHV0ZSBzY3JvbGxhYmxlIG92ZXJmbG93LgorICAgIG1fc2Nyb2xsYWJsZU92ZXJmbG93
LnNldFdpZHRoKHN0ZDo6bWF4KG1fc2Nyb2xsYWJsZU92ZXJmbG93LndpZHRoKCksIG1fcm9vdElu
bGluZUJveC5sb2dpY2FsV2lkdGgoKSkpOworICAgIG1fc2Nyb2xsYWJsZU92ZXJmbG93LmV4cGFu
ZFZlcnRpY2FsbHlUb0NvbnRhaW4obV9yb290SW5saW5lQm94LmxvZ2ljYWxSZWN0KCkpOworICAg
IGZvciAoYXV0byYgaW5saW5lQm94RW50cnkgOiBtX2lubGluZUJveFJlY3RNYXApCisgICAgICAg
IG1fc2Nyb2xsYWJsZU92ZXJmbG93LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4oaW5saW5lQm94
RW50cnkudmFsdWUtPmxvZ2ljYWxSZWN0KCkpOwogfQogCi12b2lkIExpbmVCb3g6OmFsaWduVmVy
dGljYWxseSgpCitjb25zdCBMaW5lQm94OjpJbmxpbmVCb3gmIExpbmVCb3g6OmlubGluZUJveEZv
ckxheW91dEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKLSAgICBhZGp1c3RCYXNl
bGluZUFuZExpbmVIZWlnaHQoKTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
bV9pbmxpbmVCb3hMaXN0LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBpbmxpbmVC
b3ggPSBtX2lubGluZUJveExpc3RbaW5kZXhdOwotICAgICAgICBhdXRvJiBydW4gPSBtX3J1bnNb
aW5kZXhdOwotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVCb3gubGF5b3V0Qm94Owot
ICAgICAgICBhdXRvIGlubGluZUJveEhlaWdodCA9IGlubGluZUJveC5yZWN0LmhlaWdodCgpOwor
ICAgIEFTU0VSVCgmbGF5b3V0Qm94ICE9ICZyb290KCkpOworICAgIHJldHVybiAqbV9pbmxpbmVC
b3hSZWN0TWFwLmdldCgmbGF5b3V0Qm94KTsKK30KIAotICAgICAgICBhdXRvIGxvZ2ljYWxUb3Ag
PSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduID0gbGF5
b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwotICAgICAgICBhdXRvIGFzY2VudCA9IGxh
eW91dEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CitEaXNwbGF5OjpJbmxpbmVS
ZWN0IExpbmVCb3g6OmlubGluZVJlY3RGb3JUZXh0UnVuKGNvbnN0IExpbmVCdWlsZGVyOjpSdW4m
IHJ1bikgY29uc3QKK3sKKyAgICBBU1NFUlQocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVh
aygpKTsKKyAgICBhdXRvIGlubGluZUJveFJlY3QgPSBtX3Jvb3RJbmxpbmVCb3gubG9naWNhbFJl
Y3QoKTsKKyAgICBpZiAoJnJ1bi5sYXlvdXRCb3goKS5wYXJlbnQoKSAhPSAmcm9vdCgpKQorICAg
ICAgICBpbmxpbmVCb3hSZWN0ID0gbV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmcnVuLmxheW91dEJv
eCgpLnBhcmVudCgpKS0+bG9naWNhbFJlY3QoKTsKKyAgICByZXR1cm4geyBpbmxpbmVCb3hSZWN0
LnRvcCgpLCBydW4ubG9naWNhbExlZnQoKSwgcnVuLmxvZ2ljYWxXaWR0aCgpLCBpbmxpbmVCb3hS
ZWN0LmhlaWdodCgpIH07Cit9CiAKLSAgICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWduKSB7Ci0g
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6Ci0gICAgICAgICAgICBpZiAocnVu
LmlzTGluZUJyZWFrKCkgfHwgcnVuLmlzVGV4dCgpKQotICAgICAgICAgICAgICAgIGxvZ2ljYWxU
b3AgPSBhbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50OwotICAgICAgICAgICAgZWxzZSBpZiAo
cnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21l
dHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBhbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50IC0g
Ym94R2VvbWV0cnkuYm9yZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVP
cigwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3go
KSAmJiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7Cit2
b2lkIExpbmVCb3g6OmNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmVCdWlsZGVyOjpSdW5M
aXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5RW1wdHkpCit7Cisg
ICAgYXV0byBsaW5lSGFzSW1hZ2luYXJ5U3RydXQgPSAhbGF5b3V0U3RhdGUoKS5pblF1aXJrc01v
ZGUoKTsKKyAgICBhdXRvIGxpbmVJc0NvbnNpZGVyZWRFbXB0eSA9ICFsaW5lSGFzSW1hZ2luYXJ5
U3RydXQgfHwgaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMg
PyBJbmxpbmVCb3g6OklzQ29uc2lkZXJlZEVtcHR5OjpZZXMgOiBJbmxpbmVCb3g6OklzQ29uc2lk
ZXJlZEVtcHR5OjpObzsKKyAgICBhdXRvJiBmb250TWV0cmljcyA9IHJvb3QoKS5zdHlsZSgpLmZv
bnRNZXRyaWNzKCk7CisgICAgSW5saW5lTGF5b3V0VW5pdCByb290SW5saW5lQm94SGVpZ2h0ID0g
Zm9udE1ldHJpY3MuaGVpZ2h0KCk7CisgICAgYXV0byByb290SW5saW5lUmVjdCA9IERpc3BsYXk6
OklubGluZVJlY3QgeyB7IH0sIHsgfSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCByb290SW5saW5l
Qm94SGVpZ2h0IH07CisgICAgSW5saW5lTGF5b3V0VW5pdCByb290SW5saW5lQmFzZWxpbmUgPSBm
b250TWV0cmljcy5hc2NlbnQoKTsKKyAgICBhdXRvIHJvb3RJbmxpbmVEZXNjZW50ID0gcm9vdElu
bGluZUJveEhlaWdodCAtIHJvb3RJbmxpbmVCYXNlbGluZTsKKyAgICBtX3Jvb3RJbmxpbmVCb3gg
PSBJbmxpbmVCb3ggeyByb290SW5saW5lUmVjdCwgcm9vdElubGluZUJhc2VsaW5lLCByb290SW5s
aW5lRGVzY2VudCwgbGluZUlzQ29uc2lkZXJlZEVtcHR5IH07CisKKyAgICBmb3IgKGF1dG8mIHJ1
biA6IHJ1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwor
ICAgICAgICBpZiAocnVuLmlzQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5
ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAg
ICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFi
bGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAgICAgICAgICAgICAgIGF1dG8m
IGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0
aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKICAgICAgICAgICAg
ICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlm
IGl0IGlzIGVtcHR5LgotICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9
IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgp
LmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBmb3JtYXR0
aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZUJveC50b3AoKSAr
IGxhc3RMaW5lQm94LmJhc2VsaW5lKCk7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGlubGluZS1i
bG9jaydzIGJhc2VsaW5lIG9mZnNldCBpcyByZWxhdGl2ZSB0byBpdHMgY29udGVudCBib3guIExl
dCdzIGNvbnZlcnQgaXQgcmVsYXRpdmUgdG8gdGhlIG1hcmdpbiBib3guCiAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgIF9fX19fX19fX19fX19fXyA8LSBtYXJnaW4gYm94CiAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgfApAQCAtMTk3LDE0OCArMjE3LDEyMCBAQCB2b2lkIExpbmVCb3g6
OmFsaWduVmVydGljYWxseSgpCiAgICAgICAgICAgICAgICAgLy8gICAgIHRleHQgfCB8IHwgICB2
IHRleHQKICAgICAgICAgICAgICAgICAvLyAgICAgLS0tLS18LXwtfC0tLS0tLS0tLS0gPC0gYmFz
ZWxpbmUKICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21l
dHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAg
ICAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVGcm9tTWFyZ2luQm94ID0gYm94R2VvbWV0cnkubWFy
Z2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRp
bmdUb3AoKS52YWx1ZU9yKDApICsgaW5saW5lQmxvY2tCYXNlbGluZTsKLSAgICAgICAgICAgICAg
ICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUoKSAtIGJhc2VsaW5lRnJvbU1hcmdpbkJv
eDsKKyAgICAgICAgICAgICAgICBhdXRvIGFkanVzdGVkQmFzZWxpbmUgPSBib3hHZW9tZXRyeS5t
YXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFk
ZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOworICAgICAgICAgICAg
ICAgIGF1dG8gaW5saW5lQm94UmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyB7IH0sIHJ1bi5s
b2dpY2FsTGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCksIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhl
aWdodCgpIH07CisgICAgICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmbGF5b3V0
Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgYWRqdXN0ZWRCYXNlbGlu
ZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAg
ICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hHZW9t
ZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFs
dWVPcigwX2x1KSArIGlubGluZUJveEhlaWdodCArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkp
OworICAgICAgICAgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQm94
SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0gRGlzcGxheTo6
SW5saW5lUmVjdCB7IHsgfSwgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2FsV2lkdGgoKSwg
cnVuSGVpZ2h0IH07CisgICAgICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmbGF5
b3V0Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgcnVuSGVpZ2h0KSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0aWNh
bEFsaWduOjpUb3A6Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gMF9sdTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAg
IGxvZ2ljYWxUb3AgPSBsb2dpY2FsQm90dG9tKCkgLSBpbmxpbmVCb3hIZWlnaHQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1Q
TEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChy
dW4uaXNDb250YWluZXJTdGFydCgpKSB7CisgICAgICAgICAgICBhdXRvIGluaXRpYWxXaWR0aCA9
IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHJ1bi5sb2dpY2FsTGVmdCgpOworICAgICAgICAgICAg
QVNTRVJUKGluaXRpYWxXaWR0aCA+PSAwKTsKKyAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNz
ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKTsKKyAgICAgICAgICAgIElubGluZUxh
eW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGZvbnRNZXRyaWNzLmhlaWdodCgpOworICAgICAgICAg
ICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOworICAg
ICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IHsgfSwg
cnVuLmxvZ2ljYWxMZWZ0KCksIGluaXRpYWxXaWR0aCwgbG9naWNhbEhlaWdodCB9OworICAgICAg
ICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmbGF5b3V0Qm94LCBtYWtlVW5pcXVlPElubGlu
ZUJveD4oaW5saW5lQm94UmVjdCwgYmFzZWxpbmUsIGxvZ2ljYWxIZWlnaHQgLSBiYXNlbGluZSwg
SW5saW5lQm94OjpJc0NvbnNpZGVyZWRFbXB0eTo6WWVzKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
cnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgbG9naWNh
bCB3aWR0aCB3aGVuIHRoZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyIGNsb3NlcyBvbiB0aGlzIGxp
bmUuCisgICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSAqbV9pbmxpbmVCb3hSZWN0TWFwLmdl
dCgmbGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2FsV2lkdGgocnVu
LmxvZ2ljYWxSaWdodCgpIC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOworICAgICAgICB9IGVs
c2UgaWYgKChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpKSB7CisgICAgICAgICAg
ICBhdXRvJiBjb250YWluZXJCb3ggPSBydW4ubGF5b3V0Qm94KCkucGFyZW50KCk7CisgICAgICAg
ICAgICAmY29udGFpbmVyQm94ID09ICZyb290KCkgPyBtX3Jvb3RJbmxpbmVCb3guc2V0SXNOb25F
bXB0eSgpIDogbV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmY29udGFpbmVyQm94KS0+c2V0SXNOb25F
bXB0eSgpOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8mIGlubGluZUJveFJlY3QgPSBpbmxpbmVC
b3gucmVjdDsKLSAgICAgICAgaW5saW5lQm94UmVjdC5zZXRUb3AobG9naWNhbFRvcCk7Ci0gICAg
ICAgIC8vIEFkanVzdCBzY3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBydW4gb3ZlcmZsb3dzIHRo
ZSBsaW5lLgotICAgICAgICBtX3Njcm9sbGFibGVPdmVyZmxvdy5leHBhbmRWZXJ0aWNhbGx5VG9D
b250YWluKGlubGluZUJveFJlY3QpOwotICAgICAgICAvLyBDb252ZXJ0IHJ1bnMgZnJvbSByZWxh
dGl2ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290J3MgYm9yZGVy
IGJveCB0b3AvbGVmdC4KLSAgICAgICAgaW5saW5lQm94UmVjdC5tb3ZlVmVydGljYWxseSh0aGlz
LT5sb2dpY2FsVG9wKCkpOwotICAgICAgICBpbmxpbmVCb3hSZWN0Lm1vdmVIb3Jpem9udGFsbHko
bG9naWNhbExlZnQoKSk7CiAgICAgfQogfQogCi12b2lkIExpbmVCb3g6OmFkanVzdEJhc2VsaW5l
QW5kTGluZUhlaWdodCgpCit2b2lkIExpbmVCb3g6OmFsaWduVmVydGljYWxseShJc0xpbmVWaXN1
YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5RW1wdHkpCiB7Ci0gICAgdW5zaWduZWQgaW5saW5lQ29u
dGFpbmVyTmVzdGluZ0xldmVsID0gMDsKLSAgICBhdXRvIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5l
QnJlYWsgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbV9pbmxp
bmVCb3hMaXN0LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBt
X2lubGluZUJveExpc3RbaW5kZXhdOwotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVC
b3gubGF5b3V0Qm94OwotICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwot
ICAgICAgICBhdXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOwotICAgICAgICBpZiAocnVuLmlzVGV4
dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICAvLyBGb3IgdGV4dCBjb250
ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUgZWl0aGVyIHRocm91Z2ggdGhlIGluaXRpYWwgc3RydXQg
KHNldCBieSB0aGUgZm9ybWF0dGluZyBjb250ZXh0IHJvb3QpIG9yCi0gICAgICAgICAgICAvLyB0
aHJvdWdoIHRoZSBpbmxpbmUgY29udGFpbmVyIChzdGFydCkuIE5vcm1hbGx5IHRoZSB0ZXh0IGNv
bnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0cmV0Y2ggdGhlIGxpbmUuCi0gICAgICAgICAgICBpZiAo
aW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUg
YWxyZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFy
ZW50IGlubGluZSBjb250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsK
LSAgICAgICAgICAgICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bh
bj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICBpZiAoaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVt
cHR5OjpZZXMpCisgICAgICAgIHJldHVybjsKKyAgICAvLyAxLiBDb21wdXRlIGxpbmUgYm94IGhl
aWdodC9hbGlnbm1lbnQgYmFzZWxpbmUgYnkgcGxhY2luZyB0aGUgaW5saW5lIGJveGVzIHZlcnRp
Y2FsbHkuCisgICAgLy8gMi4gQWRqdXN0IHRoZSBpbmxpbmUgYm94IHZlcnRpY2FsIHBvc2l0aW9u
LgorICAgIGF1dG8mIHJvb3RTdHlsZSA9IHJvb3QoKS5zdHlsZSgpOworICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgbGV0IGxpbmUgYm94IGZ1bGx5IGNvbnRhaW4gdGhlIGlubGluZSBib3hlcyBhbmQg
bW92ZSBsaW5lIHNwYWNpbmcvb3ZlcmZsb3cgb3V0IHRvIERpc3BsYXk6OkxpbmVCb3guCisgICAg
Ly8gc2VlIHdlYmtpdC5vcmcvYi8yMTUwODcjYzkKKyAgICBJbmxpbmVMYXlvdXRVbml0IHJlY29t
bWVuZGVkTGluZUJveEhlaWdodCA9IHJvb3RTdHlsZS5saW5lSGVpZ2h0KCkuaXNOZWdhdGl2ZSgp
ID8gcm9vdFN0eWxlLmZvbnRNZXRyaWNzKCkubGluZVNwYWNpbmcoKSA6IHJvb3RTdHlsZS5jb21w
dXRlZExpbmVIZWlnaHQoKTsKKworICAgIGF1dG8gY29udGVudExvZ2ljYWxIZWlnaHQgPSBJbmxp
bmVMYXlvdXRVbml0IHsgfTsKKyAgICBhdXRvIGFsaWdubWVudEJhc2VsaW5lID0gSW5saW5lTGF5
b3V0VW5pdCB7IH07CisgICAgYXV0byBjb21wdXRlTGluZUJveEhlaWdodCA9IFsmXShhdXRvJiBp
bmxpbmVCb3gsIGF1dG8gdGV4dEFsaWduTW9kZSkgeworICAgICAgICBzd2l0Y2ggKHRleHRBbGln
bk1vZGUpIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogeworICAgICAg
ICAgICAgYXV0byBiYXNlbGluZU92ZXJmbG93ID0gaW5saW5lQm94LmJhc2VsaW5lKCkgLSBhbGln
bm1lbnRCYXNlbGluZTsKKyAgICAgICAgICAgIGlmIChiYXNlbGluZU92ZXJmbG93ID4gMCkgewor
ICAgICAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ICs9IGJhc2VsaW5lT3ZlcmZsb3c7
CisgICAgICAgICAgICAgICAgYWxpZ25tZW50QmFzZWxpbmUgKz0gYmFzZWxpbmVPdmVyZmxvdzsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsg
PSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
cnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250YWluZXJO
ZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJldGNoIHRo
ZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2FsIG1hcmdp
bnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxpbmUgaGVp
Z2h0LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0cmljcygp
OwotICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNhbEFsaWdu
OjpCYXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQm94
OjpoYWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdo
dCgpKTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVz
Y2VudCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2
YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCi0gICAg
ICAgICAgICAgICAgICAgIHNldERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuZGVzY2VudCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmFzY2VudCA+IDApCi0gICAgICAgICAg
ICAgICAgICAgIHNldEFzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5hc2NlbnQpOwotICAgICAg
ICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoYXNjZW50QW5kRGVzY2VudCgpLmhl
aWdodCgpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNldExvZ2ljYWxI
ZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAvLyBUYWJsZSBjZWxscywgaW5saW5lLWJsb2NrIGJveGVzIG1heSBz
dHJldGNoIHRoZSBsaW5lIGJleW9uZCB0aGVpciBiYXNlbGluZS4KKyAgICAgICAgICAgIGF1dG8g
YmVsb3dCYXNlbGluZSA9IGlubGluZUJveC5kZXNjZW50KCkudmFsdWVPcihpbmxpbmVCb3gubG9n
aWNhbEhlaWdodCgpIC0gaW5saW5lQm94LmJhc2VsaW5lKCkpOworICAgICAgICAgICAgYXV0byBi
ZWxvd0Jhc2VsaW5lT3ZlcmZsb3cgPSBiZWxvd0Jhc2VsaW5lIC0gKGNvbnRlbnRMb2dpY2FsSGVp
Z2h0IC0gYWxpZ25tZW50QmFzZWxpbmUpOworICAgICAgICAgICAgaWYgKGJlbG93QmFzZWxpbmVP
dmVyZmxvdyA+IDApCisgICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxIZWlnaHQgKz0gYmVs
b3dCYXNlbGluZU92ZXJmbG93OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAg
ICAgICBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBsaW5l
J3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZlIGFscmVhZHkgYmVlbiBhZGp1c3RlZCBhdCBDb250
YWluZXJTdGFydC4KLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2
ZWwpOwotICAgICAgICAgICAgLS1pbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6IHsKKyAgICAg
ICAgICAgIGF1dG8gb3ZlcmZsb3cgPSBpbmxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0gY29udGVu
dExvZ2ljYWxIZWlnaHQ7CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPiAwKQorICAgICAgICAg
ICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ICs9IG92ZXJmbG93OworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQm94KCkpIHsKLSAgICAgICAgICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChs
YXlvdXRCb3gpOwotICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3hIZWlnaHQgPSBib3hHZW9tZXRy
eS5tYXJnaW5Cb3hIZWlnaHQoKTsKLQotICAgICAgICAgICAgc3dpdGNoIChzdHlsZS52ZXJ0aWNh
bEFsaWduKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6IHsK
LSAgICAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAmJiBsYXlv
dXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIElubGluZS1ibG9ja3Mgd2l0aCBpbmxpbmUgY29udGVudCBhbHdheXMgaGF2
ZSBiYXNlbGluZXMuCi0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9
IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8
Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUg
aGFzIHRvIGJlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgotICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5
SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpOwotICAgICAgICAgICAgICAgICAgICBh
dXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgYm94R2VvbWV0
cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKLSAg
ICAgICAgICAgICAgICAgICAgc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYmVmb3JlSGVp
Z2h0ICsgbGFzdExpbmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldExv
Z2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNp
dCBvbiB0aGUgYmFzZWxpbmUgKGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFyZ2luKS4KLSAgICAg
ICAgICAgICAgICAgICAgc2V0QXNjZW50SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIElnbm9yZSBuZWdhdGl2ZSBkZXNjZW50ICh5ZXMsIG5lZ2F0aXZl
IGRlc2NlbnQgaXMgYSB0aGluZykuCi0gICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWln
aHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0ICsgc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4o
MCwgYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVudCBuZXZl
ciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBvZiB0aGUg
bGluZSBmdXJ0aGVyIGRvd24uCi0gICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsKLSAgICAgICAgICAgICAgICAvLyBCb3R0
b20gYWxpZ25lZCwgdGFsbCBjb250ZW50IHB1c2hlcyB0aGUgYmFzZWxpbmUgZnVydGhlciBkb3du
IGZyb20gdGhlIGxpbmUgdG9wLgotICAgICAgICAgICAgICAgIGF1dG8gbGluZUxvZ2ljYWxIZWln
aHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmdpbkJveEhlaWdo
dCA+IGxpbmVMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxI
ZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgc2V0
QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYWxpZ25tZW50QmFzZWxpbmUoKSArIChtYXJnaW5C
b3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsK
KyAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSBpbmxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0g
Y29udGVudExvZ2ljYWxIZWlnaHQ7CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPiAwKSB7Cisg
ICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxIZWlnaHQgKz0gb3ZlcmZsb3c7CisgICAgICAg
ICAgICAgICAgYWxpZ25tZW50QmFzZWxpbmUgKz0gb3ZlcmZsb3c7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5U
RURfWUVUKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byBzaG91bGRSb290SW5s
aW5lQm94U3RyZXRjaExpbmVCb3ggPSAhbV9yb290SW5saW5lQm94LmlzRW1wdHkoKTsKKyAgICBp
ZiAoc2hvdWxkUm9vdElubGluZUJveFN0cmV0Y2hMaW5lQm94KQorICAgICAgICBjb21wdXRlTGlu
ZUJveEhlaWdodChtX3Jvb3RJbmxpbmVCb3gsIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKTsKKyAg
ICBmb3IgKGF1dG8mIGlubGluZUJveEVudHJ5IDogbV9pbmxpbmVCb3hSZWN0TWFwKSB7CisgICAg
ICAgIGF1dG8mIGlubGluZUJveCA9ICppbmxpbmVCb3hFbnRyeS52YWx1ZTsKKyAgICAgICAgYXV0
byBzaG91bGRJbmxpbmVCb3hTdHJldGNoTGluZUJveCA9ICFpbmxpbmVCb3guaXNFbXB0eSgpOwor
ICAgICAgICBpZiAoc2hvdWxkSW5saW5lQm94U3RyZXRjaExpbmVCb3gpCisgICAgICAgICAgICBj
b21wdXRlTGluZUJveEhlaWdodChpbmxpbmVCb3gsIGlubGluZUJveEVudHJ5LmtleS0+c3R5bGUo
KS52ZXJ0aWNhbEFsaWduKCkpOwogICAgIH0KLX0KIAotSGFuZ2luZ0NvbnRlbnQgTGluZUJveDo6
Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgYXV0byBoYW5naW5nQ29udGVudCA9
IEhhbmdpbmdDb250ZW50IHsgfTsKLSAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
ID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICBoYW5naW5nQ29u
dGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VS
ZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0
KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBoYW5naW5nQ29udGVudC5z
ZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKKyAgICBhdXRvIGxpbmVCb3hM
b2dpY2FsSGVpZ2h0ID0gcm9vdFN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkgPyBzdGQ6
Om1heChyZWNvbW1lbmRlZExpbmVCb3hIZWlnaHQsIGNvbnRlbnRMb2dpY2FsSGVpZ2h0KSA6IHJl
Y29tbWVuZGVkTGluZUJveEhlaWdodDsKKyAgICBtX3JlY3Quc2V0SGVpZ2h0KGxpbmVCb3hMb2dp
Y2FsSGVpZ2h0KTsKKworICAgIGF1dG8gYWRqdXN0SW5saW5lQm94VG9wID0gWyZdKGF1dG8mIGlu
bGluZUJveCwgYXV0byB0ZXh0QWxpZ25Nb2RlKSB7CisgICAgICAgIGF1dG8gaW5saW5lQm94TG9n
aWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBzd2l0Y2ggKHRleHRBbGln
bk1vZGUpIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZToKKyAgICAgICAg
ICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBhbGlnbm1lbnRCYXNlbGluZSAtIGlubGluZUJveC5i
YXNlbGluZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhh
dmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNwYWNlLgotICAgICAgICBpZiAocnVuLnN0eWxl
KCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCisgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6VG9wOgorICAgICAgICAgICAgaW5saW5lQm94TG9naWNhbFRvcCA9IHsgfTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBUaGlzIGlzIGVpdGhlciBhIG5vcm1hbCBv
ciBjb25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICAgICAgaGFu
Z2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpKTsKKyAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206CisgICAgICAgICAgICBpbmxpbmVCb3hMb2dp
Y2FsVG9wID0gbG9naWNhbEJvdHRvbSgpIC0gaW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlubGluZUJveC5zZXRMb2dpY2FsVG9wKGlubGluZUJveExvZ2ljYWxUb3ApOworICAgIH07
CisKKyAgICBhbGlnbm1lbnRCYXNlbGluZSA9IGhhbGZMZWFkaW5nTWV0cmljcyhyb290U3R5bGUu
Zm9udE1ldHJpY3MoKSwgbGluZUJveExvZ2ljYWxIZWlnaHQpLmFzY2VudDsKKyAgICBhZGp1c3RJ
bmxpbmVCb3hUb3AobV9yb290SW5saW5lQm94LCBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSk7Cisg
ICAgZm9yIChhdXRvJiBpbmxpbmVCb3hFbnRyeSA6IG1faW5saW5lQm94UmVjdE1hcCkgeworICAg
ICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqaW5saW5lQm94RW50cnkua2V5OworICAgICAgICBhdXRv
JiBpbmxpbmVCb3ggPSAqaW5saW5lQm94RW50cnkudmFsdWU7CisgICAgICAgIGFkanVzdElubGlu
ZUJveFRvcChpbmxpbmVCb3gsIGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSk7CiAg
ICAgfQotICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCmluZGV4
IDg5MWM3MzI1MmY4MzVlNGZlZmU0Mjk1YjVkODQ2NmJkZmI2NmIxOTQuLmMyZDI2ZTlhZWUwNzE0
ZDA4ZGZlZGQxNjE0ZTNmZWY1YTdkZDA4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKQEAgLTMwLDM0ICszMCw1
MSBAQAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNsdWRlICJEaXNwbGF5SW5saW5lUmVj
dC5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7
CiAKIGNsYXNzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Owotc3RydWN0IEhhbmdpbmdDb250ZW50
OwotCi1zdHJ1Y3QgQXNjZW50QW5kRGVzY2VudCB7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBoZWln
aHQoKSBjb25zdCB7IHJldHVybiBhc2NlbnQgKyBkZXNjZW50OyB9Ci0KLSAgICBJbmxpbmVMYXlv
dXRVbml0IGFzY2VudCB7IDAgfTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQgeyAwIH07
Ci19OwogCiBjbGFzcyBMaW5lQm94IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBzdHJ1Y3QgSW5saW5lQm94IHsKLSAgICAgICAgSW5saW5lQm94KGNvbnN0IERp
c3BsYXk6OklubGluZVJlY3QmLCBjb25zdCBBc2NlbnRBbmREZXNjZW50JiwgY29uc3QgQm94Jik7
Ci0KLSAgICAgICAgRGlzcGxheTo6SW5saW5lUmVjdCByZWN0OwotICAgICAgICBBc2NlbnRBbmRE
ZXNjZW50IGFzY2VudEFuZERlc2NlbnQ7Ci0gICAgICAgIGNvbnN0IEJveCYgbGF5b3V0Qm94Owor
ICAgICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lOTElORShJbmxpbmVCb3gpOworICAgIHB1
YmxpYzoKKyAgICAgICAgZW51bSBjbGFzcyBJc0NvbnNpZGVyZWRFbXB0eSB7IFllcywgTm8gfTsK
KyAgICAgICAgSW5saW5lQm94KGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmLCBJbmxpbmVMYXlv
dXRVbml0IHN5bnRoZXRpY0Jhc2VsaW5lKTsKKyAgICAgICAgSW5saW5lQm94KGNvbnN0IERpc3Bs
YXk6OklubGluZVJlY3QmLCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lLCBJbmxpbmVMYXlvdXRV
bml0IGRlc2NlbnQsIElzQ29uc2lkZXJlZEVtcHR5KTsKKyAgICAgICAgSW5saW5lQm94KCkgPSBk
ZWZhdWx0OworCisgICAgICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxvZ2ljYWxSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdDsgfQorICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRvcCgpOyB9Cisg
ICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxSZWN0LmxlZnQoKTsgfQorICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3Qud2lkdGgoKTsgfQorICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0
LmhlaWdodCgpOyB9CisKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFzZWxpbmU7IH0KKyAgICAgICAgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5p
dD4gZGVzY2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VudDsgfQorCisgICAgICAgIHZvaWQg
c2V0TG9naWNhbFRvcChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIHsgbV9sb2dpY2FsUmVj
dC5zZXRUb3AobG9naWNhbFRvcCk7IH0KKyAgICAgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpIHsgbV9sb2dpY2FsUmVjdC5zZXRXaWR0aChsb2dp
Y2FsV2lkdGgpOyB9CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9p
c0VtcHR5OyB9CisgICAgICAgIHZvaWQgc2V0SXNOb25FbXB0eSgpIHsgbV9pc0VtcHR5ID0gZmFs
c2U7IH0KKyAgICAgICAgYm9vbCBpc0F0b21pYygpIGNvbnN0IHsgcmV0dXJuIG1faXNBdG9taWM7
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9sb2dpY2Fs
UmVjdDsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2Jhc2VsaW5lOworICAgICAgICBPcHRp
b25hbDxJbmxpbmVMYXlvdXRVbml0PiBtX2Rlc2NlbnQ7CisgICAgICAgIGJvb2wgbV9pc0VtcHR5
IHsgdHJ1ZSB9OworICAgICAgICBib29sIG1faXNBdG9taWMgeyBmYWxzZSB9OwogICAgIH07CiAK
ICAgICBlbnVtIGNsYXNzIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCB7IE5vLCBZZXMgfTsK
ICAgICBlbnVtIGNsYXNzIElzTGluZVZpc3VhbGx5RW1wdHkgeyBObywgWWVzIH07Ci0gICAgTGlu
ZUJveChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IERpc3BsYXk6OklubGlu
ZVJlY3QmLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElzTGluZVZpc3VhbGx5RW1wdHks
IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgTGluZUJveChjb25zdCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IElubGluZUxheW91dFBvaW50JiB0b3BMZWZ0LCBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bFdpZHRoLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElzTGluZVZpc3VhbGx5RW1wdHks
IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LmxlZnQoKTsgfQogICAgIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0LnJpZ2h0KCk7IH0K
QEAgLTY5LDExNCArODYsNDcgQEAgcHVibGljOgogICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJl
Y3QmIGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgRGlz
cGxheTo6SW5saW5lUmVjdCYgc2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9z
Y3JvbGxhYmxlT3ZlcmZsb3c7IH0KIAotICAgIHN0YXRpYyBBc2NlbnRBbmREZXNjZW50IGhhbGZM
ZWFkaW5nTWV0cmljcyhjb25zdCBGb250TWV0cmljcyYsIElubGluZUxheW91dFVuaXQgbGluZUxv
Z2ljYWxIZWlnaHQpOwotCi0gICAgLy8gQWxpZ21lbnQgYmFzZWxpbmUgZnJvbSBsaW5lIGxvZ2lj
YWwgdG9wLgotICAgIC8vCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLSAgICBsaW5lIGxvZ2lj
YWwgdG9wICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tICh0b3AgYWxpZ24pCi0gICAgLy8gICAgICAg
ICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0g
ICAgLy8gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAg
ICAgICAgICB8Ci0gICAgLy8gICBeICAgICAgICAgfCBhbGlnbm1lbnQgYmFzZWxpbmUgICAgICAg
ICAgICAgICB8ICAgICAgICAgICB8IGFsaWdubWVudCBiYXNlbGluZQotICAgIC8vICAgfCAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAotICAg
IC8vICAgfCBhc2NlbnQgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhc2Nl
bnQgICAgfAotICAgIC8vICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdiAgICAgICAgICAgdgotICAgIC8vICAgdiAgICAgICAgIHYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLSBiYXNlbGluZQotICAgIC8vICAgLS0t
LS0tLS0tLS0tLS0tLS0gYmFzZWxpbmUgICAgICAgICAgICAgICAgICAgXgotICAgIC8vICAgXiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZXNjZW50Ci0gICAg
Ly8gICB8IGRlc2NlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2CisgICAg
Y29uc3QgSW5saW5lQm94JiBpbmxpbmVCb3hGb3JMYXlvdXRCb3goY29uc3QgQm94JikgY29uc3Q7
CisgICAgRGlzcGxheTo6SW5saW5lUmVjdCBpbmxpbmVSZWN0Rm9yVGV4dFJ1bihjb25zdCBMaW5l
QnVpbGRlcjo6UnVuJikgY29uc3Q7CisKKyAgICAvLyBfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXyBsaW5lIGJveCBsb2dpY2FsIHRvcAorICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgLy8gICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gcm9vdCBpbmxpbmUg
Ym94CisgICAgLy8gICBeICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgfCAgICAgICAgICAg
ICAgICAgIHwKKyAgICAvLyAgIHwgcm9vdCBsaW5lIGFzY2VudCB8CisgICAgLy8gICB8ICAgICAg
ICAgICAgICAgICAgfAorICAgIC8vICAgdiAgICAgICAgICAgICAgICAgIHYKKyAgICAvLyAgIF9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyBhbGlnbm1l
bnQgYmFzZWxpbmUKKyAgICAvLyAgIF4KKyAgICAvLyAgIHwgcm9vdCBsaW5lIGRlc2NlbnQKICAg
ICAvLyAgIHYKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tICAgIGxpbmUgbG9naWNhbCBib3R0
b20gIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGFsaWdubWVudEJh
c2VsaW5lKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiByZWN0Rm9y
UnVuKGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mIHJ1bikgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVC
b3hMaXN0W21fcnVuVG9JbmxpbmVCb3hNYXAuZ2V0KCZydW4pXS5yZWN0OyB9CisgICAgLy8gICBf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgIC8vIF9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGxpbmUgYm94IGxvZ2ljYWwg
Ym90dG9tCisgICAgSW5saW5lTGF5b3V0VW5pdCBhbGlnbm1lbnRCYXNlbGluZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBtX3Jvb3RJbmxpbmVCb3guYmFz
ZWxpbmUoKTsgfQogCiBwcml2YXRlOgotICAgIGNvbnN0IEFzY2VudEFuZERlc2NlbnQmIGFzY2Vu
dEFuZERlc2NlbnQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVz
Y2VudDsgfQotCi0gICAgdm9pZCBzZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihJbmxpbmVM
YXlvdXRVbml0KTsKLSAgICB2b2lkIHNldEFzY2VudElmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0
KTsKLSAgICB2b2lkIHNldERlc2NlbnRJZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCk7Ci0gICAg
dm9pZCBzZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwotCi0gICAg
dm9pZCBzZXRTY3JvbGxhYmxlT3ZlcmZsb3coY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgcmVj
dCkgeyBtX3Njcm9sbGFibGVPdmVyZmxvdyA9IHJlY3Q7IH0KKyAgICB2b2lkIGNvbnN0cnVjdElu
bGluZUJveGVzKGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiwgSXNMaW5lVmlzdWFsbHlFbXB0
eSk7CisgICAgdm9pZCBhbGlnblZlcnRpY2FsbHkoSXNMaW5lVmlzdWFsbHlFbXB0eSk7CiAKLSAg
ICB2b2lkIGFsaWduSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgs
IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0gICAgdm9pZCBhbGlnblZlcnRpY2FsbHko
KTsKLSAgICB2b2lkIGFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwotICAgIEhhbmdpbmdD
b250ZW50IGNvbGxlY3RIYW5naW5nQ29udGVudChJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQp
IGNvbnN0OworICAgIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQogCiAgICAgY29uc3QgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDsgfQorICAgIGNvbnN0IEJveCYgcm9vdCgpIGNvbnN0IHsgcmV0
dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpOyB9CiAgICAgTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5sYXlvdXRTdGF0ZSgp
OyB9CiAKIHByaXZhdGU6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faGFzVmFsaWRB
bGlnbm1lbnRCYXNlbGluZSB7IGZhbHNlIH07Ci0jZW5kaWYKLSAgICBjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICBjb25zdCBMaW5l
QnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOwogICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9yZWN0
OwogICAgIERpc3BsYXk6OklubGluZVJlY3QgbV9zY3JvbGxhYmxlT3ZlcmZsb3c7Ci0gICAgSW5s
aW5lTGF5b3V0VW5pdCBtX2FsaWdubWVudEJhc2VsaW5lIHsgMCB9OwotICAgIElubGluZUJveCBt
X3Jvb3RJbmxpbmVCb3g7Ci0gICAgVmVjdG9yPElubGluZUJveD4gbV9pbmxpbmVCb3hMaXN0Owot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBiZSByZXBsYWNlZCBieSBh
biBpbmxpbmUgYm94IG1hcC4KLSAgICBIYXNoTWFwPGNvbnN0IExpbmVCdWlsZGVyOjpSdW4qLCBz
aXplX3Q+IG1fcnVuVG9JbmxpbmVCb3hNYXA7Ci19OworICAgIElubGluZUxheW91dFVuaXQgbV9j
b250ZW50TG9naWNhbFdpZHRoIHsgMCB9OwogCi1pbmxpbmUgTGluZUJveDo6SW5saW5lQm94OjpJ
bmxpbmVCb3goY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgcmVjdCwgY29uc3QgQXNjZW50QW5k
RGVzY2VudCYgYXNjZW50QW5kRGVzY2VudCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCi0gICAgOiBy
ZWN0KHJlY3QpCi0gICAgLCBhc2NlbnRBbmREZXNjZW50KGFzY2VudEFuZERlc2NlbnQpCi0gICAg
LCBsYXlvdXRCb3gobGF5b3V0Qm94KQotewotfQotCi1pbmxpbmUgdm9pZCBMaW5lQm94OjpzZXRM
b2dpY2FsSGVpZ2h0SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCkKLXsK
LSAgICBpZiAobG9naWNhbEhlaWdodCA8PSBtX3JlY3QuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX3JlY3Quc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwotfQotCi1pbmxpbmUgdm9p
ZCBMaW5lQm94OjpzZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0
IGFsaWdubWVudEJhc2VsaW5lKQotewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9oYXNWYWxp
ZEFsaWdubWVudEJhc2VsaW5lID0gdHJ1ZTsKLSNlbmRpZgotICAgIG1fYWxpZ25tZW50QmFzZWxp
bmUgPSBzdGQ6Om1heChhbGlnbm1lbnRCYXNlbGluZSwgbV9hbGlnbm1lbnRCYXNlbGluZSk7Ci19
Ci0KLWlubGluZSB2b2lkIExpbmVCb3g6OnNldEFzY2VudElmR3JlYXRlcihJbmxpbmVMYXlvdXRV
bml0IGFzY2VudCkKLXsKLSAgICBpZiAoYXNjZW50IDwgbV9yb290SW5saW5lQm94LmFzY2VudEFu
ZERlc2NlbnQuYXNjZW50KQotICAgICAgICByZXR1cm47Ci0gICAgc2V0QWxpZ25tZW50QmFzZWxp
bmVJZkdyZWF0ZXIoYXNjZW50KTsKLSAgICBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2Vu
dC5hc2NlbnQgPSBhc2NlbnQ7Ci19Ci0KLWlubGluZSB2b2lkIExpbmVCb3g6OnNldERlc2NlbnRJ
ZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50KQotewotICAgIGlmIChkZXNjZW50IDwg
bV9yb290SW5saW5lQm94LmFzY2VudEFuZERlc2NlbnQuZGVzY2VudCkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50LmRlc2NlbnQgPSBkZXNjZW50
OwotfQotCi1pbmxpbmUgSW5saW5lTGF5b3V0VW5pdCBMaW5lQm94OjphbGlnbm1lbnRCYXNlbGlu
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1faGFzVmFsaWRBbGlnbm1lbnRCYXNlbGluZSk7Ci0g
ICAgcmV0dXJuIG1fYWxpZ25tZW50QmFzZWxpbmU7Ci19CisgICAgSW5saW5lQm94IG1fcm9vdElu
bGluZUJveDsKIAotaW5saW5lIEFzY2VudEFuZERlc2NlbnQgTGluZUJveDo6aGFsZkxlYWRpbmdN
ZXRyaWNzKGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcywgSW5saW5lTGF5b3V0VW5pdCBs
aW5lTG9naWNhbEhlaWdodCkKLXsKLSAgICBhdXRvIGFzY2VudCA9IGZvbnRNZXRyaWNzLmFzY2Vu
dCgpOwotICAgIGF1dG8gZGVzY2VudCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQoKTsKLSAgICAvLyAx
MC44LjEgTGVhZGluZyBhbmQgaGFsZi1sZWFkaW5nCi0gICAgYXV0byBoYWxmTGVhZGluZyA9IChs
aW5lTG9naWNhbEhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KSkgLyAyOwotICAgIC8vIElubGlu
ZSB0cmVlIGhlaWdodCBpcyBhbGwgaW50ZWdlciBiYXNlZC4KLSAgICBhdXRvIGFkanVzdGVkQXNj
ZW50ID0gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oZmxvb3JmKGFzY2VudCArIGhhbGZMZWFk
aW5nKSwgMCk7Ci0gICAgYXV0byBhZGp1c3RlZERlc2NlbnQgPSBzdGQ6Om1heDxJbmxpbmVMYXlv
dXRVbml0PihjZWlsZihkZXNjZW50ICsgaGFsZkxlYWRpbmcpLCAwKTsKLSAgICByZXR1cm4geyBh
ZGp1c3RlZEFzY2VudCwgYWRqdXN0ZWREZXNjZW50IH07Ci19CisgICAgT3B0aW9uYWw8SW5saW5l
TGF5b3V0VW5pdD4gbV9saW5lQWxpZ25tZW50T2Zmc2V0OworICAgIEhhc2hNYXA8Y29uc3QgQm94
Kiwgc3RkOjp1bmlxdWVfcHRyPElubGluZUJveD4+IG1faW5saW5lQm94UmVjdE1hcDsKKyAgICBj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsK
K307CiAKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCA5NWE0NzQzMGI1YjY3ZTZj
YWM1ZGRmYTUzOTZjYTEwMjc2MzVjYWU5Li41ZmFmMzZiYjQ1Mzc4ZDQ5ZWU5NWEwMDA5NjEzMjJk
ZGQ4ZmE5OTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCkBAIC0xMTAsMTAgKzExMCwxOCBA
QCB2b2lkIExpbmVCdWlsZGVyOjpjbG9zZShib29sIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCkKICAgICAgICAgaWYgKGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgJiYgYXZhaWxhYmxlV2lk
dGgoKSkgewogICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UuCiAgICAg
ICAgICAgICBhdXRvIGV4cGFuc2lvblRvRGlzdHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoKCkgLyBl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50OworICAgICAgICAgICAgYXV0byBhY2N1bXVsYXRlZEV4
cGFuc2lvbiA9IElubGluZUxheW91dFVuaXQgeyB9OwogICAgICAgICAgICAgZm9yIChhdXRvJiBy
dW4gOiBtX3J1bnMpIHsKLSAgICAgICAgICAgICAgICAvLyBFeHBhbmQgYW5kIG1vdmVzIHJ1bnMg
YnkgdGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KLSAgICAgICAgICAgICAgICBpZiAocnVuLmhh
c0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHJ1bi5zZXRIb3Jp
em9udGFsRXhwYW5zaW9uKGV4cGFuc2lvblRvRGlzdHJpYnV0ZSAqIHJ1bi5leHBhbnNpb25PcHBv
cnR1bml0eUNvdW50KCkpOworICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBhbmQgbW92ZSBydW5z
IGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBhbnNpb24uCisgICAgICAgICAgICAgICAgcnVuLm1vdmVI
b3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworICAgICAgICAgICAgICAgIGlmICgh
cnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIEFTU0VSVChydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbXB1dGVkRXhwYW5zaW9uID0gZXhwYW5zaW9u
VG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogQ2hlY2sgd2h5IHdlIG5lZWQgdG8gc2V0IGJvdGguCisgICAgICAg
ICAgICAgICAgcnVuLnNldEhvcml6b250YWxFeHBhbnNpb24oY29tcHV0ZWRFeHBhbnNpb24pOwor
ICAgICAgICAgICAgICAgIHJ1bi5zaHJpbmtIb3Jpem9udGFsbHkoLWNvbXB1dGVkRXhwYW5zaW9u
KTsKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBjb21wdXRlZEV4cGFu
c2lvbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIu
aAppbmRleCA2ZjE1OGJhMzFiMWEwMWMwOTU1ZmNkM2FhYjlhYzQ3NmFmZGU1NDg0Li40YmE2MWNm
ZDQ1ODQxNDhlYTY4NzFiZjkwYjExNTFlMDY0MWJkNDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgK
QEAgLTc3LDYgKzc3LDcgQEAgcHVibGljOgogCiAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsV2lkdGg7IH0KICAgICAgICAgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbExlZnQ7
IH0KKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVy
biBsb2dpY2FsTGVmdCgpICsgbG9naWNhbFdpZHRoKCk7IH0KIAogICAgICAgICBjb25zdCBEaXNw
bGF5OjpSdW46OkV4cGFuc2lvbiYgZXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNp
b247IH0KICAgICAgICAgYm9vbCBoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407850</attachid>
            <date>2020-09-02 19:00:40 -0700</date>
            <delta_ts>2020-09-03 03:15:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215410-20200902190039.patch</filename>
            <type>text/plain</type>
            <size>56215</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ5ODA4ZTQzMzBlZDYy
NTcyNjY1MjJjNzI2ZWEyNmFmYjdjYTk5Mi4uZDY5MmU1MDYzYzkzMjA4ZDBjYjAwNTExZWQ3MmZh
ZWViMTNiZDU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIwLTA4LTI4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBGaW5hbGl6
ZSBJbmxpbmVCb3ggYWxpZ25tZW50IGluIExpbmVCb3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
dHRpIEtvaXZpc3RvLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29tcGxldGVzIHRoZSBJbmxpbmVC
b3ggdHJhbnNpdGlvbi4KKworICAgICAgICBMaW5lQm94IG5vdyBoYXMgYSBkZWRpY2F0ZWQgcm9v
dCBpbmxpbmUgYm94IGFuZCBhZGRpdGlvbmFsIGlubGluZSBib3hlcyBhcyBuZWVkZWQuCisgICAg
ICAgIEJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYWxpZ25tZW50cyBhcmUgcGVyZm9ybWVk
IG9uIHRoZSBpbmxpbmUgYm94ZXMgYXMgb3Bwb3NlZCB0byBvbiB0aGUgcnVucy4KKworICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVM
YXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29uc3RyYWludHNGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUpOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
UXVpcmtzOjppbml0aWFsTGluZUhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OmNvbGxlY3RIYW5naW5nQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Omhvcml6
b250YWxBbGlnbm1lbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYWxmTGVh
ZGluZ01ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVC
b3g6OklubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OkxpbmVC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjptX2lubGluZUZvcm1hdHRpbmdDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lQm94Rm9yTGF5b3V0
Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lUmVj
dEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpj
b25zdHJ1Y3RJbmxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6
OmFsaWduVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnJl
Y3RGb3JSdW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94OjphbGlnbkhvcml6b250YWxseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OmNvbGxlY3RIYW5naW5nQ29udGVudCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OkFz
Y2VudEFuZERlc2NlbnQ6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmVCb3g6OklubGluZUJveDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxUb3AgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmxvZ2ljYWxMZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94Ojpsb2dpY2Fs
V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVC
b3g6OmxvZ2ljYWxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Qm94OjpJbmxpbmVCb3g6OmJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUJveDo6SW5saW5lQm94OjpkZXNjZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpzZXRMb2dpY2FsVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lQm94OjpzZXRMb2dpY2FsV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVCb3g6OmlzQXRvbWljSW5saW5l
TGV2ZWxCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxp
bmVCb3g6OnNldEhhc1N0cnV0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6
SW5saW5lQm94OjpoYXNTdHJ1dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVCb3g6OmFsaWdubWVudEJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QXNjZW50QW5kRGVzY2VudDo6aGVpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJveDo6YXNjZW50QW5kRGVzY2VudCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OnNldFNjcm9sbGFibGVPdmVyZmxv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUJv
eDo6SW5saW5lQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJv
eDo6c2V0TG9naWNhbEhlaWdodElmR3JlYXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCb3g6OnNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0QXNjZW50SWZHcmVhdGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6c2V0RGVzY2Vu
dElmR3JlYXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6
OmhhbGZMZWFkaW5nTWV0cmljcyk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJ1aWxkZXI6OlJ1bjo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKwogMjAyMC0wOC0zMCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9y
IFRleHRFbmNvZGVyU3RyZWFtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZGlz
cGxheXRyZWUvRGlzcGxheUlubGluZVJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNw
bGF5dHJlZS9EaXNwbGF5SW5saW5lUmVjdC5oCmluZGV4IDI3YmUwOGZkYTA1NmI5YzYyZDQwYzIw
MzFiNDdjNjAxNTg2NzFmNzAuLjUyM2U4ZTAxMzU4ZTIyM2I5MDQzNTYzNmVhMzQyN2U3NDgxYmQx
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNwbGF5
SW5saW5lUmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9kaXNwbGF5dHJlZS9EaXNw
bGF5SW5saW5lUmVjdC5oCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbW92
ZUhvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0KTsKICAgICB2b2lkIG1vdmVWZXJ0aWNhbGx5
KElubGluZUxheW91dFVuaXQpOworICAgIHZvaWQgbW92ZUJ5KElubGluZUxheW91dFBvaW50KTsK
IAogICAgIHZvaWQgZXhwYW5kKE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+LCBPcHRpb25hbDxJ
bmxpbmVMYXlvdXRVbml0Pik7CiAgICAgdm9pZCBleHBhbmRUb0NvbnRhaW4oY29uc3QgSW5saW5l
UmVjdCYpOwpAQCAtMjM2LDYgKzIzNywxMyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVSZWN0Ojptb3Zl
VmVydGljYWxseShJbmxpbmVMYXlvdXRVbml0IG9mZnNldCkKICAgICBtX3JlY3QubW92ZShJbmxp
bmVMYXlvdXRTaXplIHsgMCwgb2Zmc2V0IH0pOwogfQogCitpbmxpbmUgdm9pZCBJbmxpbmVSZWN0
Ojptb3ZlQnkoSW5saW5lTGF5b3V0UG9pbnQgb2Zmc2V0KQoreworICAgIEFTU0VSVChtX2hhc1Zh
bGlkVG9wKTsKKyAgICBBU1NFUlQobV9oYXNWYWxpZExlZnQpOworICAgIG1fcmVjdC5tb3ZlQnko
b2Zmc2V0KTsKK30KKwogaW5saW5lIHZvaWQgSW5saW5lUmVjdDo6ZXhwYW5kKE9wdGlvbmFsPElu
bGluZUxheW91dFVuaXQ+IHdpZHRoLCBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBoZWlnaHQp
CiB7CiAgICAgQVNTRVJUKCF3aWR0aCB8fCBtX2hhc1ZhbGlkV2lkdGgpOwpAQCAtMjQ1LDcgKzI1
MywxMyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVSZWN0OjpleHBhbmQoT3B0aW9uYWw8SW5saW5lTGF5
b3V0VW5pdD4gd2lkdGgsIE9wdGlvbmFsPElubGluZQogCiBpbmxpbmUgdm9pZCBJbmxpbmVSZWN0
OjpleHBhbmRUb0NvbnRhaW4oY29uc3QgSW5saW5lUmVjdCYgb3RoZXIpCiB7Ci0gICAgbV9yZWN0
ID0gdW5pb25SZWN0KG90aGVyLCBtX3JlY3QpOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9o
YXNWYWxpZFRvcCA9IHRydWU7CisgICAgbV9oYXNWYWxpZExlZnQgPSB0cnVlOworICAgIG1faGFz
VmFsaWRXaWR0aCA9IHRydWU7CisgICAgbV9oYXNWYWxpZEhlaWdodCA9IHRydWU7CisjZW5kaWYK
KyAgICBtX3JlY3QudW5pdGVFdmVuSWZFbXB0eShvdGhlcik7CiB9CiAKIGlubGluZSB2b2lkIElu
bGluZVJlY3Q6OmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4oY29uc3QgSW5saW5lUmVjdCYgb3Ro
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggYmM0MzlmMGQ1NDA4
MzNlMmI5NWU1YjBiYjA1OWY2NGRkNWIyNTk0ZC4uNzZlNzZmMjRlYTAyNGU5OTY4ZWUwOTU5ZWFl
YmZiNTZiMDkyOTA4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAt
MTY3LDggKzE2NywxMCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0
KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9KCk7CiAgICAgICAgIGxpbmUuY2xvc2UoaXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50KTsKLSAgICAgICAgYXV0byBsaW5lUmVjdCA9IERpc3BsYXk6OklubGlu
ZVJlY3QgeyBsaW5lQ29uc3RyYWludHMubG9naWNhbFRvcExlZnQsIGxpbmUubGluZUxvZ2ljYWxX
aWR0aCgpLCBsaW5lQ29uc3RyYWludHMubGluZUhlaWdodH07Ci0gICAgICAgIGF1dG8gbGluZUJv
eCA9IExpbmVCb3ggeyAqdGhpcywgbGluZVJlY3QsIGxpbmVDb250ZW50LnJ1bnMsIGxpbmUuaXNW
aXN1YWxseUVtcHR5KCkgPyBMaW5lQm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpZZXMgOiBMaW5l
Qm94OjpJc0xpbmVWaXN1YWxseUVtcHR5OjpObywgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
ID8gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQm94OjpJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vIH07CisKKyAgICAgICAgYXV0byBsaW5lSXNW
aXN1YWxseUVtcHR5ID0gbGluZS5pc1Zpc3VhbGx5RW1wdHkoKSA/IExpbmVCb3g6OklzTGluZVZp
c3VhbGx5RW1wdHk6OlllcyA6IExpbmVCb3g6OklzTGluZVZpc3VhbGx5RW1wdHk6Ok5vOworICAg
ICAgICBhdXRvIGxhc3RMaW5lID0gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID8gTGluZUJv
eDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQm94OjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAgICAgICBhdXRvIGxpbmVCb3ggPSBMaW5lQm94IHsg
KnRoaXMsIGxpbmVDb25zdHJhaW50cy5sb2dpY2FsVG9wTGVmdCwgbGluZS5saW5lTG9naWNhbFdp
ZHRoKCksIGxpbmUuY29udGVudExvZ2ljYWxXaWR0aCgpLCBsaW5lQ29udGVudC5ydW5zLCBsaW5l
SXNWaXN1YWxseUVtcHR5LCBsYXN0TGluZX07CiAgICAgICAgIHNldERpc3BsYXlCb3hlc0Zvckxp
bmUobGluZUNvbnRlbnQsIGxpbmVCb3gsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwogCiAgICAg
ICAgIGlmICghbGluZUNvbnRlbnRSYW5nZS5pc0VtcHR5KCkpIHsKQEAgLTQxNywxNCArNDE5LDEz
IEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lQ29uc3RyYWludHMgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yCiB7CiAgICAgYXV0byBsaW5lTG9naWNhbExlZnQg
PSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbExlZnQ7CiAgICAgYXV0byBsaW5lTG9naWNh
bFJpZ2h0ID0gbGluZUxvZ2ljYWxMZWZ0ICsgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aDsKLSAgICBhdXRvIGluaXRpYWxMaW5lSGVpZ2h0ID0gcXVpcmtzKCkuaW5pdGlhbExpbmVI
ZWlnaHQocm9vdCgpKTsKICAgICBhdXRvIGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCA9IGZhbHNl
OwogCiAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyByb290KCks
ICp0aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS5mbG9hdGluZ1N0YXRlKCkgfTsKICAgICAvLyBDaGVj
ayBmb3IgaW50cnVkaW5nIGZsb2F0cyBhbmQgYWRqdXN0IGxvZ2ljYWwgbGVmdC9hdmFpbGFibGUg
d2lkdGggZm9yIHRoaXMgbGluZSBhY2NvcmRpbmdseS4KICAgICBpZiAoIWZsb2F0aW5nQ29udGV4
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciB2YXJpYWJs
ZSBsaW5lIGhlaWdodCwgd2hlcmUgdGhlIGludHJ1c2l2ZSBmbG9hdHMgc2hvdWxkIGJlIHByb2Jl
ZCBhcyB0aGUgbGluZSBoZWlnaHQgZ3Jvd3MuCi0gICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50
cyA9IGZsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyh0b0xheW91dFVuaXQobGluZUxvZ2ljYWxU
b3ApLCB0b0xheW91dFVuaXQobGluZUxvZ2ljYWxUb3AgKyBpbml0aWFsTGluZUhlaWdodCkpOwor
ICAgICAgICBhdXRvIGZsb2F0Q29uc3RyYWludHMgPSBmbG9hdGluZ0NvbnRleHQuY29uc3RyYWlu
dHModG9MYXlvdXRVbml0KGxpbmVMb2dpY2FsVG9wKSwgdG9MYXlvdXRVbml0KGxpbmVMb2dpY2Fs
VG9wICsgcXVpcmtzKCkuaW5pdGlhbExpbmVIZWlnaHQoKSkpOwogICAgICAgICAvLyBDaGVjayBp
ZiB0aGVzZSBjb25zdHJhaW50cyBhY3R1YWxseSBwdXQgbGltaXRhdGlvbiBvbiB0aGUgbGluZS4K
ICAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLmxl
ZnQtPnggPD0gbGluZUxvZ2ljYWxMZWZ0KQogICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5s
ZWZ0ID0geyB9OwpAQCAtNDgwLDcgKzQ4MSw3IEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpM
aW5lQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbnN0cmFpbnRzRm9yCiAg
ICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmNvbXB1dGVkVGV4dEluZGVudChyb290LCBob3Jpem9u
dGFsQ29uc3RyYWludHMpLnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pOwogICAgIH07CiAg
ICAgbGluZUxvZ2ljYWxMZWZ0ICs9IGNvbXB1dGVkVGV4dEluZGVudCgpOwotICAgIHJldHVybiBM
aW5lQ29uc3RyYWludHMgeyB7IGxpbmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgbGlu
ZUxvZ2ljYWxSaWdodCAtIGxpbmVMb2dpY2FsTGVmdCwgaW5pdGlhbExpbmVIZWlnaHQsIGxpbmVJ
c0NvbnN0cmFpbmVkQnlGbG9hdCB9OworICAgIHJldHVybiBMaW5lQ29uc3RyYWludHMgeyB7IGxp
bmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgbGluZUxvZ2ljYWxSaWdodCAtIGxpbmVM
b2dpY2FsTGVmdCwgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IH07CiB9CiAKIHZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OnNldERpc3BsYXlCb3hlc0ZvckxpbmUoY29uc3QgTGluZUxheW91
dENvbnRleHQ6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCwgY29uc3QgTGluZUJveCYgbGluZUJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpCkBA
IC01MTAsMTYgKzUxMSwxMyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNw
bGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVMYXlvdXRDb250ZXh0OjpMaQogICAgIGF1dG8mIGlu
bGluZUNvbnRlbnQgPSBmb3JtYXR0aW5nU3RhdGUuZW5zdXJlRGlzcGxheUlubGluZUNvbnRlbnQo
KTsKICAgICBhdXRvIGxpbmVJbmRleCA9IGlubGluZUNvbnRlbnQubGluZUJveGVzLnNpemUoKTsK
ICAgICBhdXRvIGxpbmVJbmtPdmVyZmxvdyA9IGxpbmVCb3guc2Nyb2xsYWJsZU92ZXJmbG93KCk7
Ci0gICAgLy8gQ29tcHV0ZSBib3ggZmluYWwgZ2VvbWV0cnkuCisgICAgLy8gQ29tcHV0ZSBmaW5h
bCBib3ggZ2VvbWV0cnkuCiAgICAgZm9yIChhdXRvJiBsaW5lUnVuIDogbGluZUNvbnRlbnQucnVu
cykgewotICAgICAgICBhdXRvJiBsb2dpY2FsUmVjdCA9IGxpbmVCb3gucmVjdEZvclJ1bihsaW5l
UnVuKTsKICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gbGluZVJ1bi5sYXlvdXRCb3goKTsKLQot
ICAgICAgICAvLyBBZGQgZmluYWwgZGlzcGxheSBydW5zIHRvIHN0YXRlIGZpcnN0LgogICAgICAg
ICAvLyBJbmxpbmUgbGV2ZWwgY29udGFpbmVycyAoPHNwYW4+KSBkb24ndCBnZW5lcmF0ZSBkaXNw
bGF5IHJ1bnMgYW5kIG5laXRoZXIgZG8gY29tcGxldGVseSBjb2xsYXBzZWQgcnVucy4KLSAgICAg
ICAgYXV0byBpbml0aWF0ZXNJbmxpbmVSdW4gPSAhbGluZVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkg
JiYgIWxpbmVSdW4uaXNDb250YWluZXJFbmQoKTsKKyAgICAgICAgYXV0byBpbml0aWF0ZXNJbmxp
bmVSdW4gPSBsaW5lUnVuLmlzVGV4dCgpIHx8IGxpbmVSdW4uaXNMaW5lQnJlYWsoKSB8fCBsaW5l
UnVuLmlzQm94KCk7CiAgICAgICAgIGlmIChpbml0aWF0ZXNJbmxpbmVSdW4pIHsKLSAgICAgICAg
ICAgIGF1dG8gY29tcHV0ZWRJbmtPdmVyZmxvdyA9IFsmXSB7CisgICAgICAgICAgICBhdXRvIGNv
bXB1dGVkSW5rT3ZlcmZsb3cgPSBbJl0gKGNvbnN0IGF1dG8mIGxvZ2ljYWxSZWN0KSB7CiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24tdGV4dCBpbmsgb3ZlcmZs
b3cuCiAgICAgICAgICAgICAgICAgaWYgKCFsaW5lUnVuLmlzVGV4dCgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbG9naWNhbFJlY3Q7CkBAIC01MzUsNTMgKzUzMywzMyBAQCB2b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGNvbnN0IExpbmVM
YXlvdXRDb250ZXh0OjpMaQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1
cm4gaW5rT3ZlcmZsb3c7CiAgICAgICAgICAgICB9OwotICAgICAgICAgICAgYXV0byBpbmtPdmVy
ZmxvdyA9IGNvbXB1dGVkSW5rT3ZlcmZsb3coKTsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFJl
Y3QgPSBsaW5lUnVuLmlzQm94KCkgPyBsaW5lQm94LmlubGluZUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpLmxvZ2ljYWxSZWN0KCkgOiBsaW5lQm94LmlubGluZVJlY3RGb3JUZXh0UnVuKGxpbmVS
dW4pOworICAgICAgICAgICAgLy8gSW5saW5lIGJveGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgbGlu
ZSBib3ggd2hpbGUgZmluYWwgRGlzcGxheTo6UnVucyBuZWVkIHRvIGJlIHJlbGF0aXZlIHRvIHRo
ZSBwYXJlbnQgRGlzcGxheTpCb3gKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2Ug
anVzdCBsZWF2ZSB0aGVtIGJlIHJlbGF0aXZlIHRvIHRoZSBsaW5lIGJveD8KKyAgICAgICAgICAg
IGxvZ2ljYWxSZWN0Lm1vdmVCeSh7IGxpbmVCb3gubG9naWNhbExlZnQoKSwgbGluZUJveC5sb2dp
Y2FsVG9wKCkgfSk7CisgICAgICAgICAgICBhdXRvIGlua092ZXJmbG93ID0gY29tcHV0ZWRJbmtP
dmVyZmxvdyhsb2dpY2FsUmVjdCk7CiAgICAgICAgICAgICBsaW5lSW5rT3ZlcmZsb3cuZXhwYW5k
VG9Db250YWluKGlua092ZXJmbG93KTsKLSAgICAgICAgICAgIGlubGluZUNvbnRlbnQucnVucy5h
cHBlbmQoeyBsaW5lSW5kZXgsIGxpbmVSdW4ubGF5b3V0Qm94KCksIGxvZ2ljYWxSZWN0LCBpbmtP
dmVyZmxvdywgbGluZVJ1bi5leHBhbnNpb24oKSwgbGluZVJ1bi50ZXh0Q29udGVudCgpIH0pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxpbmVSdW4uaXNUZXh0KCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBpZiAobGluZVJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogU2luY2UgPGJyPiBhbmQgPHdicj4gcnVucyBoYXZlIGFzc29jaWF0ZWQg
RE9NIGVsZW1lbnRzLCB3ZSBtaWdodCBuZWVkIHRvIGNvbnN0cnVjdCBhIGRpc3BsYXkgYm94IGhl
cmUuIAotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpbmxpbmVDb250ZW50LnJ1
bnMuYXBwZW5kKHsgbGluZUluZGV4LCBsYXlvdXRCb3gsIGxvZ2ljYWxSZWN0LCBpbmtPdmVyZmxv
dywgbGluZVJ1bi5leHBhbnNpb24oKSwgbGluZVJ1bi50ZXh0Q29udGVudCgpIH0pOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gSW5saW5lIGxldmVsIGJveCAocmVwbGFjZWQgb3IgaW5saW5lLWJs
b2NrKQotICAgICAgICBpZiAobGluZVJ1bi5pc0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHRv
cExlZnQgPSBsb2dpY2FsUmVjdC50b3BMZWZ0KCk7CisgICAgICAgIC8vIENyZWF0ZSBkaXNwbGF5
IGJveGVzLgorICAgICAgICAvLyBGSVhNRTogU2luY2UgPGJyPiBhbmQgPHdicj4gcnVucyBoYXZl
IGFzc29jaWF0ZWQgRE9NIGVsZW1lbnRzLCB3ZSBtaWdodCBuZWVkIHRvIGNvbnN0cnVjdCBhIGRp
c3BsYXkgYm94IGhlcmUuIAorICAgICAgICBhdXRvIGluaXRpYXRlc0Rpc3BsYXlCb3ggPSBsaW5l
UnVuLmlzQm94KCkgfHwgbGluZVJ1bi5pc0NvbnRhaW5lclN0YXJ0KCk7CisgICAgICAgIGlmIChp
bml0aWF0ZXNEaXNwbGF5Qm94KSB7CisgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9y
bWF0dGluZ1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8mIGlu
bGluZUJveCA9IGxpbmVCb3guaW5saW5lQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAg
ICAgICAgICBhdXRvIHRvcExlZnQgPSBpbmxpbmVCb3gubG9naWNhbFJlY3QoKS50b3BMZWZ0KCk7
CiAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRpb25lZCgpKQogICAgICAg
ICAgICAgICAgIHRvcExlZnQgKz0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25P
ZmZzZXQobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgICAgICAgICAgYXV0
byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAg
ICAgICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQodG9MYXlvdXRQb2ludCh0b3BMZWZ0KSk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElubGluZSBs
ZXZlbCBjb250YWluZXIgc3RhcnQgKDxzcGFuPikKLSAgICAgICAgaWYgKGxpbmVSdW4uaXNDb250
YWluZXJTdGFydCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGlu
Z1N0YXRlLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0
VG9wTGVmdCh0b0xheW91dFBvaW50KGxvZ2ljYWxSZWN0LnRvcExlZnQoKSkpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJbmxpbmUgbGV2ZWwgY29udGFp
bmVyIGVuZCAoPC9zcGFuPikKLSAgICAgICAgaWYgKGxpbmVSdW4uaXNDb250YWluZXJFbmQoKSkg
ewotICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5
Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93UG9zaXRp
b25lZCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmZsb3dPZmZzZXQgPSBnZW9tZXRyeSgp
LmluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChsYXlvdXRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cyk7Ci0gICAgICAgICAgICAgICAgZGlzcGxheUJveC5tb3ZlSG9yaXpvbnRhbGx5KGlu
Zmxvd09mZnNldC53aWR0aCgpKTsKLSAgICAgICAgICAgICAgICBkaXNwbGF5Qm94Lm1vdmVWZXJ0
aWNhbGx5KGluZmxvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAobGluZVJ1bi5p
c0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG1hcmdpbkJveFdpZHRo
ID0gaW5saW5lQm94LmxvZ2ljYWxXaWR0aCgpOworICAgICAgICAgICAgICAgIGF1dG8gY29udGVu
dEJveFdpZHRoID0gbWFyZ2luQm94V2lkdGggLSAoZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsg
ZGlzcGxheUJveC5ib3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVP
cigwKSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZpeCBpdCBmb3IgbXVsdGlsaW5lLgor
ICAgICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHRvTGF5b3V0VW5p
dChjb250ZW50Qm94V2lkdGgpKTsKKyAgICAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRl
bnRCb3hIZWlnaHQodG9MYXlvdXRVbml0KGlubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94V2lkdGggPSBsb2dpY2FsUmVj
dC5sZWZ0KCkgLSBkaXNwbGF5Qm94LmxlZnQoKTsKLSAgICAgICAgICAgIGF1dG8gY29udGVudEJv
eFdpZHRoID0gbWFyZ2luQm94V2lkdGggLSAoZGlzcGxheUJveC5tYXJnaW5TdGFydCgpICsgZGlz
cGxheUJveC5ib3JkZXJMZWZ0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigw
KSk7Ci0gICAgICAgICAgICAvLyBGSVhNRSBmaXggaXQgZm9yIG11bHRpbGluZS4KLSAgICAgICAg
ICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHRvTGF5b3V0VW5pdChjb250ZW50Qm94
V2lkdGgpKTsKLSAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodCh0b0xh
eW91dFVuaXQobG9naWNhbFJlY3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIC8v
IEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoZSBsb2dpY2FsIHRvIHBoeXNpY2FsIHRyYW5zbGF0ZSBz
aG91bGQgaGFwcGVuLgogICAgIGlubGluZUNvbnRlbnQubGluZUJveGVzLmFwcGVuZCh7IGxpbmVC
b3gubG9naWNhbFJlY3QoKSwgbGluZUJveC5zY3JvbGxhYmxlT3ZlcmZsb3coKSwgbGluZUlua092
ZXJmbG93LCBsaW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaAppbmRleCA0YTJjMTM3YWRjZGVlNzRlOGY0NDM3NjMwZDkwNmVmMzM0NmRm
MTM4Li44MTdhY2ViMzI3N2EwZjQwMmVlNDNkZjUxOWFhNDE3NjJmMmFjOTA2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmgKQEAgLTQ2LDEzICs0NiwxMCBAQCBwdWJsaWM6CiAgICAg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29u
dGV4dFJvb3QsIElubGluZUZvcm1hdHRpbmdTdGF0ZSYpOwogICAgIHZvaWQgbGF5b3V0SW5GbG93
Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29u
dGVudCYpIG92ZXJyaWRlOwogCi1wcml2YXRlOgotICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7Ci0KICAgICBj
bGFzcyBRdWlya3MgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyB7CiAgICAgcHVi
bGljOgogICAgICAgICBib29sIGxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JikgY29uc3Q7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgaW5pdGlh
bExpbmVIZWlnaHQoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nUm9vdCkgY29uc3Q7Cisg
ICAgICAgIElubGluZUxheW91dFVuaXQgaW5pdGlhbExpbmVIZWlnaHQoKSBjb25zdDsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsK
QEAgLTYzLDYgKzYwLDkgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpRdWlya3MgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gUXVpcmtzKCp0aGlzKTsgfQog
Citwcml2YXRlOgorICAgIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgY29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCkgb3ZlcnJpZGU7CisKICAgICBjbGFzcyBHZW9tZXRyeSA6IHB1
YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgewogICAgIHB1YmxpYzoKICAgICAgICAg
Q29udGVudEhlaWdodEFuZE1hcmdpbiBpbmxpbmVCbG9ja0hlaWdodEFuZE1hcmdpbihjb25zdCBC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZVZlcnRpY2Fs
VmFsdWVzJikgY29uc3Q7CkBAIC05MSw3ICs5MSw2IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IExp
bmVDb25zdHJhaW50cyB7CiAgICAgICAgIElubGluZUxheW91dFBvaW50IGxvZ2ljYWxUb3BMZWZ0
OwogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCB7IDAgfTsK
LSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsaW5lSGVpZ2h0IHsgMCB9OwogICAgICAgICBib29s
IGxpbmVJc0NvbnN0cmFpbmVkQnlGbG9hdCB7IGZhbHNlIH07CiAgICAgfTsKICAgICBMaW5lQ29u
c3RyYWludHMgY29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYs
IElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxUb3ApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWly
a3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmluZGV4IDBkM2UwMzYyZjA2OTAyODZkNGI2ZDUwNjRi
Nzg5ODhlMzBmZDRhOTEuLjAxN2JjN2Q0MGUzNDBjMTFmYTYwZTY5YjAyMDA1MWI4ZDUzMjU0ZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKQEAgLTcw
LDEzICs3MCwxMyBAQCBib29sIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmxpbmVE
ZXNjZW50TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExpbmVCdWlsZAogICAgIHJldHVybiB0cnVlOwog
fQogCi1JbmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6Omlu
aXRpYWxMaW5lSGVpZ2h0KGNvbnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ1Jvb3QpIGNvbnN0
CitJbmxpbmVMYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmluaXRp
YWxMaW5lSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGNvbXB1dGVkTGlu
ZUhlaWdodCA9IGZvcm1hdHRpbmdSb290LnN0eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CiAg
ICAgLy8gTmVnYXRpdmUgbGluZUhlaWdodCB2YWx1ZSBtZWFucyB0aGUgbGluZS1oZWlnaHQgaXMg
bm90IHNldAotICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluTm9RdWlya3NNb2RlKCkgfHwgIWZvcm1h
dHRpbmdSb290LnN0eWxlKCkubGluZUhlaWdodCgpLmlzTmVnYXRpdmUoKSkKLSAgICAgICAgcmV0
dXJuIGNvbXB1dGVkTGluZUhlaWdodDsKLSAgICByZXR1cm4gTGluZUJveDo6aGFsZkxlYWRpbmdN
ZXRyaWNzKGZvcm1hdHRpbmdSb290LnN0eWxlKCkuZm9udE1ldHJpY3MoKSwgY29tcHV0ZWRMaW5l
SGVpZ2h0KS5oZWlnaHQoKTsKKyAgICBhdXRvJiByb290ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5y
b290KCk7CisgICAgaWYgKGxheW91dFN0YXRlKCkuaW5Ob1F1aXJrc01vZGUoKSB8fCAhcm9vdC5z
dHlsZSgpLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZlKCkpCisgICAgICAgIHJldHVybiByb290LnN0
eWxlKCkuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisgICAgcmV0dXJuIHJvb3Quc3R5bGUoKS5mb250
TWV0cmljcygpLmZsb2F0SGVpZ2h0KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKaW5kZXggNjBi
MjNjYWQxNGQzODhmNDlkYTVjNmE3OTMyZjRjYWVlY2FkODEyYS4uY2ViMTQyMzY1ODI4OWRmNWEx
Zjk5NDZlMzU3ZjFlYjBmM2E5NzYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAKQEAgLTMxLDYgKzMxLDEz
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAorc3RydWN0IEFz
Y2VudEFuZERlc2NlbnQgeworICAgIElubGluZUxheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gYXNjZW50ICsgZGVzY2VudDsgfQorCisgICAgSW5saW5lTGF5b3V0VW5pdCBhc2NlbnQg
eyAwIH07CisgICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50IHsgMCB9OworfTsKKwogc3RydWN0
IEhhbmdpbmdDb250ZW50IHsKIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0KCk7CkBAIC01MiwxMzkg
KzU5LDE1MyBAQCB2b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgpCiAgICAgbV93aWR0aCA9ICAw
OwogfQogCi1MaW5lQm94OjpMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbGluZVJl
Y3QsIGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5
IGlzTGluZVZpc3VhbGx5RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQpCi0gICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlu
bGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9ydW5zKHJ1bnMpCi0gICAgLCBtX3JlY3Qo
bGluZVJlY3QpCi0gICAgLCBtX3Njcm9sbGFibGVPdmVyZmxvdyhsaW5lUmVjdCkKLSAgICAsIG1f
cm9vdElubGluZUJveChJbmxpbmVCb3ggeyBsaW5lUmVjdCwgeyB9LCBpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5yb290KCkgfSkKK3N0YXRpYyBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0Nv
bnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIExpbmVCb3g6OklzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCiB7Ci0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1ZhbGlkQWxpZ25tZW50QmFzZWxpbmUgPSB0cnVlOwot
I2VuZGlmCi0gICAgYXV0byYgcm9vdFN0eWxlID0gaW5saW5lRm9ybWF0dGluZ0NvbnRleHQucm9v
dCgpLnN0eWxlKCk7Ci0gICAgYXV0byBoYWxmTGVhZGluZ01ldHJpY3MgPSB0aGlzLT5oYWxmTGVh
ZGluZ01ldHJpY3Mocm9vdFN0eWxlLmZvbnRNZXRyaWNzKCksIGxpbmVSZWN0LmhlaWdodCgpKTsK
LQotICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50ID0gaGFsZkxlYWRpbmdNZXRy
aWNzOwotICAgIG1fYWxpZ25tZW50QmFzZWxpbmUgPSBoYWxmTGVhZGluZ01ldHJpY3MuYXNjZW50
OwotCi0gICAgYXV0byBjb250ZW50TG9naWNhbFdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07
Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgYXV0byBydW5IZWlnaHQg
PSBbJl0oKSAtPiBJbmxpbmVMYXlvdXRVbml0IHsKLSAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRy
aWNzID0gcnVuLnN0eWxlKCkuZm9udE1ldHJpY3MoKTsKLSAgICAgICAgICAgIGlmIChydW4uaXNU
ZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRN
ZXRyaWNzLmhlaWdodCgpOwotCi0gICAgICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQo
KSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZm9udE1l
dHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlv
dXRCb3goKTsKLSAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gaW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgIGlmIChsYXlv
dXRCb3guaXNSZXBsYWNlZEJveCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7
Ci0KLSAgICAgICAgICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcuIGlubGluZS1i
bG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdpbiBib3ggaXMg
Y29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KLSAgICAgICAgICAgIHJldHVybiBi
b3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gRklY
TUU6IFRoaXMgaXMgdGVtcG9yYXJ5LiBEbyBub3QgbWFrZSBhbiBpbmxpbmUgYm94IGZvciBlYWNo
IHJ1bi4KLSAgICAgICAgbV9pbmxpbmVCb3hMaXN0LmFwcGVuZChJbmxpbmVCb3ggeyB7IDAsIHJ1
bi5sb2dpY2FsTGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCksIHJ1bkhlaWdodCgpIH0sIGhhbGZM
ZWFkaW5nTWV0cmljcywgcnVuLmxheW91dEJveCgpIH0pOwotICAgICAgICBtX3J1blRvSW5saW5l
Qm94TWFwLnNldCgmcnVuLCBtX2lubGluZUJveExpc3Quc2l6ZSgpIC0gMSk7Ci0gICAgICAgIGNv
bnRlbnRMb2dpY2FsV2lkdGggKz0gcnVuLmxvZ2ljYWxXaWR0aCgpOwotICAgIH0KLSAgICBtX3Nj
cm9sbGFibGVPdmVyZmxvdy5zZXRXaWR0aChzdGQ6Om1heChsaW5lUmVjdC53aWR0aCgpLCBjb250
ZW50TG9naWNhbFdpZHRoKSk7Ci0gICAgYWxpZ25WZXJ0aWNhbGx5KCk7Ci0gICAgYWxpZ25Ib3Jp
em9udGFsbHkobGluZVJlY3Qud2lkdGgoKSAtIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGlzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCk7Ci0KLSAgICBpZiAoaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJ
c0xpbmVWaXN1YWxseUVtcHR5OjpZZXMpIHsKLSAgICAgICAgbV9yZWN0LnNldEhlaWdodCh7IH0p
OwotICAgICAgICBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2VudCA9IHsgfTsKKyAgICBh
dXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OworICAgIGlmIChpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgPT0gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50OjpZZXMpCisgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKKyAg
ICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UocnVucykpIHsKKyAgICAg
ICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Cisg
ICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRl
c3BhY2UoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZl
IGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAgICAgICAgaWYgKHJ1bi5zdHlsZSgp
LndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFu
Z2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQo
cnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOwogICAgIH0KKyAgICByZXR1cm4gaGFuZ2lu
Z0NvbnRlbnQ7CiB9CiAKLXZvaWQgTGluZUJveDo6YWxpZ25Ib3Jpem9udGFsbHkoSW5saW5lTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFz
dExpbmUpCitzdGF0aWMgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gaG9yaXpvbnRhbEFsaWdu
bWVudE9mZnNldChjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9k
ZSB0ZXh0QWxpZ24sIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5
b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQgaXNMYXN0TGluZSkKIHsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29sbGVj
dEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmUpOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBs
aW5lTG9naWNhbFdpZHRoIC0gY29udGVudExvZ2ljYWxXaWR0aDsKKyAgICBhdXRvIGhhbmdpbmdD
b250ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KHJ1bnMsIGlzTGFzdExpbmUpOwogICAgIGF2
YWlsYWJsZVdpZHRoICs9IGhhbmdpbmdDb250ZW50LndpZHRoKCk7Ci0gICAgaWYgKG1fcnVucy5p
c0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChhdmFpbGFibGVXaWR0aCA8PSAwKQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byBj
b21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0gewotICAgICAgICBhdXRvJiByb290U3R5
bGUgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnJvb3QoKS5zdHlsZSgpOwotICAgICAgICBpZiAocm9v
dFN0eWxlLnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0gICAgICAgICAg
ICByZXR1cm4gcm9vdFN0eWxlLnRleHRBbGlnbigpOworICAgICAgICBpZiAodGV4dEFsaWduICE9
IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICByZXR1cm4gdGV4dEFsaWduOwog
ICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVj
aWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKICAgICAgICAgLy8gaW4gb3JkZXIg
dG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQg
YnkgdGV4dC1hbGlnbi1sYXN0LAogICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZv
cmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgotICAg
ICAgICBpZiAobV9ydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gSXNM
YXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCisgICAgICAgIGlmIChydW5zLmxhc3QoKS5p
c0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gTGluZUJveDo6SXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50OjpZZXMpCiAgICAgICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7
CiAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OwotICAgIH0oKTsKLQotICAg
IGlmIChjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eSkgewotICAgICAgICBhdXRvIGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gSW5saW5lTGF5b3V0VW5p
dCB7IH07Ci0gICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBtX3J1bnMuc2l6
ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBtX2lubGluZUJveExpc3RbaW5kZXhdLnJlY3Qu
bW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7CisgICAgfTsKIAotICAgICAg
ICAgICAgYXV0byBob3Jpem9udGFsRXhwYW5zaW9uID0gbV9ydW5zW2luZGV4XS5leHBhbnNpb24o
KS5ob3Jpem9udGFsRXhwYW5zaW9uOwotICAgICAgICAgICAgbV9pbmxpbmVCb3hMaXN0W2luZGV4
XS5yZWN0LmV4cGFuZEhvcml6b250YWxseShob3Jpem9udGFsRXhwYW5zaW9uKTsKLSAgICAgICAg
ICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGhvcml6b250YWxFeHBhbnNpb247Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25t
ZW50KCkpIHsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5k
OgorICAgICAgICByZXR1cm4gYXZhaWxhYmxlV2lkdGg7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpDZW50ZXI6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAg
IHJldHVybiBhdmFpbGFibGVXaWR0aCAvIDI7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5OgorICAgICAgICAvLyBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5IGlzIGEgcnVuIGFsaWdubWVu
dCAoYW5kIHdlIG9ubHkgZG8gaW5saW5lIGJveCBhbGlnbm1lbnQgaGVyZSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lF
VCgpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4geyB9OworfQogCi0gICAgYXV0byBhZGp1c3RtZW50Rm9yQWxpZ25tZW50
ID0gWyZdIChhdXRvIGF2YWlsYWJsZVdpZHRoKSAtPiBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0
PiB7Ci0gICAgICAgIHN3aXRjaCAoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50KSB7Ci0gICAg
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpXZWJLaXRMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKLSAg
ICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKLSAgICAgICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0
VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDApOwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNl
bnRlcjoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAg
ICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGggLyAy
LCAwKTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Owor
aW5saW5lIHN0YXRpYyBBc2NlbnRBbmREZXNjZW50IGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWln
aHQpCit7CisgICAgSW5saW5lTGF5b3V0VW5pdCBhc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQo
KTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50KCk7
CisgICAgLy8gMTAuOC4xIExlYWRpbmcgYW5kIGhhbGYtbGVhZGluZworICAgIGF1dG8gaGFsZkxl
YWRpbmcgPSAobGluZUxvZ2ljYWxIZWlnaHQgLSAoYXNjZW50ICsgZGVzY2VudCkpIC8gMjsKKyAg
ICAvLyBJbmxpbmUgdHJlZSBoZWlnaHQgaXMgYWxsIGludGVnZXIgYmFzZWQuCisgICAgcmV0dXJu
IHsgZmxvb3JmKGFzY2VudCArIGhhbGZMZWFkaW5nKSwgY2VpbGYoZGVzY2VudCArIGhhbGZMZWFk
aW5nKSB9OworfQogCi0gICAgaWYgKGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGln
bm1lbnQoYXZhaWxhYmxlV2lkdGgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBsaW5lIGJveCBzaG91
bGQgbm90IG5lZWQgdG8gYmUgbW92ZWQsIG9ubHkgdGhlIHJ1bnMuCi0gICAgICAgIG1fcmVjdC5t
b3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVC
b3ggOiBtX2lubGluZUJveExpc3QpCi0gICAgICAgICAgICBpbmxpbmVCb3gucmVjdC5tb3ZlSG9y
aXpvbnRhbGx5KCphZGp1c3RtZW50KTsKK0xpbmVCb3g6OklubGluZUJveDo6SW5saW5lQm94KGNv
bnN0IERpc3BsYXk6OklubGluZVJlY3QmIHJlY3QsIElubGluZUxheW91dFVuaXQgc3ludGhldGlj
QmFzZWxpbmUpCisgICAgOiBtX2xvZ2ljYWxSZWN0KHJlY3QpCisgICAgLCBtX2Jhc2VsaW5lKHN5
bnRoZXRpY0Jhc2VsaW5lKQorICAgICwgbV9pc0VtcHR5KGZhbHNlKQorICAgICwgbV9pc0F0b21p
Yyh0cnVlKQoreworfQorCitMaW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveChjb25zdCBEaXNw
bGF5OjpJbmxpbmVSZWN0JiByZWN0LCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lLCBJbmxpbmVM
YXlvdXRVbml0IGRlc2NlbnQsIElzQ29uc2lkZXJlZEVtcHR5IGlzQ29uc2lkZXJlZEVtcHR5KQor
ICAgIDogbV9sb2dpY2FsUmVjdChyZWN0KQorICAgICwgbV9iYXNlbGluZShiYXNlbGluZSkKKyAg
ICAsIG1fZGVzY2VudChkZXNjZW50KQorICAgICwgbV9pc0VtcHR5KGlzQ29uc2lkZXJlZEVtcHR5
ID09IElzQ29uc2lkZXJlZEVtcHR5OjpZZXMpCit7Cit9CisKK0xpbmVCb3g6OkxpbmVCb3goY29u
c3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25z
dCBJbmxpbmVMYXlvdXRQb2ludCYgdG9wTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgsIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxXaWR0aCwgY29uc3QgTGluZUJ1aWxk
ZXI6OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0
eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCkKKyAgICA6IG1fcmVjdCh0b3BMZWZ0LCBsb2dpY2FsV2lkdGgsIHsgfSkKKyAgICAsIG1fY29u
dGVudExvZ2ljYWxXaWR0aChjb250ZW50TG9naWNhbFdpZHRoKQorICAgICwgbV9pbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKK3sKKyAgICBtX2xpbmVBbGln
bm1lbnRPZmZzZXQgPSBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KHJ1bnMsIHJvb3QoKS5zdHls
ZSgpLnRleHRBbGlnbigpLCBsb2dpY2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGlzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgaWYgKG1fbGluZUFsaWdubWVudE9mZnNldCkg
eworICAgICAgICAvLyBGSVhNRTogbGluZSBib3ggc2hvdWxkIG5vdCBuZWVkIHRvIGJlIG1vdmVk
LCBvbmx5IHRoZSBpbmxpbmUgYm94ZXMuCisgICAgICAgIG1fcmVjdC5tb3ZlSG9yaXpvbnRhbGx5
KCptX2xpbmVBbGlnbm1lbnRPZmZzZXQpOwogICAgIH0KKyAgICBjb25zdHJ1Y3RJbmxpbmVCb3hl
cyhydW5zLCBpc0xpbmVWaXN1YWxseUVtcHR5KTsKKyAgICBhbGlnblZlcnRpY2FsbHkoaXNMaW5l
VmlzdWFsbHlFbXB0eSk7CisgICAgLy8gQ29tcHV0ZSBzY3JvbGxhYmxlIG92ZXJmbG93LgorICAg
IG1fc2Nyb2xsYWJsZU92ZXJmbG93ID0gRGlzcGxheTo6SW5saW5lUmVjdCB7IHRvcExlZnQsIHN0
ZDo6bWF4KGxvZ2ljYWxXaWR0aCwgbV9yb290SW5saW5lQm94LmxvZ2ljYWxXaWR0aCgpKSwgeyB9
IH07CisgICAgYXV0byBsb2dpY2FsQm90dG9tID0gbV9yb290SW5saW5lQm94LmxvZ2ljYWxCb3R0
b20oKTsKKyAgICBmb3IgKGF1dG8mIGlubGluZUJveEVudHJ5IDogbV9pbmxpbmVCb3hSZWN0TWFw
KQorICAgICAgICBsb2dpY2FsQm90dG9tID0gc3RkOjptYXgobG9naWNhbEJvdHRvbSwgaW5saW5l
Qm94RW50cnkudmFsdWUtPmxvZ2ljYWxCb3R0b20oKSk7CisgICAgbV9zY3JvbGxhYmxlT3ZlcmZs
b3cuZXhwYW5kVmVydGljYWxseShsb2dpY2FsQm90dG9tKTsKKwogfQogCi12b2lkIExpbmVCb3g6
OmFsaWduVmVydGljYWxseSgpCitjb25zdCBMaW5lQm94OjpJbmxpbmVCb3gmIExpbmVCb3g6Omlu
bGluZUJveEZvckxheW91dEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKLSAgICBh
ZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgbV9pbmxpbmVCb3hMaXN0LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRv
JiBpbmxpbmVCb3ggPSBtX2lubGluZUJveExpc3RbaW5kZXhdOwotICAgICAgICBhdXRvJiBydW4g
PSBtX3J1bnNbaW5kZXhdOwotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVCb3gubGF5
b3V0Qm94OwotICAgICAgICBhdXRvIGlubGluZUJveEhlaWdodCA9IGlubGluZUJveC5yZWN0Lmhl
aWdodCgpOworICAgIEFTU0VSVCgmbGF5b3V0Qm94ICE9ICZyb290KCkpOworICAgIHJldHVybiAq
bV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmbGF5b3V0Qm94KTsKK30KIAotICAgICAgICBhdXRvIGxv
Z2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgYXV0byB2ZXJ0aWNhbEFs
aWduID0gbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwotICAgICAgICBhdXRvIGFz
Y2VudCA9IGxheW91dEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CitEaXNwbGF5
OjpJbmxpbmVSZWN0IExpbmVCb3g6OmlubGluZVJlY3RGb3JUZXh0UnVuKGNvbnN0IExpbmVCdWls
ZGVyOjpSdW4mIHJ1bikgY29uc3QKK3sKKyAgICBBU1NFUlQocnVuLmlzVGV4dCgpIHx8IHJ1bi5p
c0xpbmVCcmVhaygpKTsKKyAgICBhdXRvIGlubGluZUJveFJlY3QgPSBtX3Jvb3RJbmxpbmVCb3gu
bG9naWNhbFJlY3QoKTsKKyAgICBpZiAoJnJ1bi5sYXlvdXRCb3goKS5wYXJlbnQoKSAhPSAmcm9v
dCgpKQorICAgICAgICBpbmxpbmVCb3hSZWN0ID0gbV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmcnVu
LmxheW91dEJveCgpLnBhcmVudCgpKS0+bG9naWNhbFJlY3QoKTsKKyAgICByZXR1cm4geyBpbmxp
bmVCb3hSZWN0LnRvcCgpLCBydW4ubG9naWNhbExlZnQoKSwgcnVuLmxvZ2ljYWxXaWR0aCgpLCBp
bmxpbmVCb3hSZWN0LmhlaWdodCgpIH07Cit9CiAKLSAgICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFs
aWduKSB7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6Ci0gICAgICAgICAg
ICBpZiAocnVuLmlzTGluZUJyZWFrKCkgfHwgcnVuLmlzVGV4dCgpKQotICAgICAgICAgICAgICAg
IGxvZ2ljYWxUb3AgPSBhbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50OwotICAgICAgICAgICAg
ZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8m
IGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3gpOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBhbGlnbm1lbnRCYXNlbGluZSgpIC0g
YXNjZW50IC0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9w
KCkudmFsdWVPcigwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5l
QmxvY2tCb3goKSAmJiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCgpKSB7Cit2b2lkIExpbmVCb3g6OmNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmVCdWls
ZGVyOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5RW1w
dHkpCit7CisgICAgYXV0byBsaW5lSGFzSW1hZ2luYXJ5U3RydXQgPSAhbGF5b3V0U3RhdGUoKS5p
blF1aXJrc01vZGUoKTsKKyAgICBhdXRvIGxpbmVJc0NvbnNpZGVyZWRFbXB0eSA9ICFsaW5lSGFz
SW1hZ2luYXJ5U3RydXQgfHwgaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVWaXN1YWxseUVt
cHR5OjpZZXMgPyBJbmxpbmVCb3g6OklzQ29uc2lkZXJlZEVtcHR5OjpZZXMgOiBJbmxpbmVCb3g6
OklzQ29uc2lkZXJlZEVtcHR5OjpObzsKKyAgICBhdXRvJiBmb250TWV0cmljcyA9IHJvb3QoKS5z
dHlsZSgpLmZvbnRNZXRyaWNzKCk7CisgICAgSW5saW5lTGF5b3V0VW5pdCByb290SW5saW5lQm94
SGVpZ2h0ID0gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisgICAgYXV0byByb290SW5saW5lUmVjdCA9
IERpc3BsYXk6OklubGluZVJlY3QgeyB7IH0sIHsgfSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCBy
b290SW5saW5lQm94SGVpZ2h0IH07CisgICAgSW5saW5lTGF5b3V0VW5pdCByb290SW5saW5lQmFz
ZWxpbmUgPSBmb250TWV0cmljcy5hc2NlbnQoKTsKKyAgICBhdXRvIHJvb3RJbmxpbmVEZXNjZW50
ID0gcm9vdElubGluZUJveEhlaWdodCAtIHJvb3RJbmxpbmVCYXNlbGluZTsKKyAgICBtX3Jvb3RJ
bmxpbmVCb3ggPSBJbmxpbmVCb3ggeyByb290SW5saW5lUmVjdCwgcm9vdElubGluZUJhc2VsaW5l
LCByb290SW5saW5lRGVzY2VudCwgbGluZUlzQ29uc2lkZXJlZEVtcHR5IH07CisKKyAgICBmb3Ig
KGF1dG8mIHJ1biA6IHJ1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91
dEJveCgpOworICAgICAgICBpZiAocnVuLmlzQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
OworICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0
Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAgICAgICAgICAg
ICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxp
bmVGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKICAg
ICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBsaW5l
IC1ldmVuIGlmIGl0IGlzIGVtcHR5LgotICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tC
YXNlbGluZSA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94
ZXMubGFzdCgpLmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3gg
PSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3Qo
KTsKKyAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFzZWxpbmUgPSBsYXN0TGluZUJv
eC50b3AoKSArIGxhc3RMaW5lQm94LmJhc2VsaW5lKCk7CiAgICAgICAgICAgICAgICAgLy8gVGhl
IGlubGluZS1ibG9jaydzIGJhc2VsaW5lIG9mZnNldCBpcyByZWxhdGl2ZSB0byBpdHMgY29udGVu
dCBib3guIExldCdzIGNvbnZlcnQgaXQgcmVsYXRpdmUgdG8gdGhlIG1hcmdpbiBib3guCiAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgIF9fX19fX19fX19fX19fXyA8LSBtYXJnaW4gYm94CiAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgfApAQCAtMTk3LDE0OCArMjE4LDEyMCBAQCB2b2lk
IExpbmVCb3g6OmFsaWduVmVydGljYWxseSgpCiAgICAgICAgICAgICAgICAgLy8gICAgIHRleHQg
fCB8IHwgICB2IHRleHQKICAgICAgICAgICAgICAgICAvLyAgICAgLS0tLS18LXwtfC0tLS0tLS0t
LS0gPC0gYmFzZWxpbmUKICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGF1dG8m
IGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRC
b3gpOwotICAgICAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVGcm9tTWFyZ2luQm94ID0gYm94R2Vv
bWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21l
dHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgaW5saW5lQmxvY2tCYXNlbGluZTsKLSAgICAg
ICAgICAgICAgICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUoKSAtIGJhc2VsaW5lRnJv
bU1hcmdpbkJveDsKKyAgICAgICAgICAgICAgICBhdXRvIGFkanVzdGVkQmFzZWxpbmUgPSBib3hH
ZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2Vv
bWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOworICAg
ICAgICAgICAgICAgIGF1dG8gaW5saW5lQm94UmVjdCA9IERpc3BsYXk6OklubGluZVJlY3QgeyB7
IH0sIHJ1bi5sb2dpY2FsTGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCksIGJveEdlb21ldHJ5Lm1h
cmdpbkJveEhlaWdodCgpIH07CisgICAgICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNl
dCgmbGF5b3V0Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgYWRqdXN0
ZWRCYXNlbGluZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYWxpZ25tZW50QmFzZWxpbmUoKSAt
IChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRk
aW5nKCkudmFsdWVPcigwX2x1KSArIGlubGluZUJveEhlaWdodCArIGJveEdlb21ldHJ5Lm1hcmdp
bkFmdGVyKCkpOworICAgICAgICAgICAgICAgIGF1dG8gcnVuSGVpZ2h0ID0gYm94R2VvbWV0cnku
bWFyZ2luQm94SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0g
RGlzcGxheTo6SW5saW5lUmVjdCB7IHsgfSwgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2Fs
V2lkdGgoKSwgcnVuSGVpZ2h0IH07CisgICAgICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFw
LnNldCgmbGF5b3V0Qm94LCBtYWtlVW5pcXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgcnVu
SGVpZ2h0KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gMF9sdTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAg
ICAgICAgICAgIGxvZ2ljYWxUb3AgPSBsb2dpY2FsQm90dG9tKCkgLSBpbmxpbmVCb3hIZWlnaHQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBl
bHNlIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7CisgICAgICAgICAgICBhdXRvIGluaXRp
YWxXaWR0aCA9IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSAtIHJ1bi5sb2dpY2FsTGVmdCgpOworICAg
ICAgICAgICAgQVNTRVJUKGluaXRpYWxXaWR0aCA+PSAwKTsKKyAgICAgICAgICAgIGF1dG8mIGZv
bnRNZXRyaWNzID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKTsKKyAgICAgICAgICAg
IElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGZvbnRNZXRyaWNzLmhlaWdodCgpOwor
ICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSA9IGZvbnRNZXRyaWNzLmFzY2Vu
dCgpOworICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hSZWN0ID0gRGlzcGxheTo6SW5saW5lUmVj
dCB7IHsgfSwgcnVuLmxvZ2ljYWxMZWZ0KCksIGluaXRpYWxXaWR0aCwgbG9naWNhbEhlaWdodCB9
OworICAgICAgICAgICAgbV9pbmxpbmVCb3hSZWN0TWFwLnNldCgmbGF5b3V0Qm94LCBtYWtlVW5p
cXVlPElubGluZUJveD4oaW5saW5lQm94UmVjdCwgYmFzZWxpbmUsIGxvZ2ljYWxIZWlnaHQgLSBi
YXNlbGluZSwgSW5saW5lQm94OjpJc0NvbnNpZGVyZWRFbXB0eTo6WWVzKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKKyAgICAgICAgICAgIC8vIEFkanVzdCB0
aGUgbG9naWNhbCB3aWR0aCB3aGVuIHRoZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyIGNsb3NlcyBv
biB0aGlzIGxpbmUuCisgICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSAqbV9pbmxpbmVCb3hS
ZWN0TWFwLmdldCgmbGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2Fs
V2lkdGgocnVuLmxvZ2ljYWxSaWdodCgpIC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOworICAg
ICAgICB9IGVsc2UgaWYgKChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpKSB7Cisg
ICAgICAgICAgICBhdXRvJiBjb250YWluZXJCb3ggPSBydW4ubGF5b3V0Qm94KCkucGFyZW50KCk7
CisgICAgICAgICAgICAmY29udGFpbmVyQm94ID09ICZyb290KCkgPyBtX3Jvb3RJbmxpbmVCb3gu
c2V0SXNOb25FbXB0eSgpIDogbV9pbmxpbmVCb3hSZWN0TWFwLmdldCgmY29udGFpbmVyQm94KS0+
c2V0SXNOb25FbXB0eSgpOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8mIGlubGluZUJveFJlY3Qg
PSBpbmxpbmVCb3gucmVjdDsKLSAgICAgICAgaW5saW5lQm94UmVjdC5zZXRUb3AobG9naWNhbFRv
cCk7Ci0gICAgICAgIC8vIEFkanVzdCBzY3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBydW4gb3Zl
cmZsb3dzIHRoZSBsaW5lLgotICAgICAgICBtX3Njcm9sbGFibGVPdmVyZmxvdy5leHBhbmRWZXJ0
aWNhbGx5VG9Db250YWluKGlubGluZUJveFJlY3QpOwotICAgICAgICAvLyBDb252ZXJ0IHJ1bnMg
ZnJvbSByZWxhdGl2ZSB0byB0aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290
J3MgYm9yZGVyIGJveCB0b3AvbGVmdC4KLSAgICAgICAgaW5saW5lQm94UmVjdC5tb3ZlVmVydGlj
YWxseSh0aGlzLT5sb2dpY2FsVG9wKCkpOwotICAgICAgICBpbmxpbmVCb3hSZWN0Lm1vdmVIb3Jp
em9udGFsbHkobG9naWNhbExlZnQoKSk7CiAgICAgfQogfQogCi12b2lkIExpbmVCb3g6OmFkanVz
dEJhc2VsaW5lQW5kTGluZUhlaWdodCgpCit2b2lkIExpbmVCb3g6OmFsaWduVmVydGljYWxseShJ
c0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5RW1wdHkpCiB7Ci0gICAgdW5zaWduZWQg
aW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKLSAgICBhdXRvIGhhc1NlZW5EaXJlY3RU
ZXh0T3JMaW5lQnJlYWsgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgbV9pbmxpbmVCb3hMaXN0LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvJiBpbmxp
bmVCb3ggPSBtX2lubGluZUJveExpc3RbaW5kZXhdOwotICAgICAgICBhdXRvJiBsYXlvdXRCb3gg
PSBpbmxpbmVCb3gubGF5b3V0Qm94OwotICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5z
dHlsZSgpOwotICAgICAgICBhdXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOwotICAgICAgICBpZiAo
cnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICAvLyBGb3Ig
dGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUgZWl0aGVyIHRocm91Z2ggdGhlIGluaXRp
YWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBjb250ZXh0IHJvb3QpIG9yCi0gICAgICAg
ICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFpbmVyIChzdGFydCkuIE5vcm1hbGx5IHRo
ZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0cmV0Y2ggdGhlIGxpbmUuCi0gICAgICAg
ICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3Vn
aCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5l
QnJlYWspIHsKLSAgICAgICAgICAgICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3Ig
PGRpdj48c3Bhbj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICBpZiAoaXNMaW5lVmlzdWFsbHlFbXB0eSA9PSBJc0xpbmVW
aXN1YWxseUVtcHR5OjpZZXMpCisgICAgICAgIHJldHVybjsKKyAgICAvLyAxLiBDb21wdXRlIGxp
bmUgYm94IGhlaWdodC9hbGlnbm1lbnQgYmFzZWxpbmUgYnkgcGxhY2luZyB0aGUgaW5saW5lIGJv
eGVzIHZlcnRpY2FsbHkuCisgICAgLy8gMi4gQWRqdXN0IHRoZSBpbmxpbmUgYm94IHZlcnRpY2Fs
IHBvc2l0aW9uLgorICAgIGF1dG8mIHJvb3RTdHlsZSA9IHJvb3QoKS5zdHlsZSgpOworICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbGV0IGxpbmUgYm94IGZ1bGx5IGNvbnRhaW4gdGhlIGlubGluZSBi
b3hlcyBhbmQgbW92ZSBsaW5lIHNwYWNpbmcvb3ZlcmZsb3cgb3V0IHRvIERpc3BsYXk6OkxpbmVC
b3guCisgICAgLy8gc2VlIHdlYmtpdC5vcmcvYi8yMTUwODcjYzkKKyAgICBJbmxpbmVMYXlvdXRV
bml0IHJlY29tbWVuZGVkTGluZUJveEhlaWdodCA9IHJvb3RTdHlsZS5saW5lSGVpZ2h0KCkuaXNO
ZWdhdGl2ZSgpID8gcm9vdFN0eWxlLmZvbnRNZXRyaWNzKCkubGluZVNwYWNpbmcoKSA6IHJvb3RT
dHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKTsKKworICAgIGF1dG8gY29udGVudExvZ2ljYWxIZWln
aHQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICBhdXRvIGFsaWdubWVudEJhc2VsaW5lID0g
SW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgYXV0byBjb21wdXRlTGluZUJveEhlaWdodCA9IFsm
XShhdXRvJiBpbmxpbmVCb3gsIGF1dG8gdGV4dEFsaWduTW9kZSkgeworICAgICAgICBzd2l0Y2gg
KHRleHRBbGlnbk1vZGUpIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTog
eworICAgICAgICAgICAgYXV0byBiYXNlbGluZU92ZXJmbG93ID0gaW5saW5lQm94LmJhc2VsaW5l
KCkgLSBhbGlnbm1lbnRCYXNlbGluZTsKKyAgICAgICAgICAgIGlmIChiYXNlbGluZU92ZXJmbG93
ID4gMCkgeworICAgICAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ICs9IGJhc2VsaW5l
T3ZlcmZsb3c7CisgICAgICAgICAgICAgICAgYWxpZ25tZW50QmFzZWxpbmUgKz0gYmFzZWxpbmVP
dmVyZmxvdzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JM
aW5lQnJlYWsgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVD
b250YWluZXJOZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBz
dHJldGNoIHRoZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRp
Y2FsIG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhl
IGxpbmUgaGVpZ2h0LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250
TWV0cmljcygpOwotICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0
aWNhbEFsaWduOjpCYXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcg
PSBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVk
TGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2Vu
dCBhbmQgZGVzY2VudCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5l
LWhlaWdodCB2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+
IDApCi0gICAgICAgICAgICAgICAgICAgIHNldERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcu
ZGVzY2VudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmFzY2VudCA+IDApCi0g
ICAgICAgICAgICAgICAgICAgIHNldEFzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5hc2NlbnQp
OwotICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoYXNjZW50QW5kRGVz
Y2VudCgpLmhlaWdodCgpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNl
dExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAvLyBUYWJsZSBjZWxscywgaW5saW5lLWJsb2NrIGJv
eGVzIG1heSBzdHJldGNoIHRoZSBsaW5lIGJleW9uZCB0aGVpciBiYXNlbGluZS4KKyAgICAgICAg
ICAgIGF1dG8gYmVsb3dCYXNlbGluZSA9IGlubGluZUJveC5kZXNjZW50KCkudmFsdWVPcihpbmxp
bmVCb3gubG9naWNhbEhlaWdodCgpIC0gaW5saW5lQm94LmJhc2VsaW5lKCkpOworICAgICAgICAg
ICAgYXV0byBiZWxvd0Jhc2VsaW5lT3ZlcmZsb3cgPSBiZWxvd0Jhc2VsaW5lIC0gKGNvbnRlbnRM
b2dpY2FsSGVpZ2h0IC0gYWxpZ25tZW50QmFzZWxpbmUpOworICAgICAgICAgICAgaWYgKGJlbG93
QmFzZWxpbmVPdmVyZmxvdyA+IDApCisgICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxIZWln
aHQgKz0gYmVsb3dCYXNlbGluZU92ZXJmbG93OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLQotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKLSAgICAgICAgICAgIC8v
IFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZlIGFscmVhZHkgYmVlbiBhZGp1c3Rl
ZCBhdCBDb250YWluZXJTdGFydC4KLSAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDb250YWluZXJO
ZXN0aW5nTGV2ZWwpOwotICAgICAgICAgICAgLS1pbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7
Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6
IHsKKyAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSBpbmxpbmVCb3gubG9naWNhbEhlaWdodCgp
IC0gY29udGVudExvZ2ljYWxIZWlnaHQ7CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cgPiAwKQor
ICAgICAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ICs9IG92ZXJmbG93OworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQm94KCkpIHsKLSAg
ICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3hIZWlnaHQgPSBi
b3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLQotICAgICAgICAgICAgc3dpdGNoIChzdHls
ZS52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFz
ZWxpbmU6IHsKLSAgICAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3go
KSAmJiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIElubGluZS1ibG9ja3Mgd2l0aCBpbmxpbmUgY29udGVudCBh
bHdheXMgaGF2ZSBiYXNlbGluZXMuCi0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRp
bmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUo
ZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5
LgotICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZUJveCA9IGZvcm1hdHRpbmdTdGF0
ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpOwotICAgICAgICAgICAg
ICAgICAgICBhdXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsg
Ym94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVP
cigwKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIo
YmVmb3JlSGVpZ2h0ICsgbGFzdExpbmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBOb24gaW5saW5lLWJsb2Nr
IGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUgKGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFyZ2lu
KS4KLSAgICAgICAgICAgICAgICAgICAgc2V0QXNjZW50SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdo
dCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBuZWdhdGl2ZSBkZXNjZW50ICh5ZXMs
IG5lZ2F0aXZlIGRlc2NlbnQgaXMgYSB0aGluZykuCi0gICAgICAgICAgICAgICAgICAgIHNldExv
Z2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0ICsgc3RkOjptYXg8SW5saW5lTGF5
b3V0VW5pdD4oMCwgYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29u
dGVudCBuZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRv
bSBvZiB0aGUgbGluZSBmdXJ0aGVyIGRvd24uCi0gICAgICAgICAgICAgICAgc2V0TG9naWNhbEhl
aWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsKLSAgICAgICAgICAgICAg
ICAvLyBCb3R0b20gYWxpZ25lZCwgdGFsbCBjb250ZW50IHB1c2hlcyB0aGUgYmFzZWxpbmUgZnVy
dGhlciBkb3duIGZyb20gdGhlIGxpbmUgdG9wLgotICAgICAgICAgICAgICAgIGF1dG8gbGluZUxv
Z2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmdp
bkJveEhlaWdodCA+IGxpbmVMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNl
dExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYWxpZ25tZW50QmFzZWxpbmUoKSAr
IChtYXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpC
b3R0b206IHsKKyAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSBpbmxpbmVCb3gubG9naWNhbEhl
aWdodCgpIC0gY29udGVudExvZ2ljYWxIZWlnaHQ7CisgICAgICAgICAgICBpZiAob3ZlcmZsb3cg
PiAwKSB7CisgICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxIZWlnaHQgKz0gb3ZlcmZsb3c7
CisgICAgICAgICAgICAgICAgYWxpZ25tZW50QmFzZWxpbmUgKz0gb3ZlcmZsb3c7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
SU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byBzaG91
bGRSb290SW5saW5lQm94U3RyZXRjaExpbmVCb3ggPSAhbV9yb290SW5saW5lQm94LmlzRW1wdHko
KTsKKyAgICBpZiAoc2hvdWxkUm9vdElubGluZUJveFN0cmV0Y2hMaW5lQm94KQorICAgICAgICBj
b21wdXRlTGluZUJveEhlaWdodChtX3Jvb3RJbmxpbmVCb3gsIFZlcnRpY2FsQWxpZ246OkJhc2Vs
aW5lKTsKKyAgICBmb3IgKGF1dG8mIGlubGluZUJveEVudHJ5IDogbV9pbmxpbmVCb3hSZWN0TWFw
KSB7CisgICAgICAgIGF1dG8mIGlubGluZUJveCA9ICppbmxpbmVCb3hFbnRyeS52YWx1ZTsKKyAg
ICAgICAgYXV0byBzaG91bGRJbmxpbmVCb3hTdHJldGNoTGluZUJveCA9ICFpbmxpbmVCb3guaXNF
bXB0eSgpOworICAgICAgICBpZiAoc2hvdWxkSW5saW5lQm94U3RyZXRjaExpbmVCb3gpCisgICAg
ICAgICAgICBjb21wdXRlTGluZUJveEhlaWdodChpbmxpbmVCb3gsIGlubGluZUJveEVudHJ5Lmtl
eS0+c3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkpOwogICAgIH0KLX0KIAotSGFuZ2luZ0NvbnRlbnQg
TGluZUJveDo6Y29sbGVjdEhhbmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgYXV0byBoYW5naW5n
Q29udGVudCA9IEhhbmdpbmdDb250ZW50IHsgfTsKLSAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50ID09IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICBo
YW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBX
VEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRh
aW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBoYW5naW5n
Q29udGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKKyAgICBhdXRv
IGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gcm9vdFN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZl
KCkgPyBzdGQ6Om1heChyZWNvbW1lbmRlZExpbmVCb3hIZWlnaHQsIGNvbnRlbnRMb2dpY2FsSGVp
Z2h0KSA6IHJlY29tbWVuZGVkTGluZUJveEhlaWdodDsKKyAgICBtX3JlY3Quc2V0SGVpZ2h0KGxp
bmVCb3hMb2dpY2FsSGVpZ2h0KTsKKworICAgIGF1dG8gYWRqdXN0SW5saW5lQm94VG9wID0gWyZd
KGF1dG8mIGlubGluZUJveCwgYXV0byB0ZXh0QWxpZ25Nb2RlKSB7CisgICAgICAgIGF1dG8gaW5s
aW5lQm94TG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBzd2l0Y2gg
KHRleHRBbGlnbk1vZGUpIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZToK
KyAgICAgICAgICAgIGlubGluZUJveExvZ2ljYWxUb3AgPSBhbGlnbm1lbnRCYXNlbGluZSAtIGlu
bGluZUJveC5iYXNlbGluZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIENoZWNr
IGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNwYWNlLgotICAgICAgICBpZiAo
cnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCisgICAgICAg
IGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAgICAgICAgICAgaW5saW5lQm94TG9naWNhbFRv
cCA9IHsgfTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBUaGlzIGlzIGVpdGhlciBh
IG5vcm1hbCBvciBjb25kaXRpb25hbGx5IGhhbmdpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAg
ICAgICAgaGFuZ2luZ0NvbnRlbnQuZXhwYW5kKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgp
KTsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206CisgICAgICAgICAgICBpbmxp
bmVCb3hMb2dpY2FsVG9wID0gbG9naWNhbEJvdHRvbSgpIC0gaW5saW5lQm94LmxvZ2ljYWxIZWln
aHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2FsVG9wKGlubGluZUJveExvZ2ljYWxUb3Ap
OworICAgIH07CisKKyAgICBhbGlnbm1lbnRCYXNlbGluZSA9IGhhbGZMZWFkaW5nTWV0cmljcyhy
b290U3R5bGUuZm9udE1ldHJpY3MoKSwgbGluZUJveExvZ2ljYWxIZWlnaHQpLmFzY2VudDsKKyAg
ICBhZGp1c3RJbmxpbmVCb3hUb3AobV9yb290SW5saW5lQm94LCBWZXJ0aWNhbEFsaWduOjpCYXNl
bGluZSk7CisgICAgZm9yIChhdXRvJiBpbmxpbmVCb3hFbnRyeSA6IG1faW5saW5lQm94UmVjdE1h
cCkgeworICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSAqaW5saW5lQm94RW50cnkua2V5OworICAg
ICAgICBhdXRvJiBpbmxpbmVCb3ggPSAqaW5saW5lQm94RW50cnkudmFsdWU7CisgICAgICAgIGFk
anVzdElubGluZUJveFRvcChpbmxpbmVCb3gsIGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxp
Z24oKSk7CiAgICAgfQotICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJv
eC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJv
eC5oCmluZGV4IDg5MWM3MzI1MmY4MzVlNGZlZmU0Mjk1YjVkODQ2NmJkZmI2NmIxOTQuLjYwOTkw
YTcwNzczNjk5MmMzNTliMDcxNGMyOWEzYzg1OTA1YTYxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKQEAgLTMw
LDM0ICszMCw1MiBAQAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNsdWRlICJEaXNwbGF5
SW5saW5lUmVjdC5oIgogI2luY2x1ZGUgIklubGluZUxpbmVCdWlsZGVyLmgiCisjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNl
IExheW91dCB7CiAKIGNsYXNzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Owotc3RydWN0IEhhbmdp
bmdDb250ZW50OwotCi1zdHJ1Y3QgQXNjZW50QW5kRGVzY2VudCB7Ci0gICAgSW5saW5lTGF5b3V0
VW5pdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBhc2NlbnQgKyBkZXNjZW50OyB9Ci0KLSAgICBJ
bmxpbmVMYXlvdXRVbml0IGFzY2VudCB7IDAgfTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2Nl
bnQgeyAwIH07Ci19OwogCiBjbGFzcyBMaW5lQm94IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgSW5saW5lQm94IHsKLSAgICAgICAgSW5saW5lQm94
KGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmLCBjb25zdCBBc2NlbnRBbmREZXNjZW50JiwgY29u
c3QgQm94Jik7Ci0KLSAgICAgICAgRGlzcGxheTo6SW5saW5lUmVjdCByZWN0OwotICAgICAgICBB
c2NlbnRBbmREZXNjZW50IGFzY2VudEFuZERlc2NlbnQ7Ci0gICAgICAgIGNvbnN0IEJveCYgbGF5
b3V0Qm94OworICAgICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lOTElORShJbmxpbmVCb3gp
OworICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBjbGFzcyBJc0NvbnNpZGVyZWRFbXB0eSB7IFll
cywgTm8gfTsKKyAgICAgICAgSW5saW5lQm94KGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmLCBJ
bmxpbmVMYXlvdXRVbml0IHN5bnRoZXRpY0Jhc2VsaW5lKTsKKyAgICAgICAgSW5saW5lQm94KGNv
bnN0IERpc3BsYXk6OklubGluZVJlY3QmLCBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lLCBJbmxp
bmVMYXlvdXRVbml0IGRlc2NlbnQsIElzQ29uc2lkZXJlZEVtcHR5KTsKKyAgICAgICAgSW5saW5l
Qm94KCkgPSBkZWZhdWx0OworCisgICAgICAgIGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIGxv
Z2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdDsgfQorICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRv
cCgpOyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9naWNhbFJlY3QuYm90dG9tKCk7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QubGVmdCgpOyB9Cisg
ICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9s
b2dpY2FsUmVjdC53aWR0aCgpOyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QuaGVpZ2h0KCk7IH0KKworICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IGJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlbGluZTsg
fQorICAgICAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBkZXNjZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXNjZW50OyB9CisKKyAgICAgICAgdm9pZCBzZXRMb2dpY2FsVG9wKElubGluZUxh
eW91dFVuaXQgbG9naWNhbFRvcCkgeyBtX2xvZ2ljYWxSZWN0LnNldFRvcChsb2dpY2FsVG9wKTsg
fQorICAgICAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCkgeyBtX2xvZ2ljYWxSZWN0LnNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7IH0KKworICAgICAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2lzRW1wdHk7IH0KKyAgICAgICAgdm9p
ZCBzZXRJc05vbkVtcHR5KCkgeyBtX2lzRW1wdHkgPSBmYWxzZTsgfQorICAgICAgICBib29sIGlz
QXRvbWljKCkgY29uc3QgeyByZXR1cm4gbV9pc0F0b21pYzsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBtX2xvZ2ljYWxSZWN0OworICAgICAgICBJbmxpbmVM
YXlvdXRVbml0IG1fYmFzZWxpbmU7CisgICAgICAgIE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+
IG1fZGVzY2VudDsKKyAgICAgICAgYm9vbCBtX2lzRW1wdHkgeyB0cnVlIH07CisgICAgICAgIGJv
b2wgbV9pc0F0b21pYyB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIGVudW0gY2xhc3MgSXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50IHsgTm8sIFllcyB9OwogICAgIGVudW0gY2xhc3MgSXNMaW5l
VmlzdWFsbHlFbXB0eSB7IE5vLCBZZXMgfTsKLSAgICBMaW5lQm94KGNvbnN0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0JiwgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYsIGNvbnN0IExpbmVCdWls
ZGVyOjpSdW5MaXN0JiwgSXNMaW5lVmlzdWFsbHlFbXB0eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KTsKKyAgICBMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgY29u
c3QgSW5saW5lTGF5b3V0UG9pbnQmIHRvcExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGNvbnN0IExpbmVCdWls
ZGVyOjpSdW5MaXN0JiwgSXNMaW5lVmlzdWFsbHlFbXB0eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KTsKIAogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3QubGVmdCgpOyB9CiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JlY3QucmlnaHQoKTsgfQpAQCAtNjksMTE0ICs4Nyw0NyBAQCBw
dWJsaWM6CiAgICAgY29uc3QgRGlzcGxheTo6SW5saW5lUmVjdCYgbG9naWNhbFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiBzY3Jv
bGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVPdmVyZmxvdzsgfQog
Ci0gICAgc3RhdGljIEFzY2VudEFuZERlc2NlbnQgaGFsZkxlYWRpbmdNZXRyaWNzKGNvbnN0IEZv
bnRNZXRyaWNzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCk7Ci0KLSAgICAv
LyBBbGlnbWVudCBiYXNlbGluZSBmcm9tIGxpbmUgbG9naWNhbCB0b3AuCi0gICAgLy8KLSAgICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tICAgIGxpbmUgbG9naWNhbCB0b3AgICAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0gKHRvcCBhbGlnbikKLSAgICAvLyAgICAgICAgICAgICBeICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLSAgICAvLyAgICAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIHwKLSAgICAvLyAgIF4g
ICAgICAgICB8IGFsaWdubWVudCBiYXNlbGluZSAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwg
YWxpZ25tZW50IGJhc2VsaW5lCi0gICAgLy8gICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8Ci0gICAgLy8gICB8IGFzY2VudCAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFzY2VudCAgICB8Ci0gICAgLy8gICB8ICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgICB2Ci0g
ICAgLy8gICB2ICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tIGJhc2VsaW5lCi0gICAgLy8gICAtLS0tLS0tLS0tLS0tLS0tLSBiYXNlbGlu
ZSAgICAgICAgICAgICAgICAgICBeCi0gICAgLy8gICBeICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IGRlc2NlbnQKLSAgICAvLyAgIHwgZGVzY2VudCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICBjb25zdCBJbmxpbmVCb3gmIGlubGlu
ZUJveEZvckxheW91dEJveChjb25zdCBCb3gmKSBjb25zdDsKKyAgICBEaXNwbGF5OjpJbmxpbmVS
ZWN0IGlubGluZVJlY3RGb3JUZXh0UnVuKGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mKSBjb25zdDsK
KworICAgIC8vIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fIGxpbmUgYm94IGxvZ2ljYWwgdG9wCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
XgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgIF9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXyByb290IGlubGluZSBib3gKKyAgICAvLyAgIF4gICAgICAg
ICAgICAgICAgICB8CisgICAgLy8gICB8ICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgfCBy
b290IGxpbmUgYXNjZW50IHwKKyAgICAvLyAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgLy8g
ICB2ICAgICAgICAgICAgICAgICAgdgorICAgIC8vICAgX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fIGFsaWdubWVudCBiYXNlbGluZQorICAgIC8vICAg
XgorICAgIC8vICAgfCByb290IGxpbmUgZGVzY2VudAogICAgIC8vICAgdgotICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0gICAgbGluZSBsb2dpY2FsIGJvdHRvbSAgLS0tLS0tLS0tLS0tLS0tLS0t
LQotICAgIElubGluZUxheW91dFVuaXQgYWxpZ25tZW50QmFzZWxpbmUoKSBjb25zdDsKLQotICAg
IGNvbnN0IERpc3BsYXk6OklubGluZVJlY3QmIHJlY3RGb3JSdW4oY29uc3QgTGluZUJ1aWxkZXI6
OlJ1biYgcnVuKSBjb25zdCB7IHJldHVybiBtX2lubGluZUJveExpc3RbbV9ydW5Ub0lubGluZUJv
eE1hcC5nZXQoJnJ1bildLnJlY3Q7IH0KKyAgICAvLyAgIF9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCisgICAgLy8gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18gbGluZSBib3ggbG9naWNhbCBib3R0b20KKyAgICBJbmxpbmVMYXlv
dXRVbml0IGFsaWdubWVudEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94
LmxvZ2ljYWxUb3AoKSArIG1fcm9vdElubGluZUJveC5iYXNlbGluZSgpOyB9CiAKIHByaXZhdGU6
Ci0gICAgY29uc3QgQXNjZW50QW5kRGVzY2VudCYgYXNjZW50QW5kRGVzY2VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50OyB9Ci0KLSAgICB2b2lkIHNl
dEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwotICAgIHZvaWQg
c2V0QXNjZW50SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQpOwotICAgIHZvaWQgc2V0RGVzY2Vu
dElmR3JlYXRlcihJbmxpbmVMYXlvdXRVbml0KTsKLSAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHRJ
ZkdyZWF0ZXIoSW5saW5lTGF5b3V0VW5pdCk7Ci0KLSAgICB2b2lkIHNldFNjcm9sbGFibGVPdmVy
Zmxvdyhjb25zdCBEaXNwbGF5OjpJbmxpbmVSZWN0JiByZWN0KSB7IG1fc2Nyb2xsYWJsZU92ZXJm
bG93ID0gcmVjdDsgfQorICAgIHZvaWQgY29uc3RydWN0SW5saW5lQm94ZXMoY29uc3QgTGluZUJ1
aWxkZXI6OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5KTsKKyAgICB2b2lkIGFsaWduVmVy
dGljYWxseShJc0xpbmVWaXN1YWxseUVtcHR5KTsKIAotICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFs
bHkoSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCwgSXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KTsKLSAgICB2b2lkIGFsaWduVmVydGljYWxseSgpOwotICAgIHZvaWQgYWRqdXN0QmFz
ZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0gICAgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhhbmdpbmdD
b250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7CisgICAgSW5saW5lTGF5
b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TG9n
aWNhbFdpZHRoOyB9CiAKICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0
dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9
CisgICAgY29uc3QgQm94JiByb290KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQo
KS5yb290KCk7IH0KICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVy
biBmb3JtYXR0aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KIAogcHJpdmF0ZToKLSNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV9oYXNWYWxpZEFsaWdubWVudEJhc2VsaW5lIHsgZmFs
c2UgfTsKLSNlbmRpZgotICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OwotICAgIGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1
bnM7CiAgICAgRGlzcGxheTo6SW5saW5lUmVjdCBtX3JlY3Q7CiAgICAgRGlzcGxheTo6SW5saW5l
UmVjdCBtX3Njcm9sbGFibGVPdmVyZmxvdzsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fYWxpZ25t
ZW50QmFzZWxpbmUgeyAwIH07Ci0gICAgSW5saW5lQm94IG1fcm9vdElubGluZUJveDsKLSAgICBW
ZWN0b3I8SW5saW5lQm94PiBtX2lubGluZUJveExpc3Q7Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMg
dGVtcG9yYXJ5IGFuZCB3aWxsIGJlIHJlcGxhY2VkIGJ5IGFuIGlubGluZSBib3ggbWFwLgotICAg
IEhhc2hNYXA8Y29uc3QgTGluZUJ1aWxkZXI6OlJ1biosIHNpemVfdD4gbV9ydW5Ub0lubGluZUJv
eE1hcDsKLX07CisgICAgSW5saW5lTGF5b3V0VW5pdCBtX2NvbnRlbnRMb2dpY2FsV2lkdGggeyAw
IH07CiAKLWlubGluZSBMaW5lQm94OjpJbmxpbmVCb3g6OklubGluZUJveChjb25zdCBEaXNwbGF5
OjpJbmxpbmVSZWN0JiByZWN0LCBjb25zdCBBc2NlbnRBbmREZXNjZW50JiBhc2NlbnRBbmREZXNj
ZW50LCBjb25zdCBCb3gmIGxheW91dEJveCkKLSAgICA6IHJlY3QocmVjdCkKLSAgICAsIGFzY2Vu
dEFuZERlc2NlbnQoYXNjZW50QW5kRGVzY2VudCkKLSAgICAsIGxheW91dEJveChsYXlvdXRCb3gp
Ci17Ci19Ci0KLWlubGluZSB2b2lkIExpbmVCb3g6OnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIo
SW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KQotewotICAgIGlmIChsb2dpY2FsSGVpZ2h0
IDw9IG1fcmVjdC5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVjdC5zZXRIZWln
aHQobG9naWNhbEhlaWdodCk7Ci19Ci0KLWlubGluZSB2b2lkIExpbmVCb3g6OnNldEFsaWdubWVu
dEJhc2VsaW5lSWZHcmVhdGVyKElubGluZUxheW91dFVuaXQgYWxpZ25tZW50QmFzZWxpbmUpCi17
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2hhc1ZhbGlkQWxpZ25tZW50QmFzZWxpbmUgPSB0
cnVlOwotI2VuZGlmCi0gICAgbV9hbGlnbm1lbnRCYXNlbGluZSA9IHN0ZDo6bWF4KGFsaWdubWVu
dEJhc2VsaW5lLCBtX2FsaWdubWVudEJhc2VsaW5lKTsKLX0KLQotaW5saW5lIHZvaWQgTGluZUJv
eDo6c2V0QXNjZW50SWZHcmVhdGVyKElubGluZUxheW91dFVuaXQgYXNjZW50KQotewotICAgIGlm
IChhc2NlbnQgPCBtX3Jvb3RJbmxpbmVCb3guYXNjZW50QW5kRGVzY2VudC5hc2NlbnQpCi0gICAg
ICAgIHJldHVybjsKLSAgICBzZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihhc2NlbnQpOwot
ICAgIG1fcm9vdElubGluZUJveC5hc2NlbnRBbmREZXNjZW50LmFzY2VudCA9IGFzY2VudDsKLX0K
LQotaW5saW5lIHZvaWQgTGluZUJveDo6c2V0RGVzY2VudElmR3JlYXRlcihJbmxpbmVMYXlvdXRV
bml0IGRlc2NlbnQpCi17Ci0gICAgaWYgKGRlc2NlbnQgPCBtX3Jvb3RJbmxpbmVCb3guYXNjZW50
QW5kRGVzY2VudC5kZXNjZW50KQotICAgICAgICByZXR1cm47Ci0gICAgbV9yb290SW5saW5lQm94
LmFzY2VudEFuZERlc2NlbnQuZGVzY2VudCA9IGRlc2NlbnQ7Ci19Ci0KLWlubGluZSBJbmxpbmVM
YXlvdXRVbml0IExpbmVCb3g6OmFsaWdubWVudEJhc2VsaW5lKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQobV9oYXNWYWxpZEFsaWdubWVudEJhc2VsaW5lKTsKLSAgICByZXR1cm4gbV9hbGlnbm1lbnRC
YXNlbGluZTsKLX0KKyAgICBJbmxpbmVCb3ggbV9yb290SW5saW5lQm94OwogCi1pbmxpbmUgQXNj
ZW50QW5kRGVzY2VudCBMaW5lQm94OjpoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJp
Y3MmIGZvbnRNZXRyaWNzLCBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQotewot
ICAgIGF1dG8gYXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50KCk7Ci0gICAgYXV0byBkZXNjZW50
ID0gZm9udE1ldHJpY3MuZGVzY2VudCgpOwotICAgIC8vIDEwLjguMSBMZWFkaW5nIGFuZCBoYWxm
LWxlYWRpbmcKLSAgICBhdXRvIGhhbGZMZWFkaW5nID0gKGxpbmVMb2dpY2FsSGVpZ2h0IC0gKGFz
Y2VudCArIGRlc2NlbnQpKSAvIDI7Ci0gICAgLy8gSW5saW5lIHRyZWUgaGVpZ2h0IGlzIGFsbCBp
bnRlZ2VyIGJhc2VkLgotICAgIGF1dG8gYWRqdXN0ZWRBc2NlbnQgPSBzdGQ6Om1heDxJbmxpbmVM
YXlvdXRVbml0PihmbG9vcmYoYXNjZW50ICsgaGFsZkxlYWRpbmcpLCAwKTsKLSAgICBhdXRvIGFk
anVzdGVkRGVzY2VudCA9IHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGNlaWxmKGRlc2NlbnQg
KyBoYWxmTGVhZGluZyksIDApOwotICAgIHJldHVybiB7IGFkanVzdGVkQXNjZW50LCBhZGp1c3Rl
ZERlc2NlbnQgfTsKLX0KKyAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBtX2xpbmVBbGln
bm1lbnRPZmZzZXQ7CisgICAgSGFzaE1hcDxjb25zdCBCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8SW5s
aW5lQm94Pj4gbV9pbmxpbmVCb3hSZWN0TWFwOworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdD
b250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworfTsKIAogfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJ1aWxkZXIuY3BwCmluZGV4IDk1YTQ3NDMwYjViNjdlNmNhYzVkZGZhNTM5NmNhMTAyNzYzNWNh
ZTkuLjVmYWYzNmJiNDUzNzhkNDllZTk1YTAwMDk2MTMyMmRkZDhmYTk5NDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnVpbGRlci5jcHAKQEAgLTExMCwxMCArMTEwLDE4IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmNs
b3NlKGJvb2wgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQogICAgICAgICBpZiAoZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudCAmJiBhdmFpbGFibGVXaWR0aCgpKSB7CiAgICAgICAgICAgICAv
LyBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZS4KICAgICAgICAgICAgIGF1dG8gZXhwYW5zaW9u
VG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGgoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQ7CisgICAgICAgICAgICBhdXRvIGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gSW5saW5lTGF5b3V0
VW5pdCB7IH07CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgewotICAgICAg
ICAgICAgICAgIC8vIEV4cGFuZCBhbmQgbW92ZXMgcnVucyBieSB0aGUgYWNjdW11bGF0ZWQgZXhw
YW5zaW9uLgotICAgICAgICAgICAgICAgIGlmIChydW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHko
KSkKLSAgICAgICAgICAgICAgICAgICAgcnVuLnNldEhvcml6b250YWxFeHBhbnNpb24oZXhwYW5z
aW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSk7CisgICAg
ICAgICAgICAgICAgLy8gRXhwYW5kIGFuZCBtb3ZlIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4
cGFuc2lvbi4KKyAgICAgICAgICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRl
ZEV4cGFuc2lvbik7CisgICAgICAgICAgICAgICAgaWYgKCFydW4uaGFzRXhwYW5zaW9uT3Bwb3J0
dW5pdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
QVNTRVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOworICAgICAgICAgICAgICAg
IGF1dG8gY29tcHV0ZWRFeHBhbnNpb24gPSBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgKiBydW4uZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVj
ayB3aHkgd2UgbmVlZCB0byBzZXQgYm90aC4KKyAgICAgICAgICAgICAgICBydW4uc2V0SG9yaXpv
bnRhbEV4cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7CisgICAgICAgICAgICAgICAgcnVuLnNo
cmlua0hvcml6b250YWxseSgtY29tcHV0ZWRFeHBhbnNpb24pOworICAgICAgICAgICAgICAgIGFj
Y3VtdWxhdGVkRXhwYW5zaW9uICs9IGNvbXB1dGVkRXhwYW5zaW9uOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4IDZmMTU4YmEzMWIxYTAx
YzA5NTVmY2QzYWFiOWFjNDc2YWZkZTU0ODQuLjRiYTYxY2ZkNDU4NDE0OGVhNjg3MWJmOTBiMTE1
MWUwNjQxYmQ0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtNzcsNiArNzcsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX2xvZ2ljYWxXaWR0aDsgfQogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsTGVmdDsgfQorICAgICAgICBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxMZWZ0KCkgKyBsb2dp
Y2FsV2lkdGgoKTsgfQogCiAgICAgICAgIGNvbnN0IERpc3BsYXk6OlJ1bjo6RXhwYW5zaW9uJiBl
eHBhbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbjsgfQogICAgICAgICBib29sIGhh
c0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25PcHBvcnR1
bml0eUNvdW50OyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408188</attachid>
            <date>2020-09-07 11:28:10 -0700</date>
            <delta_ts>2020-09-07 11:54:29 -0700</delta_ts>
            <desc>Rebaseline patch</desc>
            <filename>Patch.txt</filename>
            <type>text/plain</type>
            <size>3286</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkOWJhZmRiZjhjYjcuLmEyNWExMGExODBkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDIwLTA5LTA3ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAg
VW5yZXZpZXdlZCByZWJhc2VsaW5pbmcuCisKKyAgICAgICAgVGhlIHRlc3Qgb3V0cHV0IChyZW5k
ZXIgdHJlZSBkdW1wKSBpcyBzZW5zaXRpdmUgdG8gZmxvYXQgcHJlY2lzaW9uLgorCisgICAgICAg
IHIyNjY1MDkgc2xpZ2h0bHkgY2hhbmdlZCB0aGUgd2F5IHdlIGNvbXB1dGUgdGhlIHJ1bidzIGhv
cml6b250YWwgcG9zaXRpb24KKyAgICAgICAgYW5kIGl0cyBuZXcgcG9zaXRpb24gaXMgMC4wMDAw
NjFweCBtb3JlIHRvIHRoZSByaWdodC4gVGhlIGludGVncmFsIGNlaWwgdGhhdCB3ZSBhcHBseQor
ICAgICAgICB0byB0aGUgcnVuJ3Mgd2lkdGggY29tcHV0YXRpb24gaW4gdGhlIGR1bXAtcmVuZGVy
LXRyZWUtYXMtdGV4dCBtYWtlcyB0aGUgZmluYWwgdmFsdWUgZ28gZnJvbSAzOXB4IHRvIDQwcHgu
CisgICAgICAgIChOb3RlIHRoYXQgZmluYWwgd2lkdGggdmFsdWUgaGFzIGRlcGVuZGVuY3kgb24g
dGhlIGhvcml6b250YWwgcG9zaXRvbi4pCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mtd2syL1Rl
c3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogcGxhdGZvcm0vaW9zL2NzczIuMS90MDkwNS1jNTUy
NS1mbHR3aWR0aC0wMC1jLWctZXhwZWN0ZWQudHh0OgorCiAyMDIwLTA5LTA3ICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICAqIHBsYXRmb3JtL21hYy13azIvVGVzdEV4
cGVjdGF0aW9uczogUmV2ZXJ0IGNoYW5nZSBJIGFjY2lkZW50YWxseSBpbmNsdWRlZCBpbiBteSBs
YXN0IHBhdGNoLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXdrMi9UZXN0
RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXdrMi9UZXN0RXhwZWN0YXRp
b25zCmluZGV4IDBmMTI2ZWI1MWJlZS4uZGY3OGQyZjIxYzdmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9pb3Mtd2syL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vaW9zLXdrMi9UZXN0RXhwZWN0YXRpb25zCkBAIC0xODczLDcgKzE4NzMsNSBAQCB3
ZWJraXQub3JnL2IvMjE2MTU2IGh0dHAvdGVzdHMvbWlzYy9zY3JpcHQtYXN5bmMuaHRtbCBbIFBh
c3MgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMTYxNTkgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tcmVzdGFydEljZS5odHRwcy5odG1s
IFsgUGFzcyBGYWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzIxNjE2MCBjc3MyLjEvdDA5MDUtYzU1
MjUtZmx0d2lkdGgtMDAtYy1nLmh0bWwgWyBGYWlsdXJlIF0KLQogd2Via2l0Lm9yZy9iLzIxNjE2
MiBbIERlYnVnIF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9lbmNvZGluZy90ZXh0
ZGVjb2Rlci1mYXRhbC1zaW5nbGUtYnl0ZS5hbnkud29ya2VyLmh0bWwgWyBQYXNzIFRpbWVvdXQg
XQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvY3NzMi4xL3QwOTA1LWM1
NTI1LWZsdHdpZHRoLTAwLWMtZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9p
b3MvY3NzMi4xL3QwOTA1LWM1NTI1LWZsdHdpZHRoLTAwLWMtZy1leHBlY3RlZC50eHQKaW5kZXgg
ZjA0ZWJlMmY5NDVkLi42Mzk4ZmI3NWQxNTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2lvcy9jc3MyLjEvdDA5MDUtYzU1MjUtZmx0d2lkdGgtMDAtYy1nLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvY3NzMi4xL3QwOTA1LWM1NTI1LWZsdHdpZHRo
LTAwLWMtZy1leHBlY3RlZC50eHQKQEAgLTQ2LDcgKzQ2LDcgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4ODUyCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDIzOCwzNDApIHdpZHRoIDE1NTogImln
bm9yZSB0aGlzIGZsb2F0IHRleHQiCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYwKSB3aWR0
aCAyNTc6ICJpZ25vcmUgdGhpcyBmbG9hdCB0ZXh0IGlnbm9yZSB0aGlzIGZsb2F0IgogICAgICAg
UmVuZGVyQmxvY2sge0RJVn0gYXQgKDAsMTUzKSBzaXplIDc4NHg1MjAgW2NvbG9yPSNDMEMwQzBd
Ci0gICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMzkyLDApIHNpemUgNzg0eDUxOQorICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDM5MiwwKSBzaXplIDc4NXg1MTkKICAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMzkyLDApIHdpZHRoIDM5MjogInRoaXMgaXMgc29tZSBkdW1teSB0ZXh0
IHRoaXMgaXMgc29tZSBkdW1teSB0ZXh0IHRoaXMgaXMiCiAgICAgICAgICAgdGV4dCBydW4gYXQg
KDM5MiwyMCkgd2lkdGggOTk6ICJzb21lIGR1bW15ICIKICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
NDkwLDIwKSB3aWR0aCAyOTQ6ICJ0ZXh0IHRoaXMgaXMgc29tZSBkdW1teSB0ZXh0IHRoaXMgaXMg
c29tZSIKQEAgLTc5LDcgKzc5LDcgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4ODUyCiAgICAg
ICAgICAgdGV4dCBydW4gYXQgKDM5MiwzNDApIHdpZHRoIDMwNDogImR1bW15IHRleHQgdGhpcyBp
cyBzb21lIGR1bW15IHRleHQgdGhpcyBpcyAiCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDY5NSwz
NDApIHdpZHRoIDg5OiAic29tZSBkdW1teSIKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMzkyLDM2
MCkgd2lkdGggMzU0OiAidGV4dCB0aGlzIGlzIHNvbWUgZHVtbXkgdGV4dCB0aGlzIGlzIHNvbWUg
ZHVtbXkgdGV4dCAiCi0gICAgICAgICAgdGV4dCBydW4gYXQgKDc0NSwzNjApIHdpZHRoIDM5OiAi
dGhpcyBpcyIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoNzQ1LDM2MCkgd2lkdGggNDA6ICJ0aGlz
IGlzIgogICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDM4MCkgd2lkdGggNDEyOiAic29tZSBkdW1t
eSB0ZXh0IHRoaXMgaXMgc29tZSBkdW1teSB0ZXh0IHRoaXMgaXMgc29tZSBkdW1teSAiCiAgICAg
ICAgICAgdGV4dCBydW4gYXQgKDQxMSwzODApIHdpZHRoIDM3MzogInRleHQgdGhpcyBpcyBzb21l
IGR1bW15IHRleHQgdGhpcyBpcyBzb21lIGR1bW15IHRleHQgdGhpcyIKICAgICAgICAgICB0ZXh0
IHJ1biBhdCAoMCw0MDApIHdpZHRoIDU0OiAiaXMgc29tZSAiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>