<?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>201365</bug_id>
          
          <creation_ts>2019-08-30 16:14:04 -0700</creation_ts>
          <short_desc>[LFC] Proxy LayoutState::displayBoxForLayoutBox() calls through FormattingContext</short_desc>
          <delta_ts>2019-08-30 19:38:04 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1566865</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-08-30 16:14:04 -0700</bug_when>
    <thetext>to be able to enforce limited display box access.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566866</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-30 16:14:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/54900815&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566879</commentid>
    <comment_count>2</comment_count>
      <attachid>377768</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-08-30 16:39:49 -0700</bug_when>
    <thetext>Created attachment 377768
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566882</commentid>
    <comment_count>3</comment_count>
      <attachid>377769</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-08-30 16:44:26 -0700</bug_when>
    <thetext>Created attachment 377769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566926</commentid>
    <comment_count>4</comment_count>
      <attachid>377769</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-30 19:38:02 -0700</bug_when>
    <thetext>Comment on attachment 377769
Patch

Clearing flags on attachment: 377769

Committed r249356: &lt;https://trac.webkit.org/changeset/249356&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566927</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-30 19:38:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377768</attachid>
            <date>2019-08-30 16:39:49 -0700</date>
            <delta_ts>2019-08-30 16:44:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201365-20190830163942.patch</filename>
            <type>text/plain</type>
            <size>81856</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTU0ZjM3YWE4M2ZhYWQ2
