<?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>25224</bug_id>
          
          <creation_ts>2009-04-15 17:13:16 -0700</creation_ts>
          <short_desc>Split out objectBoundingBox and repaintRectInLocalCoordinates from relativeBBox</short_desc>
          <delta_ts>2009-04-16 10:20:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>20769</blocked>
    
    <blocked>25225</blocked>
    
    <blocked>25226</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hyatt</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>117699</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-15 17:13:16 -0700</bug_when>
    <thetext>Split out objectBoundingBox and repaintRectInLocalCoordinates from relativeBBox

This patch doesn&apos;t actually fix repaint, but it makes it easier to write a sane clippedOverflowRectForRepaint method for each SVG renderer.

In fact, none of these new repaintRectInLocalCoordinates correctly include filter, marker, mask or clip values yet, but they will in a forthcoming patch.

My upcoming localToParentTransform() patch is also needed before we can write a good clippedOverflowRectForRepaint function too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117701</commentid>
    <comment_count>1</comment_count>
      <attachid>29522</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-15 17:25:54 -0700</bug_when>
    <thetext>Created attachment 29522
Split out objectBoundingBox and repaintRectInLocalCoordinates from relativeBBox

 WebCore/ChangeLog                                |   98 ++++++++++++++++++++++
 WebCore/rendering/RenderForeignObject.cpp        |   17 ++++-
 WebCore/rendering/RenderForeignObject.h          |    6 +-
 WebCore/rendering/RenderObject.cpp               |   11 ++-
 WebCore/rendering/RenderObject.h                 |   12 +++-
 WebCore/rendering/RenderPath.cpp                 |   45 +++++-----
 WebCore/rendering/RenderPath.h                   |    4 +-
 WebCore/rendering/RenderSVGContainer.cpp         |   25 ++----
 WebCore/rendering/RenderSVGContainer.h           |    3 +-
 WebCore/rendering/RenderSVGGradientStop.h        |   11 ++-
 WebCore/rendering/RenderSVGHiddenContainer.cpp   |    7 ++-
 WebCore/rendering/RenderSVGHiddenContainer.h     |    4 +-
 WebCore/rendering/RenderSVGImage.cpp             |   11 ++-
 WebCore/rendering/RenderSVGImage.h               |    6 +-
 WebCore/rendering/RenderSVGRoot.cpp              |   22 ++---
 WebCore/rendering/RenderSVGRoot.h                |    8 +-
 WebCore/rendering/RenderSVGTSpan.h               |    9 ++-
 WebCore/rendering/RenderSVGText.cpp              |   24 ++++--
 WebCore/rendering/RenderSVGText.h                |    4 +-
 WebCore/rendering/RenderSVGViewportContainer.cpp |    4 +-
 WebCore/rendering/SVGRenderSupport.cpp           |   20 +++++
 WebCore/rendering/SVGRenderSupport.h             |    7 +-
 WebCore/rendering/SVGRenderTreeAsText.cpp        |    6 +-
 WebCore/svg/SVGFont.cpp                          |    3 +
 WebCore/svg/SVGLocatable.cpp                     |    2 +-
 WebCore/svg/SVGPatternElement.cpp                |    2 +-
 WebCore/svg/graphics/SVGPaintServerGradient.cpp  |    8 +-
 WebCore/svg/graphics/SVGPaintServerPattern.cpp   |    2 +-
 28 files changed, 279 insertions(+), 102 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117746</commentid>
    <comment_count>2</comment_count>
      <attachid>29522</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-04-16 09:59:55 -0700</bug_when>
    <thetext>Comment on attachment 29522
Split out objectBoundingBox and repaintRectInLocalCoordinates from relativeBBox

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117749</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-16 10:20:41 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/42578</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29522</attachid>
            <date>2009-04-15 17:25:54 -0700</date>
            <delta_ts>2009-04-16 09:59:55 -0700</delta_ts>
            <desc>Split out objectBoundingBox and repaintRectInLocalCoordinates from relativeBBox</desc>
            <filename>Split-out-objectBoundingBox-and-repaintRectInLocalCoordinates-from-relativeBBox.patch</filename>
            <type>text/plain</type>
            <size>39147</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MDkzMTY5MjdhN2M5M2I4OTY4NDNjM2E4OGE4ODZhZTZmYWFmYjc4YwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYThiZjFjLi5kZmQxYzZj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEwMSBAQAorMjAwOS0wNC0xNSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3Bs
