<?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>30236</bug_id>
          
          <creation_ts>2009-10-08 14:52:25 -0700</creation_ts>
          <short_desc>WebGL should do an implicit flush before displaying the drawing buffer</short_desc>
          <delta_ts>2009-11-06 16:55:31 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>153546</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-08 14:52:25 -0700</bug_when>
    <thetext>If you look at this content:

    http://people.mozilla.com/~vladimir/webgl/spore/sporeview.html

with a WebKit nightly with WebGL turned on, it doesn&apos;t display. This is because there is not call to flush() after the call. This should happen implicitly in our implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154125</commentid>
    <comment_count>1</comment_count>
      <attachid>41054</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-12 12:10:08 -0700</bug_when>
    <thetext>Created attachment 41054
Patch with test

This patch not only fixes the bug, but also implements readPixels and fixes a bug in indexing into the CanvasArray subclasses. These were needed in order to write a testcase for the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154142</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-10-12 13:01:29 -0700</bug_when>
    <thetext>Sending        LayoutTests/ChangeLog
Adding         LayoutTests/fast/canvas/webgl/resources/utils3d.js
Adding         LayoutTests/fast/canvas/webgl/triangle-expected.txt
Adding         LayoutTests/fast/canvas/webgl/triangle.html
Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/bindings/js/JSCanvasArrayCustom.cpp
Sending        WebCore/html/canvas/CanvasArray.h
Sending        WebCore/html/canvas/CanvasArray.idl
Sending        WebCore/html/canvas/CanvasByteArray.h
Sending        WebCore/html/canvas/CanvasFloatArray.h
Sending        WebCore/html/canvas/CanvasIntArray.h
Sending        WebCore/html/canvas/CanvasRenderingContext3D.cpp
Sending        WebCore/html/canvas/CanvasRenderingContext3D.h
Sending        WebCore/html/canvas/CanvasRenderingContext3D.idl
Sending        WebCore/html/canvas/CanvasShortArray.h
Sending        WebCore/html/canvas/CanvasUnsignedByteArray.h
Sending        WebCore/html/canvas/CanvasUnsignedIntArray.h
Sending        WebCore/html/canvas/CanvasUnsignedShortArray.h
Sending        WebCore/platform/graphics/GraphicsContext3D.h
Sending        WebCore/platform/graphics/mac/Canvas3DLayer.mm
Sending        WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
Transmitting file data ......................
Committed revision 49447.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41054</attachid>
            <date>2009-10-12 12:10:08 -0700</date>
            <delta_ts>2009-10-12 12:16:48 -0700</delta_ts>
            <desc>Patch with test</desc>
            <filename>30236.patch</filename>
            <type>text/plain</type>
            <size>44385</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0OTQ0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMDktMTAtMTIgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGVkIGF1dG9tYXRpYyBmbHVzaCBiZWZvcmUgY29tcG9zaXRpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjM2CisKKyAgICAgICAgVGhpcyBjYXVz
