<?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>137545</bug_id>
          
          <creation_ts>2014-10-08 19:20:28 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for RenderBlockFlow</short_desc>
          <delta_ts>2014-10-09 09:17:20 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137424</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1040461</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-08 19:20:28 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for RenderBlockFlow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040462</commentid>
    <comment_count>1</comment_count>
      <attachid>239510</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-08 19:42:41 -0700</bug_when>
    <thetext>Created attachment 239510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040562</commentid>
    <comment_count>2</comment_count>
      <attachid>239510</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-09 09:17:14 -0700</bug_when>
    <thetext>Comment on attachment 239510
Patch

Clearing flags on attachment: 239510

Committed r174504: &lt;http://trac.webkit.org/changeset/174504&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040563</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-09 09:17:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239510</attachid>
            <date>2014-10-08 19:42:41 -0700</date>
            <delta_ts>2014-10-09 09:17:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137545-20141008194244.patch</filename>
            <type>text/plain</type>
            <size>76194</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NDgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2UzZTlmZjkzMmFhN2Rk
NzNkNjUxNTJjMTZkMWU3ZWU1MWZhOWNiOS4uZGE0YzUwN2M5YjcyMWY4MzViYmNlMTVlNjViZjE1
ZGM4YzYzMWE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEwNCBAQAogMjAxNC0xMC0wOCAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgUmVuZGVyQmxvY2tGbG93CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8PigpIGZvciBS
ZW5kZXJCbG9ja0Zsb3cgYW5kIGNsZWFuIHVwIHRoZQorICAgICAgICBzdXJyb3VuZGluZyBjb2Rl
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojp3ZWJraXRHZXRSZWdpb25GbG93UmFuZ2VzKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24pOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJ1aWxkT2JqZWN0Rm9yUmVnaW9uSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1
aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8pOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0Jv
eC5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmlubmVyVGV4dElmVHJ1bmNhdGVkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6
OkxheW91dFN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptb3Zl
QWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNUbyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnJlYnVp
bGRGbG9hdGluZ09iamVjdFNldEZyb21JbnRydWRpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6bWFyZ2luT2Zmc2V0Rm9yU2VsZkNvbGxhcHNpbmdCbG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpblZhbHVlc0ZvckNoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29sbGFwc2VNYXJnaW5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bWFyZ2luQmVmb3JlRXN0aW1hdGVGb3JD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmhhbmRsZUFmdGVyU2lk
ZU9mQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjptdXN0RGlzY2Fy
ZE1hcmdpbkJlZm9yZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6bXVzdERpc2NhcmRNYXJnaW5BZnRlckZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrRmxvdzo6YWRqdXN0QmxvY2tDaGlsZEZvclBhZ2luYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojptb3ZlQWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNU
byk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Om1hcmtBbGxEZXNjZW5kYW50
c1dpdGhGbG9hdHNGb3JMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjphZGp1c3RGb3JCb3JkZXJGaXQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGVpZ2h0Rm9yTGlu
ZUNvdW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojppc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFp
bmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y3JlYXRlTGluZUJveGVzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRN
YXNrRm9yVGV4dEZpbGxCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhp
YmxlQm94OjphcHBseUxpbmVDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3g6OmNsZWFyTGluZUNsYW1wKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpy
ZW1vdmVGbG93Q2hpbGRJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OmV4cGFuZENsaXBSZWN0Rm9yUmVnaW9uQW5kUmVmbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1l
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENv
bXBvc2l0aW5nTGF5ZXJUcmVlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZDo6ZXZhY3VhdGVBbmREZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZDo6cHJvY2Vzc1Bvc3NpYmxlU3Bhbm5lckRlc2NlbmRhbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmbG93VGhyZWFk
RGVzY2VuZGFudEluc2VydGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0OjpoZWlnaHRBZGp1
c3RlZEZvclNldE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNl
dDo6Y29sdW1uR2FwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmZyYWdtZW50Q29udGFpbmVy
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6YWRqdXN0Q29tcHV0ZWRGb250U2l6ZXNPbkJsb2Nrcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlc2V0VGV4dEF1dG9zaXppbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzaG93TGluZVRyZWVGb3JUaGlzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2hvd1JlbmRlclN1YlRyZWVBbmRNYXJrKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0OjpzZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmVuc3VyZUxpbmVC
b3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzaW1wbGVMaW5lTGF5b3V0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjp3cml0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6c2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVj
ZWRpbmdCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpibG9ja0Zsb3cp
OgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNvbXB1dGVUZXh0Qm91bmRpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y29tcHV0ZVRleHRGaXJzdFJ1
bkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNvbGxlY3RU
ZXh0QWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpj
b2xsZWN0VGV4dEFic29sdXRlUXVhZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4
dFF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZsb3dCb3hGb3JSZW5kZXJlcik6CisKKzIw
MTQtMTAtMDggIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAg
IFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIFJlbmRlckJsb2NrIG9iamVjdHMKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzUxMgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAppbmRleCBmNTc2OTE0NWE1MjA4M2E5MjkyMDFmNDBmYjRmYjVjYTJiN2Iy
MjEzLi5lOTA5NjA0MWY3OWU1MTA2ZDQ4OGNkNWViMzU1MjI4MzNiMDcwOTVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKQEAgLTEyODUsOCArMTI4NSw4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKICAgICAKLSAgICBpZiAobV9yZW5kZXJlci0+aXNSZW5kZXJC
bG9ja0Zsb3coKSAmJiBtX3JlbmRlcmVyLT5jaGlsZHJlbklubGluZSgpICYmICFjYW5TZXRGb2N1
c0F0dHJpYnV0ZSgpKQotICAgICAgICByZXR1cm4gIXRvUmVuZGVyQmxvY2tGbG93KG1fcmVuZGVy
ZXIpLT5oYXNMaW5lcygpICYmICFtb3VzZUJ1dHRvbkxpc3RlbmVyKCk7CisgICAgaWYgKGlzPFJl
bmRlckJsb2NrRmxvdz4oKm1fcmVuZGVyZXIpICYmIG1fcmVuZGVyZXItPmNoaWxkcmVuSW5saW5l
KCkgJiYgIWNhblNldEZvY3VzQXR0cmlidXRlKCkpCisgICAgICAgIHJldHVybiAhZG93bmNhc3Q8
UmVuZGVyQmxvY2tGbG93PigqbV9yZW5kZXJlcikuaGFzTGluZXMoKSAmJiAhbW91c2VCdXR0b25M
aXN0ZW5lcigpOwogICAgIAogICAgIC8vIGlnbm9yZSBpbWFnZXMgc2VlbWluZ2x5IHVzZWQgYXMg
c3BhY2VycwogICAgIGlmIChpc0ltYWdlKCkpIHsKQEAgLTEyOTgsOSArMTI5OCw5IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSBjb25zdAogICAgICAgICAvLyBGaXJzdCBjaGVjayB0aGUgUmVuZGVySW1hZ2UncyBhbHRUZXh0
ICh3aGljaCBjYW4gYmUgc2V0IHRocm91Z2ggYSBzdHlsZSBzaGVldCwgb3IgY29tZSBmcm9tIHRo
ZSBFbGVtZW50KS4KICAgICAgICAgLy8gSG93ZXZlciwgaWYgdGhpcyBpcyBub3QgYSBuYXRpdmUg
aW1hZ2UsIGZhbGxiYWNrIHRvIHRoZSBhdHRyaWJ1dGUgb24gdGhlIEVsZW1lbnQuCiAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gYWx0VGV4dEluY2x1c2lvbiA9IERlZmF1bHRC
ZWhhdmlvcjsKLSAgICAgICAgYm9vbCBpc1JlbmRlckltYWdlID0gbV9yZW5kZXJlciAmJiBtX3Jl
bmRlcmVyLT5pc1JlbmRlckltYWdlKCk7CisgICAgICAgIGJvb2wgaXNSZW5kZXJJbWFnZSA9IGlz
PFJlbmRlckltYWdlPihtX3JlbmRlcmVyKTsKICAgICAgICAgaWYgKGlzUmVuZGVySW1hZ2UpCi0g
ICAgICAgICAgICBhbHRUZXh0SW5jbHVzaW9uID0gb2JqZWN0SW5jbHVzaW9uRnJvbUFsdFRleHQo
dG9SZW5kZXJJbWFnZShtX3JlbmRlcmVyKS0+YWx0VGV4dCgpKTsKKyAgICAgICAgICAgIGFsdFRl
eHRJbmNsdXNpb24gPSBvYmplY3RJbmNsdXNpb25Gcm9tQWx0VGV4dChkb3duY2FzdDxSZW5kZXJJ
bWFnZT4oKm1fcmVuZGVyZXIpLmFsdFRleHQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGFsdFRleHRJbmNsdXNpb24gPSBvYmplY3RJbmNsdXNpb25Gcm9tQWx0VGV4dChnZXRBdHRyaWJ1
dGUoYWx0QXR0cikuc3RyaW5nKCkpOwogCkBAIC0xMzE1LDEzICsxMzE1LDEzIEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBj
b25zdAogICAgIAogICAgICAgICBpZiAoaXNSZW5kZXJJbWFnZSkgewogICAgICAgICAgICAgLy8g
Y2hlY2sgZm9yIG9uZS1kaW1lbnNpb25hbCBpbWFnZQotICAgICAgICAgICAgUmVuZGVySW1hZ2Uq
IGltYWdlID0gdG9SZW5kZXJJbWFnZShtX3JlbmRlcmVyKTsKLSAgICAgICAgICAgIGlmIChpbWFn
ZS0+aGVpZ2h0KCkgPD0gMSB8fCBpbWFnZS0+d2lkdGgoKSA8PSAxKQorICAgICAgICAgICAgUmVu
ZGVySW1hZ2UmIGltYWdlID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCptX3JlbmRlcmVyKTsKKyAg
ICAgICAgICAgIGlmIChpbWFnZS5oZWlnaHQoKSA8PSAxIHx8IGltYWdlLndpZHRoKCkgPD0gMSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Ly8gY2hlY2sgd2hldGhlciByZW5kZXJlZCBpbWFnZSB3YXMgc3RyZXRjaGVkIGZyb20gb25lLWRp
bWVuc2lvbmFsIGZpbGUgaW1hZ2UKLSAgICAgICAgICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2Uo
KSkgewotICAgICAgICAgICAgICAgIExheW91dFNpemUgaW1hZ2VTaXplID0gaW1hZ2UtPmNhY2hl
ZEltYWdlKCktPmltYWdlU2l6ZUZvclJlbmRlcmVyKHRvUmVuZGVyRWxlbWVudChtX3JlbmRlcmVy
KSwgaW1hZ2UtPnZpZXcoKS56b29tRmFjdG9yKCkpOworICAgICAgICAgICAgaWYgKGltYWdlLmNh
Y2hlZEltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICBMYXlvdXRTaXplIGltYWdlU2l6ZSA9IGlt
YWdlLmNhY2hlZEltYWdlKCktPmltYWdlU2l6ZUZvclJlbmRlcmVyKHRvUmVuZGVyRWxlbWVudCht
X3JlbmRlcmVyKSwgaW1hZ2UudmlldygpLnpvb21GYWN0b3IoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGltYWdlU2l6ZS5oZWlnaHQoKSA8PSAxIHx8IGltYWdlU2l6ZS53aWR0aCgpIDw9IDE7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCAxMWRh
MzUxM2E5MjAwZWM3N2QwZjk4NzkyOWVjMjBkODE4YTFhZjZiLi5hNWIwNDVkNjk5N2VlNTJjN2Ew
OTJiNDVmOGNhNmIyNjYyMTNjOGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yNDk0LDcg
KzI0OTQsNyBAQCBib29sIEVsZW1lbnQ6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdAog
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIEVsZW1lbnQ6OnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KCkgY29uc3QKIHsKICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1JlbmRlck5h
bWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpCi0gICAgICAgIHJldHVybiB0b1JlbmRlckJsb2Nr
RmxvdyhyZW5kZXJlcigpKS0+cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKCkpLnJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KCk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTI1NTQsOSArMjU1NCw5
IEBAIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBFbGVtZW50Ojp3ZWJraXRHZXRSZWdpb25GbG93UmFu
Z2VzKCkgY29uc3QKIAogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyQmxvY2tGbG93KHJlbmRlcmVyKCkp
LT5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgICAgICBpZiAobmFtZWRGbG93RnJhZ21l
bnQtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5nZXRSYW5nZXMo
cmFuZ2VPYmplY3RzKTsKKyAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQmIG5hbWVkRmxv
d0ZyYWdtZW50ID0gKmRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKCkpLnJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KCk7CisgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBuYW1lZEZsb3dGcmFnbWVudC5nZXRSYW5nZXMocmFuZ2VPYmpl
Y3RzKTsKICAgICB9CiAKICAgICByZXR1cm4gcmFuZ2VPYmplY3RzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCmluZGV4IDRhN2FmZDg3MDBhNGFmYmIxYTllNTQ5ZGFlNjdmOGFlNDcwMDQwZTku
LmMyMDMzOTUwMTE0MmUwZGM4NDk5ZjRlNjdlMzQ5MDM2ODQ2YzcyMjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKQEAgLTc2OSw3ICs3NjksNyBAQCBib29sIEVkaXRvcjo6aGFzQmlkaVNl
bGVjdGlvbigpIGNvbnN0CiAgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9k
ZSgpOwogCiAgICAgYXV0byByZW5kZXJlciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKTsKLSAgICB3
aGlsZSAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpKQorICAgIHdo
aWxlIChyZW5kZXJlciAmJiAhaXM8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQogICAgICAg
ICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAogICAgIGlmICghcmVuZGVyZXIpCkBA
IC03NzgsNyArNzc4LDcgQEAgYm9vbCBFZGl0b3I6Omhhc0JpZGlTZWxlY3Rpb24oKSBjb25zdAog
ICAgIGlmICghcmVuZGVyZXItPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiB0b1JlbmRlckJsb2NrRmxvdyhyZW5kZXJl
ciktPmNvbnRhaW5zTm9uWmVyb0JpZGlMZXZlbCgpOworICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikuY29udGFpbnNOb25aZXJvQmlkaUxldmVsKCk7CiB9CiAK
IFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCBlNmYy
MWJiY2EzNWI0MmEzOTVmMzk3ODIxYTRkY2M3ZWZhMTk2ZjQ3Li5jYWNhOGU0YTE4ODFlNDk1MzY5
NDVhZDlhZjVkNmNjNzI5MTk0YWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwCkBAIC0zNzksMTAgKzM3OSwxMCBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUmVnaW9uSGlnaGxpZ2h0KEZyYW1lVmll
dyogbWFpbgogICAgIGlmICghY29udGFpbmluZ1ZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgUmVuZGVyQmxvY2tGbG93KiByZWdpb25Db250YWluZXIgPSB0b1JlbmRlckJsb2Nr
RmxvdyhyZWdpb24tPnBhcmVudCgpKTsKLSAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IHJlZ2lv
bkNvbnRhaW5lci0+Ym9yZGVyQm94UmVjdCgpOwotICAgIGJvcmRlckJveC5zZXRXaWR0aChib3Jk
ZXJCb3gud2lkdGgoKSArIHJlZ2lvbkNvbnRhaW5lci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
KTsKLSAgICBib3JkZXJCb3guc2V0SGVpZ2h0KGJvcmRlckJveC5oZWlnaHQoKSArIHJlZ2lvbkNv
bnRhaW5lci0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpKTsKKyAgICBSZW5kZXJCbG9ja0Zs
b3cmIHJlZ2lvbkNvbnRhaW5lciA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlZ2lvbi0+
cGFyZW50KCkpOworICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0gcmVnaW9uQ29udGFpbmVyLmJv
cmRlckJveFJlY3QoKTsKKyAgICBib3JkZXJCb3guc2V0V2lkdGgoYm9yZGVyQm94LndpZHRoKCkg
KyByZWdpb25Db250YWluZXIudmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsKKyAgICBib3JkZXJC
b3guc2V0SGVpZ2h0KGJvcmRlckJveC5oZWlnaHQoKSArIHJlZ2lvbkNvbnRhaW5lci5ob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwogCiAgICAgLy8gQ3JlYXRlIGluY29taW5nIGFuZCBvdXRn
b2luZyBib3hlcyB0aGF0IHdlIHVzZSB0byBjaGFpbiB0aGUgcmVnaW9ucyB0b2doZXRoZXIuCiAg
ICAgY29uc3QgTGF5b3V0U2l6ZSBsaW5rQm94U2l6ZSgxMCwgMTApOwpAQCAtMzk3LDkgKzM5Nyw5
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSZWdp
b25IaWdobGlnaHQoRnJhbWVWaWV3KiBtYWluCiAgICAgaW5jb21pbmdSZWN0Qm94Lm1vdmUoMCwg
bGlua0JveFZlcnRpY2FsT2Zmc2V0KTsKICAgICBvdXRnb2luZ1JlY3RCb3gubW92ZSgwLCAtbGlu
a0JveFZlcnRpY2FsT2Zmc2V0KTsKIAotICAgIEZsb2F0UXVhZCBib3JkZXJSZWN0UXVhZCA9IHJl
Z2lvbkNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9yZGVyQm94KSk7
Ci0gICAgRmxvYXRRdWFkIGluY29taW5nUmVjdFF1YWQgPSByZWdpb25Db250YWluZXItPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGluY29taW5nUmVjdEJveCkpOwotICAgIEZsb2F0UXVh
ZCBvdXRnb2luZ1JlY3RRdWFkID0gcmVnaW9uQ29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdChvdXRnb2luZ1JlY3RCb3gpKTsKKyAgICBGbG9hdFF1YWQgYm9yZGVyUmVjdFF1
YWQgPSByZWdpb25Db250YWluZXIubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9yZGVy
Qm94KSk7CisgICAgRmxvYXRRdWFkIGluY29taW5nUmVjdFF1YWQgPSByZWdpb25Db250YWluZXIu
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoaW5jb21pbmdSZWN0Qm94KSk7CisgICAgRmxv
YXRRdWFkIG91dGdvaW5nUmVjdFF1YWQgPSByZWdpb25Db250YWluZXIubG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3Qob3V0Z29pbmdSZWN0Qm94KSk7CiAKICAgICBjb250ZW50c1F1YWRUb1Bh
Z2UobWFpblZpZXcsIGNvbnRhaW5pbmdWaWV3LCBib3JkZXJSZWN0UXVhZCk7CiAgICAgY29udGVu
dHNRdWFkVG9QYWdlKG1haW5WaWV3LCBjb250YWluaW5nVmlldywgaW5jb21pbmdSZWN0UXVhZCk7
CkBAIC03MTEsMTMgKzcxMSwxMiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGJ1aWxkT2JqZWN0Rm9yRWxlbWVudEluZm8oTm9kZSogbm9kZSkKICAgICBlbGVtZW50SW5mby0+
c2V0U3RyaW5nKCJub2RlSGVpZ2h0IiwgU3RyaW5nOjpudW1iZXIobW9kZWxPYmplY3QgPyBhZGp1
c3RGb3JBYnNvbHV0ZVpvb20obW9kZWxPYmplY3QtPnBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgp
LCAqbW9kZWxPYmplY3QpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpKTsKICAgICAKICAgICBpZiAo
cmVuZGVyZXItPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkgewotICAgICAg
ICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uID0gdG9SZW5kZXJCbG9ja0Zsb3cocmVu
ZGVyZXIpLT5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgICAgICBpZiAocmVnaW9uLT5p
c1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBy
ZWdpb24tPmZsb3dUaHJlYWQoKTsKLSAgICAgICAgICAgIEFTU0VSVChmbG93VGhyZWFkICYmIGZs
b3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpOworICAgICAgICBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCYgcmVnaW9uID0gKmRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRl
cmVyKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAgICAgICBpZiAocmVnaW9uLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IHJlZ2lv
bi5mbG93VGhyZWFkKCk7CiAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWdp
b25GbG93SW5mbyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICByZWdp
b25GbG93SW5mby0+c2V0U3RyaW5nKCJuYW1lIiwgdG9SZW5kZXJOYW1lZEZsb3dUaHJlYWQoZmxv
d1RocmVhZCktPmZsb3dUaHJlYWROYW1lKCkpOwotICAgICAgICAgICAgcmVnaW9uRmxvd0luZm8t
PnNldEFycmF5KCJyZWdpb25zIiwgYnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KHJl
Z2lvbiwgZmxvd1RocmVhZCkpOworICAgICAgICAgICAgcmVnaW9uRmxvd0luZm8tPnNldFN0cmlu
ZygibmFtZSIsIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKmZsb3dUaHJlYWQpLmZs
b3dUaHJlYWROYW1lKCkpOworICAgICAgICAgICAgcmVnaW9uRmxvd0luZm8tPnNldEFycmF5KCJy
ZWdpb25zIiwgYnVpbGRPYmplY3RGb3JDU1NSZWdpb25zSGlnaGxpZ2h0KCZyZWdpb24sIGZsb3dU
aHJlYWQpKTsKICAgICAgICAgICAgIGVsZW1lbnRJbmZvLT5zZXRPYmplY3QoInJlZ2lvbkZsb3dJ
bmZvIiwgcmVnaW9uRmxvd0luZm8ucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKaW5kZXggMjJlMzBjNDdkMDhkNTRhMDY2MTUw
ZDg2ZDVkNTE3ZTI4MTJlMDBjZC4uZjNjZjhkYjZmMWFmZGYwZjgwZGExYWYxMDQyYzEwNTUzYmQ3
ZWRiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKQEAgLTM2LDcgKzM2
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSBzKSB7IG1fc2VsZWN0aW9uU3RhdGUgPSBzOyB9CiAgICAgSW50UmVjdCBz
ZWxlY3Rpb25SZWN0KCk7CiAKLSAgICBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdygpIGNvbnN0
IHsgcmV0dXJuIHRvUmVuZGVyQmxvY2tGbG93KElubGluZUJveDo6cmVuZGVyZXIoKSk7IH0KKyAg
ICBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdygpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJl
bmRlckJsb2NrRmxvdz4oSW5saW5lQm94OjpyZW5kZXJlcigpKTsgfQogCiBwcml2YXRlOgogICAg
IHZvaWQgcGFpbnRNYXJrdXBCb3goUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgY29uc3Qg
UmVuZGVyU3R5bGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNw
cAppbmRleCBmZjg0ZjY3MTI0MjA1MTZkNWIxZGY4NmU5ZDlmY2IzMTMxNWM3MjE2Li42YjVjMWYy
Mjc0YWZkMmQ1ZTk2ZWFmOTNlOTFiOGMxZjdhZDIzOWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC0yNDMsMTIgKzI0MywxMiBAQCBTdHJpbmcgSGl0
VGVzdFJlc3VsdDo6aW5uZXJUZXh0SWZUcnVuY2F0ZWQoVGV4dERpcmVjdGlvbiYgZGlyKSBjb25z
dAogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBk
b3duY2FzdDxFbGVtZW50PigqdHJ1bmNhdGVkTm9kZSkucmVuZGVyZXIoKSkgewotICAgICAgICAg
ICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrRmxvdygpKSB7Ci0gICAgICAgICAgICAgICAg
UmVuZGVyQmxvY2tGbG93KiBibG9jayA9IHRvUmVuZGVyQmxvY2tGbG93KHJlbmRlcmVyKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYmxvY2stPnN0eWxlKCkudGV4dE92ZXJmbG93KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gYmxvY2stPmZpcnN0Um9v
dEJveCgpOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkgeworICAgICAgICAgICAg
aWYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrRmxvdyYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJl
cik7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLnN0eWxlKCkudGV4dE92ZXJmbG93KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gYmxvY2suZmly
c3RSb290Qm94KCk7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobGluZS0+aGFzRWxsaXBzaXNCb3goKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpciA9IGJsb2NrLT5zdHlsZSgpLmRpcmVjdGlvbigpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpciA9IGJsb2NrLnN0eWxlKCkuZGlyZWN0aW9uKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KCp0
cnVuY2F0ZWROb2RlKS5pbm5lclRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0xheW91dFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5j
cHAKaW5kZXggMmRkMTQyMjI5YTY0YzFlZTRjOTY2YjE4NjViYjE5YWE2NjgyMDVkMi4uYmJlMTcw
NjllN2RkZjI4M2YwNTI4MmRkMGIwYzk5YzY5NDJkNGIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuY3BwCkBAIC0xMTYsOCArMTE2LDggQEAgTGF5b3V0U3RhdGU6Okxh
eW91dFN0YXRlKHN0ZDo6dW5pcXVlX3B0cjxMYXlvdXRTdGF0ZT4gbmV4dCwgUmVuZGVyQm94KiBy
ZW5kZXJlciwKICAgICAgICAgdG9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQocmVuZGVyZXIp
LT5jb21wdXRlTGluZUdyaWRQYWdpbmF0aW9uT3JpZ2luKCp0aGlzKTsKIAogICAgIC8vIElmIHdl
IGhhdmUgYSBuZXcgZ3JpZCB0byB0cmFjaywgdGhlbiBhZGQgaXQgdG8gb3VyIHNldC4KLSAgICBp
ZiAocmVuZGVyZXItPnN0eWxlKCkubGluZUdyaWQoKSAhPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVHcmlkKCkgJiYgcmVuZGVyZXItPmlzUmVuZGVyQmxvY2tGbG93KCkpCi0gICAgICAgIGVzdGFi
bGlzaExpbmVHcmlkKHRvUmVuZGVyQmxvY2tGbG93KHJlbmRlcmVyKSk7CisgICAgaWYgKHJlbmRl
cmVyLT5zdHlsZSgpLmxpbmVHcmlkKCkgIT0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lR3JpZCgp
ICYmIGlzPFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSkKKyAgICAgICAgZXN0YWJsaXNoTGlu
ZUdyaWQoZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlcikpOwogCiAgICAgLy8gRklY
TUU6IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ0Mz4gQXBwbHkg
Y29udHJvbCBjbGlwIGlmIHByZXNlbnQuCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAppbmRleCBhYTE1NTFmNjY4ZjgyMWIxMjgyYzg1OTc5NWYwYWE3MTg3ODExODYw
Li5iY2JhNTFjZjdkYjhlZTZjNzYzMDJmMjMyMGI0NmU2NzgxNDBiNThiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTc0NSw3ICs3NDUsNyBAQCBSZW5kZXJP
YmplY3QqIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGFrZSBhbGwgdGhlIGNoaWxkcmVuIG91
dCBvZiB0aGUgfG5leHR8IGJsb2NrIGFuZCBwdXQgdGhlbSBpbgogICAgICAgICAgICAgLy8gdGhl
IHxwcmV2fCBibG9jay4KLSAgICAgICAgICAgIG5leHRCbG9jay5tb3ZlQWxsQ2hpbGRyZW5JbmNs
dWRpbmdGbG9hdHNUbygmcHJldkJsb2NrLCBuZXh0QmxvY2suaGFzTGF5ZXIoKSB8fCBwcmV2Qmxv
Y2suaGFzTGF5ZXIoKSk7CisgICAgICAgICAgICBuZXh0QmxvY2subW92ZUFsbENoaWxkcmVuSW5j
bHVkaW5nRmxvYXRzVG8ocHJldkJsb2NrLCBuZXh0QmxvY2suaGFzTGF5ZXIoKSB8fCBwcmV2Qmxv
Y2suaGFzTGF5ZXIoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUg
bm93LWVtcHR5IGJsb2NrJ3MgbGluZXMgYW5kIG51a2UgaXQuCiAgICAgICAgICAgICBuZXh0Qmxv
Y2suZGVsZXRlTGluZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5k
ZXggYjc5Zjg4ZWUxNWIwNDU0NDg3YzM5NzhjZDJlNDgxNWIzZWU3OTU3My4uNzJkNGE4OGQ3NzU3
MjM5YWJmN2ZkMzY2YjIwOTgxZjQ5ODEzZmYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKQEAgLTQwNyw3ICs0MDcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKFJlbmRlckJsb2NrKiBjaGlsZCk7CiAKICAg
ICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxl
cnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKLSAgICB2aXJ0dWFsIHZvaWQgbW92ZUFs
bENoaWxkcmVuSW5jbHVkaW5nRmxvYXRzVG8oUmVuZGVyQmxvY2sqIHRvQmxvY2ssIGJvb2wgZnVs
bFJlbW92ZUluc2VydCkgeyBtb3ZlQWxsQ2hpbGRyZW5Ubyh0b0Jsb2NrLCBmdWxsUmVtb3ZlSW5z
ZXJ0KTsgfQorICAgIHZpcnR1YWwgdm9pZCBtb3ZlQWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNU
byhSZW5kZXJCbG9jayYgdG9CbG9jaywgYm9vbCBmdWxsUmVtb3ZlSW5zZXJ0KSB7IG1vdmVBbGxD
aGlsZHJlblRvKCZ0b0Jsb2NrLCBmdWxsUmVtb3ZlSW5zZXJ0KTsgfQogCiAgICAgdm9pZCBhZGRD
aGlsZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0
aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApp
bmRleCBmZjk2ZDUxNjllMWNkNzM5NjY0ZjQwNjk4MWZkODE0NzJlYjRhODM2Li5kY2NkNjhkNmJh
ZjY2NDQyMjYyMWEzMTAwODZiNzA1NGE5MDc0ZmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMjI3LDE2ICsyMjcsMTYgQEAgdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OnJlYnVpbGRGbG9hdGluZ09iamVjdFNldEZyb21JbnRydWRpbmdGbG9hdHMo
KQogICAgIC8vIFdlIHNob3VsZCBub3QgcHJvY2VzcyBmbG9hdHMgaWYgdGhlIHBhcmVudCBub2Rl
IGlzIG5vdCBhIFJlbmRlckJsb2NrLiBPdGhlcndpc2UsIHdlIHdpbGwgYWRkIAogICAgIC8vIGZs
b2F0cyBpbiBhbiBpbnZhbGlkIGNvbnRleHQuIFRoaXMgd2lsbCBjYXVzZSBhIGNyYXNoIGFyaXNp
bmcgZnJvbSBhIGJhZCBjYXN0IG9uIHRoZSBwYXJlbnQuCiAgICAgLy8gU2VlIDxyZGFyOi8vcHJv
YmxlbS84MDQ5NzUzPiwgd2hlcmUgZmxvYXQgcHJvcGVydHkgaXMgYXBwbGllZCBvbiBhIHRleHQg
bm9kZSBpbiBhIFNWRy4KLSAgICBpZiAoIXBhcmVudCgpIHx8ICFwYXJlbnQoKS0+aXNSZW5kZXJC
bG9ja0Zsb3coKSkKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4ocGFyZW50KCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBBdHRlbXB0IHRvIGxvY2F0ZSBhIHByZXZpb3VzIHNpYmxp
bmcgd2l0aCBvdmVyaGFuZ2luZyBmbG9hdHMuIFdlIHNraXAgYW55IGVsZW1lbnRzIHRoYXQgYXJl
CiAgICAgLy8gb3V0IG9mIGZsb3cgKGxpa2UgZmxvYXRpbmcvcG9zaXRpb25lZCBlbGVtZW50cyks
IGFuZCB3ZSBhbHNvIHNraXAgb3ZlciBhbnkgb2JqZWN0cyB0aGF0IG1heSBoYXZlIHNoaWZ0ZWQK
ICAgICAvLyB0byBhdm9pZCBmbG9hdHMuCi0gICAgUmVuZGVyQmxvY2tGbG93KiBwYXJlbnRCbG9j
ayA9IHRvUmVuZGVyQmxvY2tGbG93KHBhcmVudCgpKTsKKyAgICBSZW5kZXJCbG9ja0Zsb3cmIHBh
cmVudEJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcGFyZW50KCkpOwogICAgIGJv
b2wgcGFyZW50SGFzRmxvYXRzID0gZmFsc2U7CiAgICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gcHJl
dmlvdXNTaWJsaW5nKCk7Ci0gICAgd2hpbGUgKHByZXYgJiYgKHByZXYtPmlzRmxvYXRpbmdPck91
dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCAhcHJldi0+aXNCb3goKSB8fCAhcHJldi0+aXNSZW5kZXJC
bG9ja0Zsb3coKSB8fCB0b1JlbmRlckJsb2NrRmxvdyhwcmV2KS0+YXZvaWRzRmxvYXRzKCkpKSB7
CisgICAgd2hpbGUgKHByZXYgJiYgKHByZXYtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9u
ZWQoKSB8fCAhaXM8UmVuZGVyQm94PigqcHJldikgfHwgIWlzPFJlbmRlckJsb2NrRmxvdz4oKnBy
ZXYpIHx8IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnByZXYpLmF2b2lkc0Zsb2F0cygpKSkg
ewogICAgICAgICBpZiAocHJldi0+aXNGbG9hdGluZygpKQogICAgICAgICAgICAgcGFyZW50SGFz
RmxvYXRzID0gdHJ1ZTsKICAgICAgICAgcHJldiA9IHByZXYtPnByZXZpb3VzU2libGluZygpOwpA
QCAtMjQ1LDIxICsyNDUsMjEgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnJlYnVpbGRGbG9hdGlu
Z09iamVjdFNldEZyb21JbnRydWRpbmdGbG9hdHMoKQogICAgIC8vIEZpcnN0IGFkZCBpbiBmbG9h
dHMgZnJvbSB0aGUgcGFyZW50LiBTZWxmLWNvbGxhcHNpbmcgYmxvY2tzIGxldCB0aGVpciBwYXJl
bnQgdHJhY2sgYW55IGZsb2F0cyB0aGF0IGludHJ1ZGUgaW50bwogICAgIC8vIHRoZW0gKGFzIG9w
cG9zZWQgdG8gZmxvYXRzIHRoZXkgY29udGFpbiB0aGVtc2VsdmVzKSBzbyBjaGVjayBmb3IgdGhv
c2UgaGVyZSB0b28uCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0ID0gbG9naWNhbFRv
cCgpOwotICAgIGlmIChwYXJlbnRIYXNGbG9hdHMgfHwgKHBhcmVudEJsb2NrLT5sb3dlc3RGbG9h
dExvZ2ljYWxCb3R0b20oKSA+IGxvZ2ljYWxUb3BPZmZzZXQgJiYgcHJldiAmJiB0b1JlbmRlckJs
b2NrRmxvdyhwcmV2KS0+aXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpKQotICAgICAgICBhZGRJbnRy
dWRpbmdGbG9hdHMocGFyZW50QmxvY2ssIHBhcmVudEJsb2NrLT5sb2dpY2FsTGVmdE9mZnNldEZv
ckNvbnRlbnQoKSwgbG9naWNhbFRvcE9mZnNldCk7CisgICAgaWYgKHBhcmVudEhhc0Zsb2F0cyB8
fCAocGFyZW50QmxvY2subG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9wT2Zm
c2V0ICYmIHByZXYgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcHJldikuaXNTZWxmQ29s
bGFwc2luZ0Jsb2NrKCkpKQorICAgICAgICBhZGRJbnRydWRpbmdGbG9hdHMoJnBhcmVudEJsb2Nr
LCBwYXJlbnRCbG9jay5sb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKSwgbG9naWNhbFRvcE9m
ZnNldCk7CiAgICAgCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IDA7CiAgICAg
aWYgKHByZXYpCiAgICAgICAgIGxvZ2ljYWxUb3BPZmZzZXQgLT0gdG9SZW5kZXJCb3gocHJldikt
PmxvZ2ljYWxUb3AoKTsKICAgICBlbHNlIHsKLSAgICAgICAgcHJldiA9IHBhcmVudEJsb2NrOwot
ICAgICAgICBsb2dpY2FsTGVmdE9mZnNldCArPSBwYXJlbnRCbG9jay0+bG9naWNhbExlZnRPZmZz
ZXRGb3JDb250ZW50KCk7CisgICAgICAgIHByZXYgPSAmcGFyZW50QmxvY2s7CisgICAgICAgIGxv
Z2ljYWxMZWZ0T2Zmc2V0ICs9IHBhcmVudEJsb2NrLmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVu
dCgpOwogICAgIH0KIAogICAgIC8vIEFkZCBvdmVyaGFuZ2luZyBmbG9hdHMgZnJvbSB0aGUgcHJl
dmlvdXMgUmVuZGVyQmxvY2ssIGJ1dCBvbmx5IGlmIGl0IGhhcyBhIGZsb2F0IHRoYXQgaW50cnVk
ZXMgaW50byBvdXIgc3BhY2UuICAgIAotICAgIFJlbmRlckJsb2NrRmxvdyogYmxvY2sgPSB0b1Jl
bmRlckJsb2NrRmxvdyhwcmV2KTsKLSAgICBpZiAoYmxvY2stPm1fZmxvYXRpbmdPYmplY3RzICYm
IGJsb2NrLT5sb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSA+IGxvZ2ljYWxUb3BPZmZzZXQpCi0g
ICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhibG9jaywgbG9naWNhbExlZnRPZmZzZXQsIGxvZ2lj
YWxUb3BPZmZzZXQpOworICAgIFJlbmRlckJsb2NrRmxvdyYgYmxvY2sgPSBkb3duY2FzdDxSZW5k
ZXJCbG9ja0Zsb3c+KCpwcmV2KTsKKyAgICBpZiAoYmxvY2subV9mbG9hdGluZ09iamVjdHMgJiYg
YmxvY2subG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9wT2Zmc2V0KQorICAg
ICAgICBhZGRJbnRydWRpbmdGbG9hdHMoJmJsb2NrLCBsb2dpY2FsTGVmdE9mZnNldCwgbG9naWNh
bFRvcE9mZnNldCk7CiAKICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICBMYXlv
dXRVbml0IGNoYW5nZUxvZ2ljYWxUb3AgPSBMYXlvdXRVbml0OjptYXgoKTsKQEAgLTY3OCw3ICs2
NzgsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZXJCb3gm
IGNoaWxkLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLAogICAgIHNldExvZ2ljYWxUb3BGb3JDaGls
ZChjaGlsZCwgbG9naWNhbFRvcEVzdGltYXRlLCBBcHBseUxheW91dERlbHRhKTsKICAgICBlc3Rp
bWF0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQoY2hpbGQpOwogCi0gICAgUmVuZGVyQmxvY2tGbG93
KiBjaGlsZEJsb2NrRmxvdyA9IGNoaWxkLmlzUmVuZGVyQmxvY2tGbG93KCkgPyB0b1JlbmRlckJs
b2NrRmxvdygmY2hpbGQpIDogbnVsbHB0cjsKKyAgICBSZW5kZXJCbG9ja0Zsb3cqIGNoaWxkQmxv
Y2tGbG93ID0gaXM8UmVuZGVyQmxvY2tGbG93PihjaGlsZCkgPyAmZG93bmNhc3Q8UmVuZGVyQmxv
Y2tGbG93PihjaGlsZCkgOiBudWxscHRyOwogICAgIGJvb2wgbWFya0Rlc2NlbmRhbnRzV2l0aEZs
b2F0cyA9IGZhbHNlOwogICAgIGlmIChsb2dpY2FsVG9wRXN0aW1hdGUgIT0gb2xkTG9naWNhbFRv
cCAmJiAhY2hpbGQuYXZvaWRzRmxvYXRzKCkgJiYgY2hpbGRCbG9ja0Zsb3cgJiYgY2hpbGRCbG9j
a0Zsb3ctPmNvbnRhaW5zRmxvYXRzKCkpCiAgICAgICAgIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9h
dHMgPSB0cnVlOwpAQCAtODI3LDcgKzgyNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1
c3RQb3NpdGlvbmVkQmxvY2soUmVuZGVyQm94JiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYKIExh
eW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjptYXJnaW5PZmZzZXRGb3JTZWxmQ29sbGFwc2luZ0Js
b2NrKCkKIHsKICAgICBBU1NFUlQoaXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpOwotICAgIFJlbmRl
ckJsb2NrRmxvdyogcGFyZW50QmxvY2sgPSB0b1JlbmRlckJsb2NrRmxvdyhwYXJlbnQoKSk7Cisg
ICAgUmVuZGVyQmxvY2tGbG93KiBwYXJlbnRCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxv
dz4ocGFyZW50KCkpOwogICAgIGlmIChwYXJlbnRCbG9jayAmJiBzdHlsZSgpLmNsZWFyKCkgJiYg
cGFyZW50QmxvY2stPmdldENsZWFyRGVsdGEoKnRoaXMsIGxvZ2ljYWxIZWlnaHQoKSkpCiAgICAg
ICAgIHJldHVybiBtYXJnaW5WYWx1ZXNGb3JDaGlsZCgqdGhpcykucG9zaXRpdmVNYXJnaW5CZWZv
cmUoKTsKICAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIFJlbmRl
ckJsb2NrRmxvdzo6TWFyZ2luVmFsdWVzIFJlbmRlckJsb2NrRmxvdzo6bWFyZ2luVmFsdWVzRm9y
Q2hpbGQoUmVuZGVyQm94JiBjCiAgICAgTGF5b3V0VW5pdCBiZWZvcmVNYXJnaW4gPSAwOwogICAg
IExheW91dFVuaXQgYWZ0ZXJNYXJnaW4gPSAwOwogCi0gICAgUmVuZGVyQmxvY2tGbG93KiBjaGls
ZFJlbmRlckJsb2NrID0gY2hpbGQuaXNSZW5kZXJCbG9ja0Zsb3coKSA/IHRvUmVuZGVyQmxvY2tG
bG93KCZjaGlsZCkgOiBudWxscHRyOworICAgIFJlbmRlckJsb2NrRmxvdyogY2hpbGRSZW5kZXJC
bG9jayA9IGlzPFJlbmRlckJsb2NrRmxvdz4oY2hpbGQpID8gJmRvd25jYXN0PFJlbmRlckJsb2Nr
Rmxvdz4oY2hpbGQpIDogbnVsbHB0cjsKICAgICAKICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIHRo
ZSBzYW1lIGRpcmVjdGlvbmFsaXR5IGFzIHdlIGRvLCB0aGVuIHdlIGNhbiBqdXN0IHJldHVybiBp
dHMKICAgICAvLyBtYXJnaW5zIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KQEAgLTEwMjMsOCArMTAy
Myw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojpjb2xsYXBzZU1hcmdpbnMoUmVuZGVy
Qm94JiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luCiAgICAgLy8gSWYgdGhlIGNoaWxkJ3MgcHJl
dmlvdXMgc2libGluZyBpcyBhIHNlbGYtY29sbGFwc2luZyBibG9jayB0aGF0IGNsZWFyZWQgYSBm
bG9hdCB0aGVuIGl0cyB0b3AgYm9yZGVyIGVkZ2UgaGFzIGJlZW4gc2V0IGF0IHRoZSBib3R0b20g
Ym9yZGVyIGVkZ2UKICAgICAvLyBvZiB0aGUgZmxvYXQuIFNpbmNlIHdlIHdhbnQgdG8gY29sbGFw
c2UgdGhlIGNoaWxkJ3MgdG9wIG1hcmdpbiB3aXRoIHRoZSBzZWxmLWNvbGxhcHNpbmcgYmxvY2sn
cyB0b3AgYW5kIGJvdHRvbSBtYXJnaW5zIHdlIG5lZWQgdG8gYWRqdXN0IG91ciBwYXJlbnQncyBo
ZWlnaHQgdG8gbWF0Y2ggdGhlIAogICAgIC8vIG1hcmdpbiB0b3Agb2YgdGhlIHNlbGYtY29sbGFw
c2luZyBibG9jay4gSWYgdGhlIHJlc3VsdGluZyBjb2xsYXBzZWQgbWFyZ2luIGxlYXZlcyB0aGUg
Y2hpbGQgc3RpbGwgaW50cnVkaW5nIGludG8gdGhlIGZsb2F0IHRoZW4gd2Ugd2lsbCB3YW50IHRv
IGNsZWFyIGl0LgotICAgIGlmICghbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZv
cmUoKSAmJiBwcmV2ICYmIHByZXYtPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgdG9SZW5kZXJCbG9j
a0Zsb3cocHJldiktPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpKSB7Ci0gICAgICAgIGNsZWFyYW5j
ZUZvclNlbGZDb2xsYXBzaW5nQmxvY2sgPSB0b1JlbmRlckJsb2NrRmxvdyhwcmV2KS0+bWFyZ2lu
T2Zmc2V0Rm9yU2VsZkNvbGxhcHNpbmdCbG9jaygpOworICAgIGlmICghbWFyZ2luSW5mby5jYW5D
b2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSAmJiBpczxSZW5kZXJCbG9ja0Zsb3c+KHByZXYpICYm
IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnByZXYpLmlzU2VsZkNvbGxhcHNpbmdCbG9jaygp
KSB7CisgICAgICAgIGNsZWFyYW5jZUZvclNlbGZDb2xsYXBzaW5nQmxvY2sgPSBkb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KCpwcmV2KS5tYXJnaW5PZmZzZXRGb3JTZWxmQ29sbGFwc2luZ0Jsb2Nr
KCk7CiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpIC0gY2xlYXJhbmNl
Rm9yU2VsZkNvbGxhcHNpbmdCbG9jayk7CiAgICAgfQogCkBAIC0xMDkxLDEwICsxMDkxLDEwIEBA
IExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94JiBj
aGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luCiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNh
bEhlaWdodCgpICsgKGxvZ2ljYWxUb3AgLSBvbGRMb2dpY2FsVG9wKSk7CiAgICAgfQogCi0gICAg
aWYgKHByZXYgJiYgcHJldi0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhcHJldi0+aXNGbG9hdGlu
Z09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4o
cHJldikgJiYgIXByZXYtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAg
ICAgICAvLyBJZiB8Y2hpbGR8IGlzIGEgc2VsZi1jb2xsYXBzaW5nIGJsb2NrIGl0IG1heSBoYXZl
IGNvbGxhcHNlZCBpbnRvIGEgcHJldmlvdXMgc2libGluZyBhbmQgYWx0aG91Z2ggaXQgaGFzbid0
IHJlZHVjZWQgdGhlIGhlaWdodCBvZiB0aGUgcGFyZW50IHlldAogICAgICAgICAvLyBhbnkgZmxv
YXRzIGZyb20gdGhlIHBhcmVudCB3aWxsIG5vdyBvdmVyaGFuZy4KLSAgICAgICAgUmVuZGVyQmxv
Y2tGbG93JiBibG9jayA9IHRvUmVuZGVyQmxvY2tGbG93KCpwcmV2KTsKKyAgICAgICAgUmVuZGVy
QmxvY2tGbG93JiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnByZXYpOwogICAg
ICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAg
ICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbFRvcCk7CiAgICAgICAgIGlmIChibG9jay5jb250
YWluc0Zsb2F0cygpICYmICFibG9jay5hdm9pZHNGbG9hdHMoKSAmJiAoYmxvY2subG9naWNhbFRv
cCgpICsgYmxvY2subG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkpID4gbG9naWNhbFRvcCkKQEAg
LTExOTUsMTAgKzExOTUsMTAgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6Om1hcmdpbkJlZm9yZUVz
dGltYXRlRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0VW5pdCYKICAgICBwb3NpdGl2
ZU1hcmdpbkJlZm9yZSA9IHN0ZDo6bWF4KHBvc2l0aXZlTWFyZ2luQmVmb3JlLCBiZWZvcmVDaGls
ZE1hcmdpbik7CiAgICAgbmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBzdGQ6Om1heChuZWdhdGl2ZU1h
cmdpbkJlZm9yZSwgLWJlZm9yZUNoaWxkTWFyZ2luKTsKIAotICAgIGlmICghY2hpbGQuaXNSZW5k
ZXJCbG9ja0Zsb3coKSkKKyAgICBpZiAoIWlzPFJlbmRlckJsb2NrRmxvdz4oY2hpbGQpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgUmVuZGVyQmxvY2tGbG93JiBjaGlsZEJsb2NrID0gdG9S
ZW5kZXJCbG9ja0Zsb3coY2hpbGQpOworICAgIFJlbmRlckJsb2NrRmxvdyYgY2hpbGRCbG9jayA9
IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oY2hpbGQpOwogICAgIGlmIChjaGlsZEJsb2NrLmNo
aWxkcmVuSW5saW5lKCkgfHwgY2hpbGRCbG9jay5pc1dyaXRpbmdNb2RlUm9vdCgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTEzMTQsOCArMTMxNCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpo
YW5kbGVBZnRlclNpZGVPZkJsb2NrKExheW91dFVuaXQgYmVmb3JlU2lkZSwgTGF5b3V0VW5pdCBh
CiAgICAgLy8gYm90dG9tIGVkZ2Ugb2YgdGhlIGZsb2F0IHRoYXQgdGhlIGNoaWxkIGNsZWFycy4g
VGhlIGNvcnJlY3QgdmVydGljYWwgcG9zaXRpb24gZm9yIHRoZSBtYXJnaW4tY29sbGFwc2luZyB3
ZSB3YW50CiAgICAgLy8gdG8gcGVyZm9ybSBub3cgaXMgYXQgdGhlIGNoaWxkJ3MgbWFyZ2luLXRv
cCAtIHNvIGFkanVzdCBvdXIgaGVpZ2h0IHRvIHRoYXQgcG9zaXRpb24uCiAgICAgUmVuZGVyT2Jq
ZWN0KiBsYXN0QmxvY2sgPSBsYXN0Q2hpbGQoKTsKLSAgICBpZiAobGFzdEJsb2NrICYmIGxhc3RC
bG9jay0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiB0b1JlbmRlckJsb2NrRmxvdyhsYXN0QmxvY2sp
LT5pc1NlbGZDb2xsYXBzaW5nQmxvY2soKSkKLSAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb2dp
Y2FsSGVpZ2h0KCkgLSB0b1JlbmRlckJsb2NrRmxvdyhsYXN0QmxvY2spLT5tYXJnaW5PZmZzZXRG
b3JTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpOworICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KGxh
c3RCbG9jaykgJiYgZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqbGFzdEJsb2NrKS5pc1NlbGZD
b2xsYXBzaW5nQmxvY2soKSkKKyAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0
KCkgLSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpsYXN0QmxvY2spLm1hcmdpbk9mZnNldEZv
clNlbGZDb2xsYXBzaW5nQmxvY2soKSk7CiAKICAgICAvLyBJZiB3ZSBjYW4ndCBjb2xsYXBzZSB3
aXRoIGNoaWxkcmVuIHRoZW4gZ28gYWhlYWQgYW5kIGFkZCBpbiB0aGUgYm90dG9tIG1hcmdpbi4K
ICAgICBpZiAoIW1hcmdpbkluZm8uZGlzY2FyZE1hcmdpbigpICYmICghbWFyZ2luSW5mby5jYW5D
b2xsYXBzZVdpdGhNYXJnaW5BZnRlcigpICYmICFtYXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aE1h
cmdpbkJlZm9yZSgpCkBAIC0xNDAzLDkgKzE0MDMsOSBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6
bXVzdERpc2NhcmRNYXJnaW5CZWZvcmVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBj
bwogewogICAgIEFTU0VSVCghY2hpbGQuc2VsZk5lZWRzTGF5b3V0KCkpOwogICAgIGlmICghY2hp
bGQuaXNXcml0aW5nTW9kZVJvb3QoKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLmlzUmVuZGVyQmxv
Y2tGbG93KCkgPyB0b1JlbmRlckJsb2NrRmxvdyhjaGlsZCkubXVzdERpc2NhcmRNYXJnaW5CZWZv
cmUoKSA6IChjaGlsZC5zdHlsZSgpLm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkgPT0gTURJU0NBUkQp
OworICAgICAgICByZXR1cm4gaXM8UmVuZGVyQmxvY2tGbG93PihjaGlsZCkgPyBkb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKS5tdXN0RGlzY2FyZE1hcmdpbkJlZm9yZSgpIDogKGNoaWxk
LnN0eWxlKCkubWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBNRElTQ0FSRCk7CiAgICAgaWYgKGNo
aWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKLSAgICAgICAgcmV0dXJuIGNoaWxkLmlzUmVuZGVyQmxvY2tGbG93KCkgPyB0b1JlbmRlckJs
b2NrRmxvdyhjaGlsZCkubXVzdERpc2NhcmRNYXJnaW5BZnRlcigpIDogKGNoaWxkLnN0eWxlKCku
bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpID09IE1ESVNDQVJEKTsKKyAgICAgICAgcmV0dXJuIGlzPFJl
bmRlckJsb2NrRmxvdz4oY2hpbGQpID8gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihjaGlsZCku
bXVzdERpc2NhcmRNYXJnaW5BZnRlcigpIDogKGNoaWxkLnN0eWxlKCkubWFyZ2luQWZ0ZXJDb2xs
YXBzZSgpID09IE1ESVNDQVJEKTsKIAogICAgIC8vIEZJWE1FOiBXZSByZXR1cm4gZmFsc2UgaGVy
ZSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgZ2VvbWV0cmljYWxseSBjb21wbGV0
ZS4gV2UgaGF2ZSB2YWx1ZXMgb25seSBmb3IgYmVmb3JlL2FmdGVyLCBub3Qgc3RhcnQvZW5kLgog
ICAgIC8vIEluIGNhc2UgdGhlIGJveGVzIGFyZSBwZXJwZW5kaWN1bGFyIHdlIGFzc3VtZSB0aGUg
cHJvcGVydHkgaXMgbm90IHNwZWNpZmllZC4KQEAgLTE0MTYsOSArMTQxNiw5IEBAIGJvb2wgUmVu
ZGVyQmxvY2tGbG93OjptdXN0RGlzY2FyZE1hcmdpbkFmdGVyRm9yQ2hpbGQoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkgY29uCiB7CiAgICAgQVNTRVJUKCFjaGlsZC5zZWxmTmVlZHNMYXlvdXQoKSk7
CiAgICAgaWYgKCFjaGlsZC5pc1dyaXRpbmdNb2RlUm9vdCgpKQotICAgICAgICByZXR1cm4gY2hp
bGQuaXNSZW5kZXJCbG9ja0Zsb3coKSA/IHRvUmVuZGVyQmxvY2tGbG93KGNoaWxkKS5tdXN0RGlz
Y2FyZE1hcmdpbkFmdGVyKCkgOiAoY2hpbGQuc3R5bGUoKS5tYXJnaW5BZnRlckNvbGxhcHNlKCkg
PT0gTURJU0NBUkQpOworICAgICAgICByZXR1cm4gaXM8UmVuZGVyQmxvY2tGbG93PihjaGlsZCkg
PyBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKS5tdXN0RGlzY2FyZE1hcmdpbkFmdGVy
KCkgOiAoY2hpbGQuc3R5bGUoKS5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTURJU0NBUkQpOwog
ICAgIGlmIChjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBjaGlsZC5pc1JlbmRlckJsb2NrRmxvdygpID8g
dG9SZW5kZXJCbG9ja0Zsb3coY2hpbGQpLm11c3REaXNjYXJkTWFyZ2luQmVmb3JlKCkgOiAoY2hp
bGQuc3R5bGUoKS5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1ESVNDQVJEKTsKKyAgICAgICAg
cmV0dXJuIGlzPFJlbmRlckJsb2NrRmxvdz4oY2hpbGQpID8gZG93bmNhc3Q8UmVuZGVyQmxvY2tG
bG93PihjaGlsZCkubXVzdERpc2NhcmRNYXJnaW5CZWZvcmUoKSA6IChjaGlsZC5zdHlsZSgpLm1h
cmdpbkJlZm9yZUNvbGxhcHNlKCkgPT0gTURJU0NBUkQpOwogCiAgICAgLy8gRklYTUU6IFNlZSB8
bXVzdERpc2NhcmRNYXJnaW5CZWZvcmVGb3JDaGlsZHwgYWJvdmUuCiAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTU0MCw3ICsxNTQwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVz
dEJsb2NrQ2hpbGRGb3JQYWdpbmF0aW9uKExheW91dFVuaXQgbG9naWNhbFRvcEEKICAgICAgICAg
CiAgICAgICAgIGlmIChjaGlsZFJlbmRlckJsb2NrKSB7CiAgICAgICAgICAgICBpZiAoIWNoaWxk
LmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkUmVuZGVyQmxvY2stPmNvbnRhaW5zRmxvYXRzKCkpCi0g
ICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9ja0Zsb3coY2hpbGRSZW5kZXJCbG9jayktPm1hcmtB
bGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpjaGlsZFJlbmRlckJsb2NrKS5tYXJrQWxsRGVzY2VuZGFu
dHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkLm5lZWRzTGF5
b3V0KCkpCiAgICAgICAgICAgICAgICAgY2hpbGQubWFya0ZvclBhZ2luYXRpb25SZWxheW91dElm
TmVlZGVkKCk7CiAgICAgICAgIH0KQEAgLTIwNTUsMTEgKzIwNTUsMTEgQEAgdm9pZCBSZW5kZXJC
bG9ja0Zsb3c6Om1vdmVGbG9hdHNUbyhSZW5kZXJCbG9ja0Zsb3cqIHRvQmxvY2tGbG93KQogICAg
IH0KIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6Om1vdmVBbGxDaGlsZHJlbkluY2x1ZGluZ0Zs
b2F0c1RvKFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBib29sIGZ1bGxSZW1vdmVJbnNlcnQpCit2b2lk
IFJlbmRlckJsb2NrRmxvdzo6bW92ZUFsbENoaWxkcmVuSW5jbHVkaW5nRmxvYXRzVG8oUmVuZGVy
QmxvY2smIHRvQmxvY2ssIGJvb2wgZnVsbFJlbW92ZUluc2VydCkKIHsKLSAgICBSZW5kZXJCbG9j
a0Zsb3cqIHRvQmxvY2tGbG93ID0gdG9SZW5kZXJCbG9ja0Zsb3codG9CbG9jayk7Ci0gICAgbW92
ZUFsbENoaWxkcmVuVG8odG9CbG9ja0Zsb3csIGZ1bGxSZW1vdmVJbnNlcnQpOwotICAgIG1vdmVG
bG9hdHNUbyh0b0Jsb2NrRmxvdyk7CisgICAgUmVuZGVyQmxvY2tGbG93JiB0b0Jsb2NrRmxvdyA9
IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4odG9CbG9jayk7CisgICAgbW92ZUFsbENoaWxkcmVu
VG8oJnRvQmxvY2tGbG93LCBmdWxsUmVtb3ZlSW5zZXJ0KTsKKyAgICBtb3ZlRmxvYXRzVG8oJnRv
QmxvY2tGbG93KTsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUZs
b2F0cygpCkBAIC0yNzA5LDEyICsyNzA5LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjptYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlCiAg
ICAgZm9yIChhdXRvJiBibG9jayA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckJsb2NrPigqdGhpcykp
IHsKICAgICAgICAgaWYgKCFmbG9hdFRvUmVtb3ZlICYmIGJsb2NrLmlzRmxvYXRpbmdPck91dE9m
Rmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWJs
b2NrLmlzUmVuZGVyQmxvY2tGbG93KCkpIHsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zs
b3c+KGJsb2NrKSkgewogICAgICAgICAgICAgaWYgKGJsb2NrLnNocmlua1RvQXZvaWRGbG9hdHMo
KSAmJiBibG9jay5ldmVySGFkTGF5b3V0KCkpCiAgICAgICAgICAgICAgICAgYmxvY2suc2V0Q2hp
bGROZWVkc0xheW91dChtYXJrUGFyZW50cyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBhdXRvJiBibG9ja0Zsb3cgPSB0b1JlbmRlckJsb2NrRmxvdyhibG9jayk7
CisgICAgICAgIGF1dG8mIGJsb2NrRmxvdyA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oYmxv
Y2spOwogICAgICAgICBpZiAoKGZsb2F0VG9SZW1vdmUgPyBibG9ja0Zsb3cuY29udGFpbnNGbG9h
dCgqZmxvYXRUb1JlbW92ZSkgOiBibG9ja0Zsb3cuY29udGFpbnNGbG9hdHMoKSkgfHwgYmxvY2tG
bG93LnNocmlua1RvQXZvaWRGbG9hdHMoKSkKICAgICAgICAgICAgIGJsb2NrRmxvdy5tYXJrQWxs
RGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KGZsb2F0VG9SZW1vdmUsIGluTGF5b3V0KTsK
ICAgICB9CkBAIC0yODg1LDggKzI4ODUsOCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRqdXN0
Rm9yQm9yZGVyRml0KExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCYgbGVmdCwgTGF5b3V0VQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGZvciAoUmVuZGVyQm94KiBvYmogPSBmaXJzdENoaWxkQm94KCk7
IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgICAgICBpZiAoIW9i
ai0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG9iai0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhb2JqLT5oYXNPdmVyZmxvd0NsaXAoKSkK
LSAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9ja0Zsb3cob2JqKS0+YWRqdXN0Rm9yQm9y
ZGVyRml0KHggKyBvYmotPngoKSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIGlmIChp
czxSZW5kZXJCbG9ja0Zsb3c+KCpvYmopICYmICFvYmotPmhhc092ZXJmbG93Q2xpcCgpKQorICAg
ICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpvYmopLmFkanVzdEZv
ckJvcmRlckZpdCh4ICsgb2JqLT54KCksIGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgICAgICBl
bHNlIGlmIChvYmotPnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIGEgcmVwbGFjZWQgZWxlbWVudCBvciBzb21lIGtpbmQgb2Yg
bm9uLWJsb2NrLWZsb3cgb2JqZWN0LgogICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gc3RkOjpt
aW4obGVmdCwgeCArIG9iai0+eCgpKTsKQEAgLTMyMDksMTAgKzMyMDksMTAgQEAgc3RhdGljIGlu
dCBnZXRIZWlnaHRGb3JMaW5lQ291bnQoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9jaywgaW50
IGxpbmVDb3VudCwgYm8KICAgICAgICAgICAgICAgICByZXR1cm4gYm94LT5saW5lQm90dG9tKCkg
KyAoaW5jbHVkZUJvdHRvbSA/IChibG9jay5ib3JkZXJCb3R0b20oKSArIGJsb2NrLnBhZGRpbmdC
b3R0b20oKSkgOiBMYXlvdXRVbml0KCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgUmVuZGVyQm94KiBub3JtYWxGbG93Q2hpbGRXaXRob3V0TGluZXMgPSAwOworICAgICAgICBS
ZW5kZXJCb3gqIG5vcm1hbEZsb3dDaGlsZFdpdGhvdXRMaW5lcyA9IG51bGxwdHI7CiAgICAgICAg
IGZvciAoYXV0byBvYmogPSBibG9jay5maXJzdENoaWxkQm94KCk7IG9iajsgb2JqID0gb2JqLT5u
ZXh0U2libGluZ0JveCgpKSB7Ci0gICAgICAgICAgICBpZiAob2JqLT5pc1JlbmRlckJsb2NrRmxv
dygpICYmIHNob3VsZENoZWNrTGluZXModG9SZW5kZXJCbG9ja0Zsb3coKm9iaikpKSB7Ci0gICAg
ICAgICAgICAgICAgaW50IHJlc3VsdCA9IGdldEhlaWdodEZvckxpbmVDb3VudCh0b1JlbmRlckJs
b2NrRmxvdygqb2JqKSwgbGluZUNvdW50LCBmYWxzZSwgY291bnQpOworICAgICAgICAgICAgaWYg
KGlzPFJlbmRlckJsb2NrRmxvdz4oKm9iaikgJiYgc2hvdWxkQ2hlY2tMaW5lcyhkb3duY2FzdDxS
ZW5kZXJCbG9ja0Zsb3c+KCpvYmopKSkgeworICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBn
ZXRIZWlnaHRGb3JMaW5lQ291bnQoZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93Pigqb2JqKSwgbGlu
ZUNvdW50LCBmYWxzZSwgY291bnQpOwogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gLTEp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBvYmotPnkoKSArIChpbmNsdWRl
Qm90dG9tID8gKGJsb2NrLmJvcmRlckJvdHRvbSgpICsgYmxvY2sucGFkZGluZ0JvdHRvbSgpKSA6
IExheW91dFVuaXQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFvYmotPmlzRmxvYXRpbmdP
ck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuaAppbmRleCAzYWFmYWUyY2Y0N2Y4MWU3YzAwYjE4YmQ3ZTk3YjlhM2ViZWJhYzJi
Li40ODk4YTRkY2JkOWI1NDE1MWFjNzNmYjRlY2JkNmRiNDRkYTA0ZDlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC00NzEsNyArNDcxLDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRJbmxpbmVDaGlsZHJlbihQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwYWludEZsb2F0
cyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wgcHJlc2VydmVQaGFzZSA9IGZh
bHNlKSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBtb3ZlQWxsQ2hpbGRyZW5JbmNsdWRp
bmdGbG9hdHNUbyhSZW5kZXJCbG9jayogdG9CbG9jaywgYm9vbCBmdWxsUmVtb3ZlSW5zZXJ0KSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZUFsbENoaWxkcmVuSW5jbHVkaW5nRmxvYXRz
VG8oUmVuZGVyQmxvY2smIHRvQmxvY2ssIGJvb2wgZnVsbFJlbW92ZUluc2VydCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxs
RGVzY2VuZGFudHMpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0Rmxv
YXRpbmdPYmplY3RzKFJlbmRlckJsb2NrJiwgY29uc3QgUGFpbnRJbmZvKiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBjb25zdCBMYXlvdXRTaXplJikgb3ZlcnJpZGU7CiAKQEAgLTYyMSwxMSArNjIxLDkg
QEAgcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBMaW5lV2lkdGg7IC8vIE5lZWRzIHRvIGtu
b3cgRmxvYXRpbmdPYmplY3QKIH07CiAKLVJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJC
bG9ja0Zsb3csIGlzUmVuZGVyQmxvY2tGbG93KCkpCi0KIGlubGluZSBib29sIFJlbmRlckVsZW1l
bnQ6OmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSBjb25zdAogewotICAgIHJl
dHVybiBpc1JlbmRlckJsb2NrRmxvdygpICYmIHRvUmVuZGVyQmxvY2tGbG93KHRoaXMpLT5yZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAgIHJldHVybiBpczxSZW5kZXJCbG9ja0Zsb3c+KCp0
aGlzKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzKS5yZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCgpOwogfQogCiBpbmxpbmUgY29uc3QgU2ltcGxlTGluZUxheW91dDo6TGF5b3V0KiBS
ZW5kZXJCbG9ja0Zsb3c6OnNpbXBsZUxpbmVMYXlvdXQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCAxYTM5ZGU3
NzRhNDNiOGFjM2ZjN2EyMWU2ZjAzOWEwY2JjMGU2ZDE1Li5mYWQ5NDQ2YWFkN2RiMjc2MjViN2Ew
N2UyOTMzN2M0ZTBiNTg3ODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTg4LDE2ICsxODgsMTYgQEAgSW5saW5lRmxv
d0JveCogUmVuZGVyQmxvY2tGbG93OjpjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiBvYmos
IGNvbnN0IExpbmVJbmYKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhbiB1bmNvbnN0cnVjdGVkIGxp
bmUgYm94IGZvciB0aGlzIG9iamVjdCB0aGF0IGlzIGFsc28KICAgICAvLyB0aGUgbGFzdCBpdGVt
IG9uIHRoZSBsaW5lLgogICAgIHVuc2lnbmVkIGxpbmVEZXB0aCA9IDE7Ci0gICAgSW5saW5lRmxv
d0JveCogcGFyZW50Qm94ID0gMDsKLSAgICBJbmxpbmVGbG93Qm94KiByZXN1bHQgPSAwOworICAg
IElubGluZUZsb3dCb3gqIHBhcmVudEJveCA9IG51bGxwdHI7CisgICAgSW5saW5lRmxvd0JveCog
cmVzdWx0ID0gbnVsbHB0cjsKICAgICBib29sIGhhc0RlZmF1bHRMaW5lQm94Q29udGFpbiA9IHN0
eWxlKCkubGluZUJveENvbnRhaW4oKSA9PSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVCb3hDb250
YWluKCk7CiAgICAgZG8gewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihvYmotPmlzUmVuZGVySW5saW5lKCkgfHwgb2JqID09IHRoaXMpOworICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxSZW5kZXJJbmxpbmU+KCpvYmopIHx8IG9iaiA9
PSB0aGlzKTsKIAotICAgICAgICBSZW5kZXJJbmxpbmUqIGlubGluZUZsb3cgPSAob2JqICE9IHRo
aXMpID8gdG9SZW5kZXJJbmxpbmUob2JqKSA6IDA7CisgICAgICAgIFJlbmRlcklubGluZSogaW5s
aW5lRmxvdyA9IG9iaiAhPSB0aGlzID8gZG93bmNhc3Q8UmVuZGVySW5saW5lPihvYmopIDogbnVs
bHB0cjsKIAogICAgICAgICAvLyBHZXQgdGhlIGxhc3QgYm94IHdlIG1hZGUgZm9yIHRoaXMgcmVu
ZGVyIG9iamVjdC4KLSAgICAgICAgcGFyZW50Qm94ID0gaW5saW5lRmxvdyA/IGlubGluZUZsb3ct
Pmxhc3RMaW5lQm94KCkgOiB0b1JlbmRlckJsb2NrRmxvdyhvYmopLT5sYXN0Um9vdEJveCgpOwor
ICAgICAgICBwYXJlbnRCb3ggPSBpbmxpbmVGbG93ID8gaW5saW5lRmxvdy0+bGFzdExpbmVCb3go
KSA6IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKm9iaikubGFzdFJvb3RCb3goKTsKIAogICAg
ICAgICAvLyBJZiB0aGlzIGJveCBvciBpdHMgYW5jZXN0b3IgaXMgY29uc3RydWN0ZWQgdGhlbiBp
dCBpcyBmcm9tIGEgcHJldmlvdXMgbGluZSwgYW5kIHdlIG5lZWQKICAgICAgICAgLy8gdG8gbWFr
ZSBhIG5ldyBib3ggZm9yIG91ciBsaW5lLiAgSWYgdGhpcyBib3ggb3IgaXRzIGFuY2VzdG9yIGlz
IHVuY29uc3RydWN0ZWQgYnV0IGl0IGhhcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAppbmRleCA2OTIwODY3NzkxMGZmMzY1YmNkZDlkMjhhNGVhZGVkODQyNzc3MWNjLi4wZDYx
OTkzNjEyZmMzYWYyZmU2YmYwNGQ3OWYxOGU2YjgyOTA2MDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNDA4LDggKzQwOCw4IEBAIHZvaWQgUmVuZGVyQm94Ojpz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlCiAgICAgICAgIGlmICh2aWV3U3R5bGVDaGFuZ2VkICYmIHZpZXcoKS5tdWx0aUNvbHVt
bkZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgIHZpZXcoKS51cGRhdGVTdHlsZXNGb3JDb2x1bW5D
aGlsZHJlbigpOwogICAgICAgICAKLSAgICAgICAgaWYgKHJvb3RTdHlsZUNoYW5nZWQgJiYgcm9v
dFJlbmRlcmVyICYmIHJvb3RSZW5kZXJlci0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiB0b1JlbmRl
ckJsb2NrRmxvdyhyb290UmVuZGVyZXIpLT5tdWx0aUNvbHVtbkZsb3dUaHJlYWQoKSkKLSAgICAg
ICAgICAgIHRvUmVuZGVyQmxvY2tGbG93KHJvb3RSZW5kZXJlciktPnVwZGF0ZVN0eWxlc0ZvckNv
bHVtbkNoaWxkcmVuKCk7CisgICAgICAgIGlmIChyb290U3R5bGVDaGFuZ2VkICYmIGlzPFJlbmRl
ckJsb2NrRmxvdz4ocm9vdFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpy
b290UmVuZGVyZXIpLm11bHRpQ29sdW1uRmxvd1RocmVhZCgpKQorICAgICAgICAgICAgZG93bmNh
c3Q8UmVuZGVyQmxvY2tGbG93Pigqcm9vdFJlbmRlcmVyKS51cGRhdGVTdHlsZXNGb3JDb2x1bW5D
aGlsZHJlbigpOwogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggNzNmM2Vl
NDVhZDRhMDI5OTBkNDgxMzNkZDkzY2U4MDhjZTM3YmM2Zi4uNjNmNzljNmRlN2E0YjhkNjllNWQ5
NGI4OWRkY2Y1ZDQ2NGEzMjVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02MTEsMTEgKzYxMSwxMSBAQCB2b2lkIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludE1hc2tGb3JUZXh0RmlsbEJveChJbWFnZUJ1ZmZlciogbWFz
a0ltYWdlLCBjb25zdAogICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gYm94
LT5yb290KCk7CiAgICAgICAgIGJveC0+cGFpbnQoaW5mbywgTGF5b3V0UG9pbnQoc2Nyb2xsZWRQ
YWludFJlY3QueCgpIC0gYm94LT54KCksIHNjcm9sbGVkUGFpbnRSZWN0LnkoKSAtIGJveC0+eSgp
KSwgcm9vdEJveC5saW5lVG9wKCksIHJvb3RCb3gubGluZUJvdHRvbSgpKTsKICAgICB9IGVsc2Ug
aWYgKGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkgewotICAgICAgICBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCogcmVnaW9uID0gdG9SZW5kZXJCbG9ja0Zsb3codGhpcyktPnJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAgICAgIGlmIChyZWdpb24tPmlzVmFsaWQoKSkK
LSAgICAgICAgICAgIHJlZ2lvbi0+Zmxvd1RocmVhZCgpLT5sYXllcigpLT5wYWludE5hbWVkRmxv
d1RocmVhZEluc2lkZVJlZ2lvbihtYXNrSW1hZ2VDb250ZXh0LCByZWdpb24sIG1hc2tSZWN0LCBt
YXNrUmVjdC5sb2NhdGlvbigpLCBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQsIFJlbmRlckxh
eWVyOjpQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKKyAgICAgICAgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQmIHJlZ2lvbiA9ICpkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0aGlzKS5y
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAgICAgICBpZiAocmVnaW9uLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgIHJlZ2lvbi5mbG93VGhyZWFkKCktPmxheWVyKCktPnBhaW50TmFtZWRGbG93
VGhyZWFkSW5zaWRlUmVnaW9uKG1hc2tJbWFnZUNvbnRleHQsICZyZWdpb24sIG1hc2tSZWN0LCBt
YXNrUmVjdC5sb2NhdGlvbigpLCBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQsIFJlbmRlckxh
eWVyOjpQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBMYXlvdXRTaXplIGxvY2FsT2Zmc2V0ID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT5s
b2NhdGlvbk9mZnNldCgpIDogTGF5b3V0U2l6ZSgpOworICAgICAgICBMYXlvdXRTaXplIGxvY2Fs
T2Zmc2V0ID0gaXM8UmVuZGVyQm94PigqdGhpcykgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCp0aGlz
KS5sb2NhdGlvbk9mZnNldCgpIDogTGF5b3V0U2l6ZSgpOwogICAgICAgICBwYWludChpbmZvLCBz
Y3JvbGxlZFBhaW50UmVjdC5sb2NhdGlvbigpIC0gbG9jYWxPZmZzZXQpOwogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGli
bGVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveC5jcHAKaW5kZXggNzYwNmFkOTA3ZGY2M2Q3YThmNTA5YTMzNGY4YjMxMGU5NzQ3MzBh
NC4uMDE0NTViYjZkMjExNDhjY2ZiMWUxM2QwNTc1NjFjNDFjMjZmZTM5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJv
eC5jcHAKQEAgLTk0MiwxOCArOTQyLDE4IEBAIHZvaWQgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxl
Qm94OjphcHBseUxpbmVDbGFtcChGbGV4Qm94SXRlcmF0b3ImIGl0ZXJhdG9yLCBib29sCiAKICAg
ICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVTaXplKCk7CiAgICAgICAgIGlmIChyZWxheW91dENo
aWxkcmVuIHx8IChjaGlsZC0+aXNSZXBsYWNlZCgpICYmIChjaGlsZC0+c3R5bGUoKS53aWR0aCgp
LmlzUGVyY2VudCgpIHx8IGNoaWxkLT5zdHlsZSgpLmhlaWdodCgpLmlzUGVyY2VudCgpKSkKLSAg
ICAgICAgICAgIHx8IChjaGlsZC0+c3R5bGUoKS5oZWlnaHQoKS5pc0F1dG8oKSAmJiBjaGlsZC0+
aXNSZW5kZXJCbG9ja0Zsb3coKSkpIHsKKyAgICAgICAgICAgIHx8IChjaGlsZC0+c3R5bGUoKS5o
ZWlnaHQoKS5pc0F1dG8oKSAmJiBpczxSZW5kZXJCbG9ja0Zsb3c+KCpjaGlsZCkpKSB7CiAgICAg
ICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogCiAgICAg
ICAgICAgICAvLyBEaXJ0eSBhbGwgdGhlIHBvc2l0aW9uZWQgb2JqZWN0cy4KLSAgICAgICAgICAg
IGlmIChjaGlsZC0+aXNSZW5kZXJCbG9ja0Zsb3coKSkgewotICAgICAgICAgICAgICAgIHRvUmVu
ZGVyQmxvY2tGbG93KGNoaWxkKS0+bWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCk7Ci0g
ICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9ja0Zsb3coY2hpbGQpLT5jbGVhclRydW5jYXRpb24o
KTsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpjaGlsZCkpIHsKKyAgICAg
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpjaGlsZCkubWFya1Bvc2l0aW9u
ZWRPYmplY3RzRm9yTGF5b3V0KCk7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxv
Y2tGbG93PigqY2hpbGQpLmNsZWFyVHJ1bmNhdGlvbigpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICBpZiAoY2hpbGQt
PnN0eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgY2hpbGQtPmlzUmVuZGVyQmxvY2tGbG93KCkp
Ci0gICAgICAgICAgICBtYXhMaW5lQ291bnQgPSBzdGQ6Om1heChtYXhMaW5lQ291bnQsIHRvUmVu
ZGVyQmxvY2tGbG93KGNoaWxkKS0+bGluZUNvdW50KCkpOworICAgICAgICBpZiAoY2hpbGQtPnN0
eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgaXM8UmVuZGVyQmxvY2tGbG93PigqY2hpbGQpKQor
ICAgICAgICAgICAgbWF4TGluZUNvdW50ID0gc3RkOjptYXgobWF4TGluZUNvdW50LCBkb3duY2Fz
dDxSZW5kZXJCbG9ja0Zsb3c+KCpjaGlsZCkubGluZUNvdW50KCkpOwogICAgIH0KIAogICAgIC8v
IEdldCB0aGUgbnVtYmVyIG9mIGxpbmVzIGFuZCB0aGVuIGFsdGVyIGFsbCBibG9jayBmbG93IGNo
aWxkcmVuIHdpdGggYXV0byBoZWlnaHQgdG8gdXNlIHRoZQpAQCAtOTY0LDE1ICs5NjQsMTUgQEAg
dm9pZCBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OmFwcGx5TGluZUNsYW1wKEZsZXhCb3hJ
dGVyYXRvciYgaXRlcmF0b3IsIGJvb2wKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChSZW5k
ZXJCb3gqIGNoaWxkID0gaXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gaXRlcmF0b3Iu
bmV4dCgpKSB7Ci0gICAgICAgIGlmIChjaGlsZERvZXNOb3RBZmZlY3RXaWR0aE9yRmxleGluZyhj
aGlsZCkgfHwgIWNoaWxkLT5zdHlsZSgpLmhlaWdodCgpLmlzQXV0bygpIHx8ICFjaGlsZC0+aXNS
ZW5kZXJCbG9ja0Zsb3coKSkKKyAgICAgICAgaWYgKGNoaWxkRG9lc05vdEFmZmVjdFdpZHRoT3JG
bGV4aW5nKGNoaWxkKSB8fCAhY2hpbGQtPnN0eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCkgfHwgIWlz
PFJlbmRlckJsb2NrRmxvdz4oKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIFJlbmRlckJsb2NrRmxvdyogYmxvY2tDaGlsZCA9IHRvUmVuZGVyQmxvY2tGbG93KGNoaWxk
KTsKLSAgICAgICAgaW50IGxpbmVDb3VudCA9IGJsb2NrQ2hpbGQtPmxpbmVDb3VudCgpOworICAg
ICAgICBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrQ2hpbGQgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zs
b3c+KCpjaGlsZCk7CisgICAgICAgIGludCBsaW5lQ291bnQgPSBibG9ja0NoaWxkLmxpbmVDb3Vu
dCgpOwogICAgICAgICBpZiAobGluZUNvdW50IDw9IG51bVZpc2libGVMaW5lcykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIExheW91dFVuaXQgbmV3SGVpZ2h0ID0gYmxvY2tDaGls
ZC0+aGVpZ2h0Rm9yTGluZUNvdW50KG51bVZpc2libGVMaW5lcyk7CisgICAgICAgIExheW91dFVu
aXQgbmV3SGVpZ2h0ID0gYmxvY2tDaGlsZC5oZWlnaHRGb3JMaW5lQ291bnQobnVtVmlzaWJsZUxp
bmVzKTsKICAgICAgICAgaWYgKG5ld0hlaWdodCA9PSBjaGlsZC0+aGVpZ2h0KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIApAQCAtOTg1LDExICs5ODUsMTEgQEAgdm9pZCBSZW5kZXJEZXByZWNh
dGVkRmxleGlibGVCb3g6OmFwcGx5TGluZUNsYW1wKEZsZXhCb3hJdGVyYXRvciYgaXRlcmF0b3Is
IGJvb2wKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIEdldCB0aGUgbGFzdCBs
aW5lCi0gICAgICAgIFJvb3RJbmxpbmVCb3gqIGxhc3RMaW5lID0gYmxvY2tDaGlsZC0+bGluZUF0
SW5kZXgobGluZUNvdW50IC0gMSk7CisgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxhc3RMaW5lID0g
YmxvY2tDaGlsZC5saW5lQXRJbmRleChsaW5lQ291bnQgLSAxKTsKICAgICAgICAgaWYgKCFsYXN0
TGluZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJvb3RJbmxpbmVCb3gqIGxh
c3RWaXNpYmxlTGluZSA9IGJsb2NrQ2hpbGQtPmxpbmVBdEluZGV4KG51bVZpc2libGVMaW5lcyAt
IDEpOworICAgICAgICBSb290SW5saW5lQm94KiBsYXN0VmlzaWJsZUxpbmUgPSBibG9ja0NoaWxk
LmxpbmVBdEluZGV4KG51bVZpc2libGVMaW5lcyAtIDEpOwogICAgICAgICBpZiAoIWxhc3RWaXNp
YmxlTGluZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMDA1LDcgKzEwMDUsNyBAQCB2
b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6YXBwbHlMaW5lQ2xhbXAoRmxleEJveEl0
ZXJhdG9yJiBpdGVyYXRvciwgYm9vbAogICAgICAgICBpZiAoYW5jaG9yQm94ICYmIGFuY2hvckJv
eC0+cmVuZGVyZXIoKS5zdHlsZSgpLmlzTGluaygpKQogICAgICAgICAgICAgdG90YWxXaWR0aCA9
IGFuY2hvckJveC0+bG9naWNhbFdpZHRoKCkgKyBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4o
dGhpcywgZm9udCwgZWxsaXBzaXNBbmRTcGFjZSwgMiwgc3R5bGUoKSkpOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGFuY2hvckJveCA9IDA7CisgICAgICAgICAgICBhbmNob3JCb3ggPSBu
dWxscHRyOwogICAgICAgICAgICAgdG90YWxXaWR0aCA9IGZvbnQud2lkdGgoY29uc3RydWN0VGV4
dFJ1bih0aGlzLCBmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAxLCBzdHlsZSgpKSk7CiAgICAg
ICAgIH0KIApAQCAtMTA0MiwxMiArMTA0MiwxMiBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveDo6Y2xlYXJMaW5lQ2xhbXAoKQogCiAgICAgICAgIGNoaWxkLT5jbGVhck92ZXJyaWRl
U2l6ZSgpOwogICAgICAgICBpZiAoKGNoaWxkLT5pc1JlcGxhY2VkKCkgJiYgKGNoaWxkLT5zdHls
ZSgpLndpZHRoKCkuaXNQZXJjZW50KCkgfHwgY2hpbGQtPnN0eWxlKCkuaGVpZ2h0KCkuaXNQZXJj
ZW50KCkpKQotICAgICAgICAgICAgfHwgKGNoaWxkLT5zdHlsZSgpLmhlaWdodCgpLmlzQXV0bygp
ICYmIGNoaWxkLT5pc1JlbmRlckJsb2NrKCkpKSB7CisgICAgICAgICAgICB8fCAoY2hpbGQtPnN0
eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCkgJiYgaXM8UmVuZGVyQmxvY2tGbG93PigqY2hpbGQpKSkg
ewogICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQoKTsKIAotICAgICAgICAg
ICAgaWYgKGNoaWxkLT5pc1JlbmRlckJsb2NrRmxvdygpKSB7Ci0gICAgICAgICAgICAgICAgdG9S
ZW5kZXJCbG9ja0Zsb3coY2hpbGQpLT5tYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKTsK
LSAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrRmxvdyhjaGlsZCktPmNsZWFyVHJ1bmNhdGlv
bigpOworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKmNoaWxkKSkgeworICAg
ICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKmNoaWxkKS5tYXJrUG9zaXRp
b25lZE9iamVjdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJC
bG9ja0Zsb3c+KCpjaGlsZCkuY2xlYXJUcnVuY2F0aW9uKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5jcHAKaW5kZXggYTg2MDA5Njc0YjZjZTg4Yzc2NzZmMGU2ZGQ3ZTBkOWQ2NzczNzU2NC4uOGQ5
YTI3MzBiODRhNjM5YWRiZTFlYzJiNmZjMmIyZDRjMDRjNDhlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtOTIsMTAgKzkyLDEwIEBAIHZv
aWQgUmVuZGVyRmxvd1RocmVhZDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBvCiAKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVtb3ZlRmxv
d0NoaWxkSW5mbyhSZW5kZXJPYmplY3QqIGNoaWxkKQogewotICAgIGlmIChjaGlsZC0+aXNSZW5k
ZXJCbG9ja0Zsb3coKSkKLSAgICAgICAgcmVtb3ZlTGluZVJlZ2lvbkluZm8odG9SZW5kZXJCbG9j
a0Zsb3coY2hpbGQpKTsKLSAgICBpZiAoY2hpbGQtPmlzQm94KCkpCi0gICAgICAgIHJlbW92ZVJl
bmRlckJveFJlZ2lvbkluZm8odG9SZW5kZXJCb3goY2hpbGQpKTsKKyAgICBpZiAoaXM8UmVuZGVy
QmxvY2tGbG93PigqY2hpbGQpKQorICAgICAgICByZW1vdmVMaW5lUmVnaW9uSW5mbyhkb3duY2Fz
dDxSZW5kZXJCbG9ja0Zsb3c+KGNoaWxkKSk7CisgICAgaWYgKGlzPFJlbmRlckJveD4oKmNoaWxk
KSkKKyAgICAgICAgcmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhkb3duY2FzdDxSZW5kZXJCb3g+
KGNoaWxkKSk7CiB9CiAKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVtb3ZlUmVnaW9uRnJvbVRo
cmVhZChSZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCmluZGV4IDcxODliZmIzZjBjMzY2YTUyNGZlNTIxNDM5MmE2Yjc5YjRk
NGZjMTYuLmM3YjBjNzU4ZTZkOGE4MWI4ZWYzYmY4NjA5MTRlYTNkYjYzMDIzYTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNDEyLDkgKzQxMiw5IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBn
ZW9tZXRyeU1hcCwgVXBkYXRlTGF5CiAgICAgICAgICAgICAgICAgaWYgKGRpZFJlcGFpbnQgJiYg
cmVuZGVyZXIoKS5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgd2UganVzdCByZXBhaW50ZWQgYSByZWdpb24sIHdlIG11c3Qg
YWxzbyByZXBhaW50IHRoZSBmbG93IHRocmVhZCBzaW5jZSBpdCBpcyB0aGUgb25lCiAgICAgICAg
ICAgICAgICAgICAgIC8vIGRvaW5nIHRoZSBhY3R1YWwgcGFpbnRpbmcgb2YgdGhlIGZsb3dlZCBj
b250ZW50LgotICAgICAgICAgICAgICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVn
aW9uID0gdG9SZW5kZXJCbG9ja0Zsb3coJnJlbmRlcmVyKCkpLT5yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVnaW9uLT5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZWdpb24tPmZsb3dUaHJlYWQoKS0+bGF5ZXIoKS0+cmVwYWlu
dEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50JiByZWdpb24gPSAqZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJl
cigpKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
cmVnaW9uLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi5mbG93VGhy
ZWFkKCktPmxheWVyKCktPnJlcGFpbnRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTU3OSwxMiArMTU3OSwxMiBA
QCBzdGF0aWMgdm9pZCBleHBhbmRDbGlwUmVjdEZvclJlZ2lvbkFuZFJlZmxlY3Rpb24oTGF5b3V0
UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFJlbgogewogICAgIC8vIElmIHRoaXMgaXMgYSByZWdpb24s
IHRoZW4gdGhlIHBhaW50aW5nIGlzIGFjdHVhbGx5IGRvbmUgYnkgaXRzIGZsb3cgdGhyZWFkJ3Mg
bGF5ZXIuCiAgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dENvbnRhaW5lcigpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrRmxvdyogcmVnaW9uQ29udGFpbmVy
ID0gdG9SZW5kZXJCbG9ja0Zsb3coJmxheWVyLnJlbmRlcmVyKCkpOwotICAgICAgICBSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCogcmVnaW9uID0gcmVnaW9uQ29udGFpbmVyLT5yZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCgpOwotICAgICAgICBSZW5kZXJMYXllciogZmxvd1RocmVhZExheWVyID0gcmVn
aW9uLT5mbG93VGhyZWFkKCktPmxheWVyKCk7CisgICAgICAgIFJlbmRlckJsb2NrRmxvdyYgcmVn
aW9uQ29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihsYXllci5yZW5kZXJlcigp
KTsKKyAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQmIHJlZ2lvbiA9ICpyZWdpb25Db250
YWluZXIucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGZs
b3dUaHJlYWRMYXllciA9IHJlZ2lvbi5mbG93VGhyZWFkKCktPmxheWVyKCk7CiAgICAgICAgIGlm
IChmbG93VGhyZWFkTGF5ZXIgJiYgKCFsYXllci5yZWZsZWN0aW9uKCkgfHwgbGF5ZXIucmVmbGVj
dGlvbkxheWVyKCkgIT0gZmxvd1RocmVhZExheWVyKSkgewogICAgICAgICAgICAgTGF5b3V0UmVj
dCBmbG93VGhyZWFkQ2xpcFJlY3QgPSB0cmFuc3BhcmVuY3lDbGlwQm94KCpmbG93VGhyZWFkTGF5
ZXIsIHJvb3RMYXllciwgdHJhbnNwYXJlbmN5QmVoYXZpb3IsIERlc2NlbmRhbnRzT2ZUcmFuc3Bh
cmVuY3lDbGlwQm94LCBwYWludEJlaGF2aW9yKTsKLSAgICAgICAgICAgIExheW91dFNpemUgbW92
ZU9mZnNldCA9IChyZWdpb25Db250YWluZXItPmNvbnRlbnRCb3hSZWN0KCkubG9jYXRpb24oKSAr
IGxheWVyLm9mZnNldEZyb21BbmNlc3RvcihmbG93VGhyZWFkTGF5ZXIpKSAtIHJlZ2lvbi0+Zmxv
d1RocmVhZFBvcnRpb25SZWN0KCkubG9jYXRpb24oKTsKKyAgICAgICAgICAgIExheW91dFNpemUg
bW92ZU9mZnNldCA9IChyZWdpb25Db250YWluZXIuY29udGVudEJveFJlY3QoKS5sb2NhdGlvbigp
ICsgbGF5ZXIub2Zmc2V0RnJvbUFuY2VzdG9yKGZsb3dUaHJlYWRMYXllcikpIC0gcmVnaW9uLmZs
b3dUaHJlYWRQb3J0aW9uUmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgICAgICAgICBmbG93VGhyZWFk
Q2xpcFJlY3QubW92ZShtb3ZlT2Zmc2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2xp
cFJlY3QudW5pdGUoZmxvd1RocmVhZENsaXBSZWN0KTsKQEAgLTYxNjAsMTUgKzYxNjAsMTUgQEAg
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9zaXRpbmdBbmRMYXllckxpc3RzSWZOZWVkZWQo
KQogdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCkKIHsKICAg
ICByZW5kZXJlcigpLnJlcGFpbnQoKTsKLSAgICBmb3IgKFJlbmRlckxheWVyKiBjdXJyID0gZmly
c3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY3Vy
ci0+cmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisgICAgZm9yIChSZW5kZXJMYXllciog
Y3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRT
aWJsaW5nKCkpCisgICAgICAgIGN1cnJlbnQtPnJlcGFpbnRJbmNsdWRpbmdEZXNjZW5kYW50cygp
OwogCiAgICAgLy8gSWYgdGhpcyBpcyBhIHJlZ2lvbiwgd2UgbXVzdCBhbHNvIHJlcGFpbnQgdGhl
IGZsb3cgdGhyZWFkJ3MgbGF5ZXIgc2luY2UgaXQgaXMgdGhlIG9uZQogICAgIC8vIGRvaW5nIHRo
ZSBhY3R1YWwgcGFpbnRpbmcgb2YgdGhlIGZsb3dlZCBjb250ZW50LCBidXQgb25seSBpZiB0aGUg
cmVnaW9uIGlzIHZhbGlkLgogICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnRDb250YWluZXIoKSkgewotICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVn
aW9uID0gdG9SZW5kZXJCbG9ja0Zsb3cocmVuZGVyZXIoKSkucmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQoKTsKLSAgICAgICAgaWYgKHJlZ2lvbi0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmVnaW9u
LT5mbG93VGhyZWFkKCktPmxheWVyKCktPnJlcGFpbnRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwor
ICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCYgcmVnaW9uID0gKmRvd25jYXN0PFJlbmRl
ckJsb2NrRmxvdz4ocmVuZGVyZXIoKSkucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKyAgICAg
ICAgaWYgKHJlZ2lvbi5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZWdpb24uZmxvd1RocmVhZCgp
LT5sYXllcigpLT5yZXBhaW50SW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKICAgICB9CiB9CiAKQEAg
LTY3MzAsOCArNjczMCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Rmxvd1RocmVhZElmUmVn
aW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBmcmFnCiAgICAgaWYgKCFyZW5k
ZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIFJlbmRlckJsb2NrRmxvdyogcmVuZGVyTmFtZWRGbG93RnJhZ21lbnRD
b250YWluZXIgPSB0b1JlbmRlckJsb2NrRmxvdygmcmVuZGVyZXIoKSk7Ci0gICAgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQqIGZsb3dGcmFnbWVudCA9IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29u
dGFpbmVyLT5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOworICAgIFJlbmRlckJsb2NrRmxvdyYg
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zs
b3c+KHJlbmRlcmVyKCkpOworICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBmbG93RnJhZ21l
bnQgPSByZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lci5yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpOwogICAgIGlmICghZmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjc0MCw3ICs2NzQwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRGbG93VGhy
ZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGZyYWcKIAogICAg
IExheW91dFJlY3QgcmVnaW9uQ2xpcFJlY3QgPSBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKTsK
ICAgICBpZiAoZmxvd0ZyYWdtZW50LT5zaG91bGRDbGlwRmxvd1RocmVhZENvbnRlbnQoKSkgewot
ICAgICAgICByZWdpb25DbGlwUmVjdCA9IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVy
LT5wYWRkaW5nQm94UmVjdCgpOworICAgICAgICByZWdpb25DbGlwUmVjdCA9IHJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50Q29udGFpbmVyLnBhZGRpbmdCb3hSZWN0KCk7CiAKICAgICAgICAgLy8gV2hl
biB0aGUgbGF5ZXIgb2YgdGhlIGZsb3cgZnJhZ21lbnQncyBjb250YWluZXIgaXMgY29tcG9zaXRl
ZCwgdGhlIGZsb3cgZnJhZ21lbnQgY29udGFpbmVyIHJlY2VpdmVzIGEKICAgICAgICAgLy8gR3Jh
cGhpY3NMYXllciBvZiBpdHMgb3duIHNvIHRoZSBjbGlwcGluZyBjb29yZGluYXRlcyAoY2F1c2Vk
IGJ5IG92ZXJmbG93OmhpZGRlbikgbXVzdCBiZSByZWxhdGl2ZSB0byB0aGUKQEAgLTY3NzgsMjMg
KzY3NzgsMjMgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Rmxvd1RocmVhZElm
UmVnaW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ20KICAgICBjb25zdCBIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGUqIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUsIGJvb2wgZGVwdGhTb3J0
RGVzY2VuZGFudHMpCiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnRDb250YWluZXIoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIHJlZ2lvbiA9IHRvUmVuZGVyQmxv
Y2tGbG93KCZyZW5kZXJlcigpKS0+cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKLSAgICBpZiAo
IXJlZ2lvbi0+aXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCYgcmVnaW9uID0gKmRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIo
KSkucmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKKyAgICBpZiAoIXJlZ2lvbi5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1Ro
cmVhZCA9IHJlZ2lvbi0+Zmxvd1RocmVhZCgpOwotICAgIExheW91dFBvaW50IHBvcnRpb25Mb2Nh
dGlvbiA9IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkubG9jYXRpb24oKTsKKyAgICBS
ZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gcmVnaW9uLmZsb3dUaHJlYWQoKTsKKyAgICBM
YXlvdXRQb2ludCBwb3J0aW9uTG9jYXRpb24gPSByZWdpb24uZmxvd1RocmVhZFBvcnRpb25SZWN0
KCkubG9jYXRpb24oKTsKICAgICBpZiAoZmxvd1RocmVhZC0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIC8vIFRoZSBwb3J0aW9uIGxvY2F0aW9uIGNvb3Jk
aW5hdGUgbXVzdCBiZSB0cmFuc2xhdGVkIGludG8gcGh5c2ljYWwgY29vcmRpbmF0ZXMuCiAgICAg
ICAgIGlmIChmbG93VGhyZWFkLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0g
ICAgICAgICAgICBwb3J0aW9uTG9jYXRpb24uc2V0WShmbG93VGhyZWFkLT5oZWlnaHQoKSAtIChw
b3J0aW9uTG9jYXRpb24ueSgpICsgcmVnaW9uLT5jb250ZW50SGVpZ2h0KCkpKTsKKyAgICAgICAg
ICAgIHBvcnRpb25Mb2NhdGlvbi5zZXRZKGZsb3dUaHJlYWQtPmhlaWdodCgpIC0gKHBvcnRpb25M
b2NhdGlvbi55KCkgKyByZWdpb24uY29udGVudEhlaWdodCgpKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHBvcnRpb25Mb2NhdGlvbi5zZXRYKGZsb3dUaHJlYWQtPndpZHRoKCkgLSAocG9y
dGlvbkxvY2F0aW9uLngoKSArIHJlZ2lvbi0+Y29udGVudFdpZHRoKCkpKTsKKyAgICAgICAgICAg
IHBvcnRpb25Mb2NhdGlvbi5zZXRYKGZsb3dUaHJlYWQtPndpZHRoKCkgLSAocG9ydGlvbkxvY2F0
aW9uLngoKSArIHJlZ2lvbi5jb250ZW50V2lkdGgoKSkpOwogICAgIH0KIAotICAgIExheW91dFJl
Y3QgcmVnaW9uQ29udGVudEJveCA9IHRvUmVuZGVyQmxvY2tGbG93KCZyZW5kZXJlcigpKS0+Y29u
dGVudEJveFJlY3QoKTsKKyAgICBMYXlvdXRSZWN0IHJlZ2lvbkNvbnRlbnRCb3ggPSBkb3duY2Fz
dDxSZW5kZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKCkpLmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICBS
ZW5kZXJMYXllciogcmVzdWx0TGF5ZXIgPSBudWxscHRyOwogICAgIGZvciAoaW50IGkgPSBmcmFn
bWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKQEAgLTY4MDMsNyArNjgwMyw3IEBAIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdEZsb3dUaHJlYWRJZlJlZ2lvbkZvckZyYWdt
ZW50cyhjb25zdCBMYXllckZyYWdtCiAgICAgICAgIGlmICghZnJhZ21lbnQuYmFja2dyb3VuZFJl
Y3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgTGF5b3V0U2l6ZSBoaXRUZXN0T2Zmc2V0ID0gcG9ydGlvbkxvY2F0aW9uIC0gKGZy
YWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgKyByZWdpb25Db250ZW50Qm94LmxvY2F0aW9u
KCkpICsgcmVnaW9uLT5mcmFnbWVudENvbnRhaW5lcigpLnNjcm9sbGVkQ29udGVudE9mZnNldCgp
OworICAgICAgICBMYXlvdXRTaXplIGhpdFRlc3RPZmZzZXQgPSBwb3J0aW9uTG9jYXRpb24gLSAo
ZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSArIHJlZ2lvbkNvbnRlbnRCb3gubG9jYXRp
b24oKSkgKyByZWdpb24uZnJhZ21lbnRDb250YWluZXIoKS5zY3JvbGxlZENvbnRlbnRPZmZzZXQo
KTsKIAogICAgICAgICAvLyBBbHdheXMgaWdub3JlIGNsaXBwaW5nLCBzaW5jZSB0aGUgUmVuZGVy
Rmxvd1RocmVhZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBib3VuZHMgb2YgdGhlIEZyYW1l
Vmlldy4KICAgICAgICAgSGl0VGVzdFJlcXVlc3QgbmV3UmVxdWVzdChyZXF1ZXN0LnR5cGUoKSB8
IEhpdFRlc3RSZXF1ZXN0OjpJZ25vcmVDbGlwcGluZyB8IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxv
d1NoYWRvd0NvbnRlbnQpOwpAQCAtNjgxNywxMCArNjgxNywxMCBAQCBSZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbQogICAgICAgICBoaXRUZXN0UmVjdEluRmxvd1RocmVhZC5leHBhbmQoTGF5b3V0U2l6
ZShmYWJzKChkb3VibGUpaGl0VGVzdE9mZnNldC53aWR0aCgpKSwgZmFicygoZG91YmxlKWhpdFRl
c3RPZmZzZXQuaGVpZ2h0KCkpKSk7CiAKICAgICAgICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRN
YWludGFpbmVyIGZsb3dUaHJlYWRNYWludGFpbmVyKGZsb3dUaHJlYWQpOwotICAgICAgICBDdXJy
ZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciByZWdpb25NYWludGFpbmVyKCpyZWdpb24pOworICAg
ICAgICBDdXJyZW50UmVuZGVyUmVnaW9uTWFpbnRhaW5lciByZWdpb25NYWludGFpbmVyKHJlZ2lv
bik7CiAKICAgICAgICAgSGl0VGVzdFJlc3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9j
YXRpb24oKSk7Ci0gICAgICAgIFJlbmRlckxheWVyKiBoaXRMYXllciA9IGZsb3dUaHJlYWQtPmxh
eWVyKCktPmhpdFRlc3RMYXllcihmbG93VGhyZWFkLT5sYXllcigpLCAwLCBuZXdSZXF1ZXN0LCB0
ZW1wUmVzdWx0LCBoaXRUZXN0UmVjdEluRmxvd1RocmVhZCwgbmV3SGl0VGVzdExvY2F0aW9uLCBm
YWxzZSwgdHJhbnNmb3JtU3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CisgICAgICAgIFJl
bmRlckxheWVyKiBoaXRMYXllciA9IGZsb3dUaHJlYWQtPmxheWVyKCktPmhpdFRlc3RMYXllcihm
bG93VGhyZWFkLT5sYXllcigpLCBudWxscHRyLCBuZXdSZXF1ZXN0LCB0ZW1wUmVzdWx0LCBoaXRU
ZXN0UmVjdEluRmxvd1RocmVhZCwgbmV3SGl0VGVzdExvY2F0aW9uLCBmYWxzZSwgdHJhbnNmb3Jt
U3RhdGUsIHpPZmZzZXRGb3JEZXNjZW5kYW50cyk7CiAgICAgICAgIGlmIChyZXN1bHQuaXNSZWN0
QmFzZWRUZXN0KCkpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBSZXN1bHQpOwogICAg
ICAgICBpZiAoaXNIaXRDYW5kaWRhdGUoaGl0TGF5ZXIsIGRlcHRoU29ydERlc2NlbmRhbnRzLCB6
T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCA0NTliZDk0NTUx
ODllYTk2YmRjMDk4MTBmMTUxYTExZGY0YjZjYjRkLi40YzhmZTJlZWI0ZGMxY2ExMTdmNDQ1ODI3
NDJlYWM0ZDY5NTI5OTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMTI4Nyw3ICsxMjg3LDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXll
ciogYW5jZXN0b3IKICAgICAgICAgLy8gYW5vbnltb3VzIFJlbmRlclJlZ2lvbiwgYnV0IGZpcnN0
IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBhcmVudCBpdHNlbGYgb2YgdGhlIHJlZ2lv
biBpcyBnb2luZyB0bwogICAgICAgICAvLyBoYXZlIGEgY29tcG9zaXRlZCBsYXllci4gV2Ugb25s
eSB3YW50IHRvIG1ha2UgcmVnaW9ucyBjb21wb3NpdGVkIHdoZW4gdGhlcmUncyBhbiBhY3R1YWwg
bGF5ZXIgdGhhdCB3ZQogICAgICAgICAvLyBuZWVkIHRvIG1vdmUgdG8gdGhhdCByZWdpb24uCi0g
ICAgICAgIGNvbXB1dGVSZWdpb25Db21wb3NpdGluZ1JlcXVpcmVtZW50cyh0b1JlbmRlckJsb2Nr
RmxvdyhsYXllci5yZW5kZXJlcigpKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLCBvdmVybGFw
TWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFuZ2VkLCBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zv
cm0pOworICAgICAgICBjb21wdXRlUmVnaW9uQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoZG93bmNh
c3Q8UmVuZGVyQmxvY2tGbG93PihsYXllci5yZW5kZXJlcigpKS5yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCgpLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFuZ2VkLCBhbnlEZXNjZW5k
YW50SGFzM0RUcmFuc2Zvcm0pOwogICAgIH0KIAogICAgIApAQCAtMTU0NCw3ICsxNTQ0LDcgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZShS
ZW5kZXJMYXllciYgbGF5ZXIsIFZlY3QKICAgICB9CiAKICAgICBpZiAobGF5ZXIucmVuZGVyZXIo
KS5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyKCkpCi0gICAgICAgIHJlYnVpbGRS
ZWdpb25Db21wb3NpdGluZ0xheWVyVHJlZSh0b1JlbmRlckJsb2NrRmxvdyhsYXllci5yZW5kZXJl
cigpKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpLCBsYXllckNoaWxkcmVuLCBkZXB0aCArIDEp
OworICAgICAgICByZWJ1aWxkUmVnaW9uQ29tcG9zaXRpbmdMYXllclRyZWUoZG93bmNhc3Q8UmVu
ZGVyQmxvY2tGbG93PihsYXllci5yZW5kZXJlcigpKS5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgp
LCBsYXllckNoaWxkcmVuLCBkZXB0aCArIDEpOwogCiAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXll
cio+KiBub3JtYWxGbG93TGlzdCA9IGxheWVyLm5vcm1hbEZsb3dMaXN0KCkpIHsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBub3JtYWxGbG93TGlzdC0+c2l6ZSgpOyBpIDwgc2l6
ZTsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVs
dGlDb2x1bW5GbG93VGhyZWFkLmNwcAppbmRleCA3ZGZlODM2MjE2MWE0ZThhMGYxMjI0YWMzMzM1
YTBiMzczNGJkYjExLi41MWIxN2Q4MjM2ZjViMmQzMmYzNjI1YzBmMjAyMzc4NDg0YTMxZjhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93
VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkLmNwcApAQCAtMTgzLDkgKzE4Myw5IEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1
bW5GbG93VGhyZWFkOjpldmFjdWF0ZUFuZERlc3Ryb3koKQogICAgIHdoaWxlICgoaXQgPSBtX3Nw
YW5uZXJNYXAuYmVnaW4oKSkgIT0gbV9zcGFubmVyTWFwLmVuZCgpKSB7CiAgICAgICAgIFJlbmRl
ckJveCogc3Bhbm5lciA9IGl0LT5rZXk7CiAgICAgICAgIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5l
clBsYWNlaG9sZGVyKiBwbGFjZWhvbGRlciA9IGl0LT52YWx1ZTsKLSAgICAgICAgUmVuZGVyQmxv
Y2tGbG93KiBvcmlnaW5hbENvbnRhaW5lciA9IHRvUmVuZGVyQmxvY2tGbG93KHBsYWNlaG9sZGVy
LT5wYXJlbnQoKSk7CisgICAgICAgIFJlbmRlckJsb2NrRmxvdyYgb3JpZ2luYWxDb250YWluZXIg
PSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwbGFjZWhvbGRlci0+cGFyZW50KCkpOwogICAg
ICAgICBtdWx0aWNvbENvbnRhaW5lci0+cmVtb3ZlQ2hpbGQoKnNwYW5uZXIpOwotICAgICAgICBv
cmlnaW5hbENvbnRhaW5lci0+YWRkQ2hpbGQoc3Bhbm5lciwgcGxhY2Vob2xkZXIpOworICAgICAg
ICBvcmlnaW5hbENvbnRhaW5lci5hZGRDaGlsZChzcGFubmVyLCBwbGFjZWhvbGRlcik7CiAgICAg
ICAgIHBsYWNlaG9sZGVyLT5kZXN0cm95KCk7CiAgICAgICAgIG1fc3Bhbm5lck1hcC5yZW1vdmUo
aXQpOwogICAgIH0KQEAgLTI5Niw3ICsyOTYsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZDo6cHJvY2Vzc1Bvc3NpYmxlU3Bhbm5lckRlc2NlbmRhbnQoUmVuZAog
ICAgICAgICAvLyBzbyB0aGF0IHRoZXkgbGl2ZSBhbW9uZyB0aGUgY29sdW1uIHNldHMuIFRoaXMg
c2ltcGxpZmllcyB0aGUgbGF5b3V0IGltcGxlbWVudGF0aW9uLCBhbmQKICAgICAgICAgLy8gYmFz
aWNhbGx5IGp1c3QgcmVsaWVzIG9uIHJlZ3VsYXIgYmxvY2sgbGF5b3V0IGRvbmUgYnkgdGhlIFJl
bmRlckJsb2NrRmxvdyB0aGF0CiAgICAgICAgIC8vIGVzdGFibGlzaGVzIHRoZSBtdWx0aWNvbCBj
b250YWluZXIuCi0gICAgICAgIFJlbmRlckJsb2NrRmxvdyogY29udGFpbmVyID0gdG9SZW5kZXJC
bG9ja0Zsb3coZGVzY2VuZGFudC0+cGFyZW50KCkpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3cq
IGNvbnRhaW5lciA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oZGVzY2VuZGFudC0+cGFyZW50
KCkpOwogICAgICAgICBSZW5kZXJNdWx0aUNvbHVtblNldCogc2V0VG9TcGxpdCA9IG51bGxwdHI7
CiAgICAgICAgIGlmIChuZXh0UmVuZGVyZXJJbkZsb3dUaHJlYWQpIHsKICAgICAgICAgICAgIHNl
dFRvU3BsaXQgPSBmaW5kU2V0UmVuZGVyaW5nKGRlc2NlbmRhbnQpOwpAQCAtMzExLDcgKzMxMSw3
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpwcm9jZXNzUG9z
c2libGVTcGFubmVyRGVzY2VuZGFudChSZW5kCiAgICAgICAgIC8vIGNvbnRlbnQgYmVmb3JlIGFu
ZCBhZnRlciB0aGUgc3Bhbm5lciwgc28gdGhhdCBpdCBiZWNvbWVzIHNlcGFyYXRlIGxpbmUgYm94
ZXMuIFNlY29uZGx5LAogICAgICAgICAvLyB0aGlzIHBsYWNlaG9sZGVyIHNlcnZlcyBhcyBhIGJy
ZWFrIHBvaW50IGZvciBjb2x1bW4gc2V0cywgc28gdGhhdCwgd2hlbiBlbmNvdW50ZXJlZCwgd2UK
ICAgICAgICAgLy8gZW5kIGZsb3dpbmcgb25lIGNvbHVtbiBzZXQgYW5kIG1vdmUgdG8gdGhlIG5l
eHQgb25lLgotICAgICAgICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogcGxh
Y2Vob2xkZXIgPSBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcjo6Y3JlYXRlQW5v
bnltb3VzKHRoaXMsIHRvUmVuZGVyQm94KGRlc2NlbmRhbnQpLCAmY29udGFpbmVyLT5zdHlsZSgp
KTsKKyAgICAgICAgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIHBsYWNlaG9s
ZGVyID0gUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6OmNyZWF0ZUFub255bW91
cyh0aGlzLCBkb3duY2FzdDxSZW5kZXJCb3g+KGRlc2NlbmRhbnQpLCAmY29udGFpbmVyLT5zdHls
ZSgpKTsKICAgICAgICAgY29udGFpbmVyLT5hZGRDaGlsZChwbGFjZWhvbGRlciwgZGVzY2VuZGFu
dC0+bmV4dFNpYmxpbmcoKSk7CiAgICAgICAgIGNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQoKmRlc2Nl
bmRhbnQpOwogICAgICAgICAKQEAgLTMyOSwxNCArMzI5LDE0IEBAIFJlbmRlck9iamVjdCogUmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpwcm9jZXNzUG9zc2libGVTcGFubmVyRGVzY2VuZGFu
dChSZW5kCiAgICAgICAgIG5leHREZXNjZW5kYW50ID0gcGxhY2Vob2xkZXI7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gVGhpcyBpcyByZWd1bGFyIG11bHRpY29sIGNvbnRlbnQsIGkuZS4gbm90
IHBhcnQgb2YgYSBzcGFubmVyLgotICAgICAgICBpZiAobmV4dFJlbmRlcmVySW5GbG93VGhyZWFk
ICYmIG5leHRSZW5kZXJlckluRmxvd1RocmVhZC0+aXNSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlcigpKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlcj4obmV4dFJlbmRlcmVySW5GbG93VGhyZWFkKSkgewogICAgICAgICAgICAgLy8g
SW5zZXJ0ZWQgcmlnaHQgYmVmb3JlIGEgc3Bhbm5lci4gSXMgdGhlcmUgYSBzZXQgZm9yIHVzIHRo
ZXJlPwotICAgICAgICAgICAgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIHBs
YWNlaG9sZGVyID0gdG9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcihuZXh0UmVu
ZGVyZXJJbkZsb3dUaHJlYWQpOwotICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcHJldmlv
dXMgPSBwbGFjZWhvbGRlci0+c3Bhbm5lcigpLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAg
ICAgICAgICAgIGlmIChwcmV2aW91cy0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKQorICAgICAg
ICAgICAgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXImIHBsYWNlaG9sZGVyID0g
ZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCpuZXh0UmVuZGVy
ZXJJbkZsb3dUaHJlYWQpOworICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcHJldmlvdXMg
PSBwbGFjZWhvbGRlci5zcGFubmVyKCktPnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uU2V0PigqcHJldmlvdXMpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbmV4dERlc2NlbmRhbnQ7IC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHNl
dCB0aGVyZS4gTm90aGluZyB0byBkby4KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc2Vy
dEJlZm9yZU11bHRpY29sQ2hpbGQgPSBwbGFjZWhvbGRlci0+c3Bhbm5lcigpOworICAgICAgICAg
ICAgaW5zZXJ0QmVmb3JlTXVsdGljb2xDaGlsZCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKICAg
ICAgICAgfSBlbHNlIGlmIChSZW5kZXJNdWx0aUNvbHVtblNldCogbGFzdFNldCA9IGxhc3RNdWx0
aUNvbHVtblNldCgpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGNoaWxkIGlzIG5vdCBhbiBpbW1l
ZGlhdGUgcHJlZGVjZXNzb3Igb2YgYSBzcGFubmVyLCB3aGljaCBtZWFucyB0aGF0IGlmIHRoaXMK
ICAgICAgICAgICAgIC8vIGNoaWxkIHByZWNlZGVzIGEgc3Bhbm5lciBhdCBhbGwsIHRoZXJlIGhh
cyB0byBiZSBhIGNvbHVtbiBzZXQgY3JlYXRlZCBmb3IgdXMgdGhlcmUKQEAgLTM4MywxMyArMzgz
LDEzIEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpmbG93VGhyZWFkRGVzY2Vu
ZGFudEluc2VydGVkKFJlbmRlck9iamVjdCogZGVzCiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0IGFmdGVyIHRoZSBwbGFjZWhvbGRlciwgYnV0IGRvbid0IGxldCBh
IG5vdGlmaWNhdGlvbiBoYXBwZW4uCiAgICAgICAgICAgICAgICAgZ1NoaWZ0aW5nU3Bhbm5lciA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93KiBhbmNlc3RvckJsb2NrID0g
dG9SZW5kZXJCbG9ja0Zsb3coc3Bhbm5lci0+cGFyZW50KCkpOwotICAgICAgICAgICAgICAgIGFu
Y2VzdG9yQmxvY2stPm1vdmVDaGlsZFRvKHBsYWNlaG9sZGVyLT5wYXJlbnRCb3goKSwgc3Bhbm5l
ciwgcGxhY2Vob2xkZXItPm5leHRTaWJsaW5nKCksIHRydWUpOworICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrRmxvdyYgYW5jZXN0b3JCbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4o
KnNwYW5uZXItPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICBhbmNlc3RvckJsb2NrLm1vdmVD
aGlsZFRvKHBsYWNlaG9sZGVyLT5wYXJlbnRCb3goKSwgc3Bhbm5lciwgcGxhY2Vob2xkZXItPm5l
eHRTaWJsaW5nKCksIHRydWUpOwogICAgICAgICAgICAgICAgIGdTaGlmdGluZ1NwYW5uZXIgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIG51
a2UgdGhlIHBsYWNlaG9sZGVyLCBzaW5jZSB0aGUgYW5jZXN0b3IgYWxyZWFkeSBsb3N0IHRoZSBt
YXBwaW5nIHRvIGl0IHdoZW4KICAgICAgICAgICAgICAgICAvLyB3ZSBzaGlmdGVkIHRoZSBwbGFj
ZWhvbGRlciBkb3duIGludG8gdGhpcyBmbG93IHRocmVhZC4KLSAgICAgICAgICAgICAgICBhbmNl
c3RvckJsb2NrLT5tdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+aGFuZGxlU3Bhbm5lclJlbW92YWwo
c3Bhbm5lcik7CisgICAgICAgICAgICAgICAgYW5jZXN0b3JCbG9jay5tdWx0aUNvbHVtbkZsb3dU
aHJlYWQoKS0+aGFuZGxlU3Bhbm5lclJlbW92YWwoc3Bhbm5lcik7CiAgICAgICAgICAgICAgICAg
cGxhY2Vob2xkZXItPmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvLyBOb3cgd2UgcHJvY2VzcyB0aGUgc3Bhbm5lci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaAppbmRleCA3Zjc0ZTcy
OWVjNzA2YTQ4ODY5YTdhNWI4Y2NjOGYxM2E0ODUwMzAwLi42Yzc5ZGYzYzg2MzQ1OWE3YmQxMzlk
NDI1Njc2ZTExYzg3ZDQxY2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGbG93Q2hpbGRJbmZvKFJlbmRlck9iamVjdCop
IG92ZXJyaWRlOwogCi0gICAgUmVuZGVyQmxvY2tGbG93KiBtdWx0aUNvbHVtbkJsb2NrRmxvdygp
IGNvbnN0IHsgcmV0dXJuIHRvUmVuZGVyQmxvY2tGbG93KHBhcmVudCgpKTsgfQorICAgIFJlbmRl
ckJsb2NrRmxvdyogbXVsdGlDb2x1bW5CbG9ja0Zsb3coKSBjb25zdCB7IHJldHVybiBkb3duY2Fz
dDxSZW5kZXJCbG9ja0Zsb3c+KHBhcmVudCgpKTsgfQogCiAgICAgUmVuZGVyTXVsdGlDb2x1bW5T
ZXQqIGZpcnN0TXVsdGlDb2x1bW5TZXQoKSBjb25zdDsKICAgICBSZW5kZXJNdWx0aUNvbHVtblNl
dCogbGFzdE11bHRpQ29sdW1uU2V0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAppbmRleCAzM2FiNzk0ZmVkNGQyZTZmY2Ux
OWEyNDhjOWRjODgyMjE4ZjQ1OTFmLi5lZDZlZjcwYWI4ZjJmYTc2MDRiZDAxYjlkYzlkYmE4Yjc4
NDEyMzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5TZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtblNldC5jcHAKQEAgLTEzNyw4ICsxMzcsOCBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0
OjpzZXRMb2dpY2FsQm90dG9tSW5GbG93VGhyZWFkKExheW91dFVuaXQgbG9naWNhbEJvdHRvbQog
CiBMYXlvdXRVbml0IFJlbmRlck11bHRpQ29sdW1uU2V0OjpoZWlnaHRBZGp1c3RlZEZvclNldE9m
ZnNldChMYXlvdXRVbml0IGhlaWdodCkgY29uc3QKIHsKLSAgICBSZW5kZXJCbG9ja0Zsb3cqIG11
bHRpY29sQmxvY2sgPSB0b1JlbmRlckJsb2NrRmxvdyhwYXJlbnQoKSk7Ci0gICAgTGF5b3V0VW5p
dCBjb250ZW50TG9naWNhbFRvcCA9IGxvZ2ljYWxUb3AoKSAtIG11bHRpY29sQmxvY2stPmJvcmRl
ckFuZFBhZGRpbmdCZWZvcmUoKTsKKyAgICBSZW5kZXJCbG9ja0Zsb3cmIG11bHRpY29sQmxvY2sg
PSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSk7CisgICAgTGF5b3V0VW5pdCBj
b250ZW50TG9naWNhbFRvcCA9IGxvZ2ljYWxUb3AoKSAtIG11bHRpY29sQmxvY2suYm9yZGVyQW5k
UGFkZGluZ0JlZm9yZSgpOwogCiAgICAgaGVpZ2h0IC09IGNvbnRlbnRMb2dpY2FsVG9wOwogICAg
IHJldHVybiBzdGQ6Om1heChoZWlnaHQsIExheW91dFVuaXQ6OmZyb21QaXhlbCgxKSk7IC8vIExl
dCdzIGF2b2lkIHplcm8gaGVpZ2h0LCBhcyB0aGF0IHdvdWxkIHByb2JhYmx5IGNhdXNlIGFuIGlu
ZmluaXRlIGFtb3VudCBvZiBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuCkBAIC00MjEsMTAgKzQyMSwx
MCBAQCBMYXlvdXRVbml0IFJlbmRlck11bHRpQ29sdW1uU2V0Ojpjb2x1bW5HYXAoKSBjb25zdAog
ewogICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgY2FjaGUgdGhlIGNvbHVtbiBnYXAg
d2hlbiB0aGUgd2lkdGhzIG9mIGNvbHVtbnMgc3RhcnQgdmFyeWluZywgYnV0IGZvciBub3cgd2Ug
anVzdAogICAgIC8vIGdvIHRvIHRoZSBwYXJlbnQgYmxvY2sgdG8gZ2V0IHRoZSBnYXAuCi0gICAg
UmVuZGVyQmxvY2tGbG93KiBwYXJlbnRCbG9jayA9IHRvUmVuZGVyQmxvY2tGbG93KHBhcmVudCgp
KTsKLSAgICBpZiAocGFyZW50QmxvY2stPnN0eWxlKCkuaGFzTm9ybWFsQ29sdW1uR2FwKCkpCi0g
ICAgICAgIHJldHVybiBwYXJlbnRCbG9jay0+c3R5bGUoKS5mb250RGVzY3JpcHRpb24oKS5jb21w
dXRlZFBpeGVsU2l6ZSgpOyAvLyAiMWVtIiBpcyByZWNvbW1lbmRlZCBhcyB0aGUgbm9ybWFsIGdh
cCBzZXR0aW5nLiBNYXRjaGVzIDxwPiBtYXJnaW5zLgotICAgIHJldHVybiBwYXJlbnRCbG9jay0+
c3R5bGUoKS5jb2x1bW5HYXAoKTsKKyAgICBSZW5kZXJCbG9ja0Zsb3cmIHBhcmVudEJsb2NrID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcGFyZW50KCkpOworICAgIGlmIChwYXJlbnRCbG9j
ay5zdHlsZSgpLmhhc05vcm1hbENvbHVtbkdhcCgpKQorICAgICAgICByZXR1cm4gcGFyZW50Qmxv
Y2suc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpOyAvLyAiMWVt
IiBpcyByZWNvbW1lbmRlZCBhcyB0aGUgbm9ybWFsIGdhcCBzZXR0aW5nLiBNYXRjaGVzIDxwPiBt
YXJnaW5zLgorICAgIHJldHVybiBwYXJlbnRCbG9jay5zdHlsZSgpLmNvbHVtbkdhcCgpOwogfQog
CiB1bnNpZ25lZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6Y29sdW1uQ291bnQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaAppbmRleCA3
NTBkNWNjOWJjZmYxNmVhY2MyMGMyYTg2ZGRjOWY3OGZkNGMwNDgxLi5kODdmNGRmNmU2YjYwNmJh
M2Y1ZjAzNjUzYzliMGQ5NGQ5ZTE0OGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtblNldCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIFJlbmRlckJsb2NrRmxvdyogbXVsdGlDb2x1bW5CbG9ja0Zs
b3coKSBjb25zdCB7IHJldHVybiB0b1JlbmRlckJsb2NrRmxvdyhwYXJlbnQoKSk7IH0KKyAgICBS
ZW5kZXJCbG9ja0Zsb3cqIG11bHRpQ29sdW1uQmxvY2tGbG93KCkgY29uc3QgeyByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihwYXJlbnQoKSk7IH0KICAgICBSZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQqIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCo+KGZsb3dUaHJlYWQoKSk7IH0KIAog
ICAgIFJlbmRlck11bHRpQ29sdW1uU2V0KiBuZXh0U2libGluZ011bHRpQ29sdW1uU2V0KCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50LmNwcAppbmRleCAxNjY0ZDQ3YjBhMjU1NTdjYTU3Y2VhZmE4MDE1ZTM5YWYwNWM4Y2Q4
Li43MDE5NmU1NGQ3OWUwM2Y4NDA4ODIyZDlkZmEyMzQ5YzY2NDVlZTVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKQEAg
LTIzMSw3ICsyMzEsNyBAQCBSZW5kZXJCbG9ja0Zsb3cmIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OjpmcmFnbWVudENvbnRhaW5lcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHBhcmVudCgpKTsKICAg
ICBBU1NFUlQocGFyZW50KCktPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSk7
Ci0gICAgcmV0dXJuICp0b1JlbmRlckJsb2NrRmxvdyhwYXJlbnQoKSk7CisgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgpKTsKIH0KIAogUmVuZGVyTGF5ZXImIFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50OjpmcmFnbWVudENvbnRhaW5lckxheWVyKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggZDk1M2NlNTIxMjlh
MDA2Njc2ZTEwNTQ3ZTYyMDdhZWQ5MTdiNDI1ZC4uNjM3OTc2MWZjNWI3OGRkNjg1MzIwMDA2MTFh
YzU5OTVjNjdlMmYxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKQEAgLTQzNyw4ICs0MzcsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRqdXN0Q29tcHV0ZWRG
b250U2l6ZXNPbkJsb2NrcyhmbG9hdCBzaXplLCBmbG9hdCB2aXNpYmxlV2lkdAogICAgICAgICAg
ICAgZGVwdGhTdGFjay5hcHBlbmQobmV3Rml4ZWREZXB0aCk7CiAKICAgICAgICAgaW50IHN0YWNr
U2l6ZSA9IGRlcHRoU3RhY2suc2l6ZSgpOwotICAgICAgICBpZiAoZGVzY2VuZGVudC0+aXNSZW5k
ZXJCbG9ja0Zsb3coKSAmJiAhZGVzY2VuZGVudC0+aXNMaXN0SXRlbSgpICYmICghc3RhY2tTaXpl
IHx8IGN1cnJlbnREZXB0aCAtIGRlcHRoU3RhY2tbc3RhY2tTaXplIC0gMV0gPiBUZXh0QXV0b1Np
emluZ0ZpeGVkSGVpZ2h0RGVwdGgpKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9ja0Zsb3coZGVz
Y2VuZGVudCktPmFkanVzdENvbXB1dGVkRm9udFNpemVzKHNpemUsIHZpc2libGVXaWR0aCk7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJCbG9ja0Zsb3c+KCpkZXNjZW5kZW50KSAmJiAhZGVzY2VuZGVu
dC0+aXNMaXN0SXRlbSgpICYmICghc3RhY2tTaXplIHx8IGN1cnJlbnREZXB0aCAtIGRlcHRoU3Rh
Y2tbc3RhY2tTaXplIC0gMV0gPiBUZXh0QXV0b1NpemluZ0ZpeGVkSGVpZ2h0RGVwdGgpKQorICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqZGVzY2VuZGVudCkuYWRqdXN0Q29t
cHV0ZWRGb250U2l6ZXMoc2l6ZSwgdmlzaWJsZVdpZHRoKTsKICAgICAgICAgbmV3Rml4ZWREZXB0
aCA9IDA7CiAgICAgfQogCkBAIC00NjUsOCArNDY1LDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJl
c2V0VGV4dEF1dG9zaXppbmcoKQogICAgICAgICAgICAgZGVwdGhTdGFjay5hcHBlbmQobmV3Rml4
ZWREZXB0aCk7CiAKICAgICAgICAgaW50IHN0YWNrU2l6ZSA9IGRlcHRoU3RhY2suc2l6ZSgpOwot
ICAgICAgICBpZiAoZGVzY2VuZGVudC0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhZGVzY2VuZGVu
dC0+aXNMaXN0SXRlbSgpICYmICghc3RhY2tTaXplIHx8IGN1cnJlbnREZXB0aCAtIGRlcHRoU3Rh
Y2tbc3RhY2tTaXplIC0gMV0gPiBUZXh0QXV0b1NpemluZ0ZpeGVkSGVpZ2h0RGVwdGgpKQotICAg
ICAgICAgICAgdG9SZW5kZXJCbG9ja0Zsb3coZGVzY2VuZGVudCktPnJlc2V0Q29tcHV0ZWRGb250
U2l6ZSgpOworICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2tGbG93PigqZGVzY2VuZGVudCkgJiYg
IWRlc2NlbmRlbnQtPmlzTGlzdEl0ZW0oKSAmJiAoIXN0YWNrU2l6ZSB8fCBjdXJyZW50RGVwdGgg
LSBkZXB0aFN0YWNrW3N0YWNrU2l6ZSAtIDFdID4gVGV4dEF1dG9TaXppbmdGaXhlZEhlaWdodERl
cHRoKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKmRlc2NlbmRlbnQp
LnJlc2V0Q29tcHV0ZWRGb250U2l6ZSgpOwogICAgICAgICBuZXdGaXhlZERlcHRoID0gMDsKICAg
ICB9CiB9CkBAIC0xNDI5LDExICsxNDI5LDExIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzaG93UmVu
ZGVyVHJlZUZvclRoaXMoKSBjb25zdAogCiB2b2lkIFJlbmRlck9iamVjdDo6c2hvd0xpbmVUcmVl
Rm9yVGhpcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1JlbmRlckJsb2NrRmxvdygpKQorICAgIGlm
ICghaXM8UmVuZGVyQmxvY2tGbG93PigqdGhpcykpCiAgICAgICAgIHJldHVybjsKICAgICBzaG93
UmVuZGVyVHJlZUxlZ2VuZCgpOwogICAgIHNob3dSZW5kZXJPYmplY3QoZmFsc2UsIDEpOwotICAg
IHRvUmVuZGVyQmxvY2tGbG93KHRoaXMpLT5zaG93TGluZVRyZWVBbmRNYXJrKG51bGxwdHIsIDIp
OworICAgIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnRoaXMpLnNob3dMaW5lVHJlZUFuZE1h
cmsobnVsbHB0ciwgMik7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpzaG93UmVnaW9uc0luZm9y
bWF0aW9uKCkgY29uc3QKQEAgLTE1ODYsOCArMTU4Niw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpz
aG93UmVuZGVyU3ViVHJlZUFuZE1hcmsoY29uc3QgUmVuZGVyT2JqZWN0KiBtYXJrZWRPYmplY3Qs
IGluCiAjZW5kaWYKIAogICAgIHNob3dSZW5kZXJPYmplY3QobWFya2VkT2JqZWN0ID09IHRoaXMs
IGRlcHRoKTsKLSAgICBpZiAoaXNSZW5kZXJCbG9ja0Zsb3coKSkKLSAgICAgICAgdG9SZW5kZXJC
bG9ja0Zsb3codGhpcyktPnNob3dMaW5lVHJlZUFuZE1hcmsobnVsbHB0ciwgZGVwdGggKyAxKTsK
KyAgICBpZiAoaXM8UmVuZGVyQmxvY2tGbG93PigqdGhpcykpCisgICAgICAgIGRvd25jYXN0PFJl
bmRlckJsb2NrRmxvdz4oKnRoaXMpLnNob3dMaW5lVHJlZUFuZE1hcmsobnVsbHB0ciwgZGVwdGgg
KyAxKTsKIAogICAgIGZvciAoY29uc3QgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGRT
bG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGls
ZC0+c2hvd1JlbmRlclN1YlRyZWVBbmRNYXJrKG1hcmtlZE9iamVjdCwgZGVwdGggKyAxKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA3M2ExYTRjNmE4MDczY2M2
OTNkZDU5YjQ0NWViZGZiZmNiOWEwNzNlLi45MTVkOGVhMjgzMzI5NjIyZTEwZDNkMzkzZGM3Mjdk
ZWNkOGM0M2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0x
MTAyLDggKzExMDIsOCBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBib29sIGZvcmNlKQogICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OwogICAgIG1fa25vd25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzID0gZmFsc2U7
CiAKLSAgICBpZiAocGFyZW50KCktPmlzUmVuZGVyQmxvY2tGbG93KCkpCi0gICAgICAgIHRvUmVu
ZGVyQmxvY2tGbG93KHBhcmVudCgpKS0+aW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7CisgICAg
aWYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgpKSkKKyAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQmxvY2tGbG93PigqcGFyZW50KCkpLmludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCgpOwogICAg
IAogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9i
amVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT50ZXh0Q2hhbmdlZCh0aGlzKTsKQEAgLTExNDks
MTYgKzExNDksMTYgQEAgdm9pZCBSZW5kZXJUZXh0Ojpwb3NpdGlvbkxpbmVCb3goSW5saW5lVGV4
dEJveCYgdGV4dEJveCkKIAogdm9pZCBSZW5kZXJUZXh0OjplbnN1cmVMaW5lQm94ZXMoKQogewot
ICAgIGlmICghcGFyZW50KCktPmlzUmVuZGVyQmxvY2tGbG93KCkpCisgICAgaWYgKCFpczxSZW5k
ZXJCbG9ja0Zsb3c+KCpwYXJlbnQoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICB0b1JlbmRlckJs
b2NrRmxvdyhwYXJlbnQoKSktPmVuc3VyZUxpbmVCb3hlcygpOworICAgIGRvd25jYXN0PFJlbmRl
ckJsb2NrRmxvdz4oKnBhcmVudCgpKS5lbnN1cmVMaW5lQm94ZXMoKTsKIH0KIAogY29uc3QgU2lt
cGxlTGluZUxheW91dDo6TGF5b3V0KiBSZW5kZXJUZXh0OjpzaW1wbGVMaW5lTGF5b3V0KCkgY29u
c3QKIHsKLSAgICBpZiAoIXBhcmVudCgpLT5pc1JlbmRlckJsb2NrRmxvdygpKQorICAgIGlmICgh
aXM8UmVuZGVyQmxvY2tGbG93PigqcGFyZW50KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gdG9SZW5kZXJCbG9ja0Zsb3cocGFyZW50KCkpLT5zaW1wbGVMaW5lTGF5b3V0
KCk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnBhcmVudCgpKS5zaW1w
bGVMaW5lTGF5b3V0KCk7CiB9CiAKIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbiwgZmxvYXQgeFBvcywgYm9vbCBmaXJzdExpbmUsIEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhP
dmVyZmxvdykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAppbmRleCAzOWI3NDRlNDRlZWQ1MDY2MjU4OTNiMDYzZWIxN2M0ZjU1ODQ1MGYxLi4w
ODk3ZWEzZGM2Njk0MmU1NTNiMmI3NTdjMzk2OGFmYjk0MjJkZjI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC01NDIsNyArNTQyLDcgQEAg
dm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBpbnQgaW5k
ZW50LCBSZW5kZXJBc1RleHRCZWhhdmkKICAgICAgICAgYXV0byYgdGV4dCA9IGRvd25jYXN0PFJl
bmRlclRleHQ+KG8pOwogICAgICAgICBpZiAoYXV0byBsYXlvdXQgPSB0ZXh0LnNpbXBsZUxpbmVM
YXlvdXQoKSkgewogICAgICAgICAgICAgQVNTRVJUKCF0ZXh0LmZpcnN0VGV4dEJveCgpKTsKLSAg
ICAgICAgICAgIGF1dG8gcmVzb2x2ZXIgPSBydW5SZXNvbHZlcih0b1JlbmRlckJsb2NrRmxvdygq
dGV4dC5wYXJlbnQoKSksICpsYXlvdXQpOworICAgICAgICAgICAgYXV0byByZXNvbHZlciA9IHJ1
blJlc29sdmVyKGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnRleHQucGFyZW50KCkpLCAqbGF5
b3V0KTsKICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHJlc29sdmVyLmJlZ2luKCksIGVuZCA9
IHJlc29sdmVyLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBhdXRv
IHJ1biA9ICppdDsKICAgICAgICAgICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggZGM4NGJh
MTQzMWNiNWM0OTQ1M2VjYzJiZGRkYzhiNmQxZWUzNDI4MS4uOTMxMDAxZTA0YjViYTlmY2QxZTM2
ODQ1YjM3MmExZTQzZmEwOTI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcApAQCAtNjMwLDggKzYzMCw4IEBAIExheW91dFVuaXQgUm9vdElubGluZUJveDo6
c2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpIGNvbnN0CiAKICAgICBMYXlv
dXRTaXplIG9mZnNldFRvQmxvY2tCZWZvcmU7CiAgICAgaWYgKFJlbmRlckJsb2NrKiBibG9jayA9
IHJvb3RCb3guYmxvY2tGbG93KCkuYmxvY2tCZWZvcmVXaXRoaW5TZWxlY3Rpb25Sb290KG9mZnNl
dFRvQmxvY2tCZWZvcmUpKSB7Ci0gICAgICAgIGlmIChibG9jay0+aXNSZW5kZXJCbG9ja0Zsb3co
KSkgewotICAgICAgICAgICAgaWYgKFJvb3RJbmxpbmVCb3gqIGxhc3RMaW5lID0gdG9SZW5kZXJC
bG9ja0Zsb3coYmxvY2spLT5sYXN0Um9vdEJveCgpKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJC
bG9ja0Zsb3c+KCpibG9jaykpIHsKKyAgICAgICAgICAgIGlmIChSb290SW5saW5lQm94KiBsYXN0
TGluZSA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKmJsb2NrKS5sYXN0Um9vdEJveCgpKSB7
CiAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBsYXN0TGluZVNl
bGVjdGlvblN0YXRlID0gbGFzdExpbmUtPnNlbGVjdGlvblN0YXRlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25J
bnNpZGUgJiYgbGFzdExpbmVTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
blN0YXJ0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9wOwpAQCAtNjc4LDcgKzY3OCw3
IEBAIGludCBSb290SW5saW5lQm94OjpibG9ja0RpcmVjdGlvblBvaW50SW5MaW5lKCkgY29uc3QK
IAogUmVuZGVyQmxvY2tGbG93JiBSb290SW5saW5lQm94OjpibG9ja0Zsb3coKSBjb25zdAogewot
ICAgIHJldHVybiB0b1JlbmRlckJsb2NrRmxvdyhyZW5kZXJlcigpKTsKKyAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlcigpKTsKIH0KIAogc3RhdGljIGJvb2wgaXNF
ZGl0YWJsZUxlYWYoSW5saW5lQm94KiBsZWFmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCmluZGV4IDYwYWJmYjI5NGYx
YmJkNzAyMTlmZGZlZWIxMjYzY2Y1ZDI4OTk4NzIuLjZhN2MzYjFkYjQyZjM4MzQxYTViMDJiOTQy
MjFmZjNhNzUxMDQwY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIGNv
bGxlY3RGbG93T3ZlcmZsb3coUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBMYXlvdXQmIGxh
eW91dCkKIAogSW50UmVjdCBjb21wdXRlVGV4dEJvdW5kaW5nQm94KGNvbnN0IFJlbmRlclRleHQm
IHRleHRSZW5kZXJlciwgY29uc3QgTGF5b3V0JiBsYXlvdXQpCiB7Ci0gICAgYXV0byByZXNvbHZl
ciA9IGxpbmVSZXNvbHZlcih0b1JlbmRlckJsb2NrRmxvdygqdGV4dFJlbmRlcmVyLnBhcmVudCgp
KSwgbGF5b3V0KTsKKyAgICBhdXRvIHJlc29sdmVyID0gbGluZVJlc29sdmVyKGRvd25jYXN0PFJl
bmRlckJsb2NrRmxvdz4oKnRleHRSZW5kZXJlci5wYXJlbnQoKSksIGxheW91dCk7CiAgICAgYXV0
byBpdCA9IHJlc29sdmVyLmJlZ2luKCk7CiAgICAgYXV0byBlbmQgPSByZXNvbHZlci5lbmQoKTsK
ICAgICBpZiAoaXQgPT0gZW5kKQpAQCAtMTY3LDcgKzE2Nyw3IEBAIEludFJlY3QgY29tcHV0ZVRl
eHRCb3VuZGluZ0JveChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IExheW91
dCYgbGF5CiAKIEludFBvaW50IGNvbXB1dGVUZXh0Rmlyc3RSdW5Mb2NhdGlvbihjb25zdCBSZW5k
ZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IExheW91dCYgbGF5b3V0KQogewotICAgIGF1dG8g
cmVzb2x2ZXIgPSBydW5SZXNvbHZlcih0b1JlbmRlckJsb2NrRmxvdygqdGV4dFJlbmRlcmVyLnBh
cmVudCgpKSwgbGF5b3V0KTsKKyAgICBhdXRvIHJlc29sdmVyID0gcnVuUmVzb2x2ZXIoZG93bmNh
c3Q8UmVuZGVyQmxvY2tGbG93PigqdGV4dFJlbmRlcmVyLnBhcmVudCgpKSwgbGF5b3V0KTsKICAg
ICBhdXRvIGJlZ2luID0gcmVzb2x2ZXIuYmVnaW4oKTsKICAgICBpZiAoYmVnaW4gPT0gcmVzb2x2
ZXIuZW5kKCkpCiAgICAgICAgIHJldHVybiBJbnRQb2ludCgpOwpAQCAtMTc3LDcgKzE3Nyw3IEBA
IEludFBvaW50IGNvbXB1dGVUZXh0Rmlyc3RSdW5Mb2NhdGlvbihjb25zdCBSZW5kZXJUZXh0JiB0
ZXh0UmVuZGVyZXIsIGNvbnN0IExheW91CiBWZWN0b3I8SW50UmVjdD4gY29sbGVjdFRleHRBYnNv
bHV0ZVJlY3RzKGNvbnN0IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwgY29uc3QgTGF5b3V0JiBs
YXlvdXQsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKICAgICBWZWN0
b3I8SW50UmVjdD4gcmVjdHM7Ci0gICAgYXV0byByZXNvbHZlciA9IHJ1blJlc29sdmVyKHRvUmVu
ZGVyQmxvY2tGbG93KCp0ZXh0UmVuZGVyZXIucGFyZW50KCkpLCBsYXlvdXQpOworICAgIGF1dG8g
cmVzb2x2ZXIgPSBydW5SZXNvbHZlcihkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0ZXh0UmVu
ZGVyZXIucGFyZW50KCkpLCBsYXlvdXQpOwogICAgIGZvciAoYXV0byBpdCA9IHJlc29sdmVyLmJl
Z2luKCksIGVuZCA9IHJlc29sdmVyLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
Y29uc3QgYXV0byYgcnVuID0gKml0OwogICAgICAgICBhdXRvIHJlY3QgPSBydW4ucmVjdCgpOwpA
QCAtMTg5LDcgKzE4OSw3IEBAIFZlY3RvcjxJbnRSZWN0PiBjb2xsZWN0VGV4dEFic29sdXRlUmVj
dHMoY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBMCiBWZWN0b3I8RmxvYXRR
dWFkPiBjb2xsZWN0VGV4dEFic29sdXRlUXVhZHMoY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRl
cmVyLCBjb25zdCBMYXlvdXQmIGxheW91dCwgYm9vbCogd2FzRml4ZWQpCiB7CiAgICAgVmVjdG9y
PEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgYXV0byByZXNvbHZlciA9IHJ1blJlc29sdmVyKHRvUmVu
ZGVyQmxvY2tGbG93KCp0ZXh0UmVuZGVyZXIucGFyZW50KCkpLCBsYXlvdXQpOworICAgIGF1dG8g
cmVzb2x2ZXIgPSBydW5SZXNvbHZlcihkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCp0ZXh0UmVu
ZGVyZXIucGFyZW50KCkpLCBsYXlvdXQpOwogICAgIGZvciAoYXV0byBpdCA9IHJlc29sdmVyLmJl
Z2luKCksIGVuZCA9IHJlc29sdmVyLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
Y29uc3QgYXV0byYgcnVuID0gKml0OwogICAgICAgICBhdXRvIHJlY3QgPSBydW4ucmVjdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCmluZGV4IGU0
Njg0MTZlN2VhNjhhZGMxNGZmOWJhZmM1MDRlMTlhOTYwMWVhNjUuLmNmZDZjMTIxOTA5YjU4YTI2
MjMzNmYwZGM2NzAzNGYxNDc0ZTg3OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRRdWVyeS5jcHAKQEAgLTUwLDEyICs1MCwxMiBAQCBzdHJ1Y3QgU1ZHVGV4dFF1
ZXJ5OjpEYXRhIHsKIHN0YXRpYyBpbmxpbmUgSW5saW5lRmxvd0JveCogZmxvd0JveEZvclJlbmRl
cmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKHJlbmRlcmVy
LT5pc1JlbmRlckJsb2NrRmxvdygpKSB7CisgICAgaWYgKGlzPFJlbmRlckJsb2NrRmxvdz4oKnJl
bmRlcmVyKSkgewogICAgICAgICAvLyBJZiB3ZSdyZSBnaXZlbiBhIGJsb2NrIGVsZW1lbnQsIGl0
IGhhcyB0byBiZSBhIFJlbmRlclNWR1RleHQuCi0gICAgICAgIEFTU0VSVChyZW5kZXJlci0+aXNT
VkdUZXh0KCkpOwotICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIHJlbmRlckJsb2NrID0gdG9SZW5k
ZXJCbG9ja0Zsb3coKnJlbmRlcmVyKTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlclNWR1RleHQ+
KCpyZW5kZXJlcikpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIHJlbmRlckJsb2NrID0gZG93
bmNhc3Q8UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpOwogCiAgICAgICAgIC8vIFJlbmRlclNW
R1RleHQgb25seSBldmVyIGNvbnRhaW5zIGEgc2luZ2xlIGxpbmUgYm94LgogICAgICAgICBhdXRv
IGZsb3dCb3ggPSByZW5kZXJCbG9jay5maXJzdFJvb3RCb3goKTsKQEAgLTYzLDkgKzYzLDkgQEAg
c3RhdGljIGlubGluZSBJbmxpbmVGbG93Qm94KiBmbG93Qm94Rm9yUmVuZGVyZXIoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZsb3dCb3g7CiAgICAgfQogCi0gICAgaWYg
KHJlbmRlcmVyLT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgaWYgKGlzPFJlbmRlcklubGluZT4o
KnJlbmRlcmVyKSkgewogICAgICAgICAvLyBXZSdyZSBnaXZlbiBhIFJlbmRlclNWR0lubGluZSBv
ciBvYmplY3RzIHRoYXQgZGVyaXZlIGZyb20gaXQgKFJlbmRlclNWR1RTcGFuIC8gUmVuZGVyU1ZH
VGV4dFBhdGgpCi0gICAgICAgIFJlbmRlcklubGluZSYgcmVuZGVySW5saW5lID0gdG9SZW5kZXJJ
bmxpbmUoKnJlbmRlcmVyKTsKKyAgICAgICAgUmVuZGVySW5saW5lJiByZW5kZXJJbmxpbmUgPSBk
b3duY2FzdDxSZW5kZXJJbmxpbmU+KCpyZW5kZXJlcik7CiAKICAgICAgICAgLy8gUmVuZGVyU1ZH
SW5saW5lIG9ubHkgZXZlciBjb250YWlucyBhIHNpbmdsZSBsaW5lIGJveC4KICAgICAgICAgSW5s
aW5lRmxvd0JveCogZmxvd0JveCA9IHJlbmRlcklubGluZS5maXJzdExpbmVCb3goKTsKQEAgLTc0
LDcgKzc0LDcgQEAgc3RhdGljIGlubGluZSBJbmxpbmVGbG93Qm94KiBmbG93Qm94Rm9yUmVuZGVy
ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogU1ZHVGV4dFF1
ZXJ5OjpTVkdUZXh0UXVlcnkoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
</data>

          </attachment>
      

    </bug>

</bugzilla>