<?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>14125</bug_id>
          
          <creation_ts>2007-06-13 14:06:51 -0700</creation_ts>
          <short_desc>KCanvasRenderingStyle should be removed</short_desc>
          <delta_ts>2007-06-13 16:26:12 -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>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rob Buis">rwlbuis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>7654</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-06-13 14:06:51 -0700</bug_when>
    <thetext>This file is left from the kcanvas days, but shrunk a lot and is not really needed IMHO. Patch coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7647</commentid>
    <comment_count>1</comment_count>
      <attachid>15007</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-06-13 14:17:05 -0700</bug_when>
    <thetext>Created attachment 15007
First attempt

A bit hard to move some methods, let me know whether I picked the best spots.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7635</commentid>
    <comment_count>2</comment_count>
      <attachid>15007</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-06-13 16:15:07 -0700</bug_when>
    <thetext>Comment on attachment 15007
First attempt

This is OK.  It&apos;s a bit odd to have constructor functions on the SVGPaintServer class, but it&apos;s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7628</commentid>
    <comment_count>3</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-06-13 16:26:12 -0700</bug_when>
    <thetext>Landed in r23509.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15007</attachid>
            <date>2007-06-13 14:17:05 -0700</date>
            <delta_ts>2007-06-13 16:15:07 -0700</delta_ts>
            <desc>First attempt</desc>
            <filename>14125.diff</filename>
            <type>text/plain</type>
            <size>52023</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzUwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDctMDYtMTMgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTI1CisgICAgICAgIEtDYW52YXNSZW5kZXJp
