<?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>141707</bug_id>
          
          <creation_ts>2015-02-17 09:27:33 -0800</creation_ts>
          <short_desc>Minor RenderTable* class cleanups.</short_desc>
          <delta_ts>2015-02-17 14:41:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1069852</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-02-17 09:27:33 -0800</bug_when>
    <thetext>Moving things around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069857</commentid>
    <comment_count>1</comment_count>
      <attachid>246744</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-02-17 09:32:56 -0800</bug_when>
    <thetext>Created attachment 246744
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069862</commentid>
    <comment_count>2</comment_count>
      <attachid>246747</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-02-17 09:47:03 -0800</bug_when>
    <thetext>Created attachment 246747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069951</commentid>
    <comment_count>3</comment_count>
      <attachid>246747</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-02-17 14:35:09 -0800</bug_when>
    <thetext>Comment on attachment 246747
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069954</commentid>
    <comment_count>4</comment_count>
      <attachid>246747</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-17 14:41:37 -0800</bug_when>
    <thetext>Comment on attachment 246747
Patch

Clearing flags on attachment: 246747

Committed r180241: &lt;http://trac.webkit.org/changeset/180241&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069955</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-17 14:41:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246744</attachid>
            <date>2015-02-17 09:32:56 -0800</date>
            <delta_ts>2015-02-17 09:47:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141707-20150217093249.patch</filename>
            <type>text/plain</type>
            <size>44415</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDk1YzNlYTY1NGNiN2Ew