aXQgb3V0IG9iamVjdEJvdW5kaW5nQm94IGFuZCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cyBmcm9tIHJlbGF0aXZlQkJveAorICAgICAgICBpbiBwcmVwYXJhdGlvbiBmb3Igc2ltcGxpZnlp
bmcgKGFuZCBmaXhpbmcpIHJlcGFpbnQgbG9naWMgaW4gdGhlIFNWRyByZW5kZXJpbmcgdHJlZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MjI0CisK
KyAgICAgICAgb2JqZWN0Qm91bmRpbmdCb3goKSBtYXRjaGVzIHRoZSBTVkcgMS4xIGNvbmNlcHQg
b2YgYSAiYm91bmRpbmcgYm94IgorCisgICAgICAgIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkgc2hvdWxkIHJldHVybiB0aGUgYSByZWN0IGNvdmVyaW5nIGFsbCBwYWludGVkIGNvbnRl
bnQKKyAgICAgICAgdGhhdCBpcyBOT1QgdHJ1ZSBpbiB0aGlzIHBhdGNoLiAgSW4gYSBmdXR1cmUg
cGF0Y2gsIHRoaXMgd2lsbCBiZSBmaXhlZCBpbiBhbGwgY2FzZXMKKyAgICAgICAgdG8gZG8gc28u
ICBJbiBvcmRlciB0byBhdm9pZCBjaGFuZ2luZyBzZXZlcmFsIGh1bmRyZWQgbGF5b3V0IHRlc3Qg
cmVzdWx0cywgSSd2ZSBsZWZ0CisgICAgICAgIHRoZSBiZWhhdmlvciBhcy1pcyBmb3Igbm93LiAg
VGhlIHJldHVybmVkIHJlY3QgaXMgdXNlZCBieSB2YXJpb3VzIHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzCisgICAgICAgIGltcGxlbWVudGF0aW9ucyBhbmQgc29tZXRpbWVzIGFkanVzdGVk
IHRvIGluY2x1ZGUgYWxsIHBhaW50ZWQgY29udGVudCwgYnV0IG5vdCBhbHdheXMsIGFuZAorICAg
ICAgICB0aGUgcGxhY2VzIHdoZXJlIHRoZSBhZGp1c3RtZW50cyBhcmUgbWFkZSBhcmUgc29tZXRp
bWVzIHdyb25nLiAgQWdhaW4sIHdpbGwgYmUgZml4ZWQgaW4KKyAgICAgICAgYW4gdXBjb21pbmcg
cGF0Y2guCisKKyAgICAgICAgVGhpcyBwYXRjaCBkaXNjb3ZlcmVkIGEgYnVnIGluIEZvbnQ6OmRy
YXdUZXh0VXNpbmdTVkdGb250LCB3aGljaCBpcyBwcm9iYWJseSBjYXVzaW5nCisgICAgICAgIGJv
dW5kaW5nLWJveCByZWxhdGl2ZSBncmFkaWVudHMgb24gU1ZHRm9udCBnbHlwaHMgdG8gbm90IHBh
aW50IGNvcnJlY3RseS4KKyAgICAgICAgSSBjaG9zZSBub3QgdG8gdHJ5IGFuZCBmaXggdGhlIGJ1
ZyBpbiB0aGlzIHBhdGNoIGFuZCBpbnN0ZWFkIGxlZnQgYSBGSVhNRS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFsc28gZGlzY292ZXJlZCB0aGF0IGF0IGxlYXN0IHRzcGFuLmdldEJCb3goKSBpcyBi
cm9rZW4uICBUaGlzCisgICAgICAgIGFsb25nIHdpdGggdGhlIGZvcmVpZ25PYmplY3QuZ2V0QkJv
eCgpIGNoYW5nZSB3aWxsIGJlIHRlc3RlZCAoYW5kIGZpeGVkKSBpbiBhCisgICAgICAgIGxhdGVy
IHBhdGNoLiAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MjI1CisK
KyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9yIChiZXNpZGVzIHRoZSBhYm92ZSBtZW50aW9u
ZWQgZm9yZWlnbk9iamVjdC5nZXRCQm94KCkpLCB0aHVzIG5vIHRlc3RzLgorCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRm9yZWlnbk9iamVjdDo6b2JqZWN0Qm91bmRpbmdCb3gpOiB0aGlzIGlzIGEgYmVoYXZpb3Ig
aW1wcm92ZW1lbnQgZm9yIGdldEJCb3goKSB0ZXN0IGNhc2UgY29taW5nIGluIGEgbGF0ZXIgcGF0
Y2gKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmplY3Q6OnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKTogb25seSByZWFsbHkgdXNlZCBmb3IgbGF5b3V0IHRlc3QgcmVzdWx0
cywgbWlnaHQgc29tZSBkYXkgYmUgdXNlZCBmb3IgcmVwYWludC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpvYmplY3RCb3VuZGluZ0Jv
eCk6IG5ldyBtZXRob2RzLCBBU1NFUlQgaWYgdXNlZCBidXQgbm90IGltcGxlbWVudGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6Om9iamVj
dEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OnJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OmNsaXBw
ZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6
OmxpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6YmFzZWxpbmVQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJQYXRoOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclBhdGguaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpvYmplY3RCb3VuZGluZ0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHR3JhZGllbnRTdG9wOjpvYmplY3RCb3VuZGluZ0JveCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdHcmFkaWVudFN0b3A6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3Jk
aW5hdGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6b2JqZWN0Qm91
bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clNWR0hpZGRlbkNvbnRhaW5lci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6b2JqZWN0Qm91bmRpbmdC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OnJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpjYWxjdWxh
dGVBYnNvbHV0ZUJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6YWRk
Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1Jvb3Q6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6
Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnJl
cGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUm9vdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVFNwYW46Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1RTcGFuOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHVGV4dDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1RleHQ6Om9iamVjdEJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1RleHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyU1ZHVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdWaWV3
cG9ydENvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lcjo6dmlld3BvcnRUcmFuc2Zvcm0pOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5k
ZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVDb250YWluZXJCb3VuZGlu
Z0JveCk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKiBzdmcvU1ZHRm9udC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udCk6CisgICAgICAgICogc3ZnL1NWR0xvY2F0YWJs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFibGU6OmdldEJCb3gpOgorICAgICAg
ICAqIHN2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0
ZXJuRWxlbWVudDo6YnVpbGRQYXR0ZXJuKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXNrQW5kU3dh
cENvbnRleHRGb3JUZXh0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y2xpcFRvVGV4dE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXApOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlclBhdHRlcm4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXR1cCk6CisKIDIwMDktMDQtMTUg
IFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjc4NTc2MD4gV2ViQ29yZSBzaG91bGQgdXNlIGEgbWF4aW11bSBvZiA2IGNvbm5l
Y3Rpb25zIHBlciBob3N0LCBub3QgNApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRm9yZWlnbk9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2Jq
ZWN0LmNwcAppbmRleCAwNTg0YzFjLi41MmIxZjA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGb3JlaWduT2JqZWN0LmNwcApAQCAtMSw3ICsxLDYgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTcwLDYgKzY5LDIwIEBAIHZvaWQgUmVuZGVyRm9yZWlnbk9i
amVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50
WSkKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQogCitGbG9hdFJlY3QgUmVu
ZGVyRm9yZWlnbk9iamVjdDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIHJldHVy
biBib3JkZXJCb3hSZWN0KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJGb3JlaWduT2JqZWN0Ojpy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0Cit7CisgICAgLy8gSEFDSzogdG8g
bWFpbnRhaW4gaGlzdG9yaWNhbCBMYXlvdXRUZXN0IHJlc3VsdHMgZm9yIG5vdy4KKyAgICAvLyBS
ZW5kZXJGb3JlaWduT2JqZWN0IGlzIGEgUmVuZGVyQmxvY2sgKG5vdCBhIFJlbmRlclNWR01vZGVs
T2JqZWN0KSBzbyB0aGlzCisgICAgLy8gc2hvdWxkIG5vdCBhZmZlY3QgcmVwYWludCBjb3JyZWN0
bmVzcy4gIEJ1dCBpdCBzaG91bGQgcmVhbGx5IGJlOgorICAgIC8vIHJldHVybiBib3JkZXJCb3hS
ZWN0KCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworfQorCiB2b2lkIFJlbmRlckZvcmVpZ25P
YmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgSW50UmVjdCYgcmVjdCwgYm9vbCBmaXhlZCkKIHsKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSB0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSAqIGxvY2Fs
VHJhbnNmb3JtKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWdu
T2JqZWN0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKaW5kZXgg
YWI5Njc4NS4uYTBmMjBjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9y
ZWlnbk9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3Qu
aApAQCAtMSw3ICsxLDYgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QuCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTQ2LDYgKzQ1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVy
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAK
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7CisK
ICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7
CiAKICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMGUxMjc3Yy4u
ZjZjMDgyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yMzUwLDggKzIzNTAs
MTcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9u
KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIAogI2lmIEVOQUJMRShTVkcpCiAKLUZsb2F0UmVj
dCBSZW5kZXJPYmplY3Q6OnJlbGF0aXZlQkJveChib29sKSBjb25zdAorRmxvYXRSZWN0IFJlbmRl
ck9iamVjdDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAogeworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBGbG9hdFJlY3QoKTsKK30KKworLy8gUmV0dXJucyB0aGUgc21h
bGxlc3QgcmVjdGFuZ2xlIGVuY2xvc2luZyBhbGwgb2YgdGhlIHBhaW50ZWQgY29udGVudAorLy8g
cmVzcGVjdGluZyBjbGlwcGluZywgbWFza2luZywgZmlsdGVycywgb3BhY2l0eSwgc3Ryb2tlLXdp
ZHRoIGFuZCBtYXJrZXJzCitGbG9hdFJlY3QgUmVuZGVyT2JqZWN0OjpyZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIEZsb2F0UmVjdCgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGNh
ZDA0MzAuLjdjMmQ1MWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0yOTQsNyArMjk0
LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlbGF0aXZlQkJveChib29sIGlu
Y2x1ZGVTdHJva2UgPSB0cnVlKSBjb25zdDsKKyAgICAvLyBQZXIgU1ZHIDEuMSBvYmplY3RCb3Vu
ZGluZ0JveCBpZ25vcmVzIGNsaXBwaW5nLCBtYXNraW5nLCBmaWx0ZXIgZWZmZWN0cywgb3BhY2l0
eSBhbmQgc3Ryb2tlLXdpZHRoLgorICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgYWxsIGNvbXB1dGF0
aW9uIG9mIG9iamVjdEJvdW5kaW5nQm94IHJlbGF0aXZlIHVuaXRzIGFuZCBieSBTVkdMb2NhdGVh
YmxlOjpnZXRCQm94KCkuCisgICAgLy8gTk9URTogTWFya2VycyBhcmUgbm90IHNwZWNpZmljYWxs
eSBpZ25vcmVkIGhlcmUgYnkgU1ZHIDEuMSBzcGVjLCBidXQgd2UgaWdub3JlIHRoZW0KKyAgICAv
LyBzaW5jZSBzdHJva2Utd2lkdGggaXMgaWdub3JlZCAoYW5kIG1hcmtlciBzaXplIGNhbiBkZXBl
bmQgb24gc3Ryb2tlLXdpZHRoKS4KKyAgICAvLyBvYmplY3RCb3VuZGluZ0JveCBpcyByZXR1cm5l
ZCBsb2NhbCBjb29yZGluYXRlcy4KKyAgICAvLyBUaGUgbmFtZSBvYmplY3RCb3VuZGluZ0JveCBp
cyB0YWtlbiBmcm9tIHRoZSBTVkcgMS4xIHNwZWMuCisgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2Jq
ZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIHNtYWxsZXN0IHJl
Y3RhbmdsZSBlbmNsb3NpbmcgYWxsIG9mIHRoZSBwYWludGVkIGNvbnRlbnQKKyAgICAvLyByZXNw
ZWN0aW5nIGNsaXBwaW5nLCBtYXNraW5nLCBmaWx0ZXJzLCBvcGFjaXR5LCBzdHJva2Utd2lkdGgg
YW5kIG1hcmtlcnMKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpIGNvbnN0OwogCiAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2Nh
bFRyYW5zZm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggYWJz
b2x1dGVUcmFuc2Zvcm0oKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclBhdGguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKaW5kZXggNDJi
NzM1Yy4uZjk1OTk0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKQEAgLTEwNywzMyArMTA3
LDM0IEBAIGJvb2wgUmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpIGNvCiAgICAgcmV0dXJuIG1fcGF0aC5zdHJva2VD
b250YWlucygmc3Ryb2tlU3R5bGUsIHBvaW50KTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclBhdGg6
OnJlbGF0aXZlQkJveChib29sIGluY2x1ZGVTdHJva2UpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVy
UGF0aDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAogewogICAgIGlmIChtX3BhdGguaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBpZiAoaW5jbHVkZVN0cm9r
ZSkgewotICAgICAgICBpZiAobV9zdHJva2VCYm94LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
aWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Qm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxlKHRoaXMsIHN0eWxlKCkp
OwotICAgICAgICAgICAgICAgIG1fc3Ryb2tlQmJveCA9IG1fcGF0aC5zdHJva2VCb3VuZGluZ1Jl
Y3QoJnN0cm9rZVN0eWxlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZmlsbEJCb3guaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBtX2ZpbGxCQm94
ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwotCi0gICAgICAgICAgICAgICAgbV9zdHJva2VCYm94
ID0gbV9maWxsQkJveDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBtX3N0cm9rZUJib3g7Ci0gICAgfQotCiAgICAgaWYgKG1fZmlsbEJCb3guaXNFbXB0eSgpKQog
ICAgICAgICBtX2ZpbGxCQm94ID0gbV9wYXRoLmJvdW5kaW5nUmVjdCgpOwogCiAgICAgcmV0dXJu
IG1fZmlsbEJCb3g7CiB9CiAKK0Zsb2F0UmVjdCBSZW5kZXJQYXRoOjpyZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpIGNvbnN0Cit7CisgICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIGlmIChtX3N0cm9rZUJib3guaXNFbXB0eSgp
KSB7CisgICAgICAgIGlmICghc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpCisgICAg
ICAgICAgICByZXR1cm4gb2JqZWN0Qm91bmRpbmdCb3goKTsKKworICAgICAgICBCb3VuZGluZ1Jl
Y3RTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7CisgICAgICAg
IG1fc3Ryb2tlQmJveCA9IG1fcGF0aC5zdHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKTsK
KyAgICB9CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGluY2x1ZGUgZmlsdGVyIGFuZCBtYXJr
ZXIgY29udGVudCB0b28uCisKKyAgICByZXR1cm4gbV9zdHJva2VCYm94OworfQorCiB2b2lkIFJl
bmRlclBhdGg6OnNldFBhdGgoY29uc3QgUGF0aCYgbmV3UGF0aCkKIHsKICAgICBtX3BhdGggPSBu
ZXdQYXRoOwpAQCAtMTcyLDcgKzE3Myw3IEBAIHZvaWQgUmVuZGVyUGF0aDo6bGF5b3V0KCkKIElu
dFJlY3QgUmVuZGVyUGF0aDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovKQogewogICAgIC8vIEZJWE1FOiBoYW5k
bGUgbm9uLXJvb3QgcmVwYWludENvbnRhaW5lcgotICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9
IGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZWxhdGl2ZUJCb3godHJ1ZSkpOworICAgIEZs
b2F0UmVjdCByZXBhaW50UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKIAogICAgIC8vIE1hcmtlcnMgY2FuIGV4cGFuZCB0
aGUgYm91bmRpbmcgYm94CiAgICAgcmVwYWludFJlY3QudW5pdGUobV9tYXJrZXJCb3VuZHMpOwpA
QCAtMTkyLDEyICsxOTMsMTIgQEAgSW50UmVjdCBSZW5kZXJQYXRoOjpjbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW4KIAogaW50IFJlbmRl
clBhdGg6OmxpbmVIZWlnaHQoYm9vbCwgYm9vbCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVsYXRp
dmVCQm94KHRydWUpLmhlaWdodCgpOworICAgIHJldHVybiByZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpLmhlaWdodCgpOwogfQogCiBpbnQgUmVuZGVyUGF0aDo6YmFzZWxpbmVQb3NpdGlv
bihib29sLCBib29sKSBjb25zdAogewotICAgIHJldHVybiByZWxhdGl2ZUJCb3godHJ1ZSkuaGVp
Z2h0KCk7CisgICAgcmV0dXJuIHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkuaGVpZ2h0
KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsQW5kU3Ryb2tlUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVu
ZGVyUGF0aCogb2JqZWN0KQpAQCAtMjI3LDcgKzIyOCw3IEBAIHZvaWQgUmVuZGVyUGF0aDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQogCiAgICAgU1ZHUmVzb3VyY2VGaWx0
ZXIqIGZpbHRlciA9IDA7CiAKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZWxhdGl2ZUJC
b3godHJ1ZSk7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2Fs
Q29vcmRpbmF0ZXMoKTsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kKSB7CiAgICAgICAgIFBhaW50SW5mbyBzYXZlZEluZm8ocGFpbnRJbmZvKTsKIApAQCAt
MjUxLDcgKzI1Miw3IEBAIHZvaWQgUmVuZGVyUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGludCwgaW50KQogCiB2b2lkIFJlbmRlclBhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQsIGludCkgCiB7Ci0gICAgZ3JhcGhpY3ND
b250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KGVuY2xvc2luZ0ludFJlY3QocmVsYXRpdmVCQm94KHRy
dWUpKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KGVuY2xvc2luZ0lu
dFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwogfQogCiB2b2lkIFJlbmRl
clBhdGg6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50LCBpbnQsIGJv
b2wpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmggYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQYXRoLmgKaW5kZXggMWFkYThhOS4uNDY4ODM0NCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclBhdGguaApAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBmaWxsQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcmVxdWlyZXNGaWxsID0gdHJ1ZSkgY29uc3Q7
CiAgICAgYm9vbCBzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCByZXF1aXJl
c1N0cm9rZSA9IHRydWUpIGNvbnN0OwogCi0gICAgLy8gUmV0dXJucyBhbiB1bnNjYWxlZCBib3Vu
ZGluZyBib3ggKG5vdCBldmVuIGluY2x1ZGluZyBsb2NhbFRyYW5zZm9ybSgpKSBmb3IgdGhpcyB2
ZWN0b3IgcGF0aAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlbGF0aXZlQkJveChib29sIGluY2x1
ZGVTdHJva2UgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3Vu
ZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkgY29uc3Q7CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRQYXRoKGNvbnN0IFBhdGgmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCmluZGV4IGViYmQxYTAuLmQ3MjYyNWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHQ29udGFpbmVyLmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgUmVuZGVyU1ZH
Q29udGFpbmVyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCiAgICAgU1ZH
UmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IDA7CiAgICAgUGFpbnRJbmZvIHNhdmVkSW5mbyhwYWlu
dEluZm8pOwogCi0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcmVsYXRpdmVCQm94KHRydWUp
OworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCk7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkK
ICAgICAgICAgcHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBwYWludEluZm8sIGJvdW5k
aW5nQm94LCBmaWx0ZXIpOyAKIApAQCAtMTk3LDIzICsxOTcsMTYgQEAgdm9pZCBSZW5kZXJTVkdD
b250YWluZXI6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKQog
ICAgIHF1YWRzLmFwcGVuZChhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7CiB9CiAKLUZs
b2F0UmVjdCBSZW5kZXJTVkdDb250YWluZXI6OnJlbGF0aXZlQkJveChib29sIGluY2x1ZGVTdHJv
a2UpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyU1ZHQ29udGFpbmVyOjpvYmplY3RCb3VuZGluZ0Jv
eCgpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHJlY3Q7Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0
KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwotICAgIGZvciAoOyBjdXJyZW50ICE9IDA7IGN1cnJl
bnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjaGlsZEJC
b3ggPSBjdXJyZW50LT5yZWxhdGl2ZUJCb3goaW5jbHVkZVN0cm9rZSk7Ci0gICAgICAgIEZsb2F0
UmVjdCBtYXBwZWRCQm94ID0gY3VycmVudC0+bG9jYWxUcmFuc2Zvcm0oKS5tYXBSZWN0KGNoaWxk
QkJveCk7Ci0KLSAgICAgICAgLy8gPHN2Zz4gY2FuIGhhdmUgYSB2aWV3Qm94IGNvbnRyaWJ1dGlu
ZyB0byB0aGUgYmJveAotICAgICAgICBpZiAoY3VycmVudC0+aXNTVkdDb250YWluZXIoKSkKLSAg
ICAgICAgICAgIG1hcHBlZEJCb3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihj
dXJyZW50KS0+dmlld3BvcnRUcmFuc2Zvcm0oKS5tYXBSZWN0KG1hcHBlZEJCb3gpOwotCi0gICAg
ICAgIHJlY3QudW5pdGUobWFwcGVkQkJveCk7Ci0gICAgfQorICAgIHJldHVybiBjb21wdXRlQ29u
dGFpbmVyQm91bmRpbmdCb3godGhpcywgZmFsc2UpOworfQogCi0gICAgcmV0dXJuIHJlY3Q7Cisv
LyBSZW5kZXJTVkdDb250YWluZXIgaXMgdXNlZCBmb3IgPGc+IGVsZW1lbnRzIHdoaWNoIGRvIG5v
dCB0aGVtc2VsdmVzIGhhdmUgYQorLy8gd2lkdGggb3IgaGVpZ2h0LCBzbyB3ZSB1bmlvbiBhbGwg
b2Ygb3VyIGNoaWxkIHJlY3RzIGFzIG91ciByZXBhaW50IHJlY3QuCitGbG9hdFJlY3QgUmVuZGVy
U1ZHQ29udGFpbmVyOjpyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGNvbXB1dGVDb250YWluZXJCb3VuZGluZ0JveCh0aGlzLCB0cnVlKTsKIH0KIAog
Ym9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQgX3R4
LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0NvbnRhaW5lci5oCmluZGV4IGQ3OTAxMWYuLjY0ZmQyNzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCkBAIC01Nyw3ICs1Nyw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2
ZWwgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3ND
b250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgRmxvYXRSZWN0IHJlbGF0aXZlQkJveChi
b29sIGluY2x1ZGVTdHJva2UgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBv
YmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FsY3Vs
YXRlTG9jYWxUcmFuc2Zvcm0oKTsKICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxv
Y2FsVHJhbnNmb3JtKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdHcmFkaWVudFN0b3AuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0dyYWRpZW50
U3RvcC5oCmluZGV4IDdiN2RmNWMuLjFkMDg1OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR0dyYWRpZW50U3RvcC5oCkBAIC0xLDcgKzEsNiBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUs
IEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDEsMTEgKzQwLDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICAgICAgLy8g
VGhpcyBvdmVycmlkZSBpcyBuZWVkZWQgdG8gcHJldmVudCBhbiBhc3NlcnQgb24gPHN2Zz48c3Rv
cCAvPjwvc3ZnPgotICAgICAgICAvLyBSZW5kZXJPYmplY3QncyBkZWZhdWx0IGltcGwgYXNzZXJ0
cy4KKyAgICAgICAgLy8gVGhpcyBvdmVycmlkZXMgYXJlIG5lZWRlZCB0byBwcmV2ZW50IEFTU0VS
VHMgb24gPHN2Zz48c3RvcCAvPjwvc3ZnPgorICAgICAgICAvLyBSZW5kZXJPYmplY3QncyBkZWZh
dWx0IGltcGxlbWVudGF0aW9ucyBBU1NFUlRfTk9UX1JFQUNIRUQoKQogICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MDAKICAgICAgICAgdmlydHVh
bCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2Jq
ZWN0KikgeyByZXR1cm4gSW50UmVjdCgpOyB9Ci0gICAgCisgICAgICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KKyAg
ICAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdIaWRkZW5Db250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyLmNwcAppbmRleCBlODY4ODM2Li5jOTU4NTM2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKQEAgLTkxLDcgKzkxLDEyIEBAIGJv
b2wgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1GbG9hdFJlY3Qg
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpyZWxhdGl2ZUJCb3goYm9vbCkgY29uc3QKK0Zsb2F0
UmVjdCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdIaWRk
ZW5Db250YWluZXI6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lci5oCmluZGV4IGU5MmVlZDAuLjIwZDIyMWMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCkBAIC01NSw3ICs1NSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhYnNv
bHV0ZVRyYW5zZm9ybSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0OworCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1h
Z2UuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCmluZGV4IGExM2Vl
MDMuLmE1Zjc4NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdl
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKQEAgLTIxMSw3
ICsyMTEsMTIgQEAgYm9vbCBSZW5kZXJTVkdJbWFnZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdJbWFnZTo6cmVsYXRpdmVCQm94KGJvb2wpIGNvbnN0CitG
bG9hdFJlY3QgUmVuZGVyU1ZHSW1hZ2U6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9sb2NhbEJvdW5kczsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR0ltYWdlOjpy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbG9j
YWxCb3VuZHM7CiB9CkBAIC0yMjcsNyArMjMyLDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6aW1h
Z2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciBpbWFnZSwgY29uc3QgSW50UmVjdCogcmVjdCkKIHZv
aWQgUmVuZGVyU1ZHSW1hZ2U6OmNhbGN1bGF0ZUFic29sdXRlQm91bmRzKCkKIHsKICAgICAvLyBG
SVhNRTogYnJva2VuIHdpdGggQ1NTIHRyYW5zZm9ybXMKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVS
ZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbGF0aXZlQkJveCh0cnVlKSk7Cisg
ICAgRmxvYXRSZWN0IGFic29sdXRlUmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChy
ZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKIAogI2lmIEVOQUJMRShTVkdfRklMVEVS
UykKICAgICAvLyBGaWx0ZXJzIGNhbiBleHBhbmQgdGhlIGJvdW5kaW5nIGJveApAQCAtMjUxLDcg
KzI1Niw3IEBAIEludFJlY3QgUmVuZGVyU1ZHSW1hZ2U6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiAvKnJlCiB2b2lkIFJlbmRlclNWR0ltYWdlOjph
ZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50LCBp
bnQpCiB7CiAgICAgLy8gdGhpcyBpcyBjYWxsZWQgZnJvbSBwYWludCgpIGFmdGVyIHRoZSBsb2Nh
bFRyYW5zZm9ybSBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQKLSAgICBJbnRSZWN0IGNvbnRlbnRS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZWxhdGl2ZUJCb3goKSk7CisgICAgSW50UmVjdCBjb250
ZW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KGNvbnRlbnRSZWN0KTsK
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmgKaW5kZXggNGFlZGZlZi4uMmQ5NTA4NCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCkBAIC00MSw4ICs0MSwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflJlbmRlclNWR0ltYWdlKCk7CiAgICAgICAg
IAogICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQotICAgICAgICAKLSAgICAgICAgdmly
dHVhbCBGbG9hdFJlY3QgcmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNv
bnN0OworCisgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkgY29uc3Q7CisKICAgICAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4
LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1ZSk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IGVkMWUyOGIuLmI5NDQ4NDcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBSZW5k
ZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBw
YXJlbnRZKQogCiAgICAgU1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IDA7CiAKLSAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3ggPSByZWxhdGl2ZUJCb3godHJ1ZSk7CisgICAgRmxvYXRSZWN0IGJv
dW5kaW5nQm94ID0gcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKICAgICBpZiAoY2hp
bGRQYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHByZXBh
cmVUb1JlbmRlclNWR0NvbnRlbnQodGhpcywgY2hpbGRQYWludEluZm8sIGJvdW5kaW5nQm94LCBm
aWx0ZXIpOwogCkBAIC0yMzAsMjEgKzIzMCwxNSBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5k
ZXJTVkdSb290OjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0CiAgICAgcmV0dXJuIHN2Zy0+dmll
d0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLCBoZWlnaHQoKSkgKiBjdG07CiB9CiAKLUZsb2F0
UmVjdCBSZW5kZXJTVkdSb290OjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlKSBjb25z
dAorRmxvYXRSZWN0IFJlbmRlclNWR1Jvb3Q6Om9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QKIHsK
LSAgICBGbG9hdFJlY3QgcmVjdDsKLSAgICAKLSAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBm
aXJzdENoaWxkKCk7Ci0gICAgZm9yICg7IGN1cnJlbnQgIT0gMDsgY3VycmVudCA9IGN1cnJlbnQt
Pm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGNoaWxkQkJveCA9IGN1cnJlbnQt
PnJlbGF0aXZlQkJveChpbmNsdWRlU3Ryb2tlKTsKLSAgICAgICAgRmxvYXRSZWN0IG1hcHBlZEJC
b3ggPSBjdXJyZW50LT5sb2NhbFRyYW5zZm9ybSgpLm1hcFJlY3QoY2hpbGRCQm94KTsKLSAgICAg
ICAgLy8gPHN2Zz4gY2FuIGhhdmUgYSB2aWV3Qm94IGNvbnRyaWJ1dGluZyB0byB0aGUgYmJveAot
ICAgICAgICBpZiAoY3VycmVudC0+aXNTVkdDb250YWluZXIoKSkKLSAgICAgICAgICAgIG1hcHBl
ZEJCb3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihjdXJyZW50KS0+dmlld3Bv
cnRUcmFuc2Zvcm0oKS5tYXBSZWN0KG1hcHBlZEJCb3gpOwotICAgICAgICByZWN0LnVuaXRlKG1h
cHBlZEJCb3gpOwotICAgIH0KKyAgICByZXR1cm4gY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94
KHRoaXMsIGZhbHNlKTsKK30KIAotICAgIHJldHVybiByZWN0OworRmxvYXRSZWN0IFJlbmRlclNW
R1Jvb3Q6OnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBib3JkZXIgYnV0IGl0IHNob3VsZCEKKyAg
ICByZXR1cm4gY29tcHV0ZUNvbnRhaW5lckJvdW5kaW5nQm94KHRoaXMsIHRydWUpOwogfQogCiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdSb290Ojpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmggYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgKaW5kZXggMWEyMGZiNC4uMTVlZmU1MiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jvb3QuaApAQCAtNTUsMTAgKzU1LDEyIEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBib29sIHN0
cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgcmVs
YXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0OwotICAgIAorCisgICAg
dmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0OworCiAgICAg
dmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwotICAg
CisKICAgICBGbG9hdFJlY3Qgdmlld3BvcnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdUU3Bhbi5oCmluZGV4IGQzNGNkMmYuLmVkZWE4NmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1RTcGFuLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
VFNwYW4uaApAQCAtMSw4ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IHByb2plY3QuCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBIdW50IDxv
amgxNkBzdHVkZW50LmNhbnRlcmJ1cnkuYWMubno+CiAgKiAgICAgICAgICAgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIgSW5jLgorICogICAgICAgICAgIChDKSAyMDA5IEdvb2dsZSBJbmMuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTM0LDYgKzMzLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHVFNwYW4iOyB9
CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
aW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQg
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsK
KworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgaW5jb3JyZWN0LCBidXQgaGF2ZSBhbHdheXMgYmVo
YXZlZCB0aGlzIHdheS4KKyAgICAvLyBUaGVzZSBlbXB0eSBpbXBsZW1lbnRhdGlvbnMgcHJldmVu
dCB1cyBmcm9tIGhpdHRpbmcgUmVuZGVyT2JqZWN0IEFTU0VSVFMuCisgICAgLy8gdHNwYW4uZ2V0
QkJveCgpIHdpbGwgYmUgd3JvbmcsIGFuZCByZXBhaW50aW5nIGZvciB0c3BhbnMgbWF5IG5vdCB3
b3JrIGNvcnJlY3RseSEKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVw
YWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsg
fQogfTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCA4ZmVmMWYzLi5l
Yzk0YTU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtNTIsNyArNTIsNyBA
QCBSZW5kZXJTVkdUZXh0OjpSZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50KiBub2RlKQogSW50
UmVjdCBSZW5kZXJTVkdUZXh0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJC
b3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8pCiB7CiAgICAgLy8gRklYTUU6IGhh
bmRsZSBub24tcm9vdCByZXBhaW50Q29udGFpbmVyCi0gICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0
ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbGF0aXZlQkJveCh0cnVlKSk7CisgICAg
RmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogCiAjaWYgRU5BQkxFKFNWR19GSUxURVJTKQog
ICAgIC8vIEZpbHRlcnMgY2FuIGV4cGFuZCB0aGUgYm91bmRpbmcgYm94CkBAIC0xMzQsNyArMTM0
LDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGludCwgaW50LCBib29sKQogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaHRtbFBh
cmVudEN0bSA9IHJvb3QtPlJlbmRlckJveDo6YWJzb2x1dGVUcmFuc2Zvcm0oKTsKICAKLSAgICAv
LyBEb24ndCB1c2UgcmVsYXRpdmVCQm94IGhlcmUsIGFzIGl0J3MgdW5pdGVzIHRoZSBzZWxlY3Rp
b24gcmVjdHMuIE1ha2VzIGl0IGhhcmQKKyAgICAvLyBEb24ndCB1c2Ugb2JqZWN0Qm91bmRpbmdC
b3ggaGVyZSwgYXMgaXQncyB1bml0ZXMgdGhlIHNlbGVjdGlvbiByZWN0cy4gTWFrZXMgaXQgaGFy
ZAogICAgIC8vIHRvIHNwb3QgZXJyb3JzLCBpZiB0aGVyZSBhcmUgYW55IHVzaW5nIFdlYkluc3Bl
Y3Rvci4gSW5kaXZpZHVhbGx5IGZlZWQgdGhlbSBpbnRvICdyZWN0cycuCiAgICAgZm9yIChJbmxp
bmVSdW5Cb3gqIHJ1bkJveCA9IGZpcnN0TGluZUJveCgpOyBydW5Cb3g7IHJ1bkJveCA9IHJ1bkJv
eC0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBBU1NFUlQocnVuQm94LT5pc0lubGluZUZsb3dC
b3goKSk7CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjphYnNvbHV0ZVF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCkKIAogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGh0bWxQYXJlbnRDdG0gPSByb290LT5SZW5kZXJCb3g6OmFic29sdXRlVHJhbnNmb3Jt
KCk7CiAgCi0gICAgLy8gRG9uJ3QgdXNlIHJlbGF0aXZlQkJveCBoZXJlLCBhcyBpdCdzIHVuaXRl
cyB0aGUgc2VsZWN0aW9uIHJlY3RzLiBNYWtlcyBpdCBoYXJkCisgICAgLy8gRG9uJ3QgdXNlIG9i
amVjdEJvdW5kaW5nQm94IGhlcmUsIGFzIGl0J3MgdW5pdGVzIHRoZSBzZWxlY3Rpb24gcmVjdHMu
IE1ha2VzIGl0IGhhcmQKICAgICAvLyB0byBzcG90IGVycm9ycywgaWYgdGhlcmUgYXJlIGFueSB1
c2luZyBXZWJJbnNwZWN0b3IuIEluZGl2aWR1YWxseSBmZWVkIHRoZW0gaW50byAncmVjdHMnLgog
ICAgIGZvciAoSW5saW5lUnVuQm94KiBydW5Cb3ggPSBmaXJzdExpbmVCb3goKTsgcnVuQm94OyBy
dW5Cb3ggPSBydW5Cb3gtPm5leHRMaW5lQm94KCkpIHsKICAgICAgICAgQVNTRVJUKHJ1bkJveC0+
aXNJbmxpbmVGbG93Qm94KCkpOwpAQCAtMTgxLDIwICsxODEsMjggQEAgdm9pZCBSZW5kZXJTVkdU
ZXh0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCiAgICAgUmVuZGVyQmxv
Y2s6OnBhaW50KHBpLCAwLCAwKTsKIH0KIAotRmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnJlbGF0
aXZlQkJveChib29sIGluY2x1ZGVTdHJva2UpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4
dDo6b2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdAogewotICAgIEZsb2F0UmVjdCByZXBhaW50UmVj
dDsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CiAKICAgICBmb3IgKElubGluZVJ1bkJveCog
cnVuQm94ID0gZmlyc3RMaW5lQm94KCk7IHJ1bkJveDsgcnVuQm94ID0gcnVuQm94LT5uZXh0TGlu
ZUJveCgpKSB7CiAgICAgICAgIEFTU0VSVChydW5Cb3gtPmlzSW5saW5lRmxvd0JveCgpKTsKIAog
ICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0Jv
eCo+KHJ1bkJveCk7CiAgICAgICAgIGZvciAoSW5saW5lQm94KiBib3ggPSBmbG93Qm94LT5maXJz
dENoaWxkKCk7IGJveDsgYm94ID0gYm94LT5uZXh0T25MaW5lKCkpCi0gICAgICAgICAgICByZXBh
aW50UmVjdC51bml0ZShGbG9hdFJlY3QoYm94LT54KCksIGJveC0+eSgpLCBib3gtPndpZHRoKCks
IGJveC0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGJvdW5kaW5nQm94LnVuaXRlKEZsb2F0UmVj
dChib3gtPngoKSwgYm94LT55KCksIGJveC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSkpOwogICAg
IH0KIAorICAgIGJvdW5kaW5nQm94Lm1vdmUoeCgpLCB5KCkpOworICAgIHJldHVybiBib3VuZGlu
Z0JveDsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OnJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBvYmplY3RC
b3VuZGluZ0JveCgpOworCiAgICAgLy8gU1ZHIG5lZWRzIHRvIGluY2x1ZGUgdGhlIHN0cm9rZVdp
ZHRoKCksIG5vdCB0aGUgdGV4dFN0cm9rZVdpZHRoKCkuCi0gICAgaWYgKGluY2x1ZGVTdHJva2Ug
JiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKKyAgICBpZiAoc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKICAgICAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBT
VkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgodGhpcywgc3R5bGUoKS0+c3ZnU3R5
bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMC4wZik7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpAQCAt
MjA5LDggKzIxNyw2IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZWxhdGl2ZUJCb3goYm9v
bCBpbmNsdWRlU3Ryb2tlKSBjb25zdAogCiAgICAgICAgIHJlcGFpbnRSZWN0LmluZmxhdGUoc3Ry
b2tlV2lkdGgpOwogICAgIH0KLQotICAgIHJlcGFpbnRSZWN0Lm1vdmUoeCgpLCB5KCkpOwogICAg
IHJldHVybiByZXBhaW50UmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHVGV4dC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oCmluZGV4
IDJjZDcxZmEuLjg0MzRiNTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R1RleHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmgKQEAgLTU0LDcg
KzU0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxG
bG9hdFF1YWQ+JiwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOwogCiAgICAgdmlydHVhbCBJbnRSZWN0
IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWxhdGl2ZUJCb3goYm9vbCBp
bmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmpl
Y3RCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0
SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Um9vdElubGluZUJveCogY3JlYXRlUm9vdEJveCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCmluZGV4IGYwMjMwMmIuLmYwMGUzZDEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAK
QEAgLTEzNyw4ICsxMzcsOCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdWaWV3cG9y
dENvbnRhaW5lcjo6dmlld3BvcnRUcmFuc2Zvcm0oKSBjb25zdAogICAgICAgICBTVkdNYXJrZXJF
bGVtZW50KiBtYXJrZXIgPSBzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50Kj4obm9kZSgpKTsK
ICAgICAgICAgcmV0dXJuIG1hcmtlci0+dmlld0JveFRvVmlld1RyYW5zZm9ybSh2aWV3cG9ydCgp
LndpZHRoKCksIHZpZXdwb3J0KCkuaGVpZ2h0KCkpOwogICAgIH0KLSAKLSAgICAgcmV0dXJuIFRy
YW5zZm9ybWF0aW9uTWF0cml4KCk7CisKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgo
KTsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6
OmFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9y
dC5jcHAKaW5kZXggZGQxNTRjNy4uZDczZTQ1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAqICAgICAgICAgICAoQykgMjAwNyBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTc0LDYg
KzE3NSwyNSBAQCB2b2lkIGNsYW1wSW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydChSZW5kZXJPYmpl
Y3QqIG9iamVjdCwgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgc2l6ZS5zZXRIZWlnaHQodmlld0hl
aWdodCk7CiB9CiAKK0Zsb2F0UmVjdCBjb21wdXRlQ29udGFpbmVyQm91bmRpbmdCb3goY29uc3Qg
UmVuZGVyT2JqZWN0KiBjb250YWluZXIsIGJvb2wgaW5jbHVkZUFsbFBhaW50ZWRDb250ZW50KQor
eworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKworICAgIFJlbmRlck9iamVjdCogY3VycmVu
dCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOworICAgIGZvciAoOyBjdXJyZW50ICE9IDA7IGN1
cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIEZsb2F0UmVjdCBjaGls
ZEJCb3ggPSBpbmNsdWRlQWxsUGFpbnRlZENvbnRlbnQgPyBjdXJyZW50LT5yZXBhaW50UmVjdElu
TG9jYWxDb29yZGluYXRlcygpIDogY3VycmVudC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICAg
ICAgRmxvYXRSZWN0IGNoaWxkQkJveEluTG9jYWxDb29yZHMgPSBjdXJyZW50LT5sb2NhbFRyYW5z
Zm9ybSgpLm1hcFJlY3QoY2hpbGRCQm94KTsKKworICAgICAgICAvLyA8c3ZnPiBlbGVtZW50cyBt
YXkgYSB2aWV3Qm94IHRyYW5zZm9ybSBhcyB3ZWxsCisgICAgICAgIGlmIChjdXJyZW50LT5pc1NW
R0NvbnRhaW5lcigpKQorICAgICAgICAgICAgY2hpbGRCQm94SW5Mb2NhbENvb3JkcyA9IHN0YXRp
Y19jYXN0PFJlbmRlclNWR0NvbnRhaW5lcio+KGN1cnJlbnQpLT52aWV3cG9ydFRyYW5zZm9ybSgp
Lm1hcFJlY3QoY2hpbGRCQm94SW5Mb2NhbENvb3Jkcyk7CisKKyAgICAgICAgYm91bmRpbmdCb3gu
dW5pdGUoY2hpbGRCQm94SW5Mb2NhbENvb3Jkcyk7CisgICAgfQorCisgICAgcmV0dXJuIGJvdW5k
aW5nQm94OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
U1ZHKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oIGIv
V2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5oCmluZGV4IDdmZGZjZjguLjJjODcy
MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclN1cHBvcnQuaAorKysg
Yi9XZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmgKQEAgLTEsOSArMSw4IEBACiAv
KioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIFdl
YktpdC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqICAgICAgICAgICAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KICAqICAgICAgICAgICAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsNiArMzYsMTAgQEAgdm9pZCByZW5kZXJTdWJ0
cmVlVG9JbWFnZShJbWFnZUJ1ZmZlciosIFJlbmRlck9iamVjdCopOwogCiB2b2lkIGNsYW1wSW1h
Z2VCdWZmZXJTaXplVG9WaWV3cG9ydChSZW5kZXJPYmplY3QqLCBJbnRTaXplJik7CiAKKy8vIFVz
ZWQgdG8gc2hhcmUgdGhlICJ3YWxrIGFsbCB0aGUgY2hpbGRyZW4iIGxvZ2ljIGJldHdlZW4gb2Jq
ZWN0Qm91bmRpbmdCb3gKKy8vIGFuZCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcyBpbiBS
ZW5kZXJTVkdSb290IGFuZCBSZW5kZXJTVkdDb250YWluZXIKK0Zsb2F0UmVjdCBjb21wdXRlQ29u
dGFpbmVyQm91bmRpbmdCb3goY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIGJvb2wgaW5j
bHVkZUFsbFBhaW50ZWRDb250ZW50KTsKKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggMzBjOTIxZS4uY2JiZWE1MyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTI5Nyw3ICsyOTcsNyBAQCBz
dGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjdCkKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlclBhdGgmIHBhdGgpCiB7Ci0gICAgdHMgPDwgIiAiIDw8IHBhdGguYWJzb2x1
dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHBhdGgucmVsYXRpdmVCQm94KCkpOworICAgIHRzIDw8ICIg
IiA8PCBwYXRoLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChwYXRoLnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCkpOwogCiAgICAgd3JpdGVTdHlsZSh0cywgcGF0aCk7CiAKQEAgLTMw
OCw3ICszMDgsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyUGF0aCYgcGF0aCkKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR0NvbnRhaW5lciYgY29udGFpbmVyKQog
ewotICAgIHRzIDw8ICIgIiA8PCBjb250YWluZXIuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0
KGNvbnRhaW5lci5yZWxhdGl2ZUJCb3goKSk7CisgICAgdHMgPDwgIiAiIDw8IGNvbnRhaW5lci5h
YnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoY29udGFpbmVyLnJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkpOwogCiAgICAgd3JpdGVTdHlsZSh0cywgY29udGFpbmVyKTsKIApAQCAtMzE3
LDcgKzMxNyw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBSZW5kZXJTVkdDb250YWluZXImIGNvbnRhaW5lCiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdSb290JiByb290KQog
ewotICAgIHRzIDw8ICIgIiA8PCByb290LmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyb290
LnJlbGF0aXZlQkJveCgpKTsKKyAgICB0cyA8PCAiICIgPDwgcm9vdC5hYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3Qocm9vdC5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKIAogICAg
IHdyaXRlU3R5bGUodHMsIHJvb3QpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGb250
LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCmluZGV4IDliMzZmODcuLjdlM2NlYzAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0Zv
bnQuY3BwCkBAIC01MzMsNiArNTMzLDkgQEAgdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9u
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+YmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmFkZFBhdGgoaWRlbnRpZmllci5wYXRoRGF0YSk7CiAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IHNldHVwKCkgdHJpZXMgdG8gZ2V0IG9iamVjdEJvdW5kaW5nQm94KCkgZnJv
bSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKQorICAgICAgICAgICAgICAgICAgICAvLyB3
aGljaCBpcyB3cm9uZy4gIFdlIG5lZWQgdG8gY2hhbmdlIHNldHVwKCkgdG8gdGFrZSBhIGJvdW5k
aW5nIGJveCBpbnN0ZWFkLCBvciBwYXNzCisgICAgICAgICAgICAgICAgICAgIC8vIGEgUmVuZGVy
T2JqZWN0IHdoaWNoIHdvdWxkIHJldHVybiB0aGUgYm91bmRpbmcgYm94IGZvciBpZGVudGlmaWVy
LnBhdGhEYXRhCiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVQYWludFNlcnZlci0+c2V0
dXAoY29udGV4dCwgcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCksIHRhcmdldFR5cGUpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjOiBBbnkgcHJvcGVydGllcyBzcGVjaWZp
ZWQgb24gYSB0ZXh0IGVsZW1lbnRzIHdoaWNoIHJlcHJlc2VudHMgYSBsZW5ndGgsIHN1Y2ggYXMg
dGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3Ryb2tlLXdpZHRoJyBwcm9wZXJ0eSwg
bWlnaHQgcHJvZHVjZSBzdXJwcmlzaW5nIHJlc3VsdHMgc2luY2UgdGhlIGxlbmd0aCB2YWx1ZSB3
aWxsIGJlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwIGIvV2ViQ29y
ZS9zdmcvU1ZHTG9jYXRhYmxlLmNwcAppbmRleCA0NTljN2MwLi4wMGFjYzJhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0xvY2F0
YWJsZS5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgRmxvYXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJv
eChjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KQogICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCi0gICAgcmV0dXJuIGVsZW1lbnQtPnJl
bmRlcmVyKCktPnJlbGF0aXZlQkJveChmYWxzZSk7CisgICAgcmV0dXJuIGVsZW1lbnQtPnJlbmRl
cmVyKCktPm9iamVjdEJvdW5kaW5nQm94KCk7CiB9CiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IFNW
R0xvY2F0YWJsZTo6Z2V0Q1RNKGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdQYXR0
ZXJuRWxlbWVudC5jcHAKaW5kZXggNWQyMWI5NC4uYTUyYTFhMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR1BhdHRlcm5F
bGVtZW50LmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmJ1
aWxkUGF0dGVybihjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpIGNvbnN0CiAgICAgICAgIGZv
ciAoTm9kZSogbiA9IGF0dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRFbGVtZW50KCktPmZpcnN0Q2hp
bGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmICghbi0+aXNT
VkdFbGVtZW50KCkgfHwgIXN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihuKS0+aXNTdHlsZWRUcmFu
c2Zvcm1hYmxlKCkgfHwgIW4tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBwYXR0ZXJuQ29udGVudEJvdW5kYXJpZXMudW5pdGUobi0+cmVuZGVyZXIo
KS0+cmVsYXRpdmVCQm94KHRydWUpKTsKKyAgICAgICAgICAgIHBhdHRlcm5Db250ZW50Qm91bmRh
cmllcy51bml0ZShuLT5yZW5kZXJlcigpLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
KTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWlu
dFNlcnZlckdyYWRpZW50LmNwcAppbmRleCBlYjBkODBiLi44MTJlMDUwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAorKysgYi9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcApAQCAtMTMwLDcgKzEz
MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0
R3JhZGllbnQoCiAgICAgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0
KiYgc2F2ZWRDb250ZXh0LAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICBGbG9hdFJlY3QgbWFza0JCb3ggPSBj
b25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVjdChvYmplY3QpKS0+cmVs
YXRpdmVCQm94KGZhbHNlKTsKKyAgICBGbG9hdFJlY3QgbWFza0JCb3ggPSBjb25zdF9jYXN0PFJl
bmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVjdChvYmplY3QpKS0+b2JqZWN0Qm91bmRpbmdC
b3goKTsKICAgICBJbnRSZWN0IG1hc2tSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChvYmplY3QtPmFi
c29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChtYXNrQkJveCkpOwogCiAgICAgSW50U2l6ZSBtYXNr
U2l6ZShtYXNrUmVjdC53aWR0aCgpLCBtYXNrUmVjdC5oZWlnaHQoKSk7CkBAIC0xNTksNyArMTU5
LDcgQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjbGlwVG9UZXh0TWFzayhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VC
dWZmZXIsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LAogICAgIGNvbnN0IFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQqIGdyYWRpZW50U2VydmVyKQogewotICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9
IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5y
ZWxhdGl2ZUJCb3goZmFsc2UpOworICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8
UmVuZGVyT2JqZWN0Kj4oZmluZFRleHRSb290T2JqZWN0KG9iamVjdCkpLT5vYmplY3RCb3VuZGlu
Z0JveCgpOwogCiAgICAgLy8gRml4dXAgdHJhbnNmb3JtYXRpb25zIHRvIGJlIGFibGUgdG8gY2xp
cCB0byBtYXNrCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gb2JqZWN0LT5h
YnNvbHV0ZVRyYW5zZm9ybSgpOwpAQCAtMjI3LDcgKzIyNyw3IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVy
T2JqZWN0CiAjZWxzZQogICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgewogI2VuZGlmCi0gICAg
ICAgIEZsb2F0UmVjdCBiYm94ID0gb2JqZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2UpOworICAgICAg
ICBGbG9hdFJlY3QgYmJveCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKICAgICAgICAg
Ly8gRG9uJ3QgdXNlIGdyYWRpZW50cyBmb3IgMWQgb2JqZWN0cyBsaWtlIGhvcml6b250YWwvdmVy
dGljYWwgCiAgICAgICAgIC8vIGxpbmVzIG9yIHJlY3RhbmdsZXMgd2l0aG91dCB3aWR0aCBvciBo
ZWlnaHQuCiAgICAgICAgIGlmIChiYm94LndpZHRoKCkgPT0gMCB8fCBiYm94LmhlaWdodCgpID09
IDApIHsKQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRl
YXJkb3duKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iagogICAgICAg
ICBtX2dyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKG1hdHJpeCk7CiAgICAgICAg
IGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChtX2dyYWRpZW50KTsKIAotICAgICAgICBGbG9hdFJl
Y3QgbWFza0JCb3ggPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVj
dChvYmplY3QpKS0+cmVsYXRpdmVCQm94KGZhbHNlKTsKKyAgICAgICAgRmxvYXRSZWN0IG1hc2tC
Qm94ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihmaW5kVGV4dFJvb3RPYmplY3Qob2JqZWN0
KSktPm9iamVjdEJvdW5kaW5nQm94KCk7CiAKICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QobWFz
a0JCb3gpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZl
clBhdHRlcm4uY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
LmNwcAppbmRleCBhMmFjNWRmLi4wNDZmMzg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlclBhdHRlcm4uY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIFNWR1Bh
aW50U2VydmVyUGF0dGVybjo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3Qg
UmVuZGVyT2JqZWN0KgogICAgICAgICBJbnRSZWN0IHRleHRCb3VuZGFyeSA9IGNvbnN0X2Nhc3Q8
UmVuZGVyT2JqZWN0Kj4ob2JqZWN0KS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKICAgICAg
ICAgdGFyZ2V0UmVjdCA9IG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0oKS5pbnZlcnNlKCkubWFw
UmVjdCh0ZXh0Qm91bmRhcnkpOwogICAgIH0gZWxzZQotICAgICAgICB0YXJnZXRSZWN0ID0gb2Jq
ZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2UpOworICAgICAgICB0YXJnZXRSZWN0ID0gb2JqZWN0LT5v
YmplY3RCb3VuZGluZ0JveCgpOwogCiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0g
b2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpOwogICAgIGJvb2wgaXNGaWxsZWQgPSAodHlwZSAm
IEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgc3R5bGUtPmhhc0ZpbGwoKTsK
</data>
<flag name="review"
          id="14722"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>