NDAxOTMxZWVmMTRlMDkxMmMwMGY0MzAzNy4uMDRiZjc3ZGZlYzliOGJkYzAzZjNlNjZhMjY1NDM3
YzNiNWVlZjUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDE5LTA4LTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gUHJveHkgTGF5b3V0
U3RhdGU6OmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKSBjYWxscyB0aHJvdWdoIEZvcm1hdHRpbmdD
b250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDEzNjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0OTAwODE1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgaW4gcHJlcGFy
YXRpb24gZm9yIGVuZm9yY2luZyBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCkgY2FsbHMgdG8gc3Rh
eSB3aXRoaW4gdGhlIGN1cnJlbnQgZm9ybWF0dGluZyBjb250ZXh0LgorICAgICAgICAoVGhlcmUg
YXJlIGEgZmV3IG9kZCBjYXNlcyBsZWZ0IChmbG9hdHMgYW5kIGNvb3JkaW5hdGUgbWFwcGluZykg
YW5kIHRoZXkgYXJlIGdvaW5nIHRvIGJlIGFkZHJlc3NlZCBpbiBhIHNlcGFyYXRlIHBhdGNoLikK
KworICAgICAgICAqIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRh
bEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OnZhbGlkYXRlR2VvbWV0cnlD
b25zdHJhaW50c0FmdGVyTGF5b3V0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGlu
Z0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
OmRpc3BsYXlCb3hGb3JMYXlvdXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6aGFzRGlzcGxheUJveCBjb25zdCk6CisgICAgICAgICogbGF5
b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0VmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1Zl
cnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBs
YWNlZFZlcnRpY2FsR2VvbWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRh
bEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9m
Rmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZEhlaWdo
dEFuZE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpoZWlnaHRWYWx1ZU9m
TmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodCk6CisgICAgICAgICogbGF5b3V0
L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6dXNlZEF2YWlsYWJsZVdpZHRo
Rm9yRmxvYXRBdm9pZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGlj
VmVydGljYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVk
VmVydGljYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVh
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVGbG9hdGluZ1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEZsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFu
ZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbiBjb25zdCk6
CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
aW5GbG93Tm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNh
bFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRp
bmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVp
Z2h0KToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFw
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYXNDbGVhcmFuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBz
ZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJlZm9yZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2luQWZ0
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aEZpcnN0SW5GbG93
Q2hpbGRNYXJnaW5CZWZvcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNX
aXRoU2libGluZ01hcmdpbkJlZm9yZVdpdGhDbGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFy
Z2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxkTWFyZ2luQWZ0ZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6dXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xs
YXBzZTo6cG9zaXRpdmVOZWdhdGl2ZVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjplc3RpbWF0ZWRNYXJnaW5C
ZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpNYXJnaW5Db2xsYXBzZTo6dXBkYXRlUG9zaXRpdmVOZWdhdGl2ZU1hcmdpblZhbHVlcyk6Cisg
ICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTWFyZ2luQm9yZGVy
QW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdG
b3JJbmxpbmVDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUhvcml6b250YWxNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5
b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9j
a0hlaWdodEFuZE1hcmdpbiBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6aW5saW5lSXRlbVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUxheW91dDo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lTGF5b3V0OjpMaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUxheW91dDo6cGxhY2VJbmxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6bGF5b3V0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGlu
ZUxheW91dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNyZWF0ZURp
c3BsYXlSdW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6
bGF5b3V0U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZURlc2NlbnRO
ZWVkc0NvbGxhcHNpbmcgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc0lubGluZUNvbnRh
aW5lckNvbnNpZGVyZWRFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6Omlz
VmlzdWFsbHlFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6YXBwZW5kTm9uUmVwbGFjZWRJ
bmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppbmxpbmVJdGVtQ29u
dGVudEhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJs
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVG
b3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFi
bGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRUYWJsZVdpZHRoKToKKwogMjAxOS0wOC0zMCAg
WmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdIFBhc3MgRm9y
bWF0dGluZ0NvbnRleHQgdG8gR2VvbWV0cnkvUXVpcmtzL0Jsb2NrTWFyZ2luQ29sbGFwc2luZyBj
bGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRl
eCBkZjcyYTg1NGMwMWU4Y2U5YzU5Y2FhZmE3NTU5ZDkzZmRhOWY1ZTZkLi40M2RkYTA3M2FmYjVm
MWIwYjI1NTM5NzRmMmRmNTQ5M2ZkMjViNGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9G
b3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTY2LDggKzY2LDcgQEAgTGF5b3V0U3RhdGUmIEZvcm1h
dHRpbmdDb250ZXh0OjpsYXlvdXRTdGF0ZSgpIGNvbnN0CiAKIHZvaWQgRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRC
b3gpCiB7Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwotICAg
IGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLnBhZGRpbmdCb3hXaWR0aCgpOwor
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCps
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLnBhZGRpbmdCb3hXaWR0aCgpOwogCiAgICAgYXV0
byBjb21wdXRlID0gWyZdKE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCkgewogICAgICAg
ICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGNvbnRhaW5pbmdCbG9j
a1dpZHRoLCB1c2VkV2lkdGgsIHsgfSB9OwpAQCAtODcsNyArODYsNyBAQCB2b2lkIEZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYg
bGF5b3V0Qm94KQogICAgICAgICAgICAgaG9yaXpvbnRhbEdlb21ldHJ5ID0gbWluSG9yaXpvbnRh
bEdlb21ldHJ5OwogICAgIH0KIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9
IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldExl
ZnQoaG9yaXpvbnRhbEdlb21ldHJ5LmxlZnQgKyBob3Jpem9udGFsR2VvbWV0cnkud2lkdGhBbmRN
YXJnaW4udXNlZE1hcmdpbi5zdGFydCk7CiAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lk
dGgoaG9yaXpvbnRhbEdlb21ldHJ5LndpZHRoQW5kTWFyZ2luLndpZHRoKTsKICAgICBkaXNwbGF5
Qm94LnNldEhvcml6b250YWxNYXJnaW4oaG9yaXpvbnRhbEdlb21ldHJ5LndpZHRoQW5kTWFyZ2lu
LnVzZWRNYXJnaW4pOwpAQCAtOTYsOCArOTUsNiBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94KQog
CiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRy
eShjb25zdCBCb3gmIGxheW91dEJveCkKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMt
PmxheW91dFN0YXRlKCk7Ci0KICAgICBhdXRvIGNvbXB1dGUgPSBbJl0oVXNlZFZlcnRpY2FsVmFs
dWVzIHVzZWRWYWx1ZXMpIHsKICAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkub3V0T2ZGbG93VmVy
dGljYWxHZW9tZXRyeShsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgIH07CkBAIC0xMTUsNyAr
MTEyLDcgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1ZlcnRpY2Fs
R2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gpCiAgICAgICAgICAgICB2ZXJ0aWNhbEdlb21l
dHJ5ID0gbWluVmVydGljYWxHZW9tZXRyeTsKICAgICB9CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94
ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAgICAg
YXV0byBub25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbiA9IHZlcnRpY2FsR2VvbWV0cnkuaGVpZ2h0
QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbjsKICAgICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0
aWNhbEdlb21ldHJ5LnRvcCArIG5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSk7CiAg
ICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KHZlcnRpY2FsR2VvbWV0cnkuaGVpZ2h0
QW5kTWFyZ2luLmhlaWdodCk7CkBAIC0xMjUsMTAgKzEyMiw5IEBAIHZvaWQgRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0
Qm94KQogCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhj
b25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8VXNlZEhvcml6b250YWxWYWx1ZXM+IHVzZWRW
YWx1ZXMpCiB7Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwog
ICAgIGlmICghdXNlZFZhbHVlcykKLSAgICAgICAgdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFs
VmFsdWVzIHsgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OwotICAgIGF1dG8mIGRpc3BsYXlC
b3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAg
ICAgIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlCb3hGb3JMYXlv
dXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsK
KyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
OwogICAgIGRpc3BsYXlCb3guc2V0Qm9yZGVyKGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIobGF5
b3V0Qm94KSk7CiAgICAgZGlzcGxheUJveC5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQ
YWRkaW5nKGxheW91dEJveCwgKnVzZWRWYWx1ZXMpKTsKIH0KQEAgLTIyNiwxMyArMjIyLDEyIEBA
IHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OnZhbGlkYXRlR2VvbWV0cnlDb25zdHJhaW50c0FmdGVy
TGF5b3V0KCkgY29uc3QKICAgICBpZiAoIWlzPENvbnRhaW5lcj4ocm9vdCgpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0Um9vdCA9IGRvd25jYXN0PENvbnRh
aW5lcj4ocm9vdCgpKTsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRl
KCk7CiAgICAgLy8gRklYTUU6IGFkZCBhIGRlc2NlbmRhbnRzT2ZUeXBlPD4gZmxhdm9yIHRoYXQg
c3RvcHMgYXQgbmVzdGVkIGZvcm1hdHRpbmcgY29udGV4dHMKICAgICBmb3IgKGF1dG8mIGxheW91
dEJveCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KSkgewog
ICAgICAgICBpZiAoJmxheW91dEJveC5mb3JtYXR0aW5nQ29udGV4dFJvb3QoKSAhPSAmZm9ybWF0
dGluZ0NvbnRleHRSb290KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8mIGNv
bnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwotICAgICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAg
ICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91
dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKKyAgICAgICAgYXV0byYgZGlzcGxh
eUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKIAogICAgICAgICAvLyAx
MC4zLjMgQmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdwog
ICAgICAgICAvLyAxMC4zLjcgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxl
bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggMmEw
NmJlZGI0NjFiOTZkZTQ4ZjAxZjFjNmY1MzMzNjI5MGU4MDk0NS4uMzdlYjEyMjJiMDU0ZDY4ZThj
OTQzZmJlNDdkMzIzNzkxNDNmYWJhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRp
bmdDb250ZXh0LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIK
ICNpbmNsdWRlICJMYXlvdXRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCkBAIC00MSw3
ICs0Miw2IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBDb250YWluZXI7CiBjbGFzcyBG
b3JtYXR0aW5nU3RhdGU7Ci1jbGFzcyBMYXlvdXRTdGF0ZTsKIAogY2xhc3MgRm9ybWF0dGluZ0Nv
bnRleHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRm9ybWF0dGluZ0NvbnRleHQpOwpA
QCAtNzIsNiArNzIsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0lubGluZUZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gcm9vdCgpLmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQoKTsgfQogICAgIGJvb2wgaXNUYWJsZUZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gcm9vdCgpLmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29udGV4dCgpOyB9CiAKKyAg
ICBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlvdXRC
b3gpIGNvbnN0IHsgcmV0dXJuIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOyB9CisgICAgYm9vbCBoYXNEaXNwbGF5Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94
KSBjb25zdCB7IHJldHVybiBsYXlvdXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KTsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgTGF5b3V0UXVldWUgPSBWZWN0b3I8Y29uc3QgQm94
Kj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcAppbmRleCBhZjU0NDc0NTllYTM4OTBhZGRkNjY5NzRlYThiYjA2NmZjMzBkNDFi
Li40ZjczYWY1NzI3NTU1OGQ5YTRiNWM5MWRiMmI5MzdkOGU4ZjNkNjY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC02
MSw3ICs2MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hlaWdodEF1dG8oY29uc3QgQm94JiBs
YXlvdXRCb3gpCiAKIE9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6Y29tcHV0ZWRIZWlnaHRWYWx1ZShjb25zdCBCb3gmIGxheW91dEJveCwgSGVpZ2h0VHlw
ZSBoZWlnaHRUeXBlKSBjb25zdAogewotICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5
b3V0U3RhdGUoKTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwogICAgIGF1
dG8gaGVpZ2h0ID0gaGVpZ2h0VHlwZSA9PSBIZWlnaHRUeXBlOjpOb3JtYWwgPyBzdHlsZS5sb2dp
Y2FsSGVpZ2h0KCkgOiBoZWlnaHRUeXBlID09IEhlaWdodFR5cGU6Ok1pbiA/IHN0eWxlLmxvZ2lj
YWxNaW5IZWlnaHQoKSA6IHN0eWxlLmxvZ2ljYWxNYXhIZWlnaHQoKTsKICAgICBpZiAoaGVpZ2h0
LmlzVW5kZWZpbmVkKCkgfHwgaGVpZ2h0LmlzQXV0bygpKQpAQCAtNzMsOSArNzIsOSBAQCBPcHRp
b25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSGVp
Z2h0VmFsdWUoY29uc3QgQm94JgogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdC
bG9ja0hlaWdodFZhbHVlOwogICAgIGlmIChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpIHsKICAgICAgICAgLy8gQ29udGFpbmluZyBibG9jaydzIGhlaWdodCBpcyBhbHJlYWR5IGNv
bXB1dGVkIHNpbmNlIHdlIGxheW91dCB0aGUgb3V0LW9mLWZsb3cgYm94ZXMgYXMgdGhlIGxhc3Qg
c3RlcC4KLSAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0VmFsdWUgPSBsYXlvdXRTdGF0ZS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmhlaWdo
dCgpOworICAgICAgICBjb250YWluaW5nQmxvY2tIZWlnaHRWYWx1ZSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KS5oZWlnaHQoKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobGF5b3V0U3RhdGUuaW5RdWly
a3NNb2RlKCkpCisgICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQogICAg
ICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0VmFsdWUgPSBRdWlya3MoZm9ybWF0dGluZ0Nv
bnRleHQoKSkuaGVpZ2h0VmFsdWVPZk5lYXJlc3RDb250YWluaW5nQmxvY2tXaXRoRml4ZWRIZWln
aHQobGF5b3V0Qm94KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhdXRvIGNvbnRhaW5p
bmdCbG9ja0hlaWdodCA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5sb2dp
Y2FsSGVpZ2h0KCk7CkBAIC0xMDcsNyArMTA2LDggQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY28K
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5
b3V0U3RhdGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJv
eEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0g
dGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0
dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgIGF1dG8g
Ym9yZGVyQW5kUGFkZGluZ1RvcCA9IGRpc3BsYXlCb3guYm9yZGVyVG9wKCkgKyBkaXNwbGF5Qm94
LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwogICAgIGF1dG8gdG9wID0gYm9yZGVyQW5kUGFkZGlu
Z1RvcDsKICAgICBhdXRvIGJvdHRvbSA9IGJvcmRlckFuZFBhZGRpbmdUb3A7CkBAIC0xMjAsOCAr
MTIwLDggQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbnRlbnRI
ZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY28KICAgICAgICAgYm90dG9tID0gbGluZUJv
eGVzLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CiAgICAgfSBlbHNlIGlmIChmb3JtYXR0aW5nUm9v
dENvbnRhaW5lci5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSB8fCBsYXlvdXRC
b3guaXNEb2N1bWVudEJveCgpKSB7CiAgICAgICAgIGlmIChmb3JtYXR0aW5nUm9vdENvbnRhaW5l
ci5oYXNJbkZsb3dDaGlsZCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBmaXJzdERpc3BsYXlCb3gg
PSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5nUm9vdENvbnRh
aW5lci5maXJzdEluRmxvd0NoaWxkKCkpOwotICAgICAgICAgICAgYXV0byYgbGFzdERpc3BsYXlC
b3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5nUm9vdENv
bnRhaW5lci5sYXN0SW5GbG93Q2hpbGQoKSk7CisgICAgICAgICAgICBhdXRvJiBmaXJzdERpc3Bs
YXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0
aW5nUm9vdENvbnRhaW5lci5maXJzdEluRmxvd0NoaWxkKCkpOworICAgICAgICAgICAgYXV0byYg
bGFzdERpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KCpmb3JtYXR0aW5nUm9vdENvbnRhaW5lci5sYXN0SW5GbG93Q2hpbGQoKSk7CiAgICAgICAgICAg
ICB0b3AgPSBmaXJzdERpc3BsYXlCb3gucmVjdFdpdGhNYXJnaW4oKS50b3AoKTsKICAgICAgICAg
ICAgIGJvdHRvbSA9IGxhc3REaXNwbGF5Qm94LnJlY3RXaXRoTWFyZ2luKCkuYm90dG9tKCk7CiAg
ICAgICAgIH0KQEAgLTIwMSwyOCArMjAxLDI4IEBAIExheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpCiAg
ICAgLy8gY29tcHV0ZWQgdmFsdWUgZm9yICdkaXNwbGF5Jy4pIFRoZSB2YWx1ZSBpcyBuZWdhdGl2
ZSBpZiB0aGUgaHlwb3RoZXRpY2FsIGJveCBpcyBhYm92ZSB0aGUgY29udGFpbmluZyBibG9jay4K
IAogICAgIC8vIFN0YXJ0IHdpdGggdGhpcyBib3gncyBib3JkZXIgYm94IG9mZnNldCBmcm9tIHRo
ZSBwYXJlbnQncyBib3JkZXIgYm94LgotICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5
b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRp
bmdDb250ZXh0KCk7CiAgICAgTGF5b3V0VW5pdCB0b3A7CiAgICAgaWYgKGF1dG8qIHByZXZpb3Vz
SW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSkgewogICAg
ICAgICAvLyBBZGQgc2libGluZyBvZmZzZXQKLSAgICAgICAgYXV0byYgcHJldmlvdXNJbkZsb3dE
aXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqcHJldmlvdXNJ
bkZsb3dTaWJsaW5nKTsKKyAgICAgICAgYXV0byYgcHJldmlvdXNJbkZsb3dEaXNwbGF5Qm94ID0g
Zm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqcHJldmlvdXNJbkZsb3dT
aWJsaW5nKTsKICAgICAgICAgdG9wICs9IHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5ib3R0b20o
KSArIHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5ub25Db2xsYXBzZWRNYXJnaW5BZnRlcigpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChsYXlvdXRCb3gucGFyZW50KCkpOwotICAgICAg
ICB0b3AgPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3gucGFy
ZW50KCkpLmNvbnRlbnRCb3hUb3AoKTsKKyAgICAgICAgdG9wID0gZm9ybWF0dGluZ0NvbnRleHQu
ZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LnBhcmVudCgpKS5jb250ZW50Qm94VG9w
KCk7CiAgICAgfQogCiAgICAgLy8gUmVzb2x2ZSB0b3AgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGNv
bnRhaW5pbmcgYmxvY2suCiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxheW91dEJveC5j
b250YWluaW5nQmxvY2soKTsKICAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJlbnQgc2luY2Ugd2Ug
cHJldGVuZCB0aGF0IHRoaXMgYm94IGlzIG5vcm1hbCBmbG93LgogICAgIGZvciAoYXV0byogY29u
dGFpbmVyID0gbGF5b3V0Qm94LnBhcmVudCgpOyBjb250YWluZXIgIT0gJmNvbnRhaW5pbmdCbG9j
azsgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKSkgewotICAgICAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqY29u
dGFpbmVyKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5lcik7CiAgICAgICAgIC8vIERpc3BsYXk6OkJv
eDo6dG9wIGlzIHRoZSBib3JkZXIgYm94IHRvcCBwb3NpdGlvbiBpbiBpdHMgY29udGFpbmluZyBi
bG9jaydzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgICAgICB0b3AgKz0gZGlzcGxheUJveC50b3Ao
KTsKICAgICAgICAgQVNTRVJUKCFjb250YWluZXItPmlzUG9zaXRpb25lZCgpIHx8IGxheW91dEJv
eC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKICAgICB9CiAgICAgLy8gTW92ZSB0aGUgc3RhdGljIHBv
c2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYWRkaW5nIGJveC4gVGhpcyBpcyB2ZXJ5IHNwZWNpZmlj
IHRvIGFib2x1dGVseSBwb3NpdGlvbmVkIGJveGVzLgotICAgIGF1dG8gcGFkZGluZ0JveFRvcCA9
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKS5wYWRk
aW5nQm94VG9wKCk7CisgICAgYXV0byBwYWRkaW5nQm94VG9wID0gZm9ybWF0dGluZ0NvbnRleHQu
ZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2spLnBhZGRpbmdCb3hUb3AoKTsK
ICAgICByZXR1cm4gdG9wIC0gcGFkZGluZ0JveFRvcDsKIH0KIApAQCAtMjMyLDIxICsyMzIsMjEg
QEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250
YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2kKICAgICAvLyBTZWUgc3RhdGljVmVydGljYWxQb3Np
dGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzdGF0
aWMgcG9zaXRpb24uCiAKICAgICAvLyBTdGFydCB3aXRoIHRoaXMgYm94J3MgYm9yZGVyIGJveCBv
ZmZzZXQgZnJvbSB0aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KLSAgICBhdXRvJiBsYXlvdXRTdGF0
ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0
aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwogICAgIEFTU0VSVChsYXlvdXRCb3gucGFyZW50KCkp
OwotICAgIGF1dG8gbGVmdCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5wYXJlbnQoKSkuY29udGVudEJveExlZnQoKTsKKyAgICBhdXRvIGxlZnQgPSBmb3Jt
YXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3gucGFyZW50KCkp
LmNvbnRlbnRCb3hMZWZ0KCk7CiAKICAgICAvLyBSZXNvbHZlIGxlZnQgYWxsIHRoZSB3YXkgdXAg
dG8gdGhlIGNvbnRhaW5pbmcgYmxvY2suCiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJlbnQg
c2luY2Ugd2UgcHJldGVuZCB0aGF0IHRoaXMgYm94IGlzIG5vcm1hbCBmbG93LgogICAgIGZvciAo
YXV0byogY29udGFpbmVyID0gbGF5b3V0Qm94LnBhcmVudCgpOyBjb250YWluZXIgIT0gJmNvbnRh
aW5pbmdCbG9jazsgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKSkgewot
ICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveCgqY29udGFpbmVyKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdD
b250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5lcik7CiAgICAgICAgIC8vIERp
c3BsYXk6OkJveDo6bGVmdCBpcyB0aGUgYm9yZGVyIGJveCBsZWZ0IHBvc2l0aW9uIGluIGl0cyBj
b250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgICAgIGxlZnQgKz0gZGlz
cGxheUJveC5sZWZ0KCk7CiAgICAgICAgIEFTU0VSVCghY29udGFpbmVyLT5pc1Bvc2l0aW9uZWQo
KSB8fCBsYXlvdXRCb3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7CiAgICAgfQogICAgIC8vIE1vdmUg
dGhlIHN0YXRpYyBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMg
dmVyeSBzcGVjaWZpYyB0byBhYm9sdXRlbHkgcG9zaXRpb25lZCBib3hlcy4KLSAgICBhdXRvIHBh
ZGRpbmdCb3hMZWZ0ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWlu
aW5nQmxvY2spLnBhZGRpbmdCb3hMZWZ0KCk7CisgICAgYXV0byBwYWRkaW5nQm94TGVmdCA9IGZv
cm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKS5w
YWRkaW5nQm94TGVmdCgpOwogICAgIHJldHVybiBsZWZ0IC0gcGFkZGluZ0JveExlZnQ7CiB9CiAK
QEAgLTMwMCwxMCArMzAwLDEwIEBAIFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0CiAgICAgLy8gNS4g
J2hlaWdodCcgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRo
ZW4gJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJl
IHNldCB0byAwIGFuZCBzb2x2ZSBmb3IgJ2hlaWdodCcKICAgICAvLyA2LiAnYm90dG9tJyBpcyAn
YXV0bycsICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzZXQgJ2F1dG8n
IHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCBhbmQgc29s
dmUgZm9yICdib3R0b20nCiAKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0
YXRlKCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29u
dGV4dCgpOwogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byYg
ZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
KTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlz
cGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKKyAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpOworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBmb3Jt
YXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmlu
Z0Jsb2NrKCkpOwogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gY29udGFpbmluZ0Js
b2NrRGlzcGxheUJveC5wYWRkaW5nQm94SGVpZ2h0KCk7CiAgICAgYXV0byBjb250YWluaW5nQmxv
Y2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gucGFkZGluZ0JveFdpZHRoKCk7CiAK
QEAgLTQyNSwxMSArNDI1LDExIEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAgICAgLy8gNS4g
J3dpZHRoJyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhl
biBzb2x2ZSBmb3IgJ3dpZHRoJwogICAgIC8vIDYuICdyaWdodCcgaXMgJ2F1dG8nLCAnbGVmdCcg
YW5kICd3aWR0aCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdyaWdodCcKIAotICAg
IGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3Jt
YXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5
bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3Rh
dGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlC
b3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxheW91dEJveC5jb250YWluaW5nQmxvY2so
KTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlz
cGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2spOworICAgIGF1dG8mIGNvbnRhaW5p
bmdCbG9ja0Rpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IHVz
ZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGgudmFsdWVPcigwKTsKICAgICBhdXRvIGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24gPSBjb250YWluaW5nQmxvY2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCk7CiAgICAgCkBAIC01NTksMTAgKzU1OSwxMCBAQCBWZXJ0aWNhbEdlb21ldHJ5
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdl
b21ldHJ5KAogICAgIC8vIDQuIElmIGF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgb25seSBvbmUgJ2F1
dG8nIGxlZnQsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KICAgICAvLyA1LiBJ
ZiBhdCB0aGlzIHBvaW50IHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0
aGUgdmFsdWUgZm9yICdib3R0b20nIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KIAotICAgIGF1
dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3JtYXR0
aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5bGUg
PSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUu
ZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAgIGF1dG8mIGNvbnRhaW5pbmdC
bG9ja0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0
aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYg
Y29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CiAgICAgYXV0byBjb250
YWluaW5nQmxvY2tIZWlnaHQgPSBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94LnBhZGRpbmdCb3hI
ZWlnaHQoKTsKICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gY29udGFpbmluZ0Jsb2Nr
RGlzcGxheUJveC5wYWRkaW5nQm94V2lkdGgoKTsKIApAQCAtNjQ1LDkgKzY0NSw5IEBAIEhvcml6
b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxh
Y2VkSG9yaXpvbnRhbEdlb21lCiAgICAgLy8gNS4gSWYgYXQgdGhpcyBwb2ludCB0aGUgdmFsdWVz
IGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciBlaXRoZXIgJ2xlZnQn
IChpbiBjYXNlIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29udGFpbmluZyBibG9j
ayBpcyAncnRsJykgb3IKICAgICAvLyAgICdyaWdodCcgKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMg
J2x0cicpIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KIAotICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRo
aXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5
bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29u
dGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAgICAgYXV0byYgY29udGFp
bmluZ0Jsb2NrID0gKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja1dpZHRoID0gdXNlZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aC52YWx1ZU9y
KDApOwogICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGNvbnRhaW5pbmdCbG9jay5z
dHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKQEAgLTcyNCw3ICs3MjQsNyBAQCBIb3Jp
em9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBs
YWNlZEhvcml6b250YWxHZW9tZQogCiAgICAgLy8gRm9yIG91dC1vZi1mbG93IGVsZW1lbnRzIHRo
ZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBh
bmNlc3Rvci4KICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGlu
IHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExldCdzIGNvbnZlcnQg
aXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KLSAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGNvbnRhaW5pbmdCbG9jaykucGFkZGluZ0JveExlZnQoKTsKKyAgICBhdXRvIGNvbnRhaW5p
bmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jaykucGFkZGluZ0JveExlZnQoKTsKICAgICAqbGVm
dCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogICAgICpyaWdodCArPSBj
b250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogCkBAIC04NjEsOCArODYxLDggQEAg
SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFj
ZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QKICAgICAvLyAgICB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJn
ZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbywgaGFzIGEgaGVpZ2h0IG5vdCBncmVh
dGVyIHRoYW4gMTUwcHgsIGFuZCBoYXMgYSB3aWR0aCBub3QgZ3JlYXRlciB0aGFuIHRoZSBkZXZp
Y2Ugd2lkdGguCiAKICAgICAvLyAjMQotICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5
b3V0U3RhdGUoKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0U3RhdGUu
ZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250
ZW50Qm94V2lkdGgoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1h
dHRpbmdDb250ZXh0KCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGZvcm1hdHRp
bmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxv
Y2soKSkuY29udGVudEJveFdpZHRoKCk7CiAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
ID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB7IGNvbnRhaW5pbmdCbG9ja1dpZHRoIH0pOwogICAgIGF1dG8gdXNlZFZlcnRp
Y2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21w
dXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHls
ZSgpOwpAQCAtODc3LDcgKzg3Nyw3IEBAIEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGNvbnN0CiAgICAgICAg
IGhlaWdodCA9IHJlcGxhY2VkLT5pbnRyaW5zaWNIZWlnaHQoKTsKICAgICB9IGVsc2UgaWYgKGhl
aWdodElzQXV0byAmJiByZXBsYWNlZC0+aGFzSW50cmluc2ljUmF0aW8oKSkgewogICAgICAgICAv
LyAjMwotICAgICAgICBhdXRvIHVzZWRXaWR0aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KS53aWR0aCgpOworICAgICAgICBhdXRvIHVzZWRXaWR0aCA9IGZv
cm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS53aWR0aCgp
OwogICAgICAgICBoZWlnaHQgPSB1c2VkV2lkdGggLyByZXBsYWNlZC0+aW50cmluc2ljUmF0aW8o
KTsKICAgICB9IGVsc2UgaWYgKGhlaWdodElzQXV0byAmJiByZXBsYWNlZC0+aGFzSW50cmluc2lj
SGVpZ2h0KCkpIHsKICAgICAgICAgLy8gIzQKQEAgLTk3OSw3ICs5NzksNyBAQCBMYXlvdXRTaXpl
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zm
c2V0KGNvbnN0IEJveAogCiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKICAg
ICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwot
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKS5jb250ZW50Qm94V2lkdGgoKTsKKyAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jaykuY29udGVudEJveFdpZHRoKCk7CiAKICAgICBhdXRv
IHRvcCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CiAgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KHN0eWxlLmxvZ2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggNTA4
YmQxNWRlNTEzZGE1ODZkOTMxMGNiZDBiYzY2M2YyMGYxNzA4Ny4uYmYyYTQ5OTQ0ZTM2NDg3NGIw
NDI0ZjgwOGM3ODE5NmU4YTY0MGUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Rm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCkBAIC0zOSw3ICszOSw3IEBAIExheW91dFVuaXQg
Rm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6aGVpZ2h0VmFsdWVPZk5lYXJlc3RDb250YWluaW5n
QmxvY2tXaXRoRml4CiB7CiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIGdvIGFuZCB0cmF2ZXJz
IHRoZSBjb250YWluaW5nIGJsb2NrIGNoYWluIHRvIGZpbmQgYSBibG9jayBsZXZlbCBib3ggd2l0
aCBmaXhlZCBoZWlnaHQgdmFsdWUsIGV2ZW4gaWYgaXQgbWVhbnMgbGVhdmluZwogICAgIC8vIHRo
ZSBjdXJyZW50IGZvcm1hdHRpbmcgY29udGV4dC4gRklYTUU6IHN1cmVseSB3ZSBuZWVkIHRvIGRv
IHNvbWUgdHJpY2tzIGhlcmUgd2hlbiBibG9jayBkaXJlY3Rpb24gc3VwcG9ydCBpcyBhZGRlZC4K
LSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CisgICAgYXV0byYg
Zm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwogICAgIGF1dG8q
IGNvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICBMYXlv
dXRVbml0IGJvZHlBbmREb2N1bWVudFZlcnRpY2FsTWFyZ2luUGFkZGluZ0FuZEJvcmRlcjsKICAg
ICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrKSB7CkBAIC01MCwxMCArNTAsMTAgQEAgTGF5b3V0VW5p
dCBGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5p
bmdCbG9ja1dpdGhGaXgKICAgICAgICAgLy8gSWYgdGhlIG9ubHkgZml4ZWQgdmFsdWUgYm94IHdl
IGZpbmQgaXMgdGhlIElDQiwgdGhlbiBpZ25vcmUgdGhlIGJvZHkgYW5kIHRoZSBkb2N1bWVudCAo
dmVydGljYWwpIG1hcmdpbiwgcGFkZGluZyBhbmQgYm9yZGVyLiBTbyBtdWNoIHF1aXJraW5lc3Mu
CiAgICAgICAgIC8vIC1hbmQgaXQncyB0b3RhbGx5IGluc2FuZSBiZWNhdXNlIG5vdyB3ZSBmcmVl
bHkgdHJhdmVsIGFjcm9zcyBmb3JtYXR0aW5nIGNvbnRleHQgYm91bmRhcmllcyBhbmQgY29tcHV0
ZWQgbWFyZ2lucyBhcmUgbm9uZXhpc3RlbnQuCiAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2st
PmlzQm9keUJveCgpIHx8IGNvbnRhaW5pbmdCbG9jay0+aXNEb2N1bWVudEJveCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveCgqY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluaW5nQmxvY2sp
OwogCi0gICAgICAgICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5pbmdCbG9jay0+Y29u
dGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07Ci0gICAgICAgICAgICBhdXRvIHZl
cnRpY2FsTWFyZ2luID0gR2VvbWV0cnkoZm9ybWF0dGluZ0NvbnRleHQoKSkuY29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbigqY29udGFpbmluZ0Jsb2NrLCB1c2VkVmFsdWVzKTsKKyAgICAgICAgICAgIGF1
dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRleHQu
ZGlzcGxheUJveEZvckxheW91dEJveCgqY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2so
KSkuY29udGVudEJveFdpZHRoKCkgfTsKKyAgICAgICAgICAgIGF1dG8gdmVydGljYWxNYXJnaW4g
PSBHZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbigqY29u
dGFpbmluZ0Jsb2NrLCB1c2VkVmFsdWVzKTsKICAgICAgICAgICAgIGF1dG8gdmVydGljYWxQYWRk
aW5nID0gZGlzcGxheUJveC5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGRpc3BsYXlCb3gucGFk
ZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7CiAgICAgICAgICAgICBhdXRvIHZlcnRpY2FsQm9yZGVy
ID0gZGlzcGxheUJveC5ib3JkZXJUb3AoKSArIGRpc3BsYXlCb3guYm9yZGVyQm90dG9tKCk7CiAg
ICAgICAgICAgICBib2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXIg
Kz0gdmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyB2ZXJ0aWNhbE1hcmdpbi5hZnRl
ci52YWx1ZU9yKDApICsgdmVydGljYWxQYWRkaW5nICsgdmVydGljYWxCb3JkZXI7CkBAIC02Miw3
ICs2Miw3IEBAIExheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6aGVpZ2h0VmFs
dWVPZk5lYXJlc3RDb250YWluaW5nQmxvY2tXaXRoRml4CiAgICAgICAgIGNvbnRhaW5pbmdCbG9j
ayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgfQogICAgIC8vIElu
aXRpYWwgY29udGFpbmluZyBibG9jayBoYXMgdG8gaGF2ZSBhIGhlaWdodC4KLSAgICByZXR1cm4g
bGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3guaW5pdGlhbENvbnRh
aW5pbmdCbG9jaygpKS5jb250ZW50Qm94KCkuaGVpZ2h0KCkgLSBib2R5QW5kRG9jdW1lbnRWZXJ0
aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXI7CisgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2so
KSkuY29udGVudEJveCgpLmhlaWdodCgpIC0gYm9keUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5Q
YWRkaW5nQW5kQm9yZGVyOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApp
bmRleCBhZDVlNWRjMTYzOGJlNDYxMDU5ZjQ3ZjU3YmY4ZWM5ZmM4OTg4NDdjLi5kOGQyNTM3MGE5
NGZlZTU1MmUzYWU2OWZmNDgyMjVjOWFlNGU4ZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKQEAgLTEzMyw3ICsxMzMsNyBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0Ojp1c2VkQXZhaWxhYmxlV2lkdGhGb3JGbG9hdEF2b2lkZXIoYwogICAg
IGlmICghY29uc3RyYWludHMubGVmdCAmJiAhY29uc3RyYWludHMucmlnaHQpCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gZG93bmNhc3Q8Q29udGFpbmVy
PigqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxv
Y2tEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRh
aW5pbmdCbG9jayk7CisgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKTsKICAgICBhdXRvIGF2YWlsYWJsZVdp
ZHRoID0gY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKTsKIAogICAg
IExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrTGVmdDsKQEAgLTE5OCwxMCArMTk4LDkgQEAgdm9p
ZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihj
b25zdCBCb3gmIGxheW91dEJveCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1
dG8gY29tcHV0ZUluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbiA9IFsmXSB7Ci0gICAgICAgICAgICBh
dXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgICAgICAgICBhdXRv
IHBvc2l0aW9uT2Zmc2V0ID0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZz
ZXQoY2hpbGRCb3gpOwogCi0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3Rh
dGUuZGlzcGxheUJveEZvckxheW91dEJveChjaGlsZEJveCk7CisgICAgICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChjaGlsZEJveCk7CiAgICAgICAgICAg
ICBhdXRvIHRvcExlZnQgPSBkaXNwbGF5Qm94LnRvcExlZnQoKTsKIAogICAgICAgICAgICAgdG9w
TGVmdC5tb3ZlKHBvc2l0aW9uT2Zmc2V0KTsKQEAgLTIxNiw4ICsyMTUsNyBAQCB2b2lkIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IEJv
eCYgbGF5b3V0Qm94KQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0
aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0
LCBjb25zdCBCb3gmIGxheW91dEJveCkKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMt
PmxheW91dFN0YXRlKCk7Ci0gICAgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpLnNldFRvcChnZW9tZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0
Qm94KSk7CisgICAgZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLnNldFRvcChnZW9t
ZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0Qm94KSk7CiAgICAgaWYgKGxheW91
dEJveC5oYXNGbG9hdENsZWFyKCkpCiAgICAgICAgIGNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBv
c2l0aW9uRm9yRmxvYXRDbGVhcihmbG9hdGluZ0NvbnRleHQsIGxheW91dEJveCk7CiAgICAgZWxz
ZSBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkKQEAgLTIyNiw3
ICsyMjQsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNWZXJ0
aWNhbFBvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4dAogCiB2b2lkIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlv
dXRCb3gpCiB7Ci0gICAgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91
dEJveCkuc2V0TGVmdChnZW9tZXRyeSgpLnN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRC
b3gpKTsKKyAgICBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0TGVmdChnZW9t
ZXRyeSgpLnN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRCb3gpKTsKIH0KIAogdm9pZCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljUG9zaXRpb24oY29uc3QgRmxvYXRp
bmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQpAQCAtMjM3
LDExICsyMzUsMTAgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGlj
UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGkKIAogdm9pZCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gm
IGxheW91dEJveCkKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRl
KCk7CiAgICAgYXV0byBlc3RpbWF0ZWRNYXJnaW5CZWZvcmUgPSBtYXJnaW5Db2xsYXBzZSgpLmVz
dGltYXRlZE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpOwogICAgIHNldEVzdGltYXRlZE1hcmdpbkJl
Zm9yZShsYXlvdXRCb3gsIGVzdGltYXRlZE1hcmdpbkJlZm9yZSk7CiAKLSAgICBhdXRvJiBkaXNw
bGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwor
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CiAgICAgYXV0byBub25Db2xsYXBzZWRWYWx1ZXMgPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNv
bGxhcHNlZFZhbHVlcyB7IGVzdGltYXRlZE1hcmdpbkJlZm9yZS5ub25Db2xsYXBzZWRWYWx1ZSwg
eyB9IH07CiAgICAgYXV0byBjb2xsYXBzZWRWYWx1ZXMgPSBVc2VkVmVydGljYWxNYXJnaW46OkNv
bGxhcHNlZFZhbHVlcyB7IGVzdGltYXRlZE1hcmdpbkJlZm9yZS5jb2xsYXBzZWRWYWx1ZSwgeyB9
LCBlc3RpbWF0ZWRNYXJnaW5CZWZvcmUuaXNDb2xsYXBzZWRUaHJvdWdoIH07CiAgICAgYXV0byB2
ZXJ0aWNhbE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbiB7IG5vbkNvbGxhcHNlZFZhbHVlcywg
Y29sbGFwc2VkVmFsdWVzIH07CkBAIC0zMTAsNyArMzA3LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbkZvckZsb2F0Q2xlYXIo
Y29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBs
YXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgIEFT
U0VSVCgqdmVydGljYWxQb3NpdGlvbkFuZENsZWFyYW5jZS5wb3NpdGlvbiA+PSBkaXNwbGF5Qm94
LnRvcCgpKTsKICAgICBkaXNwbGF5Qm94LnNldFRvcCgqdmVydGljYWxQb3NpdGlvbkFuZENsZWFy
YW5jZS5wb3NpdGlvbik7CiAgICAgaWYgKHZlcnRpY2FsUG9zaXRpb25BbmRDbGVhcmFuY2UuY2xl
YXJhbmNlKQpAQCAtMzMzLDEyICszMzAsMTEgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlRmxvYXRpbmdQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2EKIHsK
ICAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwogICAgIEFTU0VS
VChoYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpKTsKLSAgICBsYXlvdXRTdGF0
ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KGZsb2F0aW5n
Q29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGxheW91dEJveCkpOworICAgIGRpc3BsYXlCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3NpdGlvbkZv
ckZsb2F0KGxheW91dEJveCkpOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVQb3NpdGlvblRvQXZvaWRGbG9hdHMoY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGlu
Z0NvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewotICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAgICAvLyBGb3JtYXR0aW5nIGNvbnRleHQgcm9vdHMg
YXZvaWQgZmxvYXRzLgogICAgIEFTU0VSVChsYXlvdXRCb3guZXN0YWJsaXNoZXNCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0KCkpOwogICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlv
bmVkKCkpOwpAQCAtMzQ5LDE3ICszNDUsMTYgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlUG9zaXRpb25Ub0F2b2lkRmxvYXRzKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGF1dG8gYWRqdXN0ZWRQb3NpdGlvbiA9IGZsb2F0aW5n
Q29udGV4dC5wb3NpdGlvbkZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRCb3gpKQotICAg
ICAgICBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0VG9w
TGVmdCgqYWRqdXN0ZWRQb3NpdGlvbik7CisgICAgICAgIGRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KS5zZXRUb3BMZWZ0KCphZGp1c3RlZFBvc2l0aW9uKTsKIH0KIAogdm9pZCBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRBdmFpbGFibGVXaWR0aCkKIHsKLSAgICBh
dXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aDsKICAgICBpZiAodXNlZEF2YWlsYWJsZVdpZHRoKQogICAgICAgICBhdmFp
bGFibGVXaWR0aCA9ICp1c2VkQXZhaWxhYmxlV2lkdGg7CiAgICAgZWxzZQotICAgICAgICBhdmFp
bGFibGVXaWR0aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJv
eC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCk7CisgICAgICAgIGF2YWlsYWJs
ZVdpZHRoID0gZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpKS5jb250ZW50Qm94V2lkdGgoKTsKIAogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25h
bDxMYXlvdXRVbml0PiB1c2VkV2lkdGgpIC0+IFdpZHRoQW5kTWFyZ2luIHsKICAgICAgICAgYXV0
byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBhdmFpbGFibGVXaWR0aCwgdXNl
ZFdpZHRoLCB7IH0gfTsKQEAgLTM4Niw3ICszODEsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9u
YQogICAgIGlmICh3aWR0aEFuZE1hcmdpbi53aWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLndpZHRo
KQogICAgICAgICB3aWR0aEFuZE1hcmdpbiA9IG1pbldpZHRoQW5kTWFyZ2luOwogCi0gICAgYXV0
byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpOwogICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHdpZHRoQW5kTWFyZ2lu
LndpZHRoKTsKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4od2lkdGhBbmRNYXJn
aW4udXNlZE1hcmdpbik7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsQ29tcHV0ZWRNYXJn
aW4od2lkdGhBbmRNYXJnaW4uY29tcHV0ZWRNYXJnaW4pOwpAQCAtNDAyLDcgKzM5Nyw3IEBAIHZv
aWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBC
b3gmIGxheW91dEJveCkKICAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmluRmxvd0hlaWdo
dEFuZE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogCiAgICAgICAgIGlmIChsYXlvdXRC
b3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgp
LmZsb2F0aW5nSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcywgVXNlZEhvcml6
b250YWxWYWx1ZXMgeyBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH0pOworICAgICAgICAgICAg
cmV0dXJuIGdlb21ldHJ5KCkuZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2Vk
VmFsdWVzLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfSk7CiAKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC00MzIsNyAr
NDI3LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFy
Z2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgIC8vIDMuIEFkanVzdCBwcmV2aW91cyBpbi1m
bG93IHNpYmxpbmcgbWFyZ2luIGFmdGVyIHVzaW5nIHRoaXMgbWFyZ2luLgogICAgIGF1dG8gY29s
bGFwc2VkTWFyZ2luID0gbWFyZ2luQ29sbGFwc2UoKS5jb2xsYXBzZWRWZXJ0aWNhbFZhbHVlcyhs
YXlvdXRCb3gsIGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4pOwogICAgIGF1dG8g
dmVydGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW4geyBoZWlnaHRBbmRNYXJnaW4ubm9u
Q29sbGFwc2VkTWFyZ2luLCBjb2xsYXBzZWRNYXJnaW4gfTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94
ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAKICAg
ICAvLyBPdXQgb2YgZmxvdyBib3hlcyBkb24ndCBuZWVkIHZlcnRpY2FsIGFkanVzdG1lbnQgYWZ0
ZXIgbWFyZ2luIGNvbGxhcHNpbmcuCiAgICAgaWYgKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSkgewpAQCAtNTA3LDggKzUwMiw3IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6dmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCCiAg
ICAgLy8gMi4gQ2hlY2sgaWYgdGhlIG1hcmdpbiBiZWZvcmUgY29sbGFwc2VzIHdpdGggdGhlIHBy
ZXZpb3VzIGJveCdzIG1hcmdpbiBhZnRlci4gaWYgbm90IC0+IHJldHVybiBwcmV2aW91cyBib3gn
cyBib3R0b20gaW5jbHVkaW5nIG1hcmdpbiBhZnRlciArIG1hcmdpbkJlZm9yZQogICAgIC8vIDMu
IENoZWNrIGlmIHRoZSBwcmV2aW91cyBib3gncyBtYXJnaW5zIGNvbGxhcHNlIHRocm91Z2guIElm
IG5vdCAtPiByZXR1cm4gcHJldmlvdXMgYm94JyBib3R0b20gZXhjbHVkaW5nIG1hcmdpbiBhZnRl
ciArIG1hcmdpbkJlZm9yZSAodGhleSBhcmUgc3VwcG9zZWQgdG8gYmUgZXF1YWwpCiAgICAgLy8g
NC4gR28gdG8gcHJldmlvdXMgYm94IGFuZCBzdGFydCBmcm9tIHN0ZXAgIzEgdW50aWwgd2UgaGl0
IHRoZSBwYXJlbnQgYm94LgotICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3Rh
dGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGxheW91dEJveCk7CiAgICAgaWYgKGRpc3BsYXlCb3guaGFzQ2xlYXJhbmNlKCkp
CiAgICAgICAgIHJldHVybiBkaXNwbGF5Qm94LnRvcCgpOwogCkBAIC01MTgsMTkgKzUxMiwxOSBA
QCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnZlcnRpY2FsUG9zaXRpb25XaXRo
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0QgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1
dG8mIHByZXZpb3VzSW5GbG93U2libGluZyA9ICpjdXJyZW50TGF5b3V0Qm94LT5wcmV2aW91c0lu
Rmxvd1NpYmxpbmcoKTsKICAgICAgICAgaWYgKCFtYXJnaW5Db2xsYXBzZSgpLm1hcmdpbkJlZm9y
ZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcigqY3VycmVudExheW91dEJv
eCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzRGlzcGxheUJveCA9IGxheW91dFN0YXRl
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKKyAgICAgICAg
ICAgIGF1dG8mIHByZXZpb3VzRGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocHJl
dmlvdXNJbkZsb3dTaWJsaW5nKTsKICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0Rpc3BsYXlC
b3gucmVjdFdpdGhNYXJnaW4oKS5ib3R0b20oKSArIHZlcnRpY2FsTWFyZ2luLmJlZm9yZSgpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtYXJnaW5Db2xsYXBzZSgpLm1hcmdpbnNDb2xsYXBz
ZVRocm91Z2gocHJldmlvdXNJbkZsb3dTaWJsaW5nKSkgewotICAgICAgICAgICAgYXV0byYgcHJl
dmlvdXNEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChwcmV2
aW91c0luRmxvd1NpYmxpbmcpOworICAgICAgICAgICAgYXV0byYgcHJldmlvdXNEaXNwbGF5Qm94
ID0gZGlzcGxheUJveEZvckxheW91dEJveChwcmV2aW91c0luRmxvd1NpYmxpbmcpOwogICAgICAg
ICAgICAgcmV0dXJuIHByZXZpb3VzRGlzcGxheUJveC5ib3R0b20oKSArIHZlcnRpY2FsTWFyZ2lu
LmJlZm9yZSgpOwogICAgICAgICB9CiAgICAgICAgIGN1cnJlbnRMYXlvdXRCb3ggPSAmcHJldmlv
dXNJbkZsb3dTaWJsaW5nOwogICAgIH0KIAogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9ICps
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tDb250
ZW50Qm94VG9wID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5n
QmxvY2spLmNvbnRlbnRCb3hUb3AoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRC
b3hUb3AgPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jaykuY29udGVudEJv
eFRvcCgpOwogICAgIC8vIEFkanVzdCB2ZXJ0aWNhbCBwb3NpdGlvbiBkZXBlbmRpbmcgd2hldGhl
ciB0aGlzIGJveCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGFkam9pbnMgd2l0aCBpdHMgcGFyZW50
LgogICAgIGF1dG8gZGlyZWN0bHlBZGpvaW5zUGFyZW50ID0gIWxheW91dEJveC5wcmV2aW91c0lu
Rmxvd1NpYmxpbmcoKTsKICAgICBpZiAoZGlyZWN0bHlBZGpvaW5zUGFyZW50KSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0
aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggNThhMWMxMTUxMDdk
NmQxNDZjYjc5MDBjZGY3OTVlM2I4YjllNTMwMy4uZWY5YjFhMTdkZWYyZDg2NDE5ZjlkYTBiOWRh
YmE5MjkxNDEyNjJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9y
bWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcApAQCAtNTgsOCArNTgsOSBAQCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZwogICAgICAg
ICAvLyBhbmQgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGJveGVzIGFyZSBjb25zaWRlcmVkIHdpdGhv
dXQgdGhlaXIgb2Zmc2V0KS4gTm90ZSB0aGF0IHRoZSBjaGlsZCBib3ggbWF5IGJlIGFuIGFub255
bW91cyBibG9jayBib3guCiAKICAgICAgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlv
dXRTdGF0ZSgpOwotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxh
eUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9j
a1dpZHRoID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKTsKKyAgICAgICAgYXV0byYgZm9ybWF0
dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOworICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpOworICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gZm9ybWF0dGluZ0Nv
bnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KS5jb250ZW50Qm94V2lkdGgoKTsKICAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
ID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB7IGNvbnRhaW5pbmdCbG9ja1dpZHRoIH0pOwogICAgICAgICBhdXRvIG5vbkNv
bGxhcHNlZE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsg
Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNh
bE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07IAogICAgICAgICBhdXRvIGJvcmRlckFuZFBhZGRp
bmdUb3AgPSBkaXNwbGF5Qm94LmJvcmRlclRvcCgpICsgZGlzcGxheUJveC5wYWRkaW5nVG9wKCku
dmFsdWVPcigwKTsKQEAgLTg1LDkgKzg2LDkgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmcKICAg
ICAgICAgLy8gMi4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBib3R0b20gKHBvc3NpYmx5IGNvbGxh
cHNlZCkgbWFyZ2luIG9mIGl0cyBsYXN0IGluLWZsb3cgY2hpbGQsIGlmIHRoZSBjaGlsZCdzIGJv
dHRvbSBtYXJnaW4uLi4KICAgICAgICAgYXV0byogbGFzdEluRmxvd0NoaWxkID0gZG93bmNhc3Q8
Q29udGFpbmVyPihsYXlvdXRCb3gpLmxhc3RJbkZsb3dDaGlsZCgpOwogICAgICAgICBBU1NFUlQo
bGFzdEluRmxvd0NoaWxkKTsKLSAgICAgICAgYXV0byBtYXJnaW5Db2xsYXBzZSA9IE1hcmdpbkNv
bGxhcHNlKGZvcm1hdHRpbmdDb250ZXh0KCkpOworICAgICAgICBhdXRvIG1hcmdpbkNvbGxhcHNl
ID0gTWFyZ2luQ29sbGFwc2UoZm9ybWF0dGluZ0NvbnRleHQpOwogICAgICAgICBpZiAoIW1hcmdp
bkNvbGxhcHNlLm1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkFmdGVyKCpsYXN0
SW5GbG93Q2hpbGQpKSB7Ci0gICAgICAgICAgICBhdXRvJiBsYXN0SW5GbG93RGlzcGxheUJveCA9
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxhc3RJbkZsb3dDaGlsZCk7Cisg
ICAgICAgICAgICBhdXRvJiBsYXN0SW5GbG93RGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxhc3RJbkZsb3dDaGlsZCk7CiAgICAgICAgICAgICBh
dXRvIGJvdHRvbUVkZ2VPZkJvdHRvbU1hcmdpbiA9IGxhc3RJbkZsb3dEaXNwbGF5Qm94LmJvdHRv
bSgpICsgKGxhc3RJbkZsb3dEaXNwbGF5Qm94Lmhhc0NvbGxhcHNlZFRocm91Z2hNYXJnaW4oKSA/
IExheW91dFVuaXQoKSA6IGxhc3RJbkZsb3dEaXNwbGF5Qm94Lm1hcmdpbkFmdGVyKCkpOyAKICAg
ICAgICAgICAgIHJldHVybiB7IGJvdHRvbUVkZ2VPZkJvdHRvbU1hcmdpbiAtIGJvcmRlckFuZFBh
ZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CkBAIC05Nyw3ICs5OCw3
IEBAIEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5G
bG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnCiAgICAgICAgIHdoaWxlIChpbkZsb3dDaGlsZCAm
JiBtYXJnaW5Db2xsYXBzZS5tYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0
ZXIoKmluRmxvd0NoaWxkKSkKICAgICAgICAgICAgIGluRmxvd0NoaWxkID0gaW5GbG93Q2hpbGQt
PnByZXZpb3VzSW5GbG93U2libGluZygpOwogICAgICAgICBpZiAoaW5GbG93Q2hpbGQpIHsKLSAg
ICAgICAgICAgIGF1dG8mIGluRmxvd0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCppbkZsb3dDaGlsZCk7CisgICAgICAgICAgICBhdXRvJiBpbkZsb3dEaXNw
bGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqaW5GbG93
Q2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuIHsgaW5GbG93RGlzcGxheUJveC50b3AoKSArIGlu
Rmxvd0Rpc3BsYXlCb3guYm9yZGVyQm94KCkuaGVpZ2h0KCkgLSBib3JkZXJBbmRQYWRkaW5nVG9w
LCBub25Db2xsYXBzZWRNYXJnaW4gfTsKICAgICAgICAgfQogCkBAIC0xNDAsNyArMTQxLDcgQEAg
V2lkdGhBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd05v
blJlcGxhY2VkV2lkdGhBbmRNYXJnaW4KICAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3gu
c3R5bGUoKTsKICAgICAgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmNvbnRh
aW5pbmdCbG9jaygpOwogICAgICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gdXNlZFZh
bHVlcy5jb250YWluaW5nQmxvY2tXaWR0aC52YWx1ZU9yKDApOwotICAgICAgICBhdXRvJiBkaXNw
bGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKIAogICAgICAgICBhdXRvIHdpZHRoID0gY29tcHV0
ZWRWYWx1ZUlmTm90QXV0byh1c2VkVmFsdWVzLndpZHRoID8gTGVuZ3RoIHsgdXNlZFZhbHVlcy53
aWR0aC52YWx1ZSgpLCBGaXhlZCB9IDogc3R5bGUubG9naWNhbFdpZHRoKCksIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKICAgICAgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9t
ZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CkBA
IC0yMzEsMTcgKzIzMiwxNyBAQCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYgbAogICAgIC8vIFRoZSB2
ZXJ0aWNhbCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBzaWJsaW5nIGJveGVzIGlzIGRldGVybWluZWQg
YnkgdGhlICdtYXJnaW4nIHByb3BlcnRpZXMuCiAgICAgLy8gVmVydGljYWwgbWFyZ2lucyBiZXR3
ZWVuIGFkamFjZW50IGJsb2NrLWxldmVsIGJveGVzIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250
ZXh0IGNvbGxhcHNlLgogICAgIGlmIChhdXRvKiBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSBsYXlv
dXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCkpIHsKLSAgICAgICAgYXV0byYgcHJldmlvdXNJ
bkZsb3dEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpw
cmV2aW91c0luRmxvd1NpYmxpbmcpOworICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0Rpc3Bs
YXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKnByZXZp
b3VzSW5GbG93U2libGluZyk7CiAgICAgICAgIHJldHVybiBwcmV2aW91c0luRmxvd0Rpc3BsYXlC
b3guYm90dG9tKCkgKyBwcmV2aW91c0luRmxvd0Rpc3BsYXlCb3gubWFyZ2luQWZ0ZXIoKTsKICAg
ICB9Ci0gICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5
b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94VG9wKCk7CisgICAgcmV0dXJuIGZv
cm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRh
aW5pbmdCbG9jaygpKS5jb250ZW50Qm94VG9wKCk7CiB9CiAKIExheW91dFVuaXQgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbihjb25zdCBC
b3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NT
MjIvdmlzdXJlbi5odG1sI2Jsb2NrLWZvcm1hdHRpbmcKICAgICAvLyBJbiBhIGJsb2NrIGZvcm1h
dHRpbmcgY29udGV4dCwgZWFjaCBib3gncyBsZWZ0IG91dGVyIGVkZ2UgdG91Y2hlcyB0aGUgbGVm
dCBlZGdlIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIChmb3IgcmlnaHQtdG8tbGVmdCBmb3JtYXR0
aW5nLCByaWdodCBlZGdlcyB0b3VjaCkuCi0gICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZGlzcGxh
eUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94
TGVmdCgpICsgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCku
bWFyZ2luU3RhcnQoKTsKKyAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hMZWZ0
KCkgKyBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
KS5tYXJnaW5TdGFydCgpOwogfQogCiBQb2ludCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6c3RhdGljUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CkBAIC0yNjEs
NyArMjYyLDcgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm8KICAgICBIZWlnaHRBbmRNYXJnaW4g
aGVpZ2h0QW5kTWFyZ2luOwogICAgIC8vIEZJWE1FOiBMZXQncyBzcGVjaWFsIGNhc2UgdGhlIHRh
YmxlIGhlaWdodCBjb21wdXRhdGlvbiBmb3Igbm93IC0+IGZpZ3VyZSBvdXQgd2hldGhlciB0YWJs
ZXMgZmFsbCBpbnRvIHRoZSAiaW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4iIGNhdGVn
b3J5LgogICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNUYWJsZUZvcm1hdHRpbmdDb250ZXh0
KCkpIHsKLSAgICAgICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9udGFs
VmFsdWVzIHsgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3gu
Y29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07CisgICAgICAgIGF1dG8gdXNl
ZEhvcml6b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGZvcm1hdHRpbmdDb250
ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgICAgICBoZWlnaHRBbmRNYXJnaW4gPSBjb21wbGlj
YXRlZENhc2VzKGxheW91dEJveCwgdXNlZFZhbHVlcywgdXNlZEhvcml6b250YWxWYWx1ZXMpOwog
ICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzT3ZlcmZsb3dWaXNpYmxlKCkgJiYgIWxheW91dEJv
eC5pc0RvY3VtZW50Qm94KCkpIHsKICAgICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB0aGUgY2Fz
ZSBmb3IgdGhlIGRvY3VtZW50IGVsZW1lbnQuIExldCdzIGp1c3QgY29tcGxpY2F0ZWQtY2FzZSBp
dCBmb3Igbm93LgpAQCAtMjY5LDcgKzI3MCw3IEBAIEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJvCiAg
ICAgfSBlbHNlIHsKICAgICAgICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCiAgICAgICAg
IC8vIEJsb2NrLWxldmVsLCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hl
biAnb3ZlcmZsb3cnIGRvZXMgbm90IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChleGNlcHQgaWYgdGhl
ICdvdmVyZmxvdycgcHJvcGVydHkncyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRoZSB2
aWV3cG9ydCkuCi0gICAgICAgIGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB7IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0
Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OworICAgICAgICBhdXRv
IHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBmb3JtYXR0aW5n
Q29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxv
Y2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKICAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gY29t
cGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIHVzZWRWYWx1ZXMsIHVzZWRIb3Jpem9udGFsVmFsdWVz
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1h
dHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmlu
ZGV4IDczMGRhNTE4ZjM2OGE1MmY2NjNiMDJlM2UyNTY2Nzc3NTFkYzE2MmMuLjY1ZDEyZjkzOWFl
NWZmYjQxODUwNDA2MTk0NDQ5OTdlN2VhOTIxYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0UXVpcmtzLmNwcApAQCAtNjUsMTEgKzY1LDExIEBAIEhlaWdodEFuZE1hcmdpbiBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OnN0cmV0Y2hlZEluRmxvd0hlaWdodChjb25z
dCBCb3gmCiAgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpKTsKICAgICBBU1NFUlQobGF5
b3V0Qm94LmlzRG9jdW1lbnRCb3goKSB8fCBsYXlvdXRCb3guaXNCb2R5Qm94KCkpOwogCi0gICAg
YXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOworICAgIGF1dG8mIGZvcm1h
dHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKICAgICBhdXRvJiBkb2N1
bWVudEJveCA9IGxheW91dEJveC5pc0RvY3VtZW50Qm94KCkgPyBsYXlvdXRCb3ggOiAqbGF5b3V0
Qm94LnBhcmVudCgpOwotICAgIGF1dG8mIGRvY3VtZW50Qm94RGlzcGxheUJveCA9IGxheW91dFN0
YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZG9jdW1lbnRCb3gpOworICAgIGF1dG8mIGRvY3Vt
ZW50Qm94RGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goZG9jdW1lbnRCb3gpOwogCi0gICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0Rpc3Bs
YXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGluaXRpYWxDb250YWlu
aW5nQmxvY2sobGF5b3V0Qm94KSk7CisgICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0Rp
c3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGluaXRp
YWxDb250YWluaW5nQmxvY2sobGF5b3V0Qm94KSk7CiAgICAgYXV0byBzdHJlY2hlZEhlaWdodCA9
IGluaXRpYWxDb250YWluaW5nQmxvY2tEaXNwbGF5Qm94LmNvbnRlbnRCb3hIZWlnaHQoKTsKICAg
ICBzdHJlY2hlZEhlaWdodCAtPSBkb2N1bWVudEJveERpc3BsYXlCb3gudmVydGljYWxCb3JkZXIo
KSArIGRvY3VtZW50Qm94RGlzcGxheUJveC52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDApOwog
CkBAIC04MiwxNCArODIsMTQgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0IEJveCYKICAgICAgICAgLy8g
SGVyZSBpcyB0aGUgcXVpcmt5IHBhcnQgZm9yIGJvZHkgYm94OgogICAgICAgICAvLyBTdHJldGNo
IHRoZSBib2R5IHVzaW5nIHRoZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sncyBoZWlnaHQgYW5k
IHNocmluayBpdCB3aXRoIGRvY3VtZW50IGJveCdzIG1hcmdpbi9ib3JkZXIvcGFkZGluZy4KICAg
ICAgICAgLy8gVGhpcyBsb29rcyBleHRyZW1lbHkgb2RkIHdoZW4gaHRtbCBoYXMgbm9uLWF1dG8g
aGVpZ2h0LgotICAgICAgICBhdXRvIGRvY3VtZW50Qm94VmVydGljYWxNYXJnaW4gPSBHZW9tZXRy
eShmb3JtYXR0aW5nQ29udGV4dCgpKS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKGRvY3VtZW50Qm94
LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGluaXRpYWxDb250YWluaW5nQmxvY2tEaXNwbGF5Qm94
LmNvbnRlbnRCb3hXaWR0aCgpIH0pOworICAgICAgICBhdXRvIGRvY3VtZW50Qm94VmVydGljYWxN
YXJnaW4gPSBHZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bihkb2N1bWVudEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgeyBpbml0aWFsQ29udGFpbmluZ0Js
b2NrRGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKSB9KTsKICAgICAgICAgc3RyZWNoZWRIZWln
aHQgLT0gKGRvY3VtZW50Qm94VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyBkb2N1
bWVudEJveFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkpOwogCi0gICAgICAgIGF1dG8m
IGJvZHlCb3hEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOworICAgICAgICBhdXRvJiBib2R5Qm94RGlzcGxheUJveCA9IGZvcm1hdHRpbmdD
b250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICAgICAgc3RyZWNo
ZWRIZWlnaHQgLT0gYm9keUJveERpc3BsYXlCb3gudmVydGljYWxCb3JkZXIoKSArIGJvZHlCb3hE
aXNwbGF5Qm94LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CiAKICAgICAgICAgYXV0byBu
b25Db2xsYXBzZWRNYXJnaW4gPSBoZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luOwot
ICAgICAgICBhdXRvIGNvbGxhcHNlZE1hcmdpbiA9IE1hcmdpbkNvbGxhcHNlKGZvcm1hdHRpbmdD
b250ZXh0KCkpLmNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGxheW91dEJveCwgbm9uQ29sbGFwc2Vk
TWFyZ2luKTsKKyAgICAgICAgYXV0byBjb2xsYXBzZWRNYXJnaW4gPSBNYXJnaW5Db2xsYXBzZShm
b3JtYXR0aW5nQ29udGV4dCkuY29sbGFwc2VkVmVydGljYWxWYWx1ZXMobGF5b3V0Qm94LCBub25D
b2xsYXBzZWRNYXJnaW4pOwogICAgICAgICB0b3RhbFZlcnRpY2FsTWFyZ2luID0gY29sbGFwc2Vk
TWFyZ2luLmJlZm9yZS52YWx1ZU9yKG5vbkNvbGxhcHNlZE1hcmdpbi5iZWZvcmUpOwogICAgICAg
ICB0b3RhbFZlcnRpY2FsTWFyZ2luICs9IGNvbGxhcHNlZE1hcmdpbi5pc0NvbGxhcHNlZFRocm91
Z2ggPyBub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIgOiBjb2xsYXBzZWRNYXJnaW4uYWZ0ZXIudmFs
dWVPcihub25Db2xsYXBzZWRNYXJnaW4uYWZ0ZXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFw
c2UuY3BwCmluZGV4IDViMmFmYjMxYzBjYWM1NjlmN2M3MjEyYWU5N2UxYzE1ZjMyNzFhNWMuLjQ5
YjBlN2M3MmM0NGE1YmE1NWY4ZWVhNjg5NTk1ODRkN2Q2ZDhmZmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNv
bGxhcHNlLmNwcApAQCAtNzAsMTEgKzcwLDExIEBAIHN0YXRpYyBib29sIGhhc1BhZGRpbmdBZnRl
cihjb25zdCBCb3gmIGxheW91dEJveCkKICAgICByZXR1cm4gaGFzUGFkZGluZyhsYXlvdXRCb3gu
c3R5bGUoKS5wYWRkaW5nQWZ0ZXIoKSk7CiB9CiAKLXN0YXRpYyBib29sIGhhc0NsZWFyYW5jZShj
b25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorc3Rh
dGljIGJvb2wgaGFzQ2xlYXJhbmNlKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5n
Q29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgaWYgKCFsYXlvdXRCb3guaGFz
RmxvYXRDbGVhcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGxheW91dFN0
YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5oYXNDbGVhcmFuY2UoKTsKKyAg
ICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRC
b3gpLmhhc0NsZWFyYW5jZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlc3RhYmxpc2hlc0Jsb2NrRm9y
bWF0dGluZ0NvbnRleHQoY29uc3QgQm94JiBsYXlvdXRCb3gpCkBAIC0xNDEsNyArMTQxLDcgQEAg
Ym9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3Jl
Q29sbGFwc2VzV2l0aFBhcmVudE1hcmcKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
Li4uYW5kIHRoZSBjaGlsZCBoYXMgbm8gY2xlYXJhbmNlLgotICAgIGlmIChoYXNDbGVhcmFuY2Uo
bGF5b3V0U3RhdGUoKSwgbGF5b3V0Qm94KSkKKyAgICBpZiAoaGFzQ2xlYXJhbmNlKGZvcm1hdHRp
bmdDb250ZXh0KCksIGxheW91dEJveCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpCiAK
ICAgICAvLyBUaGUgYm90dG9tIG1hcmdpbiBvZiBhbiBpbi1mbG93IGJsb2NrLWxldmVsIGVsZW1l
bnQgYWx3YXlzIGNvbGxhcHNlcyB3aXRoIHRoZSB0b3AgbWFyZ2luIG9mCiAgICAgLy8gaXRzIG5l
eHQgaW4tZmxvdyBibG9jay1sZXZlbCBzaWJsaW5nLCB1bmxlc3MgdGhhdCBzaWJsaW5nIGhhcyBj
bGVhcmFuY2UuCi0gICAgaWYgKGhhc0NsZWFyYW5jZShsYXlvdXRTdGF0ZSgpLCBsYXlvdXRCb3gp
KQorICAgIGlmIChoYXNDbGVhcmFuY2UoZm9ybWF0dGluZ0NvbnRleHQoKSwgbGF5b3V0Qm94KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDksNyArMjA5
LDcgQEAgYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2lu
QmVmb3JlQ29sbGFwc2VzV2l0aEZpcnN0SW5GbG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gLi4uYW5kIHRoZSBjaGlsZCBoYXMgbm8gY2xlYXJhbmNlLgotICAgIGlmIChoYXNDbGVh
cmFuY2UobGF5b3V0U3RhdGUoKSwgZmlyc3RJbkZsb3dDaGlsZCkpCisgICAgaWYgKGhhc0NsZWFy
YW5jZShmb3JtYXR0aW5nQ29udGV4dCgpLCBmaXJzdEluRmxvd0NoaWxkKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gTWFyZ2lucyBvZiBpbmxpbmUtYmxvY2sgYm94ZXMgZG8gbm90
IGNvbGxhcHNlLgpAQCAtMjI5LDcgKzIyOSw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFNpYmxpbmdNYXJnCiAg
ICAgZm9yIChhdXRvKiBwcmV2aW91c1NpYmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dT
aWJsaW5nKCk7IHByZXZpb3VzU2libGluZzsgcHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNTaWJs
aW5nLT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW1hcmdpbnNDb2xs
YXBzZVRocm91Z2goKnByZXZpb3VzU2libGluZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChoYXNDbGVhcmFuY2UobGF5b3V0U3RhdGUoKSwgKnByZXZpb3VzU2libGlu
ZykpCisgICAgICAgIGlmIChoYXNDbGVhcmFuY2UoZm9ybWF0dGluZ0NvbnRleHQoKSwgKnByZXZp
b3VzU2libGluZykpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzM5LDcgKzMzOSw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aExhc3RJbkZsb3dDCiAgICAg
Ly8gbm9yIChpZiB0aGUgYm94J3MgbWluLWhlaWdodCBpcyBub24temVybykgd2l0aCB0aGUgYm94
J3MgdG9wIG1hcmdpbi4KICAgICBhdXRvIGNvbXB1dGVkTWluSGVpZ2h0ID0gbGF5b3V0Qm94LnN0
eWxlKCkubG9naWNhbE1pbkhlaWdodCgpOwogICAgIGlmICghY29tcHV0ZWRNaW5IZWlnaHQuaXNB
dXRvKCkgJiYgY29tcHV0ZWRNaW5IZWlnaHQudmFsdWUoKQotICAgICAgICAmJiAobWFyZ2luQWZ0
ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGxhc3RJbkZsb3dDaGlsZCkgfHwgaGFz
Q2xlYXJhbmNlKGxheW91dFN0YXRlKCksIGxhc3RJbkZsb3dDaGlsZCkpKQorICAgICAgICAmJiAo
bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGxhc3RJbkZsb3dDaGls
ZCkgfHwgaGFzQ2xlYXJhbmNlKGZvcm1hdHRpbmdDb250ZXh0KCksIGxhc3RJbkZsb3dDaGlsZCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBNYXJnaW5zIG9mIGlubGluZS1ibG9j
ayBib3hlcyBkbyBub3QgY29sbGFwc2UuCkBAIC00NzIsMTEgKzQ3MiwxMSBAQCB2b2lkIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjp1cGRhdGVNYXJnaW5BZnRlckZvclBy
ZXZpb3VzU2libGluZwogICAgIGF1dG8qIGN1cnJlbnRCb3ggPSAmbGF5b3V0Qm94OwogICAgIHdo
aWxlIChtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2luQWZ0ZXIo
KmN1cnJlbnRCb3gpKSB7CiAgICAgICAgIGF1dG8mIHByZXZpb3VzU2libGluZyA9ICpjdXJyZW50
Qm94LT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKLSAgICAgICAgYXV0byYgcHJldmlvdXNTaWJs
aW5nRGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocHJldmlv
dXNTaWJsaW5nKTsKKyAgICAgICAgYXV0byYgcHJldmlvdXNTaWJsaW5nRGlzcGxheUJveCA9IGZv
cm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveChwcmV2aW91c1NpYmxpbmcp
OwogICAgICAgICBhdXRvIHByZXZpb3VzU2libGluZ1ZlcnRpY2FsTWFyZ2luID0gcHJldmlvdXNT
aWJsaW5nRGlzcGxheUJveC52ZXJ0aWNhbE1hcmdpbigpOwogCiAgICAgICAgIGF1dG8gY29sbGFw
c2VkVmVydGljYWxNYXJnaW5CZWZvcmUgPSBwcmV2aW91c1NpYmxpbmdWZXJ0aWNhbE1hcmdpbi5j
b2xsYXBzZWRWYWx1ZXMoKS5iZWZvcmU7Ci0gICAgICAgIGF1dG8gY29sbGFwc2VkVmVydGljYWxN
YXJnaW5BZnRlciA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmN1cnJlbnRC
b3gpLnZlcnRpY2FsTWFyZ2luKCkuYmVmb3JlKCk7CisgICAgICAgIGF1dG8gY29sbGFwc2VkVmVy
dGljYWxNYXJnaW5BZnRlciA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91
dEJveCgqY3VycmVudEJveCkudmVydGljYWxNYXJnaW4oKS5iZWZvcmUoKTsKIAogICAgICAgICBh
dXRvIG1hcmdpbnNDb2xsYXBzZVRocm91Z2ggPSB0aGlzLT5tYXJnaW5zQ29sbGFwc2VUaHJvdWdo
KHByZXZpb3VzU2libGluZyk7CiAgICAgICAgIGlmIChtYXJnaW5zQ29sbGFwc2VUaHJvdWdoKQpA
QCAtNTE0LDcgKzUxNCw3IEBAIFBvc2l0aXZlQW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbjo6VmFs
dWVzIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlCiAgICAgICAgIHJldHVy
biBtYXJnaW5UeXBlID09IE1hcmdpblR5cGU6OkJlZm9yZSA/IHBvc2l0aXZlQW5kTmVnYXRpdmVW
ZXJ0aWNhbE1hcmdpbi5iZWZvcmUgOiBwb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxNYXJnaW4u
YWZ0ZXI7IAogICAgIH0KICAgICAvLyBUaGlzIGlzIHRoZSBlc3RpbWF0ZSBwYXRoLiBXZSBkb24n
dCB5ZXQgaGF2ZSBwb3NpdGl2ZS9uZWdhdGl2ZSBtYXJnaW4gY29tcHV0ZWQuCi0gICAgYXV0byB1
c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0
aCgpIH07CisgICAgYXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBmb3Jt
YXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWlu
aW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKICAgICBhdXRvIGNvbXB1dGVkVmVydGlj
YWxNYXJnaW4gPSBHZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCgpKS5jb21wdXRlZFZlcnRpY2Fs
TWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgYXV0byBub25Db2xsYXBzZWRNYXJn
aW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0
ZXIudmFsdWVPcigwKSB9OyAKIApAQCAtNTgyLDcgKzU4Miw3IEBAIEVzdGltYXRlZE1hcmdpbkJl
Zm9yZSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6ZXN0aW1hdGVkTWFy
Z2luQmVmCiAgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygpIHx8IGxheW91dEJveC5pc0Zs
b2F0aW5nUG9zaXRpb25lZCgpKTsKICAgICBBU1NFUlQoIWxheW91dEJveC5yZXBsYWNlZCgpKTsK
IAotICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgbGF5b3V0U3Rh
dGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkp
LmNvbnRlbnRCb3hXaWR0aCgpIH07CisgICAgYXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250
YWxWYWx1ZXMgeyBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKICAgICBhdXRv
IGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCgpKS5j
b21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgYXV0byBu
b25Db2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVl
cyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwogICAgIGF1dG8gbWFyZ2luc0NvbGxhcHNl
VGhyb3VnaCA9IHRoaXMtPm1hcmdpbnNDb2xsYXBzZVRocm91Z2gobGF5b3V0Qm94KTsKQEAgLTYw
NCw3ICs2MDQsNyBAQCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjptYXJnaW5CZWZvcmVJZ25vcmluZ0NvbGxhcHNpbgogdm9pZCBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6dXBkYXRlUG9zaXRpdmVOZWdhdGl2ZU1hcmdpblZh
bHVlcyhjb25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQmxv
Y2tMZXZlbEJveCgpKTsKLSAgICBhdXRvIG5vbkNvbGxhcHNlZFZhbHVlcyA9IGxheW91dFN0YXRl
KCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLnZlcnRpY2FsTWFyZ2luKCkubm9u
Q29sbGFwc2VkVmFsdWVzKCk7CisgICAgYXV0byBub25Db2xsYXBzZWRWYWx1ZXMgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS52ZXJ0aWNhbE1h
cmdpbigpLm5vbkNvbGxhcHNlZFZhbHVlcygpOwogCiAgICAgYXV0byBwb3NpdGl2ZU5lZ2F0aXZl
TWFyZ2luQmVmb3JlID0gdGhpcy0+cG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZShsYXlvdXRC
b3gsIG5vbkNvbGxhcHNlZFZhbHVlcyk7CiAgICAgYXV0byBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2lu
QWZ0ZXIgPSB0aGlzLT5wb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQWZ0ZXIobGF5b3V0Qm94LCBub25D
b2xsYXBzZWRWYWx1ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4
IDBkZDFiYzBiYTQ5OThhOTY1MWU1MWI3ZDA4ZDFmZTFmYzQ4YWJhZWYuLmRlOTc2MmY0ZWVhNTRh
M2UwY2NmNDQyYjk1YzZkMDVhZmE1OTYwNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
bGF5b3V0KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRp
bmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltTdGFydF0gLT4gaW5saW5lIGZvcm1hdHRpbmcg
Y29udGV4dCAtPiBmb3JtYXR0aW5nIHJvb3QoIiA8PCAmcm9vdCA8PCAiKSIpOwotICAgIGF1dG8g
YXZhaWxhYmxlV2lkdGggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocm9v
dCkuY29udGVudEJveFdpZHRoKCk7CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGRpc3BsYXlC
b3hGb3JMYXlvdXRCb3gocm9vdCkuY29udGVudEJveFdpZHRoKCk7CiAgICAgYXV0byB1c2VkVmFs
dWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBhdmFpbGFibGVXaWR0aCB9OwogICAgIGF1dG8q
IGxheW91dEJveCA9IHJvb3QuZmlyc3RJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKICAgICAvLyBD
b21wdXRlIHdpZHRoL2hlaWdodCBmb3Igbm9uLXRleHQgY29udGVudCBhbmQgbWFyZ2luL2JvcmRl
ci9wYWRkaW5nIGZvciBpbmxpbmUgY29udGFpbmVycy4KQEAgLTEzOCw3ICsxMzgsNyBAQCBGb3Jt
YXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZWRJbgogICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG1pbi9tYXggZm9y
bWF0dGluZyByb290IHdpZHRoIHZhbHVlcyBiZWZvcmUgZm9ybWF0dGluZyB0aGUgbGluZXMuCiAg
ICAgICAgIGZvciAoYXV0byogZm9ybWF0dGluZ1Jvb3QgOiBmb3JtYXR0aW5nQ29udGV4dFJvb3RM
aXN0KSB7CiAgICAgICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRocyA9IGxheW91dFN0YXRlLmZv
cm1hdHRpbmdTdGF0ZUZvckJveCgqZm9ybWF0dGluZ1Jvb3QpLmludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHNGb3JCb3goKmZvcm1hdHRpbmdSb290KTsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlC
b3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5nUm9vdCk7
CisgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveCgq
Zm9ybWF0dGluZ1Jvb3QpOwogICAgICAgICAgICAgYXV0byBjb250ZW50V2lkdGggPSAoYXZhaWxh
YmxlV2lkdGggPyBpbnRyaW5zaWNXaWR0aHMtPm1heGltdW0gOiBpbnRyaW5zaWNXaWR0aHMtPm1p
bmltdW0pIC0gZGlzcGxheUJveC5ob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpOwog
ICAgICAgICAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgoY29udGVudFdpZHRoKTsK
ICAgICAgICAgfQpAQCAtMTUzLDcgKzE1Myw3IEBAIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEluCiB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTWFyZ2luQm9yZGVyQW5kUGFk
ZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgQVNT
RVJUKGxheW91dEJveC5pc0Fub255bW91cygpIHx8IGxheW91dEJveC5pc0xpbmVCcmVha0JveCgp
KTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KTsKIAogICAgIGRpc3BsYXlCb3guc2V0VmVydGljYWxNYXJnaW4o
eyB7IH0sIHsgfSB9KTsKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsK
QEAgLTE2NiwxMyArMTY2LDEyIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9ySW5saW5lQ29udGFpbmVyKGNvCiAgICAgY29tcHV0
ZUhvcml6b250YWxNYXJnaW4oY29udGFpbmVyLCB1c2VkVmFsdWVzKTsKICAgICBjb21wdXRlQm9y
ZGVyQW5kUGFkZGluZyhjb250YWluZXIsIHVzZWRWYWx1ZXMpOwogICAgIC8vIElubGluZSBjb250
YWluZXJzICg8c3Bhbj4pIGhhdmUgMCB2ZXJ0aWNhbCBtYXJnaW5zLgotICAgIGxheW91dFN0YXRl
KCkuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluZXIpLnNldFZlcnRpY2FsTWFyZ2luKHsg
eyB9LCB7IH0gfSk7CisgICAgZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluZXIpLnNldFZl
cnRpY2FsTWFyZ2luKHsgeyB9LCB7IH0gfSk7CiB9CiAKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYg
Zm9ybWF0dGluZ1Jvb3QpCiB7CiAgICAgQVNTRVJUKGZvcm1hdHRpbmdSb290LmVzdGFibGlzaGVz
Rm9ybWF0dGluZ0NvbnRleHQoKSk7Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlv
dXRTdGF0ZSgpOwogCiAgICAgYXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMg
eyB9OwogICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGZvcm1hdHRpbmdSb290LCB1c2VkVmFs
dWVzKTsKQEAgLTE4MiwyMyArMTgxLDIyIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KGNvbnN0IEJveCYKICAgICBp
ZiAoYXV0byBmaXhlZFdpZHRoID0gZ2VvbWV0cnkoKS5maXhlZFZhbHVlKGZvcm1hdHRpbmdSb290
LnN0eWxlKCkubG9naWNhbFdpZHRoKCkpKQogICAgICAgICBjb25zdHJhaW50cyA9IHsgKmZpeGVk
V2lkdGgsICpmaXhlZFdpZHRoIH07CiAgICAgZWxzZQotICAgICAgICBjb25zdHJhaW50cyA9IGxh
eW91dFN0YXRlLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdSb290KS0+Y29tcHV0
ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CisgICAgICAgIGNvbnN0cmFpbnRzID0gbGF5
b3V0U3RhdGUoKS5jcmVhdGVGb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nUm9vdCktPmNvbXB1
dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOwogICAgIGNvbnN0cmFpbnRzID0gZ2VvbWV0
cnkoKS5jb25zdHJhaW5CeU1pbk1heFdpZHRoKGZvcm1hdHRpbmdSb290LCBjb25zdHJhaW50cyk7
Ci0gICAgY29uc3RyYWludHMuZXhwYW5kKGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goZm9ybWF0dGluZ1Jvb3QpLmhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkpOwor
ICAgIGNvbnN0cmFpbnRzLmV4cGFuZChkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZvcm1hdHRpbmdS
b290KS5ob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpKTsKICAgICBmb3JtYXR0aW5n
U3RhdGUoKS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGZvcm1hdHRpbmdSb290
LCBjb25zdHJhaW50cyk7CiB9CiAKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB1c2VkVmFsdWVzKQogewogICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0g
Z2VvbWV0cnkoKS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVz
KTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxDb21wdXRl
ZE1hcmdpbihjb21wdXRlZEhvcml6b250YWxNYXJnaW4pOwogICAgIGRpc3BsYXlCb3guc2V0SG9y
aXpvbnRhbE1hcmdpbih7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDAp
LCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfSk7CiB9CiAKIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gm
IGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgdXNlZFZhbHVlcykKIHsKLSAgICBhdXRv
JiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgV2lkdGhBbmRNYXJnaW4g
d2lkdGhBbmRNYXJnaW47CiAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgp
KQogICAgICAgICB3aWR0aEFuZE1hcmdpbiA9IGdlb21ldHJ5KCkuZmxvYXRpbmdXaWR0aEFuZE1h
cmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwpAQCAtMjA5LDcgKzIwNyw3IEBAIHZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxh
eW91dEJveCwgVXNlZEhvCiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlv
dXRCb3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aCh3aWR0
aEFuZE1hcmdpbi53aWR0aCk7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHdp
ZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4pOwogICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbENv
bXB1dGVkTWFyZ2luKHdpZHRoQW5kTWFyZ2luLmNvbXB1dGVkTWFyZ2luKTsKQEAgLTIxNywxMSAr
MjE1LDkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFy
Z2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG8KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCkKIHsK
LSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7Ci0KICAgICBIZWln
aHRBbmRNYXJnaW4gaGVpZ2h0QW5kTWFyZ2luOwogICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGlu
Z1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5mbG9h
dGluZ0hlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gsIHsgfSwgVXNlZEhvcml6b250YWxWYWx1ZXMg
eyBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmlu
Z0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH0pOworICAgICAgICBoZWlnaHRBbmRNYXJnaW4g
PSBnZW9tZXRyeSgpLmZsb2F0aW5nSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgeyB9LCBVc2Vk
SG9yaXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250
YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfSk7CiAgICAgZWxzZSBpZiAobGF5b3V0
Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKICAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gZ2VvbWV0
cnkoKS5pbmxpbmVCbG9ja0hlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gpOwogICAgIGVsc2UgaWYg
KGxheW91dEJveC5yZXBsYWNlZCgpKQpAQCAtMjI5LDcgKzIyNSw3IEBAIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRC
b3gpCiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgIGF1dG8m
IGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJv
eCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0QW5kTWFyZ2lu
LmhlaWdodCk7CiAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IGhlaWdodEFuZE1h
cmdpbi5ub25Db2xsYXBzZWRNYXJnaW4sIHsgfSB9KTsKIH0KQEAgLTI0Miw3ICsyMzgsNyBAQCB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29udGV4dFJvb3Qo
Y29uc3QgQm94JiByb290LCBVc2VkSAogICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKHJvb3Qs
IHVzZWRWYWx1ZXMpOwogICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihyb290LCB1c2VkVmFsdWVz
KTsKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gc3RhdGljIHBvc2l0aW9uaW5nIGluIGJsb2Nr
IGZvcm1hdHRpbmcgY29udGV4dC4gV2UganVzdCBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHRvcCBs
ZWZ0IHBvc2l0aW9uLgotICAgIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChy
b290KS5zZXRUb3BMZWZ0KHsgMCwgMCB9KTsKKyAgICBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJv
b3QpLnNldFRvcExlZnQoeyAwLCAwIH0pOwogICAgIC8vIFN3aWNoIG92ZXIgdG8gdGhlIG5ldyBm
b3JtYXR0aW5nIGNvbnRleHQgKHRoZSBvbmUgdGhhdCB0aGUgcm9vdCBjcmVhdGVzKS4KICAgICBh
dXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gbGF5b3V0U3RhdGUoKS5jcmVhdGVGb3JtYXR0aW5nQ29u
dGV4dChyb290KTsKICAgICBmb3JtYXR0aW5nQ29udGV4dC0+bGF5b3V0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IDQ5NzcyMTcyNGJh
NzhjYmY4MzdlNjM5NzZkYWY1Y2UxNjIxMmQ2MGQuLmVjNTI4ZTU1ZGQyODZjMTk0MGM5NjY2N2E0
MWRkNTllNDZkYWUwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCkBAIC03Myw3ICs3Myw3IEBAIEhlaWdodEFuZE1hcmdpbiBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGNvCiAK
ICAgICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQgY2FzZXMKICAgICAvLyAtICdJbmxpbmUtYmxvY2sn
LCBub24tcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9
IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07Cisg
ICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9y
bWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFp
bmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07CiAgICAgcmV0dXJuIGNvbXBsaWNhdGVk
Q2FzZXMobGF5b3V0Qm94LCB7IH0sIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKaW5kZXggNTVh
NWY2YWQyNmZhMWU1ZGFmMGQwNGI1NzQzMjgwMWEyZDYyMWIyMC4uOTZmMzE4MWU0ZTEwY2U4Nzlk
MGQ2OTc5OWY1MWQ1NjMyNzc2ZmRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCkBAIC00MSw3ICs0MSw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotc3RhdGljIExheW91dFVuaXQgaW5saW5lSXRl
bVdpZHRoKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lSXRlbSYg
aW5saW5lSXRlbSwgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCitzdGF0aWMgTGF5b3V0
VW5pdCBpbmxpbmVJdGVtV2lkdGgoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdD
b250ZXh0LCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGNvbnRlbnRM
b2dpY2FsTGVmdCkKIHsKICAgICBpZiAoaW5saW5lSXRlbS5pc0xpbmVCcmVhaygpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTUzLDggKzUzLDggQEAgc3RhdGljIExheW91dFVuaXQgaW5saW5lSXRl
bVdpZHRoKGNvbnN0IExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lSXQKICAg
ICB9CiAKICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOwotICAg
IEFTU0VSVChsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGxheW91dEJveCkpOwotICAgIGF1dG8m
IGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJv
eCk7CisgICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0Lmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94
KSk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKIAogICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bv
c2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luQm94V2lkdGgoKTsK
QEAgLTEwMCwxMiArMTAwLDEyIEBAIHN0cnVjdCBMaW5lQ29udGVudCB7CiAKIGNsYXNzIExpbmVM
YXlvdXQgewogcHVibGljOgotICAgIExpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmLCBMYXlvdXRTdGF0ZSYsIGNvbnN0IExpbmVJbnB1dCYpOworICAgIExpbmVMYXlvdXQo
Y29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBMaW5lSW5wdXQmKTsKIAogICAg
IExpbmVDb250ZW50IGxheW91dCgpOwogCiBwcml2YXRlOgotICAgIGNvbnN0IExheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0U3RhdGU7IH0KKyAgICBjb25z
dCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OyB9CiAgICAgZW51bSBjbGFzcyBJc0VuZE9m
TGluZSB7IE5vLCBZZXMgfTsKICAgICBJc0VuZE9mTGluZSBwbGFjZUlubGluZUl0ZW0oY29uc3Qg
SW5saW5lSXRlbSYpOwogICAgIHZvaWQgY29tbWl0UGVuZGluZ0NvbnRlbnQoKTsKQEAgLTEyOSw3
ICsxMjksNyBAQCBwcml2YXRlOgogICAgICAgICBMYXlvdXRVbml0IG1fd2lkdGg7CiAgICAgfTsK
IAotICAgIExheW91dFN0YXRlJiBtX2xheW91dFN0YXRlOworICAgIGNvbnN0IElubGluZUZvcm1h
dHRpbmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwogICAgIGNvbnN0IExpbmVJ
bnB1dCYgbV9saW5lSW5wdXQ7CiAgICAgTGluZSBtX2xpbmU7CiAgICAgTGluZUJyZWFrZXIgbV9s
aW5lQnJlYWtlcjsKQEAgLTE1Myw4ICsxNTMsOCBAQCB2b2lkIExpbmVMYXlvdXQ6OlVuY29tbWl0
dGVkQ29udGVudDo6cmVzZXQoKQogICAgIG1fd2lkdGggPSAwOwogfQogCi1MaW5lTGF5b3V0OjpM
aW5lTGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCwgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBMaW5lSW5wdXQmIGxpbmVJ
bnB1dCkKLSAgICA6IG1fbGF5b3V0U3RhdGUobGF5b3V0U3RhdGUpCitMaW5lTGF5b3V0OjpMaW5l
TGF5b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCwgY29uc3QgTGluZUlucHV0JiBsaW5lSW5wdXQpCisgICAgOiBtX2lubGluZUZvcm1hdHRp
bmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQogICAgICwgbV9saW5lSW5wdXQobGlu
ZUlucHV0KQogICAgICwgbV9saW5lKGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBsaW5lSW5wdXQu
aW5pdGlhbENvbnN0cmFpbnRzLCBsaW5lSW5wdXQuc2tpcFZlcnRpY2FsQWxpZ21lbnQpCiAgICAg
LCBtX2xpbmVIYXNGbG9hdEJveChsaW5lSW5wdXQuZmxvYXRNaW5pbXVtTG9naWNhbEJvdHRvbS5o
YXNWYWx1ZSgpKQpAQCAtMTkwLDcgKzE5MCw3IEBAIExpbmVMYXlvdXQ6OklzRW5kT2ZMaW5lIExp
bmVMYXlvdXQ6OnBsYWNlSW5saW5lSXRlbShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtCiB7
CiAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IG1fbGluZS5hdmFpbGFibGVXaWR0aCgpIC0gbV91
bmNvbW1pdHRlZENvbnRlbnQud2lkdGgoKTsKICAgICBhdXRvIGN1cnJlbnRMb2dpY2FsUmlnaHQg
PSBtX2xpbmUuY29udGVudExvZ2ljYWxSaWdodCgpICsgbV91bmNvbW1pdHRlZENvbnRlbnQud2lk
dGgoKTsKLSAgICBhdXRvIGl0ZW1Mb2dpY2FsV2lkdGggPSBpbmxpbmVJdGVtV2lkdGgobGF5b3V0
U3RhdGUoKSwgaW5saW5lSXRlbSwgY3VycmVudExvZ2ljYWxSaWdodCk7CisgICAgYXV0byBpdGVt
TG9naWNhbFdpZHRoID0gaW5saW5lSXRlbVdpZHRoKGZvcm1hdHRpbmdDb250ZXh0KCksIGlubGlu
ZUl0ZW0sIGN1cnJlbnRMb2dpY2FsUmlnaHQpOwogCiAgICAgLy8gRklYTUU6IEVuc3VyZSBMaW5l
Q29udGV4dDo6dHJpbW1hYmxlV2lkdGggaW5jbHVkZXMgdW5jb21taXR0ZWQgY29udGVudCBpZiBu
ZWVkZWQuCiAgICAgYXV0byBsaW5lSXNDb25zaWRlcmVkRW1wdHkgPSAhbV9saW5lLmhhc0NvbnRl
bnQoKSAmJiAhbV9saW5lSGFzRmxvYXRCb3g7CkBAIC0yMTgsOSArMjE4LDkgQEAgTGluZUxheW91
dDo6SXNFbmRPZkxpbmUgTGluZUxheW91dDo6cGxhY2VJbmxpbmVJdGVtKGNvbnN0IElubGluZUl0
ZW0mIGlubGluZUl0ZW0KICAgICBBU1NFUlQoYnJlYWtpbmdDb250ZXh0LmJyZWFraW5nQmVoYXZp
b3IgPT0gTGluZUJyZWFrZXI6OkJyZWFraW5nQmVoYXZpb3I6OktlZXApOwogICAgIGlmIChpbmxp
bmVJdGVtLmlzRmxvYXQoKSkgewogICAgICAgICBhdXRvJiBmbG9hdEJveCA9IGlubGluZUl0ZW0u
bGF5b3V0Qm94KCk7Ci0gICAgICAgIEFTU0VSVChsYXlvdXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3go
ZmxvYXRCb3gpKTsKKyAgICAgICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0KCkuaGFzRGlzcGxh
eUJveChmbG9hdEJveCkpOwogICAgICAgICAvLyBTaHJpbmsgYXZhaWxhYmxlIHNwYWNlIGZvciBj
dXJyZW50IGxpbmUgYW5kIG1vdmUgZXhpc3RpbmcgaW5saW5lIHJ1bnMuCi0gICAgICAgIGF1dG8g
ZmxvYXRCb3hXaWR0aCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChmbG9h
dEJveCkubWFyZ2luQm94V2lkdGgoKTsKKyAgICAgICAgYXV0byBmbG9hdEJveFdpZHRoID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KS5tYXJnaW5C
b3hXaWR0aCgpOwogICAgICAgICBmbG9hdEJveC5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSA/
IG1fbGluZS5tb3ZlTG9naWNhbExlZnQoZmxvYXRCb3hXaWR0aCkgOiBtX2xpbmUubW92ZUxvZ2lj
YWxSaWdodChmbG9hdEJveFdpZHRoKTsKICAgICAgICAgbV9mbG9hdHMuYXBwZW5kKG1ha2VXZWFr
UHRyKGlubGluZUl0ZW0pKTsKICAgICAgICAgKyttX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudDsK
QEAgLTI3OSw4ICsyNzksOSBAQCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0
OjpJbmxpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleAogdm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0OjpsYXlvdXQoY29uc3QgSW5saW5lSXRlbXMm
IGlubGluZUl0ZW1zLCBMYXlvdXRVbml0IHdpZHRoQ29uc3RyYWludCkgY29uc3QKIHsKICAgICBh
dXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgZm9ybWF0
dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwogICAgIGF1dG8mIGZvcm1h
dHRpbmdSb290ID0gdGhpcy0+Zm9ybWF0dGluZ1Jvb3QoKTsKLSAgICBhdXRvJiBmb3JtYXR0aW5n
Um9vdERpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZvcm1h
dHRpbmdSb290KTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nUm9vdERpc3BsYXlCb3ggPSBmb3JtYXR0
aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZvcm1hdHRpbmdSb290KTsKICAgICBh
dXRvJiBmbG9hdGluZ1N0YXRlID0gbGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3Rh
dGUoZm9ybWF0dGluZ1Jvb3QpLmZsb2F0aW5nU3RhdGUoKTsKIAogICAgIGF1dG8gbGluZUxvZ2lj
YWxUb3AgPSBmb3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJveFRvcCgpOwpAQCAtMzIz
LDExICszMjQsMTEgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0
OjpsYXlvdXQoY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW0KICAgICB9OwogCiAgICAgSW5k
ZXhBbmRSYW5nZSBjdXJyZW50SW5saW5lSXRlbTsKLSAgICBhdXRvIHF1aXJrcyA9IFF1aXJrcyhm
b3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICBhdXRvIHF1aXJrcyA9IFF1aXJrcyhmb3JtYXR0aW5n
Q29udGV4dCk7CiAgICAgd2hpbGUgKGN1cnJlbnRJbmxpbmVJdGVtLmluZGV4IDwgaW5saW5lSXRl
bXMuc2l6ZSgpKSB7CiAgICAgICAgIGF1dG8gbGluZUlucHV0ID0gTGluZUlucHV0IHsgeyB7IGxp
bmVMb2dpY2FsTGVmdCwgbGluZUxvZ2ljYWxUb3AgfSwgd2lkdGhDb25zdHJhaW50LCBxdWlya3Mu
bGluZUhlaWdodENvbnN0cmFpbnRzKGZvcm1hdHRpbmdSb290KSB9LCBMaW5lOjpTa2lwVmVydGlj
YWxBbGlnbWVudDo6Tm8sIGN1cnJlbnRJbmxpbmVJdGVtLCBpbmxpbmVJdGVtcyB9OwogICAgICAg
ICBhcHBseUZsb2F0Q29uc3RyYWludChsaW5lSW5wdXQpOwotICAgICAgICBhdXRvIGxpbmVDb250
ZW50ID0gTGluZUxheW91dChmb3JtYXR0aW5nQ29udGV4dCgpLCBsYXlvdXRTdGF0ZSwgbGluZUlu
cHV0KS5sYXlvdXQoKTsKKyAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IExpbmVMYXlvdXQoZm9y
bWF0dGluZ0NvbnRleHQsIGxpbmVJbnB1dCkubGF5b3V0KCk7CiAgICAgICAgIGNyZWF0ZURpc3Bs
YXlSdW5zKCpsaW5lQ29udGVudC5ydW5zLCBsaW5lQ29udGVudC5mbG9hdHMsIHdpZHRoQ29uc3Ry
YWludCk7CiAgICAgICAgIGlmICghbGluZUNvbnRlbnQubGFzdENvbW1pdHRlZCkgewogICAgICAg
ICAgICAgLy8gRmxvYXRzIHByZXZlbnRlZCB1cyBwdXR0aW5nIGFueSBjb250ZW50IG9uIHRoZSBs
aW5lLgpAQCAtMzQzLDE2ICszNDQsMTYgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
SW5saW5lTGF5b3V0OjpsYXlvdXQoY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW0KIAogTGF5
b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0Ojpjb21wdXRlZElu
dHJpbnNpY1dpZHRoKGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGF5b3V0VW5pdCB3
aWR0aENvbnN0cmFpbnQpIGNvbnN0CiB7Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5s
YXlvdXRTdGF0ZSgpOworICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0
dGluZ0NvbnRleHQoKTsKICAgICBMYXlvdXRVbml0IG1heGltdW1MaW5lV2lkdGg7CiAgICAgSW5k
ZXhBbmRSYW5nZSBjdXJyZW50SW5saW5lSXRlbTsKLSAgICBhdXRvIHF1aXJrcyA9IFF1aXJrcyhm
b3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICBhdXRvIHF1aXJrcyA9IFF1aXJrcyhmb3JtYXR0aW5n
Q29udGV4dCk7CiAgICAgd2hpbGUgKGN1cnJlbnRJbmxpbmVJdGVtLmluZGV4IDwgaW5saW5lSXRl
bXMuc2l6ZSgpKSB7Ci0gICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBMaW5lTGF5b3V0KGZvcm1h
dHRpbmdDb250ZXh0KCksIGxheW91dFN0YXRlLCB7IHsgeyB9LCB3aWR0aENvbnN0cmFpbnQsIHF1
aXJrcy5saW5lSGVpZ2h0Q29uc3RyYWludHMoZm9ybWF0dGluZ1Jvb3QoKSkgfSwgTGluZTo6U2tp
cFZlcnRpY2FsQWxpZ21lbnQ6OlllcywgY3VycmVudElubGluZUl0ZW0sIGlubGluZUl0ZW1zIH0p
LmxheW91dCgpOworICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gTGluZUxheW91dChmb3JtYXR0
aW5nQ29udGV4dCwgeyB7IHsgfSwgd2lkdGhDb25zdHJhaW50LCBxdWlya3MubGluZUhlaWdodENv
bnN0cmFpbnRzKGZvcm1hdHRpbmdSb290KCkpIH0sIExpbmU6OlNraXBWZXJ0aWNhbEFsaWdtZW50
OjpZZXMsIGN1cnJlbnRJbmxpbmVJdGVtLCBpbmxpbmVJdGVtcyB9KS5sYXlvdXQoKTsKICAgICAg
ICAgY3VycmVudElubGluZUl0ZW0gPSB7IGxpbmVDb250ZW50Lmxhc3RDb21taXR0ZWQtPmluZGV4
ICsgMSwgV1RGOjpudWxsb3B0IH07CiAgICAgICAgIExheW91dFVuaXQgZmxvYXRzV2lkdGg7CiAg
ICAgICAgIGZvciAoYXV0byYgZmxvYXRJdGVtIDogbGluZUNvbnRlbnQuZmxvYXRzKQotICAgICAg
ICAgICAgZmxvYXRzV2lkdGggKz0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChm
bG9hdEl0ZW0tPmxheW91dEJveCgpKS5tYXJnaW5Cb3hXaWR0aCgpOworICAgICAgICAgICAgZmxv
YXRzV2lkdGggKz0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChmbG9h
dEl0ZW0tPmxheW91dEJveCgpKS5tYXJnaW5Cb3hXaWR0aCgpOwogICAgICAgICBtYXhpbXVtTGlu
ZVdpZHRoID0gc3RkOjptYXgobWF4aW11bUxpbmVXaWR0aCwgZmxvYXRzV2lkdGggKyBsaW5lQ29u
dGVudC5ydW5zLT5sb2dpY2FsV2lkdGgoKSk7CiAgICAgfQogICAgIHJldHVybiBtYXhpbXVtTGlu
ZVdpZHRoOwpAQCAtMzYxLDYgKzM2Miw3IEBAIExheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OklubGluZUxheW91dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aChjb25zdCBJCiB2b2lk
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNyZWF0ZURpc3BsYXlSdW5z
KGNvbnN0IExpbmU6OkNvbnRlbnQmIGxpbmVDb250ZW50LCBjb25zdCBWZWN0b3I8V2Vha1B0cjxJ
bmxpbmVJdGVtPj4mIGZsb2F0cywgTGF5b3V0VW5pdCB3aWR0aENvbnN0cmFpbnQpIGNvbnN0CiB7
CiAgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOworICAgIGF1dG8m
IGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKICAgICBhdXRv
JiBmb3JtYXR0aW5nU3RhdGUgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGxheW91
dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGZvcm1hdHRpbmdSb290KCkpKTsKICAg
ICBhdXRvJiBmbG9hdGluZ1N0YXRlID0gZm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUoKTsK
ICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5nQ29udGV4dCB7IGZsb2F0aW5nU3Rh
dGUgfTsKQEAgLTM2OCw4ICszNzAsOCBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJ
bmxpbmVMYXlvdXQ6OmNyZWF0ZURpc3BsYXlSdW5zKGNvbnN0IExpbmU6OkNvbnRlbgogICAgIC8v
IE1vdmUgZmxvYXRzIHRvIHRoZWlyIGZpbmFsIHBvc2l0aW9uLgogICAgIGZvciAoYXV0byBmbG9h
dEl0ZW0gOiBmbG9hdHMpIHsKICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBmbG9hdEl0ZW0tPmxh
eW91dEJveCgpOwotICAgICAgICBBU1NFUlQobGF5b3V0U3RhdGUuaGFzRGlzcGxheUJveChmbG9h
dEJveCkpOwotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJv
eEZvckxheW91dEJveChmbG9hdEJveCk7CisgICAgICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4
dC5oYXNEaXNwbGF5Qm94KGZsb2F0Qm94KSk7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KTsKICAgICAg
ICAgLy8gU2V0IHN0YXRpYyBwb3NpdGlvbiBmaXJzdC4KICAgICAgICAgZGlzcGxheUJveC5zZXRU
b3BMZWZ0KHsgbGluZUNvbnRlbnQubG9naWNhbExlZnQoKSwgbGluZUNvbnRlbnQubG9naWNhbFRv
cCgpIH0pOwogICAgICAgICAvLyBGbG9hdCBpdC4KQEAgLTM5MSwxMiArMzkzLDEyIEBAIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6Y3JlYXRlRGlzcGxheVJ1bnMo
Y29uc3QgTGluZTo6Q29udGVuCiAgICAgYXV0byBsaW5lQm94UmVjdCA9IERpc3BsYXk6OlJlY3Qg
eyBsaW5lQ29udGVudC5sb2dpY2FsVG9wKCksIGxpbmVDb250ZW50LmxvZ2ljYWxMZWZ0KCksIDAs
IGxpbmVDb250ZW50LmxvZ2ljYWxIZWlnaHQoKX07CiAgICAgLy8gQ3JlYXRlIGZpbmFsIGRpc3Bs
YXkgcnVucy4KICAgICBhdXRvJiBsaW5lUnVucyA9IGxpbmVDb250ZW50LnJ1bnMoKTsKLSAgICBh
dXRvIGdlb21ldHJ5ID0gR2VvbWV0cnkoZm9ybWF0dGluZ0NvbnRleHQoKSk7CisgICAgYXV0byBn
ZW9tZXRyeSA9IEdlb21ldHJ5KGZvcm1hdHRpbmdDb250ZXh0KTsKICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lUnVucy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAg
YXV0byYgbGluZVJ1biA9IGxpbmVSdW5zLmF0KGluZGV4KTsKICAgICAgICAgYXV0byYgbG9naWNh
bFJlY3QgPSBsaW5lUnVuLT5sb2dpY2FsUmVjdCgpOwogICAgICAgICBhdXRvJiBsYXlvdXRCb3gg
PSBsaW5lUnVuLT5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91
dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byYg
ZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5
b3V0Qm94KTsKIAogICAgICAgICBpZiAobGluZVJ1bi0+aXNMaW5lQnJlYWsoKSkgewogICAgICAg
ICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGxvZ2ljYWxSZWN0LnRvcExlZnQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dFF1aXJrcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggMWUwMzdhNjhj
ZDQ0MTg4YThkMWFkZTliNjhlNGM0NzcxNTYzYjI4Zi4uNmY1ZmIyOWI1NTVhNmViNjEyYzY4ZGM5
YzhmMzkyZGFjZTcwYzQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
UXVpcmtzLmNwcApAQCAtNTcsNyArNTcsNyBAQCBib29sIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpRdWlya3M6OmxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExpbmU6OkNvbgogICAg
ICAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OkhhcmRMaW5lQnJlYWs6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgSW5saW5lSXRlbTo6VHlwZTo6Q29udGFpbmVyU3Rh
cnQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94
ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CiAgICAgICAgICAgICBpZiAoZGlzcGxheUJveC5ob3Jpem9udGFsQm9yZGVyKCkgfHwgKGRpc3Bs
YXlCb3guaG9yaXpvbnRhbFBhZGRpbmcoKSAmJiBkaXNwbGF5Qm94Lmhvcml6b250YWxQYWRkaW5n
KCkudmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmUuY3BwCmluZGV4IGUzOWQxMWY2NWZlNTJjNDJkYzc0YmNiYWYwZTk2NzZkN2E2
OWZmZDAuLmNmZWI4ZDM0YWE3YjhjMmE3NGE0NWNmMGM1MWY0Zjc3MzAyMzkxZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUu
Y3BwCkBAIC02NCwxMCArNjQsMTAgQEAgTGluZTo6TGluZShjb25zdCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IEluaXRpYWwKIHsKIH0KIAot
c3RhdGljIGJvb2wgaXNJbmxpbmVDb250YWluZXJDb25zaWRlcmVkRW1wdHkoY29uc3QgTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBCb3gmIGxheW91dEJveCkKK3N0YXRpYyBib29sIGlz
SW5saW5lQ29udGFpbmVyQ29uc2lkZXJlZEVtcHR5KGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBm
b3JtYXR0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7CiAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgZG9lcyBub3QgY2hlY2sgd2hldGhlciB0aGUgaW5saW5lIGNvbnRhaW5lciBoYXMg
Y29udGVudC4gSXQgc2ltcGx5IGNoZWNrcyBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBjb25z
aWRlcmVkIGVtcHR5LgotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1h
dHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICByZXR1
cm4gIShkaXNwbGF5Qm94Lmhvcml6b250YWxCb3JkZXIoKSB8fCAoZGlzcGxheUJveC5ob3Jpem9u
dGFsUGFkZGluZygpICYmIGRpc3BsYXlCb3guaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1ZSgpKSk7
CiB9CiAKQEAgLTc1LDEwICs3NSwxMCBAQCBib29sIExpbmU6OmlzVmlzdWFsbHlFbXB0eSgpIGNv
bnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNhY2hlZCBpbnN0ZWFkIC1hcyB0
aGUgaW5saW5lIGl0ZW1zIGFyZSBiZWluZyBhZGRlZC4KICAgICAvLyBSZXR1cm4gdHJ1ZSBmb3Ig
ZW1wdHkgaW5saW5lIGNvbnRhaW5lcnMgbGlrZSA8c3Bhbj48L3NwYW4+LgotICAgIGF1dG8mIGxh
eW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29u
dGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgZm9yIChhdXRvJiBydW4gOiBt
X2NvbnRlbnQtPnJ1bnMoKSkgewogICAgICAgICBpZiAocnVuLT5pc0NvbnRhaW5lclN0YXJ0KCkp
IHsKLSAgICAgICAgICAgIGlmICghaXNJbmxpbmVDb250YWluZXJDb25zaWRlcmVkRW1wdHkobGF5
b3V0U3RhdGUsIHJ1bi0+bGF5b3V0Qm94KCkpKQorICAgICAgICAgICAgaWYgKCFpc0lubGluZUNv
bnRhaW5lckNvbnNpZGVyZWRFbXB0eShmb3JtYXR0aW5nQ29udGV4dCwgcnVuLT5sYXlvdXRCb3go
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KQEAgLTg2LDcgKzg2LDcgQEAgYm9vbCBMaW5lOjppc1Zpc3VhbGx5RW1wdHko
KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChydW4tPmxheW91dEJv
eCgpLmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAgICAgICAgICAgQVNTRVJU
KHJ1bi0+bGF5b3V0Qm94KCkuaXNJbmxpbmVCbG9ja0JveCgpKTsKLSAgICAgICAgICAgIGF1dG8m
IGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJ1bi0+bGF5
b3V0Qm94KCkpOworICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250
ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocnVuLT5sYXlvdXRCb3goKSk7CiAgICAgICAgICAg
ICBpZiAoIWRpc3BsYXlCb3gud2lkdGgoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGlmIChtX3NraXBWZXJ0aWNhbEFsaWdtZW50IHx8IGRpc3BsYXlCb3guaGVpZ2h0
KCkpCkBAIC0xMTYsNiArMTE2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPExpbmU6OkNvbnRlbnQ+IExp
bmU6OmNsb3NlKCkKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhp
cy0+bGF5b3V0U3RhdGUoKTsKKyAgICAgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlz
LT5mb3JtYXR0aW5nQ29udGV4dCgpOwogICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fY29udGVu
dC0+cnVucygpKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3A7CiAgICAgICAg
ICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4tPmxheW91dEJveCgpOwpAQCAtMTI3LDcgKzEyOCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxMaW5lOjpDb250ZW50PiBMaW5lOjpjbG9zZSgpCiAgICAgICAg
ICAgICAgICAgaWYgKHJ1bi0+aXNMaW5lQnJlYWsoKSB8fCBydW4tPmlzVGV4dCgpKQogICAgICAg
ICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIGFzY2VudDsKICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChydW4tPmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZv
ckxheW91dEJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
OwogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIGFz
Y2VudCAtIGRpc3BsYXlCb3guYm9yZGVyVG9wKCkgLSBkaXNwbGF5Qm94LnBhZGRpbmdUb3AoKS52
YWx1ZU9yKDApOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5l
QmxvY2tCb3goKSAmJiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGRvd25j
YXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0
aW5nU3RhdGUobGF5b3V0Qm94KSk7CkBAIC0yOTQsNyArMjk1LDcgQEAgdm9pZCBMaW5lOjphcHBl
bmRUZXh0Q29udGVudChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lSXRlbSwgTGF5b3V0VW5p
dCBsb2dpY2EKIAogdm9pZCBMaW5lOjphcHBlbmROb25SZXBsYWNlZElubGluZUJveChjb25zdCBJ
bmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKIHsKLSAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGlu
bGluZUl0ZW0ubGF5b3V0Qm94KCkpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5saW5lSXRlbS5sYXlvdXRCb3goKSk7
CiAgICAgYXV0byBob3Jpem9udGFsTWFyZ2luID0gZGlzcGxheUJveC5ob3Jpem9udGFsTWFyZ2lu
KCk7ICAgIAogICAgIGF1dG8gbG9naWNhbFJlY3QgPSBEaXNwbGF5OjpSZWN0IHsgfTsKIApAQCAt
NDEzLDggKzQxNCw4IEBAIExheW91dFVuaXQgTGluZTo6aW5saW5lSXRlbUNvbnRlbnRIZWlnaHQo
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkgY29uc3QKICAgICAgICAgcmV0dXJuIGZvbnRN
ZXRyaWNzLmhlaWdodCgpOwogCiAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlv
dXRCb3goKTsKLSAgICBBU1NFUlQobGF5b3V0U3RhdGUoKS5oYXNEaXNwbGF5Qm94KGxheW91dEJv
eCkpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBBU1NFUlQoZm9ybWF0dGluZ0NvbnRleHQoKS5oYXNE
aXNwbGF5Qm94KGxheW91dEJveCkpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKIAogICAgIGlmIChs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIGRpc3BsYXlC
b3guYm9yZGVyQm94SGVpZ2h0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
dGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRl
eCBhMWZlZmNmM2ExOGIzMDc1MGRhNmMzYjdmN2Q3OWEyYWVkNWM1ZmEzLi4zYTkyYzZjOWY2ZGM1
MDc0OWNmOWZlOTFjYTcwMDRjYjUxNTgyNTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4
dC5jcHAKQEAgLTY5LDEzICs2OSwxMyBAQCB2b2lkIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Omxh
eW91dCgpCiAgICAgLy8gRmlyc3Qgcm93LgogICAgIGF1dG8mIHJvdyA9IHJvd0xpc3QuZmlyc3Qo
KTsKICAgICByb3cuc2V0TG9naWNhbFRvcCh7IH0pOwotICAgIGluaXRpYWxpemVEaXNwbGF5Qm94
VG9CbGFuayhsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJvdy5ib3goKSkpOwor
ICAgIGluaXRpYWxpemVEaXNwbGF5Qm94VG9CbGFuayhkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJv
dy5ib3goKSkpOwogCiAgICAgZm9yIChhdXRvJiBjZWxsIDogY2VsbExpc3QpIHsKICAgICAgICAg
YXV0byYgY2VsbExheW91dEJveCA9IGNlbGwtPnRhYmxlQ2VsbEJveDsKICAgICAgICAgQVNTRVJU
KGNlbGxMYXlvdXRCb3guZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkpOwogCi0g
ICAgICAgIGF1dG8mIGNlbGxEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveChjZWxsTGF5b3V0Qm94KTsKKyAgICAgICAgYXV0byYgY2VsbERpc3BsYXlCb3ggPSBk
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNlbGxMYXlvdXRCb3gpOwogICAgICAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIGNvbHVtbiBhbmQgcm93IHNwYW5uaW5nLgogICAgICAgICBhdXRvIGNl
bGxQb3NpdGlvbiA9IGNlbGwtPnBvc2l0aW9uOwogICAgICAgICBhdXRvJiByb3cgPSByb3dMaXN0
LmF0KGNlbGxQb3NpdGlvbi55KCkpOwpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQ6OmxheW91dCgpCiAgICAgICAgIGlmICghY2VsbFBvc2l0aW9uLngoKSAmJiBj
ZWxsUG9zaXRpb24ueSgpKSB7CiAgICAgICAgICAgICBhdXRvJiBwcmV2aW91c1JvdyA9IHJvd0xp
c3QuYXQoY2VsbFBvc2l0aW9uLnkoKSAtIDEpOwogICAgICAgICAgICAgcm93LnNldExvZ2ljYWxU
b3AocHJldmlvdXNSb3cubG9naWNhbEJvdHRvbSgpKTsKLSAgICAgICAgICAgIGluaXRpYWxpemVE
aXNwbGF5Qm94VG9CbGFuayhsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJvdy5i
b3goKSkpOworICAgICAgICAgICAgaW5pdGlhbGl6ZURpc3BsYXlCb3hUb0JsYW5rKGRpc3BsYXlC
b3hGb3JMYXlvdXRCb3gocm93LmJveCgpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xODgs
NyArMTg4LDcgQEAgTGF5b3V0VW5pdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZFRh
YmxlV2lkdGgoKQogICAgIGF1dG8mIHRhYmxlV3JhcHBlckJveCA9IHJvb3QoKTsKICAgICBhdXRv
JiBzdHlsZSA9IHRhYmxlV3JhcHBlckJveC5zdHlsZSgpOwogICAgIGF1dG8mIGNvbnRhaW5pbmdC
bG9jayA9ICp0YWJsZVdyYXBwZXJCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0byYgY29u
dGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91
dEJveChjb250YWluaW5nQmxvY2spOworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlC
b3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgYXV0byBj
b250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVudEJv
eFdpZHRoKCk7CiAKICAgICBhdXRvJiBncmlkID0gZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlk
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377769</attachid>
            <date>2019-08-30 16:44:26 -0700</date>
            <delta_ts>2019-08-30 19:38:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201365-20190830164419.patch</filename>
            <type>text/plain</type>
            <size>83442</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTU0ZjM3YWE4M2ZhYWQ2