MmMzMmE2MTM5MjYyYzc2OGY2NzQwN2FjYS4uMTNjYTQ0MDFiMTU5OTRhZTg4ZWQ1MGM5YTIzZjgw
OWQwYmI1NDM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE1LTAyLTE3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWlub3IgUmVuZGVyVGFibGUq
IGNsYXNzIGNsZWFudXBzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQxNzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXNlIGluLWNsYXNzIGluaXRpYWxpemVyIHdoZXJlIHBvc3NpYmxlLgorICAgICAg
ICBSZW1vdmUgcmVkdW5kYW50IGNvZGUuCisgICAgICAgIE1vdmUgbXVsdGlsaW5lIGltcGxlbWVu
dGF0aW9ucyBvdXQgb2YgY2xhc3MgZGVjbGFyYXRpb24uCisKKyAgICAgICAgTm8gY2hhbmdlIGlu
IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2FwdGlvbjo6aW5zZXJ0ZWRJbnRv
VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNhcHRpb246OndpbGxCZVJlbW92
ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNhcHRpb246OmNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6UmVuZGVy
VGFibGVDZWxsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbFNwYW4pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVDZWxsOjpyb3dTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ2VsbDo6c2V0Q29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29s
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2VjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ2VsbDo6cm93SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
ZWxsOjpzdHlsZU9yQ29sTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ2VsbDo6bG9naWNhbEhlaWdodEZvclJvd1NpemluZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OmlzQmFzZWxpbmVBbGlnbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ2VsbDo6Ym9yZGVyQWRqb2luaW5nVGFibGVTdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckFkam9pbmluZ1RhYmxlRW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQWRqb2luaW5nQ2VsbEJlZm9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckFkam9pbmluZ0NlbGxBZnRl
cik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ29sOjpSZW5kZXJUYWJsZUNvbCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6
ZW5jbG9zaW5nQ29sdW1uR3JvdXBJZkFkamFjZW50QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ29sOjplbmNsb3NpbmdDb2x1bW5Hcm91cElmQWRqYWNlbnRBZnRlcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93Lmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVJvdzo6c2V0Um93SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVSb3c6OnJvd0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojpib3Jk
ZXJBZGpvaW5pbmdUYWJsZVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93
Ojpib3JkZXJBZGpvaW5pbmdUYWJsZUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZVJvdzo6dGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpmaXJz
dFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Omxhc3RSb3cpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0aWVkUm93cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmRpcnRpZWRDb2x1bW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q2VsbFNwYW46OkNlbGxTcGFu
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Ym9yZGVyQWRqb2luaW5n
VGFibGVTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmJvcmRl
ckFkam9pbmluZ1RhYmxlRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlv
bjo6Y2VsbEF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cHJpbWFy
eUNlbGxBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJvd1JlbmRl
cmVyQXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpvdXRlckJvcmRl
ckxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpvdXRlckJvcmRl
clJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6b3V0ZXJCb3Jk
ZXJUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpvdXRlckJvcmRl
ckJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om51bVJvd3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZWNhbGNDZWxsc0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cm93QmFzZWxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpmdWxsVGFibGVSb3dTcGFu
KToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxTcGFuOjpzdGFydCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDZWxsU3Bhbjo6ZW5kKTogRGVsZXRlZC4KKwogMjAxNS0wMi0xNSAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBleHBlcmltZW50YWwgPGF0dGFj
aG1lbnQ+IGVsZW1lbnQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDYXB0aW9uLmNwcAppbmRleCA0NDI5NDRlOTdmM2FkOTIyN2E0NDU4NzAxZWUyYTAx
NjM0NTA2NjYyLi4wNWM4NDZmYWQzNTVlZTI5MDc3MjNkZjJjMDhhOWZjNGM2OGRkZmJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcApAQCAt
MzMsMjMgKzMzLDE1IEBAIFJlbmRlclRhYmxlQ2FwdGlvbjo6flJlbmRlclRhYmxlQ2FwdGlvbigp
CiB7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyVGFibGVDYXB0aW9uOjpjb250YWluaW5nQmxvY2tM
b2dpY2FsV2lkdGhGb3JDb250ZW50KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCbG9jayogY2IgPSBj
b250YWluaW5nQmxvY2soKTsKLSAgICByZXR1cm4gY2ItPmxvZ2ljYWxXaWR0aCgpOwotfQotCiB2
b2lkIFJlbmRlclRhYmxlQ2FwdGlvbjo6aW5zZXJ0ZWRJbnRvVHJlZSgpCiB7CiAgICAgUmVuZGVy
QmxvY2tGbG93OjppbnNlcnRlZEludG9UcmVlKCk7Ci0KICAgICB0YWJsZSgpLT5hZGRDYXB0aW9u
KHRoaXMpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlQ2FwdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21U
cmVlKCkKIHsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpOwot
CiAgICAgdGFibGUoKS0+cmVtb3ZlQ2FwdGlvbih0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5oCmluZGV4IDQ2NTA2MjU1YjBjMGFhMDk4
ZjJlYjBkOTM5NTMzNDU1MDNhOGM2NTYuLmVlNjE0MjYyYTVhNTg1OGMyY2QzNDBjZjFhZDFlMGJh
Y2NmNGIyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNhcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0
aW9uLmgKQEAgLTMzLDcgKzMzLDcgQEAgcHVibGljOgogCiAgICAgRWxlbWVudCYgZWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7
IH0KIAotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhG
b3JDb250ZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBjb250YWluaW5nQmxvY2soKS0+bG9naWNhbFdpZHRoKCk7IH0KICAgICAKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIGlzVGFibGVDYXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApp
bmRleCA0NzVhZjQxMDQ4MTE0ZGRkMTNkYzllNGYzNTNkYzE0NTUwMmY4MGRkLi44NmU5ZDYxNjA3
MzBmNzM4NjJmYzVlZGQ4Y2ZkZmRlMzZjMGNiNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNTgsOCArNTgsOCBAQCBSZW5kZXJUYWJsZUNl
bGw6OlJlbmRlclRhYmxlQ2VsbChFbGVtZW50JiBlbGVtZW50LCBSZWY8UmVuZGVyU3R5bGU+JiYg
c3R5bGUpCiAgICAgOiBSZW5kZXJCbG9ja0Zsb3coZWxlbWVudCwgV1RGOjptb3ZlKHN0eWxlKSkK
ICAgICAsIG1fY29sdW1uKHVuc2V0Q29sdW1uSW5kZXgpCiAgICAgLCBtX2NlbGxXaWR0aENoYW5n
ZWQoZmFsc2UpCi0gICAgLCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmUoMCkKLSAgICAsIG1faW50
cmluc2ljUGFkZGluZ0FmdGVyKDApCisgICAgLCBtX2hhc0NvbFNwYW4oZmFsc2UpCisgICAgLCBt
X2hhc1Jvd1NwYW4oZmFsc2UpCiB7CiAgICAgLy8gV2Ugb25seSB1cGRhdGUgdGhlIGZsYWdzIHdo
ZW4gbm90aWZpZWQgb2YgRE9NIGNoYW5nZXMgaW4gY29sU3Bhbk9yUm93U3BhbkNoYW5nZWQoKQog
ICAgIC8vIHNvIHdlIG5lZWQgdG8gc2V0IHRoZWlyIGluaXRpYWwgdmFsdWVzIGhlcmUgaW4gY2Fz
ZSBzb21ldGhpbmcgYXNrcyBmb3IgY29sU3BhbigpL3Jvd1NwYW4oKSBiZWZvcmUgdGhlbi4KQEAg
LTcyLDggKzcyLDYgQEAgUmVuZGVyVGFibGVDZWxsOjpSZW5kZXJUYWJsZUNlbGwoRG9jdW1lbnQm
IGRvY3VtZW50LCBSZWY8UmVuZGVyU3R5bGU+JiYgc3R5bGUpCiAgICAgLCBtX2NlbGxXaWR0aENo
YW5nZWQoZmFsc2UpCiAgICAgLCBtX2hhc0NvbFNwYW4oZmFsc2UpCiAgICAgLCBtX2hhc1Jvd1Nw
YW4oZmFsc2UpCi0gICAgLCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmUoMCkKLSAgICAsIG1faW50
cmluc2ljUGFkZGluZ0FmdGVyKDApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuaAppbmRleCBlYmE1MTJjNjBhN2I0YWIyYjM1ZDljMjEzMmYyMmUyZDVk
MzdhZWJlLi44M2ExYzRlOTllOGQ3MWU2ZjNmYmRlZDY2NzUyZDRkNDY0ZDQ2ZjIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCkBAIC00MSw4NCArNDEsMjQg
QEAgcHVibGljOgogICAgIFJlbmRlclRhYmxlQ2VsbChFbGVtZW50JiwgUmVmPFJlbmRlclN0eWxl
PiYmKTsKICAgICBSZW5kZXJUYWJsZUNlbGwoRG9jdW1lbnQmLCBSZWY8UmVuZGVyU3R5bGU+JiYp
OwogICAgIAotICAgIHVuc2lnbmVkIGNvbFNwYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KCFtX2hhc0NvbFNwYW4pCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgcmV0dXJuIHBh
cnNlQ29sU3BhbkZyb21ET00oKTsKLSAgICB9Ci0gICAgdW5zaWduZWQgcm93U3BhbigpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIW1faGFzUm93U3BhbikKLSAgICAgICAgICAgIHJldHVybiAx
OwotICAgICAgICByZXR1cm4gcGFyc2VSb3dTcGFuRnJvbURPTSgpOwotICAgIH0KKyAgICB1bnNp
Z25lZCBjb2xTcGFuKCkgY29uc3Q7CisgICAgdW5zaWduZWQgcm93U3BhbigpIGNvbnN0OwogCiAg
ICAgLy8gQ2FsbGVkIGZyb20gSFRNTFRhYmxlQ2VsbEVsZW1lbnQuCiAgICAgdm9pZCBjb2xTcGFu
T3JSb3dTcGFuQ2hhbmdlZCgpOwogCi0gICAgdm9pZCBzZXRDb2wodW5zaWduZWQgY29sdW1uKQot
ICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKGNvbHVtbiA+IG1heENvbHVtbkluZGV4KSkKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgbV9jb2x1bW4gPSBjb2x1bW47Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgY29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2NvbHVt
biAhPSB1bnNldENvbHVtbkluZGV4KTsKLSAgICAgICAgcmV0dXJuIG1fY29sdW1uOwotICAgIH0K
KyAgICB2b2lkIHNldENvbCh1bnNpZ25lZCBjb2x1bW4pOworICAgIHVuc2lnbmVkIGNvbCgpIGNv
bnN0OwogCiAgICAgUmVuZGVyVGFibGVDZWxsKiBuZXh0Q2VsbCgpIGNvbnN0OwogICAgIFJlbmRl
clRhYmxlQ2VsbCogcHJldmlvdXNDZWxsKCkgY29uc3Q7CiAKICAgICBSZW5kZXJUYWJsZVJvdyog
cm93KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KHBhcmVudCgpKTsg
fQotICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBSZW5kZXJUYWJsZVJvdyogcm93ID0gdGhpcy0+cm93KCk7Ci0gICAgICAgIGlmICghcm93KQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJUYWJsZVNlY3Rpb24+KHJvdy0+cGFyZW50KCkpOwotICAgIH0KLSAgICBSZW5kZXJUYWJsZSog
dGFibGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9u
ID0gdGhpcy0+c2VjdGlvbigpOwotICAgICAgICBpZiAoIXNlY3Rpb24pCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlPihzZWN0
aW9uLT5wYXJlbnQoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcm93SW5kZXgoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgY2FsbGVkIG9uIGEg
ZGV0YWNoZWQgY2VsbC4KLSAgICAgICAgQVNTRVJUKHJvdygpKTsKLSAgICAgICAgcmV0dXJuIHJv
dygpLT5yb3dJbmRleCgpOwotICAgIH0KLQotICAgIExlbmd0aCBzdHlsZU9yQ29sTG9naWNhbFdp
ZHRoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIExlbmd0aCBzdHlsZVdpZHRoID0gc3R5bGUoKS5s
b2dpY2FsV2lkdGgoKTsKLSAgICAgICAgaWYgKCFzdHlsZVdpZHRoLmlzQXV0bygpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0eWxlV2lkdGg7Ci0gICAgICAgIGlmIChSZW5kZXJUYWJsZUNvbCogZmly
c3RDb2x1bW4gPSB0YWJsZSgpLT5jb2xFbGVtZW50KGNvbCgpKSkKLSAgICAgICAgICAgIHJldHVy
biBsb2dpY2FsV2lkdGhGcm9tQ29sdW1ucyhmaXJzdENvbHVtbiwgc3R5bGVXaWR0aCk7Ci0gICAg
ICAgIHJldHVybiBzdHlsZVdpZHRoOwotICAgIH0KLQotICAgIGludCBsb2dpY2FsSGVpZ2h0Rm9y
Um93U2l6aW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9u
IGRvZXMgdG9vIG11Y2ggd29yaywgYW5kIGlzIHZlcnkgaG90IGR1cmluZyB0YWJsZSBsYXlvdXQh
Ci0gICAgICAgIGludCBhZGp1c3RlZExvZ2ljYWxIZWlnaHQgPSBwaXhlbFNuYXBwZWRMb2dpY2Fs
SGVpZ2h0KCkgLSAoaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpICsgaW50cmluc2ljUGFkZGluZ0Fm
dGVyKCkpOwotICAgICAgICBpbnQgc3R5bGVMb2dpY2FsSGVpZ2h0ID0gdmFsdWVGb3JMZW5ndGgo
c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCksIDApOwotICAgICAgICAvLyBJbiBzdHJpY3QgbW9kZSwg
Ym94LXNpemluZzogY29udGVudC1ib3ggZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBhY3R1YWxseSBh
ZGQgaW4gdGhlIGJvcmRlciBhbmQgcGFkZGluZy4KLSAgICAgICAgLy8gQ2FsbCBjb21wdXRlZENT
U1BhZGRpbmcqIGRpcmVjdGx5IHRvIGF2b2lkIGluY2x1ZGluZyBpbXBsaWNpdFBhZGRpbmcuCi0g
ICAgICAgIGlmICghZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSAmJiBzdHlsZSgpLmJveFNpemlu
ZygpICE9IEJPUkRFUl9CT1gpCi0gICAgICAgICAgICBzdHlsZUxvZ2ljYWxIZWlnaHQgKz0gKGNv
bXB1dGVkQ1NTUGFkZGluZ0JlZm9yZSgpICsgY29tcHV0ZWRDU1NQYWRkaW5nQWZ0ZXIoKSkuZmxv
b3IoKSArIChib3JkZXJCZWZvcmUoKSArIGJvcmRlckFmdGVyKCkpLmZsb29yKCk7Ci0gICAgICAg
IHJldHVybiBzdGQ6Om1heChzdHlsZUxvZ2ljYWxIZWlnaHQsIGFkanVzdGVkTG9naWNhbEhlaWdo
dCk7Ci0gICAgfQotCisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3Q7Cisg
ICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgcm93SW5kZXgoKSBj
b25zdDsKKyAgICBMZW5ndGggc3R5bGVPckNvbExvZ2ljYWxXaWR0aCgpIGNvbnN0OworICAgIGlu
dCBsb2dpY2FsSGVpZ2h0Rm9yUm93U2l6aW5nKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldENlbGxM
b2dpY2FsV2lkdGgoaW50IGNvbnN0cmFpbmVkTG9naWNhbFdpZHRoKTsKIApAQCAtMTQyLDExICs4
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyRWxlbWVudCogYmFja2dyb3VuZE9iamVj
dCk7CiAKICAgICBMYXlvdXRVbml0IGNlbGxCYXNlbGluZVBvc2l0aW9uKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0Jhc2VsaW5lQWxpZ25lZCgpIGNvbnN0IAotICAgIHsgCi0gICAgICAgIEVWZXJ0aWNh
bEFsaWduIHZhID0gc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7Ci0gICAgICAgIHJldHVybiB2YSA9
PSBCQVNFTElORSB8fCB2YSA9PSBURVhUX0JPVFRPTSB8fCB2YSA9PSBURVhUX1RPUCB8fCB2YSA9
PSBTVVBFUiB8fCB2YSA9PSBTVUIgfHwgdmEgPT0gTEVOR1RIOyAKLSAgICB9CisgICAgYm9vbCBp
c0Jhc2VsaW5lQWxpZ25lZCgpIGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlSW50cmluc2ljUGFk
ZGluZyhpbnQgcm93SGVpZ2h0KTsKICAgICB2b2lkIGNsZWFySW50cmluc2ljUGFkZGluZygpIHsg
c2V0SW50cmluc2ljUGFkZGluZygwLCAwKTsgfQpAQCAtMTczLDYwICsxMDksMjMgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0Q2VsbFdpZHRoQ2hhbmdlZChib29sIGIgPSB0cnVlKSB7IG1fY2VsbFdp
ZHRoQ2hhbmdlZCA9IGI7IH0KIAogICAgIHN0YXRpYyBSZW5kZXJUYWJsZUNlbGwqIGNyZWF0ZUFu
b255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICB2aXJ0
dWFsIFJlbmRlckJveCogY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVu
ZGVyT2JqZWN0KiBwYXJlbnQpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4g
Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKHBhcmVudCk7Ci0gICAgfQorICAgIHZp
cnR1YWwgUmVuZGVyQm94KiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBS
ZW5kZXJPYmplY3QqIHBhcmVudCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gY3JlYXRlQW5vbnlt
b3VzV2l0aFBhcmVudFJlbmRlcmVyKHBhcmVudCk7IH0KIAogICAgIC8vIFRoaXMgZnVuY3Rpb24g
aXMgdXNlZCB0byB1bmlmeSB3aGljaCB0YWJsZSBwYXJ0J3Mgc3R5bGUgd2UgdXNlIGZvciBjb21w
dXRpbmcgZGlyZWN0aW9uIGFuZAogICAgIC8vIHdyaXRpbmcgbW9kZS4gV3JpdGluZyBtb2RlcyBh
cmUgbm90IGFsbG93ZWQgb24gcm93IGdyb3VwIGFuZCByb3cgYnV0IGRpcmVjdGlvbiBpcy4KICAg
ICAvLyBUaGlzIG1lYW5zIHdlIGNhbiBzYWZlbHkgdXNlIHRoZSBzYW1lIHN0eWxlIGluIGFsbCBj
YXNlcyB0byBzaW1wbGlmeSBvdXIgY29kZS4KICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0aGlz
IGZ1bmN0aW9uIHNob3VsZCByZXBsYWNlZCBieSBzdHlsZSgpIG9uY2Ugd2Ugc3VwcG9ydCBkaXJl
Y3Rpb24KICAgICAvLyBvbiBhbGwgdGFibGUgcGFydHMgYW5kIHdyaXRpbmctbW9kZSBvbiBjZWxs
cy4KLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVGb3JDZWxsRmxvdygpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gcm93KCktPnN0eWxlKCk7Ci0gICAgfQotCi0gICAgY29uc3QgQm9y
ZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzRmlyc3RPckxhc3RDZWxsSW5Sb3coKSk7Ci0gICAgICAgIGlmIChzZWN0aW9u
KCktPmhhc1NhbWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBzdHls
ZSgpLmJvcmRlclN0YXJ0KCk7Ci0KLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7
Ci0gICAgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZUZvckNlbGxGbG93KCkgY29uc3Qg
eyByZXR1cm4gcm93KCktPnN0eWxlKCk7IH0KIAotICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3Jk
ZXJBZGpvaW5pbmdUYWJsZUVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNGaXJz
dE9yTGFzdENlbGxJblJvdygpKTsKLSAgICAgICAgaWYgKHNlY3Rpb24oKS0+aGFzU2FtZURpcmVj
dGlvbkFzKHRhYmxlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7
Ci0KLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyU3RhcnQoKTsKLSAgICB9Ci0KLSAgICBj
b25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nQ2VsbEJlZm9yZShjb25zdCBSZW5kZXJU
YWJsZUNlbGwqIGNlbGwpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGNlbGwsIHRhYmxl
KCktPmNlbGxBZnRlcihjZWxsKSA9PSB0aGlzKTsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzc5MjcyIC0gQWRkIHN1cHBvcnQgZm9yIG1peGVkIGRpcmVjdGlvbmFsaXR5
IGF0IHRoZSBjZWxsIGxldmVsLgotICAgICAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJTdGFydCgp
OwotICAgIH0KLQotICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdDZWxsQWZ0
ZXIoY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChjZWxsLCB0YWJsZSgpLT5jZWxsQmVmb3JlKGNlbGwpID09IHRoaXMpOwotICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly93ZWJraXQub3JnL2IvNzkyNzIgLSBBZGQgc3VwcG9ydCBmb3IgbWl4
ZWQgZGlyZWN0aW9uYWxpdHkgYXQgdGhlIGNlbGwgbGV2ZWwuCi0gICAgICAgIHJldHVybiBzdHls
ZSgpLmJvcmRlckVuZCgpOwotICAgIH0KKyAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRq
b2luaW5nVGFibGVTdGFydCgpIGNvbnN0OworICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJB
ZGpvaW5pbmdUYWJsZUVuZCgpIGNvbnN0OworICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJB
ZGpvaW5pbmdDZWxsQmVmb3JlKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCopOworICAgIGNvbnN0IEJv
cmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdDZWxsQWZ0ZXIoY29uc3QgUmVuZGVyVGFibGVDZWxs
Kik7CiAKICAgICB1c2luZyBSZW5kZXJCbG9ja0Zsb3c6Om5vZGVBdFBvaW50OwotCiAjaWZuZGVm
IE5ERUJVRwotICAgIGJvb2wgaXNGaXJzdE9yTGFzdENlbGxJblJvdygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gIXRhYmxlKCktPmNlbGxBZnRlcih0aGlzKSB8fCAhdGFibGUoKS0+Y2Vs
bEJlZm9yZSh0aGlzKTsKLSAgICB9CisgICAgYm9vbCBpc0ZpcnN0T3JMYXN0Q2VsbEluUm93KCkg
Y29uc3QgeyByZXR1cm4gIXRhYmxlKCktPmNlbGxBZnRlcih0aGlzKSB8fCAhdGFibGUoKS0+Y2Vs
bEJlZm9yZSh0aGlzKTsgfQogI2VuZGlmCiAgICAgCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMzA0LDggKzIwMyw4IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9jZWxsV2lkdGhDaGFuZ2VkIDogMTsKICAgICB1bnNpZ25l
ZCBtX2hhc0NvbFNwYW46IDE7CiAgICAgdW5zaWduZWQgbV9oYXNSb3dTcGFuOiAxOwotICAgIGlu
dCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmU7Ci0gICAgaW50IG1faW50cmluc2ljUGFkZGluZ0Fm
dGVyOworICAgIGludCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmUgeyAwIH07CisgICAgaW50IG1f
aW50cmluc2ljUGFkZGluZ0FmdGVyIHsgMCB9OwogfTsKIAogaW5saW5lIFJlbmRlclRhYmxlQ2Vs
bCogUmVuZGVyVGFibGVDZWxsOjpuZXh0Q2VsbCgpIGNvbnN0CkBAIC0zMTgsNiArMjE3LDExNiBA
QCBpbmxpbmUgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZUNlbGw6OnByZXZpb3VzQ2VsbCgp
IGNvbnN0CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oUmVuZGVyQmxvY2tG
bG93OjpwcmV2aW91c1NpYmxpbmcoKSk7CiB9CiAKK2lubGluZSB1bnNpZ25lZCBSZW5kZXJUYWJs
ZUNlbGw6OmNvbFNwYW4oKSBjb25zdAoreworICAgIGlmICghbV9oYXNDb2xTcGFuKQorICAgICAg
ICByZXR1cm4gMTsKKyAgICByZXR1cm4gcGFyc2VDb2xTcGFuRnJvbURPTSgpOworfQorCitpbmxp
bmUgdW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpyb3dTcGFuKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1faGFzUm93U3BhbikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIHBhcnNlUm93U3Bh
bkZyb21ET00oKTsKK30KKworaW5saW5lIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpzZXRDb2wodW5z
aWduZWQgY29sdW1uKQoreworICAgIGlmIChVTkxJS0VMWShjb2x1bW4gPiBtYXhDb2x1bW5JbmRl
eCkpCisgICAgICAgIENSQVNIKCk7CisgICAgbV9jb2x1bW4gPSBjb2x1bW47Cit9CisKK2lubGlu
ZSB1bnNpZ25lZCBSZW5kZXJUYWJsZUNlbGw6OmNvbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
Y29sdW1uICE9IHVuc2V0Q29sdW1uSW5kZXgpOworICAgIHJldHVybiBtX2NvbHVtbjsKK30KKwor
aW5saW5lIFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGVDZWxsOjpzZWN0aW9uKCkgY29u
c3QKK3sKKyAgICBSZW5kZXJUYWJsZVJvdyogcm93ID0gdGhpcy0+cm93KCk7CisgICAgaWYgKCFy
b3cpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJU
YWJsZVNlY3Rpb24+KHJvdy0+cGFyZW50KCkpOworfQorCitpbmxpbmUgUmVuZGVyVGFibGUqIFJl
bmRlclRhYmxlQ2VsbDo6dGFibGUoKSBjb25zdAoreworICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
c2VjdGlvbiA9IHRoaXMtPnNlY3Rpb24oKTsKKyAgICBpZiAoIXNlY3Rpb24pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZT4oc2VjdGlvbi0+
cGFyZW50KCkpOworfQorCitpbmxpbmUgdW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpyb3dJbmRl
eCgpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgY2FsbGVkIG9u
IGEgZGV0YWNoZWQgY2VsbC4KKyAgICBBU1NFUlQocm93KCkpOworICAgIHJldHVybiByb3coKS0+
cm93SW5kZXgoKTsKK30KKworaW5saW5lIExlbmd0aCBSZW5kZXJUYWJsZUNlbGw6OnN0eWxlT3JD
b2xMb2dpY2FsV2lkdGgoKSBjb25zdAoreworICAgIExlbmd0aCBzdHlsZVdpZHRoID0gc3R5bGUo
KS5sb2dpY2FsV2lkdGgoKTsKKyAgICBpZiAoIXN0eWxlV2lkdGguaXNBdXRvKCkpCisgICAgICAg
IHJldHVybiBzdHlsZVdpZHRoOworICAgIGlmIChSZW5kZXJUYWJsZUNvbCogZmlyc3RDb2x1bW4g
PSB0YWJsZSgpLT5jb2xFbGVtZW50KGNvbCgpKSkKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0
aEZyb21Db2x1bW5zKGZpcnN0Q29sdW1uLCBzdHlsZVdpZHRoKTsKKyAgICByZXR1cm4gc3R5bGVX
aWR0aDsKK30KKworaW5saW5lIGludCBSZW5kZXJUYWJsZUNlbGw6OmxvZ2ljYWxIZWlnaHRGb3JS
b3dTaXppbmcoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXMgdG9v
IG11Y2ggd29yaywgYW5kIGlzIHZlcnkgaG90IGR1cmluZyB0YWJsZSBsYXlvdXQhCisgICAgaW50
IGFkanVzdGVkTG9naWNhbEhlaWdodCA9IHBpeGVsU25hcHBlZExvZ2ljYWxIZWlnaHQoKSAtIChp
bnRyaW5zaWNQYWRkaW5nQmVmb3JlKCkgKyBpbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSk7CisgICAg
aW50IHN0eWxlTG9naWNhbEhlaWdodCA9IHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubG9naWNhbEhl
aWdodCgpLCAwKTsKKyAgICAvLyBJbiBzdHJpY3QgbW9kZSwgYm94LXNpemluZzogY29udGVudC1i
b3ggZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBhY3R1YWxseSBhZGQgaW4gdGhlIGJvcmRlciBhbmQg
cGFkZGluZy4KKyAgICAvLyBDYWxsIGNvbXB1dGVkQ1NTUGFkZGluZyogZGlyZWN0bHkgdG8gYXZv
aWQgaW5jbHVkaW5nIGltcGxpY2l0UGFkZGluZy4KKyAgICBpZiAoIWRvY3VtZW50KCkuaW5RdWly
a3NNb2RlKCkgJiYgc3R5bGUoKS5ib3hTaXppbmcoKSAhPSBCT1JERVJfQk9YKQorICAgICAgICBz
dHlsZUxvZ2ljYWxIZWlnaHQgKz0gKGNvbXB1dGVkQ1NTUGFkZGluZ0JlZm9yZSgpICsgY29tcHV0
ZWRDU1NQYWRkaW5nQWZ0ZXIoKSkuZmxvb3IoKSArIChib3JkZXJCZWZvcmUoKSArIGJvcmRlckFm
dGVyKCkpLmZsb29yKCk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0eWxlTG9naWNhbEhlaWdodCwg
YWRqdXN0ZWRMb2dpY2FsSGVpZ2h0KTsKK30KKworaW5saW5lIGJvb2wgUmVuZGVyVGFibGVDZWxs
Ojppc0Jhc2VsaW5lQWxpZ25lZCgpIGNvbnN0Cit7CisgICAgRVZlcnRpY2FsQWxpZ24gdmEgPSBz
dHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKKyAgICByZXR1cm4gdmEgPT0gQkFTRUxJTkUgfHwgdmEg
PT0gVEVYVF9CT1RUT00gfHwgdmEgPT0gVEVYVF9UT1AgfHwgdmEgPT0gU1VQRVIgfHwgdmEgPT0g
U1VCIHx8IHZhID09IExFTkdUSDsKK30KKworaW5saW5lIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5k
ZXJUYWJsZUNlbGw6OmJvcmRlckFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25zdAoreworICAgIEFT
U0VSVChpc0ZpcnN0T3JMYXN0Q2VsbEluUm93KCkpOworICAgIGlmIChzZWN0aW9uKCktPmhhc1Nh
bWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyU3Rh
cnQoKTsKKworICAgIHJldHVybiBzdHlsZSgpLmJvcmRlckVuZCgpOworfQorCitpbmxpbmUgY29u
c3QgQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQWRqb2luaW5nVGFibGVFbmQo
KSBjb25zdAoreworICAgIEFTU0VSVChpc0ZpcnN0T3JMYXN0Q2VsbEluUm93KCkpOworICAgIGlm
IChzZWN0aW9uKCktPmhhc1NhbWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJu
IHN0eWxlKCkuYm9yZGVyRW5kKCk7CisKKyAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJTdGFydCgp
OworfQorCitpbmxpbmUgY29uc3QgQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVy
QWRqb2luaW5nQ2VsbEJlZm9yZShjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpCit7CisgICAg
QVNTRVJUX1VOVVNFRChjZWxsLCB0YWJsZSgpLT5jZWxsQWZ0ZXIoY2VsbCkgPT0gdGhpcyk7Cisg
ICAgLy8gRklYTUU6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzc5MjcyIC0gQWRkIHN1cHBvcnQgZm9y
IG1peGVkIGRpcmVjdGlvbmFsaXR5IGF0IHRoZSBjZWxsIGxldmVsLgorICAgIHJldHVybiBzdHls
ZSgpLmJvcmRlclN0YXJ0KCk7Cit9CisKK2lubGluZSBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVy
VGFibGVDZWxsOjpib3JkZXJBZGpvaW5pbmdDZWxsQWZ0ZXIoY29uc3QgUmVuZGVyVGFibGVDZWxs
KiBjZWxsKQoreworICAgIEFTU0VSVF9VTlVTRUQoY2VsbCwgdGFibGUoKS0+Y2VsbEJlZm9yZShj
ZWxsKSA9PSB0aGlzKTsKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly93ZWJraXQub3JnL2IvNzkyNzIg
LSBBZGQgc3VwcG9ydCBmb3IgbWl4ZWQgZGlyZWN0aW9uYWxpdHkgYXQgdGhlIGNlbGwgbGV2ZWwu
CisgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7Cit9CisKIGlubGluZSBSZW5kZXJUYWJs
ZUNlbGwqIFJlbmRlclRhYmxlUm93OjpmaXJzdENlbGwoKSBjb25zdAogewogICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KFJlbmRlckJveDo6Zmlyc3RDaGlsZCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCmluZGV4IGY3YTllZTc1MWZi
ZTY4YWI2ZDQ0ODBkZmY4ODQxYzZlMzc3NzYxZGUuLjE0OTk3MWJmZTFiYjRmOTQzZGM4MDE0YmRi
NTE4MDFmMGI0NGE4ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q29sLmNwcApAQCAtMzksNyArMzksNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBS
ZW5kZXJUYWJsZUNvbDo6UmVuZGVyVGFibGVDb2woRWxlbWVudCYgZWxlbWVudCwgUmVmPFJlbmRl
clN0eWxlPiYmIHN0eWxlKQogICAgIDogUmVuZGVyQm94KGVsZW1lbnQsIFdURjo6bW92ZShzdHls
ZSksIDApCi0gICAgLCBtX3NwYW4oMSkKIHsKICAgICAvLyBpbml0IFJlbmRlck9iamVjdCBhdHRy
aWJ1dGVzCiAgICAgc2V0SW5saW5lKHRydWUpOyAvLyBvdXIgb2JqZWN0IGlzIG5vdCBJbmxpbmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKaW5kZXggYzYxZTFlYjAy
MWQwNGQ2NWEzZThiYWI0ZjYwMmNhNDZmNWMwNzQ1OS4uODQ1NzIxNzRlNWM2Yzc0MjVkZGM4YWJi
ZGM3YzU2NmM4YzU2NTg5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q29sLmgKQEAgLTQ4LDIwICs0OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzVGFibGVDb2x1bW5H
cm91cCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTl9H
Uk9VUDsgfQogCiAgICAgUmVuZGVyVGFibGVDb2wqIGVuY2xvc2luZ0NvbHVtbkdyb3VwKCkgY29u
c3Q7Ci0gICAgUmVuZGVyVGFibGVDb2wqIGVuY2xvc2luZ0NvbHVtbkdyb3VwSWZBZGphY2VudEJl
Zm9yZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nKCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0NvbHVtbkdyb3VwKCk7
Ci0gICAgfQotCi0gICAgUmVuZGVyVGFibGVDb2wqIGVuY2xvc2luZ0NvbHVtbkdyb3VwSWZBZGph
Y2VudEFmdGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChuZXh0U2libGluZygpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBlbmNsb3NpbmdDb2x1bW5Hcm91cCgp
OwotICAgIH0KLQorICAgIFJlbmRlclRhYmxlQ29sKiBlbmNsb3NpbmdDb2x1bW5Hcm91cElmQWRq
YWNlbnRCZWZvcmUoKSBjb25zdDsKKyAgICBSZW5kZXJUYWJsZUNvbCogZW5jbG9zaW5nQ29sdW1u
R3JvdXBJZkFkamFjZW50QWZ0ZXIoKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdGhlIG5leHQg
Y29sdW1uIG9yIGNvbHVtbi1ncm91cC4KICAgICBSZW5kZXJUYWJsZUNvbCogbmV4dENvbHVtbigp
IGNvbnN0OwpAQCAtOTcsOSArODUsMjMgQEAgcHJpdmF0ZToKIAogICAgIFJlbmRlclRhYmxlKiB0
YWJsZSgpIGNvbnN0OwogCi0gICAgdW5zaWduZWQgbV9zcGFuOworICAgIHVuc2lnbmVkIG1fc3Bh
biB7IDEgfTsKIH07CiAKK2lubGluZSBSZW5kZXJUYWJsZUNvbCogUmVuZGVyVGFibGVDb2w6OmVu
Y2xvc2luZ0NvbHVtbkdyb3VwSWZBZGphY2VudEJlZm9yZSgpIGNvbnN0Cit7CisgICAgaWYgKHBy
ZXZpb3VzU2libGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZW5j
bG9zaW5nQ29sdW1uR3JvdXAoKTsKK30KKworaW5saW5lIFJlbmRlclRhYmxlQ29sKiBSZW5kZXJU
YWJsZUNvbDo6ZW5jbG9zaW5nQ29sdW1uR3JvdXBJZkFkamFjZW50QWZ0ZXIoKSBjb25zdAorewor
ICAgIGlmIChuZXh0U2libGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gZW5jbG9zaW5nQ29sdW1uR3JvdXAoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyVGFibGVDb2wsIGlz
UmVuZGVyVGFibGVDb2woKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVJvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmgKaW5kZXggZTgyMzYwODkyMGJkOTM5YzM2ZjFmNDFkMjE0NWIyOTAwNmI4ZDRlNi4uYWI1MGQx
NTljZmYyZTgwMjhmMjllZTdhYzA5NWM3ZGFhN2IwNTdmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKQEAgLTQ4LDQ0ICs0OCwxNCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwYWludE91dGxpbmVGb3JSb3dJZk5lZWRlZChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYpOwogCiAgICAgc3RhdGljIFJlbmRlclRhYmxlUm93KiBjcmVhdGVBbm9ueW1vdXNXaXRo
UGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCBSZW5kZXJC
b3gqIGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlck9iamVjdCog
cGFyZW50KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUFub255
bW91c1dpdGhQYXJlbnRSZW5kZXJlcihwYXJlbnQpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Um93
SW5kZXgodW5zaWduZWQgcm93SW5kZXgpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkocm93
SW5kZXggPiBtYXhSb3dJbmRleCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIG1f
cm93SW5kZXggPSByb3dJbmRleDsKLSAgICB9CisgICAgdmlydHVhbCBSZW5kZXJCb3gqIGNyZWF0
ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlck9iamVjdCogcGFyZW50KSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIo
cGFyZW50KTsgfQogCisgICAgdm9pZCBzZXRSb3dJbmRleCh1bnNpZ25lZCk7CiAgICAgYm9vbCBy
b3dJbmRleFdhc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fcm93SW5kZXggIT0gdW5zZXRSb3dJbmRl
eDsgfQotICAgIHVuc2lnbmVkIHJvd0luZGV4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChyb3dJbmRleFdhc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fcm93SW5kZXg7Ci0gICAgfQot
Ci0gICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gdGhpcy0+c2Vj
dGlvbigpOwotICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uLT5oYXNTYW1lRGlyZWN0aW9u
QXModGFibGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJTdGFydCgpOwot
Ci0gICAgICAgIHJldHVybiBzdHlsZSgpLmJvcmRlckVuZCgpOwotICAgIH0KLQotICAgIGNvbnN0
IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdUYWJsZUVuZCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0aGlzLT5zZWN0aW9uKCk7Ci0gICAg
ICAgIGlmIChzZWN0aW9uICYmIHNlY3Rpb24tPmhhc1NhbWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkK
LSAgICAgICAgICAgIHJldHVybiBzdHlsZSgpLmJvcmRlckVuZCgpOwotCi0gICAgICAgIHJldHVy
biBzdHlsZSgpLmJvcmRlclN0YXJ0KCk7Ci0gICAgfQorICAgIHVuc2lnbmVkIHJvd0luZGV4KCkg
Y29uc3Q7CiAKKyAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nVGFibGVTdGFy
dCgpIGNvbnN0OworICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdUYWJsZUVu
ZCgpIGNvbnN0OwogICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdTdGFydENl
bGwoY29uc3QgUmVuZGVyVGFibGVDZWxsKikgY29uc3Q7CiAgICAgY29uc3QgQm9yZGVyVmFsdWUm
IGJvcmRlckFkam9pbmluZ0VuZENlbGwoY29uc3QgUmVuZGVyVGFibGVDZWxsKikgY29uc3Q7CiAK
QEAgLTEyMiwyMiArOTIsNDEgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3Jvd0luZGV4IDog
MzE7CiB9OwogCi1pbmxpbmUgUmVuZGVyVGFibGUqIFJlbmRlclRhYmxlUm93Ojp0YWJsZSgpIGNv
bnN0Cit2b2lkIFJlbmRlclRhYmxlUm93OjpzZXRSb3dJbmRleCh1bnNpZ25lZCByb3dJbmRleCkK
K3sKKyAgICBpZiAoVU5MSUtFTFkocm93SW5kZXggPiBtYXhSb3dJbmRleCkpCisgICAgICAgIENS
QVNIKCk7CisgICAgbV9yb3dJbmRleCA9IHJvd0luZGV4OworfQorCitpbmxpbmUgdW5zaWduZWQg
UmVuZGVyVGFibGVSb3c6OnJvd0luZGV4KCkgY29uc3QKK3sKKyAgICBBU1NFUlQocm93SW5kZXhX
YXNTZXQoKSk7CisgICAgcmV0dXJuIG1fcm93SW5kZXg7Cit9CisKK2lubGluZSBjb25zdCBCb3Jk
ZXJWYWx1ZSYgUmVuZGVyVGFibGVSb3c6OmJvcmRlckFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25z
dAogewogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHRoaXMtPnNlY3Rpb24oKTsK
LSAgICBpZiAoIXNlY3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJUYWJsZT4oc2VjdGlvbi0+cGFyZW50KCkpOworICAgIGlmIChzZWN0aW9u
ICYmIHNlY3Rpb24tPmhhc1NhbWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJu
IHN0eWxlKCkuYm9yZGVyU3RhcnQoKTsKKyAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJFbmQoKTsK
IH0KIAotaW5saW5lIFJlbmRlclRhYmxlUm93KiBSZW5kZXJUYWJsZVNlY3Rpb246OmZpcnN0Um93
KCkgY29uc3QKK2lubGluZSBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyVGFibGVSb3c6OmJvcmRl
ckFkam9pbmluZ1RhYmxlRW5kKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
VGFibGVSb3c+KFJlbmRlckJveDo6Zmlyc3RDaGlsZCgpKTsKKyAgICBSZW5kZXJUYWJsZVNlY3Rp
b24qIHNlY3Rpb24gPSB0aGlzLT5zZWN0aW9uKCk7CisgICAgaWYgKHNlY3Rpb24gJiYgc2VjdGlv
bi0+aGFzU2FtZURpcmVjdGlvbkFzKHRhYmxlKCkpKQorICAgICAgICByZXR1cm4gc3R5bGUoKS5i
b3JkZXJFbmQoKTsKKyAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJTdGFydCgpOwogfQogCi1pbmxp
bmUgUmVuZGVyVGFibGVSb3cqIFJlbmRlclRhYmxlU2VjdGlvbjo6bGFzdFJvdygpIGNvbnN0Citp
bmxpbmUgUmVuZGVyVGFibGUqIFJlbmRlclRhYmxlUm93Ojp0YWJsZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlUm93PihSZW5kZXJCb3g6Omxhc3RDaGlsZCgpKTsK
KyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0aGlzLT5zZWN0aW9uKCk7CisgICAg
aWYgKCFzZWN0aW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyVGFibGU+KHNlY3Rpb24tPnBhcmVudCgpKTsKIH0KIAogaW5saW5lIFJlbmRlclRh
YmxlUm93KiBSZW5kZXJUYWJsZVJvdzo6bmV4dFJvdygpIGNvbnN0CkBAIC0xNTAsNiArMTM5LDE2
IEBAIGlubGluZSBSZW5kZXJUYWJsZVJvdyogUmVuZGVyVGFibGVSb3c6OnByZXZpb3VzUm93KCkg
Y29uc3QKICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KFJlbmRlckJveDo6cHJl
dmlvdXNTaWJsaW5nKCkpOwogfQogCitpbmxpbmUgUmVuZGVyVGFibGVSb3cqIFJlbmRlclRhYmxl
U2VjdGlvbjo6Zmlyc3RSb3coKSBjb25zdAoreworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJU
YWJsZVJvdz4oUmVuZGVyQm94OjpmaXJzdENoaWxkKCkpOworfQorCitpbmxpbmUgUmVuZGVyVGFi
bGVSb3cqIFJlbmRlclRhYmxlU2VjdGlvbjo6bGFzdFJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlclRhYmxlUm93PihSZW5kZXJCb3g6Omxhc3RDaGlsZCgpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9P
QkpFQ1QoUmVuZGVyVGFibGVSb3csIGlzVGFibGVSb3coKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggZDJmYzRjYzg3N2RmMjYyN2Ez
NWYyNzc4NDJkYzdlYzU1OTEwZTVjNi4uYzE2NzU5ZTZlMjFmNGNkNmMwZWYwMmU3ODdmNmYxNGI3
Mjk1ZjIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAKQEAgLTg0LDI4ICs4NCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlTG9n
aWNhbEhlaWdodEZvckNlbGwoUmVuZGVyVGFibGVTZWN0aW9uOjpSb3dTdHJ1Y3QmIHJvdwogCiBS
ZW5kZXJUYWJsZVNlY3Rpb246OlJlbmRlclRhYmxlU2VjdGlvbihFbGVtZW50JiBlbGVtZW50LCBS
ZWY8UmVuZGVyU3R5bGU+JiYgc3R5bGUpCiAgICAgOiBSZW5kZXJCb3goZWxlbWVudCwgV1RGOjpt
b3ZlKHN0eWxlKSwgMCkKLSAgICAsIG1fY0NvbCgwKQotICAgICwgbV9jUm93KDApCi0gICAgLCBt
X291dGVyQm9yZGVyU3RhcnQoMCkKLSAgICAsIG1fb3V0ZXJCb3JkZXJFbmQoMCkKLSAgICAsIG1f
b3V0ZXJCb3JkZXJCZWZvcmUoMCkKLSAgICAsIG1fb3V0ZXJCb3JkZXJBZnRlcigwKQotICAgICwg
bV9uZWVkc0NlbGxSZWNhbGMoZmFsc2UpCi0gICAgLCBtX2hhc011bHRpcGxlQ2VsbExldmVscyhm
YWxzZSkKIHsKICAgICBzZXRJbmxpbmUoZmFsc2UpOwogfQogCiBSZW5kZXJUYWJsZVNlY3Rpb246
OlJlbmRlclRhYmxlU2VjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxSZW5kZXJTdHlsZT4m
JiBzdHlsZSkKICAgICA6IFJlbmRlckJveChkb2N1bWVudCwgV1RGOjptb3ZlKHN0eWxlKSwgMCkK
LSAgICAsIG1fY0NvbCgwKQotICAgICwgbV9jUm93KDApCi0gICAgLCBtX291dGVyQm9yZGVyU3Rh
cnQoMCkKLSAgICAsIG1fb3V0ZXJCb3JkZXJFbmQoMCkKLSAgICAsIG1fb3V0ZXJCb3JkZXJCZWZv
cmUoMCkKLSAgICAsIG1fb3V0ZXJCb3JkZXJBZnRlcigwKQotICAgICwgbV9uZWVkc0NlbGxSZWNh
bGMoZmFsc2UpCi0gICAgLCBtX2hhc011bHRpcGxlQ2VsbExldmVscyhmYWxzZSkKIHsKICAgICBz
ZXRJbmxpbmUoZmFsc2UpOwogfQpAQCAtMTA0NCwxMSArMTAyOCwxMSBAQCBDZWxsU3BhbiBSZW5k
ZXJUYWJsZVNlY3Rpb246OmRpcnRpZWRSb3dzKGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3Qp
IGNvbnN0CiAgICAgQ2VsbFNwYW4gY292ZXJlZFJvd3MgPSBzcGFubmVkUm93cyhkYW1hZ2VSZWN0
LCBJbmNsdWRlQWxsSW50ZXJzZWN0aW5nQ2VsbHMpOwogCiAgICAgLy8gVG8gcmVwYWludCB0aGUg
Ym9yZGVyIHdlIG1pZ2h0IG5lZWQgdG8gcmVwYWludCBmaXJzdCBvciBsYXN0IHJvdyBldmVuIGlm
IHRoZXkgYXJlIG5vdCBzcGFubmVkIHRoZW1zZWx2ZXMuCi0gICAgaWYgKGNvdmVyZWRSb3dzLnN0
YXJ0KCkgPj0gbV9yb3dQb3Muc2l6ZSgpIC0gMSAmJiBtX3Jvd1Bvc1ttX3Jvd1Bvcy5zaXplKCkg
LSAxXSArIHRhYmxlKCktPm91dGVyQm9yZGVyQWZ0ZXIoKSA+PSBkYW1hZ2VSZWN0LnkoKSkKLSAg
ICAgICAgLS1jb3ZlcmVkUm93cy5zdGFydCgpOworICAgIGlmIChjb3ZlcmVkUm93cy5zdGFydCA+
PSBtX3Jvd1Bvcy5zaXplKCkgLSAxICYmIG1fcm93UG9zW21fcm93UG9zLnNpemUoKSAtIDFdICsg
dGFibGUoKS0+b3V0ZXJCb3JkZXJBZnRlcigpID49IGRhbWFnZVJlY3QueSgpKQorICAgICAgICAt
LWNvdmVyZWRSb3dzLnN0YXJ0OwogCi0gICAgaWYgKCFjb3ZlcmVkUm93cy5lbmQoKSAmJiBtX3Jv
d1Bvc1swXSAtIHRhYmxlKCktPm91dGVyQm9yZGVyQmVmb3JlKCkgPD0gZGFtYWdlUmVjdC5tYXhZ
KCkpCi0gICAgICAgICsrY292ZXJlZFJvd3MuZW5kKCk7CisgICAgaWYgKCFjb3ZlcmVkUm93cy5l
bmQgJiYgbV9yb3dQb3NbMF0gLSB0YWJsZSgpLT5vdXRlckJvcmRlckJlZm9yZSgpIDw9IGRhbWFn
ZVJlY3QubWF4WSgpKQorICAgICAgICArK2NvdmVyZWRSb3dzLmVuZDsKIAogICAgIHJldHVybiBj
b3ZlcmVkUm93czsKIH0KQEAgLTEwNjIsMTEgKzEwNDYsMTEgQEAgQ2VsbFNwYW4gUmVuZGVyVGFi
bGVTZWN0aW9uOjpkaXJ0aWVkQ29sdW1ucyhjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KSBj
b25zdAogCiAgICAgY29uc3QgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVt
blBvc2l0aW9ucygpOwogICAgIC8vIFRvIHJlcGFpbnQgdGhlIGJvcmRlciB3ZSBtaWdodCBuZWVk
IHRvIHJlcGFpbnQgZmlyc3Qgb3IgbGFzdCBjb2x1bW4gZXZlbiBpZiB0aGV5IGFyZSBub3Qgc3Bh
bm5lZCB0aGVtc2VsdmVzLgotICAgIGlmIChjb3ZlcmVkQ29sdW1ucy5zdGFydCgpID49IGNvbHVt
blBvcy5zaXplKCkgLSAxICYmIGNvbHVtblBvc1tjb2x1bW5Qb3Muc2l6ZSgpIC0gMV0gKyB0YWJs
ZSgpLT5vdXRlckJvcmRlckVuZCgpID49IGRhbWFnZVJlY3QueCgpKQotICAgICAgICAtLWNvdmVy
ZWRDb2x1bW5zLnN0YXJ0KCk7CisgICAgaWYgKGNvdmVyZWRDb2x1bW5zLnN0YXJ0ID49IGNvbHVt
blBvcy5zaXplKCkgLSAxICYmIGNvbHVtblBvc1tjb2x1bW5Qb3Muc2l6ZSgpIC0gMV0gKyB0YWJs
ZSgpLT5vdXRlckJvcmRlckVuZCgpID49IGRhbWFnZVJlY3QueCgpKQorICAgICAgICAtLWNvdmVy
ZWRDb2x1bW5zLnN0YXJ0OwogCi0gICAgaWYgKCFjb3ZlcmVkQ29sdW1ucy5lbmQoKSAmJiBjb2x1
bW5Qb3NbMF0gLSB0YWJsZSgpLT5vdXRlckJvcmRlclN0YXJ0KCkgPD0gZGFtYWdlUmVjdC5tYXhY
KCkpCi0gICAgICAgICsrY292ZXJlZENvbHVtbnMuZW5kKCk7CisgICAgaWYgKCFjb3ZlcmVkQ29s
dW1ucy5lbmQgJiYgY29sdW1uUG9zWzBdIC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJTdGFydCgpIDw9
IGRhbWFnZVJlY3QubWF4WCgpKQorICAgICAgICArK2NvdmVyZWRDb2x1bW5zLmVuZDsKIAogICAg
IHJldHVybiBjb3ZlcmVkQ29sdW1uczsKIH0KQEAgLTEyNTMsMTcgKzEyMzcsMTcgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGEKICAgICBDZWxsU3BhbiBkaXJ0aWVkUm93cyA9IHRoaXMtPmRpcnRp
ZWRSb3dzKHRhYmxlQWxpZ25lZFJlY3QpOwogICAgIENlbGxTcGFuIGRpcnRpZWRDb2x1bW5zID0g
dGhpcy0+ZGlydGllZENvbHVtbnModGFibGVBbGlnbmVkUmVjdCk7CiAKLSAgICBpZiAoZGlydGll
ZENvbHVtbnMuc3RhcnQoKSA8IGRpcnRpZWRDb2x1bW5zLmVuZCgpKSB7CisgICAgaWYgKGRpcnRp
ZWRDb2x1bW5zLnN0YXJ0IDwgZGlydGllZENvbHVtbnMuZW5kKSB7CiAgICAgICAgIGlmICghbV9o
YXNNdWx0aXBsZUNlbGxMZXZlbHMgJiYgIW1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkpIHsKICAg
ICAgICAgICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNvbGxhcHNlZFRhYmxl
Qm9yZGVycykgewogICAgICAgICAgICAgICAgIC8vIENvbGxhcHNlZCBib3JkZXJzIGFyZSBwYWlu
dGVkIGZyb20gdGhlIGJvdHRvbSByaWdodCB0byB0aGUgdG9wIGxlZnQgc28gdGhhdCBwcmVjZWRl
bmNlCiAgICAgICAgICAgICAgICAgLy8gZHVlIHRvIGNlbGwgcG9zaXRpb24gaXMgcmVzcGVjdGVk
LiBXZSBuZWVkIHRvIHBhaW50IG9uZSByb3cgYmV5b25kIHRoZSB0b3Btb3N0IGRpcnRpZWQKICAg
ICAgICAgICAgICAgICAvLyByb3cgdG8gY2FsY3VsYXRlIGl0cyBjb2xsYXBzZWQgYm9yZGVyIHZh
bHVlLgotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0Um93ID0gZGlydGllZFJvd3Muc3Rh
cnQoKSA/IGRpcnRpZWRSb3dzLnN0YXJ0KCkgLSAxIDogMDsKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHIgPSBkaXJ0aWVkUm93cy5lbmQoKTsgciA+IHN0YXJ0Um93OyByLS0pIHsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydFJvdyA9IGRpcnRpZWRSb3dzLnN0YXJ0ID8gZGly
dGllZFJvd3Muc3RhcnQgLSAxIDogMDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIg
PSBkaXJ0aWVkUm93cy5lbmQ7IHIgPiBzdGFydFJvdzsgci0tKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHJvdyA9IHIgLSAxOwogICAgICAgICAgICAgICAgICAgICBib29sIHNob3Vs
ZFBhaW50Um93R3JvdXBCb3JkZXIgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBjID0gZGlydGllZENvbHVtbnMuZW5kKCk7IGMgPiBkaXJ0aWVkQ29sdW1ucy5zdGFy
dCgpOyBjLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gZGlydGll
ZENvbHVtbnMuZW5kOyBjID4gZGlydGllZENvbHVtbnMuc3RhcnQ7IGMtLSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY29sID0gYyAtIDE7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBDZWxsU3RydWN0JiBjdXJyZW50ID0gY2VsbEF0KHJvdywgY29sKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJlbnQucHJpbWFyeUNlbGwo
KTsKQEAgLTEyNzUsNyArMTI1OSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9i
amVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkUGFpbnRSb3dHcm91cEJvcmRlciA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJvdyA+IGRpcnRpZWRSb3dzLnN0
YXJ0KCkgJiYgcHJpbWFyeUNlbGxBdChyb3cgLSAxLCBjb2wpID09IGNlbGwpIHx8IChjb2wgPiBk
aXJ0aWVkQ29sdW1ucy5zdGFydCgpICYmIHByaW1hcnlDZWxsQXQocm93LCBjb2wgLSAxKSA9PSBj
ZWxsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocm93ID4gZGlydGllZFJvd3Muc3Rh
cnQgJiYgcHJpbWFyeUNlbGxBdChyb3cgLSAxLCBjb2wpID09IGNlbGwpIHx8IChjb2wgPiBkaXJ0
aWVkQ29sdW1ucy5zdGFydCAmJiBwcmltYXJ5Q2VsbEF0KHJvdywgY29sIC0gMSkgPT0gY2VsbCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhZCBhIHJ1biBvZiBu
dWxsIGNlbGxzIHBhaW50IHRoZWlyIGNvcnJlc3BvbmRpbmcgc2VjdGlvbiBvZiB0aGUgcm93IGdy
b3VwJ3MgYm9yZGVyIGlmIG5lY2Vzc2FyeS4gTm90ZSB0aGF0CkBAIC0xMjk0LDE0ICsxMjc4LDE0
IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBEcmF3IHRoZSBkaXJ0eSBjZWxscyBpbiB0
aGUgb3JkZXIgdGhhdCB0aGV5IGFwcGVhci4KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHIgPSBkaXJ0aWVkUm93cy5zdGFydCgpOyByIDwgZGlydGllZFJvd3MuZW5kKCk7IHIrKykgewor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgciA9IGRpcnRpZWRSb3dzLnN0YXJ0OyByIDwg
ZGlydGllZFJvd3MuZW5kOyByKyspIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVS
b3cqIHJvdyA9IG1fZ3JpZFtyXS5yb3dSZW5kZXJlcjsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHJvdyAmJiAhcm93LT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgcm93LT5wYWludE91dGxpbmVGb3JSb3dJZk5lZWRlZChwYWludEluZm8sIHBhaW50T2Zm
c2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gZGlydGllZENvbHVt
bnMuc3RhcnQoKTsgYyA8IGRpcnRpZWRDb2x1bW5zLmVuZCgpOyBjKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gZGlydGllZENvbHVtbnMuc3RhcnQ7IGMgPCBkaXJ0
aWVkQ29sdW1ucy5lbmQ7IGMrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgQ2VsbFN0cnVj
dCYgY3VycmVudCA9IGNlbGxBdChyLCBjKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clRhYmxlQ2VsbCogY2VsbCA9IGN1cnJlbnQucHJpbWFyeUNlbGwoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghY2VsbCB8fCAociA+IGRpcnRpZWRSb3dzLnN0YXJ0KCkgJiYgcHJpbWFy
eUNlbGxBdChyIC0gMSwgYykgPT0gY2VsbCkgfHwgKGMgPiBkaXJ0aWVkQ29sdW1ucy5zdGFydCgp
ICYmIHByaW1hcnlDZWxsQXQociwgYyAtIDEpID09IGNlbGwpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFjZWxsIHx8IChyID4gZGlydGllZFJvd3Muc3RhcnQgJiYgcHJpbWFyeUNlbGxB
dChyIC0gMSwgYykgPT0gY2VsbCkgfHwgKGMgPiBkaXJ0aWVkQ29sdW1ucy5zdGFydCAmJiBwcmlt
YXJ5Q2VsbEF0KHIsIGMgLSAxKSA9PSBjZWxsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50Q2VsbChjZWxsLCBwYWlu
dEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTMyMSwxMSAr
MTMwNSwxMSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogCiAgICAgICAgICAgICBIYXNoU2V0
PFJlbmRlclRhYmxlQ2VsbCo+IHNwYW5uaW5nQ2VsbHM7CiAKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgciA9IGRpcnRpZWRSb3dzLnN0YXJ0KCk7IHIgPCBkaXJ0aWVkUm93cy5lbmQoKTsgcisr
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSBkaXJ0aWVkUm93cy5zdGFydDsgciA8
IGRpcnRpZWRSb3dzLmVuZDsgcisrKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVSb3cq
IHJvdyA9IG1fZ3JpZFtyXS5yb3dSZW5kZXJlcjsKICAgICAgICAgICAgICAgICBpZiAocm93ICYm
ICFyb3ctPmhhc1NlbGZQYWludGluZ0xheWVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHJvdy0+
cGFpbnRPdXRsaW5lRm9yUm93SWZOZWVkZWQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjID0gZGlydGllZENvbHVtbnMuc3RhcnQoKTsgYyA8
IGRpcnRpZWRDb2x1bW5zLmVuZCgpOyBjKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGMgPSBkaXJ0aWVkQ29sdW1ucy5zdGFydDsgYyA8IGRpcnRpZWRDb2x1bW5zLmVuZDsgYysr
KSB7CiAgICAgICAgICAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQociwg
Yyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNTM1LDggKzE1MTksOCBAQCBib29sIFJl
bmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bAogICAgIENlbGxTcGFuIGNvbHVtblNwYW4gPSBzcGFubmVkQ29sdW1u
cyh0YWJsZUFsaWduZWRSZWN0LCBEb05vdEluY2x1ZGVBbGxJbnRlcnNlY3RpbmdDZWxscyk7CiAK
ICAgICAvLyBOb3cgaXRlcmF0ZSBvdmVyIHRoZSBzcGFubmVkIHJvd3MgYW5kIGNvbHVtbnMuCi0g
ICAgZm9yICh1bnNpZ25lZCBoaXRSb3cgPSByb3dTcGFuLnN0YXJ0KCk7IGhpdFJvdyA8IHJvd1Nw
YW4uZW5kKCk7ICsraGl0Um93KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaGl0Q29sdW1uID0g
Y29sdW1uU3Bhbi5zdGFydCgpOyBoaXRDb2x1bW4gPCBjb2x1bW5TcGFuLmVuZCgpOyArK2hpdENv
bHVtbikgeworICAgIGZvciAodW5zaWduZWQgaGl0Um93ID0gcm93U3Bhbi5zdGFydDsgaGl0Um93
IDwgcm93U3Bhbi5lbmQ7ICsraGl0Um93KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaGl0Q29s
dW1uID0gY29sdW1uU3Bhbi5zdGFydDsgaGl0Q29sdW1uIDwgY29sdW1uU3Bhbi5lbmQ7ICsraGl0
Q29sdW1uKSB7CiAgICAgICAgICAgICBDZWxsU3RydWN0JiBjdXJyZW50ID0gY2VsbEF0KGhpdFJv
dywgaGl0Q29sdW1uKTsKIAogICAgICAgICAgICAgLy8gSWYgdGhlIGNlbGwgaXMgZW1wdHksIHRo
ZXJlJ3Mgbm90aGluZyB0byBkbwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5oCmluZGV4IGU4ODA4M2MxZTRjMGI0MjQ0YTA1ZWQwZjYyZmM0ZmQ2NDViMjZm
Y2EuLjQzZTc4ODg5N2FlMDJjYjFjMTJjZTczNzE1ODg4OWE0ZDYxMzZlYTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKQEAgLTMwLDYgKzMwLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJUYWJsZUNlbGw7CiBjbGFz
cyBSZW5kZXJUYWJsZVJvdzsKIAogZW51bSBDb2xsYXBzZWRCb3JkZXJTaWRlIHsKQEAgLTQwLDI4
ICs0MSwxOCBAQCBlbnVtIENvbGxhcHNlZEJvcmRlclNpZGUgewogfTsKIAogLy8gSGVscGVyIGNs
YXNzIGZvciBwYWludE9iamVjdC4KLWNsYXNzIENlbGxTcGFuIHsKK3N0cnVjdCBDZWxsU3BhbiB7
CiBwdWJsaWM6CiAgICAgQ2VsbFNwYW4odW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKLSAg
ICAgICAgOiBtX3N0YXJ0KHN0YXJ0KQotICAgICAgICAsIG1fZW5kKGVuZCkKKyAgICAgICAgOiBz
dGFydChzdGFydCkKKyAgICAgICAgLCBlbmQoZW5kKQogICAgIHsKICAgICB9CiAKLSAgICB1bnNp
Z25lZCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICB1bnNpZ25lZCBlbmQo
KSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQotCi0gICAgdW5zaWduZWQmIHN0YXJ0KCkgeyByZXR1
cm4gbV9zdGFydDsgfQotICAgIHVuc2lnbmVkJiBlbmQoKSB7IHJldHVybiBtX2VuZDsgfQotCi1w
cml2YXRlOgotICAgIHVuc2lnbmVkIG1fc3RhcnQ7Ci0gICAgdW5zaWduZWQgbV9lbmQ7CisgICAg
dW5zaWduZWQgc3RhcnQ7CisgICAgdW5zaWduZWQgZW5kOwogfTsKIAotY2xhc3MgUmVuZGVyVGFi
bGVDZWxsOwotY2xhc3MgUmVuZGVyVGFibGVSb3c7Ci0KIGNsYXNzIFJlbmRlclRhYmxlU2VjdGlv
biBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCb3ggewogcHVibGljOgogICAgIFJlbmRlclRhYmxlU2Vj
dGlvbihFbGVtZW50JiwgUmVmPFJlbmRlclN0eWxlPiYmKTsKQEAgLTg1LDg3ICs3NiwzMyBAQCBw
dWJsaWM6CiAKICAgICBzdHJ1Y3QgQ2VsbFN0cnVjdCB7CiAgICAgICAgIFZlY3RvcjxSZW5kZXJU
YWJsZUNlbGwqLCAxPiBjZWxsczsgCi0gICAgICAgIGJvb2wgaW5Db2xTcGFuOyAvLyB0cnVlIGZv
ciBjb2x1bW5zIGFmdGVyIHRoZSBmaXJzdCBpbiBhIGNvbHNwYW4KLQotICAgICAgICBDZWxsU3Ry
dWN0KCkKLSAgICAgICAgICAgIDogaW5Db2xTcGFuKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIHByaW1hcnlDZWxsKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGhhc0NlbGxzKCkgPyBjZWxsc1tjZWxscy5zaXplKCkgLSAxXSA6
IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBSZW5kZXJUYWJsZUNlbGwqIHByaW1hcnlD
ZWxsKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGhhc0NlbGxzKCkgPyBj
ZWxsc1tjZWxscy5zaXplKCkgLSAxXSA6IDA7Ci0gICAgICAgIH0KKyAgICAgICAgYm9vbCBpbkNv
bFNwYW4geyBmYWxzZSB9OyAvLyB0cnVlIGZvciBjb2x1bW5zIGFmdGVyIHRoZSBmaXJzdCBpbiBh
IGNvbHNwYW4KIAorICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIHByaW1hcnlDZWxsKCkgeyByZXR1
cm4gaGFzQ2VsbHMoKSA/IGNlbGxzW2NlbGxzLnNpemUoKSAtIDFdIDogMDsgfQorICAgICAgICBj
b25zdCBSZW5kZXJUYWJsZUNlbGwqIHByaW1hcnlDZWxsKCkgY29uc3QgeyByZXR1cm4gaGFzQ2Vs
bHMoKSA/IGNlbGxzW2NlbGxzLnNpemUoKSAtIDFdIDogMDsgfQogICAgICAgICBib29sIGhhc0Nl
bGxzKCkgY29uc3QgeyByZXR1cm4gY2VsbHMuc2l6ZSgpID4gMDsgfQogICAgIH07CiAKICAgICB0
eXBlZGVmIFZlY3RvcjxDZWxsU3RydWN0PiBSb3c7Ci0KICAgICBzdHJ1Y3QgUm93U3RydWN0IHsK
LSAgICAgICAgUm93U3RydWN0KCkKLSAgICAgICAgICAgIDogcm93UmVuZGVyZXIoMCkKLSAgICAg
ICAgICAgICwgYmFzZWxpbmUoKQotICAgICAgICB7Ci0gICAgICAgIH0KLQogICAgICAgICBSb3cg
cm93OwotICAgICAgICBSZW5kZXJUYWJsZVJvdyogcm93UmVuZGVyZXI7CisgICAgICAgIFJlbmRl
clRhYmxlUm93KiByb3dSZW5kZXJlciB7IG51bGxwdHIgfTsKICAgICAgICAgTGF5b3V0VW5pdCBi
YXNlbGluZTsKICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxIZWlnaHQ7CiAgICAgfTsKIAotICAgIGNv
bnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdUYWJsZVN0YXJ0KCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChoYXNTYW1lRGlyZWN0aW9uQXModGFibGUoKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gc3R5bGUoKS5ib3JkZXJTdGFydCgpOwotCi0gICAgICAgIHJldHVybiBzdHlsZSgpLmJv
cmRlckVuZCgpOwotICAgIH0KLQotICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5p
bmdUYWJsZUVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaGFzU2FtZURpcmVjdGlvbkFz
KHRhYmxlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7Ci0KLSAg
ICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyU3RhcnQoKTsKLSAgICB9Ci0KKyAgICBjb25zdCBC
b3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nVGFibGVTdGFydCgpIGNvbnN0OworICAgIGNvbnN0
IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdUYWJsZUVuZCgpIGNvbnN0OwogICAgIGNvbnN0
IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdTdGFydENlbGwoY29uc3QgUmVuZGVyVGFibGVD
ZWxsKikgY29uc3Q7CiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ0VuZENl
bGwoY29uc3QgUmVuZGVyVGFibGVDZWxsKikgY29uc3Q7CiAKICAgICBjb25zdCBSZW5kZXJUYWJs
ZUNlbGwqIGZpcnN0Um93Q2VsbEFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25zdDsKICAgICBjb25z
dCBSZW5kZXJUYWJsZUNlbGwqIGZpcnN0Um93Q2VsbEFkam9pbmluZ1RhYmxlRW5kKCkgY29uc3Q7
CiAKLSAgICBDZWxsU3RydWN0JiBjZWxsQXQodW5zaWduZWQgcm93LCAgdW5zaWduZWQgY29sKQot
ICAgIHsKLSAgICAgICAgcmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwotICAgICAgICByZXR1cm4gbV9n
cmlkW3Jvd10ucm93W2NvbF07Ci0gICAgfQotCi0gICAgY29uc3QgQ2VsbFN0cnVjdCYgY2VsbEF0
KHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KCFtX25lZWRzQ2VsbFJlY2FsYyk7Ci0gICAgICAgIHJldHVybiBtX2dyaWRbcm93XS5yb3dbY29s
XTsKLSAgICB9Ci0KLSAgICBSZW5kZXJUYWJsZUNlbGwqIHByaW1hcnlDZWxsQXQodW5zaWduZWQg
cm93LCB1bnNpZ25lZCBjb2wpCi0gICAgewotICAgICAgICByZWNhbGNDZWxsc0lmTmVlZGVkKCk7
Ci0gICAgICAgIENlbGxTdHJ1Y3QmIGMgPSBtX2dyaWRbcm93XS5yb3dbY29sXTsKLSAgICAgICAg
cmV0dXJuIGMucHJpbWFyeUNlbGwoKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJUYWJsZVJvdyogcm93
UmVuZGVyZXJBdCh1bnNpZ25lZCByb3cpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoIW1f
bmVlZHNDZWxsUmVjYWxjKTsKLSAgICAgICAgcmV0dXJuIG1fZ3JpZFtyb3ddLnJvd1JlbmRlcmVy
OwotICAgIH0KKyAgICBDZWxsU3RydWN0JiBjZWxsQXQodW5zaWduZWQgcm93LCAgdW5zaWduZWQg
Y29sKTsKKyAgICBjb25zdCBDZWxsU3RydWN0JiBjZWxsQXQodW5zaWduZWQgcm93LCB1bnNpZ25l
ZCBjb2wpIGNvbnN0OworICAgIFJlbmRlclRhYmxlQ2VsbCogcHJpbWFyeUNlbGxBdCh1bnNpZ25l
ZCByb3csIHVuc2lnbmVkIGNvbCk7CisgICAgUmVuZGVyVGFibGVSb3cqIHJvd1JlbmRlcmVyQXQo
dW5zaWduZWQgcm93KSBjb25zdDsKIAogICAgIHZvaWQgYXBwZW5kQ29sdW1uKHVuc2lnbmVkIHBv
cyk7CiAgICAgdm9pZCBzcGxpdENvbHVtbih1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGZpcnN0KTsK
QEAgLTE4MSw1NyArMTE4LDIwIEBAIHB1YmxpYzoKICAgICBpbnQgb3V0ZXJCb3JkZXJTdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJCb3JkZXJTdGFydDsgfQogICAgIGludCBvdXRlckJvcmRl
ckVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJCb3JkZXJFbmQ7IH0KIAotICAgIGludCBvdXRl
ckJvcmRlckxlZnQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlRm9yQ2VsbEZsb3cpIGNvbnN0Ci0g
ICAgewotICAgIGlmIChzdHlsZUZvckNlbGxGbG93LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KQotICAgICAgICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gb3V0ZXJCb3JkZXJTdGFydCgpIDogb3V0ZXJCb3JkZXJFbmQoKTsKLSAgICByZXR1cm4g
c3R5bGVGb3JDZWxsRmxvdy0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IG91dGVyQm9y
ZGVyQWZ0ZXIoKSA6IG91dGVyQm9yZGVyQmVmb3JlKCk7Ci0gICAgfQotCi0gICAgaW50IG91dGVy
Qm9yZGVyUmlnaHQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlRm9yQ2VsbEZsb3cpIGNvbnN0Ci0g
ICAgewotICAgIGlmIChzdHlsZUZvckNlbGxGbG93LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KQotICAgICAgICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gb3V0ZXJCb3JkZXJFbmQoKSA6IG91dGVyQm9yZGVyU3RhcnQoKTsKLSAgICByZXR1cm4g
c3R5bGVGb3JDZWxsRmxvdy0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IG91dGVyQm9y
ZGVyQmVmb3JlKCkgOiBvdXRlckJvcmRlckFmdGVyKCk7Ci0gICAgfQotCi0gICAgaW50IG91dGVy
Qm9yZGVyVG9wKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93KSBjb25zdAotICAg
IHsKLSAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkgPyBvdXRlckJvcmRlckFmdGVyKCkgOiBvdXRlckJvcmRlckJlZm9yZSgpOwotICAgIHJl
dHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvdXRlckJv
cmRlclN0YXJ0KCkgOiBvdXRlckJvcmRlckVuZCgpOwotICAgIH0KLQotICAgIGludCBvdXRlckJv
cmRlckJvdHRvbShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdykgY29uc3QKLSAg
ICB7Ci0gICAgaWYgKHN0eWxlRm9yQ2VsbEZsb3ctPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
Ci0gICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpID8gb3V0ZXJCb3JkZXJCZWZvcmUoKSA6IG91dGVyQm9yZGVyQWZ0ZXIoKTsKLSAgICBy
ZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb3V0ZXJC
b3JkZXJFbmQoKSA6IG91dGVyQm9yZGVyU3RhcnQoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBu
dW1Sb3dzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9uZWVkc0NlbGxSZWNhbGMp
OwotICAgICAgICByZXR1cm4gbV9ncmlkLnNpemUoKTsKLSAgICB9CisgICAgaW50IG91dGVyQm9y
ZGVyTGVmdChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdykgY29uc3Q7CisgICAg
aW50IG91dGVyQm9yZGVyUmlnaHQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlRm9yQ2VsbEZsb3cp
IGNvbnN0OworICAgIGludCBvdXRlckJvcmRlclRvcChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVG
b3JDZWxsRmxvdykgY29uc3Q7CisgICAgaW50IG91dGVyQm9yZGVyQm90dG9tKGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZUZvckNlbGxGbG93KSBjb25zdDsKIAorICAgIHVuc2lnbmVkIG51bVJvd3Mo
KSBjb25zdDsKICAgICB1bnNpZ25lZCBudW1Db2x1bW5zKCkgY29uc3Q7CiAgICAgdm9pZCByZWNh
bGNDZWxscygpOwotICAgIHZvaWQgcmVjYWxjQ2VsbHNJZk5lZWRlZCgpCi0gICAgewotICAgICAg
ICBpZiAobV9uZWVkc0NlbGxSZWNhbGMpCi0gICAgICAgICAgICByZWNhbGNDZWxscygpOwotICAg
IH0KKyAgICB2b2lkIHJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKIAogICAgIGJvb2wgbmVlZHNDZWxs
UmVjYWxjKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0NlbGxSZWNhbGM7IH0KICAgICB2b2lkIHNl
dE5lZWRzQ2VsbFJlY2FsYygpOwogCi0gICAgTGF5b3V0VW5pdCByb3dCYXNlbGluZSh1bnNpZ25l
ZCByb3cpCi0gICAgewotICAgICAgICByZWNhbGNDZWxsc0lmTmVlZGVkKCk7Ci0gICAgICAgIHJl
dHVybiBtX2dyaWRbcm93XS5iYXNlbGluZTsKLSAgICB9Ci0KKyAgICBMYXlvdXRVbml0IHJvd0Jh
c2VsaW5lKHVuc2lnbmVkIHJvdyk7CiAgICAgdm9pZCByb3dMb2dpY2FsSGVpZ2h0Q2hhbmdlZCh1
bnNpZ25lZCByb3dJbmRleCk7CiAKICAgICB2b2lkIHJlbW92ZUNhY2hlZENvbGxhcHNlZEJvcmRl
cnMoY29uc3QgUmVuZGVyVGFibGVDZWxsKik7CkBAIC0yNDMsMTAgKzE0Myw3IEBAIHB1YmxpYzoK
ICAgICBpbnQgZGlzdHJpYnV0ZUV4dHJhTG9naWNhbEhlaWdodFRvUm93cyhpbnQgZXh0cmFMb2dp
Y2FsSGVpZ2h0KTsKIAogICAgIHN0YXRpYyBSZW5kZXJUYWJsZVNlY3Rpb24qIGNyZWF0ZUFub255
bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICB2aXJ0dWFs
IFJlbmRlckJveCogY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVy
T2JqZWN0KiBwYXJlbnQpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gY3Jl
YXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKHBhcmVudCk7Ci0gICAgfQorICAgIHZpcnR1
YWwgUmVuZGVyQm94KiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5k
ZXJPYmplY3QqIHBhcmVudCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gY3JlYXRlQW5vbnltb3Vz
V2l0aFBhcmVudFJlbmRlcmVyKHBhcmVudCk7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKIApAQCAtMjkyLDEy
ICsxODksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzT3ZlcmZsb3dpbmdDZWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVyZmxvd2luZ0NlbGxzLnNpemUoKSB8fCBtX2ZvcmNlU2xvd1BhaW50UGF0
aFdpdGhPdmVyZmxvd2luZ0NlbGw7IH0KICAgICB2b2lkIGNvbXB1dGVPdmVyZmxvd0Zyb21DZWxs
cyh1bnNpZ25lZCB0b3RhbFJvd3MsIHVuc2lnbmVkIG5FZmZDb2xzKTsKIAotICAgIENlbGxTcGFu
IGZ1bGxUYWJsZVJvd1NwYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX25lZWRz
Q2VsbFJlY2FsYyk7Ci0gICAgICAgIHJldHVybiBDZWxsU3BhbigwLCBtX2dyaWQuc2l6ZSgpKTsK
LSAgICB9Ci0KKyAgICBDZWxsU3BhbiBmdWxsVGFibGVSb3dTcGFuKCkgY29uc3Q7CiAgICAgQ2Vs
bFNwYW4gZnVsbFRhYmxlQ29sdW1uU3BhbigpIGNvbnN0IHsgcmV0dXJuIENlbGxTcGFuKDAsIHRh
YmxlKCktPmNvbHVtbnMoKS5zaXplKCkpOyB9CiAKICAgICAvLyBGbGlwIHRoZSByZWN0IHNvIGl0
IGFsaWducyB3aXRoIHRoZSBjb29yZGluYXRlcyB1c2VkIGJ5IHRoZSByb3dQb3MgYW5kIGNvbHVt
blBvcyB2ZWN0b3JzLgpAQCAtMzI0LDI5ICsyMTYsMTIwIEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PGludD4gbV9yb3dQb3M7CiAKICAgICAvLyB0aGUgY3VycmVudCBpbnNlcnRpb24gcG9zaXRpb24K
LSAgICB1bnNpZ25lZCBtX2NDb2w7Ci0gICAgdW5zaWduZWQgbV9jUm93OworICAgIHVuc2lnbmVk
IG1fY0NvbCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2NSb3cgIHsgMCB9OwogCi0gICAgaW50IG1f
b3V0ZXJCb3JkZXJTdGFydDsKLSAgICBpbnQgbV9vdXRlckJvcmRlckVuZDsKLSAgICBpbnQgbV9v
dXRlckJvcmRlckJlZm9yZTsKLSAgICBpbnQgbV9vdXRlckJvcmRlckFmdGVyOworICAgIGludCBt
X291dGVyQm9yZGVyU3RhcnQgIHsgMCB9OworICAgIGludCBtX291dGVyQm9yZGVyRW5kICB7IDAg
fTsKKyAgICBpbnQgbV9vdXRlckJvcmRlckJlZm9yZSAgeyAwIH07CisgICAgaW50IG1fb3V0ZXJC
b3JkZXJBZnRlciAgeyAwIH07CiAKLSAgICBib29sIG1fbmVlZHNDZWxsUmVjYWxjOworICAgIGJv
b2wgbV9uZWVkc0NlbGxSZWNhbGMgIHsgZmFsc2UgfTsKIAogICAgIC8vIFRoaXMgSGFzaFNldCBo
b2xkcyB0aGUgb3ZlcmZsb3dpbmcgY2VsbHMgZm9yIGZhc3RlciBwYWludGluZy4KICAgICAvLyBJ
ZiB3ZSBoYXZlIG1vcmUgdGhhbiBnTWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbFJhdGlvICogdG90
YWwgY2VsbHMsIGl0IHdpbGwgYmUgZW1wdHkKICAgICAvLyBhbmQgbV9mb3JjZVNsb3dQYWludFBh
dGhXaXRoT3ZlcmZsb3dpbmdDZWxsIHdpbGwgYmUgc2V0IHRvIHNhdmUgbWVtb3J5LgogICAgIEhh
c2hTZXQ8UmVuZGVyVGFibGVDZWxsKj4gbV9vdmVyZmxvd2luZ0NlbGxzOwotICAgIGJvb2wgbV9m
b3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsOworICAgIGJvb2wgbV9mb3JjZVNs
b3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsIHsgZmFsc2UgfTsKIAotICAgIGJvb2wgbV9o
YXNNdWx0aXBsZUNlbGxMZXZlbHM7CisgICAgYm9vbCBtX2hhc011bHRpcGxlQ2VsbExldmVscyB7
IGZhbHNlIH07CiAKICAgICAvLyBUaGlzIG1hcCBob2xkcyB0aGUgY29sbGFwc2VkIGJvcmRlciB2
YWx1ZXMgZm9yIGNlbGxzIHdpdGggY29sbGFwc2VkIGJvcmRlcnMuCiAgICAgLy8gSXQgaXMgaGVs
ZCBhdCBSZW5kZXJUYWJsZVNlY3Rpb24gbGV2ZWwgdG8gc3BhcmUgbWVtb3J5IGNvbnN1bXB0aW9u
IGJ5IHRhYmxlIGNlbGxzLgogICAgIEhhc2hNYXA8c3RkOjpwYWlyPGNvbnN0IFJlbmRlclRhYmxl
Q2VsbCosIGludD4sIENvbGxhcHNlZEJvcmRlclZhbHVlID4gbV9jZWxsc0NvbGxhcHNlZEJvcmRl
cnM7CiB9OwogCitpbmxpbmUgY29uc3QgQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlU2VjdGlvbjo6
Ym9yZGVyQWRqb2luaW5nVGFibGVTdGFydCgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1NhbWVEaXJl
Y3Rpb25Bcyh0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyU3RhcnQoKTsK
KyAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJFbmQoKTsKK30KKworaW5saW5lIGNvbnN0IEJvcmRl
clZhbHVlJiBSZW5kZXJUYWJsZVNlY3Rpb246OmJvcmRlckFkam9pbmluZ1RhYmxlRW5kKCkgY29u
c3QKK3sKKyAgICBpZiAoaGFzU2FtZURpcmVjdGlvbkFzKHRhYmxlKCkpKQorICAgICAgICByZXR1
cm4gc3R5bGUoKS5ib3JkZXJFbmQoKTsKKyAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJTdGFydCgp
OworfQorCitpbmxpbmUgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0JiBSZW5kZXJUYWJs
ZVNlY3Rpb246OmNlbGxBdCh1bnNpZ25lZCByb3csICB1bnNpZ25lZCBjb2wpCit7CisgICAgcmVj
YWxjQ2VsbHNJZk5lZWRlZCgpOworICAgIHJldHVybiBtX2dyaWRbcm93XS5yb3dbY29sXTsKK30K
KworaW5saW5lIGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCYgUmVuZGVyVGFi
bGVTZWN0aW9uOjpjZWxsQXQodW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2wpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFtX25lZWRzQ2VsbFJlY2FsYyk7CisgICAgcmV0dXJuIG1fZ3JpZFtyb3ddLnJv
d1tjb2xdOworfQorCitpbmxpbmUgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZVNlY3Rpb246
OnByaW1hcnlDZWxsQXQodW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2wpCit7CisgICAgcmVjYWxj
Q2VsbHNJZk5lZWRlZCgpOworICAgIENlbGxTdHJ1Y3QmIGMgPSBtX2dyaWRbcm93XS5yb3dbY29s
XTsKKyAgICByZXR1cm4gYy5wcmltYXJ5Q2VsbCgpOworfQorCitpbmxpbmUgUmVuZGVyVGFibGVS
b3cqIFJlbmRlclRhYmxlU2VjdGlvbjo6cm93UmVuZGVyZXJBdCh1bnNpZ25lZCByb3cpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFtX25lZWRzQ2VsbFJlY2FsYyk7CisgICAgcmV0dXJuIG1fZ3JpZFty
b3ddLnJvd1JlbmRlcmVyOworfQorCitpbmxpbmUgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6b3V0
ZXJCb3JkZXJMZWZ0KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93KSBjb25zdAor
eworICAgIGlmIChzdHlsZUZvckNlbGxGbG93LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQor
ICAgICAgICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gb3V0ZXJCb3JkZXJTdGFydCgpIDogb3V0ZXJCb3JkZXJFbmQoKTsKKyAgICByZXR1cm4gc3R5
bGVGb3JDZWxsRmxvdy0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IG91dGVyQm9yZGVy
QWZ0ZXIoKSA6IG91dGVyQm9yZGVyQmVmb3JlKCk7Cit9CisKK2lubGluZSBpbnQgUmVuZGVyVGFi
bGVTZWN0aW9uOjpvdXRlckJvcmRlclJpZ2h0KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNl
bGxGbG93KSBjb25zdAoreworICAgIGlmIChzdHlsZUZvckNlbGxGbG93LT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpID8gb3V0ZXJCb3JkZXJFbmQoKSA6IG91dGVyQm9yZGVyU3RhcnQoKTsK
KyAgICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSA/IG91dGVyQm9yZGVyQmVmb3JlKCkgOiBvdXRlckJvcmRlckFmdGVyKCk7Cit9CisKK2lubGlu
ZSBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpvdXRlckJvcmRlclRvcChjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGVGb3JDZWxsRmxvdykgY29uc3QKK3sKKyAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZs
b3ctPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBvdXRlckJvcmRlckFmdGVyKCkgOiBv
dXRlckJvcmRlckJlZm9yZSgpOworICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyBvdXRlckJvcmRlclN0YXJ0KCkgOiBvdXRlckJvcmRlckVuZCgp
OworfQorCitpbmxpbmUgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6b3V0ZXJCb3JkZXJCb3R0b20o
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlRm9yQ2VsbEZsb3cpIGNvbnN0Cit7CisgICAgaWYgKHN0
eWxlRm9yQ2VsbEZsb3ctPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHJldHVy
biBzdHlsZUZvckNlbGxGbG93LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gb3V0ZXJC
b3JkZXJCZWZvcmUoKSA6IG91dGVyQm9yZGVyQWZ0ZXIoKTsKKyAgICByZXR1cm4gc3R5bGVGb3JD
ZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb3V0ZXJCb3JkZXJFbmQoKSA6IG91
dGVyQm9yZGVyU3RhcnQoKTsKK30KKworaW5saW5lIHVuc2lnbmVkIFJlbmRlclRhYmxlU2VjdGlv
bjo6bnVtUm93cygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX25lZWRzQ2VsbFJlY2FsYyk7Cisg
ICAgcmV0dXJuIG1fZ3JpZC5zaXplKCk7Cit9CisKK2lubGluZSB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6cmVjYWxjQ2VsbHNJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fbmVlZHNDZWxsUmVjYWxj
KQorICAgICAgICByZWNhbGNDZWxscygpOworfQorCitpbmxpbmUgTGF5b3V0VW5pdCBSZW5kZXJU
YWJsZVNlY3Rpb246OnJvd0Jhc2VsaW5lKHVuc2lnbmVkIHJvdykKK3sKKyAgICByZWNhbGNDZWxs
c0lmTmVlZGVkKCk7CisgICAgcmV0dXJuIG1fZ3JpZFtyb3ddLmJhc2VsaW5lOworfQorCitpbmxp
bmUgQ2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9uOjpmdWxsVGFibGVSb3dTcGFuKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIW1fbmVlZHNDZWxsUmVjYWxjKTsKKyAgICByZXR1cm4gQ2VsbFNwYW4o
MCwgbV9ncmlkLnNpemUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlclRhYmxlU2VjdGlvbiwgaXNUYWJs
ZVNlY3Rpb24oKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246747</attachid>
            <date>2015-02-17 09:47:03 -0800</date>
            <delta_ts>2015-02-17 14:41:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141707-20150217094656.patch</filename>
            <type>text/plain</type>
            <size>44422</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDk1YzNlYTY1NGNiN2Ew