ZXMgaW1hZ2UgdG8gYWx3YXlzIHJlbmRlciBjb3JyZWN0bHkuIEluIHdyaXRpbmcgYSB0ZXN0Y2Fz
ZQorICAgICAgICBJIG5lZWRlZCB0byBpbXBsZW1lbnQgcmVhZFBpeGVscy4gVGhpcyBleHBvc2Vk
IGEgYnVnIGluIHJlYWRpbmcgYmFjaworICAgICAgICB2YWx1ZXMgZnJvbSBhIENhbnZhc0FycmF5
IHN1YmNsYXNzLCBzbyBJIGZpeGVkIHRoYXQgYXMgd2VsbC4gTm93IHdoZW4KKyAgICAgICAgeW91
IHdyYXAgYSBDYW52YXNBcnJheSBpbiBhIEpTVmFsdWUgaXQgYWN0dWFsbHkgd3JhcHMgdGhlIHNw
ZWNpZmljCisgICAgICAgIHN1YmNsYXNzLiBUbyBkbyB0aGlzIEkgbmVlZCB0byBhZGQgdmlydHVh
bCBtZXRob2RzIHRvIGVhY2ggQ2FudmFzQXJyYXkKKyAgICAgICAgc3ViY2xhc3MgdG8gZGV0ZXJt
aW5lIHRoZSB0eXBlIGFuZCBhIGN1c3RvbSB0b0pTIG1ldGhvZCBmb3IgQ2FudmFzQXJyYXkKKyAg
ICAgICAgdG8gY3JlYXRlIHRoZSBwcm9wZXIgd3JhcHBlci4gCisKKyAgICAgICAgVGVzdDogZmFz
dC9jYW52YXMvd2ViZ2wvdHJpYW5nbGUuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzQXJyYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0FycmF5Ojppc0J5dGVB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNBcnJheTo6aXNVbnNpZ25lZEJ5dGVBcnJh
eSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNBcnJheTo6aXNTaG9ydEFycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0FycmF5Ojppc1Vuc2lnbmVkU2hvcnRBcnJheSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNBcnJheTo6aXNJbnRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNBcnJheTo6aXNVbnNpZ25lZEludEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0FycmF5Ojppc0Zsb2F0QXJyYXkpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc0FycmF5
LmlkbDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNCeXRlQXJyYXkuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc0J5dGVBcnJheTo6aXNCeXRlQXJyYXkpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Zsb2F0
QXJyYXk6OmlzRmxvYXRBcnJheSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzSW50QXJy
YXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0ludEFycmF5Ojppc0ludEFycmF5KToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Nob3J0
QXJyYXk6OmlzU2hvcnRBcnJheSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5
Ojppc1Vuc2lnbmVkQnl0ZUFycmF5KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNVbnNp
Z25lZEludEFycmF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNVbnNpZ25lZEludEFycmF5
Ojppc1Vuc2lnbmVkSW50QXJyYXkpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5Ojppc1Vuc2lnbmVkU2hvcnRBcnJheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2Fu
dmFzM0RMYXllci5tbToKKyAgICAgICAgKC1bQ2FudmFzM0RMYXllciBkcmF3SW5DR0xDb250ZXh0
OnBpeGVsRm9ybWF0OmZvckxheWVyVGltZTpkaXNwbGF5VGltZTpdKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorCiAyMDA5LTEwLTEyICBTZWJh
c3RpYW4gRHLDtmdlICA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ5MTA4KQorKysgV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc1Nyw2ICs3
NTcsNyBAQAogCQk0NkY5RDVERDBCMEQ2MDE3MDAyOEVFMzYgLyogYWxpYXNDdXJzb3IucG5nIGlu
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkY5RDVEQTBC
MEQ2MDE3MDAyOEVFMzYgLyogYWxpYXNDdXJzb3IucG5nICovOyB9OwogCQk0NkY5RDVERTBCMEQ2
MDE3MDAyOEVFMzYgLyogbm9Ecm9wQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZGOUQ1REIwQjBENjAxNzAwMjhFRTM2IC8qIG5vRHJv
cEN1cnNvci5wbmcgKi87IH07CiAJCTQ2RjlENURGMEIwRDYwMTcwMDI4RUUzNiAvKiBwcm9ncmVz
c0N1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ2RjlENURDMEIwRDYwMTcwMDI4RUUzNiAvKiBwcm9ncmVzc0N1cnNvci5wbmcgKi87IH07
CisJCTQ5MjI3M0EzMTA4M0IzQjEwMEVFNUM4NCAvKiBKU0NhbnZhc0FycmF5Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5MjI3M0EyMTA4
M0IzQjEwMEVFNUM4NCAvKiBKU0NhbnZhc0FycmF5Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNDk0ODRG
QzExMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NDg0RkIzMTAyQ0YyM0MwMDE4N0REMyAv
KiBDYW52YXNHcmFkaWVudC5jcHAgKi87IH07CiAJCTQ5NDg0RkMyMTAyQ0YyM0MwMDE4N0REMyAv
KiBDYW52YXNHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDk0ODRGQjQxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmggKi87
IH07CiAJCTQ5NDg0RkM0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NDg0RkI2MTAyQ0Yy
M0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLzsgfTsKQEAgLTU5NDksNiArNTk1MCw3
IEBACiAJCTQ2RjlENURBMEIwRDYwMTcwMDI4RUUzNiAvKiBhbGlhc0N1cnNvci5wbmcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBh
dGggPSBhbGlhc0N1cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2RjlE
NURCMEIwRDYwMTcwMDI4RUUzNiAvKiBub0Ryb3BDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gbm9Ecm9w
Q3Vyc29yLnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOUQ1REMwQjBENjAx
NzAwMjhFRTM2IC8qIHByb2dyZXNzQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IHByb2dyZXNzQ3Vyc29y
LnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDkyMjczQTIxMDgzQjNCMTAwRUU1
Qzg0IC8qIEpTQ2FudmFzQXJyYXlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDYW52YXNBcnJheUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ5NDg0RkIzMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNHcmFkaWVudC5jcHA7
IHBhdGggPSBjYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0OTQ4NEZCNDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzR3JhZGllbnQuaDsgcGF0aCA9IGNh
bnZhcy9DYW52YXNHcmFkaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTQ4
NEZCNTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IENhbnZhc0dyYWRpZW50LmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52YXNHcmFkaWVu
dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDI3MSw2ICsxNDI3Myw3IEBA
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk0MTVCN0M1NDBGRjU5OEU2MDA2NzcwRjcgLyogSlNBYnN0
cmFjdFdvcmtlckN1c3RvbS5jcHAgKi8sCiAJCQkJQkMyRUQ2QkIwQzZCRDJGMDAwOTIwQkZGIC8q
IEpTQXR0ckN1c3RvbS5jcHAgKi8sCisJCQkJNDkyMjczQTIxMDgzQjNCMTAwRUU1Qzg0IC8qIEpT
Q2FudmFzQXJyYXlDdXN0b20uY3BwICovLAogCQkJCTQ5RUVDRjcxMTA1MDhEOUMwMDA5OUZBQiAv
KiBKU0NhbnZhc0J5dGVBcnJheUN1c3RvbS5jcHAgKi8sCiAJCQkJNDlFRUNGNzIxMDUwOEQ5QzAw
MDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAgKi8sCiAJCQkJNDlFRUNGNzMx
MDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzSW50QXJyYXlDdXN0b20uY3BwICovLApAQCAtMjAw
NTcsNiArMjAwNjAsNyBAQAogCQkJCTVEQjFCQzZCMTA3MTVBNjQwMEVGQUE0OSAvKiBUcmFuc2Zv
cm1Tb3VyY2VMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3OUY0M0QzMTA3NUU0NEEw
MDAwRjgzQiAvKiBSZWRpcmVjdFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JD
NjNCODEwNzZDOTdGMDAyQzIxNDIgLyogUG9saWN5Q2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDkyMjczQTMxMDgzQjNCMTAwRUU1Qzg0IC8qIEpTQ2FudmFzQXJyYXlDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNBcnJheUN1
c3RvbS5jcHAJKHJldmlzaW9uIDQ5MTA4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZh
c0FycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTMgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXkuaCIKKyNpbmNsdWRlICJK
U0NhbnZhc0J5dGVBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXku
aCIKKyNpbmNsdWRlICJKU0NhbnZhc1Nob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJKU0NhbnZhc1Vu
c2lnbmVkU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2FudmFzSW50QXJyYXkuaCIKKyNpbmNs
dWRlICJKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0Zsb2F0
QXJyYXkuaCIKIAogI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCiAKQEAgLTM4LDE3ICs0NSwyMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYW52YXNBcnJheSogb2Jq
ZWN0KQogewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgCi0gICAgCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotICAgIGlmIChvYmplY3Qt
PmlzM2QoKSkKLSAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEKj4ob2JqZWN0KSk7Ci0jZW5kaWYKLSAgICBBU1NFUlQob2JqZWN0LT5p
czJkKCkpOwotICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCo+KG9iamVjdCkpOworICAgIGlmIChvYmplY3QtPmlzRmxvYXRBcnJheSgpKQor
ICAgICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc0Zsb2F0QXJyYXk+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzRmxvYXRBcnJheSo+KG9iamVjdCkp
OworICAgIGlmIChvYmplY3QtPmlzVW5zaWduZWRCeXRlQXJyYXkoKSkKKyAgICAgICAgcmV0dXJu
IGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4oZXhlYywgZ2xv
YmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSo+KG9iamVjdCkp
OworICAgIGlmIChvYmplY3QtPmlzQnl0ZUFycmF5KCkpCisgICAgICAgIHJldHVybiBnZXRET01P
YmplY3RXcmFwcGVyPEpTQ2FudmFzQnl0ZUFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PENhbnZhc0J5dGVBcnJheSo+KG9iamVjdCkpOworICAgIGlmIChvYmplY3QtPmlzSW50
QXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNJbnRB
cnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDYW52YXNJbnRBcnJheSo+KG9i
amVjdCkpOworICAgIGlmIChvYmplY3QtPmlzVW5zaWduZWRJbnRBcnJheSgpKQorICAgICAgICBy
ZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXk+KGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzVW5zaWduZWRJbnRBcnJheSo+KG9iamVj
dCkpOworICAgIGlmIChvYmplY3QtPmlzU2hvcnRBcnJheSgpKQorICAgICAgICByZXR1cm4gZ2V0
RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc1Nob3J0QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8Q2FudmFzU2hvcnRBcnJheSo+KG9iamVjdCkpOworICAgIGlmIChvYmplY3Qt
PmlzVW5zaWduZWRTaG9ydEFycmF5KCkpCisgICAgICAgIHJldHVybiBnZXRET01PYmplY3RXcmFw
cGVyPEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSo+KG9iamVjdCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNBcnJheS5oCShyZXZpc2lvbiA0OTEwOCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTQgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDYW52YXNBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVk
PENhbnZhc0FycmF5PiB7CiAgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCeXRl
QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNV
bnNpZ25lZEJ5dGVBcnJheSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1Nob3J0QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZFNob3J0QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRBcnJheSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50QXJyYXkoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGbG9hdEFycmF5KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgCiAgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzQXJy
YXlCdWZmZXI+IGJ1ZmZlcigpIHsKICAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKICAgICAg
ICAgfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGwJKHJldmlzaW9uIDQ5MTA4
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiBtb2R1bGUgaHRtbCB7Ci0gICAgaW50ZXJmYWNlIFtD
b25kaXRpb25hbD0zRF9DQU5WQVNdIENhbnZhc0FycmF5IHsKKyAgICBpbnRlcmZhY2UgW0NvbmRp
dGlvbmFsPTNEX0NBTlZBUywgQ3VzdG9tVG9KU10gQ2FudmFzQXJyYXkgewogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgbG9uZyBsZW5ndGg7CiAgICAgICAgIGludCBzaXplSW5CeXRlcygpOwog
ICAgICAgICBpbnQgYWxpZ25lZFNpemVJbkJ5dGVzKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc0J5dGVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzQnl0ZUFycmF5LmgJKHJldmlzaW9uIDQ5MTA4KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNCeXRlQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBDYW52YXNCeXRlQXJyYXkgOiBwdWJsaWMgQ2Fu
dmFzQXJyYXkgewogICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZUFycmF5
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENh
bnZhc0J5dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENhbnZhc0J5dGVBcnJheT4gY3JlYXRlKHNpZ25lZCBjaGFyKiBhcnJheSwgdW5z
aWduZWQgbGVuZ3RoKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5
PiBjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNGbG9h
dEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNGbG9hdEFy
cmF5LmgJKHJldmlzaW9uIDQ5MTA4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNGbG9h
dEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIAogICAgIGNsYXNzIENhbnZhc0Zsb2F0QXJyYXkgOiBwdWJsaWMgQ2FudmFzQXJy
YXkgewogICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzRmxvYXRBcnJheSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNG
bG9hdEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gY3JlYXRlKGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gY3JlYXRl
KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzSW50QXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ludEFycmF5LmgJKHJldmlz
aW9uIDQ5MTA4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAg
ICBjbGFzcyBDYW52YXNJbnRBcnJheSA6IHB1YmxpYyBDYW52YXNBcnJheSB7CiAgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRBcnJheSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gY3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5
PiBjcmVhdGUoaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVm
ZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwCShyZXZpc2lv
biA0OTEwOCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzkyLDYgKzc5MiwxMyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6cG9seWdvbk9mCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAorUGFzc1JlZlB0cjxDYW52YXNBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlw
ZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LnJlYWRQaXhl
bHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKTsKKyAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKwogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiB7CiAgICAgbV9jb250
ZXh0LnJlbGVhc2VTaGFkZXJDb21waWxlcigpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oCShyZXZpc2lvbiA0OTEwOCkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4Nyw4ICsxODcsNyBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIHZvaWQg
cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSk7CiAgICAgICAgIHZv
aWQgcG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpOwogICAgICAgICAK
LSAgICAgICAgLy8gVEJECi0gICAgICAgIC8vdm9pZCByZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9u
ZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCogcGl4ZWxzKTsKKyAgICAgICAgUGFz
c1JlZlB0cjxDYW52YXNBcnJheT4gcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1
bnNpZ25lZCBsb25nIHR5cGUpOwogICAgICAgICAKICAgICAgICAgdm9pZCByZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKTsKICAgICAgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsCShyZXZpc2lvbiA0OTEwOCkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbAkod29ya2luZyBj
b3B5KQpAQCAtNTk3LDggKzU5Nyw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgdm9pZCAgICAg
ICAgIHBpeGVsU3RvcmVpKGluIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGluIGxvbmcgcGFyYW0pOwog
ICAgICAgICB2b2lkICAgICAgICAgcG9seWdvbk9mZnNldChpbiBkb3VibGUgZmFjdG9yLCBpbiBk
b3VibGUgdW5pdHMpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgLy92b2lk
ICAgICAgICAgcmVhZFBpeGVscyhpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQgbG9u
ZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQsIGluIHVuc2lnbmVkIGxvbmcgZm9ybWF0
LCBpbiB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIHBpeGVscyk7CisgICAgICAgIENhbnZhc0Fy
cmF5IHJlYWRQaXhlbHMoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBpbiB1bnNpZ25lZCBsb25nIGZvcm1hdCwgaW4g
dW5zaWduZWQgbG9uZyB0eXBlKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgICAgICAgICByZWxl
YXNlU2hhZGVyQ29tcGlsZXIoKTsKICAgICAgICAgdm9pZCAgICAgICAgIHJlbmRlcmJ1ZmZlclN0
b3JhZ2UoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxm
b3JtYXQsIGluIHVuc2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5oCShyZXZpc2lvbiA0OTEw
OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAgICBjbGFz
cyBDYW52YXNTaG9ydEFycmF5IDogcHVibGljIENhbnZhc0FycmF5IHsKICAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU2hvcnRBcnJheT4gY3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Nob3J0QXJy
YXk+IGNyZWF0ZShzaG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENhbnZhc1Nob3J0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0Fy
cmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oCShyZXZpc2lv
biA0OTEwOCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgCiAgICAgY2xhc3MgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkgOiBwdWJsaWMgQ2FudmFzQXJy
YXkgewogICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzVW5zaWduZWRCeXRlQXJy
YXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwogICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2ln
bmVkIGNoYXIqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJy
YXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oCShyZXZpc2lvbiA0
OTEwOCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAK
ICAgICBjbGFzcyBDYW52YXNVbnNpZ25lZEludEFycmF5IDogcHVibGljIENhbnZhc0FycmF5IHsK
ICAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50QXJyYXkoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFz
VW5zaWduZWRJbnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkSW50QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBpbnQq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52
YXNVbnNpZ25lZEludEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4g
YnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oCShyZXZpc2lvbiA0OTEwOCkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAg
IGNsYXNzIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSA6IHB1YmxpYyBDYW52YXNBcnJheSB7CiAg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZFNob3J0QXJyYXkoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFz
VW5zaWduZWRTaG9ydEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PiBjcmVhdGUodW5zaWduZWQg
c2hvcnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5
QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA0
OTEwOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjA0LDggKzIwNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKTsK
ICAgICAgICAgdm9pZCBwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cyk7
CiAgICAgICAgIAotICAgICAgICAvLyBUQkQKLSAgICAgICAgLy92b2lkIHJlYWRQaXhlbHMobG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1
bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBwaXhlbHMpOwor
ICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0FycmF5PiByZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9u
ZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHJl
bGVhc2VTaGFkZXJDb21waWxlcigpOwogICAgICAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQkocmV2aXNpb24gNDkxMDgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
LSh2b2lkKWRyYXdJbkNHTENvbnRleHQ6KENHTENvbnRleHRPYmopZ2xDb250ZXh0IHBpeGVsRm9y
bWF0OihDR0xQaXhlbEZvcm1hdE9iailwaXhlbEZvcm1hdCBmb3JMYXllclRpbWU6KENGVGltZUlu
dGVydmFsKXRpbWVJbnRlcnZhbCBkaXNwbGF5VGltZTooY29uc3QgQ1ZUaW1lU3RhbXAgKil0aW1l
U3RhbXAKIHsKKyAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOworICAgIGds
RmluaXNoKCk7CisgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoZ2xDb250ZXh0KTsKKwogICAgIENH
UmVjdCBmcmFtZSA9IFtzZWxmIGZyYW1lXTsKICAgICAgICAgCiAgICAgLy8gZHJhdyB0aGUgRkJP
IGludG8gdGhlIGxheWVyCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFw
aGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShyZXZpc2lvbiA0OTEwOCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTU2LDYgKzU1NiwyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpw
b2x5Z29uT2Zmc2V0KGRvCiAgICAgOjpnbFBvbHlnb25PZmZzZXQoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGZhY3RvciksIHN0YXRpY19jYXN0PGZsb2F0Pih1bml0cykpOwogfQogCitQYXNzUmVmUHRyPENh
bnZhc0FycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcg
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRl
eHRPYmopOworICAgIAorICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIG9ubHkgYWNjZXB0IEdMX1VO
U0lHTkVEX0JZVEUvR0xfUkdCQS4gSW4gcmVhbGl0eSBPcGVuR0wgRVMgMi4wIGFjY2VwdHMgdGhh
dCBwYWlyIGFuZCBvbmUgb3RoZXIKKyAgICAvLyBhcyBzcGVjaWZpZWQgYnkgR0xfSU1QTEVNRU5U
QVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgYW5kIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURf
VFlQRS4gQnV0IGZvciBub3cgd2Ugd2lsbAorICAgIC8vIG5vdCBhY2NlcHQgdGhvc2UuCisgICAg
Ly8gRklYTUU6IEFsc28sIHdlIHNob3VsZCB0aHJvdyB3aGVuIGFuIHVuYWNjZXB0YWJsZSB2YWx1
ZSBpcyBwYXNzZWQKKyAgICBpZiAodHlwZSAhPSBHTF9VTlNJR05FRF9CWVRFIHx8IGZvcm1hdCAh
PSBHTF9SR0JBKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgUmVmUHRyPENhbnZh
c1Vuc2lnbmVkQnl0ZUFycmF5PiBhcnJheSA9IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpjcmVh
dGUod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIChHTHZvaWQqKSBhcnJheS0+ZGF0YSgpKTsKKyAgICByZXR1
cm4gYXJyYXk7ICAgIAorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBk
ZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0byBoYXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBH
TCB2YXJpYW50cwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDk0NDUpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOS0xMC0xMiAgQ2hyaXMg
TWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdCBjYXNlIGZvciBidWcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjM2CisKKyAgICAgICAgVGhp
cyB0ZXN0IGNhc2UgZHJhd3MgYSBzaW1wbGUgdHJpYW5nbGUsIGRvZXMgYSByZWFkUGl4ZWxzIGFu
ZCBsb29rcyBhdCBzb21lIHBpeGVscworICAgICAgICB0byB2ZXJpZnkgdGhhdCB0aGUgdHJpYW5n
bGUgcmVuZGVyZWQuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXM6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy91dGlsczNkLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90cmlhbmdsZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RyaWFuZ2xlLmh0bWw6IEFkZGVk
LgorCiAyMDA5LTEwLTEyICBBbmRyYXMgQmVjc2kgIDxiZWNzaS5hbmRyYXNAc3R1ZC51LXN6ZWdl
ZC5odT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdHJpYW5nbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RyaWFuZ2xlLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RyaWFuZ2xl
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorVGVzdCBQQVNTRUQKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RyaWFuZ2xlLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdHJpYW5nbGUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RyaWFuZ2xlLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgIDxo
ZWFkPgorICAgIDx0aXRsZT5TcGlubmluZyBCb3g8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvdXRpbHMzZC5qcyI+IDwvc2NyaXB0PgorICAgIDxzY3JpcHQgaWQ9InZzaGFkZXIi
IHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KKyAgICAgICAgYXR0cmlidXRlIHZlYzQgdlBvc2l0
aW9uOworICAgICAgICB2b2lkIG1haW4oKQorICAgICAgICB7CisgICAgICAgICAgICBnbF9Qb3Np
dGlvbiA9IHZQb3NpdGlvbjsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorCisgICAgPHNjcmlw
dCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+CisgICAgICAgIHZvaWQg
bWFpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLDAu
MCwwLjAsMS4wKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorCisgICAgPHNjcmlwdD4KKyAg
ICAgICAgZnVuY3Rpb24gZmFpbCh4LHksIGJ1Ziwgc2hvdWxkQmUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZhciBpID0gKHkqNTAreCkgKiA0OworICAgICAgICAgICAgdmFyIHJlYXNvbiA9ICJw
aXhlbCBhdCAoIit4KyIsIit5KyIpIGlzICgiK2J1ZltpXSsiLCIrYnVmW2krMV0rIiwiK2J1Zltp
KzJdKyIsIitidWZbaSszXSsiKSwgc2hvdWxkIGJlICIrc2hvdWxkQmU7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCA9ICJUZXN0IDxzcGFu
IHN0eWxlPSdjb2xvcjpyZWQnPkZBSUxFRDwvc3Bhbj4gIityZWFzb247CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHBhc3MoKQorICAgICAgICB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCA9ICJUZXN0IDxzcGFu
IHN0eWxlPSdjb2xvcjpncmVlbic+UEFTU0VEPC9zcGFuPiI7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGZ1bmN0aW9uIGluaXQoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJHTEVuYWJsZWQiLCAiMSIpOwor
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZ2wgPSBpbml0V2ViR0woImV4YW1w
bGUiLCAidnNoYWRlciIsICJmc2hhZGVyIiwgWyAidlBvc2l0aW9uIl0sIFsgMCwgMCwgMCwgMSBd
LCAxKTsKKyAgICAgICAgICAgIGdsLnZpZXdwb3J0KDAsIDAsIDUwLCA1MCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAg
ICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhPYmplY3QpOwor
ICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBDYW52YXNGbG9h
dEFycmF5KFsgMCwwLjUsMCwgLTAuNSwtMC41LDAsIDAuNSwtMC41LDAgXSksIGdsLlNUQVRJQ19E
UkFXKTsKKyAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgICAg
ICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDAp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklU
IHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7CisgICAgICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLlRS
SUFOR0xFUywgMCwgMyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBidWYgPSBnbC5y
ZWFkUGl4ZWxzKDAsIDAsIDUwLCA1MCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIFRlc3Qgc2V2ZXJhbCBsb2NhdGlvbnMKKyAgICAgICAg
ICAgIC8vIEZpcnN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCA1MDsgKytpKQorICAgICAgICAgICAgICAgIGlmIChidWZbaSo0XSAhPSAw
IHx8IGJ1ZltpKjQrMV0gIT0gMCB8fCBidWZbaSo0KzJdICE9IDAgfHwgYnVmW2kqNCszXSAhPSAy
NTUpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFpbChpLCAwLCBidWYsICIoMCwwLDAsMjU1KSIp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gTGluZSAxNSBzaG91bGQgYmUgcmVkIGZvciBhdCBs
ZWFzdCAxMCByZWQgcGl4ZWxzIHN0YXJ0aW5nIDIwIHBpeGVscyBpbgorICAgICAgICAgICAgdmFy
IG9mZnNldCA9ICgxNSo1MCsyMCkgKiA0OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDsgKytpKQorICAgICAgICAgICAgICAgIGlmIChidWZbb2Zmc2V0K2kqNF0gIT0gMjU1IHx8
IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrMl0gIT0gMCB8fCBidWZb
b2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgyMCwgMTUs
IGJ1ZiwgIigyNTUsMCwwLDI1NSkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIExhc3QgbGluZSBzaG91bGQgYmUgYWxsIGJs
YWNrCisgICAgICAgICAgICBvZmZzZXQgPSAoNDkqNTApICogNAorICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCA1MDsgKytpKQorICAgICAgICAgICAgICAgIGlmIChidWZbb2Zmc2V0K2kq
NF0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCsxXSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzJdICE9
IDAgfHwgYnVmW29mZnNldCtpKjQrM10gIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgIGZh
aWwoaSwgNDksIGJ1ZiwgIigwLDAsMCwyNTUpIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBwYXNz
KCk7CisgICAgICAgfQorICAgIDwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxib2R5IG9ubG9hZD0i
aW5pdCgpIj4KKyAgICA8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iNTBweCIgaGVpZ2h0PSI1
MHB4Ij4KKyAgICBUaGVyZSBpcyBzdXBwb3NlZCB0byBiZSBhbiBleGFtcGxlIGRyYXdpbmcgaGVy
ZSwgYnV0IGl0J3Mgbm90IGltcG9ydGFudC4KKyAgICA8L2NhbnZhcz4KKyAgICA8ZGl2IGlkPSJy
ZXN1bHRzIj5UZXN0IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPkZBSUxFRDwvc3Bhbj48L2Rpdj4K
KyAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
cmVzb3VyY2VzL3V0aWxzM2QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvcmVzb3VyY2VzL3V0aWxzM2QuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvdXRpbHMzZC5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1MzkgQEAKKy8vCisvLyBpbml0V2ViR0wKKy8vCisvLyBJbml0aWFsaXplIHRoZSBD
YW52YXMgZWxlbWVudCB3aXRoIHRoZSBwYXNzZWQgbmFtZSBhcyBhIFdlYkdMIG9iamVjdCBhbmQg
cmV0dXJuIHRoZQorLy8gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELiAKKy8vCisvLyBMb2FkIHNo
YWRlcnMgd2l0aCB0aGUgcGFzc2VkIG5hbWVzIGFuZCBjcmVhdGUgYSBwcm9ncmFtIHdpdGggdGhl
bS4gUmV0dXJuIHRoaXMgcHJvZ3JhbSAKKy8vIGluIHRoZSAncHJvZ3JhbScgcHJvcGVydHkgb2Yg
dGhlIHJldHVybmVkIGNvbnRleHQuCisvLworLy8gRm9yIGVhY2ggc3RyaW5nIGluIHRoZSBwYXNz
ZWQgYXR0cmlicyBhcnJheSwgYmluZCBhbiBhdHRyaWIgd2l0aCB0aGF0IG5hbWUgYXQgdGhhdCBp
bmRleC4KKy8vIE9uY2UgdGhlIGF0dHJpYnMgYXJlIGJvdW5kLCBsaW5rIHRoZSBwcm9ncmFtIGFu
ZCB0aGVuIHVzZSBpdC4KKy8vCisvLyBTZXQgdGhlIGNsZWFyIGNvbG9yIHRvIHRoZSBwYXNzZWQg
YXJyYXkgKDQgdmFsdWVzKSBhbmQgc2V0IHRoZSBjbGVhciBkZXB0aCB0byB0aGUgcGFzc2VkIHZh
bHVlLgorLy8gRW5hYmxlIGRlcHRoIHRlc3RpbmcgYW5kIGJsZW5kaW5nIHdpdGggYSBibGVuZCBm
dW5jIG9mIChTUkNfQUxQSEEsIE9ORV9NSU5VU19TUkNfQUxQSEEpCisvLworZnVuY3Rpb24gaW5p
dFdlYkdMKGNhbnZhc05hbWUsIHZzaGFkZXIsIGZzaGFkZXIsIGF0dHJpYnMsIGNsZWFyQ29sb3Is
IGNsZWFyRGVwdGgpCit7CisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGNhbnZhc05hbWUpOworICAgIHZhciBnbDsKKyAgICAKKyAgICB0cnkge2dsID0gY2FudmFzLmdl
dENvbnRleHQoIndlYmtpdC0zZCIpIH0gY2F0Y2goZSkgeyB9CisgICAgaWYgKCFnbCkKKyAgICAg
ICAgdHJ5IHtnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCJtb3otd2ViZ2wiKSB9IGNhdGNoKGUpIHsg
fQorICAgIGlmICghZ2wpIHsKKyAgICAgICAgYWxlcnQoIk5vIFdlYkdMIGNvbnRleHQgZm91bmQi
KTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLy8gY3JlYXRlIG91ciBzaGFk
ZXJzCisgICAgdmFyIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoZ2wsIHZzaGFkZXIpOworICAg
IHZhciBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoZ2wsIGZzaGFkZXIpOworCisgICAgaWYg
KCF2ZXJ0ZXhTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyKQorICAgICAgICByZXR1cm4gbnVsbDsK
KworICAgIC8vIENyZWF0ZSB0aGUgcHJvZ3JhbSBvYmplY3QKKyAgICBnbC5wcm9ncmFtID0gZ2wu
Y3JlYXRlUHJvZ3JhbSgpOworCisgICAgaWYgKCFnbC5wcm9ncmFtKQorICAgICAgICByZXR1cm4g
bnVsbDsKKworICAgIC8vIEF0dGFjaCBvdXIgdHdvIHNoYWRlcnMgdG8gdGhlIHByb2dyYW0KKyAg
ICBnbC5hdHRhY2hTaGFkZXIgKGdsLnByb2dyYW0sIHZlcnRleFNoYWRlcik7CisgICAgZ2wuYXR0
YWNoU2hhZGVyIChnbC5wcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisKKyAgICAvLyBCaW5kIGF0
dHJpYnV0ZXMKKyAgICBmb3IgKHZhciBpIGluIGF0dHJpYnMpCisgICAgICAgIGdsLmJpbmRBdHRy
aWJMb2NhdGlvbiAoZ2wucHJvZ3JhbSwgaSwgYXR0cmlic1tpXSk7CisKKyAgICAvLyBMaW5rIHRo
ZSBwcm9ncmFtCisgICAgZ2wubGlua1Byb2dyYW0oZ2wucHJvZ3JhbSk7CisKKyAgICAvLyBDaGVj
ayB0aGUgbGluayBzdGF0dXMKKyAgICB2YXIgbGlua2VkID0gZ2wuZ2V0UHJvZ3JhbWkoZ2wucHJv
Z3JhbSwgZ2wuTElOS19TVEFUVVMpOworICAgIGlmICghbGlua2VkKSB7CisgICAgICAgIC8vIHNv
bWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGxpbmsKKyAgICAgICAgdmFyIGVycm9yID0gZ2wu
Z2V0UHJvZ3JhbUluZm9Mb2cgKGdsLnByb2dyYW0pOworICAgICAgICBjb25zb2xlLmxvZygiRXJy
b3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIrZXJyb3IpOworCisgICAgICAgIGdsLmRlbGV0ZVByb2dy
YW0oZ2wucHJvZ3JhbSk7CisgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0oZnJhZ21lbnRTaGFkZXIp
OworICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHZlcnRleFNoYWRlcik7CisKKyAgICAgICAgcmV0
dXJuIG51bGw7CisgICAgfQorCisgICAgZ2wudXNlUHJvZ3JhbShnbC5wcm9ncmFtKTsKKworICAg
IGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsy
XSwgY2xlYXJDb2xvclszXSk7CisgICAgZ2wuY2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKworICAg
IGdsLmVuYWJsZShnbC5ERVBUSF9URVNUKTsKKyAgICBnbC5lbmFibGUoZ2wuQkxFTkQpOworICAg
IGdsLmJsZW5kRnVuYyhnbC5TUkNfQUxQSEEsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEpOworCisg
ICAgcmV0dXJuIGdsOworfQorCisvLworLy8gbG9hZFNoYWRlcgorLy8KKy8vICdzaGFkZXJJZCcg
aXMgdGhlIGlkIG9mIGEgPHNjcmlwdD4gZWxlbWVudCBjb250YWluaW5nIHRoZSBzaGFkZXIgc291
cmNlIHN0cmluZy4KKy8vIExvYWQgdGhpcyBzaGFkZXIgYW5kIHJldHVybiB0aGUgQ2FudmFzU2hh
ZGVyIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGl0LgorLy8KK2Z1bmN0aW9uIGxvYWRTaGFkZXIo
Y3R4LCBzaGFkZXJJZCkKK3sKKyAgICB2YXIgc2hhZGVyU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoc2hhZGVySWQpOworICAgIGlmICghc2hhZGVyU2NyaXB0KSB7CisgICAgICAgIGNv
bnNvbGUubG9nKCIqKiogRXJyb3I6IHNoYWRlciBzY3JpcHQgJyIrc2hhZGVySWQrIicgbm90IGZv
dW5kIik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKHNo
YWRlclNjcmlwdC50eXBlID09ICJ4LXNoYWRlci94LXZlcnRleCIpCisgICAgICAgIHZhciBzaGFk
ZXJUeXBlID0gY3R4LlZFUlRFWF9TSEFERVI7CisgICAgZWxzZSBpZiAoc2hhZGVyU2NyaXB0LnR5
cGUgPT0gIngtc2hhZGVyL3gtZnJhZ21lbnQiKQorICAgICAgICB2YXIgc2hhZGVyVHlwZSA9IGN0
eC5GUkFHTUVOVF9TSEFERVI7CisgICAgZWxzZSB7CisgICAgICAgIGNvbnNvbGUubG9nKCIqKiog
RXJyb3I6IHNoYWRlciBzY3JpcHQgJyIrc2hhZGVySWQrIicgb2YgdW5kZWZpbmVkIHR5cGUgJyIr
c2hhZGVyU2NyaXB0LnR5cGUrIiciKTsgICAgICAgCisgICAgICAgIHJldHVybiBudWxsOworICAg
IH0KKworICAgIC8vIENyZWF0ZSB0aGUgc2hhZGVyIG9iamVjdAorICAgIHZhciBzaGFkZXIgPSBj
dHguY3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpOworICAgIGlmIChzaGFkZXIgPT0gbnVsbCkgewor
ICAgICAgICBjb25zb2xlLmxvZygiKioqIEVycm9yOiB1bmFibGUgdG8gY3JlYXRlIHNoYWRlciAn
IitzaGFkZXJJZCsiJyIpOyAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisg
ICAgLy8gTG9hZCB0aGUgc2hhZGVyIHNvdXJjZQorICAgIGN0eC5zaGFkZXJTb3VyY2Uoc2hhZGVy
LCBzaGFkZXJTY3JpcHQudGV4dCk7CisKKyAgICAvLyBDb21waWxlIHRoZSBzaGFkZXIKKyAgICBj
dHguY29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgICAgLy8gQ2hlY2sgdGhlIGNvbXBpbGUgc3Rh
dHVzCisgICAgdmFyIGNvbXBpbGVkID0gY3R4LmdldFNoYWRlcmkoc2hhZGVyLCBjdHguQ09NUElM
RV9TVEFUVVMpOworICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAgICAgLy8gU29tZXRoaW5nIHdl
bnQgd3JvbmcgZHVyaW5nIGNvbXBpbGF0aW9uOyBnZXQgdGhlIGVycm9yCisgICAgICAgIHZhciBl
cnJvciA9IGN0eC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7CisgICAgICAgIGNvbnNvbGUubG9n
KCIqKiogRXJyb3IgY29tcGlsaW5nIHNoYWRlciAnIitzaGFkZXJJZCsiJzoiK2Vycm9yKTsKKyAg
ICAgICAgY3R4LmRlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9CisKKyAgICByZXR1cm4gc2hhZGVyOworfQorCisvLyAKKy8vIG1ha2VCb3gKKy8vCisvLyBD
cmVhdGUgYSBib3ggd2l0aCB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdGV4Q29vcmRzLiBDcmVhdGUg
VkJPcyBmb3IgZWFjaCBhcyB3ZWxsIGFzIHRoZSBpbmRleCBhcnJheS4KKy8vIFJldHVybiBhbiBv
YmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisvLworLy8gIG5vcm1hbE9iamVj
dCAgICAgICAgQ2FudmFzQnVmZmVyIG9iamVjdCBmb3Igbm9ybWFscworLy8gIHRleENvb3JkT2Jq
ZWN0ICAgICAgQ2FudmFzQnVmZmVyIG9iamVjdCBmb3IgdGV4Q29vcmRzCisvLyAgdmVydGV4T2Jq
ZWN0ICAgICAgICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciB2ZXJ0aWNlcworLy8gIGluZGV4T2Jq
ZWN0ICAgICAgICAgQ2FudmFzQnVmZmVyIG9iamVjdCBmb3IgaW5kaWNlcworLy8gIG51bUluZGlj
ZXMgICAgICAgICAgVGhlIG51bWJlciBvZiBpbmRpY2VzIGluIHRoZSBpbmRleE9iamVjdAorLy8g
CitmdW5jdGlvbiBtYWtlQm94KGN0eCkKK3sKKyAgICAvLyBib3gKKyAgICAvLyAgICB2Ni0tLS0t
IHY1CisgICAgLy8gICAvfCAgICAgIC98CisgICAgLy8gIHYxLS0tLS0tdjB8CisgICAgLy8gIHwg
fCAgICAgfCB8CisgICAgLy8gIHwgfHY3LS0tfC18djQKKyAgICAvLyAgfC8gICAgICB8LworICAg
IC8vICB2Mi0tLS0tLXYzCisgICAgLy8KKyAgICAvLyB2ZXJ0ZXggY29vcmRzIGFycmF5CisgICAg
dmFyIHZlcnRpY2VzID0gbmV3IENhbnZhc0Zsb2F0QXJyYXkoCisgICAgICAgIFsgIDEsIDEsIDEs
ICAtMSwgMSwgMSwgIC0xLC0xLCAxLCAgIDEsLTEsIDEsICAgIC8vIHYwLXYxLXYyLXYzIGZyb250
CisgICAgICAgICAgIDEsIDEsIDEsICAgMSwtMSwgMSwgICAxLC0xLC0xLCAgIDEsIDEsLTEsICAg
IC8vIHYwLXYzLXY0LXY1IHJpZ2h0CisgICAgICAgICAgIDEsIDEsIDEsICAgMSwgMSwtMSwgIC0x
LCAxLC0xLCAgLTEsIDEsIDEsICAgIC8vIHYwLXY1LXY2LXYxIHRvcAorICAgICAgICAgIC0xLCAx
LCAxLCAgLTEsIDEsLTEsICAtMSwtMSwtMSwgIC0xLC0xLCAxLCAgICAvLyB2MS12Ni12Ny12MiBs
ZWZ0CisgICAgICAgICAgLTEsLTEsLTEsICAgMSwtMSwtMSwgICAxLC0xLCAxLCAgLTEsLTEsIDEs
ICAgIC8vIHY3LXY0LXYzLXYyIGJvdHRvbQorICAgICAgICAgICAxLC0xLC0xLCAgLTEsLTEsLTEs
ICAtMSwgMSwtMSwgICAxLCAxLC0xIF0gICAvLyB2NC12Ny12Ni12NSBiYWNrCisgICAgKTsKKwor
ICAgIC8vIG5vcm1hbCBhcnJheQorICAgIHZhciBub3JtYWxzID0gbmV3IENhbnZhc0Zsb2F0QXJy
YXkoCisgICAgICAgIFsgIDAsIDAsIDEsICAgMCwgMCwgMSwgICAwLCAwLCAxLCAgIDAsIDAsIDEs
ICAgICAvLyB2MC12MS12Mi12MyBmcm9udAorICAgICAgICAgICAxLCAwLCAwLCAgIDEsIDAsIDAs
ICAgMSwgMCwgMCwgICAxLCAwLCAwLCAgICAgLy8gdjAtdjMtdjQtdjUgcmlnaHQKKyAgICAgICAg
ICAgMCwgMSwgMCwgICAwLCAxLCAwLCAgIDAsIDEsIDAsICAgMCwgMSwgMCwgICAgIC8vIHYwLXY1
LXY2LXYxIHRvcAorICAgICAgICAgIC0xLCAwLCAwLCAgLTEsIDAsIDAsICAtMSwgMCwgMCwgIC0x
LCAwLCAwLCAgICAgLy8gdjEtdjYtdjctdjIgbGVmdAorICAgICAgICAgICAwLC0xLCAwLCAgIDAs
LTEsIDAsICAgMCwtMSwgMCwgICAwLC0xLCAwLCAgICAgLy8gdjctdjQtdjMtdjIgYm90dG9tCisg
ICAgICAgICAgIDAsIDAsLTEsICAgMCwgMCwtMSwgICAwLCAwLC0xLCAgIDAsIDAsLTEgXSAgICAv
LyB2NC12Ny12Ni12NSBiYWNrCisgICAgICAgKTsKKworCisgICAgLy8gdGV4Q29vcmQgYXJyYXkK
KyAgICB2YXIgdGV4Q29vcmRzID0gbmV3IENhbnZhc0Zsb2F0QXJyYXkoCisgICAgICAgIFsgIDEs
IDEsICAgMCwgMSwgICAwLCAwLCAgIDEsIDAsICAgIC8vIHYwLXYxLXYyLXYzIGZyb250CisgICAg
ICAgICAgIDAsIDEsICAgMCwgMCwgICAxLCAwLCAgIDEsIDEsICAgIC8vIHYwLXYzLXY0LXY1IHJp
Z2h0CisgICAgICAgICAgIDEsIDAsICAgMSwgMSwgICAwLCAxLCAgIDAsIDAsICAgIC8vIHYwLXY1
LXY2LXYxIHRvcAorICAgICAgICAgICAxLCAxLCAgIDAsIDEsICAgMCwgMCwgICAxLCAwLCAgICAv
LyB2MS12Ni12Ny12MiBsZWZ0CisgICAgICAgICAgIDAsIDAsICAgMSwgMCwgICAxLCAxLCAgIDAs
IDEsICAgIC8vIHY3LXY0LXYzLXYyIGJvdHRvbQorICAgICAgICAgICAwLCAwLCAgIDEsIDAsICAg
MSwgMSwgICAwLCAxIF0gICAvLyB2NC12Ny12Ni12NSBiYWNrCisgICAgICAgKTsKKworICAgIC8v
IGluZGV4IGFycmF5CisgICAgdmFyIGluZGljZXMgPSBuZXcgQ2FudmFzVW5zaWduZWRCeXRlQXJy
YXkoCisgICAgICAgIFsgIDAsIDEsIDIsICAgMCwgMiwgMywgICAgLy8gZnJvbnQKKyAgICAgICAg
ICAgNCwgNSwgNiwgICA0LCA2LCA3LCAgICAvLyByaWdodAorICAgICAgICAgICA4LCA5LDEwLCAg
IDgsMTAsMTEsICAgIC8vIHRvcAorICAgICAgICAgIDEyLDEzLDE0LCAgMTIsMTQsMTUsICAgIC8v
IGxlZnQKKyAgICAgICAgICAxNiwxNywxOCwgIDE2LDE4LDE5LCAgICAvLyBib3R0b20KKyAgICAg
ICAgICAyMCwyMSwyMiwgIDIwLDIyLDIzIF0gICAvLyBiYWNrCisgICAgICApOworCisgICAgdmFy
IHJldHZhbCA9IHsgfTsKKyAgICAKKyAgICByZXR2YWwubm9ybWFsT2JqZWN0ID0gY3R4LmNyZWF0
ZUJ1ZmZlcigpOworICAgIGN0eC5iaW5kQnVmZmVyKGN0eC5BUlJBWV9CVUZGRVIsIHJldHZhbC5u
b3JtYWxPYmplY3QpOworICAgIGN0eC5idWZmZXJEYXRhKGN0eC5BUlJBWV9CVUZGRVIsIG5vcm1h
bHMsIGN0eC5TVEFUSUNfRFJBVyk7CisgICAgCisgICAgcmV0dmFsLnRleENvb3JkT2JqZWN0ID0g
Y3R4LmNyZWF0ZUJ1ZmZlcigpOworICAgIGN0eC5iaW5kQnVmZmVyKGN0eC5BUlJBWV9CVUZGRVIs
IHJldHZhbC50ZXhDb29yZE9iamVjdCk7CisgICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkFSUkFZX0JV
RkZFUiwgdGV4Q29vcmRzLCBjdHguU1RBVElDX0RSQVcpOworCisgICAgcmV0dmFsLnZlcnRleE9i
amVjdCA9IGN0eC5jcmVhdGVCdWZmZXIoKTsKKyAgICBjdHguYmluZEJ1ZmZlcihjdHguQVJSQVlf
QlVGRkVSLCByZXR2YWwudmVydGV4T2JqZWN0KTsKKyAgICBjdHguYnVmZmVyRGF0YShjdHguQVJS
QVlfQlVGRkVSLCB2ZXJ0aWNlcywgY3R4LlNUQVRJQ19EUkFXKTsKKyAgICAKKyAgICBjdHguYmlu
ZEJ1ZmZlcihjdHguQVJSQVlfQlVGRkVSLCAwKTsKKworICAgIHJldHZhbC5pbmRleE9iamVjdCA9
IGN0eC5jcmVhdGVCdWZmZXIoKTsKKyAgICBjdHguYmluZEJ1ZmZlcihjdHguRUxFTUVOVF9BUlJB
WV9CVUZGRVIsIHJldHZhbC5pbmRleE9iamVjdCk7CisgICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkVM
RU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRpY2VzLCBjdHguU1RBVElDX0RSQVcpOworICAgIGN0eC5i
aW5kQnVmZmVyKGN0eC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCk7CisgICAgCisgICAgcmV0dmFs
Lm51bUluZGljZXMgPSBpbmRpY2VzLmxlbmd0aDsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisK
Ky8vIAorLy8gbWFrZVNwaGVyZQorLy8KKy8vIENyZWF0ZSBhIHNwaGVyZSB3aXRoIHRoZSBwYXNz
ZWQgbnVtYmVyIG9mIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgYmFuZHMgYW5kIHRoZSBwYXNzZWQg
cmFkaXVzLiAKKy8vIFNwaGVyZSBoYXMgdmVydGljZXMsIG5vcm1hbHMgYW5kIHRleENvb3Jkcy4g
Q3JlYXRlIFZCT3MgZm9yIGVhY2ggYXMgd2VsbCBhcyB0aGUgaW5kZXggYXJyYXkuCisvLyBSZXR1
cm4gYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorLy8KKy8vICBub3Jt
YWxPYmplY3QgICAgICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIG5vcm1hbHMKKy8vICB0ZXhD
b29yZE9iamVjdCAgICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIHRleENvb3JkcworLy8gIHZl
cnRleE9iamVjdCAgICAgICAgQ2FudmFzQnVmZmVyIG9iamVjdCBmb3IgdmVydGljZXMKKy8vICBp
bmRleE9iamVjdCAgICAgICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIGluZGljZXMKKy8vICBu
dW1JbmRpY2VzICAgICAgICAgIFRoZSBudW1iZXIgb2YgaW5kaWNlcyBpbiB0aGUgaW5kZXhPYmpl
Y3QKKy8vIAorZnVuY3Rpb24gbWFrZVNwaGVyZShjdHgsIHJhZGl1cywgbGF0cywgbG9uZ3MpCit7
CisgICAgdmFyIGdlb21ldHJ5RGF0YSA9IFsgXTsKKyAgICB2YXIgbm9ybWFsRGF0YSA9IFsgXTsK
KyAgICB2YXIgdGV4Q29vcmREYXRhID0gWyBdOworICAgIHZhciBpbmRleERhdGEgPSBbIF07Cisg
ICAgCisgICAgZm9yICh2YXIgbGF0TnVtYmVyID0gMDsgbGF0TnVtYmVyIDw9IGxhdHM7ICsrbGF0
TnVtYmVyKSB7CisgICAgICAgIGZvciAodmFyIGxvbmdOdW1iZXIgPSAwOyBsb25nTnVtYmVyIDw9
IGxvbmdzOyArK2xvbmdOdW1iZXIpIHsKKyAgICAgICAgICAgIHZhciB0aGV0YSA9IGxhdE51bWJl
ciAqIE1hdGguUEkgLyBsYXRzOworICAgICAgICAgICAgdmFyIHBoaSA9IGxvbmdOdW1iZXIgKiAy
ICogTWF0aC5QSSAvIGxvbmdzOworICAgICAgICAgICAgdmFyIHNpblRoZXRhID0gTWF0aC5zaW4o
dGhldGEpOworICAgICAgICAgICAgdmFyIHNpblBoaSA9IE1hdGguc2luKHBoaSk7CisgICAgICAg
ICAgICB2YXIgY29zVGhldGEgPSBNYXRoLmNvcyh0aGV0YSk7CisgICAgICAgICAgICB2YXIgY29z
UGhpID0gTWF0aC5jb3MocGhpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIHggPSBj
b3NQaGkgKiBzaW5UaGV0YTsKKyAgICAgICAgICAgIHZhciB5ID0gY29zVGhldGE7CisgICAgICAg
ICAgICB2YXIgeiA9IHNpblBoaSAqIHNpblRoZXRhOworICAgICAgICAgICAgdmFyIHUgPSAxLShs
b25nTnVtYmVyL2xvbmdzKTsKKyAgICAgICAgICAgIHZhciB2ID0gbGF0TnVtYmVyL2xhdHM7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG5vcm1hbERhdGEucHVzaCh4KTsKKyAgICAgICAgICAg
IG5vcm1hbERhdGEucHVzaCh5KTsKKyAgICAgICAgICAgIG5vcm1hbERhdGEucHVzaCh6KTsKKyAg
ICAgICAgICAgIHRleENvb3JkRGF0YS5wdXNoKHUpOworICAgICAgICAgICAgdGV4Q29vcmREYXRh
LnB1c2godik7CisgICAgICAgICAgICBnZW9tZXRyeURhdGEucHVzaChyYWRpdXMgKiB4KTsKKyAg
ICAgICAgICAgIGdlb21ldHJ5RGF0YS5wdXNoKHJhZGl1cyAqIHkpOworICAgICAgICAgICAgZ2Vv
bWV0cnlEYXRhLnB1c2gocmFkaXVzICogeik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
bG9uZ3MgKz0gMTsKKyAgICBmb3IgKHZhciBsYXROdW1iZXIgPSAwOyBsYXROdW1iZXIgPCBsYXRz
OyArK2xhdE51bWJlcikgeworICAgICAgICBmb3IgKHZhciBsb25nTnVtYmVyID0gMDsgbG9uZ051
bWJlciA8IGxvbmdzOyArK2xvbmdOdW1iZXIpIHsKKyAgICAgICAgICAgIHZhciBmaXJzdCA9IChs
YXROdW1iZXIgKiBsb25ncykgKyAobG9uZ051bWJlciAlIGxvbmdzKTsKKyAgICAgICAgICAgIHZh
ciBzZWNvbmQgPSBmaXJzdCArIGxvbmdzOworICAgICAgICAgICAgaW5kZXhEYXRhLnB1c2goZmly
c3QpOworICAgICAgICAgICAgaW5kZXhEYXRhLnB1c2goc2Vjb25kKTsKKyAgICAgICAgICAgIGlu
ZGV4RGF0YS5wdXNoKGZpcnN0KzEpOworCisgICAgICAgICAgICBpbmRleERhdGEucHVzaChzZWNv
bmQpOworICAgICAgICAgICAgaW5kZXhEYXRhLnB1c2goc2Vjb25kKzEpOworICAgICAgICAgICAg
aW5kZXhEYXRhLnB1c2goZmlyc3QrMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdmFy
IHJldHZhbCA9IHsgfTsKKyAgICAKKyAgICByZXR2YWwubm9ybWFsT2JqZWN0ID0gY3R4LmNyZWF0
ZUJ1ZmZlcigpOworICAgIGN0eC5iaW5kQnVmZmVyKGN0eC5BUlJBWV9CVUZGRVIsIHJldHZhbC5u
b3JtYWxPYmplY3QpOworICAgIGN0eC5idWZmZXJEYXRhKGN0eC5BUlJBWV9CVUZGRVIsIG5ldyBD
YW52YXNGbG9hdEFycmF5KG5vcm1hbERhdGEpLCBjdHguU1RBVElDX0RSQVcpOworCisgICAgcmV0
dmFsLnRleENvb3JkT2JqZWN0ID0gY3R4LmNyZWF0ZUJ1ZmZlcigpOworICAgIGN0eC5iaW5kQnVm
ZmVyKGN0eC5BUlJBWV9CVUZGRVIsIHJldHZhbC50ZXhDb29yZE9iamVjdCk7CisgICAgY3R4LmJ1
ZmZlckRhdGEoY3R4LkFSUkFZX0JVRkZFUiwgbmV3IENhbnZhc0Zsb2F0QXJyYXkodGV4Q29vcmRE
YXRhKSwgY3R4LlNUQVRJQ19EUkFXKTsKKworICAgIHJldHZhbC52ZXJ0ZXhPYmplY3QgPSBjdHgu
Y3JlYXRlQnVmZmVyKCk7CisgICAgY3R4LmJpbmRCdWZmZXIoY3R4LkFSUkFZX0JVRkZFUiwgcmV0
dmFsLnZlcnRleE9iamVjdCk7CisgICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkFSUkFZX0JVRkZFUiwg
bmV3IENhbnZhc0Zsb2F0QXJyYXkoZ2VvbWV0cnlEYXRhKSwgY3R4LlNUQVRJQ19EUkFXKTsKKyAg
ICAKKyAgICByZXR2YWwubnVtSW5kaWNlcyA9IGluZGV4RGF0YS5sZW5ndGg7CisgICAgcmV0dmFs
LmluZGV4T2JqZWN0ID0gY3R4LmNyZWF0ZUJ1ZmZlcigpOworICAgIGN0eC5iaW5kQnVmZmVyKGN0
eC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgcmV0dmFsLmluZGV4T2JqZWN0KTsKKyAgICBjdHguYnVm
ZmVyRGF0YShjdHguRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG5ldyBDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkoaW5kZXhEYXRhKSwgY3R4LlNUUkVBTV9EUkFXKTsKKyAgICAKKyAgICByZXR1cm4gcmV0
dmFsOworfQorCisvLworLy8gbG9hZE9iagorLy8KKy8vIExvYWQgYSAub2JqIGZpbGUgZnJvbSB0
aGUgcGFzc2VkIFVSTC4gUmV0dXJuIGFuIG9iamVjdCB3aXRoIGEgJ2xvYWRlZCcgcHJvcGVydHkg
c2V0IHRvIGZhbHNlLgorLy8gV2hlbiB0aGUgb2JqZWN0IGxvYWQgaXMgY29tcGxldGUsIHRoZSAn
bG9hZGVkJyBwcm9wZXJ0eSBiZWNvbWVzIHRydWUgYW5kIHRoZSBmb2xsb3dpbmcgCisvLyBwcm9w
ZXJ0aWVzIGFyZSBzZXQ6CisvLworLy8gIG5vcm1hbE9iamVjdCAgICAgICAgQ2FudmFzQnVmZmVy
IG9iamVjdCBmb3Igbm9ybWFscworLy8gIHRleENvb3JkT2JqZWN0ICAgICAgQ2FudmFzQnVmZmVy
IG9iamVjdCBmb3IgdGV4Q29vcmRzCisvLyAgdmVydGV4T2JqZWN0ICAgICAgICBDYW52YXNCdWZm
ZXIgb2JqZWN0IGZvciB2ZXJ0aWNlcworLy8gIGluZGV4T2JqZWN0ICAgICAgICAgQ2FudmFzQnVm
ZmVyIG9iamVjdCBmb3IgaW5kaWNlcworLy8gIG51bUluZGljZXMgICAgICAgICAgVGhlIG51bWJl
ciBvZiBpbmRpY2VzIGluIHRoZSBpbmRleE9iamVjdAorLy8gIAorZnVuY3Rpb24gbG9hZE9iaihj
dHgsIHVybCkKK3sKKyAgICB2YXIgb2JqID0geyBsb2FkZWQgOiBmYWxzZSB9OworICAgIG9iai5j
dHggPSBjdHg7CisgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHJlcS5v
YmogPSBvYmo7CisgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsgcHJv
Y2Vzc0xvYWRPYmoocmVxKSB9OworICAgIHJlcS5vcGVuKCJHRVQiLCB1cmwsIHRydWUpOworICAg
IHJlcS5zZW5kKG51bGwpOworICAgIHJldHVybiBvYmo7Cit9CisKK2Z1bmN0aW9uIHByb2Nlc3NM
b2FkT2JqKHJlcSkgCit7CisgICAgY29uc29sZS5sb2coInJlcT0iK3JlcSkKKyAgICAvLyBvbmx5
IGlmIHJlcSBzaG93cyAiY29tcGxldGUiCisgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09IDQpIHsK
KyAgICAgICAgZG9Mb2FkT2JqKHJlcS5vYmosIHJlcS5yZXNwb25zZVRleHQpOworICAgIH0KK30K
KworZnVuY3Rpb24gZG9Mb2FkT2JqKG9iaiwgdGV4dCkKK3sKKyAgICB2ZXJ0ZXhBcnJheSA9IFsg
XTsKKyAgICBub3JtYWxBcnJheSA9IFsgXTsKKyAgICB0ZXh0dXJlQXJyYXkgPSBbIF07CisgICAg
aW5kZXhBcnJheSA9IFsgXTsKKyAgICAKKyAgICB2YXIgdmVydGV4ID0gWyBdOworICAgIHZhciBu
b3JtYWwgPSBbIF07CisgICAgdmFyIHRleHR1cmUgPSBbIF07CisgICAgdmFyIGZhY2VtYXAgPSB7
IH07CisgICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgCisgICAgdmFyIGxpbmVzID0gdGV4dC5z
cGxpdCgiXG4iKTsKKyAgICBmb3IgKHZhciBsaW5lSW5kZXggaW4gbGluZXMpIHsKKyAgICAgICAg
dmFyIGxpbmUgPSBsaW5lc1tsaW5lSW5kZXhdLnJlcGxhY2UoL1sgXHRdKy9nLCAiICIpLnJlcGxh
Y2UoL1xzXHMqJC8sICIiKTsKKyAgICAgICAgCisgICAgICAgIC8vIGlnbm9yZSBjb21tZW50cwor
ICAgICAgICBpZiAobGluZVswXSA9PSAiIyIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICB2YXIgYXJyYXkgPSBsaW5lLnNwbGl0KCIgIik7CisgICAgICAgIGlm
IChhcnJheVswXSA9PSAidiIpIHsKKyAgICAgICAgICAgIC8vIHZlcnRleAorICAgICAgICAgICAg
dmVydGV4LnB1c2gocGFyc2VGbG9hdChhcnJheVsxXSkpOworICAgICAgICAgICAgdmVydGV4LnB1
c2gocGFyc2VGbG9hdChhcnJheVsyXSkpOworICAgICAgICAgICAgdmVydGV4LnB1c2gocGFyc2VG
bG9hdChhcnJheVszXSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFycmF5WzBdID09
ICJ2dCIpIHsKKyAgICAgICAgICAgIC8vIG5vcm1hbAorICAgICAgICAgICAgdGV4dHVyZS5wdXNo
KHBhcnNlRmxvYXQoYXJyYXlbMV0pKTsKKyAgICAgICAgICAgIHRleHR1cmUucHVzaChwYXJzZUZs
b2F0KGFycmF5WzJdKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXJyYXlbMF0gPT0g
InZuIikgeworICAgICAgICAgICAgLy8gbm9ybWFsCisgICAgICAgICAgICBub3JtYWwucHVzaChw
YXJzZUZsb2F0KGFycmF5WzFdKSk7CisgICAgICAgICAgICBub3JtYWwucHVzaChwYXJzZUZsb2F0
KGFycmF5WzJdKSk7CisgICAgICAgICAgICBub3JtYWwucHVzaChwYXJzZUZsb2F0KGFycmF5WzNd
KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXJyYXlbMF0gPT0gImYiKSB7CisgICAg
ICAgICAgICAvLyBmYWNlCisgICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoICE9IDQpIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygiKioqIEVycm9yOiBmYWNlICciK2xpbmUrIicgbm90
IGhhbmRsZWQiKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA0OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIShhcnJheVtpXSBpbiBmYWNlbWFwKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBhZGQgYSBuZXcgZW50cnkgdG8gdGhlIG1hcCBhbmQgYXJyYXlzCisgICAgICAg
ICAgICAgICAgICAgIHZhciBmID0gYXJyYXlbaV0uc3BsaXQoIi8iKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHZ0eCwgbm9yLCB0ZXg7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpZiAoZi5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dnR4ID0gcGFyc2VJbnQoZlswXSkgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbm9yID0g
dnR4OworICAgICAgICAgICAgICAgICAgICAgICAgdGV4ID0gdnR4OworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGYubGVuZ3RoID0gMykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdnR4ID0gcGFyc2VJbnQoZlswXSkgLSAxOworICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4ID0gcGFyc2VJbnQoZlsxXSkgLSAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgbm9yID0gcGFyc2VJbnQoZlsyXSkgLSAxOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
c29sZS5sb2coIioqKiBFcnJvcjogZGlkIG5vdCB1bmRlcnN0YW5kIGZhY2UgJyIrYXJyYXlbaV0r
IiciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBk
byB0aGUgdmVydGljZXMKKyAgICAgICAgICAgICAgICAgICAgdmFyIHggPSAwOworICAgICAgICAg
ICAgICAgICAgICB2YXIgeSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHZhciB6ID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZ0eCAqIDMgKyAyIDwgdmVydGV4Lmxlbmd0aCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgeCA9IHZlcnRleFt2dHgqM107CisgICAgICAgICAgICAgICAg
ICAgICAgICB5ID0gdmVydGV4W3Z0eCozKzFdOworICAgICAgICAgICAgICAgICAgICAgICAgeiA9
IHZlcnRleFt2dHgqMysyXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB2ZXJ0ZXhBcnJheS5wdXNoKHgpOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhBcnJh
eS5wdXNoKHkpOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhBcnJheS5wdXNoKHopOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gZG8gdGhlIHRleHR1cmVz
CisgICAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgICAgICAgICB5ID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRleCAqIDIgKyAxIDwgdGV4dHVyZS5sZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB0ZXh0dXJlW3RleCoyXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHkgPSB0ZXh0dXJlW3RleCoyKzFdOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVBcnJheS5wdXNoKHgpOworICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlQXJyYXkucHVzaCh5KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIC8vIGRvIHRoZSBub3JtYWxzCisgICAgICAgICAgICAgICAgICAgIHgg
PSAwOworICAgICAgICAgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgeiA9
IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChub3IgKiAzICsgMiA8IG5vcm1hbC5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSBub3JtYWxbbm9yKjNdOworICAgICAgICAg
ICAgICAgICAgICAgICAgeSA9IG5vcm1hbFtub3IqMysxXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHogPSBub3JtYWxbbm9yKjMrMl07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgbm9ybWFsQXJyYXkucHVzaCh4KTsKKyAgICAgICAgICAgICAgICAgICAgbm9y
bWFsQXJyYXkucHVzaCh5KTsKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsQXJyYXkucHVzaCh6
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZhY2VtYXBbYXJy
YXlbaV1dID0gaW5kZXgrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaW5kZXhBcnJheS5wdXNoKGZhY2VtYXBbYXJyYXlbaV1dKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHNldCB0aGUgVkJPcworICAgIG9i
ai5ub3JtYWxPYmplY3QgPSBvYmouY3R4LmNyZWF0ZUJ1ZmZlcigpOworICAgIG9iai5jdHguYmlu
ZEJ1ZmZlcihvYmouY3R4LkFSUkFZX0JVRkZFUiwgb2JqLm5vcm1hbE9iamVjdCk7CisgICAgb2Jq
LmN0eC5idWZmZXJEYXRhKG9iai5jdHguQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFzRmxvYXRBcnJh
eShub3JtYWxBcnJheSksIG9iai5jdHguU1RBVElDX0RSQVcpOworCisgICAgb2JqLnRleENvb3Jk
T2JqZWN0ID0gb2JqLmN0eC5jcmVhdGVCdWZmZXIoKTsKKyAgICBvYmouY3R4LmJpbmRCdWZmZXIo
b2JqLmN0eC5BUlJBWV9CVUZGRVIsIG9iai50ZXhDb29yZE9iamVjdCk7CisgICAgb2JqLmN0eC5i
dWZmZXJEYXRhKG9iai5jdHguQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFzRmxvYXRBcnJheSh0ZXh0
dXJlQXJyYXkpLCBvYmouY3R4LlNUQVRJQ19EUkFXKTsKKworICAgIG9iai52ZXJ0ZXhPYmplY3Qg
PSBvYmouY3R4LmNyZWF0ZUJ1ZmZlcigpOworICAgIG9iai5jdHguYmluZEJ1ZmZlcihvYmouY3R4
LkFSUkFZX0JVRkZFUiwgb2JqLnZlcnRleE9iamVjdCk7CisgICAgb2JqLmN0eC5idWZmZXJEYXRh
KG9iai5jdHguQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFzRmxvYXRBcnJheSh2ZXJ0ZXhBcnJheSks
IG9iai5jdHguU1RBVElDX0RSQVcpOworICAgIAorICAgIG9iai5udW1JbmRpY2VzID0gaW5kZXhB
cnJheS5sZW5ndGg7CisgICAgb2JqLmluZGV4T2JqZWN0ID0gb2JqLmN0eC5jcmVhdGVCdWZmZXIo
KTsKKyAgICBvYmouY3R4LmJpbmRCdWZmZXIob2JqLmN0eC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwg
b2JqLmluZGV4T2JqZWN0KTsKKyAgICBvYmouY3R4LmJ1ZmZlckRhdGEob2JqLmN0eC5FTEVNRU5U
X0FSUkFZX0JVRkZFUiwgbmV3IENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheShpbmRleEFycmF5KSwg
b2JqLmN0eC5TVFJFQU1fRFJBVyk7CisgICAgCisgICAgb2JqLmxvYWRlZCA9IHRydWU7Cit9CisK
Ky8vCisvLyBsb2FkSW1hZ2VUZXh0dXJlCisvLworLy8gTG9hZCB0aGUgaW1hZ2UgYXQgdGhlIHBh
c3NlZCB1cmwsIHBsYWNlIGl0IGluIGEgbmV3IENhbnZhc1RleHR1cmUgb2JqZWN0IGFuZCByZXR1
cm4gdGhlIENhbnZhc1RleHR1cmUuCisvLworZnVuY3Rpb24gbG9hZEltYWdlVGV4dHVyZShjdHgs
IHVybCkKK3sKKyAgICB2YXIgdGV4dHVyZSA9IGN0eC5jcmVhdGVUZXh0dXJlKCk7CisgICAgdGV4
dHVyZS5pbWFnZSA9IG5ldyBJbWFnZSgpOworICAgIHRleHR1cmUuaW1hZ2Uub25sb2FkID0gZnVu
Y3Rpb24oKSB7IGRvTG9hZEltYWdlVGV4dHVyZShjdHgsIHRleHR1cmUuaW1hZ2UsIHRleHR1cmUp
IH0KKyAgICB0ZXh0dXJlLmltYWdlLnNyYyA9IHVybDsKKyAgICByZXR1cm4gdGV4dHVyZTsKK30K
KworZnVuY3Rpb24gZG9Mb2FkSW1hZ2VUZXh0dXJlKGN0eCwgaW1hZ2UsIHRleHR1cmUpCit7Cisg
ICAgY3R4LmVuYWJsZShjdHguVEVYVFVSRV8yRCk7CisgICAgY3R4LmJpbmRUZXh0dXJlKGN0eC5U
RVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBjdHgudGV4SW1hZ2UyRChjdHguVEVYVFVSRV8yRCwg
MCwgaW1hZ2UpOworICAgIGN0eC50ZXhQYXJhbWV0ZXJpKGN0eC5URVhUVVJFXzJELCBjdHguVEVY
VFVSRV9NQUdfRklMVEVSLCBjdHguTElORUFSKTsKKyAgICBjdHgudGV4UGFyYW1ldGVyaShjdHgu
VEVYVFVSRV8yRCwgY3R4LlRFWFRVUkVfTUlOX0ZJTFRFUiwgY3R4LkxJTkVBUl9NSVBNQVBfTElO
RUFSKTsKKyAgICBjdHgudGV4UGFyYW1ldGVyaShjdHguVEVYVFVSRV8yRCwgY3R4LlRFWFRVUkVf
V1JBUF9TLCBjdHguQ0xBTVBfVE9fRURHRSk7CisgICAgY3R4LnRleFBhcmFtZXRlcmkoY3R4LlRF
WFRVUkVfMkQsIGN0eC5URVhUVVJFX1dSQVBfVCwgY3R4LkNMQU1QX1RPX0VER0UpOworICAgIGN0
eC5nZW5lcmF0ZU1pcG1hcChjdHguVEVYVFVSRV8yRCkKKyAgICBjdHguYmluZFRleHR1cmUoY3R4
LlRFWFRVUkVfMkQsIDApOworfQorCisvLworLy8gRnJhbWVyYXRlIG9iamVjdAorLy8KKy8vIFRo
aXMgb2JqZWN0IGtlZXBzIHRyYWNrIG9mIGZyYW1lcmF0ZSBhbmQgZGlzcGxheXMgaXQgYXMgdGhl
IGlubmVySFRNTCB0ZXh0IG9mIHRoZSAKKy8vIEhUTUwgZWxlbWVudCB3aXRoIHRoZSBwYXNzZWQg
aWQuIE9uY2UgY3JlYXRlZCB5b3UgY2FsbCBzbmFwc2hvdCBhdCB0aGUgZW5kCisvLyBvZiBldmVy
eSByZW5kZXJpbmcgY3ljbGUuIEV2ZXJ5IDUwMG1zIHRoZSBmcmFtZXJhdGUgaXMgdXBkYXRlZCBp
biB0aGUgSFRNTCBlbGVtZW50LgorLy8KK0ZyYW1lcmF0ZSA9IGZ1bmN0aW9uKGlkKQoreworICAg
IHRoaXMubnVtRnJhbWVyYXRlcyA9IDEwOworICAgIHRoaXMuZnJhbWVyYXRlVXBkYXRlSW50ZXJ2
YWwgPSA1MDA7CisgICAgdGhpcy5pZCA9IGlkOworCisgICAgdGhpcy5yZW5kZXJUaW1lID0gLTE7
CisgICAgdGhpcy5mcmFtZXJhdGVzID0gWyBdOworICAgIHNlbGYgPSB0aGlzOworICAgIHZhciBm
ciA9IGZ1bmN0aW9uKCkgeyBzZWxmLnVwZGF0ZUZyYW1lcmF0ZSgpIH0KKyAgICBzZXRJbnRlcnZh
bChmciwgdGhpcy5mcmFtZXJhdGVVcGRhdGVJbnRlcnZhbCk7Cit9CisKK0ZyYW1lcmF0ZS5wcm90
b3R5cGUudXBkYXRlRnJhbWVyYXRlID0gZnVuY3Rpb24oKQoreworICAgIHZhciB0b3QgPSAwOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mcmFtZXJhdGVzLmxlbmd0aDsgKytpKQorICAg
ICAgICB0b3QgKz0gdGhpcy5mcmFtZXJhdGVzW2ldOworICAgICAgICAKKyAgICB2YXIgZnJhbWVy
YXRlID0gdG90IC8gdGhpcy5mcmFtZXJhdGVzLmxlbmd0aDsKKyAgICBmcmFtZXJhdGUgPSBNYXRo
LnJvdW5kKGZyYW1lcmF0ZSk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pZCku
aW5uZXJIVE1MID0gIkZyYW1lcmF0ZToiK2ZyYW1lcmF0ZSsiZnBzIjsKK30KKworRnJhbWVyYXRl
LnByb3RvdHlwZS5zbmFwc2hvdCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBpZiAodGhpcy5yZW5kZXJU
aW1lIDwgMCkKKyAgICAgICAgdGhpcy5yZW5kZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7
CisgICAgZWxzZSB7CisgICAgICAgIHZhciBuZXdUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7
CisgICAgICAgIHZhciB0ID0gbmV3VGltZSAtIHRoaXMucmVuZGVyVGltZTsKKyAgICAgICAgdmFy
IGZyYW1lcmF0ZSA9IDEwMDAvdDsKKyAgICAgICAgdGhpcy5mcmFtZXJhdGVzLnB1c2goZnJhbWVy
YXRlKTsKKyAgICAgICAgd2hpbGUgKHRoaXMuZnJhbWVyYXRlcy5sZW5ndGggPiB0aGlzLm51bUZy
YW1lcmF0ZXMpCisgICAgICAgICAgICB0aGlzLmZyYW1lcmF0ZXMuc2hpZnQoKTsKKyAgICAgICAg
dGhpcy5yZW5kZXJUaW1lID0gbmV3VGltZTsKKyAgICB9Cit9CisK
</data>
<flag name="review"
          id="22369"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>