NDAxOTMxZWVmMTRlMDkxMmMwMGY0MzAzNy4uMDRiZjc3ZGZlYzliOGJkYzAzZjNlNjZhMjY1NDM3
YzNiNWVlZjUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDE5LTA4LTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ10gUHJveHkgTGF5b3V0
U3RhdGU6OmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKSBjYWxscyB0aHJvdWdoIEZvcm1hdHRpbmdD
b250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDEzNjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU0OTAwODE1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgaW4gcHJlcGFy
YXRpb24gZm9yIGVuZm9yY2luZyBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCkgY2FsbHMgdG8gc3Rh
eSB3aXRoaW4gdGhlIGN1cnJlbnQgZm9ybWF0dGluZyBjb250ZXh0LgorICAgICAgICAoVGhlcmUg
YXJlIGEgZmV3IG9kZCBjYXNlcyBsZWZ0IChmbG9hdHMgYW5kIGNvb3JkaW5hdGUgbWFwcGluZykg
YW5kIHRoZXkgYXJlIGdvaW5nIHRvIGJlIGFkZHJlc3NlZCBpbiBhIHNlcGFyYXRlIHBhdGNoLikK
KworICAgICAgICAqIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRh
bEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6OnZhbGlkYXRlR2VvbWV0cnlD
b25zdHJhaW50c0FmdGVyTGF5b3V0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGlu
Z0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
OmRpc3BsYXlCb3hGb3JMYXlvdXRCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6aGFzRGlzcGxheUJveCBjb25zdCk6CisgICAgICAgICogbGF5
b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0VmFsdWUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1Zl
cnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBs
YWNlZFZlcnRpY2FsR2VvbWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRh
bEdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9m
Rmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZEhlaWdo
dEFuZE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpoZWlnaHRWYWx1ZU9m
TmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodCk6CisgICAgICAgICogbGF5b3V0
L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6dXNlZEF2YWlsYWJsZVdpZHRo
Rm9yRmxvYXRBdm9pZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVkQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGlj
VmVydGljYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVk
VmVydGljYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVh
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVGbG9hdGluZ1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVBvc2l0aW9uVG9Bdm9pZEZsb2F0cyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFu
ZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp2ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbiBjb25zdCk6
CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
aW5GbG93Tm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNh
bFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRp
bmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVp
Z2h0KToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFw
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYXNDbGVhcmFuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBz
ZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmdpbkJlZm9yZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2luQWZ0
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aEZpcnN0SW5GbG93
Q2hpbGRNYXJnaW5CZWZvcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNX
aXRoU2libGluZ01hcmdpbkJlZm9yZVdpdGhDbGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFy
Z2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0NoaWxkTWFyZ2luQWZ0ZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6dXBkYXRlTWFyZ2luQWZ0ZXJGb3JQcmV2aW91c1NpYmxpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xs
YXBzZTo6cG9zaXRpdmVOZWdhdGl2ZVZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjplc3RpbWF0ZWRNYXJnaW5C
ZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpNYXJnaW5Db2xsYXBzZTo6dXBkYXRlUG9zaXRpdmVOZWdhdGl2ZU1hcmdpblZhbHVlcyk6Cisg
ICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojppbml0aWFsaXplTWFyZ2luQm9yZGVy
QW5kUGFkZGluZ0ZvckdlbmVyaWNJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdG
b3JJbmxpbmVDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUhvcml6b250YWxNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5
b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9j
a0hlaWdodEFuZE1hcmdpbiBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6aW5saW5lSXRlbVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUxheW91dDo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lTGF5b3V0OjpMaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6TGluZUxheW91dDo6cGxhY2VJbmxpbmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6bGF5b3V0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGlu
ZUxheW91dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNyZWF0ZURp
c3BsYXlSdW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6
bGF5b3V0U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6bGluZURlc2NlbnRO
ZWVkc0NvbGxhcHNpbmcgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0Ojppc0lubGluZUNvbnRh
aW5lckNvbnNpZGVyZWRFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6Omlz
VmlzdWFsbHlFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6YXBwZW5kTm9uUmVwbGFjZWRJ
bmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjppbmxpbmVJdGVtQ29u
dGVudEhlaWdodCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJs
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVG
b3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFi
bGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRUYWJsZVdpZHRoKToKKwogMjAxOS0wOC0zMCAg
WmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdIFBhc3MgRm9y
bWF0dGluZ0NvbnRleHQgdG8gR2VvbWV0cnkvUXVpcmtzL0Jsb2NrTWFyZ2luQ29sbGFwc2luZyBj
bGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRl
eCBkZjcyYTg1NGMwMWU4Y2U5YzU5Y2FhZmE3NTU5ZDkzZmRhOWY1ZTZkLi40M2RkYTA3M2FmYjVm
MWIwYjI1NTM5NzRmMmRmNTQ5M2ZkMjViNGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9G
b3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTY2LDggKzY2LDcgQEAgTGF5b3V0U3RhdGUmIEZvcm1h
dHRpbmdDb250ZXh0OjpsYXlvdXRTdGF0ZSgpIGNvbnN0CiAKIHZvaWQgRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVPdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRC
b3gpCiB7Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwotICAg
IGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLnBhZGRpbmdCb3hXaWR0aCgpOwor
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCps
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLnBhZGRpbmdCb3hXaWR0aCgpOwogCiAgICAgYXV0
byBjb21wdXRlID0gWyZdKE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCkgewogICAgICAg
ICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGNvbnRhaW5pbmdCbG9j
a1dpZHRoLCB1c2VkV2lkdGgsIHsgfSB9OwpAQCAtODcsNyArODYsNyBAQCB2b2lkIEZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYg
bGF5b3V0Qm94KQogICAgICAgICAgICAgaG9yaXpvbnRhbEdlb21ldHJ5ID0gbWluSG9yaXpvbnRh
bEdlb21ldHJ5OwogICAgIH0KIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9
IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldExl
ZnQoaG9yaXpvbnRhbEdlb21ldHJ5LmxlZnQgKyBob3Jpem9udGFsR2VvbWV0cnkud2lkdGhBbmRN
YXJnaW4udXNlZE1hcmdpbi5zdGFydCk7CiAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lk
dGgoaG9yaXpvbnRhbEdlb21ldHJ5LndpZHRoQW5kTWFyZ2luLndpZHRoKTsKICAgICBkaXNwbGF5
Qm94LnNldEhvcml6b250YWxNYXJnaW4oaG9yaXpvbnRhbEdlb21ldHJ5LndpZHRoQW5kTWFyZ2lu
LnVzZWRNYXJnaW4pOwpAQCAtOTYsOCArOTUsNiBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94KQog
CiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRy
eShjb25zdCBCb3gmIGxheW91dEJveCkKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMt
PmxheW91dFN0YXRlKCk7Ci0KICAgICBhdXRvIGNvbXB1dGUgPSBbJl0oVXNlZFZlcnRpY2FsVmFs
dWVzIHVzZWRWYWx1ZXMpIHsKICAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkub3V0T2ZGbG93VmVy
dGljYWxHZW9tZXRyeShsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgIH07CkBAIC0xMTUsNyAr
MTEyLDcgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd1ZlcnRpY2Fs
R2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gpCiAgICAgICAgICAgICB2ZXJ0aWNhbEdlb21l
dHJ5ID0gbWluVmVydGljYWxHZW9tZXRyeTsKICAgICB9CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94
ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAgICAg
YXV0byBub25Db2xsYXBzZWRWZXJ0aWNhbE1hcmdpbiA9IHZlcnRpY2FsR2VvbWV0cnkuaGVpZ2h0
QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbjsKICAgICBkaXNwbGF5Qm94LnNldFRvcCh2ZXJ0
aWNhbEdlb21ldHJ5LnRvcCArIG5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSk7CiAg
ICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94SGVpZ2h0KHZlcnRpY2FsR2VvbWV0cnkuaGVpZ2h0
QW5kTWFyZ2luLmhlaWdodCk7CkBAIC0xMjUsMTAgKzEyMiw5IEBAIHZvaWQgRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVPdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0
Qm94KQogCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhj
b25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8VXNlZEhvcml6b250YWxWYWx1ZXM+IHVzZWRW
YWx1ZXMpCiB7Ci0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwog
ICAgIGlmICghdXNlZFZhbHVlcykKLSAgICAgICAgdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFs
VmFsdWVzIHsgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OwotICAgIGF1dG8mIGRpc3BsYXlC
b3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAg
ICAgIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlCb3hGb3JMYXlv
dXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsK
KyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
OwogICAgIGRpc3BsYXlCb3guc2V0Qm9yZGVyKGdlb21ldHJ5KCkuY29tcHV0ZWRCb3JkZXIobGF5
b3V0Qm94KSk7CiAgICAgZGlzcGxheUJveC5zZXRQYWRkaW5nKGdlb21ldHJ5KCkuY29tcHV0ZWRQ
YWRkaW5nKGxheW91dEJveCwgKnVzZWRWYWx1ZXMpKTsKIH0KQEAgLTIyNiwxMyArMjIyLDEyIEBA
IHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OnZhbGlkYXRlR2VvbWV0cnlDb25zdHJhaW50c0FmdGVy
TGF5b3V0KCkgY29uc3QKICAgICBpZiAoIWlzPENvbnRhaW5lcj4ocm9vdCgpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0Um9vdCA9IGRvd25jYXN0PENvbnRh
aW5lcj4ocm9vdCgpKTsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRl
KCk7CiAgICAgLy8gRklYTUU6IGFkZCBhIGRlc2NlbmRhbnRzT2ZUeXBlPD4gZmxhdm9yIHRoYXQg
c3RvcHMgYXQgbmVzdGVkIGZvcm1hdHRpbmcgY29udGV4dHMKICAgICBmb3IgKGF1dG8mIGxheW91
dEJveCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KSkgewog
ICAgICAgICBpZiAoJmxheW91dEJveC5mb3JtYXR0aW5nQ29udGV4dFJvb3QoKSAhPSAmZm9ybWF0
dGluZ0NvbnRleHRSb290KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8mIGNv
bnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwotICAgICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAg
ICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91
dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKKyAgICAgICAgYXV0byYgZGlzcGxh
eUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKIAogICAgICAgICAvLyAx
MC4zLjMgQmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdwog
ICAgICAgICAvLyAxMC4zLjcgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxl
bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggMmEw
NmJlZGI0NjFiOTZkZTQ4ZjAxZjFjNmY1MzMzNjI5MGU4MDk0NS4uMzdlYjEyMjJiMDU0ZDY4ZThj
OTQzZmJlNDdkMzIzNzkxNDNmYWJhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRp
bmdDb250ZXh0LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIK
ICNpbmNsdWRlICJMYXlvdXRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCkBAIC00MSw3
ICs0Miw2IEBAIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBDb250YWluZXI7CiBjbGFzcyBG
b3JtYXR0aW5nU3RhdGU7Ci1jbGFzcyBMYXlvdXRTdGF0ZTsKIAogY2xhc3MgRm9ybWF0dGluZ0Nv
bnRleHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRm9ybWF0dGluZ0NvbnRleHQpOwpA
QCAtNzIsNiArNzIsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0lubGluZUZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gcm9vdCgpLmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQoKTsgfQogICAgIGJvb2wgaXNUYWJsZUZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gcm9vdCgpLmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29udGV4dCgpOyB9CiAKKyAg
ICBEaXNwbGF5OjpCb3gmIGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlvdXRC
b3gpIGNvbnN0IHsgcmV0dXJuIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOyB9CisgICAgYm9vbCBoYXNEaXNwbGF5Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94
KSBjb25zdCB7IHJldHVybiBsYXlvdXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KTsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgTGF5b3V0UXVldWUgPSBWZWN0b3I8Y29uc3QgQm94
Kj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcAppbmRleCBhZjU0NDc0NTllYTM4OTBhZGRkNjY5NzRlYThiYjA2NmZjMzBkNDFi
Li40ZjczYWY1NzI3NTU1OGQ5YTRiNWM5MWRiMmI5MzdkOGU4ZjNkNjY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC02
MSw3ICs2MSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hlaWdodEF1dG8oY29uc3QgQm94JiBs
YXlvdXRCb3gpCiAKIE9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6Y29tcHV0ZWRIZWlnaHRWYWx1ZShjb25zdCBCb3gmIGxheW91dEJveCwgSGVpZ2h0VHlw
ZSBoZWlnaHRUeXBlKSBjb25zdAogewotICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5
b3V0U3RhdGUoKTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwogICAgIGF1
dG8gaGVpZ2h0ID0gaGVpZ2h0VHlwZSA9PSBIZWlnaHRUeXBlOjpOb3JtYWwgPyBzdHlsZS5sb2dp
Y2FsSGVpZ2h0KCkgOiBoZWlnaHRUeXBlID09IEhlaWdodFR5cGU6Ok1pbiA/IHN0eWxlLmxvZ2lj
YWxNaW5IZWlnaHQoKSA6IHN0eWxlLmxvZ2ljYWxNYXhIZWlnaHQoKTsKICAgICBpZiAoaGVpZ2h0
LmlzVW5kZWZpbmVkKCkgfHwgaGVpZ2h0LmlzQXV0bygpKQpAQCAtNzMsOSArNzIsOSBAQCBPcHRp
b25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSGVp
Z2h0VmFsdWUoY29uc3QgQm94JgogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdC
bG9ja0hlaWdodFZhbHVlOwogICAgIGlmIChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpIHsKICAgICAgICAgLy8gQ29udGFpbmluZyBibG9jaydzIGhlaWdodCBpcyBhbHJlYWR5IGNv
bXB1dGVkIHNpbmNlIHdlIGxheW91dCB0aGUgb3V0LW9mLWZsb3cgYm94ZXMgYXMgdGhlIGxhc3Qg
c3RlcC4KLSAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0VmFsdWUgPSBsYXlvdXRTdGF0ZS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmhlaWdo
dCgpOworICAgICAgICBjb250YWluaW5nQmxvY2tIZWlnaHRWYWx1ZSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KS5oZWlnaHQoKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobGF5b3V0U3RhdGUuaW5RdWly
a3NNb2RlKCkpCisgICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQogICAg
ICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0VmFsdWUgPSBRdWlya3MoZm9ybWF0dGluZ0Nv
bnRleHQoKSkuaGVpZ2h0VmFsdWVPZk5lYXJlc3RDb250YWluaW5nQmxvY2tXaXRoRml4ZWRIZWln
aHQobGF5b3V0Qm94KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhdXRvIGNvbnRhaW5p
bmdCbG9ja0hlaWdodCA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5sb2dp
Y2FsSGVpZ2h0KCk7CkBAIC0xMDcsNyArMTA2LDggQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6OmNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY28K
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5
b3V0U3RhdGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJv
eEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0g
dGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0
dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgIGF1dG8g
Ym9yZGVyQW5kUGFkZGluZ1RvcCA9IGRpc3BsYXlCb3guYm9yZGVyVG9wKCkgKyBkaXNwbGF5Qm94
LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwogICAgIGF1dG8gdG9wID0gYm9yZGVyQW5kUGFkZGlu
Z1RvcDsKICAgICBhdXRvIGJvdHRvbSA9IGJvcmRlckFuZFBhZGRpbmdUb3A7CkBAIC0xMjAsOCAr
MTIwLDggQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbnRlbnRI
ZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY28KICAgICAgICAgYm90dG9tID0gbGluZUJv
eGVzLmxhc3QoKS5sb2dpY2FsQm90dG9tKCk7CiAgICAgfSBlbHNlIGlmIChmb3JtYXR0aW5nUm9v
dENvbnRhaW5lci5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSB8fCBsYXlvdXRC
b3guaXNEb2N1bWVudEJveCgpKSB7CiAgICAgICAgIGlmIChmb3JtYXR0aW5nUm9vdENvbnRhaW5l
ci5oYXNJbkZsb3dDaGlsZCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBmaXJzdERpc3BsYXlCb3gg
PSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5nUm9vdENvbnRh
aW5lci5maXJzdEluRmxvd0NoaWxkKCkpOwotICAgICAgICAgICAgYXV0byYgbGFzdERpc3BsYXlC
b3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5nUm9vdENv
bnRhaW5lci5sYXN0SW5GbG93Q2hpbGQoKSk7CisgICAgICAgICAgICBhdXRvJiBmaXJzdERpc3Bs
YXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0
aW5nUm9vdENvbnRhaW5lci5maXJzdEluRmxvd0NoaWxkKCkpOworICAgICAgICAgICAgYXV0byYg
bGFzdERpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KCpmb3JtYXR0aW5nUm9vdENvbnRhaW5lci5sYXN0SW5GbG93Q2hpbGQoKSk7CiAgICAgICAgICAg
ICB0b3AgPSBmaXJzdERpc3BsYXlCb3gucmVjdFdpdGhNYXJnaW4oKS50b3AoKTsKICAgICAgICAg
ICAgIGJvdHRvbSA9IGxhc3REaXNwbGF5Qm94LnJlY3RXaXRoTWFyZ2luKCkuYm90dG9tKCk7CiAg
ICAgICAgIH0KQEAgLTIwMSwyOCArMjAxLDI4IEBAIExheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpCiAg
ICAgLy8gY29tcHV0ZWQgdmFsdWUgZm9yICdkaXNwbGF5Jy4pIFRoZSB2YWx1ZSBpcyBuZWdhdGl2
ZSBpZiB0aGUgaHlwb3RoZXRpY2FsIGJveCBpcyBhYm92ZSB0aGUgY29udGFpbmluZyBibG9jay4K
IAogICAgIC8vIFN0YXJ0IHdpdGggdGhpcyBib3gncyBib3JkZXIgYm94IG9mZnNldCBmcm9tIHRo
ZSBwYXJlbnQncyBib3JkZXIgYm94LgotICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5
b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRp
bmdDb250ZXh0KCk7CiAgICAgTGF5b3V0VW5pdCB0b3A7CiAgICAgaWYgKGF1dG8qIHByZXZpb3Vz
SW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSkgewogICAg
ICAgICAvLyBBZGQgc2libGluZyBvZmZzZXQKLSAgICAgICAgYXV0byYgcHJldmlvdXNJbkZsb3dE
aXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqcHJldmlvdXNJ
bkZsb3dTaWJsaW5nKTsKKyAgICAgICAgYXV0byYgcHJldmlvdXNJbkZsb3dEaXNwbGF5Qm94ID0g
Zm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqcHJldmlvdXNJbkZsb3dT
aWJsaW5nKTsKICAgICAgICAgdG9wICs9IHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5ib3R0b20o
KSArIHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5ub25Db2xsYXBzZWRNYXJnaW5BZnRlcigpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChsYXlvdXRCb3gucGFyZW50KCkpOwotICAgICAg
ICB0b3AgPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3gucGFy
ZW50KCkpLmNvbnRlbnRCb3hUb3AoKTsKKyAgICAgICAgdG9wID0gZm9ybWF0dGluZ0NvbnRleHQu
ZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LnBhcmVudCgpKS5jb250ZW50Qm94VG9w
KCk7CiAgICAgfQogCiAgICAgLy8gUmVzb2x2ZSB0b3AgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGNv
bnRhaW5pbmcgYmxvY2suCiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxheW91dEJveC5j
b250YWluaW5nQmxvY2soKTsKICAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJlbnQgc2luY2Ugd2Ug
cHJldGVuZCB0aGF0IHRoaXMgYm94IGlzIG5vcm1hbCBmbG93LgogICAgIGZvciAoYXV0byogY29u
dGFpbmVyID0gbGF5b3V0Qm94LnBhcmVudCgpOyBjb250YWluZXIgIT0gJmNvbnRhaW5pbmdCbG9j
azsgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKSkgewotICAgICAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqY29u
dGFpbmVyKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5lcik7CiAgICAgICAgIC8vIERpc3BsYXk6OkJv
eDo6dG9wIGlzIHRoZSBib3JkZXIgYm94IHRvcCBwb3NpdGlvbiBpbiBpdHMgY29udGFpbmluZyBi
bG9jaydzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgICAgICB0b3AgKz0gZGlzcGxheUJveC50b3Ao
KTsKICAgICAgICAgQVNTRVJUKCFjb250YWluZXItPmlzUG9zaXRpb25lZCgpIHx8IGxheW91dEJv
eC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKICAgICB9CiAgICAgLy8gTW92ZSB0aGUgc3RhdGljIHBv
c2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYWRkaW5nIGJveC4gVGhpcyBpcyB2ZXJ5IHNwZWNpZmlj
IHRvIGFib2x1dGVseSBwb3NpdGlvbmVkIGJveGVzLgotICAgIGF1dG8gcGFkZGluZ0JveFRvcCA9
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKS5wYWRk
aW5nQm94VG9wKCk7CisgICAgYXV0byBwYWRkaW5nQm94VG9wID0gZm9ybWF0dGluZ0NvbnRleHQu
ZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2spLnBhZGRpbmdCb3hUb3AoKTsK
ICAgICByZXR1cm4gdG9wIC0gcGFkZGluZ0JveFRvcDsKIH0KIApAQCAtMjMyLDIxICsyMzIsMjEg
QEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250
YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2kKICAgICAvLyBTZWUgc3RhdGljVmVydGljYWxQb3Np
dGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzdGF0
aWMgcG9zaXRpb24uCiAKICAgICAvLyBTdGFydCB3aXRoIHRoaXMgYm94J3MgYm9yZGVyIGJveCBv
ZmZzZXQgZnJvbSB0aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KLSAgICBhdXRvJiBsYXlvdXRTdGF0
ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0
aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwogICAgIEFTU0VSVChsYXlvdXRCb3gucGFyZW50KCkp
OwotICAgIGF1dG8gbGVmdCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5wYXJlbnQoKSkuY29udGVudEJveExlZnQoKTsKKyAgICBhdXRvIGxlZnQgPSBmb3Jt
YXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3gucGFyZW50KCkp
LmNvbnRlbnRCb3hMZWZ0KCk7CiAKICAgICAvLyBSZXNvbHZlIGxlZnQgYWxsIHRoZSB3YXkgdXAg
dG8gdGhlIGNvbnRhaW5pbmcgYmxvY2suCiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJlbnQg
c2luY2Ugd2UgcHJldGVuZCB0aGF0IHRoaXMgYm94IGlzIG5vcm1hbCBmbG93LgogICAgIGZvciAo
YXV0byogY29udGFpbmVyID0gbGF5b3V0Qm94LnBhcmVudCgpOyBjb250YWluZXIgIT0gJmNvbnRh
aW5pbmdCbG9jazsgY29udGFpbmVyID0gY29udGFpbmVyLT5jb250YWluaW5nQmxvY2soKSkgewot
ICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveCgqY29udGFpbmVyKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdD
b250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5lcik7CiAgICAgICAgIC8vIERp
c3BsYXk6OkJveDo6bGVmdCBpcyB0aGUgYm9yZGVyIGJveCBsZWZ0IHBvc2l0aW9uIGluIGl0cyBj
b250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgICAgIGxlZnQgKz0gZGlz
cGxheUJveC5sZWZ0KCk7CiAgICAgICAgIEFTU0VSVCghY29udGFpbmVyLT5pc1Bvc2l0aW9uZWQo
KSB8fCBsYXlvdXRCb3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7CiAgICAgfQogICAgIC8vIE1vdmUg
dGhlIHN0YXRpYyBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMg
dmVyeSBzcGVjaWZpYyB0byBhYm9sdXRlbHkgcG9zaXRpb25lZCBib3hlcy4KLSAgICBhdXRvIHBh
ZGRpbmdCb3hMZWZ0ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWlu
aW5nQmxvY2spLnBhZGRpbmdCb3hMZWZ0KCk7CisgICAgYXV0byBwYWRkaW5nQm94TGVmdCA9IGZv
cm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKS5w
YWRkaW5nQm94TGVmdCgpOwogICAgIHJldHVybiBsZWZ0IC0gcGFkZGluZ0JveExlZnQ7CiB9CiAK
QEAgLTMwMCwxMCArMzAwLDEwIEBAIFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0CiAgICAgLy8gNS4g
J2hlaWdodCcgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRo
ZW4gJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJl
IHNldCB0byAwIGFuZCBzb2x2ZSBmb3IgJ2hlaWdodCcKICAgICAvLyA2LiAnYm90dG9tJyBpcyAn
YXV0bycsICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzZXQgJ2F1dG8n
IHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCBhbmQgc29s
dmUgZm9yICdib3R0b20nCiAKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0
YXRlKCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29u
dGV4dCgpOwogICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byYg
ZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
KTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlz
cGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKKyAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpOworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBmb3Jt
YXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmlu
Z0Jsb2NrKCkpOwogICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gY29udGFpbmluZ0Js
b2NrRGlzcGxheUJveC5wYWRkaW5nQm94SGVpZ2h0KCk7CiAgICAgYXV0byBjb250YWluaW5nQmxv
Y2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gucGFkZGluZ0JveFdpZHRoKCk7CiAK
QEAgLTQyNSwxMSArNDI1LDExIEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAgICAgLy8gNS4g
J3dpZHRoJyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhl
biBzb2x2ZSBmb3IgJ3dpZHRoJwogICAgIC8vIDYuICdyaWdodCcgaXMgJ2F1dG8nLCAnbGVmdCcg
YW5kICd3aWR0aCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdyaWdodCcKIAotICAg
IGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3Jt
YXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5
bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3Rh
dGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlC
b3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxheW91dEJveC5jb250YWluaW5nQmxvY2so
KTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlz
cGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2spOworICAgIGF1dG8mIGNvbnRhaW5p
bmdCbG9ja0Rpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IHVz
ZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGgudmFsdWVPcigwKTsKICAgICBhdXRvIGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24gPSBjb250YWluaW5nQmxvY2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCk7CiAgICAgCkBAIC01NTksMTAgKzU1OSwxMCBAQCBWZXJ0aWNhbEdlb21ldHJ5
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdl
b21ldHJ5KAogICAgIC8vIDQuIElmIGF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgb25seSBvbmUgJ2F1
dG8nIGxlZnQsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KICAgICAvLyA1LiBJ
ZiBhdCB0aGlzIHBvaW50IHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0
aGUgdmFsdWUgZm9yICdib3R0b20nIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KIAotICAgIGF1
dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3JtYXR0
aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5bGUg
PSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUu
ZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAgIGF1dG8mIGNvbnRhaW5pbmdC
bG9ja0Rpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0
aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYg
Y29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CiAgICAgYXV0byBjb250
YWluaW5nQmxvY2tIZWlnaHQgPSBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94LnBhZGRpbmdCb3hI
ZWlnaHQoKTsKICAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gY29udGFpbmluZ0Jsb2Nr
RGlzcGxheUJveC5wYWRkaW5nQm94V2lkdGgoKTsKIApAQCAtNjQ1LDkgKzY0NSw5IEBAIEhvcml6
b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxh
Y2VkSG9yaXpvbnRhbEdlb21lCiAgICAgLy8gNS4gSWYgYXQgdGhpcyBwb2ludCB0aGUgdmFsdWVz
IGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciBlaXRoZXIgJ2xlZnQn
IChpbiBjYXNlIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29udGFpbmluZyBibG9j
ayBpcyAncnRsJykgb3IKICAgICAvLyAgICdyaWdodCcgKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMg
J2x0cicpIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KIAotICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRo
aXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5
bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxh
eW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29u
dGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAgICAgYXV0byYgY29udGFp
bmluZ0Jsb2NrID0gKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICBhdXRvIGNvbnRh
aW5pbmdCbG9ja1dpZHRoID0gdXNlZFZhbHVlcy5jb250YWluaW5nQmxvY2tXaWR0aC52YWx1ZU9y
KDApOwogICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGNvbnRhaW5pbmdCbG9jay5z
dHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKQEAgLTcyNCw3ICs3MjQsNyBAQCBIb3Jp
em9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBs
YWNlZEhvcml6b250YWxHZW9tZQogCiAgICAgLy8gRm9yIG91dC1vZi1mbG93IGVsZW1lbnRzIHRo
ZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBh
bmNlc3Rvci4KICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGlu
IHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExldCdzIGNvbnZlcnQg
aXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KLSAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGNvbnRhaW5pbmdCbG9jaykucGFkZGluZ0JveExlZnQoKTsKKyAgICBhdXRvIGNvbnRhaW5p
bmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jaykucGFkZGluZ0JveExlZnQoKTsKICAgICAqbGVm
dCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogICAgICpyaWdodCArPSBj
b250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogCkBAIC04NjEsOCArODYxLDggQEAg
SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFj
ZWRIZWlnaHRBbmRNYXJnaW4oY29uc3QKICAgICAvLyAgICB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJn
ZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbywgaGFzIGEgaGVpZ2h0IG5vdCBncmVh
dGVyIHRoYW4gMTUwcHgsIGFuZCBoYXMgYSB3aWR0aCBub3QgZ3JlYXRlciB0aGFuIHRoZSBkZXZp
Y2Ugd2lkdGguCiAKICAgICAvLyAjMQotICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5
b3V0U3RhdGUoKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gbGF5b3V0U3RhdGUu
ZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250
ZW50Qm94V2lkdGgoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1h
dHRpbmdDb250ZXh0KCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGZvcm1hdHRp
bmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxv
Y2soKSkuY29udGVudEJveFdpZHRoKCk7CiAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
ID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCBVc2VkSG9yaXpv
bnRhbFZhbHVlcyB7IGNvbnRhaW5pbmdCbG9ja1dpZHRoIH0pOwogICAgIGF1dG8gdXNlZFZlcnRp
Y2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21w
dXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHls
ZSgpOwpAQCAtODc3LDcgKzg3Nyw3IEBAIEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFyZ2luKGNvbnN0CiAgICAgICAg
IGhlaWdodCA9IHJlcGxhY2VkLT5pbnRyaW5zaWNIZWlnaHQoKTsKICAgICB9IGVsc2UgaWYgKGhl
aWdodElzQXV0byAmJiByZXBsYWNlZC0+aGFzSW50cmluc2ljUmF0aW8oKSkgewogICAgICAgICAv
LyAjMwotICAgICAgICBhdXRvIHVzZWRXaWR0aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KS53aWR0aCgpOworICAgICAgICBhdXRvIHVzZWRXaWR0aCA9IGZv
cm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS53aWR0aCgp
OwogICAgICAgICBoZWlnaHQgPSB1c2VkV2lkdGggLyByZXBsYWNlZC0+aW50cmluc2ljUmF0aW8o
KTsKICAgICB9IGVsc2UgaWYgKGhlaWdodElzQXV0byAmJiByZXBsYWNlZC0+aGFzSW50cmluc2lj
SGVpZ2h0KCkpIHsKICAgICAgICAgLy8gIzQKQEAgLTk3OSw3ICs5NzksNyBAQCBMYXlvdXRTaXpl
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zm
c2V0KGNvbnN0IEJveAogCiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKICAg
ICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwot
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKS5jb250ZW50Qm94V2lkdGgoKTsKKyAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jaykuY29udGVudEJveFdpZHRoKCk7CiAKICAgICBhdXRv
IHRvcCA9IGNvbXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CiAgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRv
KHN0eWxlLmxvZ2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggNTA4
YmQxNWRlNTEzZGE1ODZkOTMxMGNiZDBiYzY2M2YyMGYxNzA4Ny4uYmYyYTQ5OTQ0ZTM2NDg3NGIw
NDI0ZjgwOGM3ODE5NmU4YTY0MGUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Rm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCkBAIC0zOSw3ICszOSw3IEBAIExheW91dFVuaXQg
Rm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6aGVpZ2h0VmFsdWVPZk5lYXJlc3RDb250YWluaW5n
QmxvY2tXaXRoRml4CiB7CiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIGdvIGFuZCB0cmF2ZXJz
IHRoZSBjb250YWluaW5nIGJsb2NrIGNoYWluIHRvIGZpbmQgYSBibG9jayBsZXZlbCBib3ggd2l0
aCBmaXhlZCBoZWlnaHQgdmFsdWUsIGV2ZW4gaWYgaXQgbWVhbnMgbGVhdmluZwogICAgIC8vIHRo
ZSBjdXJyZW50IGZvcm1hdHRpbmcgY29udGV4dC4gRklYTUU6IHN1cmVseSB3ZSBuZWVkIHRvIGRv
IHNvbWUgdHJpY2tzIGhlcmUgd2hlbiBibG9jayBkaXJlY3Rpb24gc3VwcG9ydCBpcyBhZGRlZC4K
LSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CisgICAgYXV0byYg
Zm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwogICAgIGF1dG8q
IGNvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICBMYXlv
dXRVbml0IGJvZHlBbmREb2N1bWVudFZlcnRpY2FsTWFyZ2luUGFkZGluZ0FuZEJvcmRlcjsKICAg
ICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrKSB7CkBAIC01MCwxMCArNTAsMTAgQEAgTGF5b3V0VW5p
dCBGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5p
bmdCbG9ja1dpdGhGaXgKICAgICAgICAgLy8gSWYgdGhlIG9ubHkgZml4ZWQgdmFsdWUgYm94IHdl
IGZpbmQgaXMgdGhlIElDQiwgdGhlbiBpZ25vcmUgdGhlIGJvZHkgYW5kIHRoZSBkb2N1bWVudCAo
dmVydGljYWwpIG1hcmdpbiwgcGFkZGluZyBhbmQgYm9yZGVyLiBTbyBtdWNoIHF1aXJraW5lc3Mu
CiAgICAgICAgIC8vIC1hbmQgaXQncyB0b3RhbGx5IGluc2FuZSBiZWNhdXNlIG5vdyB3ZSBmcmVl
bHkgdHJhdmVsIGFjcm9zcyBmb3JtYXR0aW5nIGNvbnRleHQgYm91bmRhcmllcyBhbmQgY29tcHV0
ZWQgbWFyZ2lucyBhcmUgbm9uZXhpc3RlbnQuCiAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2st
PmlzQm9keUJveCgpIHx8IGNvbnRhaW5pbmdCbG9jay0+aXNEb2N1bWVudEJveCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91
dEJveCgqY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluaW5nQmxvY2sp
OwogCi0gICAgICAgICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7
IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5pbmdCbG9jay0+Y29u
dGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07Ci0gICAgICAgICAgICBhdXRvIHZl
cnRpY2FsTWFyZ2luID0gR2VvbWV0cnkoZm9ybWF0dGluZ0NvbnRleHQoKSkuY29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbigqY29udGFpbmluZ0Jsb2NrLCB1c2VkVmFsdWVzKTsKKyAgICAgICAgICAgIGF1
dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRleHQu
ZGlzcGxheUJveEZvckxheW91dEJveCgqY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2so
KSkuY29udGVudEJveFdpZHRoKCkgfTsKKyAgICAgICAgICAgIGF1dG8gdmVydGljYWxNYXJnaW4g
PSBHZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbigqY29u
dGFpbmluZ0Jsb2NrLCB1c2VkVmFsdWVzKTsKICAgICAgICAgICAgIGF1dG8gdmVydGljYWxQYWRk
aW5nID0gZGlzcGxheUJveC5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGRpc3BsYXlCb3gucGFk
ZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7CiAgICAgICAgICAgICBhdXRvIHZlcnRpY2FsQm9yZGVy
ID0gZGlzcGxheUJveC5ib3JkZXJUb3AoKSArIGRpc3BsYXlCb3guYm9yZGVyQm90dG9tKCk7CiAg
ICAgICAgICAgICBib2R5QW5kRG9jdW1lbnRWZXJ0aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXIg
Kz0gdmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyB2ZXJ0aWNhbE1hcmdpbi5hZnRl
ci52YWx1ZU9yKDApICsgdmVydGljYWxQYWRkaW5nICsgdmVydGljYWxCb3JkZXI7CkBAIC02Miw3
ICs2Miw3IEBAIExheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6aGVpZ2h0VmFs
dWVPZk5lYXJlc3RDb250YWluaW5nQmxvY2tXaXRoRml4CiAgICAgICAgIGNvbnRhaW5pbmdCbG9j
ayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgfQogICAgIC8vIElu
aXRpYWwgY29udGFpbmluZyBibG9jayBoYXMgdG8gaGF2ZSBhIGhlaWdodC4KLSAgICByZXR1cm4g
bGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3guaW5pdGlhbENvbnRh
aW5pbmdCbG9jaygpKS5jb250ZW50Qm94KCkuaGVpZ2h0KCkgLSBib2R5QW5kRG9jdW1lbnRWZXJ0
aWNhbE1hcmdpblBhZGRpbmdBbmRCb3JkZXI7CisgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2so
KSkuY29udGVudEJveCgpLmhlaWdodCgpIC0gYm9keUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5Q
YWRkaW5nQW5kQm9yZGVyOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcApp
bmRleCBhZDVlNWRjMTYzOGJlNDYxMDU5ZjQ3ZjU3YmY4ZWM5ZmM4OTg4NDdjLi4wMDQ0MTk1MjM4
YzY0ZTBhZmMxZTJiNTA5NTU3ODljZTQ4MzdmYjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKQEAgLTEzMyw3ICsxMzMsNyBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0Ojp1c2VkQXZhaWxhYmxlV2lkdGhGb3JGbG9hdEF2b2lkZXIoYwogICAg
IGlmICghY29uc3RyYWludHMubGVmdCAmJiAhY29uc3RyYWludHMucmlnaHQpCiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gZG93bmNhc3Q8Q29udGFpbmVy
PigqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxv
Y2tEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRh
aW5pbmdCbG9jayk7CisgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKTsKICAgICBhdXRvIGF2YWlsYWJsZVdp
ZHRoID0gY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKTsKIAogICAg
IExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrTGVmdDsKQEAgLTE5OCwxMCArMTk4LDkgQEAgdm9p
ZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihj
b25zdCBCb3gmIGxheW91dEJveCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1
dG8gY29tcHV0ZUluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbiA9IFsmXSB7Ci0gICAgICAgICAgICBh
dXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgICAgICAgICBhdXRv
IHBvc2l0aW9uT2Zmc2V0ID0gZ2VvbWV0cnkoKS5pbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZz
ZXQoY2hpbGRCb3gpOwogCi0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3Rh
dGUuZGlzcGxheUJveEZvckxheW91dEJveChjaGlsZEJveCk7CisgICAgICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChjaGlsZEJveCk7CiAgICAgICAgICAg
ICBhdXRvIHRvcExlZnQgPSBkaXNwbGF5Qm94LnRvcExlZnQoKTsKIAogICAgICAgICAgICAgdG9w
TGVmdC5tb3ZlKHBvc2l0aW9uT2Zmc2V0KTsKQEAgLTIxNiw4ICsyMTUsNyBAQCB2b2lkIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IEJv
eCYgbGF5b3V0Qm94KQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0
aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0
LCBjb25zdCBCb3gmIGxheW91dEJveCkKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMt
PmxheW91dFN0YXRlKCk7Ci0gICAgbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpLnNldFRvcChnZW9tZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0
Qm94KSk7CisgICAgZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLnNldFRvcChnZW9t
ZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0Qm94KSk7CiAgICAgaWYgKGxheW91
dEJveC5oYXNGbG9hdENsZWFyKCkpCiAgICAgICAgIGNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBv
c2l0aW9uRm9yRmxvYXRDbGVhcihmbG9hdGluZ0NvbnRleHQsIGxheW91dEJveCk7CiAgICAgZWxz
ZSBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkKQEAgLTIyNiw3
ICsyMjQsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNWZXJ0
aWNhbFBvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4dAogCiB2b2lkIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBsYXlv
dXRCb3gpCiB7Ci0gICAgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91
dEJveCkuc2V0TGVmdChnZW9tZXRyeSgpLnN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRC
b3gpKTsKKyAgICBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0TGVmdChnZW9t
ZXRyeSgpLnN0YXRpY0hvcml6b250YWxQb3NpdGlvbihsYXlvdXRCb3gpKTsKIH0KIAogdm9pZCBC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljUG9zaXRpb24oY29uc3QgRmxvYXRp
bmdDb250ZXh0JiBmbG9hdGluZ0NvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQpAQCAtMjM3
LDExICsyMzUsMTAgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGlj
UG9zaXRpb24oY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGkKIAogdm9pZCBCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbihjb25zdCBCb3gm
IGxheW91dEJveCkKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRl
KCk7CiAgICAgYXV0byBlc3RpbWF0ZWRNYXJnaW5CZWZvcmUgPSBtYXJnaW5Db2xsYXBzZSgpLmVz
dGltYXRlZE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpOwogICAgIHNldEVzdGltYXRlZE1hcmdpbkJl
Zm9yZShsYXlvdXRCb3gsIGVzdGltYXRlZE1hcmdpbkJlZm9yZSk7CiAKLSAgICBhdXRvJiBkaXNw
bGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwor
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CiAgICAgYXV0byBub25Db2xsYXBzZWRWYWx1ZXMgPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNv
bGxhcHNlZFZhbHVlcyB7IGVzdGltYXRlZE1hcmdpbkJlZm9yZS5ub25Db2xsYXBzZWRWYWx1ZSwg
eyB9IH07CiAgICAgYXV0byBjb2xsYXBzZWRWYWx1ZXMgPSBVc2VkVmVydGljYWxNYXJnaW46OkNv
bGxhcHNlZFZhbHVlcyB7IGVzdGltYXRlZE1hcmdpbkJlZm9yZS5jb2xsYXBzZWRWYWx1ZSwgeyB9
LCBlc3RpbWF0ZWRNYXJnaW5CZWZvcmUuaXNDb2xsYXBzZWRUaHJvdWdoIH07CiAgICAgYXV0byB2
ZXJ0aWNhbE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbiB7IG5vbkNvbGxhcHNlZFZhbHVlcywg
Y29sbGFwc2VkVmFsdWVzIH07CkBAIC0zMTAsNyArMzA3LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbkZvckZsb2F0Q2xlYXIo
Y29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBs
YXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgIEFT
U0VSVCgqdmVydGljYWxQb3NpdGlvbkFuZENsZWFyYW5jZS5wb3NpdGlvbiA+PSBkaXNwbGF5Qm94
LnRvcCgpKTsKICAgICBkaXNwbGF5Qm94LnNldFRvcCgqdmVydGljYWxQb3NpdGlvbkFuZENsZWFy
YW5jZS5wb3NpdGlvbik7CiAgICAgaWYgKHZlcnRpY2FsUG9zaXRpb25BbmRDbGVhcmFuY2UuY2xl
YXJhbmNlKQpAQCAtMzMzLDEyICszMzAsMTEgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlRmxvYXRpbmdQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2EKIHsK
ICAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwogICAgIEFTU0VS
VChoYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpKTsKLSAgICBsYXlvdXRTdGF0
ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KGZsb2F0aW5n
Q29udGV4dC5wb3NpdGlvbkZvckZsb2F0KGxheW91dEJveCkpOworICAgIGRpc3BsYXlCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KGZsb2F0aW5nQ29udGV4dC5wb3NpdGlvbkZv
ckZsb2F0KGxheW91dEJveCkpOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVQb3NpdGlvblRvQXZvaWRGbG9hdHMoY29uc3QgRmxvYXRpbmdDb250ZXh0JiBmbG9hdGlu
Z0NvbnRleHQsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewotICAgIGF1dG8mIGxheW91dFN0YXRl
ID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAgICAvLyBGb3JtYXR0aW5nIGNvbnRleHQgcm9vdHMg
YXZvaWQgZmxvYXRzLgogICAgIEFTU0VSVChsYXlvdXRCb3guZXN0YWJsaXNoZXNCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0KCkpOwogICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlv
bmVkKCkpOwpAQCAtMzQ5LDE3ICszNDUsMTYgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlUG9zaXRpb25Ub0F2b2lkRmxvYXRzKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGF1dG8gYWRqdXN0ZWRQb3NpdGlvbiA9IGZsb2F0aW5n
Q29udGV4dC5wb3NpdGlvbkZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRCb3gpKQotICAg
ICAgICBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0VG9w
TGVmdCgqYWRqdXN0ZWRQb3NpdGlvbik7CisgICAgICAgIGRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KS5zZXRUb3BMZWZ0KCphZGp1c3RlZFBvc2l0aW9uKTsKIH0KIAogdm9pZCBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlv
dXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRBdmFpbGFibGVXaWR0aCkKIHsKLSAgICBh
dXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aDsKICAgICBpZiAodXNlZEF2YWlsYWJsZVdpZHRoKQogICAgICAgICBhdmFp
bGFibGVXaWR0aCA9ICp1c2VkQXZhaWxhYmxlV2lkdGg7CiAgICAgZWxzZQotICAgICAgICBhdmFp
bGFibGVXaWR0aCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJv
eC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCk7CisgICAgICAgIGF2YWlsYWJs
ZVdpZHRoID0gZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpKS5jb250ZW50Qm94V2lkdGgoKTsKIAogICAgIGF1dG8gY29tcHV0ZSA9IFsmXShPcHRpb25h
bDxMYXlvdXRVbml0PiB1c2VkV2lkdGgpIC0+IFdpZHRoQW5kTWFyZ2luIHsKICAgICAgICAgYXV0
byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBhdmFpbGFibGVXaWR0aCwgdXNl
ZFdpZHRoLCB7IH0gfTsKQEAgLTM4Niw3ICszODEsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9u
YQogICAgIGlmICh3aWR0aEFuZE1hcmdpbi53aWR0aCA8IG1pbldpZHRoQW5kTWFyZ2luLndpZHRo
KQogICAgICAgICB3aWR0aEFuZE1hcmdpbiA9IG1pbldpZHRoQW5kTWFyZ2luOwogCi0gICAgYXV0
byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpOwogICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHdpZHRoQW5kTWFyZ2lu
LndpZHRoKTsKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4od2lkdGhBbmRNYXJn
aW4udXNlZE1hcmdpbik7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsQ29tcHV0ZWRNYXJn
aW4od2lkdGhBbmRNYXJnaW4uY29tcHV0ZWRNYXJnaW4pOwpAQCAtMzk0LDE1ICszODksMTMgQEAg
dm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIE9wdGlvbmEKIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewotICAgIGF1dG8m
IGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKLQogICAgIGF1dG8gY29tcHV0ZSA9
IFsmXShVc2VkVmVydGljYWxWYWx1ZXMgdXNlZFZhbHVlcykgLT4gSGVpZ2h0QW5kTWFyZ2luIHsK
IAogICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5GbG93KCkpCiAgICAgICAgICAgICByZXR1cm4g
Z2VvbWV0cnkoKS5pbkZsb3dIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsK
IAogICAgICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkoKS5mbG9hdGluZ0hlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gs
IHVzZWRWYWx1ZXMsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgbGF5b3V0U3RhdGUuZGlzcGxheUJv
eEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lk
dGgoKSB9KTsKKyAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeSgpLmZsb2F0aW5nSGVpZ2h0QW5k
TWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcywgVXNlZEhvcml6b250YWxWYWx1ZXMgeyBkaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRC
b3hXaWR0aCgpIH0pOwogCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4geyB9OwpAQCAtNDEzLDcgKzQwNiw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCkKICAgICAgICAg
aWYgKGhlaWdodEFuZE1hcmdpbi5oZWlnaHQgPiAqbWF4SGVpZ2h0KSB7CiAgICAgICAgICAgICBh
dXRvIG1heEhlaWdodEFuZE1hcmdpbiA9IGNvbXB1dGUoeyAqbWF4SGVpZ2h0IH0pOwogICAgICAg
ICAgICAgLy8gVXNlZCBoZWlnaHQgc2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4KLSAgICAgICAgICAg
IEFTU0VSVCgobGF5b3V0U3RhdGUuaW5RdWlya3NNb2RlKCkgJiYgKGxheW91dEJveC5pc0JvZHlC
b3goKSB8fCBsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpKSkgfHwgbWF4SGVpZ2h0QW5kTWFyZ2lu
LmhlaWdodCA9PSAqbWF4SGVpZ2h0KTsKKyAgICAgICAgICAgIEFTU0VSVCgobGF5b3V0U3RhdGUo
KS5pblF1aXJrc01vZGUoKSAmJiAobGF5b3V0Qm94LmlzQm9keUJveCgpIHx8IGxheW91dEJveC5p
c0RvY3VtZW50Qm94KCkpKSB8fCBtYXhIZWlnaHRBbmRNYXJnaW4uaGVpZ2h0ID09ICptYXhIZWln
aHQpOwogICAgICAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0geyAqbWF4SGVpZ2h0LCBtYXhIZWln
aHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luIH07CiAgICAgICAgIH0KICAgICB9CkBAIC00
MjIsNyArNDE1LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0
QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgICAgICBpZiAoaGVpZ2h0QW5kTWFy
Z2luLmhlaWdodCA8ICptaW5IZWlnaHQpIHsKICAgICAgICAgICAgIGF1dG8gbWluSGVpZ2h0QW5k
TWFyZ2luID0gY29tcHV0ZSh7ICptaW5IZWlnaHQgfSk7CiAgICAgICAgICAgICAvLyBVc2VkIGhl
aWdodCBzaG91bGQgcmVtYWluIHRoZSBzYW1lLgotICAgICAgICAgICAgQVNTRVJUKChsYXlvdXRT
dGF0ZS5pblF1aXJrc01vZGUoKSAmJiAobGF5b3V0Qm94LmlzQm9keUJveCgpIHx8IGxheW91dEJv
eC5pc0RvY3VtZW50Qm94KCkpKSB8fCBtaW5IZWlnaHRBbmRNYXJnaW4uaGVpZ2h0ID09ICptaW5I
ZWlnaHQpOworICAgICAgICAgICAgQVNTRVJUKChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgp
ICYmIChsYXlvdXRCb3guaXNCb2R5Qm94KCkgfHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkp
IHx8IG1pbkhlaWdodEFuZE1hcmdpbi5oZWlnaHQgPT0gKm1pbkhlaWdodCk7CiAgICAgICAgICAg
ICBoZWlnaHRBbmRNYXJnaW4gPSB7ICptaW5IZWlnaHQsIG1pbkhlaWdodEFuZE1hcmdpbi5ub25D
b2xsYXBzZWRNYXJnaW4gfTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzMiw3ICs0MjUsNyBAQCB2
b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29uc3Qg
Qm94JiBsYXlvdXRCb3gpCiAgICAgLy8gMy4gQWRqdXN0IHByZXZpb3VzIGluLWZsb3cgc2libGlu
ZyBtYXJnaW4gYWZ0ZXIgdXNpbmcgdGhpcyBtYXJnaW4uCiAgICAgYXV0byBjb2xsYXBzZWRNYXJn
aW4gPSBtYXJnaW5Db2xsYXBzZSgpLmNvbGxhcHNlZFZlcnRpY2FsVmFsdWVzKGxheW91dEJveCwg
aGVpZ2h0QW5kTWFyZ2luLm5vbkNvbGxhcHNlZE1hcmdpbik7CiAgICAgYXV0byB2ZXJ0aWNhbE1h
cmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbiB7IGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRN
YXJnaW4sIGNvbGxhcHNlZE1hcmdpbiB9OwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRT
dGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxh
eUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKIAogICAgIC8vIE91dCBv
ZiBmbG93IGJveGVzIGRvbid0IG5lZWQgdmVydGljYWwgYWRqdXN0bWVudCBhZnRlciBtYXJnaW4g
Y29sbGFwc2luZy4KICAgICBpZiAobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7
CkBAIC01MDcsOCArNTAwLDcgQEAgTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp2
ZXJ0aWNhbFBvc2l0aW9uV2l0aE1hcmdpbihjb25zdCBCb3gmIGxheW91dEIKICAgICAvLyAyLiBD
aGVjayBpZiB0aGUgbWFyZ2luIGJlZm9yZSBjb2xsYXBzZXMgd2l0aCB0aGUgcHJldmlvdXMgYm94
J3MgbWFyZ2luIGFmdGVyLiBpZiBub3QgLT4gcmV0dXJuIHByZXZpb3VzIGJveCdzIGJvdHRvbSBp
bmNsdWRpbmcgbWFyZ2luIGFmdGVyICsgbWFyZ2luQmVmb3JlCiAgICAgLy8gMy4gQ2hlY2sgaWYg
dGhlIHByZXZpb3VzIGJveCdzIG1hcmdpbnMgY29sbGFwc2UgdGhyb3VnaC4gSWYgbm90IC0+IHJl
dHVybiBwcmV2aW91cyBib3gnIGJvdHRvbSBleGNsdWRpbmcgbWFyZ2luIGFmdGVyICsgbWFyZ2lu
QmVmb3JlICh0aGV5IGFyZSBzdXBwb3NlZCB0byBiZSBlcXVhbCkKICAgICAvLyA0LiBHbyB0byBw
cmV2aW91cyBib3ggYW5kIHN0YXJ0IGZyb20gc3RlcCAjMSB1bnRpbCB3ZSBoaXQgdGhlIHBhcmVu
dCBib3guCi0gICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgpOwotICAg
IGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxh
eW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KTsKICAgICBpZiAoZGlzcGxheUJveC5oYXNDbGVhcmFuY2UoKSkKICAgICAgICAg
cmV0dXJuIGRpc3BsYXlCb3gudG9wKCk7CiAKQEAgLTUxOCwxOSArNTEwLDE5IEBAIExheW91dFVu
aXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6dmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgYXV0byYgcHJldmlv
dXNJbkZsb3dTaWJsaW5nID0gKmN1cnJlbnRMYXlvdXRCb3gtPnByZXZpb3VzSW5GbG93U2libGlu
ZygpOwogICAgICAgICBpZiAoIW1hcmdpbkNvbGxhcHNlKCkubWFyZ2luQmVmb3JlQ29sbGFwc2Vz
V2l0aFByZXZpb3VzU2libGluZ01hcmdpbkFmdGVyKCpjdXJyZW50TGF5b3V0Qm94KSkgewotICAg
ICAgICAgICAgYXV0byYgcHJldmlvdXNEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJv
eEZvckxheW91dEJveChwcmV2aW91c0luRmxvd1NpYmxpbmcpOworICAgICAgICAgICAgYXV0byYg
cHJldmlvdXNEaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChwcmV2aW91c0luRmxv
d1NpYmxpbmcpOwogICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzRGlzcGxheUJveC5yZWN0V2l0
aE1hcmdpbigpLmJvdHRvbSgpICsgdmVydGljYWxNYXJnaW4uYmVmb3JlKCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1hcmdpbkNvbGxhcHNlKCkubWFyZ2luc0NvbGxhcHNlVGhyb3VnaChw
cmV2aW91c0luRmxvd1NpYmxpbmcpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwcmV2aW91c0Rpc3Bs
YXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHByZXZpb3VzSW5GbG93
U2libGluZyk7CisgICAgICAgICAgICBhdXRvJiBwcmV2aW91c0Rpc3BsYXlCb3ggPSBkaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KHByZXZpb3VzSW5GbG93U2libGluZyk7CiAgICAgICAgICAgICByZXR1
cm4gcHJldmlvdXNEaXNwbGF5Qm94LmJvdHRvbSgpICsgdmVydGljYWxNYXJnaW4uYmVmb3JlKCk7
CiAgICAgICAgIH0KICAgICAgICAgY3VycmVudExheW91dEJveCA9ICZwcmV2aW91c0luRmxvd1Np
Ymxpbmc7CiAgICAgfQogCiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxheW91dEJveC5j
b250YWluaW5nQmxvY2soKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hUb3Ag
PSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jaykuY29u
dGVudEJveFRvcCgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrQ29udGVudEJveFRvcCA9IGRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKS5jb250ZW50Qm94VG9wKCk7CiAg
ICAgLy8gQWRqdXN0IHZlcnRpY2FsIHBvc2l0aW9uIGRlcGVuZGluZyB3aGV0aGVyIHRoaXMgYm94
IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYWRqb2lucyB3aXRoIGl0cyBwYXJlbnQuCiAgICAgYXV0
byBkaXJlY3RseUFkam9pbnNQYXJlbnQgPSAhbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGlu
ZygpOwogICAgIGlmIChkaXJlY3RseUFkam9pbnNQYXJlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCA1OGExYzExNTEwN2Q2ZDE0NmNiNzkw
MGNkZjc5NWUzYjhiOWU1MzAzLi5lZjliMWExN2RlZjJkODY0MTlmOWRhMGI5ZGFiYTkyOTE0MTI2
MmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Js
b2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBA
IC01OCw4ICs1OCw5IEBAIEhlaWdodEFuZE1hcmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnCiAgICAgICAgIC8vIGFuZCBy
ZWxhdGl2ZWx5IHBvc2l0aW9uZWQgYm94ZXMgYXJlIGNvbnNpZGVyZWQgd2l0aG91dCB0aGVpciBv
ZmZzZXQpLiBOb3RlIHRoYXQgdGhlIGNoaWxkIGJveCBtYXkgYmUgYW4gYW5vbnltb3VzIGJsb2Nr
IGJveC4KIAogICAgICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7
Ci0gICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KGxheW91dEJveCk7Ci0gICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBs
YXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Js
b2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOworICAgICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4
dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3gg
PSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Cisg
ICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRC
b3hXaWR0aCgpOwogICAgICAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRy
eTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVz
IHsgY29udGFpbmluZ0Jsb2NrV2lkdGggfSk7CiAgICAgICAgIGF1dG8gbm9uQ29sbGFwc2VkTWFy
Z2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyLnZhbHVlT3IoMCkgfTsgCiAgICAgICAgIGF1dG8gYm9yZGVyQW5kUGFkZGluZ1RvcCA9IGRp
c3BsYXlCb3guYm9yZGVyVG9wKCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OwpAQCAtODUsOSArODYsOSBAQCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkSGVpZ2h0QW5kTWFyZwogICAgICAgICAvLyAy
LiB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGJvdHRvbSAocG9zc2libHkgY29sbGFwc2VkKSBtYXJn
aW4gb2YgaXRzIGxhc3QgaW4tZmxvdyBjaGlsZCwgaWYgdGhlIGNoaWxkJ3MgYm90dG9tIG1hcmdp
bi4uLgogICAgICAgICBhdXRvKiBsYXN0SW5GbG93Q2hpbGQgPSBkb3duY2FzdDxDb250YWluZXI+
KGxheW91dEJveCkubGFzdEluRmxvd0NoaWxkKCk7CiAgICAgICAgIEFTU0VSVChsYXN0SW5GbG93
Q2hpbGQpOwotICAgICAgICBhdXRvIG1hcmdpbkNvbGxhcHNlID0gTWFyZ2luQ29sbGFwc2UoZm9y
bWF0dGluZ0NvbnRleHQoKSk7CisgICAgICAgIGF1dG8gbWFyZ2luQ29sbGFwc2UgPSBNYXJnaW5D
b2xsYXBzZShmb3JtYXR0aW5nQ29udGV4dCk7CiAgICAgICAgIGlmICghbWFyZ2luQ29sbGFwc2Uu
bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoKmxhc3RJbkZsb3dDaGls
ZCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGxhc3RJbkZsb3dEaXNwbGF5Qm94ID0gbGF5b3V0U3Rh
dGUuZGlzcGxheUJveEZvckxheW91dEJveCgqbGFzdEluRmxvd0NoaWxkKTsKKyAgICAgICAgICAg
IGF1dG8mIGxhc3RJbkZsb3dEaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJv
eEZvckxheW91dEJveCgqbGFzdEluRmxvd0NoaWxkKTsKICAgICAgICAgICAgIGF1dG8gYm90dG9t
RWRnZU9mQm90dG9tTWFyZ2luID0gbGFzdEluRmxvd0Rpc3BsYXlCb3guYm90dG9tKCkgKyAobGFz
dEluRmxvd0Rpc3BsYXlCb3guaGFzQ29sbGFwc2VkVGhyb3VnaE1hcmdpbigpID8gTGF5b3V0VW5p
dCgpIDogbGFzdEluRmxvd0Rpc3BsYXlCb3gubWFyZ2luQWZ0ZXIoKSk7IAogICAgICAgICAgICAg
cmV0dXJuIHsgYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwg
bm9uQ29sbGFwc2VkTWFyZ2luIH07CiAgICAgICAgIH0KQEAgLTk3LDcgKzk4LDcgQEAgSGVpZ2h0
QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBs
YWNlZEhlaWdodEFuZE1hcmcKICAgICAgICAgd2hpbGUgKGluRmxvd0NoaWxkICYmIG1hcmdpbkNv
bGxhcHNlLm1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcigqaW5GbG93
Q2hpbGQpKQogICAgICAgICAgICAgaW5GbG93Q2hpbGQgPSBpbkZsb3dDaGlsZC0+cHJldmlvdXNJ
bkZsb3dTaWJsaW5nKCk7CiAgICAgICAgIGlmIChpbkZsb3dDaGlsZCkgewotICAgICAgICAgICAg
YXV0byYgaW5GbG93RGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goKmluRmxvd0NoaWxkKTsKKyAgICAgICAgICAgIGF1dG8mIGluRmxvd0Rpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCppbkZsb3dDaGlsZCk7CiAg
ICAgICAgICAgICByZXR1cm4geyBpbkZsb3dEaXNwbGF5Qm94LnRvcCgpICsgaW5GbG93RGlzcGxh
eUJveC5ib3JkZXJCb3goKS5oZWlnaHQoKSAtIGJvcmRlckFuZFBhZGRpbmdUb3AsIG5vbkNvbGxh
cHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKQEAgLTE0MCw3ICsxNDEsNyBAQCBXaWR0aEFuZE1h
cmdpbiBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRX
aWR0aEFuZE1hcmdpbgogICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwog
ICAgICAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2Nr
KCk7CiAgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkVmFsdWVzLmNvbnRh
aW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCk7Ci0gICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBs
YXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAg
YXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91
dEJveChsYXlvdXRCb3gpOwogCiAgICAgICAgIGF1dG8gd2lkdGggPSBjb21wdXRlZFZhbHVlSWZO
b3RBdXRvKHVzZWRWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1c2VkVmFsdWVzLndpZHRoLnZhbHVl
KCksIEZpeGVkIH0gOiBzdHlsZS5sb2dpY2FsV2lkdGgoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgp
OwogICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21w
dXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKQEAgLTIzMSwxNyAr
MjMyLDE3IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0
YXRpY1ZlcnRpY2FsUG9zaXRpb24oY29uc3QgQm94JiBsCiAgICAgLy8gVGhlIHZlcnRpY2FsIGRp
c3RhbmNlIGJldHdlZW4gdHdvIHNpYmxpbmcgYm94ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgJ21h
cmdpbicgcHJvcGVydGllcy4KICAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zIGJldHdlZW4gYWRqYWNl
bnQgYmxvY2stbGV2ZWwgYm94ZXMgaW4gYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgY29sbGFw
c2UuCiAgICAgaWYgKGF1dG8qIHByZXZpb3VzSW5GbG93U2libGluZyA9IGxheW91dEJveC5wcmV2
aW91c0luRmxvd1NpYmxpbmcoKSkgewotICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0Rpc3Bs
YXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKnByZXZpb3VzSW5G
bG93U2libGluZyk7CisgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93RGlzcGxheUJveCA9IGZv
cm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgqcHJldmlvdXNJbkZsb3dT
aWJsaW5nKTsKICAgICAgICAgcmV0dXJuIHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5ib3R0b20o
KSArIHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5tYXJnaW5BZnRlcigpOwogICAgIH0KLSAgICBy
ZXR1cm4gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29u
dGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hUb3AoKTsKKyAgICByZXR1cm4gZm9ybWF0dGluZ0Nv
bnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2Nr
KCkpLmNvbnRlbnRCb3hUb3AoKTsKIH0KIAogTGF5b3V0VW5pdCBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0
Qm94KSBjb25zdAogewogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1cmVu
Lmh0bWwjYmxvY2stZm9ybWF0dGluZwogICAgIC8vIEluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250
ZXh0LCBlYWNoIGJveCdzIGxlZnQgb3V0ZXIgZWRnZSB0b3VjaGVzIHRoZSBsZWZ0IGVkZ2Ugb2Yg
dGhlIGNvbnRhaW5pbmcgYmxvY2sgKGZvciByaWdodC10by1sZWZ0IGZvcm1hdHRpbmcsIHJpZ2h0
IGVkZ2VzIHRvdWNoKS4KLSAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hMZWZ0KCkgKyBs
YXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5tYXJnaW5TdGFy
dCgpOworICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveExlZnQoKSArIGZvcm1h
dHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLm1hcmdpblN0
YXJ0KCk7CiB9CiAKIFBvaW50IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0
aWNQb3NpdGlvbihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKQEAgLTI2MSw3ICsyNjIsNyBA
QCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxv
d0hlaWdodEFuZE1hcmdpbihjb25zdCBCbwogICAgIEhlaWdodEFuZE1hcmdpbiBoZWlnaHRBbmRN
YXJnaW47CiAgICAgLy8gRklYTUU6IExldCdzIHNwZWNpYWwgY2FzZSB0aGUgdGFibGUgaGVpZ2h0
IGNvbXB1dGF0aW9uIGZvciBub3cgLT4gZmlndXJlIG91dCB3aGV0aGVyIHRhYmxlcyBmYWxsIGlu
dG8gdGhlICJpbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmdpbiIgY2F0ZWdvcnkuCiAgICAg
aWYgKGxheW91dEJveC5lc3RhYmxpc2hlc1RhYmxlRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAg
ICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBs
YXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5n
QmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKKyAgICAgICAgYXV0byB1c2VkSG9yaXpvbnRh
bFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRC
b3hXaWR0aCgpIH07CiAgICAgICAgIGhlaWdodEFuZE1hcmdpbiA9IGNvbXBsaWNhdGVkQ2FzZXMo
bGF5b3V0Qm94LCB1c2VkVmFsdWVzLCB1c2VkSG9yaXpvbnRhbFZhbHVlcyk7CiAgICAgfSBlbHNl
IGlmIChsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSAmJiAhbGF5b3V0Qm94LmlzRG9jdW1l
bnRCb3goKSkgewogICAgICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHRoZSBjYXNlIGZvciB0aGUg
ZG9jdW1lbnQgZWxlbWVudC4gTGV0J3MganVzdCBjb21wbGljYXRlZC1jYXNlIGl0IGZvciBub3cu
CkBAIC0yNjksNyArMjcwLDcgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm8KICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQgY2FzZXMKICAgICAgICAgLy8gQmxvY2st
bGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyB3aGVuICdvdmVyZmxv
dycgZG9lcyBub3QgY29tcHV0ZSB0byAndmlzaWJsZScgKGV4Y2VwdCBpZiB0aGUgJ292ZXJmbG93
JyBwcm9wZXJ0eSdzIHZhbHVlIGhhcyBiZWVuIHByb3BhZ2F0ZWQgdG8gdGhlIHZpZXdwb3J0KS4K
LSAgICAgICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVz
IHsgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFp
bmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07CisgICAgICAgIGF1dG8gdXNlZEhvcml6
b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGZvcm1hdHRpbmdDb250ZXh0KCku
ZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250
ZW50Qm94V2lkdGgoKSB9OwogICAgICAgICBoZWlnaHRBbmRNYXJnaW4gPSBjb21wbGljYXRlZENh
c2VzKGxheW91dEJveCwgdXNlZFZhbHVlcywgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9j
a0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggNzMwZGE1
MThmMzY4YTUyZjY2M2IwMmUzZTI1NjY3Nzc1MWRjMTYyYy4uNjVkMTJmOTM5YWU1ZmZiNDE4NTA0
MDYxOTQ0NDk5N2U3ZWE5MjFhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Js
b2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRR
dWlya3MuY3BwCkBAIC02NSwxMSArNjUsMTEgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0IEJveCYKICAg
ICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkpOwogICAgIEFTU0VSVChsYXlvdXRCb3guaXNE
b2N1bWVudEJveCgpIHx8IGxheW91dEJveC5pc0JvZHlCb3goKSk7CiAKLSAgICBhdXRvJiBsYXlv
dXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRl
eHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwogICAgIGF1dG8mIGRvY3VtZW50Qm94ID0g
bGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSA/IGxheW91dEJveCA6ICpsYXlvdXRCb3gucGFyZW50
KCk7Ci0gICAgYXV0byYgZG9jdW1lbnRCb3hEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxh
eUJveEZvckxheW91dEJveChkb2N1bWVudEJveCk7CisgICAgYXV0byYgZG9jdW1lbnRCb3hEaXNw
bGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChkb2N1bWVu
dEJveCk7CiAKLSAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGxh
eW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5pdGlhbENvbnRhaW5pbmdCbG9jayhs
YXlvdXRCb3gpKTsKKyAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9
IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5pdGlhbENvbnRhaW5p
bmdCbG9jayhsYXlvdXRCb3gpKTsKICAgICBhdXRvIHN0cmVjaGVkSGVpZ2h0ID0gaW5pdGlhbENv
bnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVudEJveEhlaWdodCgpOwogICAgIHN0cmVjaGVk
SGVpZ2h0IC09IGRvY3VtZW50Qm94RGlzcGxheUJveC52ZXJ0aWNhbEJvcmRlcigpICsgZG9jdW1l
bnRCb3hEaXNwbGF5Qm94LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CiAKQEAgLTgyLDE0
ICs4MiwxNCBAQCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtz
OjpzdHJldGNoZWRJbkZsb3dIZWlnaHQoY29uc3QgQm94JgogICAgICAgICAvLyBIZXJlIGlzIHRo
ZSBxdWlya3kgcGFydCBmb3IgYm9keSBib3g6CiAgICAgICAgIC8vIFN0cmV0Y2ggdGhlIGJvZHkg
dXNpbmcgdGhlIGluaXRpYWwgY29udGFpbmluZyBibG9jaydzIGhlaWdodCBhbmQgc2hyaW5rIGl0
IHdpdGggZG9jdW1lbnQgYm94J3MgbWFyZ2luL2JvcmRlci9wYWRkaW5nLgogICAgICAgICAvLyBU
aGlzIGxvb2tzIGV4dHJlbWVseSBvZGQgd2hlbiBodG1sIGhhcyBub24tYXV0byBoZWlnaHQuCi0g
ICAgICAgIGF1dG8gZG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5KGZvcm1hdHRp
bmdDb250ZXh0KCkpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4oZG9jdW1lbnRCb3gsIFVzZWRIb3Jp
em9udGFsVmFsdWVzIHsgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVudEJv
eFdpZHRoKCkgfSk7CisgICAgICAgIGF1dG8gZG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbiA9IEdl
b21ldHJ5KGZvcm1hdHRpbmdDb250ZXh0KS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKGRvY3VtZW50
Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGluaXRpYWxDb250YWluaW5nQmxvY2tEaXNwbGF5
Qm94LmNvbnRlbnRCb3hXaWR0aCgpIH0pOwogICAgICAgICBzdHJlY2hlZEhlaWdodCAtPSAoZG9j
dW1lbnRCb3hWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSArIGRvY3VtZW50Qm94VmVy
dGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSk7CiAKLSAgICAgICAgYXV0byYgYm9keUJveERp
c3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7
CisgICAgICAgIGF1dG8mIGJvZHlCb3hEaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlz
cGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgICAgICBzdHJlY2hlZEhlaWdodCAt
PSBib2R5Qm94RGlzcGxheUJveC52ZXJ0aWNhbEJvcmRlcigpICsgYm9keUJveERpc3BsYXlCb3gu
dmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKTsKIAogICAgICAgICBhdXRvIG5vbkNvbGxhcHNl
ZE1hcmdpbiA9IGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW47Ci0gICAgICAgIGF1
dG8gY29sbGFwc2VkTWFyZ2luID0gTWFyZ2luQ29sbGFwc2UoZm9ybWF0dGluZ0NvbnRleHQoKSku
Y29sbGFwc2VkVmVydGljYWxWYWx1ZXMobGF5b3V0Qm94LCBub25Db2xsYXBzZWRNYXJnaW4pOwor
ICAgICAgICBhdXRvIGNvbGxhcHNlZE1hcmdpbiA9IE1hcmdpbkNvbGxhcHNlKGZvcm1hdHRpbmdD
b250ZXh0KS5jb2xsYXBzZWRWZXJ0aWNhbFZhbHVlcyhsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZE1h
cmdpbik7CiAgICAgICAgIHRvdGFsVmVydGljYWxNYXJnaW4gPSBjb2xsYXBzZWRNYXJnaW4uYmVm
b3JlLnZhbHVlT3Iobm9uQ29sbGFwc2VkTWFyZ2luLmJlZm9yZSk7CiAgICAgICAgIHRvdGFsVmVy
dGljYWxNYXJnaW4gKz0gY29sbGFwc2VkTWFyZ2luLmlzQ29sbGFwc2VkVGhyb3VnaCA/IG5vbkNv
bGxhcHNlZE1hcmdpbi5hZnRlciA6IGNvbGxhcHNlZE1hcmdpbi5hZnRlci52YWx1ZU9yKG5vbkNv
bGxhcHNlZE1hcmdpbi5hZnRlcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKaW5k
ZXggNWIyYWZiMzFjMGNhYzU2OWY3YzcyMTJhZTk3ZTFjMTVmMzI3MWE1Yy4uNDliMGU3YzcyYzQ0
YTViYTU1ZjhlZWE2ODk1OTU4NGQ3ZDZkOGZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3Bw
CkBAIC03MCwxMSArNzAsMTEgQEAgc3RhdGljIGJvb2wgaGFzUGFkZGluZ0FmdGVyKGNvbnN0IEJv
eCYgbGF5b3V0Qm94KQogICAgIHJldHVybiBoYXNQYWRkaW5nKGxheW91dEJveC5zdHlsZSgpLnBh
ZGRpbmdBZnRlcigpKTsKIH0KIAotc3RhdGljIGJvb2wgaGFzQ2xlYXJhbmNlKGNvbnN0IExheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgQm94JiBsYXlvdXRCb3gpCitzdGF0aWMgYm9vbCBo
YXNDbGVhcmFuY2UoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0LCBj
b25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICBpZiAoIWxheW91dEJveC5oYXNGbG9hdENsZWFy
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbGF5b3V0U3RhdGUuZGlzcGxh
eUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLmhhc0NsZWFyYW5jZSgpOworICAgIHJldHVybiBm
b3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuaGFzQ2xl
YXJhbmNlKCk7CiB9CiAKIHN0YXRpYyBib29sIGVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dChjb25zdCBCb3gmIGxheW91dEJveCkKQEAgLTE0MSw3ICsxNDEsNyBAQCBib29sIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xsYXBzZXNX
aXRoUGFyZW50TWFyZwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyAuLi5hbmQgdGhl
IGNoaWxkIGhhcyBubyBjbGVhcmFuY2UuCi0gICAgaWYgKGhhc0NsZWFyYW5jZShsYXlvdXRTdGF0
ZSgpLCBsYXlvdXRCb3gpKQorICAgIGlmIChoYXNDbGVhcmFuY2UoZm9ybWF0dGluZ0NvbnRleHQo
KSwgbGF5b3V0Qm94KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7
CkBAIC0xNzYsNyArMTc2LDcgQEAgYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZpb3VzU2kKIAogICAgIC8vIFRo
ZSBib3R0b20gbWFyZ2luIG9mIGFuIGluLWZsb3cgYmxvY2stbGV2ZWwgZWxlbWVudCBhbHdheXMg
Y29sbGFwc2VzIHdpdGggdGhlIHRvcCBtYXJnaW4gb2YKICAgICAvLyBpdHMgbmV4dCBpbi1mbG93
IGJsb2NrLWxldmVsIHNpYmxpbmcsIHVubGVzcyB0aGF0IHNpYmxpbmcgaGFzIGNsZWFyYW5jZS4K
LSAgICBpZiAoaGFzQ2xlYXJhbmNlKGxheW91dFN0YXRlKCksIGxheW91dEJveCkpCisgICAgaWYg
KGhhc0NsZWFyYW5jZShmb3JtYXR0aW5nQ29udGV4dCgpLCBsYXlvdXRCb3gpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwOSw3ICsyMDksNyBAQCBib29s
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjptYXJnaW5CZWZvcmVDb2xs
YXBzZXNXaXRoRmlyc3RJbkZsbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyAuLi5h
bmQgdGhlIGNoaWxkIGhhcyBubyBjbGVhcmFuY2UuCi0gICAgaWYgKGhhc0NsZWFyYW5jZShsYXlv
dXRTdGF0ZSgpLCBmaXJzdEluRmxvd0NoaWxkKSkKKyAgICBpZiAoaGFzQ2xlYXJhbmNlKGZvcm1h
dHRpbmdDb250ZXh0KCksIGZpcnN0SW5GbG93Q2hpbGQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyBNYXJnaW5zIG9mIGlubGluZS1ibG9jayBib3hlcyBkbyBub3QgY29sbGFwc2Uu
CkBAIC0yMjksNyArMjI5LDcgQEAgYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoU2libGluZ01hcmcKICAgICBmb3IgKGF1
dG8qIHByZXZpb3VzU2libGluZyA9IGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsg
cHJldmlvdXNTaWJsaW5nOyBwcmV2aW91c1NpYmxpbmcgPSBwcmV2aW91c1NpYmxpbmctPnByZXZp
b3VzSW5GbG93U2libGluZygpKSB7CiAgICAgICAgIGlmICghbWFyZ2luc0NvbGxhcHNlVGhyb3Vn
aCgqcHJldmlvdXNTaWJsaW5nKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKGhhc0NsZWFyYW5jZShsYXlvdXRTdGF0ZSgpLCAqcHJldmlvdXNTaWJsaW5nKSkKKyAgICAg
ICAgaWYgKGhhc0NsZWFyYW5jZShmb3JtYXR0aW5nQ29udGV4dCgpLCAqcHJldmlvdXNTaWJsaW5n
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zMzksNyArMzM5LDcgQEAgYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xs
YXBzZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoTGFzdEluRmxvd0MKICAgICAvLyBub3IgKGlm
IHRoZSBib3gncyBtaW4taGVpZ2h0IGlzIG5vbi16ZXJvKSB3aXRoIHRoZSBib3gncyB0b3AgbWFy
Z2luLgogICAgIGF1dG8gY29tcHV0ZWRNaW5IZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dp
Y2FsTWluSGVpZ2h0KCk7CiAgICAgaWYgKCFjb21wdXRlZE1pbkhlaWdodC5pc0F1dG8oKSAmJiBj
b21wdXRlZE1pbkhlaWdodC52YWx1ZSgpCi0gICAgICAgICYmIChtYXJnaW5BZnRlckNvbGxhcHNl
c1dpdGhQYXJlbnRNYXJnaW5CZWZvcmUobGFzdEluRmxvd0NoaWxkKSB8fCBoYXNDbGVhcmFuY2Uo
bGF5b3V0U3RhdGUoKSwgbGFzdEluRmxvd0NoaWxkKSkpCisgICAgICAgICYmIChtYXJnaW5BZnRl
ckNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5CZWZvcmUobGFzdEluRmxvd0NoaWxkKSB8fCBoYXND
bGVhcmFuY2UoZm9ybWF0dGluZ0NvbnRleHQoKSwgbGFzdEluRmxvd0NoaWxkKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIE1hcmdpbnMgb2YgaW5saW5lLWJsb2NrIGJveGVzIGRv
IG5vdCBjb2xsYXBzZS4KQEAgLTQ3MiwxMSArNDcyLDExIEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OnVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJs
aW5nCiAgICAgYXV0byogY3VycmVudEJveCA9ICZsYXlvdXRCb3g7CiAgICAgd2hpbGUgKG1hcmdp
bkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcigqY3VycmVudEJv
eCkpIHsKICAgICAgICAgYXV0byYgcHJldmlvdXNTaWJsaW5nID0gKmN1cnJlbnRCb3gtPnByZXZp
b3VzSW5GbG93U2libGluZygpOwotICAgICAgICBhdXRvJiBwcmV2aW91c1NpYmxpbmdEaXNwbGF5
Qm94ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChwcmV2aW91c1NpYmxpbmcp
OworICAgICAgICBhdXRvJiBwcmV2aW91c1NpYmxpbmdEaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0Nv
bnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHByZXZpb3VzU2libGluZyk7CiAgICAgICAg
IGF1dG8gcHJldmlvdXNTaWJsaW5nVmVydGljYWxNYXJnaW4gPSBwcmV2aW91c1NpYmxpbmdEaXNw
bGF5Qm94LnZlcnRpY2FsTWFyZ2luKCk7CiAKICAgICAgICAgYXV0byBjb2xsYXBzZWRWZXJ0aWNh
bE1hcmdpbkJlZm9yZSA9IHByZXZpb3VzU2libGluZ1ZlcnRpY2FsTWFyZ2luLmNvbGxhcHNlZFZh
bHVlcygpLmJlZm9yZTsKLSAgICAgICAgYXV0byBjb2xsYXBzZWRWZXJ0aWNhbE1hcmdpbkFmdGVy
ID0gbGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveCgqY3VycmVudEJveCkudmVydGlj
YWxNYXJnaW4oKS5iZWZvcmUoKTsKKyAgICAgICAgYXV0byBjb2xsYXBzZWRWZXJ0aWNhbE1hcmdp
bkFmdGVyID0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjdXJy
ZW50Qm94KS52ZXJ0aWNhbE1hcmdpbigpLmJlZm9yZSgpOwogCiAgICAgICAgIGF1dG8gbWFyZ2lu
c0NvbGxhcHNlVGhyb3VnaCA9IHRoaXMtPm1hcmdpbnNDb2xsYXBzZVRocm91Z2gocHJldmlvdXNT
aWJsaW5nKTsKICAgICAgICAgaWYgKG1hcmdpbnNDb2xsYXBzZVRocm91Z2gpCkBAIC01MTQsNyAr
NTE0LDcgQEAgUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luOjpWYWx1ZXMgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2UKICAgICAgICAgcmV0dXJuIG1hcmdpblR5
cGUgPT0gTWFyZ2luVHlwZTo6QmVmb3JlID8gcG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFy
Z2luLmJlZm9yZSA6IHBvc2l0aXZlQW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbi5hZnRlcjsgCiAg
ICAgfQogICAgIC8vIFRoaXMgaXMgdGhlIGVzdGltYXRlIHBhdGguIFdlIGRvbid0IHlldCBoYXZl
IHBvc2l0aXZlL25lZ2F0aXZlIG1hcmdpbiBjb21wdXRlZC4KLSAgICBhdXRvIHVzZWRWYWx1ZXMg
PSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKKyAg
ICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGZvcm1hdHRpbmdDb250
ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygp
KS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9
IEdlb21ldHJ5KGZvcm1hdHRpbmdDb250ZXh0KCkpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5
b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IFVzZWRW
ZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9y
KDApIH07IAogCkBAIC01ODIsNyArNTgyLDcgQEAgRXN0aW1hdGVkTWFyZ2luQmVmb3JlIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjplc3RpbWF0ZWRNYXJnaW5CZWYKICAg
ICBBU1NFUlQobGF5b3V0Qm94LmlzSW5GbG93KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3Np
dGlvbmVkKCkpOwogICAgIEFTU0VSVCghbGF5b3V0Qm94LnJlcGxhY2VkKCkpOwogCi0gICAgYXV0
byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBsYXlvdXRTdGF0ZSgpLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJv
eFdpZHRoKCkgfTsKKyAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7
IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgIGF1dG8gY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5KGZvcm1hdHRpbmdDb250ZXh0KCkpLmNvbXB1dGVkVmVy
dGljYWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKICAgICBhdXRvIG5vbkNvbGxhcHNl
ZE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5hZnRlci52YWx1ZU9yKDApIH07CiAgICAgYXV0byBtYXJnaW5zQ29sbGFwc2VUaHJvdWdoID0g
dGhpcy0+bWFyZ2luc0NvbGxhcHNlVGhyb3VnaChsYXlvdXRCb3gpOwpAQCAtNjA0LDcgKzYwNCw3
IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1h
cmdpbkJlZm9yZUlnbm9yaW5nQ29sbGFwc2luCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
Ok1hcmdpbkNvbGxhcHNlOjp1cGRhdGVQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luVmFsdWVzKGNvbnN0
IEJveCYgbGF5b3V0Qm94KQogewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNCbG9ja0xldmVsQm94
KCkpOwotICAgIGF1dG8gbm9uQ29sbGFwc2VkVmFsdWVzID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkudmVydGljYWxNYXJnaW4oKS5ub25Db2xsYXBzZWRW
YWx1ZXMoKTsKKyAgICBhdXRvIG5vbkNvbGxhcHNlZFZhbHVlcyA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLnZlcnRpY2FsTWFyZ2luKCkubm9u
Q29sbGFwc2VkVmFsdWVzKCk7CiAKICAgICBhdXRvIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5CZWZv
cmUgPSB0aGlzLT5wb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlKGxheW91dEJveCwgbm9uQ29s
bGFwc2VkVmFsdWVzKTsKICAgICBhdXRvIHBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlciA9IHRo
aXMtPnBvc2l0aXZlTmVnYXRpdmVNYXJnaW5BZnRlcihsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZFZh
bHVlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMGRkMWJjMGJh
NDk5OGE5NjUxZTUxYjdkMDhkMWZlMWZjNDhhYmFlZi4uZGU5NzYyZjRlZWE1NGEzZTBjY2Y0NDJi
OTVjNmQwNWFmYTU5NjA0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApA
QCAtNzIsNyArNzIsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiW1N0YXJ0XSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+
IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290IDw8ICIpIik7Ci0gICAgYXV0byBhdmFpbGFibGVX
aWR0aCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChyb290KS5jb250ZW50
Qm94V2lkdGgoKTsKKyAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gZGlzcGxheUJveEZvckxheW91
dEJveChyb290KS5jb250ZW50Qm94V2lkdGgoKTsKICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2Vk
SG9yaXpvbnRhbFZhbHVlcyB7IGF2YWlsYWJsZVdpZHRoIH07CiAgICAgYXV0byogbGF5b3V0Qm94
ID0gcm9vdC5maXJzdEluRmxvd09yRmxvYXRpbmdDaGlsZCgpOwogICAgIC8vIENvbXB1dGUgd2lk
dGgvaGVpZ2h0IGZvciBub24tdGV4dCBjb250ZW50IGFuZCBtYXJnaW4vYm9yZGVyL3BhZGRpbmcg
Zm9yIGlubGluZSBjb250YWluZXJzLgpAQCAtMTM4LDcgKzEzOCw3IEBAIEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlZEluCiAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbWluL21heCBmb3JtYXR0aW5nIHJv
b3Qgd2lkdGggdmFsdWVzIGJlZm9yZSBmb3JtYXR0aW5nIHRoZSBsaW5lcy4KICAgICAgICAgZm9y
IChhdXRvKiBmb3JtYXR0aW5nUm9vdCA6IGZvcm1hdHRpbmdDb250ZXh0Um9vdExpc3QpIHsKICAg
ICAgICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGhzID0gbGF5b3V0U3RhdGUuZm9ybWF0dGluZ1N0
YXRlRm9yQm94KCpmb3JtYXR0aW5nUm9vdCkuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckJv
eCgqZm9ybWF0dGluZ1Jvb3QpOwotICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91
dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmZvcm1hdHRpbmdSb290KTsKKyAgICAgICAg
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpmb3JtYXR0aW5n
Um9vdCk7CiAgICAgICAgICAgICBhdXRvIGNvbnRlbnRXaWR0aCA9IChhdmFpbGFibGVXaWR0aCA/
IGludHJpbnNpY1dpZHRocy0+bWF4aW11bSA6IGludHJpbnNpY1dpZHRocy0+bWluaW11bSkgLSBk
aXNwbGF5Qm94Lmhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCk7CiAgICAgICAgICAg
ICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChjb250ZW50V2lkdGgpOwogICAgICAgICB9
CkBAIC0xNTMsNyArMTUzLDcgQEAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW4KIHZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmluaXRpYWxpemVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9yR2Vu
ZXJpY0lubGluZUJveChjb25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICBBU1NFUlQobGF5b3V0
Qm94LmlzQW5vbnltb3VzKCkgfHwgbGF5b3V0Qm94LmlzTGluZUJyZWFrQm94KCkpOwotICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5
b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOwogCiAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9
IH0pOwogICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOwpAQCAtMTY2LDEz
ICsxNjYsMTIgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU1hcmdpbkJv
cmRlckFuZFBhZGRpbmdGb3JJbmxpbmVDb250YWluZXIoY28KICAgICBjb21wdXRlSG9yaXpvbnRh
bE1hcmdpbihjb250YWluZXIsIHVzZWRWYWx1ZXMpOwogICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRk
aW5nKGNvbnRhaW5lciwgdXNlZFZhbHVlcyk7CiAgICAgLy8gSW5saW5lIGNvbnRhaW5lcnMgKDxz
cGFuPikgaGF2ZSAwIHZlcnRpY2FsIG1hcmdpbnMuCi0gICAgbGF5b3V0U3RhdGUoKS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5lcikuc2V0VmVydGljYWxNYXJnaW4oeyB7IH0sIHsgfSB9
KTsKKyAgICBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5lcikuc2V0VmVydGljYWxNYXJn
aW4oeyB7IH0sIHsgfSB9KTsKIH0KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94JiBmb3JtYXR0aW5n
Um9vdCkKIHsKICAgICBBU1NFUlQoZm9ybWF0dGluZ1Jvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5n
Q29udGV4dCgpKTsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7
CiAKICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IH07CiAgICAg
Y29tcHV0ZUJvcmRlckFuZFBhZGRpbmcoZm9ybWF0dGluZ1Jvb3QsIHVzZWRWYWx1ZXMpOwpAQCAt
MTgyLDIzICsxODEsMjIgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUlu
dHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94JgogICAgIGlmIChhdXRvIGZp
eGVkV2lkdGggPSBnZW9tZXRyeSgpLmZpeGVkVmFsdWUoZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS5s
b2dpY2FsV2lkdGgoKSkpCiAgICAgICAgIGNvbnN0cmFpbnRzID0geyAqZml4ZWRXaWR0aCwgKmZp
eGVkV2lkdGggfTsKICAgICBlbHNlCi0gICAgICAgIGNvbnN0cmFpbnRzID0gbGF5b3V0U3RhdGUu
Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZm9ybWF0dGluZ1Jvb3QpLT5jb21wdXRlZEludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMoKTsKKyAgICAgICAgY29uc3RyYWludHMgPSBsYXlvdXRTdGF0ZSgp
LmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdSb290KS0+Y29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCk7CiAgICAgY29uc3RyYWludHMgPSBnZW9tZXRyeSgpLmNvbnN0
cmFpbkJ5TWluTWF4V2lkdGgoZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFpbnRzKTsKLSAgICBjb25z
dHJhaW50cy5leHBhbmQobGF5b3V0U3RhdGUuZGlzcGxheUJveEZvckxheW91dEJveChmb3JtYXR0
aW5nUm9vdCkuaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSk7CisgICAgY29uc3Ry
YWludHMuZXhwYW5kKGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZm9ybWF0dGluZ1Jvb3QpLmhvcml6
b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkpOwogICAgIGZvcm1hdHRpbmdTdGF0ZSgpLnNl
dEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goZm9ybWF0dGluZ1Jvb3QsIGNvbnN0cmFp
bnRzKTsKIH0KIAogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUhvcml6b250
YWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHVzZWRW
YWx1ZXMpCiB7CiAgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBnZW9tZXRyeSgp
LmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwotICAgIGF1
dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5
b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOwogICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbENvbXB1dGVkTWFyZ2luKGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbik7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFy
Z2luKHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9KTsKIH0KIAogdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2VkVmFsdWVzKQogewotICAgIGF1dG8mIGxheW91dFN0
YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAgICBXaWR0aEFuZE1hcmdpbiB3aWR0aEFuZE1h
cmdpbjsKICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCiAgICAgICAg
IHdpZHRoQW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5mbG9hdGluZ1dpZHRoQW5kTWFyZ2luKGxheW91
dEJveCwgdXNlZFZhbHVlcyk7CkBAIC0yMDksNyArMjA3LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBV
c2VkSG8KICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgYXV0
byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpOwogICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKHdpZHRoQW5kTWFyZ2lu
LndpZHRoKTsKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4od2lkdGhBbmRNYXJn
aW4udXNlZE1hcmdpbik7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsQ29tcHV0ZWRNYXJn
aW4od2lkdGhBbmRNYXJnaW4uY29tcHV0ZWRNYXJnaW4pOwpAQCAtMjE3LDExICsyMTUsOSBAQCB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIFVzZWRIbwogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewotICAgIGF1dG8m
IGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKLQogICAgIEhlaWdodEFuZE1hcmdp
biBoZWlnaHRBbmRNYXJnaW47CiAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25l
ZCgpKQotICAgICAgICBoZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmZsb2F0aW5nSGVpZ2h0
QW5kTWFyZ2luKGxheW91dEJveCwgeyB9LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGxheW91dFN0
YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSku
Y29udGVudEJveFdpZHRoKCkgfSk7CisgICAgICAgIGhlaWdodEFuZE1hcmdpbiA9IGdlb21ldHJ5
KCkuZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCB7IH0sIFVzZWRIb3Jpem9udGFs
VmFsdWVzIHsgZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpKS5jb250ZW50Qm94V2lkdGgoKSB9KTsKICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxp
bmVCbG9ja0JveCgpKQogICAgICAgICBoZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmlubGlu
ZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCk7CiAgICAgZWxzZSBpZiAobGF5b3V0Qm94
LnJlcGxhY2VkKCkpCkBAIC0yMjksNyArMjI1LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZUhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCkKICAgICBl
bHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCi0gICAgYXV0byYgZGlzcGxheUJv
eCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAg
IGRpc3BsYXlCb3guc2V0Q29udGVudEJveEhlaWdodChoZWlnaHRBbmRNYXJnaW4uaGVpZ2h0KTsK
ICAgICBkaXNwbGF5Qm94LnNldFZlcnRpY2FsTWFyZ2luKHsgaGVpZ2h0QW5kTWFyZ2luLm5vbkNv
bGxhcHNlZE1hcmdpbiwgeyB9IH0pOwogfQpAQCAtMjQyLDcgKzIzOCw3IEBAIHZvaWQgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gm
IHJvb3QsIFVzZWRICiAgICAgY29tcHV0ZUJvcmRlckFuZFBhZGRpbmcocm9vdCwgdXNlZFZhbHVl
cyk7CiAgICAgY29tcHV0ZVdpZHRoQW5kTWFyZ2luKHJvb3QsIHVzZWRWYWx1ZXMpOwogICAgIC8v
IFRoaXMgaXMgc2ltaWxhciB0byBzdGF0aWMgcG9zaXRpb25pbmcgaW4gYmxvY2sgZm9ybWF0dGlu
ZyBjb250ZXh0LiBXZSBqdXN0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdG9wIGxlZnQgcG9zaXRp
b24uCi0gICAgbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHJvb3QpLnNldFRv
cExlZnQoeyAwLCAwIH0pOworICAgIGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocm9vdCkuc2V0VG9w
TGVmdCh7IDAsIDAgfSk7CiAgICAgLy8gU3dpY2ggb3ZlciB0byB0aGUgbmV3IGZvcm1hdHRpbmcg
Y29udGV4dCAodGhlIG9uZSB0aGF0IHRoZSByb290IGNyZWF0ZXMpLgogICAgIGF1dG8gZm9ybWF0
dGluZ0NvbnRleHQgPSBsYXlvdXRTdGF0ZSgpLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KHJvb3Qp
OwogICAgIGZvcm1hdHRpbmdDb250ZXh0LT5sYXlvdXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggNDk3NzIxNzI0YmE3OGNiZjgzN2U2
Mzk3NmRhZjVjZTE2MjEyZDYwZC4uZWM1MjhlNTVkZDI4NmMxOTQwYzk2NjY3YTQxZGQ1OWU0NmRh
ZTAwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5j
cHAKQEAgLTczLDcgKzczLDcgQEAgSGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY28KIAogICAgIC8vIDEw
LjYuNiBDb21wbGljYXRlZCBjYXNlcwogICAgIC8vIC0gJ0lubGluZS1ibG9jaycsIG5vbi1yZXBs
YWNlZCBlbGVtZW50cy4KLSAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6
b250YWxWYWx1ZXMgeyBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91
dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKKyAgICBhdXRvIHVz
ZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBmb3JtYXR0aW5nQ29u
dGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2so
KSkuY29udGVudEJveFdpZHRoKCkgfTsKICAgICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlv
dXRCb3gsIHsgfSwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcAppbmRleCA1NWE1ZjZhZDI2ZmEx
ZTVkYWYwZDA0YjU3NDMyODAxYTJkNjIxYjIwLi45NmYzMTgxZTRlMTBjZTg3OWQwZDY5Nzk5ZjUx
ZDU2MzI3NzZmZGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
TGluZUxheW91dC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBMYXlvdXQgewogCi1zdGF0aWMgTGF5b3V0VW5pdCBpbmxpbmVJdGVtV2lkdGgoY29u
c3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVt
LCBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCkKK3N0YXRpYyBMYXlvdXRVbml0IGlubGlu
ZUl0ZW1XaWR0aChjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNv
bnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0
KQogewogICAgIGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtNTMsOCArNTMsOCBAQCBzdGF0aWMgTGF5b3V0VW5pdCBpbmxpbmVJdGVtV2lkdGgoY29u
c3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVJdAogICAgIH0KIAogICAg
IGF1dG8mIGxheW91dEJveCA9IGlubGluZUl0ZW0ubGF5b3V0Qm94KCk7Ci0gICAgQVNTRVJUKGxh
eW91dFN0YXRlLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KSk7Ci0gICAgYXV0byYgZGlzcGxheUJv
eCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBB
U1NFUlQoZm9ybWF0dGluZ0NvbnRleHQuaGFzRGlzcGxheUJveChsYXlvdXRCb3gpKTsKKyAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpOwogCiAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgp
KQogICAgICAgICByZXR1cm4gZGlzcGxheUJveC5tYXJnaW5Cb3hXaWR0aCgpOwpAQCAtMTAwLDEy
ICsxMDAsMTIgQEAgc3RydWN0IExpbmVDb250ZW50IHsKIAogY2xhc3MgTGluZUxheW91dCB7CiBw
dWJsaWM6Ci0gICAgTGluZUxheW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIExh
eW91dFN0YXRlJiwgY29uc3QgTGluZUlucHV0Jik7CisgICAgTGluZUxheW91dChjb25zdCBJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IExpbmVJbnB1dCYpOwogCiAgICAgTGluZUNvbnRl
bnQgbGF5b3V0KCk7CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRTdGF0ZTsgfQorICAgIGNvbnN0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KICAgICBlbnVtIGNsYXNzIElzRW5kT2ZMaW5lIHsgTm8s
IFllcyB9OwogICAgIElzRW5kT2ZMaW5lIHBsYWNlSW5saW5lSXRlbShjb25zdCBJbmxpbmVJdGVt
Jik7CiAgICAgdm9pZCBjb21taXRQZW5kaW5nQ29udGVudCgpOwpAQCAtMTI5LDcgKzEyOSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIExheW91dFVuaXQgbV93aWR0aDsKICAgICB9OwogCi0gICAgTGF5
b3V0U3RhdGUmIG1fbGF5b3V0U3RhdGU7CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgY29uc3QgTGluZUlucHV0JiBtX2xp
bmVJbnB1dDsKICAgICBMaW5lIG1fbGluZTsKICAgICBMaW5lQnJlYWtlciBtX2xpbmVCcmVha2Vy
OwpAQCAtMTUzLDggKzE1Myw4IEBAIHZvaWQgTGluZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50
OjpyZXNldCgpCiAgICAgbV93aWR0aCA9IDA7CiB9CiAKLUxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQo
Y29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBM
YXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IExpbmVJbnB1dCYgbGluZUlucHV0KQotICAg
IDogbV9sYXlvdXRTdGF0ZShsYXlvdXRTdGF0ZSkKK0xpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29u
c3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25z
dCBMaW5lSW5wdXQmIGxpbmVJbnB1dCkKKyAgICA6IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQo
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCiAgICAgLCBtX2xpbmVJbnB1dChsaW5lSW5wdXQpCiAg
ICAgLCBtX2xpbmUoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQsIGxpbmVJbnB1dC5pbml0aWFsQ29u
c3RyYWludHMsIGxpbmVJbnB1dC5za2lwVmVydGljYWxBbGlnbWVudCkKICAgICAsIG1fbGluZUhh
c0Zsb2F0Qm94KGxpbmVJbnB1dC5mbG9hdE1pbmltdW1Mb2dpY2FsQm90dG9tLmhhc1ZhbHVlKCkp
CkBAIC0xOTAsNyArMTkwLDcgQEAgTGluZUxheW91dDo6SXNFbmRPZkxpbmUgTGluZUxheW91dDo6
cGxhY2VJbmxpbmVJdGVtKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0KIHsKICAgICBhdXRv
IGF2YWlsYWJsZVdpZHRoID0gbV9saW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBtX3VuY29tbWl0dGVk
Q29udGVudC53aWR0aCgpOwogICAgIGF1dG8gY3VycmVudExvZ2ljYWxSaWdodCA9IG1fbGluZS5j
b250ZW50TG9naWNhbFJpZ2h0KCkgKyBtX3VuY29tbWl0dGVkQ29udGVudC53aWR0aCgpOwotICAg
IGF1dG8gaXRlbUxvZ2ljYWxXaWR0aCA9IGlubGluZUl0ZW1XaWR0aChsYXlvdXRTdGF0ZSgpLCBp
bmxpbmVJdGVtLCBjdXJyZW50TG9naWNhbFJpZ2h0KTsKKyAgICBhdXRvIGl0ZW1Mb2dpY2FsV2lk
dGggPSBpbmxpbmVJdGVtV2lkdGgoZm9ybWF0dGluZ0NvbnRleHQoKSwgaW5saW5lSXRlbSwgY3Vy
cmVudExvZ2ljYWxSaWdodCk7CiAKICAgICAvLyBGSVhNRTogRW5zdXJlIExpbmVDb250ZXh0Ojp0
cmltbWFibGVXaWR0aCBpbmNsdWRlcyB1bmNvbW1pdHRlZCBjb250ZW50IGlmIG5lZWRlZC4KICAg
ICBhdXRvIGxpbmVJc0NvbnNpZGVyZWRFbXB0eSA9ICFtX2xpbmUuaGFzQ29udGVudCgpICYmICFt
X2xpbmVIYXNGbG9hdEJveDsKQEAgLTIxOCw5ICsyMTgsOSBAQCBMaW5lTGF5b3V0OjpJc0VuZE9m
TGluZSBMaW5lTGF5b3V0OjpwbGFjZUlubGluZUl0ZW0oY29uc3QgSW5saW5lSXRlbSYgaW5saW5l
SXRlbQogICAgIEFTU0VSVChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5l
QnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlvcjo6S2VlcCk7CiAgICAgaWYgKGlubGluZUl0ZW0uaXNG
bG9hdCgpKSB7CiAgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3go
KTsKLSAgICAgICAgQVNTRVJUKGxheW91dFN0YXRlKCkuaGFzRGlzcGxheUJveChmbG9hdEJveCkp
OworICAgICAgICBBU1NFUlQoZm9ybWF0dGluZ0NvbnRleHQoKS5oYXNEaXNwbGF5Qm94KGZsb2F0
Qm94KSk7CiAgICAgICAgIC8vIFNocmluayBhdmFpbGFibGUgc3BhY2UgZm9yIGN1cnJlbnQgbGlu
ZSBhbmQgbW92ZSBleGlzdGluZyBpbmxpbmUgcnVucy4KLSAgICAgICAgYXV0byBmbG9hdEJveFdp
ZHRoID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0Qm94KS5tYXJn
aW5Cb3hXaWR0aCgpOworICAgICAgICBhdXRvIGZsb2F0Qm94V2lkdGggPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpLm1hcmdpbkJveFdpZHRoKCk7
CiAgICAgICAgIGZsb2F0Qm94LmlzTGVmdEZsb2F0aW5nUG9zaXRpb25lZCgpID8gbV9saW5lLm1v
dmVMb2dpY2FsTGVmdChmbG9hdEJveFdpZHRoKSA6IG1fbGluZS5tb3ZlTG9naWNhbFJpZ2h0KGZs
b2F0Qm94V2lkdGgpOwogICAgICAgICBtX2Zsb2F0cy5hcHBlbmQobWFrZVdlYWtQdHIoaW5saW5l
SXRlbSkpOwogICAgICAgICArK21fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50OwpAQCAtMjc5LDgg
KzI3OSw5IEBAIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OklubGluZUxh
eW91dChjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4CiB2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpJbmxpbmVMYXlvdXQ6OmxheW91dChjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRl
bXMsIExheW91dFVuaXQgd2lkdGhDb25zdHJhaW50KSBjb25zdAogewogICAgIGF1dG8mIGxheW91
dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4
dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgZm9ybWF0dGluZ1Jvb3Qg
PSB0aGlzLT5mb3JtYXR0aW5nUm9vdCgpOwotICAgIGF1dG8mIGZvcm1hdHRpbmdSb290RGlzcGxh
eUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZm9ybWF0dGluZ1Jvb3Qp
OworICAgIGF1dG8mIGZvcm1hdHRpbmdSb290RGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZm9ybWF0dGluZ1Jvb3QpOwogICAgIGF1dG8mIGZsb2F0
aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZShmb3JtYXR0
aW5nUm9vdCkuZmxvYXRpbmdTdGF0ZSgpOwogCiAgICAgYXV0byBsaW5lTG9naWNhbFRvcCA9IGZv
cm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94VG9wKCk7CkBAIC0zMjMsMTEgKzMyNCwx
MSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmxheW91dChj
b25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbQogICAgIH07CiAKICAgICBJbmRleEFuZFJhbmdl
IGN1cnJlbnRJbmxpbmVJdGVtOwotICAgIGF1dG8gcXVpcmtzID0gUXVpcmtzKGZvcm1hdHRpbmdD
b250ZXh0KCkpOworICAgIGF1dG8gcXVpcmtzID0gUXVpcmtzKGZvcm1hdHRpbmdDb250ZXh0KTsK
ICAgICB3aGlsZSAoY3VycmVudElubGluZUl0ZW0uaW5kZXggPCBpbmxpbmVJdGVtcy5zaXplKCkp
IHsKICAgICAgICAgYXV0byBsaW5lSW5wdXQgPSBMaW5lSW5wdXQgeyB7IHsgbGluZUxvZ2ljYWxM
ZWZ0LCBsaW5lTG9naWNhbFRvcCB9LCB3aWR0aENvbnN0cmFpbnQsIHF1aXJrcy5saW5lSGVpZ2h0
Q29uc3RyYWludHMoZm9ybWF0dGluZ1Jvb3QpIH0sIExpbmU6OlNraXBWZXJ0aWNhbEFsaWdtZW50
OjpObywgY3VycmVudElubGluZUl0ZW0sIGlubGluZUl0ZW1zIH07CiAgICAgICAgIGFwcGx5Rmxv
YXRDb25zdHJhaW50KGxpbmVJbnB1dCk7Ci0gICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBMaW5l
TGF5b3V0KGZvcm1hdHRpbmdDb250ZXh0KCksIGxheW91dFN0YXRlLCBsaW5lSW5wdXQpLmxheW91
dCgpOworICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gTGluZUxheW91dChmb3JtYXR0aW5nQ29u
dGV4dCwgbGluZUlucHV0KS5sYXlvdXQoKTsKICAgICAgICAgY3JlYXRlRGlzcGxheVJ1bnMoKmxp
bmVDb250ZW50LnJ1bnMsIGxpbmVDb250ZW50LmZsb2F0cywgd2lkdGhDb25zdHJhaW50KTsKICAg
ICAgICAgaWYgKCFsaW5lQ29udGVudC5sYXN0Q29tbWl0dGVkKSB7CiAgICAgICAgICAgICAvLyBG
bG9hdHMgcHJldmVudGVkIHVzIHB1dHRpbmcgYW55IGNvbnRlbnQgb24gdGhlIGxpbmUuCkBAIC0z
NDMsMTYgKzM0NCwxNiBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlv
dXQ6OmxheW91dChjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbQogCiBMYXlvdXRVbml0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNvbXB1dGVkSW50cmluc2ljV2lk
dGgoY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zLCBMYXlvdXRVbml0IHdpZHRoQ29uc3Ry
YWludCkgY29uc3QKIHsKLSAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRl
KCk7CisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4
dCgpOwogICAgIExheW91dFVuaXQgbWF4aW11bUxpbmVXaWR0aDsKICAgICBJbmRleEFuZFJhbmdl
IGN1cnJlbnRJbmxpbmVJdGVtOwotICAgIGF1dG8gcXVpcmtzID0gUXVpcmtzKGZvcm1hdHRpbmdD
b250ZXh0KCkpOworICAgIGF1dG8gcXVpcmtzID0gUXVpcmtzKGZvcm1hdHRpbmdDb250ZXh0KTsK
ICAgICB3aGlsZSAoY3VycmVudElubGluZUl0ZW0uaW5kZXggPCBpbmxpbmVJdGVtcy5zaXplKCkp
IHsKLSAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IExpbmVMYXlvdXQoZm9ybWF0dGluZ0NvbnRl
eHQoKSwgbGF5b3V0U3RhdGUsIHsgeyB7IH0sIHdpZHRoQ29uc3RyYWludCwgcXVpcmtzLmxpbmVI
ZWlnaHRDb25zdHJhaW50cyhmb3JtYXR0aW5nUm9vdCgpKSB9LCBMaW5lOjpTa2lwVmVydGljYWxB
bGlnbWVudDo6WWVzLCBjdXJyZW50SW5saW5lSXRlbSwgaW5saW5lSXRlbXMgfSkubGF5b3V0KCk7
CisgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBMaW5lTGF5b3V0KGZvcm1hdHRpbmdDb250ZXh0
LCB7IHsgeyB9LCB3aWR0aENvbnN0cmFpbnQsIHF1aXJrcy5saW5lSGVpZ2h0Q29uc3RyYWludHMo
Zm9ybWF0dGluZ1Jvb3QoKSkgfSwgTGluZTo6U2tpcFZlcnRpY2FsQWxpZ21lbnQ6OlllcywgY3Vy
cmVudElubGluZUl0ZW0sIGlubGluZUl0ZW1zIH0pLmxheW91dCgpOwogICAgICAgICBjdXJyZW50
SW5saW5lSXRlbSA9IHsgbGluZUNvbnRlbnQubGFzdENvbW1pdHRlZC0+aW5kZXggKyAxLCBXVEY6
Om51bGxvcHQgfTsKICAgICAgICAgTGF5b3V0VW5pdCBmbG9hdHNXaWR0aDsKICAgICAgICAgZm9y
IChhdXRvJiBmbG9hdEl0ZW0gOiBsaW5lQ29udGVudC5mbG9hdHMpCi0gICAgICAgICAgICBmbG9h
dHNXaWR0aCArPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0SXRlbS0+
bGF5b3V0Qm94KCkpLm1hcmdpbkJveFdpZHRoKCk7CisgICAgICAgICAgICBmbG9hdHNXaWR0aCAr
PSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGZsb2F0SXRlbS0+bGF5
b3V0Qm94KCkpLm1hcmdpbkJveFdpZHRoKCk7CiAgICAgICAgIG1heGltdW1MaW5lV2lkdGggPSBz
dGQ6Om1heChtYXhpbXVtTGluZVdpZHRoLCBmbG9hdHNXaWR0aCArIGxpbmVDb250ZW50LnJ1bnMt
PmxvZ2ljYWxXaWR0aCgpKTsKICAgICB9CiAgICAgcmV0dXJuIG1heGltdW1MaW5lV2lkdGg7CkBA
IC0zNjEsNiArMzYyLDcgQEAgTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5s
aW5lTGF5b3V0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoKGNvbnN0IEkKIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91dDo6Y3JlYXRlRGlzcGxheVJ1bnMoY29uc3QgTGlu
ZTo6Q29udGVudCYgbGluZUNvbnRlbnQsIGNvbnN0IFZlY3RvcjxXZWFrUHRyPElubGluZUl0ZW0+
PiYgZmxvYXRzLCBMYXlvdXRVbml0IHdpZHRoQ29uc3RyYWludCkgY29uc3QKIHsKICAgICBhdXRv
JiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CisgICAgYXV0byYgZm9ybWF0dGlu
Z0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwogICAgIGF1dG8mIGZvcm1hdHRp
bmdTdGF0ZSA9IGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4obGF5b3V0U3RhdGUuZXN0
YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoZm9ybWF0dGluZ1Jvb3QoKSkpOwogICAgIGF1dG8mIGZs
b2F0aW5nU3RhdGUgPSBmb3JtYXR0aW5nU3RhdGUuZmxvYXRpbmdTdGF0ZSgpOwogICAgIGF1dG8g
ZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsgZmxvYXRpbmdTdGF0ZSB9OwpAQCAt
MzY4LDggKzM3MCw4IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGluZUxheW91
dDo6Y3JlYXRlRGlzcGxheVJ1bnMoY29uc3QgTGluZTo6Q29udGVuCiAgICAgLy8gTW92ZSBmbG9h
dHMgdG8gdGhlaXIgZmluYWwgcG9zaXRpb24uCiAgICAgZm9yIChhdXRvIGZsb2F0SXRlbSA6IGZs
b2F0cykgewogICAgICAgICBhdXRvJiBmbG9hdEJveCA9IGZsb2F0SXRlbS0+bGF5b3V0Qm94KCk7
Ci0gICAgICAgIEFTU0VSVChsYXlvdXRTdGF0ZS5oYXNEaXNwbGF5Qm94KGZsb2F0Qm94KSk7Ci0g
ICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGZsb2F0Qm94KTsKKyAgICAgICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0Lmhhc0Rpc3Bs
YXlCb3goZmxvYXRCb3gpKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdD
b250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gpOwogICAgICAgICAvLyBTZXQg
c3RhdGljIHBvc2l0aW9uIGZpcnN0LgogICAgICAgICBkaXNwbGF5Qm94LnNldFRvcExlZnQoeyBs
aW5lQ29udGVudC5sb2dpY2FsTGVmdCgpLCBsaW5lQ29udGVudC5sb2dpY2FsVG9wKCkgfSk7CiAg
ICAgICAgIC8vIEZsb2F0IGl0LgpAQCAtMzkxLDEyICszOTMsMTIgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0OjpjcmVhdGVEaXNwbGF5UnVucyhjb25zdCBMaW5l
OjpDb250ZW4KICAgICBhdXRvIGxpbmVCb3hSZWN0ID0gRGlzcGxheTo6UmVjdCB7IGxpbmVDb250
ZW50LmxvZ2ljYWxUb3AoKSwgbGluZUNvbnRlbnQubG9naWNhbExlZnQoKSwgMCwgbGluZUNvbnRl
bnQubG9naWNhbEhlaWdodCgpfTsKICAgICAvLyBDcmVhdGUgZmluYWwgZGlzcGxheSBydW5zLgog
ICAgIGF1dG8mIGxpbmVSdW5zID0gbGluZUNvbnRlbnQucnVucygpOwotICAgIGF1dG8gZ2VvbWV0
cnkgPSBHZW9tZXRyeShmb3JtYXR0aW5nQ29udGV4dCgpKTsKKyAgICBhdXRvIGdlb21ldHJ5ID0g
R2VvbWV0cnkoZm9ybWF0dGluZ0NvbnRleHQpOwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IGxpbmVSdW5zLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBhdXRvJiBsaW5l
UnVuID0gbGluZVJ1bnMuYXQoaW5kZXgpOwogICAgICAgICBhdXRvJiBsb2dpY2FsUmVjdCA9IGxp
bmVSdW4tPmxvZ2ljYWxSZWN0KCk7CiAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGxpbmVSdW4t
PmxheW91dEJveCgpOwotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUuZGlz
cGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgICAgICBhdXRvJiBkaXNwbGF5Qm94
ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwog
CiAgICAgICAgIGlmIChsaW5lUnVuLT5pc0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICBkaXNw
bGF5Qm94LnNldFRvcExlZnQobG9naWNhbFJlY3QudG9wTGVmdCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAppbmRleCAxZTAzN2E2OGNkNDQxODhhOGQx
YWRlOWI2OGU0YzQ3NzE1NjNiMjhmLi42ZjVmYjI5YjU1NWE2ZWI2MTJjNjhkYzljOGYzOTJkYWNl
NzBjNDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3Bw
CkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6
bGluZURlc2NlbnROZWVkc0NvbGxhcHNpbmcoY29uc3QgTGluZTo6Q29uCiAgICAgICAgIGNhc2Ug
SW5saW5lSXRlbTo6VHlwZTo6SGFyZExpbmVCcmVhazoKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgY2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpDb250YWluZXJTdGFydDogewotICAg
ICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlv
dXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKICAgICAgICAg
ICAgIGlmIChkaXNwbGF5Qm94Lmhvcml6b250YWxCb3JkZXIoKSB8fCAoZGlzcGxheUJveC5ob3Jp
em9udGFsUGFkZGluZygpICYmIGRpc3BsYXlCb3guaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1ZSgp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZS5jcHAKaW5kZXggZTM5ZDExZjY1ZmU1MmM0MmRjNzRiY2JhZjBlOTY3NmQ3YTY5ZmZkMC4uY2Zl
YjhkMzRhYTdiOGMyYTc0YTQ1Y2YwYzUxZjRmNzczMDIzOTFkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAKQEAgLTY0
LDEwICs2NCwxMCBAQCBMaW5lOjpMaW5lKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBp
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSW5pdGlhbAogewogfQogCi1zdGF0aWMgYm9v
bCBpc0lubGluZUNvbnRhaW5lckNvbnNpZGVyZWRFbXB0eShjb25zdCBMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGNvbnN0IEJveCYgbGF5b3V0Qm94KQorc3RhdGljIGJvb2wgaXNJbmxpbmVDb250
YWluZXJDb25zaWRlcmVkRW1wdHkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdD
b250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKIHsKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBk
b2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBpbmxpbmUgY29udGFpbmVyIGhhcyBjb250ZW50LiBJ
dCBzaW1wbHkgY2hlY2tzIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGNvbnNpZGVyZWQgZW1w
dHkuCi0gICAgYXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlv
dXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRl
eHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgIHJldHVybiAhKGRpc3Bs
YXlCb3guaG9yaXpvbnRhbEJvcmRlcigpIHx8IChkaXNwbGF5Qm94Lmhvcml6b250YWxQYWRkaW5n
KCkgJiYgZGlzcGxheUJveC5ob3Jpem9udGFsUGFkZGluZygpLnZhbHVlKCkpKTsKIH0KIApAQCAt
NzUsMTAgKzc1LDEwIEBAIGJvb2wgTGluZTo6aXNWaXN1YWxseUVtcHR5KCkgY29uc3QKIHsKICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgY2FjaGVkIGluc3RlYWQgLWFzIHRoZSBpbmxpbmUg
aXRlbXMgYXJlIGJlaW5nIGFkZGVkLgogICAgIC8vIFJldHVybiB0cnVlIGZvciBlbXB0eSBpbmxp
bmUgY29udGFpbmVycyBsaWtlIDxzcGFuPjwvc3Bhbj4uCi0gICAgYXV0byYgbGF5b3V0U3RhdGUg
PSB0aGlzLT5sYXlvdXRTdGF0ZSgpOworICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhp
cy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKICAgICBmb3IgKGF1dG8mIHJ1biA6IG1fY29udGVudC0+
cnVucygpKSB7CiAgICAgICAgIGlmIChydW4tPmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAg
ICAgICAgaWYgKCFpc0lubGluZUNvbnRhaW5lckNvbnNpZGVyZWRFbXB0eShsYXlvdXRTdGF0ZSwg
cnVuLT5sYXlvdXRCb3goKSkpCisgICAgICAgICAgICBpZiAoIWlzSW5saW5lQ29udGFpbmVyQ29u
c2lkZXJlZEVtcHR5KGZvcm1hdHRpbmdDb250ZXh0LCBydW4tPmxheW91dEJveCgpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQpAQCAtODYsNyArODYsNyBAQCBib29sIExpbmU6OmlzVmlzdWFsbHlFbXB0eSgpIGNvbnN0CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHJ1bi0+bGF5b3V0Qm94KCkuZXN0YWJs
aXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQocnVuLT5sYXlv
dXRCb3goKS5pc0lubGluZUJsb2NrQm94KCkpOwotICAgICAgICAgICAgYXV0byYgZGlzcGxheUJv
eCA9IGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocnVuLT5sYXlvdXRCb3goKSk7
CisgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxh
eUJveEZvckxheW91dEJveChydW4tPmxheW91dEJveCgpKTsKICAgICAgICAgICAgIGlmICghZGlz
cGxheUJveC53aWR0aCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
aWYgKG1fc2tpcFZlcnRpY2FsQWxpZ21lbnQgfHwgZGlzcGxheUJveC5oZWlnaHQoKSkKQEAgLTEx
Niw2ICsxMTYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8TGluZTo6Q29udGVudD4gTGluZTo6Y2xvc2Uo
KQogICAgICAgICB9CiAKICAgICAgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRT
dGF0ZSgpOworICAgICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRp
bmdDb250ZXh0KCk7CiAgICAgICAgIGZvciAoYXV0byYgcnVuIDogbV9jb250ZW50LT5ydW5zKCkp
IHsKICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcDsKICAgICAgICAgICAgIGF1dG8m
IGxheW91dEJveCA9IHJ1bi0+bGF5b3V0Qm94KCk7CkBAIC0xMjcsNyArMTI4LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPExpbmU6OkNvbnRlbnQ+IExpbmU6OmNsb3NlKCkKICAgICAgICAgICAgICAgICBp
ZiAocnVuLT5pc0xpbmVCcmVhaygpIHx8IHJ1bi0+aXNUZXh0KCkpCiAgICAgICAgICAgICAgICAg
ICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZU9mZnNldCgpIC0gYXNjZW50OwogICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHJ1bi0+aXNDb250YWluZXJTdGFydCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KGxheW91dEJveCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3Jt
YXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAgICAgICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZU9mZnNldCgpIC0gYXNjZW50IC0gZGlz
cGxheUJveC5ib3JkZXJUb3AoKSAtIGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgp
ICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gZG93bmNhc3Q8SW5saW5l
Rm9ybWF0dGluZ1N0YXRlPihsYXlvdXRTdGF0ZS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdTdGF0ZShs
YXlvdXRCb3gpKTsKQEAgLTI5NCw3ICsyOTUsNyBAQCB2b2lkIExpbmU6OmFwcGVuZFRleHRDb250
ZW50KGNvbnN0IElubGluZVRleHRJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYQog
CiB2b2lkIExpbmU6OmFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0sIExheW91dFVuaXQgbG9naWNhbFdpZHRoKQogewotICAgIGF1dG8mIGRpc3Bs
YXlCb3ggPSBsYXlvdXRTdGF0ZSgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goaW5saW5lSXRlbS5s
YXlvdXRCb3goKSk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0KCku
ZGlzcGxheUJveEZvckxheW91dEJveChpbmxpbmVJdGVtLmxheW91dEJveCgpKTsKICAgICBhdXRv
IGhvcml6b250YWxNYXJnaW4gPSBkaXNwbGF5Qm94Lmhvcml6b250YWxNYXJnaW4oKTsgICAgCiAg
ICAgYXV0byBsb2dpY2FsUmVjdCA9IERpc3BsYXk6OlJlY3QgeyB9OwogCkBAIC00MTMsOCArNDE0
LDggQEAgTGF5b3V0VW5pdCBMaW5lOjppbmxpbmVJdGVtQ29udGVudEhlaWdodChjb25zdCBJbmxp
bmVJdGVtJiBpbmxpbmVJdGVtKSBjb25zdAogICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVp
Z2h0KCk7CiAKICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVJdGVtLmxheW91dEJveCgpOwot
ICAgIEFTU0VSVChsYXlvdXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KSk7Ci0gICAg
YXV0byYgZGlzcGxheUJveCA9IGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOworICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4dCgpLmhhc0Rpc3BsYXlCb3go
bGF5b3V0Qm94KSk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0KCku
ZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogCiAgICAgaWYgKGxheW91dEJveC5p
c0Zsb2F0aW5nUG9zaXRpb25lZCgpKQogICAgICAgICByZXR1cm4gZGlzcGxheUJveC5ib3JkZXJC
b3hIZWlnaHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJsZWZvcm1h
dHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
dGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IGExZmVmY2Yz
YTE4YjMwNzUwZGE2YzNiN2Y3ZDc5YTJhZWQ1YzVmYTMuLjNhOTJjNmM5ZjZkYzUwNzQ5Y2Y5ZmU5
MWNhNzAwNGNiNTE1ODI1MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC90YWJs
ZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAt
NjksMTMgKzY5LDEzIEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0KCkKICAg
ICAvLyBGaXJzdCByb3cuCiAgICAgYXV0byYgcm93ID0gcm93TGlzdC5maXJzdCgpOwogICAgIHJv
dy5zZXRMb2dpY2FsVG9wKHsgfSk7Ci0gICAgaW5pdGlhbGl6ZURpc3BsYXlCb3hUb0JsYW5rKGxh
eW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocm93LmJveCgpKSk7CisgICAgaW5pdGlh
bGl6ZURpc3BsYXlCb3hUb0JsYW5rKGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocm93LmJveCgpKSk7
CiAKICAgICBmb3IgKGF1dG8mIGNlbGwgOiBjZWxsTGlzdCkgewogICAgICAgICBhdXRvJiBjZWxs
TGF5b3V0Qm94ID0gY2VsbC0+dGFibGVDZWxsQm94OwogICAgICAgICBBU1NFUlQoY2VsbExheW91
dEJveC5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQoKSk7CiAKLSAgICAgICAgYXV0
byYgY2VsbERpc3BsYXlCb3ggPSBsYXlvdXRTdGF0ZS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNl
bGxMYXlvdXRCb3gpOworICAgICAgICBhdXRvJiBjZWxsRGlzcGxheUJveCA9IGRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goY2VsbExheW91dEJveCk7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3IgY29sdW1uIGFuZCByb3cgc3Bhbm5pbmcuCiAgICAgICAgIGF1dG8gY2VsbFBvc2l0aW9u
ID0gY2VsbC0+cG9zaXRpb247CiAgICAgICAgIGF1dG8mIHJvdyA9IHJvd0xpc3QuYXQoY2VsbFBv
c2l0aW9uLnkoKSk7CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4
dDo6bGF5b3V0KCkKICAgICAgICAgaWYgKCFjZWxsUG9zaXRpb24ueCgpICYmIGNlbGxQb3NpdGlv
bi55KCkpIHsKICAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzUm93ID0gcm93TGlzdC5hdChjZWxs
UG9zaXRpb24ueSgpIC0gMSk7CiAgICAgICAgICAgICByb3cuc2V0TG9naWNhbFRvcChwcmV2aW91
c1Jvdy5sb2dpY2FsQm90dG9tKCkpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZURpc3BsYXlCb3hU
b0JsYW5rKGxheW91dFN0YXRlLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocm93LmJveCgpKSk7Cisg
ICAgICAgICAgICBpbml0aWFsaXplRGlzcGxheUJveFRvQmxhbmsoZGlzcGxheUJveEZvckxheW91
dEJveChyb3cuYm94KCkpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE4OCw3ICsxODgsNyBA
QCBMYXlvdXRVbml0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkVGFibGVXaWR0aCgp
CiAgICAgYXV0byYgdGFibGVXcmFwcGVyQm94ID0gcm9vdCgpOwogICAgIGF1dG8mIHN0eWxlID0g
dGFibGVXcmFwcGVyQm94LnN0eWxlKCk7CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKnRh
YmxlV3JhcHBlckJveC5jb250YWluaW5nQmxvY2soKTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxv
Y2tEaXNwbGF5Qm94ID0gbGF5b3V0U3RhdGUoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRh
aW5pbmdCbG9jayk7CisgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKTsKICAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja1dpZHRoID0gY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94V2lkdGgoKTsK
IAogICAgIGF1dG8mIGdyaWQgPSBmb3JtYXR0aW5nU3RhdGUoKS50YWJsZUdyaWQoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>