MmMzMmE2MTM5MjYyYzc2OGY2NzQwN2FjYS4uMTNjYTQ0MDFiMTU5OTRhZTg4ZWQ1MGM5YTIzZjgw
OWQwYmI1NDM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDE1LTAyLTE3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWlub3IgUmVuZGVyVGFibGUq
IGNsYXNzIGNsZWFudXBzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQxNzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXNlIGluLWNsYXNzIGluaXRpYWxpemVyIHdoZXJlIHBvc3NpYmxlLgorICAgICAg
ICBSZW1vdmUgcmVkdW5kYW50IGNvZGUuCisgICAgICAgIE1vdmUgbXVsdGlsaW5lIGltcGxlbWVu
dGF0aW9ucyBvdXQgb2YgY2xhc3MgZGVjbGFyYXRpb24uCisKKyAgICAgICAgTm8gY2hhbmdlIGlu
IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2FwdGlvbjo6aW5zZXJ0ZWRJbnRv
VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNhcHRpb246OndpbGxCZVJlbW92
ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNhcHRpb246OmNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6UmVuZGVy
VGFibGVDZWxsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmg6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbFNwYW4pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVDZWxsOjpyb3dTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ2VsbDo6c2V0Q29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29s
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2VjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ2VsbDo6cm93SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVD
ZWxsOjpzdHlsZU9yQ29sTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ2VsbDo6bG9naWNhbEhlaWdodEZvclJvd1NpemluZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OmlzQmFzZWxpbmVBbGlnbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ2VsbDo6Ym9yZGVyQWRqb2luaW5nVGFibGVTdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckFkam9pbmluZ1RhYmxlRW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQWRqb2luaW5nQ2VsbEJlZm9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckFkam9pbmluZ0NlbGxBZnRl
cik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ29sOjpSZW5kZXJUYWJsZUNvbCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6
ZW5jbG9zaW5nQ29sdW1uR3JvdXBJZkFkamFjZW50QmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ29sOjplbmNsb3NpbmdDb2x1bW5Hcm91cElmQWRqYWNlbnRBZnRlcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93Lmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVJvdzo6c2V0Um93SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVSb3c6OnJvd0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojpib3Jk
ZXJBZGpvaW5pbmdUYWJsZVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93
Ojpib3JkZXJBZGpvaW5pbmdUYWJsZUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZVJvdzo6dGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpmaXJz
dFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Omxhc3RSb3cpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0aWVkUm93cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmRpcnRpZWRDb2x1bW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Q2VsbFNwYW46OkNlbGxTcGFu
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Ym9yZGVyQWRqb2luaW5n
VGFibGVTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmJvcmRl
ckFkam9pbmluZ1RhYmxlRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlv
bjo6Y2VsbEF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cHJpbWFy
eUNlbGxBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJvd1JlbmRl
cmVyQXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpvdXRlckJvcmRl
ckxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpvdXRlckJvcmRl
clJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6b3V0ZXJCb3Jk
ZXJUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpvdXRlckJvcmRl
ckJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om51bVJvd3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZWNhbGNDZWxsc0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cm93QmFzZWxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpmdWxsVGFibGVSb3dTcGFu
KToKKyAgICAgICAgKFdlYkNvcmU6OkNlbGxTcGFuOjpzdGFydCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDZWxsU3Bhbjo6ZW5kKTogRGVsZXRlZC4KKwogMjAxNS0wMi0xNSAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBleHBlcmltZW50YWwgPGF0dGFj
aG1lbnQ+IGVsZW1lbnQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDYXB0aW9uLmNwcAppbmRleCA0NDI5NDRlOTdmM2FkOTIyN2E0NDU4NzAxZWUyYTAx
NjM0NTA2NjYyLi4wNWM4NDZmYWQzNTVlZTI5MDc3MjNkZjJjMDhhOWZjNGM2OGRkZmJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcApAQCAt
MzMsMjMgKzMzLDE1IEBAIFJlbmRlclRhYmxlQ2FwdGlvbjo6flJlbmRlclRhYmxlQ2FwdGlvbigp
CiB7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyVGFibGVDYXB0aW9uOjpjb250YWluaW5nQmxvY2tM
b2dpY2FsV2lkdGhGb3JDb250ZW50KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCbG9jayogY2IgPSBj
b250YWluaW5nQmxvY2soKTsKLSAgICByZXR1cm4gY2ItPmxvZ2ljYWxXaWR0aCgpOwotfQotCiB2
b2lkIFJlbmRlclRhYmxlQ2FwdGlvbjo6aW5zZXJ0ZWRJbnRvVHJlZSgpCiB7CiAgICAgUmVuZGVy
QmxvY2tGbG93OjppbnNlcnRlZEludG9UcmVlKCk7Ci0KICAgICB0YWJsZSgpLT5hZGRDYXB0aW9u
KHRoaXMpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlQ2FwdGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21U
cmVlKCkKIHsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpOwot
CiAgICAgdGFibGUoKS0+cmVtb3ZlQ2FwdGlvbih0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5oCmluZGV4IDQ2NTA2MjU1YjBjMGFhMDk4
ZjJlYjBkOTM5NTMzNDU1MDNhOGM2NTYuLmVlNjE0MjYyYTVhNTg1OGMyY2QzNDBjZjFhZDFlMGJh
Y2NmNGIyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNhcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0
aW9uLmgKQEAgLTMzLDcgKzMzLDcgQEAgcHVibGljOgogCiAgICAgRWxlbWVudCYgZWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7
IH0KIAotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhG
b3JDb250ZW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBjb250YWluaW5nQmxvY2soKS0+bG9naWNhbFdpZHRoKCk7IH0KICAgICAKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIGlzVGFibGVDYXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApp
bmRleCA0NzVhZjQxMDQ4MTE0ZGRkMTNkYzllNGYzNTNkYzE0NTUwMmY4MGRkLi44NmU5ZDYxNjA3
MzBmNzM4NjJmYzVlZGQ4Y2ZkZmRlMzZjMGNiNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApAQCAtNTgsOCArNTgsOCBAQCBSZW5kZXJUYWJsZUNl
bGw6OlJlbmRlclRhYmxlQ2VsbChFbGVtZW50JiBlbGVtZW50LCBSZWY8UmVuZGVyU3R5bGU+JiYg
c3R5bGUpCiAgICAgOiBSZW5kZXJCbG9ja0Zsb3coZWxlbWVudCwgV1RGOjptb3ZlKHN0eWxlKSkK
ICAgICAsIG1fY29sdW1uKHVuc2V0Q29sdW1uSW5kZXgpCiAgICAgLCBtX2NlbGxXaWR0aENoYW5n
ZWQoZmFsc2UpCi0gICAgLCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmUoMCkKLSAgICAsIG1faW50
cmluc2ljUGFkZGluZ0FmdGVyKDApCisgICAgLCBtX2hhc0NvbFNwYW4oZmFsc2UpCisgICAgLCBt
X2hhc1Jvd1NwYW4oZmFsc2UpCiB7CiAgICAgLy8gV2Ugb25seSB1cGRhdGUgdGhlIGZsYWdzIHdo
ZW4gbm90aWZpZWQgb2YgRE9NIGNoYW5nZXMgaW4gY29sU3Bhbk9yUm93U3BhbkNoYW5nZWQoKQog
ICAgIC8vIHNvIHdlIG5lZWQgdG8gc2V0IHRoZWlyIGluaXRpYWwgdmFsdWVzIGhlcmUgaW4gY2Fz
ZSBzb21ldGhpbmcgYXNrcyBmb3IgY29sU3BhbigpL3Jvd1NwYW4oKSBiZWZvcmUgdGhlbi4KQEAg
LTcyLDggKzcyLDYgQEAgUmVuZGVyVGFibGVDZWxsOjpSZW5kZXJUYWJsZUNlbGwoRG9jdW1lbnQm
IGRvY3VtZW50LCBSZWY8UmVuZGVyU3R5bGU+JiYgc3R5bGUpCiAgICAgLCBtX2NlbGxXaWR0aENo
YW5nZWQoZmFsc2UpCiAgICAgLCBtX2hhc0NvbFNwYW4oZmFsc2UpCiAgICAgLCBtX2hhc1Jvd1Nw
YW4oZmFsc2UpCi0gICAgLCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmUoMCkKLSAgICAsIG1faW50
cmluc2ljUGFkZGluZ0FmdGVyKDApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuaAppbmRleCBlYmE1MTJjNjBhN2I0YWIyYjM1ZDljMjEzMmYyMmUyZDVk
MzdhZWJlLi44M2ExYzRlOTllOGQ3MWU2ZjNmYmRlZDY2NzUyZDRkNDY0ZDQ2ZjIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCkBAIC00MSw4NCArNDEsMjQg
QEAgcHVibGljOgogICAgIFJlbmRlclRhYmxlQ2VsbChFbGVtZW50JiwgUmVmPFJlbmRlclN0eWxl
PiYmKTsKICAgICBSZW5kZXJUYWJsZUNlbGwoRG9jdW1lbnQmLCBSZWY8UmVuZGVyU3R5bGU+JiYp
OwogICAgIAotICAgIHVuc2lnbmVkIGNvbFNwYW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KCFtX2hhc0NvbFNwYW4pCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgcmV0dXJuIHBh
cnNlQ29sU3BhbkZyb21ET00oKTsKLSAgICB9Ci0gICAgdW5zaWduZWQgcm93U3BhbigpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoIW1faGFzUm93U3BhbikKLSAgICAgICAgICAgIHJldHVybiAx
OwotICAgICAgICByZXR1cm4gcGFyc2VSb3dTcGFuRnJvbURPTSgpOwotICAgIH0KKyAgICB1bnNp
Z25lZCBjb2xTcGFuKCkgY29uc3Q7CisgICAgdW5zaWduZWQgcm93U3BhbigpIGNvbnN0OwogCiAg
ICAgLy8gQ2FsbGVkIGZyb20gSFRNTFRhYmxlQ2VsbEVsZW1lbnQuCiAgICAgdm9pZCBjb2xTcGFu
T3JSb3dTcGFuQ2hhbmdlZCgpOwogCi0gICAgdm9pZCBzZXRDb2wodW5zaWduZWQgY29sdW1uKQot
ICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKGNvbHVtbiA+IG1heENvbHVtbkluZGV4KSkKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgbV9jb2x1bW4gPSBjb2x1bW47Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgY29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2NvbHVt
biAhPSB1bnNldENvbHVtbkluZGV4KTsKLSAgICAgICAgcmV0dXJuIG1fY29sdW1uOwotICAgIH0K
KyAgICB2b2lkIHNldENvbCh1bnNpZ25lZCBjb2x1bW4pOworICAgIHVuc2lnbmVkIGNvbCgpIGNv
bnN0OwogCiAgICAgUmVuZGVyVGFibGVDZWxsKiBuZXh0Q2VsbCgpIGNvbnN0OwogICAgIFJlbmRl
clRhYmxlQ2VsbCogcHJldmlvdXNDZWxsKCkgY29uc3Q7CiAKICAgICBSZW5kZXJUYWJsZVJvdyog
cm93KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KHBhcmVudCgpKTsg
fQotICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBSZW5kZXJUYWJsZVJvdyogcm93ID0gdGhpcy0+cm93KCk7Ci0gICAgICAgIGlmICghcm93KQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJUYWJsZVNlY3Rpb24+KHJvdy0+cGFyZW50KCkpOwotICAgIH0KLSAgICBSZW5kZXJUYWJsZSog
dGFibGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9u
ID0gdGhpcy0+c2VjdGlvbigpOwotICAgICAgICBpZiAoIXNlY3Rpb24pCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlPihzZWN0
aW9uLT5wYXJlbnQoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcm93SW5kZXgoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgY2FsbGVkIG9uIGEg
ZGV0YWNoZWQgY2VsbC4KLSAgICAgICAgQVNTRVJUKHJvdygpKTsKLSAgICAgICAgcmV0dXJuIHJv
dygpLT5yb3dJbmRleCgpOwotICAgIH0KLQotICAgIExlbmd0aCBzdHlsZU9yQ29sTG9naWNhbFdp
ZHRoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIExlbmd0aCBzdHlsZVdpZHRoID0gc3R5bGUoKS5s
b2dpY2FsV2lkdGgoKTsKLSAgICAgICAgaWYgKCFzdHlsZVdpZHRoLmlzQXV0bygpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0eWxlV2lkdGg7Ci0gICAgICAgIGlmIChSZW5kZXJUYWJsZUNvbCogZmly
c3RDb2x1bW4gPSB0YWJsZSgpLT5jb2xFbGVtZW50KGNvbCgpKSkKLSAgICAgICAgICAgIHJldHVy
biBsb2dpY2FsV2lkdGhGcm9tQ29sdW1ucyhmaXJzdENvbHVtbiwgc3R5bGVXaWR0aCk7Ci0gICAg
ICAgIHJldHVybiBzdHlsZVdpZHRoOwotICAgIH0KLQotICAgIGludCBsb2dpY2FsSGVpZ2h0Rm9y
Um93U2l6aW5nKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9u
IGRvZXMgdG9vIG11Y2ggd29yaywgYW5kIGlzIHZlcnkgaG90IGR1cmluZyB0YWJsZSBsYXlvdXQh
Ci0gICAgICAgIGludCBhZGp1c3RlZExvZ2ljYWxIZWlnaHQgPSBwaXhlbFNuYXBwZWRMb2dpY2Fs
SGVpZ2h0KCkgLSAoaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpICsgaW50cmluc2ljUGFkZGluZ0Fm
dGVyKCkpOwotICAgICAgICBpbnQgc3R5bGVMb2dpY2FsSGVpZ2h0ID0gdmFsdWVGb3JMZW5ndGgo
c3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCksIDApOwotICAgICAgICAvLyBJbiBzdHJpY3QgbW9kZSwg
Ym94LXNpemluZzogY29udGVudC1ib3ggZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBhY3R1YWxseSBh
ZGQgaW4gdGhlIGJvcmRlciBhbmQgcGFkZGluZy4KLSAgICAgICAgLy8gQ2FsbCBjb21wdXRlZENT
U1BhZGRpbmcqIGRpcmVjdGx5IHRvIGF2b2lkIGluY2x1ZGluZyBpbXBsaWNpdFBhZGRpbmcuCi0g
ICAgICAgIGlmICghZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSAmJiBzdHlsZSgpLmJveFNpemlu
ZygpICE9IEJPUkRFUl9CT1gpCi0gICAgICAgICAgICBzdHlsZUxvZ2ljYWxIZWlnaHQgKz0gKGNv
bXB1dGVkQ1NTUGFkZGluZ0JlZm9yZSgpICsgY29tcHV0ZWRDU1NQYWRkaW5nQWZ0ZXIoKSkuZmxv
b3IoKSArIChib3JkZXJCZWZvcmUoKSArIGJvcmRlckFmdGVyKCkpLmZsb29yKCk7Ci0gICAgICAg
IHJldHVybiBzdGQ6Om1heChzdHlsZUxvZ2ljYWxIZWlnaHQsIGFkanVzdGVkTG9naWNhbEhlaWdo
dCk7Ci0gICAgfQotCisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3Q7Cisg
ICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgcm93SW5kZXgoKSBj
b25zdDsKKyAgICBMZW5ndGggc3R5bGVPckNvbExvZ2ljYWxXaWR0aCgpIGNvbnN0OworICAgIGlu
dCBsb2dpY2FsSGVpZ2h0Rm9yUm93U2l6aW5nKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldENlbGxM
b2dpY2FsV2lkdGgoaW50IGNvbnN0cmFpbmVkTG9naWNhbFdpZHRoKTsKIApAQCAtMTQyLDExICs4
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVyRWxlbWVudCogYmFja2dyb3VuZE9iamVj
dCk7CiAKICAgICBMYXlvdXRVbml0IGNlbGxCYXNlbGluZVBvc2l0aW9uKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0Jhc2VsaW5lQWxpZ25lZCgpIGNvbnN0IAotICAgIHsgCi0gICAgICAgIEVWZXJ0aWNh
bEFsaWduIHZhID0gc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7Ci0gICAgICAgIHJldHVybiB2YSA9
PSBCQVNFTElORSB8fCB2YSA9PSBURVhUX0JPVFRPTSB8fCB2YSA9PSBURVhUX1RPUCB8fCB2YSA9
PSBTVVBFUiB8fCB2YSA9PSBTVUIgfHwgdmEgPT0gTEVOR1RIOyAKLSAgICB9CisgICAgYm9vbCBp
c0Jhc2VsaW5lQWxpZ25lZCgpIGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlSW50cmluc2ljUGFk
ZGluZyhpbnQgcm93SGVpZ2h0KTsKICAgICB2b2lkIGNsZWFySW50cmluc2ljUGFkZGluZygpIHsg
c2V0SW50cmluc2ljUGFkZGluZygwLCAwKTsgfQpAQCAtMTczLDYwICsxMDksMjMgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0Q2VsbFdpZHRoQ2hhbmdlZChib29sIGIgPSB0cnVlKSB7IG1fY2VsbFdp
ZHRoQ2hhbmdlZCA9IGI7IH0KIAogICAgIHN0YXRpYyBSZW5kZXJUYWJsZUNlbGwqIGNyZWF0ZUFu
b255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICB2aXJ0
dWFsIFJlbmRlckJveCogY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVu
ZGVyT2JqZWN0KiBwYXJlbnQpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4g
Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKHBhcmVudCk7Ci0gICAgfQorICAgIHZp
cnR1YWwgUmVuZGVyQm94KiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBS
ZW5kZXJPYmplY3QqIHBhcmVudCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gY3JlYXRlQW5vbnlt
b3VzV2l0aFBhcmVudFJlbmRlcmVyKHBhcmVudCk7IH0KIAogICAgIC8vIFRoaXMgZnVuY3Rpb24g
aXMgdXNlZCB0byB1bmlmeSB3aGljaCB0YWJsZSBwYXJ0J3Mgc3R5bGUgd2UgdXNlIGZvciBjb21w
dXRpbmcgZGlyZWN0aW9uIGFuZAogICAgIC8vIHdyaXRpbmcgbW9kZS4gV3JpdGluZyBtb2RlcyBh
cmUgbm90IGFsbG93ZWQgb24gcm93IGdyb3VwIGFuZCByb3cgYnV0IGRpcmVjdGlvbiBpcy4KICAg
ICAvLyBUaGlzIG1lYW5zIHdlIGNhbiBzYWZlbHkgdXNlIHRoZSBzYW1lIHN0eWxlIGluIGFsbCBj
YXNlcyB0byBzaW1wbGlmeSBvdXIgY29kZS4KICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0aGlz
IGZ1bmN0aW9uIHNob3VsZCByZXBsYWNlZCBieSBzdHlsZSgpIG9uY2Ugd2Ugc3VwcG9ydCBkaXJl
Y3Rpb24KICAgICAvLyBvbiBhbGwgdGFibGUgcGFydHMgYW5kIHdyaXRpbmctbW9kZSBvbiBjZWxs
cy4KLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVGb3JDZWxsRmxvdygpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gcm93KCktPnN0eWxlKCk7Ci0gICAgfQotCi0gICAgY29uc3QgQm9y
ZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzRmlyc3RPckxhc3RDZWxsSW5Sb3coKSk7Ci0gICAgICAgIGlmIChzZWN0aW9u
KCktPmhhc1NhbWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBzdHls
ZSgpLmJvcmRlclN0YXJ0KCk7Ci0KLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7
Ci0gICAgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZUZvckNlbGxGbG93KCkgY29uc3Qg
eyByZXR1cm4gcm93KCktPnN0eWxlKCk7IH0KIAotICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3Jk
ZXJBZGpvaW5pbmdUYWJsZUVuZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNGaXJz
dE9yTGFzdENlbGxJblJvdygpKTsKLSAgICAgICAgaWYgKHNlY3Rpb24oKS0+aGFzU2FtZURpcmVj
dGlvbkFzKHRhYmxlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7
Ci0KLSAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyU3RhcnQoKTsKLSAgICB9Ci0KLSAgICBj
b25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nQ2VsbEJlZm9yZShjb25zdCBSZW5kZXJU
YWJsZUNlbGwqIGNlbGwpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGNlbGwsIHRhYmxl
KCktPmNlbGxBZnRlcihjZWxsKSA9PSB0aGlzKTsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzc5MjcyIC0gQWRkIHN1cHBvcnQgZm9yIG1peGVkIGRpcmVjdGlvbmFsaXR5
IGF0IHRoZSBjZWxsIGxldmVsLgotICAgICAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJTdGFydCgp
OwotICAgIH0KLQotICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdDZWxsQWZ0
ZXIoY29uc3QgUmVuZGVyVGFibGVDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChjZWxsLCB0YWJsZSgpLT5jZWxsQmVmb3JlKGNlbGwpID09IHRoaXMpOwotICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly93ZWJraXQub3JnL2IvNzkyNzIgLSBBZGQgc3VwcG9ydCBmb3IgbWl4
ZWQgZGlyZWN0aW9uYWxpdHkgYXQgdGhlIGNlbGwgbGV2ZWwuCi0gICAgICAgIHJldHVybiBzdHls
ZSgpLmJvcmRlckVuZCgpOwotICAgIH0KKyAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRq
b2luaW5nVGFibGVTdGFydCgpIGNvbnN0OworICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJB
ZGpvaW5pbmdUYWJsZUVuZCgpIGNvbnN0OworICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJB
ZGpvaW5pbmdDZWxsQmVmb3JlKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCopOworICAgIGNvbnN0IEJv
cmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdDZWxsQWZ0ZXIoY29uc3QgUmVuZGVyVGFibGVDZWxs
Kik7CiAKICAgICB1c2luZyBSZW5kZXJCbG9ja0Zsb3c6Om5vZGVBdFBvaW50OwotCiAjaWZuZGVm
IE5ERUJVRwotICAgIGJvb2wgaXNGaXJzdE9yTGFzdENlbGxJblJvdygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gIXRhYmxlKCktPmNlbGxBZnRlcih0aGlzKSB8fCAhdGFibGUoKS0+Y2Vs
bEJlZm9yZSh0aGlzKTsKLSAgICB9CisgICAgYm9vbCBpc0ZpcnN0T3JMYXN0Q2VsbEluUm93KCkg
Y29uc3QgeyByZXR1cm4gIXRhYmxlKCktPmNlbGxBZnRlcih0aGlzKSB8fCAhdGFibGUoKS0+Y2Vs
bEJlZm9yZSh0aGlzKTsgfQogI2VuZGlmCiAgICAgCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMzA0LDggKzIwMyw4IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9jZWxsV2lkdGhDaGFuZ2VkIDogMTsKICAgICB1bnNpZ25l
ZCBtX2hhc0NvbFNwYW46IDE7CiAgICAgdW5zaWduZWQgbV9oYXNSb3dTcGFuOiAxOwotICAgIGlu
dCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmU7Ci0gICAgaW50IG1faW50cmluc2ljUGFkZGluZ0Fm
dGVyOworICAgIGludCBtX2ludHJpbnNpY1BhZGRpbmdCZWZvcmUgeyAwIH07CisgICAgaW50IG1f
aW50cmluc2ljUGFkZGluZ0FmdGVyIHsgMCB9OwogfTsKIAogaW5saW5lIFJlbmRlclRhYmxlQ2Vs
bCogUmVuZGVyVGFibGVDZWxsOjpuZXh0Q2VsbCgpIGNvbnN0CkBAIC0zMTgsNiArMjE3LDExNiBA
QCBpbmxpbmUgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZUNlbGw6OnByZXZpb3VzQ2VsbCgp
IGNvbnN0CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oUmVuZGVyQmxvY2tG
bG93OjpwcmV2aW91c1NpYmxpbmcoKSk7CiB9CiAKK2lubGluZSB1bnNpZ25lZCBSZW5kZXJUYWJs
ZUNlbGw6OmNvbFNwYW4oKSBjb25zdAoreworICAgIGlmICghbV9oYXNDb2xTcGFuKQorICAgICAg
ICByZXR1cm4gMTsKKyAgICByZXR1cm4gcGFyc2VDb2xTcGFuRnJvbURPTSgpOworfQorCitpbmxp
bmUgdW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpyb3dTcGFuKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1faGFzUm93U3BhbikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIHBhcnNlUm93U3Bh
bkZyb21ET00oKTsKK30KKworaW5saW5lIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpzZXRDb2wodW5z
aWduZWQgY29sdW1uKQoreworICAgIGlmIChVTkxJS0VMWShjb2x1bW4gPiBtYXhDb2x1bW5JbmRl
eCkpCisgICAgICAgIENSQVNIKCk7CisgICAgbV9jb2x1bW4gPSBjb2x1bW47Cit9CisKK2lubGlu
ZSB1bnNpZ25lZCBSZW5kZXJUYWJsZUNlbGw6OmNvbCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
Y29sdW1uICE9IHVuc2V0Q29sdW1uSW5kZXgpOworICAgIHJldHVybiBtX2NvbHVtbjsKK30KKwor
aW5saW5lIFJlbmRlclRhYmxlU2VjdGlvbiogUmVuZGVyVGFibGVDZWxsOjpzZWN0aW9uKCkgY29u
c3QKK3sKKyAgICBSZW5kZXJUYWJsZVJvdyogcm93ID0gdGhpcy0+cm93KCk7CisgICAgaWYgKCFy
b3cpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJU
YWJsZVNlY3Rpb24+KHJvdy0+cGFyZW50KCkpOworfQorCitpbmxpbmUgUmVuZGVyVGFibGUqIFJl
bmRlclRhYmxlQ2VsbDo6dGFibGUoKSBjb25zdAoreworICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
c2VjdGlvbiA9IHRoaXMtPnNlY3Rpb24oKTsKKyAgICBpZiAoIXNlY3Rpb24pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZT4oc2VjdGlvbi0+
cGFyZW50KCkpOworfQorCitpbmxpbmUgdW5zaWduZWQgUmVuZGVyVGFibGVDZWxsOjpyb3dJbmRl
eCgpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgY2FsbGVkIG9u
IGEgZGV0YWNoZWQgY2VsbC4KKyAgICBBU1NFUlQocm93KCkpOworICAgIHJldHVybiByb3coKS0+
cm93SW5kZXgoKTsKK30KKworaW5saW5lIExlbmd0aCBSZW5kZXJUYWJsZUNlbGw6OnN0eWxlT3JD
b2xMb2dpY2FsV2lkdGgoKSBjb25zdAoreworICAgIExlbmd0aCBzdHlsZVdpZHRoID0gc3R5bGUo
KS5sb2dpY2FsV2lkdGgoKTsKKyAgICBpZiAoIXN0eWxlV2lkdGguaXNBdXRvKCkpCisgICAgICAg
IHJldHVybiBzdHlsZVdpZHRoOworICAgIGlmIChSZW5kZXJUYWJsZUNvbCogZmlyc3RDb2x1bW4g
PSB0YWJsZSgpLT5jb2xFbGVtZW50KGNvbCgpKSkKKyAgICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0
aEZyb21Db2x1bW5zKGZpcnN0Q29sdW1uLCBzdHlsZVdpZHRoKTsKKyAgICByZXR1cm4gc3R5bGVX
aWR0aDsKK30KKworaW5saW5lIGludCBSZW5kZXJUYWJsZUNlbGw6OmxvZ2ljYWxIZWlnaHRGb3JS
b3dTaXppbmcoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGRvZXMgdG9v
IG11Y2ggd29yaywgYW5kIGlzIHZlcnkgaG90IGR1cmluZyB0YWJsZSBsYXlvdXQhCisgICAgaW50
IGFkanVzdGVkTG9naWNhbEhlaWdodCA9IHBpeGVsU25hcHBlZExvZ2ljYWxIZWlnaHQoKSAtIChp
bnRyaW5zaWNQYWRkaW5nQmVmb3JlKCkgKyBpbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSk7CisgICAg
aW50IHN0eWxlTG9naWNhbEhlaWdodCA9IHZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubG9naWNhbEhl
aWdodCgpLCAwKTsKKyAgICAvLyBJbiBzdHJpY3QgbW9kZSwgYm94LXNpemluZzogY29udGVudC1i
b3ggZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBhY3R1YWxseSBhZGQgaW4gdGhlIGJvcmRlciBhbmQg
cGFkZGluZy4KKyAgICAvLyBDYWxsIGNvbXB1dGVkQ1NTUGFkZGluZyogZGlyZWN0bHkgdG8gYXZv
aWQgaW5jbHVkaW5nIGltcGxpY2l0UGFkZGluZy4KKyAgICBpZiAoIWRvY3VtZW50KCkuaW5RdWly
a3NNb2RlKCkgJiYgc3R5bGUoKS5ib3hTaXppbmcoKSAhPSBCT1JERVJfQk9YKQorICAgICAgICBz
dHlsZUxvZ2ljYWxIZWlnaHQgKz0gKGNvbXB1dGVkQ1NTUGFkZGluZ0JlZm9yZSgpICsgY29tcHV0
ZWRDU1NQYWRkaW5nQWZ0ZXIoKSkuZmxvb3IoKSArIChib3JkZXJCZWZvcmUoKSArIGJvcmRlckFm
dGVyKCkpLmZsb29yKCk7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0eWxlTG9naWNhbEhlaWdodCwg
YWRqdXN0ZWRMb2dpY2FsSGVpZ2h0KTsKK30KKworaW5saW5lIGJvb2wgUmVuZGVyVGFibGVDZWxs
Ojppc0Jhc2VsaW5lQWxpZ25lZCgpIGNvbnN0Cit7CisgICAgRVZlcnRpY2FsQWxpZ24gdmEgPSBz
dHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKKyAgICByZXR1cm4gdmEgPT0gQkFTRUxJTkUgfHwgdmEg
PT0gVEVYVF9CT1RUT00gfHwgdmEgPT0gVEVYVF9UT1AgfHwgdmEgPT0gU1VQRVIgfHwgdmEgPT0g
U1VCIHx8IHZhID09IExFTkdUSDsKK30KKworaW5saW5lIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5k
ZXJUYWJsZUNlbGw6OmJvcmRlckFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25zdAoreworICAgIEFT
U0VSVChpc0ZpcnN0T3JMYXN0Q2VsbEluUm93KCkpOworICAgIGlmIChzZWN0aW9uKCktPmhhc1Nh
bWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyU3Rh
cnQoKTsKKworICAgIHJldHVybiBzdHlsZSgpLmJvcmRlckVuZCgpOworfQorCitpbmxpbmUgY29u
c3QgQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQWRqb2luaW5nVGFibGVFbmQo
KSBjb25zdAoreworICAgIEFTU0VSVChpc0ZpcnN0T3JMYXN0Q2VsbEluUm93KCkpOworICAgIGlm
IChzZWN0aW9uKCktPmhhc1NhbWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJu
IHN0eWxlKCkuYm9yZGVyRW5kKCk7CisKKyAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJTdGFydCgp
OworfQorCitpbmxpbmUgY29uc3QgQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVy
QWRqb2luaW5nQ2VsbEJlZm9yZShjb25zdCBSZW5kZXJUYWJsZUNlbGwqIGNlbGwpCit7CisgICAg
QVNTRVJUX1VOVVNFRChjZWxsLCB0YWJsZSgpLT5jZWxsQWZ0ZXIoY2VsbCkgPT0gdGhpcyk7Cisg
ICAgLy8gRklYTUU6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzc5MjcyIC0gQWRkIHN1cHBvcnQgZm9y
IG1peGVkIGRpcmVjdGlvbmFsaXR5IGF0IHRoZSBjZWxsIGxldmVsLgorICAgIHJldHVybiBzdHls
ZSgpLmJvcmRlclN0YXJ0KCk7Cit9CisKK2lubGluZSBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVy
VGFibGVDZWxsOjpib3JkZXJBZGpvaW5pbmdDZWxsQWZ0ZXIoY29uc3QgUmVuZGVyVGFibGVDZWxs
KiBjZWxsKQoreworICAgIEFTU0VSVF9VTlVTRUQoY2VsbCwgdGFibGUoKS0+Y2VsbEJlZm9yZShj
ZWxsKSA9PSB0aGlzKTsKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly93ZWJraXQub3JnL2IvNzkyNzIg
LSBBZGQgc3VwcG9ydCBmb3IgbWl4ZWQgZGlyZWN0aW9uYWxpdHkgYXQgdGhlIGNlbGwgbGV2ZWwu
CisgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7Cit9CisKIGlubGluZSBSZW5kZXJUYWJs
ZUNlbGwqIFJlbmRlclRhYmxlUm93OjpmaXJzdENlbGwoKSBjb25zdAogewogICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KFJlbmRlckJveDo6Zmlyc3RDaGlsZCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCmluZGV4IGY3YTllZTc1MWZi
ZTY4YWI2ZDQ0ODBkZmY4ODQxYzZlMzc3NzYxZGUuLjE0OTk3MWJmZTFiYjRmOTQzZGM4MDE0YmRi
NTE4MDFmMGI0NGE4ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q29sLmNwcApAQCAtMzksNyArMzksNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBS
ZW5kZXJUYWJsZUNvbDo6UmVuZGVyVGFibGVDb2woRWxlbWVudCYgZWxlbWVudCwgUmVmPFJlbmRl
clN0eWxlPiYmIHN0eWxlKQogICAgIDogUmVuZGVyQm94KGVsZW1lbnQsIFdURjo6bW92ZShzdHls
ZSksIDApCi0gICAgLCBtX3NwYW4oMSkKIHsKICAgICAvLyBpbml0IFJlbmRlck9iamVjdCBhdHRy
aWJ1dGVzCiAgICAgc2V0SW5saW5lKHRydWUpOyAvLyBvdXIgb2JqZWN0IGlzIG5vdCBJbmxpbmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgKaW5kZXggYzYxZTFlYjAy
MWQwNGQ2NWEzZThiYWI0ZjYwMmNhNDZmNWMwNzQ1OS4uODQ1NzIxNzRlNWM2Yzc0MjVkZGM4YWJi
ZGM3YzU2NmM4YzU2NTg5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ29sLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q29sLmgKQEAgLTQ4LDIwICs0OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzVGFibGVDb2x1bW5H
cm91cCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkuZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTl9H
Uk9VUDsgfQogCiAgICAgUmVuZGVyVGFibGVDb2wqIGVuY2xvc2luZ0NvbHVtbkdyb3VwKCkgY29u
c3Q7Ci0gICAgUmVuZGVyVGFibGVDb2wqIGVuY2xvc2luZ0NvbHVtbkdyb3VwSWZBZGphY2VudEJl
Zm9yZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nKCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0NvbHVtbkdyb3VwKCk7
Ci0gICAgfQotCi0gICAgUmVuZGVyVGFibGVDb2wqIGVuY2xvc2luZ0NvbHVtbkdyb3VwSWZBZGph
Y2VudEFmdGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChuZXh0U2libGluZygpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBlbmNsb3NpbmdDb2x1bW5Hcm91cCgp
OwotICAgIH0KLQorICAgIFJlbmRlclRhYmxlQ29sKiBlbmNsb3NpbmdDb2x1bW5Hcm91cElmQWRq
YWNlbnRCZWZvcmUoKSBjb25zdDsKKyAgICBSZW5kZXJUYWJsZUNvbCogZW5jbG9zaW5nQ29sdW1u
R3JvdXBJZkFkamFjZW50QWZ0ZXIoKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdGhlIG5leHQg
Y29sdW1uIG9yIGNvbHVtbi1ncm91cC4KICAgICBSZW5kZXJUYWJsZUNvbCogbmV4dENvbHVtbigp
IGNvbnN0OwpAQCAtOTcsOSArODUsMjMgQEAgcHJpdmF0ZToKIAogICAgIFJlbmRlclRhYmxlKiB0
YWJsZSgpIGNvbnN0OwogCi0gICAgdW5zaWduZWQgbV9zcGFuOworICAgIHVuc2lnbmVkIG1fc3Bh
biB7IDEgfTsKIH07CiAKK2lubGluZSBSZW5kZXJUYWJsZUNvbCogUmVuZGVyVGFibGVDb2w6OmVu
Y2xvc2luZ0NvbHVtbkdyb3VwSWZBZGphY2VudEJlZm9yZSgpIGNvbnN0Cit7CisgICAgaWYgKHBy
ZXZpb3VzU2libGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZW5j
bG9zaW5nQ29sdW1uR3JvdXAoKTsKK30KKworaW5saW5lIFJlbmRlclRhYmxlQ29sKiBSZW5kZXJU
YWJsZUNvbDo6ZW5jbG9zaW5nQ29sdW1uR3JvdXBJZkFkamFjZW50QWZ0ZXIoKSBjb25zdAorewor
ICAgIGlmIChuZXh0U2libGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gZW5jbG9zaW5nQ29sdW1uR3JvdXAoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1JFTkRFUl9PQkpFQ1QoUmVuZGVyVGFibGVDb2wsIGlz
UmVuZGVyVGFibGVDb2woKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVJvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmgKaW5kZXggZTgyMzYwODkyMGJkOTM5YzM2ZjFmNDFkMjE0NWIyOTAwNmI4ZDRlNi4uMDJhYTg3
Y2E5OGJjZjMwNzE5N2I5MmZmMzlmYmQwNDczNDg5ODRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKQEAgLTQ4LDQ0ICs0OCwxNCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwYWludE91dGxpbmVGb3JSb3dJZk5lZWRlZChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYpOwogCiAgICAgc3RhdGljIFJlbmRlclRhYmxlUm93KiBjcmVhdGVBbm9ueW1vdXNXaXRo
UGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCBSZW5kZXJC
b3gqIGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlck9iamVjdCog
cGFyZW50KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUFub255
bW91c1dpdGhQYXJlbnRSZW5kZXJlcihwYXJlbnQpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Um93
SW5kZXgodW5zaWduZWQgcm93SW5kZXgpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkocm93
SW5kZXggPiBtYXhSb3dJbmRleCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIG1f
cm93SW5kZXggPSByb3dJbmRleDsKLSAgICB9CisgICAgdmlydHVhbCBSZW5kZXJCb3gqIGNyZWF0
ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlck9iamVjdCogcGFyZW50KSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIo
cGFyZW50KTsgfQogCisgICAgdm9pZCBzZXRSb3dJbmRleCh1bnNpZ25lZCk7CiAgICAgYm9vbCBy
b3dJbmRleFdhc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fcm93SW5kZXggIT0gdW5zZXRSb3dJbmRl
eDsgfQotICAgIHVuc2lnbmVkIHJvd0luZGV4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChyb3dJbmRleFdhc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIG1fcm93SW5kZXg7Ci0gICAgfQot
Ci0gICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gdGhpcy0+c2Vj
dGlvbigpOwotICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uLT5oYXNTYW1lRGlyZWN0aW9u
QXModGFibGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJTdGFydCgpOwot
Ci0gICAgICAgIHJldHVybiBzdHlsZSgpLmJvcmRlckVuZCgpOwotICAgIH0KLQotICAgIGNvbnN0
IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdUYWJsZUVuZCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0aGlzLT5zZWN0aW9uKCk7Ci0gICAg
ICAgIGlmIChzZWN0aW9uICYmIHNlY3Rpb24tPmhhc1NhbWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkK
LSAgICAgICAgICAgIHJldHVybiBzdHlsZSgpLmJvcmRlckVuZCgpOwotCi0gICAgICAgIHJldHVy
biBzdHlsZSgpLmJvcmRlclN0YXJ0KCk7Ci0gICAgfQorICAgIHVuc2lnbmVkIHJvd0luZGV4KCkg
Y29uc3Q7CiAKKyAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nVGFibGVTdGFy
dCgpIGNvbnN0OworICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdUYWJsZUVu
ZCgpIGNvbnN0OwogICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdTdGFydENl
bGwoY29uc3QgUmVuZGVyVGFibGVDZWxsKikgY29uc3Q7CiAgICAgY29uc3QgQm9yZGVyVmFsdWUm
IGJvcmRlckFkam9pbmluZ0VuZENlbGwoY29uc3QgUmVuZGVyVGFibGVDZWxsKikgY29uc3Q7CiAK
QEAgLTEyMiwyMiArOTIsNDEgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3Jvd0luZGV4IDog
MzE7CiB9OwogCi1pbmxpbmUgUmVuZGVyVGFibGUqIFJlbmRlclRhYmxlUm93Ojp0YWJsZSgpIGNv
bnN0CitpbmxpbmUgdm9pZCBSZW5kZXJUYWJsZVJvdzo6c2V0Um93SW5kZXgodW5zaWduZWQgcm93
SW5kZXgpCit7CisgICAgaWYgKFVOTElLRUxZKHJvd0luZGV4ID4gbWF4Um93SW5kZXgpKQorICAg
ICAgICBDUkFTSCgpOworICAgIG1fcm93SW5kZXggPSByb3dJbmRleDsKK30KKworaW5saW5lIHVu
c2lnbmVkIFJlbmRlclRhYmxlUm93Ojpyb3dJbmRleCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJv
d0luZGV4V2FzU2V0KCkpOworICAgIHJldHVybiBtX3Jvd0luZGV4OworfQorCitpbmxpbmUgY29u
c3QgQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlUm93Ojpib3JkZXJBZGpvaW5pbmdUYWJsZVN0YXJ0
KCkgY29uc3QKIHsKICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSB0aGlzLT5zZWN0
aW9uKCk7Ci0gICAgaWYgKCFzZWN0aW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGU+KHNlY3Rpb24tPnBhcmVudCgpKTsKKyAgICBpZiAo
c2VjdGlvbiAmJiBzZWN0aW9uLT5oYXNTYW1lRGlyZWN0aW9uQXModGFibGUoKSkpCisgICAgICAg
IHJldHVybiBzdHlsZSgpLmJvcmRlclN0YXJ0KCk7CisgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVy
RW5kKCk7CiB9CiAKLWlubGluZSBSZW5kZXJUYWJsZVJvdyogUmVuZGVyVGFibGVTZWN0aW9uOjpm
aXJzdFJvdygpIGNvbnN0CitpbmxpbmUgY29uc3QgQm9yZGVyVmFsdWUmIFJlbmRlclRhYmxlUm93
Ojpib3JkZXJBZGpvaW5pbmdUYWJsZUVuZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlclRhYmxlUm93PihSZW5kZXJCb3g6OmZpcnN0Q2hpbGQoKSk7CisgICAgUmVuZGVyVGFi
bGVTZWN0aW9uKiBzZWN0aW9uID0gdGhpcy0+c2VjdGlvbigpOworICAgIGlmIChzZWN0aW9uICYm
IHNlY3Rpb24tPmhhc1NhbWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0
eWxlKCkuYm9yZGVyRW5kKCk7CisgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyU3RhcnQoKTsKIH0K
IAotaW5saW5lIFJlbmRlclRhYmxlUm93KiBSZW5kZXJUYWJsZVNlY3Rpb246Omxhc3RSb3coKSBj
b25zdAoraW5saW5lIFJlbmRlclRhYmxlKiBSZW5kZXJUYWJsZVJvdzo6dGFibGUoKSBjb25zdAog
ewotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oUmVuZGVyQm94OjpsYXN0Q2hp
bGQoKSk7CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gdGhpcy0+c2VjdGlvbigp
OworICAgIGlmICghc2VjdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlclRhYmxlPihzZWN0aW9uLT5wYXJlbnQoKSk7CiB9CiAKIGlubGluZSBS
ZW5kZXJUYWJsZVJvdyogUmVuZGVyVGFibGVSb3c6Om5leHRSb3coKSBjb25zdApAQCAtMTUwLDYg
KzEzOSwxNiBAQCBpbmxpbmUgUmVuZGVyVGFibGVSb3cqIFJlbmRlclRhYmxlUm93OjpwcmV2aW91
c1JvdygpIGNvbnN0CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlUm93PihSZW5kZXJC
b3g6OnByZXZpb3VzU2libGluZygpKTsKIH0KIAoraW5saW5lIFJlbmRlclRhYmxlUm93KiBSZW5k
ZXJUYWJsZVNlY3Rpb246OmZpcnN0Um93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG93bmNhc3Q8
UmVuZGVyVGFibGVSb3c+KFJlbmRlckJveDo6Zmlyc3RDaGlsZCgpKTsKK30KKworaW5saW5lIFJl
bmRlclRhYmxlUm93KiBSZW5kZXJUYWJsZVNlY3Rpb246Omxhc3RSb3coKSBjb25zdAoreworICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oUmVuZGVyQm94OjpsYXN0Q2hpbGQoKSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19S
RU5ERVJfT0JKRUNUKFJlbmRlclRhYmxlUm93LCBpc1RhYmxlUm93KCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGQyZmM0Y2M4Nzdk
ZjI2MjdhMzVmMjc3ODQyZGM3ZWM1NTkxMGU1YzYuLmMxNjc1OWU2ZTIxZjRjZDZjMGVmMDJlNzg3
ZjZmMTRiNzI5NWYyMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCkBAIC04NCwyOCArODQsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHVw
ZGF0ZUxvZ2ljYWxIZWlnaHRGb3JDZWxsKFJlbmRlclRhYmxlU2VjdGlvbjo6Um93U3RydWN0JiBy
b3cKIAogUmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24oRWxlbWVudCYgZWxl
bWVudCwgUmVmPFJlbmRlclN0eWxlPiYmIHN0eWxlKQogICAgIDogUmVuZGVyQm94KGVsZW1lbnQs
IFdURjo6bW92ZShzdHlsZSksIDApCi0gICAgLCBtX2NDb2woMCkKLSAgICAsIG1fY1JvdygwKQot
ICAgICwgbV9vdXRlckJvcmRlclN0YXJ0KDApCi0gICAgLCBtX291dGVyQm9yZGVyRW5kKDApCi0g
ICAgLCBtX291dGVyQm9yZGVyQmVmb3JlKDApCi0gICAgLCBtX291dGVyQm9yZGVyQWZ0ZXIoMCkK
LSAgICAsIG1fbmVlZHNDZWxsUmVjYWxjKGZhbHNlKQotICAgICwgbV9oYXNNdWx0aXBsZUNlbGxM
ZXZlbHMoZmFsc2UpCiB7CiAgICAgc2V0SW5saW5lKGZhbHNlKTsKIH0KIAogUmVuZGVyVGFibGVT
ZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50LCBSZWY8UmVuZGVy
U3R5bGU+JiYgc3R5bGUpCiAgICAgOiBSZW5kZXJCb3goZG9jdW1lbnQsIFdURjo6bW92ZShzdHls
ZSksIDApCi0gICAgLCBtX2NDb2woMCkKLSAgICAsIG1fY1JvdygwKQotICAgICwgbV9vdXRlckJv
cmRlclN0YXJ0KDApCi0gICAgLCBtX291dGVyQm9yZGVyRW5kKDApCi0gICAgLCBtX291dGVyQm9y
ZGVyQmVmb3JlKDApCi0gICAgLCBtX291dGVyQm9yZGVyQWZ0ZXIoMCkKLSAgICAsIG1fbmVlZHND
ZWxsUmVjYWxjKGZhbHNlKQotICAgICwgbV9oYXNNdWx0aXBsZUNlbGxMZXZlbHMoZmFsc2UpCiB7
CiAgICAgc2V0SW5saW5lKGZhbHNlKTsKIH0KQEAgLTEwNDQsMTEgKzEwMjgsMTEgQEAgQ2VsbFNw
YW4gUmVuZGVyVGFibGVTZWN0aW9uOjpkaXJ0aWVkUm93cyhjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0KSBjb25zdAogICAgIENlbGxTcGFuIGNvdmVyZWRSb3dzID0gc3Bhbm5lZFJvd3MoZGFt
YWdlUmVjdCwgSW5jbHVkZUFsbEludGVyc2VjdGluZ0NlbGxzKTsKIAogICAgIC8vIFRvIHJlcGFp
bnQgdGhlIGJvcmRlciB3ZSBtaWdodCBuZWVkIHRvIHJlcGFpbnQgZmlyc3Qgb3IgbGFzdCByb3cg
ZXZlbiBpZiB0aGV5IGFyZSBub3Qgc3Bhbm5lZCB0aGVtc2VsdmVzLgotICAgIGlmIChjb3ZlcmVk
Um93cy5zdGFydCgpID49IG1fcm93UG9zLnNpemUoKSAtIDEgJiYgbV9yb3dQb3NbbV9yb3dQb3Mu
c2l6ZSgpIC0gMV0gKyB0YWJsZSgpLT5vdXRlckJvcmRlckFmdGVyKCkgPj0gZGFtYWdlUmVjdC55
KCkpCi0gICAgICAgIC0tY292ZXJlZFJvd3Muc3RhcnQoKTsKKyAgICBpZiAoY292ZXJlZFJvd3Mu
c3RhcnQgPj0gbV9yb3dQb3Muc2l6ZSgpIC0gMSAmJiBtX3Jvd1Bvc1ttX3Jvd1Bvcy5zaXplKCkg
LSAxXSArIHRhYmxlKCktPm91dGVyQm9yZGVyQWZ0ZXIoKSA+PSBkYW1hZ2VSZWN0LnkoKSkKKyAg
ICAgICAgLS1jb3ZlcmVkUm93cy5zdGFydDsKIAotICAgIGlmICghY292ZXJlZFJvd3MuZW5kKCkg
JiYgbV9yb3dQb3NbMF0gLSB0YWJsZSgpLT5vdXRlckJvcmRlckJlZm9yZSgpIDw9IGRhbWFnZVJl
Y3QubWF4WSgpKQotICAgICAgICArK2NvdmVyZWRSb3dzLmVuZCgpOworICAgIGlmICghY292ZXJl
ZFJvd3MuZW5kICYmIG1fcm93UG9zWzBdIC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJCZWZvcmUoKSA8
PSBkYW1hZ2VSZWN0Lm1heFkoKSkKKyAgICAgICAgKytjb3ZlcmVkUm93cy5lbmQ7CiAKICAgICBy
ZXR1cm4gY292ZXJlZFJvd3M7CiB9CkBAIC0xMDYyLDExICsxMDQ2LDExIEBAIENlbGxTcGFuIFJl
bmRlclRhYmxlU2VjdGlvbjo6ZGlydGllZENvbHVtbnMoY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdl
UmVjdCkgY29uc3QKIAogICAgIGNvbnN0IFZlY3RvcjxpbnQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgp
LT5jb2x1bW5Qb3NpdGlvbnMoKTsKICAgICAvLyBUbyByZXBhaW50IHRoZSBib3JkZXIgd2UgbWln
aHQgbmVlZCB0byByZXBhaW50IGZpcnN0IG9yIGxhc3QgY29sdW1uIGV2ZW4gaWYgdGhleSBhcmUg
bm90IHNwYW5uZWQgdGhlbXNlbHZlcy4KLSAgICBpZiAoY292ZXJlZENvbHVtbnMuc3RhcnQoKSA+
PSBjb2x1bW5Qb3Muc2l6ZSgpIC0gMSAmJiBjb2x1bW5Qb3NbY29sdW1uUG9zLnNpemUoKSAtIDFd
ICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJFbmQoKSA+PSBkYW1hZ2VSZWN0LngoKSkKLSAgICAgICAg
LS1jb3ZlcmVkQ29sdW1ucy5zdGFydCgpOworICAgIGlmIChjb3ZlcmVkQ29sdW1ucy5zdGFydCA+
PSBjb2x1bW5Qb3Muc2l6ZSgpIC0gMSAmJiBjb2x1bW5Qb3NbY29sdW1uUG9zLnNpemUoKSAtIDFd
ICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJFbmQoKSA+PSBkYW1hZ2VSZWN0LngoKSkKKyAgICAgICAg
LS1jb3ZlcmVkQ29sdW1ucy5zdGFydDsKIAotICAgIGlmICghY292ZXJlZENvbHVtbnMuZW5kKCkg
JiYgY29sdW1uUG9zWzBdIC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJTdGFydCgpIDw9IGRhbWFnZVJl
Y3QubWF4WCgpKQotICAgICAgICArK2NvdmVyZWRDb2x1bW5zLmVuZCgpOworICAgIGlmICghY292
ZXJlZENvbHVtbnMuZW5kICYmIGNvbHVtblBvc1swXSAtIHRhYmxlKCktPm91dGVyQm9yZGVyU3Rh
cnQoKSA8PSBkYW1hZ2VSZWN0Lm1heFgoKSkKKyAgICAgICAgKytjb3ZlcmVkQ29sdW1ucy5lbmQ7
CiAKICAgICByZXR1cm4gY292ZXJlZENvbHVtbnM7CiB9CkBAIC0xMjUzLDE3ICsxMjM3LDE3IEBA
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgQ2VsbFNwYW4gZGlydGllZFJvd3MgPSB0aGlz
LT5kaXJ0aWVkUm93cyh0YWJsZUFsaWduZWRSZWN0KTsKICAgICBDZWxsU3BhbiBkaXJ0aWVkQ29s
dW1ucyA9IHRoaXMtPmRpcnRpZWRDb2x1bW5zKHRhYmxlQWxpZ25lZFJlY3QpOwogCi0gICAgaWYg
KGRpcnRpZWRDb2x1bW5zLnN0YXJ0KCkgPCBkaXJ0aWVkQ29sdW1ucy5lbmQoKSkgeworICAgIGlm
IChkaXJ0aWVkQ29sdW1ucy5zdGFydCA8IGRpcnRpZWRDb2x1bW5zLmVuZCkgewogICAgICAgICBp
ZiAoIW1faGFzTXVsdGlwbGVDZWxsTGV2ZWxzICYmICFtX292ZXJmbG93aW5nQ2VsbHMuc2l6ZSgp
KSB7CiAgICAgICAgICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBz
ZWRUYWJsZUJvcmRlcnMpIHsKICAgICAgICAgICAgICAgICAvLyBDb2xsYXBzZWQgYm9yZGVycyBh
cmUgcGFpbnRlZCBmcm9tIHRoZSBib3R0b20gcmlnaHQgdG8gdGhlIHRvcCBsZWZ0IHNvIHRoYXQg
cHJlY2VkZW5jZQogICAgICAgICAgICAgICAgIC8vIGR1ZSB0byBjZWxsIHBvc2l0aW9uIGlzIHJl
c3BlY3RlZC4gV2UgbmVlZCB0byBwYWludCBvbmUgcm93IGJleW9uZCB0aGUgdG9wbW9zdCBkaXJ0
aWVkCiAgICAgICAgICAgICAgICAgLy8gcm93IHRvIGNhbGN1bGF0ZSBpdHMgY29sbGFwc2VkIGJv
cmRlciB2YWx1ZS4KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydFJvdyA9IGRpcnRpZWRS
b3dzLnN0YXJ0KCkgPyBkaXJ0aWVkUm93cy5zdGFydCgpIC0gMSA6IDA7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCByID0gZGlydGllZFJvd3MuZW5kKCk7IHIgPiBzdGFydFJvdzsgci0t
KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRSb3cgPSBkaXJ0aWVkUm93cy5zdGFy
dCA/IGRpcnRpZWRSb3dzLnN0YXJ0IC0gMSA6IDA7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCByID0gZGlydGllZFJvd3MuZW5kOyByID4gc3RhcnRSb3c7IHItLSkgewogICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCByb3cgPSByIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYm9v
bCBzaG91bGRQYWludFJvd0dyb3VwQm9yZGVyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgYyA9IGRpcnRpZWRDb2x1bW5zLmVuZCgpOyBjID4gZGlydGllZENvbHVt
bnMuc3RhcnQoKTsgYy0tKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYyA9
IGRpcnRpZWRDb2x1bW5zLmVuZDsgYyA+IGRpcnRpZWRDb2x1bW5zLnN0YXJ0OyBjLS0pIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbCA9IGMgLSAxOwogICAgICAgICAgICAg
ICAgICAgICAgICAgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChyb3csIGNvbCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LnByaW1h
cnlDZWxsKCk7CkBAIC0xMjc1LDcgKzEyNTksNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFBhaW50Um93R3JvdXBCb3JkZXIgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyb3cgPiBkaXJ0aWVk
Um93cy5zdGFydCgpICYmIHByaW1hcnlDZWxsQXQocm93IC0gMSwgY29sKSA9PSBjZWxsKSB8fCAo
Y29sID4gZGlydGllZENvbHVtbnMuc3RhcnQoKSAmJiBwcmltYXJ5Q2VsbEF0KHJvdywgY29sIC0g
MSkgPT0gY2VsbCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJvdyA+IGRpcnRpZWRS
b3dzLnN0YXJ0ICYmIHByaW1hcnlDZWxsQXQocm93IC0gMSwgY29sKSA9PSBjZWxsKSB8fCAoY29s
ID4gZGlydGllZENvbHVtbnMuc3RhcnQgJiYgcHJpbWFyeUNlbGxBdChyb3csIGNvbCAtIDEpID09
IGNlbGwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYWQgYSBy
dW4gb2YgbnVsbCBjZWxscyBwYWludCB0aGVpciBjb3JyZXNwb25kaW5nIHNlY3Rpb24gb2YgdGhl
IHJvdyBncm91cCdzIGJvcmRlciBpZiBuZWNlc3NhcnkuIE5vdGUgdGhhdApAQCAtMTI5NCwxNCAr
MTI3OCwxNCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gRHJhdyB0aGUgZGlydHkgY2Vs
bHMgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcHBlYXIuCi0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCByID0gZGlydGllZFJvd3Muc3RhcnQoKTsgciA8IGRpcnRpZWRSb3dzLmVuZCgpOyBy
KyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSBkaXJ0aWVkUm93cy5zdGFy
dDsgciA8IGRpcnRpZWRSb3dzLmVuZDsgcisrKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clRhYmxlUm93KiByb3cgPSBtX2dyaWRbcl0ucm93UmVuZGVyZXI7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChyb3cgJiYgIXJvdy0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJvdy0+cGFpbnRPdXRsaW5lRm9yUm93SWZOZWVkZWQocGFpbnRJbmZvLCBw
YWludE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYyA9IGRpcnRp
ZWRDb2x1bW5zLnN0YXJ0KCk7IGMgPCBkaXJ0aWVkQ29sdW1ucy5lbmQoKTsgYysrKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYyA9IGRpcnRpZWRDb2x1bW5zLnN0YXJ0OyBj
IDwgZGlydGllZENvbHVtbnMuZW5kOyBjKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIENl
bGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQociwgYyk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LnByaW1hcnlDZWxsKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNlbGwgfHwgKHIgPiBkaXJ0aWVkUm93cy5zdGFydCgpICYm
IHByaW1hcnlDZWxsQXQociAtIDEsIGMpID09IGNlbGwpIHx8IChjID4gZGlydGllZENvbHVtbnMu
c3RhcnQoKSAmJiBwcmltYXJ5Q2VsbEF0KHIsIGMgLSAxKSA9PSBjZWxsKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghY2VsbCB8fCAociA+IGRpcnRpZWRSb3dzLnN0YXJ0ICYmIHByaW1h
cnlDZWxsQXQociAtIDEsIGMpID09IGNlbGwpIHx8IChjID4gZGlydGllZENvbHVtbnMuc3RhcnQg
JiYgcHJpbWFyeUNlbGxBdChyLCBjIC0gMSkgPT0gY2VsbCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYWludENlbGwoY2Vs
bCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEz
MjEsMTEgKzEzMDUsMTEgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGEKIAogICAgICAgICAgICAg
SGFzaFNldDxSZW5kZXJUYWJsZUNlbGwqPiBzcGFubmluZ0NlbGxzOwogCi0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIHIgPSBkaXJ0aWVkUm93cy5zdGFydCgpOyByIDwgZGlydGllZFJvd3MuZW5k
KCk7IHIrKykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCByID0gZGlydGllZFJvd3Muc3Rh
cnQ7IHIgPCBkaXJ0aWVkUm93cy5lbmQ7IHIrKykgewogICAgICAgICAgICAgICAgIFJlbmRlclRh
YmxlUm93KiByb3cgPSBtX2dyaWRbcl0ucm93UmVuZGVyZXI7CiAgICAgICAgICAgICAgICAgaWYg
KHJvdyAmJiAhcm93LT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKQogICAgICAgICAgICAgICAgICAg
ICByb3ctPnBhaW50T3V0bGluZUZvclJvd0lmTmVlZGVkKHBhaW50SW5mbywgcGFpbnRPZmZzZXQp
OwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYyA9IGRpcnRpZWRDb2x1bW5zLnN0YXJ0
KCk7IGMgPCBkaXJ0aWVkQ29sdW1ucy5lbmQoKTsgYysrKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjID0gZGlydGllZENvbHVtbnMuc3RhcnQ7IGMgPCBkaXJ0aWVkQ29sdW1ucy5l
bmQ7IGMrKykgewogICAgICAgICAgICAgICAgICAgICBDZWxsU3RydWN0JiBjdXJyZW50ID0gY2Vs
bEF0KHIsIGMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQuaGFzQ2VsbHMoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTUzNSw4ICsxNTE5LDggQEAg
Ym9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwKICAgICBDZWxsU3BhbiBjb2x1bW5TcGFuID0gc3Bhbm5l
ZENvbHVtbnModGFibGVBbGlnbmVkUmVjdCwgRG9Ob3RJbmNsdWRlQWxsSW50ZXJzZWN0aW5nQ2Vs
bHMpOwogCiAgICAgLy8gTm93IGl0ZXJhdGUgb3ZlciB0aGUgc3Bhbm5lZCByb3dzIGFuZCBjb2x1
bW5zLgotICAgIGZvciAodW5zaWduZWQgaGl0Um93ID0gcm93U3Bhbi5zdGFydCgpOyBoaXRSb3cg
PCByb3dTcGFuLmVuZCgpOyArK2hpdFJvdykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGhpdENv
bHVtbiA9IGNvbHVtblNwYW4uc3RhcnQoKTsgaGl0Q29sdW1uIDwgY29sdW1uU3Bhbi5lbmQoKTsg
KytoaXRDb2x1bW4pIHsKKyAgICBmb3IgKHVuc2lnbmVkIGhpdFJvdyA9IHJvd1NwYW4uc3RhcnQ7
IGhpdFJvdyA8IHJvd1NwYW4uZW5kOyArK2hpdFJvdykgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGhpdENvbHVtbiA9IGNvbHVtblNwYW4uc3RhcnQ7IGhpdENvbHVtbiA8IGNvbHVtblNwYW4uZW5k
OyArK2hpdENvbHVtbikgewogICAgICAgICAgICAgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxB
dChoaXRSb3csIGhpdENvbHVtbik7CiAKICAgICAgICAgICAgIC8vIElmIHRoZSBjZWxsIGlzIGVt
cHR5LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCBlODgwODNjMWU0YzBiNDI0NGEwNWVkMGY2MmZjNGZk
NjQ1YjI2ZmNhLi40M2U3ODg4OTdhZTAyY2IxYzEyY2U3MzcxNTg4ODlhNGQ2MTM2ZWEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0zMCw2
ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyVGFibGVDZWxs
OwogY2xhc3MgUmVuZGVyVGFibGVSb3c7CiAKIGVudW0gQ29sbGFwc2VkQm9yZGVyU2lkZSB7CkBA
IC00MCwyOCArNDEsMTggQEAgZW51bSBDb2xsYXBzZWRCb3JkZXJTaWRlIHsKIH07CiAKIC8vIEhl
bHBlciBjbGFzcyBmb3IgcGFpbnRPYmplY3QuCi1jbGFzcyBDZWxsU3BhbiB7CitzdHJ1Y3QgQ2Vs
bFNwYW4gewogcHVibGljOgogICAgIENlbGxTcGFuKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBl
bmQpCi0gICAgICAgIDogbV9zdGFydChzdGFydCkKLSAgICAgICAgLCBtX2VuZChlbmQpCisgICAg
ICAgIDogc3RhcnQoc3RhcnQpCisgICAgICAgICwgZW5kKGVuZCkKICAgICB7CiAgICAgfQogCi0g
ICAgdW5zaWduZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgdW5zaWdu
ZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KLQotICAgIHVuc2lnbmVkJiBzdGFydCgp
IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICB1bnNpZ25lZCYgZW5kKCkgeyByZXR1cm4gbV9lbmQ7
IH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX3N0YXJ0OwotICAgIHVuc2lnbmVkIG1fZW5k
OworICAgIHVuc2lnbmVkIHN0YXJ0OworICAgIHVuc2lnbmVkIGVuZDsKIH07CiAKLWNsYXNzIFJl
bmRlclRhYmxlQ2VsbDsKLWNsYXNzIFJlbmRlclRhYmxlUm93OwotCiBjbGFzcyBSZW5kZXJUYWJs
ZVNlY3Rpb24gZmluYWwgOiBwdWJsaWMgUmVuZGVyQm94IHsKIHB1YmxpYzoKICAgICBSZW5kZXJU
YWJsZVNlY3Rpb24oRWxlbWVudCYsIFJlZjxSZW5kZXJTdHlsZT4mJik7CkBAIC04NSw4NyArNzYs
MzMgQEAgcHVibGljOgogCiAgICAgc3RydWN0IENlbGxTdHJ1Y3QgewogICAgICAgICBWZWN0b3I8
UmVuZGVyVGFibGVDZWxsKiwgMT4gY2VsbHM7IAotICAgICAgICBib29sIGluQ29sU3BhbjsgLy8g
dHJ1ZSBmb3IgY29sdW1ucyBhZnRlciB0aGUgZmlyc3QgaW4gYSBjb2xzcGFuCi0KLSAgICAgICAg
Q2VsbFN0cnVjdCgpCi0gICAgICAgICAgICA6IGluQ29sU3BhbihmYWxzZSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBwcmltYXJ5Q2VsbCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNDZWxscygpID8gY2VsbHNbY2VsbHMuc2l6ZSgp
IC0gMV0gOiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsKiBw
cmltYXJ5Q2VsbCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBoYXNDZWxs
cygpID8gY2VsbHNbY2VsbHMuc2l6ZSgpIC0gMV0gOiAwOwotICAgICAgICB9CisgICAgICAgIGJv
b2wgaW5Db2xTcGFuIHsgZmFsc2UgfTsgLy8gdHJ1ZSBmb3IgY29sdW1ucyBhZnRlciB0aGUgZmly
c3QgaW4gYSBjb2xzcGFuCiAKKyAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBwcmltYXJ5Q2VsbCgp
IHsgcmV0dXJuIGhhc0NlbGxzKCkgPyBjZWxsc1tjZWxscy5zaXplKCkgLSAxXSA6IDA7IH0KKyAg
ICAgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsKiBwcmltYXJ5Q2VsbCgpIGNvbnN0IHsgcmV0dXJu
IGhhc0NlbGxzKCkgPyBjZWxsc1tjZWxscy5zaXplKCkgLSAxXSA6IDA7IH0KICAgICAgICAgYm9v
bCBoYXNDZWxscygpIGNvbnN0IHsgcmV0dXJuIGNlbGxzLnNpemUoKSA+IDA7IH0KICAgICB9Owog
CiAgICAgdHlwZWRlZiBWZWN0b3I8Q2VsbFN0cnVjdD4gUm93OwotCiAgICAgc3RydWN0IFJvd1N0
cnVjdCB7Ci0gICAgICAgIFJvd1N0cnVjdCgpCi0gICAgICAgICAgICA6IHJvd1JlbmRlcmVyKDAp
Ci0gICAgICAgICAgICAsIGJhc2VsaW5lKCkKLSAgICAgICAgewotICAgICAgICB9Ci0KICAgICAg
ICAgUm93IHJvdzsKLSAgICAgICAgUmVuZGVyVGFibGVSb3cqIHJvd1JlbmRlcmVyOworICAgICAg
ICBSZW5kZXJUYWJsZVJvdyogcm93UmVuZGVyZXIgeyBudWxscHRyIH07CiAgICAgICAgIExheW91
dFVuaXQgYmFzZWxpbmU7CiAgICAgICAgIExlbmd0aCBsb2dpY2FsSGVpZ2h0OwogICAgIH07CiAK
LSAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nVGFibGVTdGFydCgpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoaGFzU2FtZURpcmVjdGlvbkFzKHRhYmxlKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyU3RhcnQoKTsKLQotICAgICAgICByZXR1cm4gc3R5
bGUoKS5ib3JkZXJFbmQoKTsKLSAgICB9Ci0KLSAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVy
QWRqb2luaW5nVGFibGVFbmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGhhc1NhbWVEaXJl
Y3Rpb25Bcyh0YWJsZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZSgpLmJvcmRlckVuZCgp
OwotCi0gICAgICAgIHJldHVybiBzdHlsZSgpLmJvcmRlclN0YXJ0KCk7Ci0gICAgfQotCisgICAg
Y29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25zdDsKKyAg
ICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nVGFibGVFbmQoKSBjb25zdDsKICAg
ICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nU3RhcnRDZWxsKGNvbnN0IFJlbmRl
clRhYmxlQ2VsbCopIGNvbnN0OwogICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5p
bmdFbmRDZWxsKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCopIGNvbnN0OwogCiAgICAgY29uc3QgUmVu
ZGVyVGFibGVDZWxsKiBmaXJzdFJvd0NlbGxBZGpvaW5pbmdUYWJsZVN0YXJ0KCkgY29uc3Q7CiAg
ICAgY29uc3QgUmVuZGVyVGFibGVDZWxsKiBmaXJzdFJvd0NlbGxBZGpvaW5pbmdUYWJsZUVuZCgp
IGNvbnN0OwogCi0gICAgQ2VsbFN0cnVjdCYgY2VsbEF0KHVuc2lnbmVkIHJvdywgIHVuc2lnbmVk
IGNvbCkKLSAgICB7Ci0gICAgICAgIHJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKLSAgICAgICAgcmV0
dXJuIG1fZ3JpZFtyb3ddLnJvd1tjb2xdOwotICAgIH0KLQotICAgIGNvbnN0IENlbGxTdHJ1Y3Qm
IGNlbGxBdCh1bnNpZ25lZCByb3csIHVuc2lnbmVkIGNvbCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVCghbV9uZWVkc0NlbGxSZWNhbGMpOwotICAgICAgICByZXR1cm4gbV9ncmlkW3Jvd10u
cm93W2NvbF07Ci0gICAgfQotCi0gICAgUmVuZGVyVGFibGVDZWxsKiBwcmltYXJ5Q2VsbEF0KHVu
c2lnbmVkIHJvdywgdW5zaWduZWQgY29sKQotICAgIHsKLSAgICAgICAgcmVjYWxjQ2VsbHNJZk5l
ZWRlZCgpOwotICAgICAgICBDZWxsU3RydWN0JiBjID0gbV9ncmlkW3Jvd10ucm93W2NvbF07Ci0g
ICAgICAgIHJldHVybiBjLnByaW1hcnlDZWxsKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyVGFibGVS
b3cqIHJvd1JlbmRlcmVyQXQodW5zaWduZWQgcm93KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKCFtX25lZWRzQ2VsbFJlY2FsYyk7Ci0gICAgICAgIHJldHVybiBtX2dyaWRbcm93XS5yb3dS
ZW5kZXJlcjsKLSAgICB9CisgICAgQ2VsbFN0cnVjdCYgY2VsbEF0KHVuc2lnbmVkIHJvdywgIHVu
c2lnbmVkIGNvbCk7CisgICAgY29uc3QgQ2VsbFN0cnVjdCYgY2VsbEF0KHVuc2lnbmVkIHJvdywg
dW5zaWduZWQgY29sKSBjb25zdDsKKyAgICBSZW5kZXJUYWJsZUNlbGwqIHByaW1hcnlDZWxsQXQo
dW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2wpOworICAgIFJlbmRlclRhYmxlUm93KiByb3dSZW5k
ZXJlckF0KHVuc2lnbmVkIHJvdykgY29uc3Q7CiAKICAgICB2b2lkIGFwcGVuZENvbHVtbih1bnNp
Z25lZCBwb3MpOwogICAgIHZvaWQgc3BsaXRDb2x1bW4odW5zaWduZWQgcG9zLCB1bnNpZ25lZCBm
aXJzdCk7CkBAIC0xODEsNTcgKzExOCwyMCBAQCBwdWJsaWM6CiAgICAgaW50IG91dGVyQm9yZGVy
U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX291dGVyQm9yZGVyU3RhcnQ7IH0KICAgICBpbnQgb3V0
ZXJCb3JkZXJFbmQoKSBjb25zdCB7IHJldHVybiBtX291dGVyQm9yZGVyRW5kOyB9CiAKLSAgICBp
bnQgb3V0ZXJCb3JkZXJMZWZ0KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93KSBj
b25zdAotICAgIHsKLSAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IG91dGVyQm9yZGVyU3RhcnQoKSA6IG91dGVyQm9yZGVyRW5kKCk7Ci0gICAg
cmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBv
dXRlckJvcmRlckFmdGVyKCkgOiBvdXRlckJvcmRlckJlZm9yZSgpOwotICAgIH0KLQotICAgIGlu
dCBvdXRlckJvcmRlclJpZ2h0KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93KSBj
b25zdAotICAgIHsKLSAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IG91dGVyQm9yZGVyRW5kKCkgOiBvdXRlckJvcmRlclN0YXJ0KCk7Ci0gICAg
cmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBv
dXRlckJvcmRlckJlZm9yZSgpIDogb3V0ZXJCb3JkZXJBZnRlcigpOwotICAgIH0KLQotICAgIGlu
dCBvdXRlckJvcmRlclRvcChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdykgY29u
c3QKLSAgICB7Ci0gICAgaWYgKHN0eWxlRm9yQ2VsbEZsb3ctPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpCi0gICAgICAgIHJldHVybiBzdHlsZUZvckNlbGxGbG93LT5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpID8gb3V0ZXJCb3JkZXJBZnRlcigpIDogb3V0ZXJCb3JkZXJCZWZvcmUoKTsK
LSAgICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
b3V0ZXJCb3JkZXJTdGFydCgpIDogb3V0ZXJCb3JkZXJFbmQoKTsKLSAgICB9Ci0KLSAgICBpbnQg
b3V0ZXJCb3JkZXJCb3R0b20oY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlRm9yQ2VsbEZsb3cpIGNv
bnN0Ci0gICAgewotICAgIGlmIChzdHlsZUZvckNlbGxGbG93LT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQotICAgICAgICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSA/IG91dGVyQm9yZGVyQmVmb3JlKCkgOiBvdXRlckJvcmRlckFmdGVyKCk7
Ci0gICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IG91dGVyQm9yZGVyRW5kKCkgOiBvdXRlckJvcmRlclN0YXJ0KCk7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgbnVtUm93cygpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoIW1fbmVlZHNDZWxs
UmVjYWxjKTsKLSAgICAgICAgcmV0dXJuIG1fZ3JpZC5zaXplKCk7Ci0gICAgfQorICAgIGludCBv
dXRlckJvcmRlckxlZnQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlRm9yQ2VsbEZsb3cpIGNvbnN0
OworICAgIGludCBvdXRlckJvcmRlclJpZ2h0KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNl
bGxGbG93KSBjb25zdDsKKyAgICBpbnQgb3V0ZXJCb3JkZXJUb3AoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlRm9yQ2VsbEZsb3cpIGNvbnN0OworICAgIGludCBvdXRlckJvcmRlckJvdHRvbShjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdykgY29uc3Q7CiAKKyAgICB1bnNpZ25lZCBu
dW1Sb3dzKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbnVtQ29sdW1ucygpIGNvbnN0OwogICAgIHZv
aWQgcmVjYWxjQ2VsbHMoKTsKLSAgICB2b2lkIHJlY2FsY0NlbGxzSWZOZWVkZWQoKQotICAgIHsK
LSAgICAgICAgaWYgKG1fbmVlZHNDZWxsUmVjYWxjKQotICAgICAgICAgICAgcmVjYWxjQ2VsbHMo
KTsKLSAgICB9CisgICAgdm9pZCByZWNhbGNDZWxsc0lmTmVlZGVkKCk7CiAKICAgICBib29sIG5l
ZWRzQ2VsbFJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNDZWxsUmVjYWxjOyB9CiAgICAg
dm9pZCBzZXROZWVkc0NlbGxSZWNhbGMoKTsKIAotICAgIExheW91dFVuaXQgcm93QmFzZWxpbmUo
dW5zaWduZWQgcm93KQotICAgIHsKLSAgICAgICAgcmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwotICAg
ICAgICByZXR1cm4gbV9ncmlkW3Jvd10uYmFzZWxpbmU7Ci0gICAgfQotCisgICAgTGF5b3V0VW5p
dCByb3dCYXNlbGluZSh1bnNpZ25lZCByb3cpOwogICAgIHZvaWQgcm93TG9naWNhbEhlaWdodENo
YW5nZWQodW5zaWduZWQgcm93SW5kZXgpOwogCiAgICAgdm9pZCByZW1vdmVDYWNoZWRDb2xsYXBz
ZWRCb3JkZXJzKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCopOwpAQCAtMjQzLDEwICsxNDMsNyBAQCBw
dWJsaWM6CiAgICAgaW50IGRpc3RyaWJ1dGVFeHRyYUxvZ2ljYWxIZWlnaHRUb1Jvd3MoaW50IGV4
dHJhTG9naWNhbEhlaWdodCk7CiAKICAgICBzdGF0aWMgUmVuZGVyVGFibGVTZWN0aW9uKiBjcmVh
dGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAg
dmlydHVhbCBSZW5kZXJCb3gqIGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0
IFJlbmRlck9iamVjdCogcGFyZW50KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihwYXJlbnQpOwotICAgIH0KKyAg
ICB2aXJ0dWFsIFJlbmRlckJveCogY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29u
c3QgUmVuZGVyT2JqZWN0KiBwYXJlbnQpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGNyZWF0ZUFu
b255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihwYXJlbnQpOyB9CiAgICAgCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7CiAKQEAg
LTI5MiwxMiArMTg5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhc092ZXJmbG93aW5nQ2VsbCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkgfHwgbV9mb3JjZVNsb3dQ
YWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsOyB9CiAgICAgdm9pZCBjb21wdXRlT3ZlcmZsb3dG
cm9tQ2VsbHModW5zaWduZWQgdG90YWxSb3dzLCB1bnNpZ25lZCBuRWZmQ29scyk7CiAKLSAgICBD
ZWxsU3BhbiBmdWxsVGFibGVSb3dTcGFuKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgh
bV9uZWVkc0NlbGxSZWNhbGMpOwotICAgICAgICByZXR1cm4gQ2VsbFNwYW4oMCwgbV9ncmlkLnNp
emUoKSk7Ci0gICAgfQotCisgICAgQ2VsbFNwYW4gZnVsbFRhYmxlUm93U3BhbigpIGNvbnN0Owog
ICAgIENlbGxTcGFuIGZ1bGxUYWJsZUNvbHVtblNwYW4oKSBjb25zdCB7IHJldHVybiBDZWxsU3Bh
bigwLCB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6ZSgpKTsgfQogCiAgICAgLy8gRmxpcCB0aGUgcmVj
dCBzbyBpdCBhbGlnbnMgd2l0aCB0aGUgY29vcmRpbmF0ZXMgdXNlZCBieSB0aGUgcm93UG9zIGFu
ZCBjb2x1bW5Qb3MgdmVjdG9ycy4KQEAgLTMyNCwyOSArMjE2LDEyMCBAQCBwcml2YXRlOgogICAg
IFZlY3RvcjxpbnQ+IG1fcm93UG9zOwogCiAgICAgLy8gdGhlIGN1cnJlbnQgaW5zZXJ0aW9uIHBv
c2l0aW9uCi0gICAgdW5zaWduZWQgbV9jQ29sOwotICAgIHVuc2lnbmVkIG1fY1JvdzsKKyAgICB1
bnNpZ25lZCBtX2NDb2wgeyAwIH07CisgICAgdW5zaWduZWQgbV9jUm93ICB7IDAgfTsKIAotICAg
IGludCBtX291dGVyQm9yZGVyU3RhcnQ7Ci0gICAgaW50IG1fb3V0ZXJCb3JkZXJFbmQ7Ci0gICAg
aW50IG1fb3V0ZXJCb3JkZXJCZWZvcmU7Ci0gICAgaW50IG1fb3V0ZXJCb3JkZXJBZnRlcjsKKyAg
ICBpbnQgbV9vdXRlckJvcmRlclN0YXJ0ICB7IDAgfTsKKyAgICBpbnQgbV9vdXRlckJvcmRlckVu
ZCAgeyAwIH07CisgICAgaW50IG1fb3V0ZXJCb3JkZXJCZWZvcmUgIHsgMCB9OworICAgIGludCBt
X291dGVyQm9yZGVyQWZ0ZXIgIHsgMCB9OwogCi0gICAgYm9vbCBtX25lZWRzQ2VsbFJlY2FsYzsK
KyAgICBib29sIG1fbmVlZHNDZWxsUmVjYWxjICB7IGZhbHNlIH07CiAKICAgICAvLyBUaGlzIEhh
c2hTZXQgaG9sZHMgdGhlIG92ZXJmbG93aW5nIGNlbGxzIGZvciBmYXN0ZXIgcGFpbnRpbmcuCiAg
ICAgLy8gSWYgd2UgaGF2ZSBtb3JlIHRoYW4gZ01heEFsbG93ZWRPdmVyZmxvd2luZ0NlbGxSYXRp
byAqIHRvdGFsIGNlbGxzLCBpdCB3aWxsIGJlIGVtcHR5CiAgICAgLy8gYW5kIG1fZm9yY2VTbG93
UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCB3aWxsIGJlIHNldCB0byBzYXZlIG1lbW9yeS4K
ICAgICBIYXNoU2V0PFJlbmRlclRhYmxlQ2VsbCo+IG1fb3ZlcmZsb3dpbmdDZWxsczsKLSAgICBi
b29sIG1fZm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbDsKKyAgICBib29sIG1f
Zm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCB7IGZhbHNlIH07CiAKLSAgICBi
b29sIG1faGFzTXVsdGlwbGVDZWxsTGV2ZWxzOworICAgIGJvb2wgbV9oYXNNdWx0aXBsZUNlbGxM
ZXZlbHMgeyBmYWxzZSB9OwogCiAgICAgLy8gVGhpcyBtYXAgaG9sZHMgdGhlIGNvbGxhcHNlZCBi
b3JkZXIgdmFsdWVzIGZvciBjZWxscyB3aXRoIGNvbGxhcHNlZCBib3JkZXJzLgogICAgIC8vIEl0
IGlzIGhlbGQgYXQgUmVuZGVyVGFibGVTZWN0aW9uIGxldmVsIHRvIHNwYXJlIG1lbW9yeSBjb25z
dW1wdGlvbiBieSB0YWJsZSBjZWxscy4KICAgICBIYXNoTWFwPHN0ZDo6cGFpcjxjb25zdCBSZW5k
ZXJUYWJsZUNlbGwqLCBpbnQ+LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSA+IG1fY2VsbHNDb2xsYXBz
ZWRCb3JkZXJzOwogfTsKIAoraW5saW5lIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVNl
Y3Rpb246OmJvcmRlckFkam9pbmluZ1RhYmxlU3RhcnQoKSBjb25zdAoreworICAgIGlmIChoYXNT
YW1lRGlyZWN0aW9uQXModGFibGUoKSkpCisgICAgICAgIHJldHVybiBzdHlsZSgpLmJvcmRlclN0
YXJ0KCk7CisgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7Cit9CisKK2lubGluZSBjb25z
dCBCb3JkZXJWYWx1ZSYgUmVuZGVyVGFibGVTZWN0aW9uOjpib3JkZXJBZGpvaW5pbmdUYWJsZUVu
ZCgpIGNvbnN0Cit7CisgICAgaWYgKGhhc1NhbWVEaXJlY3Rpb25Bcyh0YWJsZSgpKSkKKyAgICAg
ICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7CisgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVy
U3RhcnQoKTsKK30KKworaW5saW5lIFJlbmRlclRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCYgUmVu
ZGVyVGFibGVTZWN0aW9uOjpjZWxsQXQodW5zaWduZWQgcm93LCAgdW5zaWduZWQgY29sKQorewor
ICAgIHJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gbV9ncmlkW3Jvd10ucm93W2Nv
bF07Cit9CisKK2lubGluZSBjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIFJl
bmRlclRhYmxlU2VjdGlvbjo6Y2VsbEF0KHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sKSBjb25z
dAoreworICAgIEFTU0VSVCghbV9uZWVkc0NlbGxSZWNhbGMpOworICAgIHJldHVybiBtX2dyaWRb
cm93XS5yb3dbY29sXTsKK30KKworaW5saW5lIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGVT
ZWN0aW9uOjpwcmltYXJ5Q2VsbEF0KHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29sKQoreworICAg
IHJlY2FsY0NlbGxzSWZOZWVkZWQoKTsKKyAgICBDZWxsU3RydWN0JiBjID0gbV9ncmlkW3Jvd10u
cm93W2NvbF07CisgICAgcmV0dXJuIGMucHJpbWFyeUNlbGwoKTsKK30KKworaW5saW5lIFJlbmRl
clRhYmxlUm93KiBSZW5kZXJUYWJsZVNlY3Rpb246OnJvd1JlbmRlcmVyQXQodW5zaWduZWQgcm93
KSBjb25zdAoreworICAgIEFTU0VSVCghbV9uZWVkc0NlbGxSZWNhbGMpOworICAgIHJldHVybiBt
X2dyaWRbcm93XS5yb3dSZW5kZXJlcjsKK30KKworaW5saW5lIGludCBSZW5kZXJUYWJsZVNlY3Rp
b246Om91dGVyQm9yZGVyTGVmdChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JDZWxsRmxvdykg
Y29uc3QKK3sKKyAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IG91dGVyQm9yZGVyU3RhcnQoKSA6IG91dGVyQm9yZGVyRW5kKCk7CisgICAgcmV0
dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBvdXRl
ckJvcmRlckFmdGVyKCkgOiBvdXRlckJvcmRlckJlZm9yZSgpOworfQorCitpbmxpbmUgaW50IFJl
bmRlclRhYmxlU2VjdGlvbjo6b3V0ZXJCb3JkZXJSaWdodChjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGVGb3JDZWxsRmxvdykgY29uc3QKK3sKKyAgICBpZiAoc3R5bGVGb3JDZWxsRmxvdy0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG91dGVyQm9yZGVyRW5kKCkgOiBvdXRlckJvcmRlclN0
YXJ0KCk7CisgICAgcmV0dXJuIHN0eWxlRm9yQ2VsbEZsb3ctPmlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkgPyBvdXRlckJvcmRlckJlZm9yZSgpIDogb3V0ZXJCb3JkZXJBZnRlcigpOworfQor
CitpbmxpbmUgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6b3V0ZXJCb3JkZXJUb3AoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlRm9yQ2VsbEZsb3cpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlRm9yQ2Vs
bEZsb3ctPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHJldHVybiBzdHlsZUZv
ckNlbGxGbG93LT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gb3V0ZXJCb3JkZXJBZnRl
cigpIDogb3V0ZXJCb3JkZXJCZWZvcmUoKTsKKyAgICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb3V0ZXJCb3JkZXJTdGFydCgpIDogb3V0ZXJCb3Jk
ZXJFbmQoKTsKK30KKworaW5saW5lIGludCBSZW5kZXJUYWJsZVNlY3Rpb246Om91dGVyQm9yZGVy
Qm90dG9tKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvckNlbGxGbG93KSBjb25zdAoreworICAg
IGlmIChzdHlsZUZvckNlbGxGbG93LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAg
ICByZXR1cm4gc3R5bGVGb3JDZWxsRmxvdy0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/
IG91dGVyQm9yZGVyQmVmb3JlKCkgOiBvdXRlckJvcmRlckFmdGVyKCk7CisgICAgcmV0dXJuIHN0
eWxlRm9yQ2VsbEZsb3ctPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG91dGVyQm9yZGVyRW5k
KCkgOiBvdXRlckJvcmRlclN0YXJ0KCk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBSZW5kZXJUYWJs
ZVNlY3Rpb246Om51bVJvd3MoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9uZWVkc0NlbGxSZWNh
bGMpOworICAgIHJldHVybiBtX2dyaWQuc2l6ZSgpOworfQorCitpbmxpbmUgdm9pZCBSZW5kZXJU
YWJsZVNlY3Rpb246OnJlY2FsY0NlbGxzSWZOZWVkZWQoKQoreworICAgIGlmIChtX25lZWRzQ2Vs
bFJlY2FsYykKKyAgICAgICAgcmVjYWxjQ2VsbHMoKTsKK30KKworaW5saW5lIExheW91dFVuaXQg
UmVuZGVyVGFibGVTZWN0aW9uOjpyb3dCYXNlbGluZSh1bnNpZ25lZCByb3cpCit7CisgICAgcmVj
YWxjQ2VsbHNJZk5lZWRlZCgpOworICAgIHJldHVybiBtX2dyaWRbcm93XS5iYXNlbGluZTsKK30K
KworaW5saW5lIENlbGxTcGFuIFJlbmRlclRhYmxlU2VjdGlvbjo6ZnVsbFRhYmxlUm93U3Bhbigp
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX25lZWRzQ2VsbFJlY2FsYyk7CisgICAgcmV0dXJuIENl
bGxTcGFuKDAsIG1fZ3JpZC5zaXplKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJUYWJsZVNlY3Rpb24s
IGlzVGFibGVTZWN0aW9uKCkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>