bmdTdHlsZSBzaG91bGQgYmUgcmVtb3ZlZAorCisgICAgICAgIE1vdmUgdGhlIGZ1bmN0aW9uYWxp
dHkgdG8gbW9yZSBhcHByb3ByaWF0ZSBjbGFzc2VzLgorCisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGtzdmcyL2Nzcy9TVkdSZW5kZXJTdHls
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9M
ZW5ndGgpOgorICAgICAgICAqIGtzdmcyL2Nzcy9TVkdSZW5kZXJTdHlsZS5oOgorICAgICAgICAq
IGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBrc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzaGFyZWRTb2xpZFBhaW50U2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50
U2VydmVyOjpmaWxsUGFpbnRTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2
ZXI6OnN0cm9rZVBhaW50U2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmRhc2hBcnJheUZyb21S
ZW5kZXJpbmdTdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50
U2VydmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL0NnU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvUmVuZGVyUGF0aENnLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclBhdGg6OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpmaWxsQ29u
dGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEFuZFN0cm9rZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUGF0aDo6ZHJhd01hcmtlcnNJZk5lZWRlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTVkdUU3Bhbi5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6cmVsYXRpdmVCQm94KToKKyAgICAgICAg
KiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9TVkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJ
bmxpbmVCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnBh
aW50SW5saW5lQm94ZXMpOgorCiAyMDA3LTA2LTEyICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYy4KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjA5OCkKKysr
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xODk5LDggKzE4OTksNiBAQAogCQlBODhBRDQwNDA5NTI0OEYwMDAxREQxOTYgLyogU1ZH
UmVuZGVyU3R5bGVEZWZzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEMwRjcwMjA4OTcwMUYxMDBCQTUxMTQgLyogU1ZHUmVuZGVyU3R5bGVEZWZzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTg4QUQ0
MEEwOTUyNDhGMDAwMUREMTk2IC8qIFNWR1pvb21FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRjdGNTA4OTcwMUYzMDBCQTUxMTQgLyog
U1ZHWm9vbUV2ZW50LmNwcCAqLzsgfTsKIAkJQTg4QUQ0MEIwOTUyNDhGMDAwMUREMTk2IC8qIFNW
R1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThDMEY3RjYwODk3MDFGMzAwQkE1MTE0IC8qIFNWR1pvb21FdmVudC5oICovOyB9OwotCQlB
ODhBRDQwQzA5NTI0OEYwMDAxREQxOTYgLyogS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGNkVCMDg5NzAx
RjEwMEJBNTExNCAvKiBLQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwICovOyB9OwotCQlBODhBRDQw
RDA5NTI0OEYwMDAxREQxOTYgLyogS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRjZFQzA4OTcwMUYxMDBCQTUx
MTQgLyogS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmggKi87IH07CiAJCUE4OEFENDBFMDk1MjQ4RjAw
MDFERDE5NiAvKiBUaW1lU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGNkVGMDg5NzAxRjEwMEJBNTExNCAvKiBUaW1lU2NoZWR1
bGVyLmNwcCAqLzsgfTsKIAkJQTg4QUQ0MEYwOTUyNDhGMDAwMUREMTk2IC8qIFRpbWVTY2hlZHVs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBG
NkYwMDg5NzAxRjEwMEJBNTExNCAvKiBUaW1lU2NoZWR1bGVyLmggKi87IH07CiAJCUE4OEFENDEx
MDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRjdGRjA4OTcwMUYzMDBCQTUxMTQgLyogU1ZH
QUVsZW1lbnQuY3BwICovOyB9OwpAQCAtMjI1OCw2ICsyMjU2LDggQEAKIAkJQUEwOTcyQ0QwQjY5
NDdBODAwQTcwNUU5IC8qIFNWR0lubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMDk3MkNCMEI2OTQ3QTgwMEE3MDVFOSAvKiBTVkdJ
bmxpbmVUZXh0Qm94LmggKi87IH07CiAJCUFBMjFFQ0NBMEFCRjBGQkEwMDJCODM0QyAvKiBDU1ND
dXJzb3JJbWFnZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFBMDk3OEVEMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVl
LmNwcCAqLzsgfTsKIAkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdl
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFB
MDk3OEVFMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUEzMUI1QjQwQzFERkQx
MDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUEzMUI1QjIwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNW
R1Jvb3QuY3BwICovOyB9OworCQlBQTMxQjVCNTBDMURGRDEwMDBBRTcwODMgLyogUmVuZGVyU1ZH
Um9vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEz
MUI1QjMwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuaCAqLzsgfTsKIAkJQUE0QzNB
NzYwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyog
U3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIFN0
eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUE0QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oICovOyB9OwogCQlB
QTg4MkIyRjBCNEVGNUVCMDA2RDI2RDEgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBODgyQjJEMEI0RUY1
RUIwMDZEMjZEMSAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwICovOyB9OwpAQCAtNDk4Nyw4
ICs0OTg3LDYgQEAKIAkJQTg5MERGMUUwOTMwOTc0ODAwNTEzRjg4IC8qIFNWR1N0eWxlZExvY2F0
YWJsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4OTk0MzI2MEI0
MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCaXRtYXBJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODk5
NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBOEMwRjZFQjA4OTcwMUYxMDBCQTUxMTQgLyogS0NhbnZhc1JlbmRlcmluZ1N0
eWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUE4QzBGNkVDMDg5NzAxRjEwMEJBNTEx
NCAvKiBLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGNkVG
MDg5NzAxRjEwMEJBNTExNCAvKiBUaW1lU2NoZWR1bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZVNjaGVkdWxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlB
OEMwRjZGMDA4OTcwMUYxMDBCQTUxMTQgLyogVGltZVNjaGVkdWxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVTY2hlZHVsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4
QzBGNkY0MDg5NzAxRjEwMEJBNTExNCAvKiBDU1NQcm9wZXJ0eU5hbWVzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ1NTUHJvcGVydHlOYW1lcy5pbjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC01MzUy
LDYgKzUzNTAsOCBAQAogCQlBQTA5NzJDQjBCNjk0N0E4MDBBNzA1RTkgLyogU1ZHSW5saW5lVGV4
dEJveC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW5saW5lVGV4dEJv
eC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTA5NzhFRDBBQkFBNkUxMDA4NzQ0
ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFBMDk3OEVFMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDdXJzb3JJbWFnZVZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBMzFCNUIyMEMxREZEMTAwMEFFNzA4
MyAvKiBSZW5kZXJTVkdSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJTVkdSb290LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUEz
MUI1QjMwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUE0QzNBNzQwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUE0QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8qIFN0
eWxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBODgyQjJEMEI0RUY1RUIwMDZE
MjZEMSAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04MzA1LDggKzgzMDUsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJ
QUE4ODJCMkQwQjRFRjVFQjAwNkQyNkQxIC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgKi8s
CiAJCQkJQUE4ODJCMkUwQjRFRjVFQjAwNkQyNkQxIC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5o
ICovLAotCQkJCUE4QzBGNkVCMDg5NzAxRjEwMEJBNTExNCAvKiBLQ2FudmFzUmVuZGVyaW5nU3R5
bGUuY3BwICovLAotCQkJCUE4QzBGNkVDMDg5NzAxRjEwMEJBNTExNCAvKiBLQ2FudmFzUmVuZGVy
aW5nU3R5bGUuaCAqLywKIAkJCQlBOEMwRjZFRjA4OTcwMUYxMDBCQTUxMTQgLyogVGltZVNjaGVk
dWxlci5jcHAgKi8sCiAJCQkJQThDMEY2RjAwODk3MDFGMTAwQkE1MTE0IC8qIFRpbWVTY2hlZHVs
ZXIuaCAqLywKIAkJCQlBOERGNUZBMjA5ODQ2MEFBMDA1Mjk4MUIgLyogU1ZHRG9jdW1lbnRFeHRl
bnNpb25zLmNwcCAqLywKQEAgLTk0ODUsNiArOTQ4Myw4IEBACiAJCUY1MjNEMkYzMDJERTQ0M0Iw
MTg2MzVDQSAvKiByZW5kZXJpbmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCUFBMzFCNUIyMEMxREZEMTAwMEFFNzA4MyAvKiBSZW5kZXJTVkdSb290LmNw
cCAqLywKKwkJCQlBQTMxQjVCMzBDMURGRDEwMDBBRTcwODMgLyogUmVuZGVyU1ZHUm9vdC5oICov
LAogCQkJCUE4Q0ZGMDRCMEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQuY3BwICov
LAogCQkJCUE4Q0ZGMDQ5MEExNTRGMDkwMDBBNDIzNCAvKiBBdXRvVGFibGVMYXlvdXQuaCAqLywK
IAkJCQlCQ0VBNDgxMzA5N0Q5MzAyMDA5NEM5RTQgLyogYmlkaS5jcHAgKi8sCkBAIC05ODY0LDcg
Kzk4NjQsNiBAQAogCQkJCUE4OEFENDAyMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHls
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQ0MDQwOTUyNDhGMDAwMUREMTk2IC8qIFNWR1Jl
bmRlclN0eWxlRGVmcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQ0MEIwOTUyNDhGMDAwMURE
MTk2IC8qIFNWR1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTg4QUQ0MEQwOTUyNDhG
MDAwMUREMTk2IC8qIEtDYW52YXNSZW5kZXJpbmdTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTg4QUQ0MEYwOTUyNDhGMDAwMUREMTk2IC8qIFRpbWVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4OEFENDEyMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdBRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTg4QUQ0MTYwOTUyNDhGMDAwMUREMTk2IC8qIFNWR0FuaW1hdGVDb2xvckVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTEzMDAsNiArMTEyOTksNyBAQAogCQkJCTJEOTA2
NjA3MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRDOUEyOUEwQkYwNERCNjAwRDczNEE4IC8qIFdlYlNjcmlwdE9iamVjdFBlbmRpbmdQdWJsaWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4RjRGQjk0MEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5k
ZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBQTMxQjVCNTBDMURGRDEwMDBBRTcwODMg
LyogUmVuZGVyU1ZHUm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMTUwNSw3ICsxMTUwNSw2IEBA
CiAJCQkJQTg4QUQ0MDEwOTUyNDhGMDAwMUREMTk2IC8qIFNWR1JlbmRlclN0eWxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4OEFENDAzMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHls
ZURlZnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQ0MEEwOTUyNDhGMDAwMUREMTk2IC8q
IFNWR1pvb21FdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODhBRDQwQzA5NTI0OEYwMDAx
REQxOTYgLyogS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
OEFENDBFMDk1MjQ4RjAwMDFERDE5NiAvKiBUaW1lU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4OEFENDExMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdBRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODhBRDQxNTA5NTI0OEYwMDAxREQxOTYgLyogU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEyNjc3LDYgKzEyNjc2LDcgQEAKIAkJCQk0
QThDOTZFQjBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUFBQ0YxNDREMEJFQzFFRjAwMDgyNzk4MiAvKiBUZXh0QnJlYWtJdGVy
YXRvckludGVybmFsSUNVTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThGNEZCOTYwQzE2OUU4
NTAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUEz
MUI1QjQwQzFERkQxMDAwQUU3MDgzIC8qIFJlbmRlclNWR1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CkluZGV4OiBXZWJDb3JlL2tzdmcyL2Nzcy9TVkdSZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9jc3MvU1ZHUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiAyMjA5OCkK
KysrIFdlYkNvcmUva3N2ZzIvY3NzL1NWR1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsMTIgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCiAKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Zh
bHVlTGlzdC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFNWR1JlbmRlclN0eWxlICpTVkdSZW5kZXJTdHlsZTo6c19kZWZhdWx0U3R5bGUgPSAw
OwpAQCAtMTE1LDYgKzEyMSwyNiBAQCB2b2lkIFNWR1JlbmRlclN0eWxlOjppbmhlcml0RnJvbShj
b25zdCBTCiAgICAgc3ZnX2luaGVyaXRlZF9mbGFncyA9IHN2Z0luaGVyaXRQYXJlbnQtPnN2Z19p
bmhlcml0ZWRfZmxhZ3M7CiB9CiAKK2RvdWJsZSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZl
VG9MZW5ndGgoY29uc3QgUmVuZGVyT2JqZWN0KiBpdGVtLCBDU1NWYWx1ZSAqdmFsdWUsIGRvdWJs
ZSBkZWZhdWx0VmFsdWUpCit7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworCisgICAgdW5zaWduZWQgc2hv
cnQgY3NzVHlwZSA9IChwcmltaXRpdmUgPyBwcmltaXRpdmUtPnByaW1pdGl2ZVR5cGUoKSA6ICh1
bnNpZ25lZCBzaG9ydCkgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOKTsKKyAgICBpZiAo
IShjc3NUeXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOICYmIGNzc1R5cGUgPD0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQykpCisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7
CisKKyAgICBpZiAoY3NzVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
IHsKKyAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZEVsZW1lbnQqPihpdGVtLT5lbGVtZW50KCkpOworICAgICAgICBTVkdFbGVtZW50KiB2aWV3
cG9ydEVsZW1lbnQgPSAoZWxlbWVudCA/IGVsZW1lbnQtPnZpZXdwb3J0RWxlbWVudCgpIDogMCk7
CisgICAgICAgIGlmICh2aWV3cG9ydEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGRvdWJsZSByZXN1
bHQgPSBwcmltaXRpdmUtPmdldEZsb2F0VmFsdWUoKSAvIDEwMC4wOworICAgICAgICAgICAgcmV0
dXJuIFNWR0xlbmd0aDo6UGVyY2VudGFnZU9mVmlld3BvcnQocmVzdWx0LCBlbGVtZW50LCBMZW5n
dGhNb2RlT3RoZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHByaW1pdGl2ZS0+
Y29tcHV0ZUxlbmd0aEZsb2F0KGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihpdGVtLT5zdHlsZSgp
KSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL2tzdmcy
L2Nzcy9TVkdSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvY3NzL1NW
R1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDIyMDk4KQorKysgV2ViQ29yZS9rc3ZnMi9jc3MvU1ZH
UmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQCB0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAg
Y2xhc3MgUmVuZGVyT2JqZWN0OworICAgIGNsYXNzIFJlbmRlclN0eWxlOworCiAgICAgY2xhc3Mg
U1ZHUmVuZGVyU3R5bGUgOiBwdWJsaWMgU2hhcmVkPFNWR1JlbmRlclN0eWxlPiB7ICAgIAogICAg
IHB1YmxpYzoKICAgICAgICAgU1ZHUmVuZGVyU3R5bGUoKTsKQEAgLTEwMyw2ICsxMDYsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaGFzU3Ryb2tlKCkgY29uc3QgeyByZXR1
cm4gKHN0cm9rZVBhaW50KCktPnBhaW50VHlwZSgpICE9IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBF
X05PTkUpOyB9CiAgICAgICAgIGJvb2wgaGFzRmlsbCgpIGNvbnN0IHsgcmV0dXJuIChmaWxsUGFp
bnQoKS0+cGFpbnRUeXBlKCkgIT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfTk9ORSk7IH0KIAor
ICAgICAgICBzdGF0aWMgZG91YmxlIGNzc1ByaW1pdGl2ZVRvTGVuZ3RoKGNvbnN0IFJlbmRlck9i
amVjdCosIENTU1ZhbHVlKiwgZG91YmxlIGRlZmF1bHRWYWx1ZSA9IDAuMCk7CisKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIC8vIGluaGVyaXQKICAgICAgICAgc3RydWN0IEluaGVyaXRlZEZsYWdz
IHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3Bw
CShyZXZpc2lvbiAyMzUwNykKKysrIFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5n
U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDIwMDYgQWxleGFuZGVyIEtlbGxldHQgPGx5
cGFub3ZAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0qLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIktDYW52
YXNSZW5kZXJpbmdTdHlsZS5oIgotCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5k
ZXJQYXRoLmgiCi0jaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudC5oIgotI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIKLSNpbmNsdWRl
ICJTVkdVUklSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1
ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFNWR1BhaW50U2VydmVyU29saWQqIHNoYXJl
ZFNvbGlkUGFpbnRTZXJ2ZXIoKQotewotICAgIHN0YXRpYyBTVkdQYWludFNlcnZlclNvbGlkKiBf
c2hhcmVkU29saWRQYWludFNlcnZlciA9IDA7Ci0gICAgaWYgKCFfc2hhcmVkU29saWRQYWludFNl
cnZlcikKLSAgICAgICAgX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIgPSBuZXcgU1ZHUGFpbnRTZXJ2
ZXJTb2xpZCgpOwotICAgIHJldHVybiBfc2hhcmVkU29saWRQYWludFNlcnZlcjsKLX0KLQotU1ZH
UGFpbnRTZXJ2ZXIqIEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBpdGVtKQotewotICAgIGlmICgh
c3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBT
VkdQYWludCogZmlsbCA9IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUGFpbnQoKTsKLQotICAgIFNW
R1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIgPSAwOwotICAgIGlmIChmaWxsLT5wYWludFR5
cGUoKSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUkkpIHsKLSAgICAgICAgQXRvbWljU3Ry
aW5nIGlkKFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KGZpbGwtPnVyaSgpKSk7Ci0gICAgICAg
IGZpbGxQYWludFNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChpdGVtLT5kb2N1bWVudCgpLCBp
ZCk7Ci0KLSAgICAgICAgU1ZHRWxlbWVudCogc3ZnRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0Vs
ZW1lbnQqPihpdGVtLT5lbGVtZW50KCkpOwotICAgICAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBz
dmdFbGVtZW50LT5kb2N1bWVudCgpICYmIHN2Z0VsZW1lbnQtPmlzU3R5bGVkKCkpOwotCi0gICAg
ICAgIGlmIChpdGVtLT5pc1JlbmRlclBhdGgoKSAmJiBmaWxsUGFpbnRTZXJ2ZXIpCi0gICAgICAg
ICAgICBmaWxsUGFpbnRTZXJ2ZXItPmFkZENsaWVudChzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVt
ZW50Kj4oc3ZnRWxlbWVudCkpOwotICAgICAgICBlbHNlIGlmICghZmlsbFBhaW50U2VydmVyKQot
ICAgICAgICAgICAgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LT5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihz
dmdFbGVtZW50KSk7IAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbGxQYWludFNlcnZlciA9IHNo
YXJlZFNvbGlkUGFpbnRTZXJ2ZXIoKTsKLSAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogZmls
bFBhaW50U2VydmVyU29saWQgPSBzdGF0aWNfY2FzdDxTVkdQYWludFNlcnZlclNvbGlkKj4oZmls
bFBhaW50U2VydmVyKTsKLSAgICAgICAgaWYgKGZpbGwtPnBhaW50VHlwZSgpID09IFNWR1BhaW50
OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUikKLSAgICAgICAgICAgIGZpbGxQYWludFNlcnZl
clNvbGlkLT5zZXRDb2xvcihzdHlsZS0+Y29sb3IoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGZpbGxQYWludFNlcnZlclNvbGlkLT5zZXRDb2xvcihmaWxsLT5jb2xvcigpKTsKLSAgICAg
ICAgLy8gRklYTUU6IElkZWFsbHkgaW52YWxpZCBjb2xvcnMgd291bGQgbmV2ZXIgZ2V0IHNldCBv
biB0aGUgUmVuZGVyU3R5bGUgYW5kIHRoaXMgY291bGQgdHVybiBpbnRvIGFuIEFTU0VSVAotICAg
ICAgICBpZiAoIWZpbGxQYWludFNlcnZlclNvbGlkLT5jb2xvcigpLmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgIGZpbGxQYWludFNlcnZlciA9IDA7Ci0gICAgfQotICAgIGlmICghZmlsbFBhaW50U2Vy
dmVyKSB7Ci0gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgKGJsYWNrKSwgc2VlIGJ1ZyAxMTAxNwot
ICAgICAgICBmaWxsUGFpbnRTZXJ2ZXIgPSBzaGFyZWRTb2xpZFBhaW50U2VydmVyKCk7Ci0gICAg
ICAgIHN0YXRpY19jYXN0PFNWR1BhaW50U2VydmVyU29saWQqPihmaWxsUGFpbnRTZXJ2ZXIpLT5z
ZXRDb2xvcihDb2xvcjo6YmxhY2spOwotICAgIH0KLSAgICByZXR1cm4gZmlsbFBhaW50U2VydmVy
OwotfQotCi1TVkdQYWludFNlcnZlciogS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNl
cnZlcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVjdCogaXRlbSkK
LXsKLSAgICBpZiAoIXN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBTVkdQYWludCogc3Ryb2tlID0gc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9r
ZVBhaW50KCk7Ci0KLSAgICBTVkdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSAwOwot
ICAgIGlmIChzdHJva2UtPnBhaW50VHlwZSgpID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX1VS
SSkgewotICAgICAgICBBdG9taWNTdHJpbmcgaWQoU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQo
c3Ryb2tlLT51cmkoKSkpOwotICAgICAgICBzdHJva2VQYWludFNlcnZlciA9IGdldFBhaW50U2Vy
dmVyQnlJZChpdGVtLT5kb2N1bWVudCgpLCBpZCk7Ci0KLSAgICAgICAgU1ZHRWxlbWVudCogc3Zn
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihpdGVtLT5lbGVtZW50KCkpOwotICAg
ICAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpICYmIHN2Z0Vs
ZW1lbnQtPmlzU3R5bGVkKCkpOwotIAotICAgICAgICBpZiAoaXRlbS0+aXNSZW5kZXJQYXRoKCkg
JiYgc3Ryb2tlUGFpbnRTZXJ2ZXIpCi0gICAgICAgICAgICBzdHJva2VQYWludFNlcnZlci0+YWRk
Q2xpZW50KHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KSk7Ci0gICAg
ICAgIGVsc2UgaWYgKCFzdHJva2VQYWludFNlcnZlcikKLSAgICAgICAgICAgIHN2Z0VsZW1lbnQt
PmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+YWRkUGVuZGluZ1Jlc291cmNlKGlk
LCBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCkpOyAKLSAgICB9IGVs
c2UgewotICAgICAgICBzdHJva2VQYWludFNlcnZlciA9IHNoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIo
KTsKLSAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogc3Ryb2tlUGFpbnRTZXJ2ZXJTb2xpZCA9
IHN0YXRpY19jYXN0PFNWR1BhaW50U2VydmVyU29saWQqPihzdHJva2VQYWludFNlcnZlcik7Ci0g
ICAgICAgIGlmIChzdHJva2UtPnBhaW50VHlwZSgpID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBF
X0NVUlJFTlRDT0xPUikKLSAgICAgICAgICAgIHN0cm9rZVBhaW50U2VydmVyU29saWQtPnNldENv
bG9yKHN0eWxlLT5jb2xvcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3Ryb2tlUGFp
bnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3Ioc3Ryb2tlLT5jb2xvcigpKTsKLSAgICAgICAgLy8gRklY
TUU6IElkZWFsbHkgaW52YWxpZCBjb2xvcnMgd291bGQgbmV2ZXIgZ2V0IHNldCBvbiB0aGUgUmVu
ZGVyU3R5bGUgYW5kIHRoaXMgY291bGQgdHVybiBpbnRvIGFuIEFTU0VSVAotICAgICAgICBpZiAo
IXN0cm9rZVBhaW50U2VydmVyU29saWQtPmNvbG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAgICAg
c3Ryb2tlUGFpbnRTZXJ2ZXIgPSAwOwotICAgIH0KLQotICAgIHJldHVybiBzdHJva2VQYWludFNl
cnZlcjsKLX0KLQotZG91YmxlIEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5n
dGgoY29uc3QgUmVuZGVyT2JqZWN0KiBpdGVtLCBDU1NWYWx1ZSAqdmFsdWUsIGRvdWJsZSBkZWZh
dWx0VmFsdWUpCi17Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotCi0gICAgdW5zaWduZWQgc2hvcnQgY3Nz
VHlwZSA9IChwcmltaXRpdmUgPyBwcmltaXRpdmUtPnByaW1pdGl2ZVR5cGUoKSA6ICh1bnNpZ25l
ZCBzaG9ydCkgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOKTsKLSAgICBpZiAoIShjc3NU
eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOICYmIGNzc1R5cGUgPD0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QQykpCi0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7Ci0KLSAg
ICBpZiAoY3NzVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpIHsKLSAg
ICAgICAgU1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVs
ZW1lbnQqPihpdGVtLT5lbGVtZW50KCkpOwotICAgICAgICBTVkdFbGVtZW50KiB2aWV3cG9ydEVs
ZW1lbnQgPSAoZWxlbWVudCA/IGVsZW1lbnQtPnZpZXdwb3J0RWxlbWVudCgpIDogMCk7Ci0gICAg
ICAgIGlmICh2aWV3cG9ydEVsZW1lbnQpIHsKLSAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBw
cmltaXRpdmUtPmdldEZsb2F0VmFsdWUoKSAvIDEwMC4wOwotICAgICAgICAgICAgcmV0dXJuIFNW
R0xlbmd0aDo6UGVyY2VudGFnZU9mVmlld3BvcnQocmVzdWx0LCBlbGVtZW50LCBMZW5ndGhNb2Rl
T3RoZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHByaW1pdGl2ZS0+Y29tcHV0
ZUxlbmd0aEZsb2F0KGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihpdGVtLT5zdHlsZSgpKSk7Ci19
Ci0KLUtDRGFzaEFycmF5IEtTVkdQYWludGVyRmFjdG9yeTo6ZGFzaEFycmF5RnJvbVJlbmRlcmlu
Z1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICBLQ0Rhc2hBcnJheSBhcnJh
eTsKLSAgICAKLSAgICBDU1NWYWx1ZUxpc3QqIGRhc2hlcyA9IHN0eWxlLT5zdmdTdHlsZSgpLT5z
dHJva2VEYXNoQXJyYXkoKTsKLSAgICBpZiAoZGFzaGVzKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBkYXNoID0gMDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsZW4gPSBkYXNoZXMtPmxl
bmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBsZW47IGkrKykg
ewotICAgICAgICAgICAgZGFzaCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oZGFz
aGVzLT5pdGVtKGkpKTsKLSAgICAgICAgICAgIGlmICghZGFzaCkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgYXJyYXkuYXBwZW5kKChmbG9hdCkgZGFzaC0+Y29tcHV0
ZUxlbmd0aEZsb2F0KGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZSkpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBhcnJheTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNWRykKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9taXNjL0tDYW52
YXNSZW5kZXJpbmdTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuaAkocmV2aXNpb24gMjM1MDcpCisrKyBXZWJDb3JlL2tzdmcyL21p
c2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA2ICAgICAgIEFsZXhh
bmRlciBLZWxsZXR0IDxseXBhbm92QGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIHByb2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICAgIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgotKi8KLQotI2lmbmRlZiBLQ2FudmFzUmVuZGVyaW5nU3R5bGVfaAotI2RlZmlu
ZSBLQ2FudmFzUmVuZGVyaW5nU3R5bGVfaAotCi0jaWYgRU5BQkxFKFNWRykKLQotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotI2lmIFBMQVRGT1JNKENHKQotI2luY2x1ZGUgIkNnU3VwcG9ydC5o
IgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gU3BlY2lhbCB0eXBlcwotI2lm
IFBMQVRGT1JNKENHKQotdHlwZWRlZiBWZWN0b3I8Q0dGbG9hdD4gS0NEYXNoQXJyYXk7Ci0jZWxz
ZQotdHlwZWRlZiBWZWN0b3I8ZmxvYXQ+IEtDRGFzaEFycmF5OwotI2VuZGlmCi0KLSAgICBjbGFz
cyBDU1NWYWx1ZTsKLSAgICBjbGFzcyBTVkdQYWludFNlcnZlcjsKLSAgICBjbGFzcyBSZW5kZXJT
dHlsZTsKLSAgICBjbGFzcyBSZW5kZXJPYmplY3Q7Ci0KLSAgICBjbGFzcyBLU1ZHUGFpbnRlckZh
Y3RvcnkgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFNWR1BhaW50U2VydmVyKiBzdHJv
a2VQYWludFNlcnZlcihjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOwot
ICAgICAgICBzdGF0aWMgU1ZHUGFpbnRTZXJ2ZXIqIGZpbGxQYWludFNlcnZlcihjb25zdCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOwotCi0gICAgICAgIC8vIEhlbHBlcnMKLSAg
ICAgICAgc3RhdGljIGRvdWJsZSBjc3NQcmltaXRpdmVUb0xlbmd0aChjb25zdCBSZW5kZXJPYmpl
Y3QqLCBDU1NWYWx1ZSosIGRvdWJsZSBkZWZhdWx0VmFsdWUgPSAwLjApOwotICAgICAgICBzdGF0
aWMgS0NEYXNoQXJyYXkgZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKik7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFNWRykKLSNlbmRpZiAvLyBLQ2FudmFzUmVuZGVyaW5nU3R5bGVfaAotCi0vLyB2aW06dHM9
NDpub2V0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFp
bnRTZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMjA5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3ZnL1NWR1BhaW50U2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsMTIg
QEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUg
IlNWR1BhaW50U2VydmVyU29saWQuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZH
UGFpbnRTZXJ2ZXI6OlNWR1BhaW50U2VydmVyKCkKQEAgLTUyLDYgKzU4LDEwNiBAQCBTVkdQYWlu
dFNlcnZlciogZ2V0UGFpbnRTZXJ2ZXJCeUlkKERvY3VtCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0
YXRpYyBTVkdQYWludFNlcnZlclNvbGlkKiBzaGFyZWRTb2xpZFBhaW50U2VydmVyKCkKK3sKKyAg
ICBzdGF0aWMgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIgPSAw
OworICAgIGlmICghX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIpCisgICAgICAgIF9zaGFyZWRTb2xp
ZFBhaW50U2VydmVyID0gbmV3IFNWR1BhaW50U2VydmVyU29saWQoKTsKKyAgICByZXR1cm4gX3No
YXJlZFNvbGlkUGFpbnRTZXJ2ZXI7Cit9CisKK1NWR1BhaW50U2VydmVyKiBTVkdQYWludFNlcnZl
cjo6ZmlsbFBhaW50U2VydmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVy
T2JqZWN0KiBpdGVtKQoreworICAgIGlmICghc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTVkdQYWludCogZmlsbCA9IHN0eWxlLT5zdmdTdHls
ZSgpLT5maWxsUGFpbnQoKTsKKworICAgIFNWR1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIg
PSAwOworICAgIGlmIChmaWxsLT5wYWludFR5cGUoKSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQ
RV9VUkkpIHsKKyAgICAgICAgQXRvbWljU3RyaW5nIGlkKFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFy
Z2V0KGZpbGwtPnVyaSgpKSk7CisgICAgICAgIGZpbGxQYWludFNlcnZlciA9IGdldFBhaW50U2Vy
dmVyQnlJZChpdGVtLT5kb2N1bWVudCgpLCBpZCk7CisKKyAgICAgICAgU1ZHRWxlbWVudCogc3Zn
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihpdGVtLT5lbGVtZW50KCkpOworICAg
ICAgICBBU1NFUlQoc3ZnRWxlbWVudCAmJiBzdmdFbGVtZW50LT5kb2N1bWVudCgpICYmIHN2Z0Vs
ZW1lbnQtPmlzU3R5bGVkKCkpOworCisgICAgICAgIGlmIChpdGVtLT5pc1JlbmRlclBhdGgoKSAm
JiBmaWxsUGFpbnRTZXJ2ZXIpCisgICAgICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPmFkZENsaWVu
dChzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oc3ZnRWxlbWVudCkpOworICAgICAgICBl
bHNlIGlmICghZmlsbFBhaW50U2VydmVyKQorICAgICAgICAgICAgc3ZnRWxlbWVudC0+ZG9jdW1l
bnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHN0YXRp
Y19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihzdmdFbGVtZW50KSk7IAorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGZpbGxQYWludFNlcnZlciA9IHNoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIoKTsKKyAgICAg
ICAgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogZmlsbFBhaW50U2VydmVyU29saWQgPSBzdGF0aWNfY2Fz
dDxTVkdQYWludFNlcnZlclNvbGlkKj4oZmlsbFBhaW50U2VydmVyKTsKKyAgICAgICAgaWYgKGZp
bGwtPnBhaW50VHlwZSgpID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUikK
KyAgICAgICAgICAgIGZpbGxQYWludFNlcnZlclNvbGlkLT5zZXRDb2xvcihzdHlsZS0+Y29sb3Io
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZpbGxQYWludFNlcnZlclNvbGlkLT5zZXRD
b2xvcihmaWxsLT5jb2xvcigpKTsKKyAgICAgICAgLy8gRklYTUU6IElkZWFsbHkgaW52YWxpZCBj
b2xvcnMgd291bGQgbmV2ZXIgZ2V0IHNldCBvbiB0aGUgUmVuZGVyU3R5bGUgYW5kIHRoaXMgY291
bGQgdHVybiBpbnRvIGFuIEFTU0VSVAorICAgICAgICBpZiAoIWZpbGxQYWludFNlcnZlclNvbGlk
LT5jb2xvcigpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGZpbGxQYWludFNlcnZlciA9IDA7Cisg
ICAgfQorICAgIGlmICghZmlsbFBhaW50U2VydmVyKSB7CisgICAgICAgIC8vIGRlZmF1bHQgdmFs
dWUgKGJsYWNrKSwgc2VlIGJ1ZyAxMTAxNworICAgICAgICBmaWxsUGFpbnRTZXJ2ZXIgPSBzaGFy
ZWRTb2xpZFBhaW50U2VydmVyKCk7CisgICAgICAgIHN0YXRpY19jYXN0PFNWR1BhaW50U2VydmVy
U29saWQqPihmaWxsUGFpbnRTZXJ2ZXIpLT5zZXRDb2xvcihDb2xvcjo6YmxhY2spOworICAgIH0K
KyAgICByZXR1cm4gZmlsbFBhaW50U2VydmVyOworfQorCitTVkdQYWludFNlcnZlciogU1ZHUGFp
bnRTZXJ2ZXI6OnN0cm9rZVBhaW50U2VydmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgUmVuZGVyT2JqZWN0KiBpdGVtKQoreworICAgIGlmICghc3R5bGUtPnN2Z1N0eWxlKCktPmhh
c1N0cm9rZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFNWR1BhaW50KiBzdHJva2UgPSBz
dHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlUGFpbnQoKTsKKworICAgIFNWR1BhaW50U2VydmVyKiBz
dHJva2VQYWludFNlcnZlciA9IDA7CisgICAgaWYgKHN0cm9rZS0+cGFpbnRUeXBlKCkgPT0gU1ZH
UGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJKSB7CisgICAgICAgIEF0b21pY1N0cmluZyBpZChTVkdV
UklSZWZlcmVuY2U6OmdldFRhcmdldChzdHJva2UtPnVyaSgpKSk7CisgICAgICAgIHN0cm9rZVBh
aW50U2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGl0ZW0tPmRvY3VtZW50KCksIGlkKTsKKwor
ICAgICAgICBTVkdFbGVtZW50KiBzdmdFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+
KGl0ZW0tPmVsZW1lbnQoKSk7CisgICAgICAgIEFTU0VSVChzdmdFbGVtZW50ICYmIHN2Z0VsZW1l
bnQtPmRvY3VtZW50KCkgJiYgc3ZnRWxlbWVudC0+aXNTdHlsZWQoKSk7CisgCisgICAgICAgIGlm
IChpdGVtLT5pc1JlbmRlclBhdGgoKSAmJiBzdHJva2VQYWludFNlcnZlcikKKyAgICAgICAgICAg
IHN0cm9rZVBhaW50U2VydmVyLT5hZGRDbGllbnQoc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVu
dCo+KHN2Z0VsZW1lbnQpKTsKKyAgICAgICAgZWxzZSBpZiAoIXN0cm9rZVBhaW50U2VydmVyKQor
ICAgICAgICAgICAgc3ZnRWxlbWVudC0+ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LT5hZGRQZW5kaW5nUmVzb3VyY2UoaWQsIHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihz
dmdFbGVtZW50KSk7IAorICAgIH0gZWxzZSB7CisgICAgICAgIHN0cm9rZVBhaW50U2VydmVyID0g
c2hhcmVkU29saWRQYWludFNlcnZlcigpOworICAgICAgICBTVkdQYWludFNlcnZlclNvbGlkKiBz
dHJva2VQYWludFNlcnZlclNvbGlkID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJTb2xpZCo+
KHN0cm9rZVBhaW50U2VydmVyKTsKKyAgICAgICAgaWYgKHN0cm9rZS0+cGFpbnRUeXBlKCkgPT0g
U1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfQ1VSUkVOVENPTE9SKQorICAgICAgICAgICAgc3Ryb2tl
UGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3Ioc3R5bGUtPmNvbG9yKCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzdHJva2VQYWludFNlcnZlclNvbGlkLT5zZXRDb2xvcihzdHJva2UtPmNv
bG9yKCkpOworICAgICAgICAvLyBGSVhNRTogSWRlYWxseSBpbnZhbGlkIGNvbG9ycyB3b3VsZCBu
ZXZlciBnZXQgc2V0IG9uIHRoZSBSZW5kZXJTdHlsZSBhbmQgdGhpcyBjb3VsZCB0dXJuIGludG8g
YW4gQVNTRVJUCisgICAgICAgIGlmICghc3Ryb2tlUGFpbnRTZXJ2ZXJTb2xpZC0+Y29sb3IoKS5p
c1ZhbGlkKCkpCisgICAgICAgICAgICBzdHJva2VQYWludFNlcnZlciA9IDA7CisgICAgfQorCisg
ICAgcmV0dXJuIHN0cm9rZVBhaW50U2VydmVyOworfQorCitEYXNoQXJyYXkgZGFzaEFycmF5RnJv
bVJlbmRlcmluZ1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBEYXNoQXJy
YXkgYXJyYXk7CisgICAgCisgICAgQ1NTVmFsdWVMaXN0KiBkYXNoZXMgPSBzdHlsZS0+c3ZnU3R5
bGUoKS0+c3Ryb2tlRGFzaEFycmF5KCk7CisgICAgaWYgKGRhc2hlcykgeworICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogZGFzaCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuID0gZGFz
aGVzLT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKKyAgICAgICAgICAgIGRhc2ggPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KGRhc2hlcy0+aXRlbShpKSk7CisgICAgICAgICAgICBpZiAoIWRhc2gpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGFycmF5LmFwcGVuZCgoZmxvYXQpIGRhc2gt
PmNvbXB1dGVMZW5ndGhGbG9hdChjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5bGUpKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9T
VkdQYWludFNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL1NWR1BhaW50U2VydmVyLmgJKHJldmlzaW9uIDIyMDk4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSAr
MzcsMTUgQEAKICNpZiBQTEFURk9STShRVCkKIGNsYXNzIFFQZW47CiAjZW5kaWYKLSAgICAKKwor
I2lmIFBMQVRGT1JNKENHKQorICAgIHR5cGVkZWYgVmVjdG9yPENHRmxvYXQ+IERhc2hBcnJheTsK
KyNlbHNlCisgICAgdHlwZWRlZiBWZWN0b3I8ZmxvYXQ+IERhc2hBcnJheTsKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKICAgICBlbnVtIFNWR1BhaW50U2VydmVyVHlwZSB7
CiAgICAgICAgIC8vIFBhaW50aW5nIG1vZGUKICAgICAgICAgU29saWRQYWludFNlcnZlciA9IDAs
CkBAIC03Niw2ICs4Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgc2V0dXAoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1Bh
aW50VGFyZ2V0VHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCA9IGZhbHNlKSBjb25zdCA9IDA7CiAK
KyAgICAgICAgc3RhdGljIFNWR1BhaW50U2VydmVyKiBzdHJva2VQYWludFNlcnZlcihjb25zdCBS
ZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlck9iamVjdCopOworICAgICAgICBzdGF0aWMgU1ZHUGFp
bnRTZXJ2ZXIqIGZpbGxQYWludFNlcnZlcihjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
ck9iamVjdCopOworCiAgICAgcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKENHKQogICAgICAgICB2
b2lkIHN0cm9rZVBhdGgoQ0dDb250ZXh0UmVmLCBjb25zdCBSZW5kZXJQYXRoKikgY29uc3Q7CkBA
IC05Myw2ICsxMDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBTVkdQYWludFNlcnZl
ciogZ2V0UGFpbnRTZXJ2ZXJCeUlkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAK
KyAgICBEYXNoQXJyYXkgZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSk7CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvQ2dTdXBwb3J0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9DZ1N1cHBvcnQuY3BwCShyZXZpc2lv
biAyMjA5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL0NnU3VwcG9ydC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJDZ1N1cHBvcnQu
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIktDYW52YXNSZW5k
ZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHUGFp
bnRTZXJ2ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCiAKQEAgLTUzLDE1ICs1MywxNSBAQCBDR0FmZmluZVRyYW5zZm9ybSBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2VNCiB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
YmplY3QpCiB7CiAgICAgLyogU2hvdWxkbid0IGFsbCB0aGVzZSBiZSBpbiB0aGUgc3Ryb2tlIHBh
aW50ZXI/ICovCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIEtTVkdQYWludGVy
RmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+
c3Ryb2tlV2lkdGgoKSwgMS4wKSk7CisgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQs
IFNWR1JlbmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VXaWR0aCgpLCAxLjApKTsKIAogICAgIENHQ29udGV4dFNldExpbmVDYXAo
Y29udGV4dCwgQ0dMaW5lQ2FwRnJvbUtDKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpKSk7
CiAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwgQ0dMaW5lSm9pbkZyb21LQyhzdHls
ZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxlKCkpKTsKIAogICAgIENHQ29udGV4dFNldE1pdGVyTGlt
aXQoY29udGV4dCwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZU1pdGVyTGltaXQoKSk7CiAKLSAg
ICBjb25zdCBLQ0Rhc2hBcnJheSYgZGFzaGVzID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpkYXNoQXJy
YXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUpOwotICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gS1NW
R1BhaW50ZXJGYWN0b3J5Ojpjc3NQcmltaXRpdmVUb0xlbmd0aChvYmplY3QsIHN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VEYXNoT2Zmc2V0KCksIDAuMCk7CisgICAgY29uc3QgRGFzaEFycmF5JiBk
YXNoZXMgPSBkYXNoQXJyYXlGcm9tUmVuZGVyaW5nU3R5bGUoc3R5bGUpOworICAgIGRvdWJsZSBk
YXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwg
c3R5bGUtPnN2Z1N0eWxlKCktPnN0cm9rZURhc2hPZmZzZXQoKSwgMC4wKTsKIAogICAgIENHQ29u
dGV4dFNldExpbmVEYXNoKGNvbnRleHQsIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hl
cy5zaXplKCkpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvUmVu
ZGVyUGF0aENnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2
Zy9jZy9SZW5kZXJQYXRoQ2cuY3BwCShyZXZpc2lvbiAyMjA5OCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL2NnL1JlbmRlclBhdGhDZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDkgKzMxLDkgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiAjaW5jbHVkZSA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jaW5jbHVkZSAiS0NhbnZh
c1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiQ2dTdXBwb3J0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyUGF0aC5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAKQEAgLTUzLDcgKzUz
LDcgQEAgYm9vbCBSZW5kZXJQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbAogICAgIGlmIChw
YXRoKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVxdWly
ZXNTdHJva2UgJiYgIUtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUo
KSwgdGhpcykpCisgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFTVkdQYWludFNlcnZlcjo6c3Ry
b2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIENHTXV0YWJsZVBhdGhSZWYgY2dQYXRoID0gcGF0aCgpLnBsYXRmb3JtUGF0aCgpOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAJKHJldmlzaW9uIDIyMDk4KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAK
ICNpbmNsdWRlIDxtYXRoLmg+CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWlu
ZXIuaCIKICNpbmNsdWRlICJQb2ludGVyRXZlbnRzSGl0UnVsZXMuaCIKICNpbmNsdWRlICJTVkdQ
YWludFNlcnZlci5oIgpAQCAtNzksNyArNzgsNyBAQCBib29sIFJlbmRlclBhdGg6OmZpbGxDb250
YWlucyhjb25zdCBGbG9hCiAgICAgaWYgKG1fcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYgIUtTVkdQYWludGVyRmFjdG9yeTo6
ZmlsbFBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpKQorICAgIGlmIChyZXF1aXJlc0ZpbGwgJiYg
IVNWR1BhaW50U2VydmVyOjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBtX3BhdGguY29udGFpbnMocG9pbnQsIHN0eWxl
KCktPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkpOwpAQCAtMTc3LDEzICsxNzYsMTMgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGZpbGxBbmRTdHJva2VQYXRoKGNvbgogewogICAgIGNvbnRleHQtPmJlZ2lu
UGF0aCgpOwogCi0gICAgU1ZHUGFpbnRTZXJ2ZXIqIGZpbGxQYWludFNlcnZlciA9IEtTVkdQYWlu
dGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKHN0eWxlLCBvYmplY3QpOworICAgIFNWR1BhaW50
U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIgPSBTVkdQYWludFNlcnZlcjo6ZmlsbFBhaW50U2VydmVy
KHN0eWxlLCBvYmplY3QpOwogICAgIGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgY29u
dGV4dC0+YWRkUGF0aChwYXRoKTsKICAgICAgICAgZmlsbFBhaW50U2VydmVyLT5kcmF3KGNvbnRl
eHQsIG9iamVjdCwgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKTsKICAgICB9CiAgICAgCi0gICAgU1ZH
UGFpbnRTZXJ2ZXIqIHN0cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJv
a2VQYWludFNlcnZlcihzdHlsZSwgb2JqZWN0KTsKKyAgICBTVkdQYWludFNlcnZlciogc3Ryb2tl
UGFpbnRTZXJ2ZXIgPSBTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUsIG9i
amVjdCk7CiAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CiAgICAgICAgIGNvbnRleHQtPmFk
ZFBhdGgocGF0aCk7IC8vIHBhdGggaXMgY2xlYXJlZCB3aGVuIGZpbGxlZC4KICAgICAgICAgc3Ry
b2tlUGFpbnRTZXJ2ZXItPmRyYXcoY29udGV4dCwgb2JqZWN0LCBBcHBseVRvU3Ryb2tlVGFyZ2V0
VHlwZSk7CkBAIC00MTUsNyArNDE0LDcgQEAgRmxvYXRSZWN0IFJlbmRlclBhdGg6OmRyYXdNYXJr
ZXJzSWZOZWVkZQogICAgIGlmICghc3RhcnRNYXJrZXIgJiYgIW1pZE1hcmtlciAmJiAhZW5kTWFy
a2VyKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKLSAgICBkb3VibGUgc3Ryb2tlV2lk
dGggPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKHRoaXMsIHN2Z1N0
eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApOworICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IFNWR1Jl
bmRlclN0eWxlOjpjc3NQcmltaXRpdmVUb0xlbmd0aCh0aGlzLCBzdmdTdHlsZS0+c3Ryb2tlV2lk
dGgoKSwgMS4wKTsKICAgICBEcmF3TWFya2Vyc0RhdGEgZGF0YShjb250ZXh0LCBzdGFydE1hcmtl
ciwgbWlkTWFya2VyLCBzdHJva2VXaWR0aCk7CiAKICAgICBwYXRoLmFwcGx5KCZkYXRhLCBkcmF3
U3RhcnRBbmRNaWRNYXJrZXJzKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jv
b3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDM3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAg
ICAgICAgICAgICAgICAgIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKworICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
ICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRl
ICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VDbGlwcGVyLmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNp
bmNsdWRlICJTVkdSZXNvdXJjZU1hc2tlci5oIgorI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyU1ZHUm9vdDo6UmVuZGVyU1ZHUm9v
dChTVkdTdHlsZWRFbGVtZW50KiBub2RlKQorICAgIDogUmVuZGVyQ29udGFpbmVyKG5vZGUpCisg
ICAgLCBtX3NsaWNlKGZhbHNlKQoreworICAgIHNldFJlcGxhY2VkKHRydWUpOworfQorCitSZW5k
ZXJTVkdSb290Ojp+UmVuZGVyU1ZHUm9vdCgpCit7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBSZW5k
ZXJTVkdSb290Ojpsb2NhbFRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWF0cml4
OworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OnNldExvY2FsVHJhbnNmb3JtKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgbWF0cml4KQoreworICAgIG1fbWF0cml4ID0gbWF0cml4OworfQorCitib29s
IFJlbmRlclNWR1Jvb3Q6OnJlcXVpcmVzTGF5ZXIoKQoreworICAgIC8vIE9ubHkgYWxsb3cgYW4g
PHN2Zz4gZWxlbWVudCB0byBnZW5lcmF0ZSBhIGxheWVyIHdoZW4gaXQncyBwb3NpdGlvbmVkIGlu
IGEgbm9uLVNWRyBjb250ZXh0CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG9ydCBSZW5kZXJT
VkdSb290OjpsaW5lSGVpZ2h0KGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25zdAorewor
ICAgIHJldHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpICsgbWFyZ2luQm90dG9tKCk7Cit9CisK
K3Nob3J0IFJlbmRlclNWR1Jvb3Q6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCBiLCBib29sIGlzUm9v
dExpbmVCb3gpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlaWdodCgpICsgbWFyZ2luVG9wKCkgKyBt
YXJnaW5Cb3R0b20oKTsKK30KKwordm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQoreworICAg
IEFTU0VSVChuZWVkc0xheW91dCgpKTsKKworICAgIGNhbGNWaWV3cG9ydCgpOworCisgICAgLy8g
QXJiaXRyYXJ5IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBMYXlvdXRT
dGF0ZS4KKyAgICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOworCisgICAgSW50UmVjdCBv
bGRCb3VuZHM7CisgICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OworICAgIGJvb2wgY2hlY2tGb3JS
ZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCk7CisgICAgaWYgKHNlbGZOZWVk
c0xheW91dCgpICYmIGNoZWNrRm9yUmVwYWludCkgeworICAgICAgICBvbGRCb3VuZHMgPSBtX2Fi
c29sdXRlQm91bmRzOworICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm94
KCk7CisgICAgfQorCisgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAg
ICB3aGlsZSAoY2hpbGQpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXMgYm9ndXMs
IHNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAwMworICAgICAg
ICBpZiAoIWNoaWxkLT5pc1JlbmRlclBhdGgoKSB8fCBzdGF0aWNfY2FzdDxSZW5kZXJQYXRoKj4o
Y2hpbGQpLT5oYXNSZWxhdGl2ZVZhbHVlcygpKQorICAgICAgICAgICAgY2hpbGQtPnNldE5lZWRz
TGF5b3V0KHRydWUpOworCisgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAg
ICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91dCgpKTsKKyAgICAgICAgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKTsKKyAgICB9CisKKyAgICBjYWxjV2lkdGgoKTsKKyAgICBjYWxjSGVpZ2h0
KCk7CisKKyAgICBtX2Fic29sdXRlQm91bmRzID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0
KCk7CisgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+
KGVsZW1lbnQoKSk7CisgICAgbV93aWR0aCA9IG1fd2lkdGggKiBzdmctPmN1cnJlbnRTY2FsZSgp
OworICAgIG1faGVpZ2h0ID0gbV9oZWlnaHQgKiBzdmctPmN1cnJlbnRTY2FsZSgpOworCisgICAg
aWYgKHNlbGZOZWVkc0xheW91dCgpICYmIGNoZWNrRm9yUmVwYWludCkKKyAgICAgICAgcmVwYWlu
dEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsKKworICAgIHZp
ZXcoKS0+ZW5hYmxlTGF5b3V0U3RhdGUoKTsKKyAgICBzZXROZWVkc0xheW91dChmYWxzZSk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6YXBwbHlDb250ZW50VHJhbnNmb3JtcyhQYWludEluZm8m
IHBhaW50SW5mbywgaW50JiBwYXJlbnRYLCBpbnQmIHBhcmVudFkpCit7CisgICAgLy8gVHJhbnNs
YXRlIGZyb20gcGFyZW50IG9mZnNldHMgKGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0aXZlIHRy
YW5zZm9ybSAoc3ZnIHJlbmRlcmVycykKKyAgICBJbnRQb2ludCBvcmlnaW47CisgICAgb3JpZ2lu
Lm1vdmUocGFyZW50WCwgcGFyZW50WSk7CisgICAgb3JpZ2luLm1vdmUobV94LCBtX3kpOworICAg
IG9yaWdpbi5tb3ZlKGJvcmRlckxlZnQoKSwgYm9yZGVyVG9wKCkpOworICAgIG9yaWdpbi5tb3Zl
KHBhZGRpbmdMZWZ0KCksIHBhZGRpbmdUb3AoKSk7CisgICAgaWYgKG9yaWdpbi54KCkgfHwgb3Jp
Z2luLnkoKSkgeworICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRy
YW5zZm9ybSgpLnRyYW5zbGF0ZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpKSk7CisgICAgICAgIHBh
aW50SW5mby5yZWN0Lm1vdmUoLW9yaWdpbi54KCksIC1vcmlnaW4ueSgpKTsKKyAgICB9CisgICAg
cGFyZW50WCA9IHBhcmVudFkgPSAwOworICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19j
YXN0PFNWR1NWR0VsZW1lbnQqPihlbGVtZW50KCkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5j
b25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGUoc3ZnLT5jdXJyZW50U2NhbGUoKSkpOwor
ICAgIAorICAgIGlmICghdmlld3BvcnQoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHN0eWxl
KCktPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFKQorICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdCh2aWV3cG9ydCgpKSk7IC8vIEZJWE1FOiBFdmVudHVh
bGx5IHdlJ2xsIHdhbnQgZmxvYXQtcHJlY2lzaW9uIGNsaXBwaW5nCisgICAgICAgIAorICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0
ZSh2aWV3cG9ydCgpLngoKSwgdmlld3BvcnQoKS55KCkpKTsKKyAgICB9CisgICAgaWYgKCFsb2Nh
bFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNv
bmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0
Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShzdmctPmN1cnJlbnRUcmFuc2xhdGUoKS54
KCksIHN2Zy0+Y3VycmVudFRyYW5zbGF0ZSgpLnkoKSkpOworfQorCit2b2lkIFJlbmRlclNWR1Jv
b3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkp
Cit7CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgZXhpc3QgZm9yIDxzdmc+IHJl
bmRlcmVycworICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VT
ZWxlY3Rpb24pKSAKKyAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIG1feCAr
IHBhcmVudFgsIG1feSArIHBhcmVudFkpOworCisgICAgaWYgKCFmaXJzdENoaWxkKCkpIHsKKyNp
ZiBFTkFCTEUoU1ZHX0VYUEVSSU1FTlRBTF9GRUFUVVJFUykKKyAgICAgICAgLy8gU3BlYzogZ3Jv
dXBzIHcvbyBjaGlsZHJlbiBzdGlsbCBtYXkgcmVuZGVyIGZpbHRlciBjb250ZW50LgorICAgICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOwor
ICAgICAgICBBdG9taWNTdHJpbmcgZmlsdGVySWQoU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQo
c3ZnU3R5bGUtPmZpbHRlcigpKSk7CisgICAgICAgIFNWR1Jlc291cmNlRmlsdGVyKiBmaWx0ZXIg
PSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIGZpbHRlcklkKTsKKyAgICAgICAgaWYgKCFmaWx0
ZXIpCisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICAKKyAgICBhcHBseUNvbnRlbnRUcmFuc2Zvcm1zKHBh
aW50SW5mbywgcGFyZW50WCwgcGFyZW50WSk7CisKKyNpZiBFTkFCTEUoU1ZHX0VYUEVSSU1FTlRB
TF9GRUFUVVJFUykKKyAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gMDsKKyNlbHNlCisg
ICAgdm9pZCogZmlsdGVyID0gMDsKKyNlbmRpZgorICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9
IHJlbGF0aXZlQkJveCh0cnVlKTsKKyAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+b3BhY2l0
eSgpOworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsK
KyAgICAgICAgcHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCh0aGlzLCBwYWludEluZm8sIGJvdW5k
aW5nQm94LCBmaWx0ZXIpOworICAgICAgICAKKyAgICAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKSB7
CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KGJv
dW5kaW5nQm94KSk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghdmlld0Jv
eCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTSh2aWV3
cG9ydFRyYW5zZm9ybSgpKTsKKworICAgIFJlbmRlckNvbnRhaW5lcjo6cGFpbnQocGFpbnRJbmZv
LCAwLCAwKTsKKworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91
bmQpIHsKKyNpZiBFTkFCTEUoU1ZHX0VYUEVSSU1FTlRBTF9GRUFUVVJFUykKKyAgICAgICAgaWYg
KGZpbHRlcikKKyAgICAgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIocGFpbnRJbmZvLmNvbnRl
eHQsIGJvdW5kaW5nQm94KTsKKyNlbmRpZgorCisgICAgICAgIGlmIChvcGFjaXR5IDwgMS4wZikK
KyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwor
ICAgIH0KKworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CisgICAgCisgICAgaWYg
KChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYg
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisgICAgICAgIHBhaW50T3V0bGluZShw
YWludEluZm8uY29udGV4dCwgbV9hYnNvbHV0ZUJvdW5kcy54KCksIG1fYWJzb2x1dGVCb3VuZHMu
eSgpLCBtX2Fic29sdXRlQm91bmRzLndpZHRoKCksIG1fYWJzb2x1dGVCb3VuZHMuaGVpZ2h0KCks
IHN0eWxlKCkpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUm9vdDo6dmlld3BvcnQoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0OworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmNh
bGNWaWV3cG9ydCgpCit7CisgICAgU1ZHRWxlbWVudCogc3ZnZWxlbSA9IHN0YXRpY19jYXN0PFNW
R0VsZW1lbnQqPihlbGVtZW50KCkpOworICAgIGlmIChzdmdlbGVtLT5oYXNUYWdOYW1lKFNWR05h
bWVzOjpzdmdUYWcpKSB7CisgICAgICAgIFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0
PFNWR1NWR0VsZW1lbnQqPihlbGVtZW50KCkpOworCisgICAgICAgIGlmICghc2VsZk5lZWRzTGF5
b3V0KCkgJiYgIXN2Zy0+aGFzUmVsYXRpdmVWYWx1ZXMoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBkb3VibGUgeCA9IHN2Zy0+eCgpLnZhbHVlKCk7CisgICAgICAgIGRvdWJsZSB5
ID0gc3ZnLT55KCkudmFsdWUoKTsKKyAgICAgICAgZG91YmxlIHcgPSBzdmctPndpZHRoKCkudmFs
dWUoKTsKKyAgICAgICAgZG91YmxlIGggPSBzdmctPmhlaWdodCgpLnZhbHVlKCk7CisgICAgICAg
IG1fdmlld3BvcnQgPSBGbG9hdFJlY3QoeCwgeSwgdywgaCk7CisgICAgfQorfQorCit2b2lkIFJl
bmRlclNWR1Jvb3Q6OnNldFZpZXdCb3goY29uc3QgRmxvYXRSZWN0JiB2aWV3Qm94KQoreworICAg
IG1fdmlld0JveCA9IHZpZXdCb3g7CisKKyAgICBpZiAoc3R5bGUoKSkKKyAgICAgICAgc2V0TmVl
ZHNMYXlvdXQodHJ1ZSk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdSb290Ojp2aWV3Qm94KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3Qm94OworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6
OnNldEFsaWduKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9U
eXBlIGFsaWduKQoreworICAgIG1fYWxpZ24gPSBhbGlnbjsKKyAgICBpZiAoc3R5bGUoKSkKKyAg
ICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7Cit9CisKK1NWR1ByZXNlcnZlQXNwZWN0UmF0aW86
OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIFJlbmRlclNWR1Jvb3Q6OmFsaWduKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9hbGlnbjsKK30KKworQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1Jv
b3Q6OnZpZXdwb3J0VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhlIG1ldGhv
ZCBuYW1lIGlzIGNvbmZ1c2luZywgc2luY2UgaXQgZG9lcyBub3QKKyAgICAvLyBkbyB2aWV3cG9y
dCB0cmFuc2xhdGluZyBhbnltb3JlLiBMb29rIGludG8gdGhpcyB3aGlsZQorICAgIC8vICBmaXhp
bmcgYnVnIDEyMjA3LgorICAgIGlmICghdmlld0JveCgpLmlzRW1wdHkoKSkgeworICAgICAgICBG
bG9hdFJlY3Qgdmlld3BvcnRSZWN0ID0gdmlld3BvcnQoKTsKKyAgICAgICAgdmlld3BvcnRSZWN0
ID0gRmxvYXRSZWN0KHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSwgd2lkdGgoKSwgaGVp
Z2h0KCkpOworCisgICAgICAgIHJldHVybiBnZXRBc3BlY3RSYXRpbyh2aWV3Qm94KCksIHZpZXdw
b3J0UmVjdCk7CisgICAgfQorCisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOworfQorCitJ
bnRSZWN0IFJlbmRlclNWR1Jvb3Q6OmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpCit7Cisg
ICAgSW50UmVjdCByZXBhaW50UmVjdDsKKworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50
ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50ICE9IDA7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2li
bGluZygpKQorICAgICAgICByZXBhaW50UmVjdC51bml0ZShjdXJyZW50LT5hYnNvbHV0ZUNsaXBw
ZWRPdmVyZmxvd1JlY3QoKSk7CisKKyNpZiBFTkFCTEUoU1ZHX0VYUEVSSU1FTlRBTF9GRUFUVVJF
UykKKyAgICAvLyBGaWx0ZXJzIGNhbiBleHBhbmQgdGhlIGJvdW5kaW5nIGJveAorICAgIFNWR1Jl
c291cmNlRmlsdGVyKiBmaWx0ZXIgPSBnZXRGaWx0ZXJCeUlkKGRvY3VtZW50KCksIFNWR1VSSVJl
ZmVyZW5jZTo6Z2V0VGFyZ2V0KHN0eWxlKCktPnN2Z1N0eWxlKCktPmZpbHRlcigpKSk7CisgICAg
aWYgKGZpbHRlcikKKyAgICAgICAgcmVwYWludFJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdChm
aWx0ZXItPmZpbHRlckJCb3hGb3JJdGVtQkJveChyZXBhaW50UmVjdCkpKTsKKyNlbmRpZgorCisg
ICAgcmV0dXJuIHJlcGFpbnRSZWN0OworfQorCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmFkZEZvY3Vz
UmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0
eSkKK3sKKyAgICBncmFwaGljc0NvbnRleHQtPmFkZEZvY3VzUmluZ1JlY3QobV9hYnNvbHV0ZUJv
dW5kcyk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mIHJlY3RzLCBpbnQsIGludCkKK3sKKyAgICByZWN0cy5hcHBlbmQoYWJzb2x1dGVDbGlw
cGVkT3ZlcmZsb3dSZWN0KCkpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHUm9vdDo6
YWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBS
ZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgU1ZHU1ZHRWxlbWVudCog
c3ZnID0gc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudCo+KGVsZW1lbnQoKSk7CisgICAgY3RtLnNj
YWxlKHN2Zy0+Y3VycmVudFNjYWxlKCkpOworICAgIGN0bS50cmFuc2xhdGUoc3ZnLT5jdXJyZW50
VHJhbnNsYXRlKCkueCgpLCBzdmctPmN1cnJlbnRUcmFuc2xhdGUoKS55KCkpOworICAgIGN0bS50
cmFuc2xhdGUodmlld3BvcnQoKS54KCksIHZpZXdwb3J0KCkueSgpKTsKKyAgICByZXR1cm4gdmll
d3BvcnRUcmFuc2Zvcm0oKSAqIGN0bTsKK30KKworYm9vbCBSZW5kZXJTVkdSb290OjpmaWxsQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmplY3QqIGN1
cnJlbnQgPSBmaXJzdENoaWxkKCk7CisgICAgd2hpbGUgKGN1cnJlbnQgIT0gMCkgeworICAgICAg
ICBpZiAoY3VycmVudC0+aXNSZW5kZXJQYXRoKCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyUGF0aCo+
KGN1cnJlbnQpLT5maWxsQ29udGFpbnMocCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUm9vdDo6c3Ryb2tlQ29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBm
aXJzdENoaWxkKCk7CisgICAgd2hpbGUgKGN1cnJlbnQgIT0gMCkgeworICAgICAgICBpZiAoY3Vy
cmVudC0+aXNSZW5kZXJQYXRoKCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyUGF0aCo+KGN1cnJlbnQp
LT5zdHJva2VDb250YWlucyhwKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1Jvb3Q6OnJlbGF0aXZlQkJveChib29sIGlu
Y2x1ZGVTdHJva2UpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlY3Q7CisgICAgCisgICAgUmVu
ZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOworICAgIGZvciAoOyBjdXJyZW50ICE9
IDA7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIEZsb2F0UmVj
dCBjaGlsZEJCb3ggPSBjdXJyZW50LT5yZWxhdGl2ZUJCb3goaW5jbHVkZVN0cm9rZSk7CisgICAg
ICAgIEZsb2F0UmVjdCBtYXBwZWRCQm94ID0gY3VycmVudC0+bG9jYWxUcmFuc2Zvcm0oKS5tYXBS
ZWN0KGNoaWxkQkJveCk7CisgICAgICAgIHJlY3QudW5pdGUobWFwcGVkQkJveCk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6c2V0U2xpY2UoYm9v
bCBzbGljZSkKK3sKKyAgICBtX3NsaWNlID0gc2xpY2U7CisKKyAgICBpZiAoc3R5bGUoKSkKKyAg
ICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUm9vdDo6c2xp
Y2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3NsaWNlOworfQorCitBZmZpbmVUcmFuc2Zvcm0g
UmVuZGVyU1ZHUm9vdDo6Z2V0QXNwZWN0UmF0aW8oY29uc3QgRmxvYXRSZWN0JiBsb2dpY2FsLCBj
b25zdCBGbG9hdFJlY3QmIHBoeXNpY2FsKSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0
ZW1wOworCisgICAgZmxvYXQgbG9naWNYID0gbG9naWNhbC54KCk7CisgICAgZmxvYXQgbG9naWNZ
ID0gbG9naWNhbC55KCk7CisgICAgZmxvYXQgbG9naWNXaWR0aCA9IGxvZ2ljYWwud2lkdGgoKTsK
KyAgICBmbG9hdCBsb2dpY0hlaWdodCA9IGxvZ2ljYWwuaGVpZ2h0KCk7CisgICAgZmxvYXQgcGh5
c1dpZHRoID0gcGh5c2ljYWwud2lkdGgoKTsKKyAgICBmbG9hdCBwaHlzSGVpZ2h0ID0gcGh5c2lj
YWwuaGVpZ2h0KCk7CisKKyAgICBmbG9hdCB2cGFyID0gbG9naWNXaWR0aCAvIGxvZ2ljSGVpZ2h0
OworICAgIGZsb2F0IHN2Z2FyID0gcGh5c1dpZHRoIC8gcGh5c0hlaWdodDsKKworICAgIGlmIChh
bGlnbigpID09IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJBVElP
X05PTkUpIHsKKyAgICAgICAgdGVtcC5zY2FsZShwaHlzV2lkdGggLyBsb2dpY1dpZHRoLCBwaHlz
SGVpZ2h0IC8gbG9naWNIZWlnaHQpOworICAgICAgICB0ZW1wLnRyYW5zbGF0ZSgtbG9naWNYLCAt
bG9naWNZKTsKKyAgICB9IGVsc2UgaWYgKCh2cGFyIDwgc3ZnYXIgJiYgIXNsaWNlKCkpIHx8ICh2
cGFyID49IHN2Z2FyICYmIHNsaWNlKCkpKSB7CisgICAgICAgIHRlbXAuc2NhbGUocGh5c0hlaWdo
dCAvIGxvZ2ljSGVpZ2h0LCBwaHlzSGVpZ2h0IC8gbG9naWNIZWlnaHQpOworCisgICAgICAgIGlm
IChhbGlnbigpID09IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX1hNSU5ZTUlOIHx8IGFsaWduKCkgPT0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fWE1JTllNSUQgfHwgYWxpZ24oKSA9PSBTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlOWU1BWCkKKyAgICAgICAgICAgIHRl
bXAudHJhbnNsYXRlKC1sb2dpY1gsIC1sb2dpY1kpOworICAgICAgICBlbHNlIGlmIChhbGlnbigp
ID09IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZ
TUlOIHx8IGFsaWduKCkgPT0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX1BSRVNFUlZFQVNQ
RUNUUkFUSU9fWE1JRFlNSUQgfHwgYWxpZ24oKSA9PSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpT
VkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19YTUlEWU1BWCkKKyAgICAgICAgICAgIHRlbXAudHJhbnNs
YXRlKC1sb2dpY1ggLSAobG9naWNXaWR0aCAtIHBoeXNXaWR0aCAqIGxvZ2ljSGVpZ2h0IC8gcGh5
c0hlaWdodCkgLyAyLCAtbG9naWNZKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVtcC50
cmFuc2xhdGUoLWxvZ2ljWCAtIChsb2dpY1dpZHRoIC0gcGh5c1dpZHRoICogbG9naWNIZWlnaHQg
LyBwaHlzSGVpZ2h0KSwgLWxvZ2ljWSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVtcC5zY2Fs
ZShwaHlzV2lkdGggLyBsb2dpY1dpZHRoLCBwaHlzV2lkdGggLyBsb2dpY1dpZHRoKTsKKworICAg
ICAgICBpZiAoYWxpZ24oKSA9PSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVB
U1BFQ1RSQVRJT19YTUlOWU1JTiB8fCBhbGlnbigpID09IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86
OlNWR19QUkVTRVJWRUFTUEVDVFJBVElPX1hNSURZTUlOIHx8IGFsaWduKCkgPT0gU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbzo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSU4pCisgICAgICAg
ICAgICB0ZW1wLnRyYW5zbGF0ZSgtbG9naWNYLCAtbG9naWNZKTsKKyAgICAgICAgZWxzZSBpZiAo
YWxpZ24oKSA9PSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJ
T19YTUlOWU1JRCB8fCBhbGlnbigpID09IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlNWR19QUkVT
RVJWRUFTUEVDVFJBVElPX1hNSURZTUlEIHx8IGFsaWduKCkgPT0gU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbzo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fWE1BWFlNSUQpCisgICAgICAgICAgICB0ZW1w
LnRyYW5zbGF0ZSgtbG9naWNYLCAtbG9naWNZIC0gKGxvZ2ljSGVpZ2h0IC0gcGh5c0hlaWdodCAq
IGxvZ2ljV2lkdGggLyBwaHlzV2lkdGgpIC8gMik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRlbXAudHJhbnNsYXRlKC1sb2dpY1gsIC1sb2dpY1kgLSAobG9naWNIZWlnaHQgLSBwaHlzSGVp
Z2h0ICogbG9naWNXaWR0aCAvIHBoeXNXaWR0aCkpOworICAgIH0KKworICAgIHJldHVybiB0ZW1w
OworfQorCitib29sIFJlbmRlclNWR1Jvb3Q6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQg
X3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgaWYgKCF2
aWV3cG9ydCgpLmlzRW1wdHkoKQorICAgICAgICAmJiBzdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBP
SElEREVOCisgICAgICAgICYmIHN0eWxlKCktPm92ZXJmbG93WSgpID09IE9ISURERU4pIHsKKyAg
ICAgICAgaW50IHR4ID0gbV94IC0gX3R4OworICAgICAgICBpbnQgdHkgPSBtX3kgLSBfdHk7CisK
KyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuCisgICAg
ICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSBvdmVyZmxvd1JlY3QoZmFsc2UpOworICAgICAgICBv
dmVyZmxvd0JveC5tb3ZlKHR4LCB0eSk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBS
ZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgICAgIGN0bS50cmFuc2xh
dGUodmlld3BvcnQoKS54KCksIHZpZXdwb3J0KCkueSgpKTsKKyAgICAgICAgZG91YmxlIGxvY2Fs
WCwgbG9jYWxZOworICAgICAgICBjdG0uaW52ZXJzZSgpLm1hcChfeCAtIF90eCwgX3kgLSBfdHks
ICZsb2NhbFgsICZsb2NhbFkpOworICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmNvbnRhaW5zKChp
bnQpbG9jYWxYLCAoaW50KWxvY2FsWSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQtPm5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgX3gsIF95LCBfdHgsIF90eSwgaGl0VGVzdEFjdGlv
bikpIHsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludChf
eCAtIF90eCwgX3kgLSBfdHkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIFNwZWM6IE9ubHkgZ3JhcGhpY2FsIGVsZW1lbnRzIGNhbiBi
ZSB0YXJnZXRlZCBieSB0aGUgbW91c2UsIHBlcmlvZC4KKyAgICAvLyAxNi40OiAiSWYgdGhlcmUg
YXJlIG5vIGdyYXBoaWNzIGVsZW1lbnRzIHdob3NlIHJlbGV2YW50IGdyYXBoaWNzIGNvbnRlbnQg
aXMgdW5kZXIgdGhlIHBvaW50ZXIgKGkuZS4sIHRoZXJlIGlzIG5vIHRhcmdldCBlbGVtZW50KSwg
dGhlIGV2ZW50IGlzIG5vdCBkaXNwYXRjaGVkLiIKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30K
KworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAyMjA5OCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzLmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZH
TGVuZ3RoTGlzdC5oIgpAQCAtMTQ0LDcgKzE0Myw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0
OjpyZWxhdGl2ZUJCb3goYm8KIAogICAgIC8vIFNWRyBuZWVkcyB0byBpbmNsdWRlIHRoZSBzdHJv
a2VXaWR0aCgpLCBub3QgdGhlIHRleHRTdHJva2VXaWR0aCgpLgogICAgIGlmIChpbmNsdWRlU3Ry
b2tlICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKQotICAgICAgICByZXBhaW50
UmVjdC5pbmZsYXRlKEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgodGhp
cywgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMC4wKSk7CisgICAgICAgIHJl
cGFpbnRSZWN0LmluZmxhdGUoU1ZHUmVuZGVyU3R5bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKHRo
aXMsIHN0eWxlKCktPnN2Z1N0eWxlKCktPnN0cm9rZVdpZHRoKCksIDAuMCkpOwogCiAgICAgcmVw
YWludFJlY3QubW92ZSh4UG9zKCksIHlQb3MoKSk7CiAgICAgcmV0dXJuIHJlcGFpbnRSZWN0OwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9u
IDIyMDk4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgi
CiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lu
Y2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRh
aW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdUZXh0LmgiCkBAIC0xNzksMTEgKzE3OCwxMSBAQCBzdGF0aWMgdm9pZCB3cml0ZUluZGVu
dChUZXh0U3RyZWFtJiB0cywgCiB9CiAKIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBp
biBLQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgS0NEYXNoQXJyYXkmIGEpCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGFzaEFycmF5JiBhKQogewogICAg
IHRzIDw8ICJ7IjsKLSAgICBLQ0Rhc2hBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYS5lbmQo
KTsKLSAgICBmb3IgKEtDRGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBpdCA9IGEuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgRGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBh
LmVuZCgpOworICAgIGZvciAoRGFzaEFycmF5Ojpjb25zdF9pdGVyYXRvciBpdCA9IGEuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdCAhPSBhLmJlZ2luKCkpCiAgICAg
ICAgICAgICB0cyA8PCAiLCAiOwogICAgICAgICB0cyA8PCAqaXQ7CkBAIC0yMzksMTYgKzIzOCwx
NiBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjCiAgICAgICAgIHRz
IDw8ICIgW29wYWNpdHk9IiA8PCBzdHlsZS0+b3BhY2l0eSgpIDw8ICJdIjsKICAgICBpZiAob2Jq
ZWN0LmlzUmVuZGVyUGF0aCgpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlclBhdGgmIHBhdGggPSBz
dGF0aWNfY2FzdDxjb25zdCBSZW5kZXJQYXRoJj4ob2JqZWN0KTsKLSAgICAgICAgU1ZHUGFpbnRT
ZXJ2ZXIqIHN0cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWlu
dFNlcnZlcihzdHlsZSwgJnBhdGgpOworICAgICAgICBTVkdQYWludFNlcnZlciogc3Ryb2tlUGFp
bnRTZXJ2ZXIgPSBTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRo
KTsKICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyKSB7CiAgICAgICAgICAgICBUZXh0U3Ry
ZWFtU2VwYXJhdG9yIHMoIiAiKTsKICAgICAgICAgICAgIHRzIDw8ICIgW3N0cm9rZT17IjsKICAg
ICAgICAgICAgIGlmIChzdHJva2VQYWludFNlcnZlcikKICAgICAgICAgICAgICAgICB0cyA8PCBz
IDw8ICpzdHJva2VQYWludFNlcnZlcjsKIAotICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQg
PSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKCZwYXRoLCBzdmdTdHls
ZS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOwotICAgICAgICAgICAgY29uc3QgS0NEYXNoQXJy
YXkmIGRhc2hBcnJheSA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZGFzaEFycmF5RnJvbVJlbmRlcmlu
Z1N0eWxlKHN0eWxlKTsKLSAgICAgICAgICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IEtTVkdQYWlu
dGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0eWxlLT5zdHJva2VX
aWR0aCgpLCAxLjApOworICAgICAgICAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBTVkdSZW5kZXJT
dHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2Z1N0eWxlLT5zdHJva2VEYXNoT2Zm
c2V0KCksIDAuMCk7CisgICAgICAgICAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSA9IGRh
c2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShzdHlsZSk7CisgICAgICAgICAgICBkb3VibGUgc3Ry
b2tlV2lkdGggPSBTVkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoJnBhdGgsIHN2
Z1N0eWxlLT5zdHJva2VXaWR0aCgpLCAxLjApOwogCiAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUt
PnN0cm9rZU9wYWNpdHkoKSAhPSAxLjBmKQogICAgICAgICAgICAgICAgIHRzIDw8IHMgPDwgIltv
cGFjaXR5PSIgPDwgc3ZnU3R5bGUtPnN0cm9rZU9wYWNpdHkoKSA8PCAiXSI7CkBAIC0yNjYsNyAr
MjY1LDcgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgYwogICAgICAg
ICAgICAgICAgIHRzIDw8IHMgPDwgIltkYXNoIGFycmF5PSIgPDwgZGFzaEFycmF5IDw8ICJdIjsK
ICAgICAgICAgICAgIHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KLSAgICAgICAgU1ZHUGFpbnRTZXJ2
ZXIqIGZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVy
KHN0eWxlLCAmcGF0aCk7CisgICAgICAgIFNWR1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIg
PSBTVkdQYWludFNlcnZlcjo6ZmlsbFBhaW50U2VydmVyKHN0eWxlLCAmcGF0aCk7CiAgICAgICAg
IGlmIChmaWxsUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3Ig
cygiICIpOwogICAgICAgICAgICAgdHMgPDwgIiBbZmlsbD17IjsK
</data>
<flag name="review"
          id="6185"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>