<?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>28026</bug_id>
          
          <creation_ts>2009-08-05 13:30:46 -0700</creation_ts>
          <short_desc>Canvas related files in WebCore/html should be moved to a subdir</short_desc>
          <delta_ts>2009-08-07 18:01:49 -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>DOM</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="Chris Marrin">cmarrin</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>137415</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-05 13:30:46 -0700</bug_when>
    <thetext>There will soon be many more of them from the Canvas 3D work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138219</commentid>
    <comment_count>1</comment_count>
      <attachid>34343</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-07 16:59:44 -0700</bug_when>
    <thetext>Created attachment 34343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138220</commentid>
    <comment_count>2</comment_count>
      <attachid>34343</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-08-07 17:03:16 -0700</bug_when>
    <thetext>Comment on attachment 34343
Patch

It looks like the neatly-sorted nature of some of the projects files will no longer be so neatly sorted after this change…</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138224</commentid>
    <comment_count>3</comment_count>
      <attachid>34343</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-07 17:09:31 -0700</bug_when>
    <thetext>Comment on attachment 34343
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138251</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-07 18:01:49 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/DerivedSources.make
Sending        WebCore/GNUmakefile.am
Sending        WebCore/WebCore.gypi
Sending        WebCore/WebCore.pro
Sending        WebCore/WebCore.vcproj/WebCore.vcproj
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/WebCoreSources.bkl
Deleting       WebCore/html/CanvasGradient.cpp
Deleting       WebCore/html/CanvasGradient.h
Deleting       WebCore/html/CanvasGradient.idl
Deleting       WebCore/html/CanvasPattern.cpp
Deleting       WebCore/html/CanvasPattern.h
Deleting       WebCore/html/CanvasPattern.idl
Deleting       WebCore/html/CanvasPixelArray.cpp
Deleting       WebCore/html/CanvasPixelArray.h
Deleting       WebCore/html/CanvasPixelArray.idl
Deleting       WebCore/html/CanvasRenderingContext2D.cpp
Deleting       WebCore/html/CanvasRenderingContext2D.h
Deleting       WebCore/html/CanvasRenderingContext2D.idl
Deleting       WebCore/html/CanvasStyle.cpp
Deleting       WebCore/html/CanvasStyle.h
Adding         WebCore/html/canvas
Adding         WebCore/html/canvas/CanvasGradient.cpp
Adding         WebCore/html/canvas/CanvasGradient.h
Adding         WebCore/html/canvas/CanvasGradient.idl
Adding         WebCore/html/canvas/CanvasPattern.cpp
Adding         WebCore/html/canvas/CanvasPattern.h
Adding         WebCore/html/canvas/CanvasPattern.idl
Adding         WebCore/html/canvas/CanvasPixelArray.cpp
Adding         WebCore/html/canvas/CanvasPixelArray.h
Adding         WebCore/html/canvas/CanvasPixelArray.idl
Adding         WebCore/html/canvas/CanvasRenderingContext2D.cpp
Adding         WebCore/html/canvas/CanvasRenderingContext2D.h
Adding         WebCore/html/canvas/CanvasRenderingContext2D.idl
Adding         WebCore/html/canvas/CanvasStyle.cpp
Adding         WebCore/html/canvas/CanvasStyle.h
Transmitting file data ........
Committed revision 46937.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34343</attachid>
            <date>2009-08-07 16:59:44 -0700</date>
            <delta_ts>2009-08-07 17:09:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>28026.patch</filename>
            <type>text/plain</type>
            <size>236491</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjkyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMDktMDgtMDcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgQ2FudmFzIHJlbGF0ZWQgZmlsZSB0byBhIHN1YmRpcmVjdG9yaWVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODAyNgorCisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBodG1s
L0NhbnZhc0dyYWRpZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL0NhbnZhc0dyYWRp
ZW50Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNHcmFkaWVudC5pZGw6IFJlbW92
ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNQYXR0ZXJuLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBodG1sL0NhbnZhc1BhdHRlcm4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL0NhbnZhc1Bh
dHRlcm4uaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvQ2FudmFzUGl4ZWxBcnJheS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNQaXhlbEFycmF5Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogaHRtbC9DYW52YXNQaXhlbEFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBo
dG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9DYW52
YXNTdHlsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNTdHlsZS5oOiBSZW1v
dmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNHcmFkaWVudC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9DYW52YXNHcmFk
aWVudC5jcHAuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaDogQ29waWVk
IGZyb20gV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmguCisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzR3JhZGllbnQuaWRsOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFzR3Jh
ZGllbnQuaWRsLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5jcHAuCisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzUGF0dGVybi5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFzUGF0
dGVybi5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaWRsOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5pZGwuCisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9DYW52YXNQ
aXhlbEFycmF5LmNwcC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmg6
IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9DYW52YXNQaXhlbEFycmF5LmguCisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5pZGw6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRt
bC9DYW52YXNQaXhlbEFycmF5LmlkbC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5p
ZGw6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRs
LgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDogQ29waWVkIGZyb20gV2Vi
Q29yZS9odG1sL0NhbnZhc1N0eWxlLmNwcC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNT
dHlsZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuaC4KKwogMjAwOS0w
OC0wNyAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gNDY5MTkp
CisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJDb3JlKS9jc3MgXAogICAgICQoV2ViQ29yZSkv
ZG9tIFwKICAgICAkKFdlYkNvcmUpL2h0bWwgXAorICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMg
XAogICAgICQoV2ViQ29yZSkvaW5zcGVjdG9yIFwKICAgICAkKFdlYkNvcmUpL2xvYWRlci9hcHBj
YWNoZSBcCiAgICAgJChXZWJDb3JlKS9wYWdlIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDY5MTkp
CisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsOSArMTUx
LDkgQEAgSURMX0JJTkRJTkdTICs9IFwKIAlXZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25FdmVu
dC5pZGwgXAogCVdlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5pZGwgXAogCVdlYkNv
cmUvZG9tL1doZWVsRXZlbnQuaWRsIFwKLQlXZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaWRs
IFwKLQlXZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5pZGwgXAotCVdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsIFwKKwlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dy
YWRpZW50LmlkbCBcCisJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCisJ
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsIFwKIAlXZWJD
b3JlL2h0bWwvRGF0YUdyaWRDb2x1bW4uaWRsIFwKIAlXZWJDb3JlL2h0bWwvRGF0YUdyaWRDb2x1
bW5MaXN0LmlkbCBcCiAJV2ViQ29yZS9odG1sL0ZpbGUuaWRsIFwKQEAgLTkwMSwxNiArOTAxLDE2
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgg
XAogCVdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIFwKIAlXZWJDb3JlL2hpc3RvcnkvUGFn
ZUNhY2hlLmggXAotCVdlYkNvcmUvaHRtbC9DYW52YXNHcmFkaWVudC5jcHAgXAotCVdlYkNvcmUv
aHRtbC9DYW52YXNHcmFkaWVudC5oIFwKLQlXZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5jcHAg
XAotCVdlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmggXAotCVdlYkNvcmUvaHRtbC9DYW52YXNQ
aXhlbEFycmF5LmNwcCBcCi0JV2ViQ29yZS9odG1sL0NhbnZhc1BpeGVsQXJyYXkuaCBcCi0JV2Vi
Q29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgXAotCVdlYkNvcmUvaHRtbC9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBcCi0JV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmNw
cCBcCi0JV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmggXAorCVdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzR3JhZGllbnQuY3BwIFwKKwlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50
LmggXAorCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5jcHAgXAorCVdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oIFwKKwlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1BpeGVsQXJyYXkuY3BwIFwKKwlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJyYXku
aCBcCisJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIFwK
KwlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIFwKKwlXZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcCBcCisJV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNTdHlsZS5oIFwKIAlXZWJDb3JlL2h0bWwvQ29sbGVjdGlvbkNhY2hlLmNwcCBcCiAJV2Vi
Q29yZS9odG1sL0NvbGxlY3Rpb25DYWNoZS5oIFwKIAlXZWJDb3JlL2h0bWwvQ29sbGVjdGlvblR5
cGUuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNDY5MTkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
d29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDEwIEBACiAgICAgICAgICAgICAnZG9tL1dlYktp
dEFuaW1hdGlvbkV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnZG9tL1dlYktpdFRyYW5zaXRpb25F
dmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9XaGVlbEV2ZW50LmlkbCcsCi0gICAgICAgICAg
ICAnaHRtbC9DYW52YXNHcmFkaWVudC5pZGwnLAotICAgICAgICAgICAgJ2h0bWwvQ2FudmFzUGF0
dGVybi5pZGwnLAotICAgICAgICAgICAgJ2h0bWwvQ2FudmFzUGl4ZWxBcnJheS5pZGwnLAotICAg
ICAgICAgICAgJ2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCcsCisgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaWRsJywKKyAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9DYW52YXNQYXR0ZXJuLmlkbCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFz
UGl4ZWxBcnJheS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvRGF0YUdyaWRDb2x1bW4uaWRsJywK
ICAgICAgICAgICAgICdodG1sL0RhdGFHcmlkQ29sdW1uTGlzdC5pZGwnLAogICAgICAgICAgICAg
J2h0bWwvRmlsZS5pZGwnLApAQCAtMTIwNCwxNiArMTIwNCwxNiBAQAogICAgICAgICAgICAgJ2hp
c3RvcnkvSGlzdG9yeUl0ZW0uaCcsCiAgICAgICAgICAgICAnaGlzdG9yeS9QYWdlQ2FjaGUuY3Bw
JywKICAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5oJywKLSAgICAgICAgICAgICdodG1s
L0NhbnZhc0dyYWRpZW50LmNwcCcsCi0gICAgICAgICAgICAnaHRtbC9DYW52YXNHcmFkaWVudC5o
JywKLSAgICAgICAgICAgICdodG1sL0NhbnZhc1BhdHRlcm4uY3BwJywKLSAgICAgICAgICAgICdo
dG1sL0NhbnZhc1BhdHRlcm4uaCcsCi0gICAgICAgICAgICAnaHRtbC9DYW52YXNQaXhlbEFycmF5
LmNwcCcsCi0gICAgICAgICAgICAnaHRtbC9DYW52YXNQaXhlbEFycmF5LmgnLAotICAgICAgICAg
ICAgJ2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCcsCi0gICAgICAgICAgICAnaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCcsCi0gICAgICAgICAgICAnaHRtbC9DYW52YXNT
dHlsZS5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvQ2FudmFzU3R5bGUuaCcsCisgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwJywKKyAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9DYW52YXNHcmFkaWVudC5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNQ
YXR0ZXJuLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oJywK
KyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmNwcCcsCisgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCcsCisgICAgICAgICAgICAnaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNT
dHlsZS5oJywKICAgICAgICAgICAgICdodG1sL0NvbGxlY3Rpb25DYWNoZS5jcHAnLAogICAgICAg
ICAgICAgJ2h0bWwvQ29sbGVjdGlvbkNhY2hlLmgnLAogICAgICAgICAgICAgJ2h0bWwvQ29sbGVj
dGlvblR5cGUuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ2OTE5KQorKysgV2ViQ29yZS9XZWJDb3JlLnBy
bwkod29ya2luZyBjb3B5KQpAQCAtMzQwLDkgKzM0MCw5IEBAIElETF9CSU5ESU5HUyArPSBcCiAg
ICAgZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmlkbCBcCiAgICAgZG9tL1dlYktpdFRyYW5zaXRp
b25FdmVudC5pZGwgXAogICAgIGRvbS9XaGVlbEV2ZW50LmlkbCBcCi0gICAgaHRtbC9DYW52YXNH
cmFkaWVudC5pZGwgXAotICAgIGh0bWwvQ2FudmFzUGF0dGVybi5pZGwgXAotICAgIGh0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCisgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGll
bnQuaWRsIFwKKyAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCisgICAgaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCiAgICAgaHRtbC9EYXRhR3JpZENv
bHVtbi5pZGwgXAogICAgIGh0bWwvRGF0YUdyaWRDb2x1bW5MaXN0LmlkbCBcCiAgICAgaHRtbC9G
aWxlLmlkbCBcCkBAIC05MTYsMTEgKzkxNiwxMSBAQCBTT1VSQ0VTICs9IFwKICAgICBoaXN0b3J5
L0hpc3RvcnlJdGVtLmNwcCBcCiAgICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBcCiAg
ICAgaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIFwKLSAgICBodG1sL0NhbnZhc0dyYWRpZW50LmNwcCBc
Ci0gICAgaHRtbC9DYW52YXNQYXR0ZXJuLmNwcCBcCi0gICAgaHRtbC9DYW52YXNQaXhlbEFycmF5
LmNwcCBcCi0gICAgaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIFwKLSAgICBodG1s
L0NhbnZhc1N0eWxlLmNwcCBcCisgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwK
KyAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcCBcCisgICAgaHRtbC9jYW52YXMvQ2Fu
dmFzUGl4ZWxBcnJheS5jcHAgXAorICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAgXAorICAgIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcCBcCiAgICAgaHRtbC9D
b2xsZWN0aW9uQ2FjaGUuY3BwIFwKICAgICBodG1sL0RhdGFHcmlkQ29sdW1uLmNwcCBcCiAgICAg
aHRtbC9EYXRhR3JpZENvbHVtbkxpc3QuY3BwIFwKQEAgLTE1NzAsMTEgKzE1NzAsMTEgQEAgSEVB
REVSUyArPSBcCiAgICAgaGlzdG9yeS9DYWNoZWRQYWdlLmggXAogICAgIGhpc3RvcnkvSGlzdG9y
eUl0ZW0uaCBcCiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUuaCBcCi0gICAgaHRtbC9DYW52YXNHcmFk
aWVudC5oIFwKLSAgICBodG1sL0NhbnZhc1BhdHRlcm4uaCBcCi0gICAgaHRtbC9DYW52YXNQaXhl
bEFycmF5LmggXAotICAgIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggXAotICAgIGh0
bWwvQ2FudmFzU3R5bGUuaCBcCisgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaCBcCisg
ICAgaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oIFwKKyAgICBodG1sL2NhbnZhcy9DYW52YXNQ
aXhlbEFycmF5LmggXAorICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
IFwKKyAgICBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oIFwKICAgICBodG1sL0NvbGxlY3Rpb25D
YWNoZS5oIFwKICAgICBodG1sL0RhdGFHcmlkQ29sdW1uLmggXAogICAgIGh0bWwvRGF0YUdyaWRD
b2x1bW5MaXN0LmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDQ2OTE5KQorKysgV2Vi
Q29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTU2NywxMSArNTY3LDEx
IEBAIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbGlzdCBvZiBmaWxlcyBuZWUKICAgICA8L3NldD4K
ICAgICAKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfSFRNTCI+Ci0g
ICAgICAgIGh0bWwvQ2FudmFzR3JhZGllbnQuY3BwCi0gICAgICAgIGh0bWwvQ2FudmFzUGF0dGVy
bi5jcHAKLSAgICAgICAgaHRtbC9DYW52YXNQaXhlbEFycmF5LmNwcAotICAgICAgICBodG1sL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKLSAgICAgICAgaHRtbC9DYW52YXNTdHlsZS5jcHAK
KyAgICAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCisgICAgICAgIGh0bWwvY2Fu
dmFzL0NhbnZhc1BhdHRlcm4uY3BwCisgICAgICAgIGh0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJy
YXkuY3BwCisgICAgICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
KyAgICAgICAgaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCiAgICAgICAgIGh0bWwvQ29sbGVj
dGlvbkNhY2hlLmNwcAogICAgICAgICBodG1sL0RPTURhdGFHcmlkRGF0YVNvdXJjZS5jcHAKICAg
ICAgICAgaHRtbC9GaWxlLmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCShyZXZpc2lvbiA0NjkxOSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0NjcyLDQzICsyNDY3Miw0MyBAQAogCQkJTmFtZT0i
aHRtbCINCiAJCQk+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXENhbnZh
c0dyYWRpZW50LmNwcCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXGNhbnZhc1xDYW52YXNH
cmFkaWVudC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxodG1sXENhbnZhc0dyYWRpZW50LmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxjYW52YXNcQ2FudmFzR3JhZGllbnQuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQ2FudmFzUGF0dGVybi5jcHAiDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxjYW52YXNcQ2FudmFzUGF0dGVybi5jcHAiDQogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXENhbnZh
c1BhdHRlcm4uaCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXGNhbnZhc1xDYW52YXNQYXR0
ZXJuLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRo
PSIuLlxodG1sXENhbnZhc1BpeGVsQXJyYXkuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0
bWxcY2FudmFzXENhbnZhc1BpeGVsQXJyYXkuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxDYW52YXNQaXhlbEFycmF5LmgiDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxjYW52YXNcQ2FudmFzUGl4ZWxBcnJheS5oIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxc
Y2FudmFzXENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcY2FudmFzXENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5caHRtbFxDYW52YXNTdHlsZS5jcHAiDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxjYW52YXNcQ2FudmFzU3R5bGUuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxDYW52YXNTdHlsZS5oIg0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcY2FudmFzXENhbnZhc1N0eWxlLmgiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQogCQkJPEZpbGUNCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gNDY5MTkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQyLDYgKzc0MiwyMCBAQAogCQk0
NkY5RDVERDBCMEQ2MDE3MDAyOEVFMzYgLyogYWxpYXNDdXJzb3IucG5nIGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkY5RDVEQTBCMEQ2MDE3MDAyOEVF
MzYgLyogYWxpYXNDdXJzb3IucG5nICovOyB9OwogCQk0NkY5RDVERTBCMEQ2MDE3MDAyOEVFMzYg
Lyogbm9Ecm9wQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDZGOUQ1REIwQjBENjAxNzAwMjhFRTM2IC8qIG5vRHJvcEN1cnNvci5wbmcg
Ki87IH07CiAJCTQ2RjlENURGMEIwRDYwMTcwMDI4RUUzNiAvKiBwcm9ncmVzc0N1cnNvci5wbmcg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2RjlENURD
MEIwRDYwMTcwMDI4RUUzNiAvKiBwcm9ncmVzc0N1cnNvci5wbmcgKi87IH07CisJCTQ5NDg0RkMx
MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTQ4NEZCMzEwMkNGMjNDMDAxODdERDMgLyog
Q2FudmFzR3JhZGllbnQuY3BwICovOyB9OworCQk0OTQ4NEZDMjEwMkNGMjNDMDAxODdERDMgLyog
Q2FudmFzR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5NDg0RkI0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5oICovOyB9
OworCQk0OTQ4NEZDMzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuaWRsIGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTQ4NEZCNTEwMkNG
MjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuaWRsICovOyB9OworCQk0OTQ4NEZDNDEwMkNG
MjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTQ4NEZCNjEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFz
UGF0dGVybi5jcHAgKi87IH07CisJCTQ5NDg0RkM1MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQ
YXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OTQ4NEZCNzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5oICovOyB9OworCQk0OTQ4
NEZDNjEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5pZGwgaW4gUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NDg0RkI4MTAyQ0YyM0MwMDE4N0RE
MyAvKiBDYW52YXNQYXR0ZXJuLmlkbCAqLzsgfTsKKwkJNDk0ODRGQzcxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc1BpeGVsQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDk0ODRGQjkxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BpeGVsQXJy
YXkuY3BwICovOyB9OworCQk0OTQ4NEZDODEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGl4ZWxB
cnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0
ODRGQkExMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BpeGVsQXJyYXkuaCAqLzsgfTsKKwkJNDk0
ODRGQzkxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BpeGVsQXJyYXkuaWRsIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTQ4NEZCQjEwMkNGMjNDMDAx
ODdERDMgLyogQ2FudmFzUGl4ZWxBcnJheS5pZGwgKi87IH07CisJCTQ5NDg0RkNBMTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0ODRGQkMxMDJDRjIzQzAwMTg3REQzIC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07CisJCTQ5NDg0RkNCMTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NDg0RkJEMTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLzsgfTsKKwkJNDk0ODRGQ0MxMDJDRjIzQzAwMTg3
REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NDg0RkJFMTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsICovOyB9OworCQk0OTQ4NEZDRDEwMkNGMjNDMDAx
ODdERDMgLyogQ2FudmFzU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDk0ODRGQkYxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmNw
cCAqLzsgfTsKKwkJNDk0ODRGQ0UxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTQ4NEZDMDEwMkNG
MjNDMDAxODdERDMgLyogQ2FudmFzU3R5bGUuaCAqLzsgfTsKIAkJNDk0QkQ3OTUwRjU1QzhFRTAw
NzQ3ODI4IC8qIFdlYktpdFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OTRCRDc5MzBGNTVDOEVFMDA3NDc4MjggLyogV2ViS2l0UG9pbnQuaCAq
LzsgfTsKIAkJNDk0QkQ3OTkwRjU1QzkwRTAwNzQ3ODI4IC8qIEpTV2ViS2l0UG9pbnRDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OTRCRDc5NzBGNTVDOTBFMDA3NDc4MjggLyogSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yLmNwcCAq
LzsgfTsKIAkJNDk0QkQ3OUEwRjU1QzkwRTAwNzQ3ODI4IC8qIEpTV2ViS2l0UG9pbnRDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0
QkQ3OTgwRjU1QzkwRTAwNzQ3ODI4IC8qIEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvci5oICovOyB9
OwpAQCAtMTkyOCw3ICsxOTQyLDYgQEAKIAkJODVGNzRFMEEwQUE4REY4QzAwMERDMjg0IC8qIERP
TUNTU1Vua25vd25SdWxlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMkRENTBBQThDOUJFMDA3RDNCN0QgLyogRE9NQ1NT
VW5rbm93blJ1bGUuaCAqLzsgfTsKIAkJODVGRjMxNUEwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtl
eWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg1RkYzMTU4MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggKi87IH07
CiAJCTg1RkYzMTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTkwQUFGQkZD
QjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi87IH07Ci0JCTg5OEQxRkIzMEYyNzkz
NEIwMDRCQkFDNyAvKiBDYW52YXNQaXhlbEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OThEMUZCMjBGMjc5MzRCMDA0QkJBQzcgLyogQ2FudmFz
UGl4ZWxBcnJheS5oICovOyB9OwogCQk5MjkyNjQ3NzBCNjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1
bWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MjkyNjQ3NjBCNjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi87
IH07CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAw
QzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4
MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjEyNCwxNCArMjEzNyw2
IEBACiAJCTkzRUIxNjk3MDlGODgwQzAwMDkxRjhGRiAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VCMTY5
NjA5Rjg4MEMwMDA5MUY4RkYgLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRUIzNTVGMDlFMzdGRDYw
MEY0Mzc5OSAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUIzNTVFMDlFMzdGRDYwMEY0Mzc5
OSAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcCAqLzsgfTsKIAkJOTNFRUMxRkEw
OUMyODc3NzAwQzUxNUQxIC8qIERvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNFRUMxRTcwOUMyODc3NzAwQzUxNUQxIC8qIERvY1B0ci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzRUVDMUZG
MDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMxRUQwOUMyODc3NzAw
QzUxNUQxIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07Ci0JCTkzRUVDMjAw
MDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUVDMUVFMDlDMjg3NzcwMEM1
MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLzsgfTsKLQkJOTNFRUMyMDEwOUMy
ODc3NzAwQzUxNUQxIC8qIENhbnZhc1N0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzFFRjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzU3R5
bGUuaCAqLzsgfTsKLQkJOTNFRUMyMDIwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc0dyYWRpZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUVD
MUYwMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNHcmFkaWVudC5jcHAgKi87IH07Ci0JCTkzRUVD
MjAzMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFRUMxRjEwOUMyODc3NzAwQzUxNUQxIC8q
IENhbnZhc0dyYWRpZW50LmggKi87IH07Ci0JCTkzRUVDMjA0MDlDMjg3NzcwMEM1MTVEMSAvKiBD
YW52YXNQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0VFQzFGMjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5oICovOyB9Owot
CQk5M0VFQzI2RjA5QzMyMTgwMDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0VFQzI2RTA5QzMyMTgwMDBD
NTE1RDEgLyogQ2FudmFzUGF0dGVybi5jcHAgKi87IH07Ci0JCTkzRUVDMjcxMDlDMzIxODgwMEM1
MTVEMSAvKiBDYW52YXNTdHlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0VFQzI3MDA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3Bw
ICovOyB9OwogCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERvY3VtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQzAyREU0
Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOThFRjA4MjQ1RTU5MDAxRTlB
QkMgLyogSFRNTFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxQYXJzZXIuaCAqLzsgfTsK
QEAgLTIyMDAsNyArMjIwNSw2IEBACiAJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NB
dWRpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
N0RENEQ4NTBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oICovOyB9OwogCQlBMTdDODEy
MjBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExN0M4MTIwMEYyQTVDRjcwMDVEQUFF
QiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuY3BwICovOyB9OwogCQlBMTdDODEyMzBGMkE1Q0Y3MDA1
REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMTdDODEyMTBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1l
bnRGYWN0b3J5LmggKi87IH07Ci0JCUE3MDk0QUZBMEYyN0FFNjAwMDU5NkNFQyAvKiBDYW52YXNQ
aXhlbEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3MDk0QUY5MEYyN0FFNjAwMDU5NkNFQyAvKiBDYW52YXNQaXhlbEFycmF5LmNwcCAqLzsg
fTsKIAkJQTcxODc2MEUwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzE4NzYwRDBCMkExMjAxMDBB
MTZFQ0UgLyogRHJhZ0FjdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNzE4Nzg5MDBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xs
ZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzE4Nzg4RjBCMkQwNEFDMDBBMTZFQ0UgLyogRHJhZ0NvbnRyb2xsZXJNYWMubW0gKi87IH07CiAJ
CUE3MzUyQzE5MEIxQkI4OUQwMEE5ODZEMCAvKiBSZW5kZXJTVkdCbG9jay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzM1MkMxNzBCMUJCODlEMDBB
OTg2RDAgLyogUmVuZGVyU1ZHQmxvY2suY3BwICovOyB9OwpAQCAtNTc1MSw2ICs1NzU1LDIwIEBA
CiAJCTQ2RjlENURBMEIwRDYwMTcwMDI4RUUzNiAvKiBhbGlhc0N1cnNvci5wbmcgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGgg
PSBhbGlhc0N1cnNvci5wbmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2RjlENURC
MEIwRDYwMTcwMDI4RUUzNiAvKiBub0Ryb3BDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gbm9Ecm9wQ3Vy
c29yLnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOUQ1REMwQjBENjAxNzAw
MjhFRTM2IC8qIHByb2dyZXNzQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IHByb2dyZXNzQ3Vyc29yLnBu
Zzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0ODRGQjMxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc0dyYWRpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IENhbnZhc0dyYWRpZW50LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNHcmFkaWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NDg0RkI0MTAyQ0YyM0MwMDE4N0REMyAv
KiBDYW52YXNHcmFkaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52
YXNHcmFkaWVudC5oOyBwYXRoID0gY2FudmFzL0NhbnZhc0dyYWRpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ5NDg0RkI1MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFk
aWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzR3JhZGllbnQuaWRsOyBwYXRo
ID0gY2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDk0ODRGQjYxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzUGF0dGVybi5jcHA7IHBhdGggPSBj
YW52YXMvQ2FudmFzUGF0dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5
NDg0RkI3MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc1BhdHRlcm4uaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNQ
YXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NDg0RkI4MTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52
YXNQYXR0ZXJuLmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0ODRGQjkxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1Bp
eGVsQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFz
UGl4ZWxBcnJheS5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NDg0RkJBMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52
YXNQaXhlbEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc1Bp
eGVsQXJyYXkuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ5NDg0RkJCMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQaXhl
bEFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNQaXhlbEFycmF5LmlkbDsg
cGF0aCA9IGNhbnZhcy9DYW52YXNQaXhlbEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDk0ODRGQkMxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NDg0RkJEMTAyQ0YyM0MwMDE4
N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg7IHBhdGggPSBjYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5
NDg0RkJFMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGw7IHBhdGgg
PSBjYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDk0ODRGQkYxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1N0eWxlLmNwcDsgcGF0
aCA9IGNhbnZhcy9DYW52YXNTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5NDg0RkMwMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNTdHlsZS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1N0
eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5NEJENzkzMEY1NUM4RUUwMDc0
NzgyOCAvKiBXZWJLaXRQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJLaXRQb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTRCRDc5NDBGNTVD
OEVFMDA3NDc4MjggLyogV2ViS2l0UG9pbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdl
YktpdFBvaW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk0QkQ3OTcwRjU1
QzkwRTAwNzQ3ODI4IC8qIEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjkyOCw3ICs2OTQ2LDYgQEAKIAkJODVGNTZB
NzkwQTk4Q0UzNzAwQURCNjBBIC8qIERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1RkYzMTU4MEFBRkJGQ0IwMDM3
NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01LZXlib2FyZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1
RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg5OEQxRkIyMEYyNzkzNEIwMDRCQkFDNyAvKiBDYW52
YXNQaXhlbEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbnZhc1Bp
eGVsQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTI5MjY0NzYwQjYxRkM3
MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02OTQzLDkgKzY5NjAsNiBAQAogCQk5MzA3RjFENTBB
RjJENTkwMDBEQkEzMUEgLyogSGl0VGVzdFJlc3VsdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSGl0VGVzdFJlc3VsdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzMDdGMUQ2MEFGMkQ1OTAwMERCQTMxQSAvKiBIaXRUZXN0UmVzdWx0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIaXRUZXN0UmVzdWx0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDkwODkwMEFGN0VERTQwMDgxREYwMSAvKiBIaXRUZXN0
UmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGl0VGVzdFJlcXVl
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTMwQ0FBRDYwOUM0OTVCNjAwMjI5
QzA0IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTMwQ0FCODgwOUM0OUVGQTAwMjI5QzA0IC8qIENhbnZhc0dyYWRpZW50LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBDYW52YXNHcmFkaWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTkzMENBQjhGMDlDNDlGMUIwMDIyOUMwNCAvKiBDYW52YXNQYXR0ZXJuLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDYW52YXNQYXR0ZXJuLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTMyN0E5NDEwOTk2OEQxQTAwNjhBNTQ2IC8qIEhUTUxPcHRpb25z
Q29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1M
T3B0aW9uc0NvbGxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzI4
NzFCRjBCMjBERUI3MDA0OTAzNUEgLyogUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMkUxNjA4MEFGNTc4MzQwMDI1RjQwOCAvKiBG
cmFtZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFt
ZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTQ3LDE5ICs3MTYx
LDExIEBACiAJCTkzRUVDMUU5MDlDMjg3NzcwMEM1MTVEMSAvKiBET01JbXBsZW1lbnRhdGlvbi5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRE9NSW1wbGVtZW50YXRpb24uaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0VFQzFFQTA5QzI4Nzc3MDBDNTE1RDEgLyogRWxlbWVu
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzRUVDMUVCMDlDMjg3NzcwMEM1MTVEMSAvKiBFbnRpdHkuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IEVudGl0eS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTkzRUVDMUVEMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNFRUMxRUUw
OUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNFRUMxRUYwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZh
c1N0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbnZhc1N0eWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzRUVDMUYwMDlDMjg3NzcwMEM1MTVEMSAv
KiBDYW52YXNHcmFkaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDYW52YXNHcmFkaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzRUVD
MUYxMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNHcmFkaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYW52YXNHcmFkaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5M0VFQzFGMjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXNQYXR0ZXJuLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMUYzMDlDMjg3NzcwMEM1MTVEMSAvKiBNdXRhdGlvbkV2
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNdXRhdGlvbkV2ZW50LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFRUMxRjQwOUMyODc3NzAwQzUxNUQxIC8qIE5vdGF0
aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOb3RhdGlvbi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMUY1MDlDMjg3NzcwMEM1MTVEMSAvKiBQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFByb2Nlc3NpbmdJbnN0cnVj
dGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMUY2MDlDMjg3Nzcw
MEM1MTVEMSAvKiBUZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBUZXh0LmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFRUMxRjcwOUMyODc3NzAwQzUxNUQxIC8qIFdo
ZWVsRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdoZWVsRXZlbnQuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0VFQzI2RTA5QzMyMTgwMDBDNTE1RDEgLyogQ2Fu
dmFzUGF0dGVybi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYW52
YXNQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNFRUMyNzAwOUMz
MjE4ODAwQzUxNUQxIC8qIENhbnZhc1N0eWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhbnZhc1N0eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNGMTlCMTkwODI0NUU1OTAwMUU5QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
cGxpc3QueG1sOyBwYXRoID0gSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzRjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAv
KiBXZWJDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNp
dEZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9
IFdlYkNvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQk5M0YxRDMxQTA1NThDQzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZHlsaWIiOyBuYW1lID0gbGliaWN1Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNv
cmUuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CkBAIC03MTgyLDggKzcxODgs
NiBAQAogCQk5N0RENEQ4NTBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU1NBdWRpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUExN0M4MTIwMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3Rv
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEVsZW1lbnRG
YWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3QzgxMjEwRjJBNUNG
NzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MRWxlbWVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTcwOTRBRjkwRjI3QUU2MDAwNTk2Q0VDIC8qIENhbnZhc1BpeGVsQXJyYXkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzUGl4ZWxBcnJheS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3MDk0QUZCMEYyN0FFRTMwMDU5NkNFQyAv
KiBDYW52YXNQaXhlbEFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDYW52YXNQaXhl
bEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxODc2MEQwQjJBMTIw
MTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERyYWdBY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTg3ODhG
MEIyRDA0QUMwMEExNkVDRSAvKiBEcmFnQ29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNzM1MkMxNzBCMUJCODlEMDBBOTg2RDAgLyogUmVuZGVyU1ZH
QmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNW
R0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDY5LDYgKzEwMDcz
LDI3IEBACiAJCQluYW1lID0gRXhwb3J0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07CisJCTQ5NDg0RkFFMTAyQ0YwMUUwMDE4N0REMyAvKiBjYW52YXMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTQ5NDg0RkIzMTAyQ0YyM0MwMDE4N0RE
MyAvKiBDYW52YXNHcmFkaWVudC5jcHAgKi8sCisJCQkJNDk0ODRGQjQxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc0dyYWRpZW50LmggKi8sCisJCQkJNDk0ODRGQjUxMDJDRjIzQzAwMTg3REQzIC8q
IENhbnZhc0dyYWRpZW50LmlkbCAqLywKKwkJCQk0OTQ4NEZCNjEwMkNGMjNDMDAxODdERDMgLyog
Q2FudmFzUGF0dGVybi5jcHAgKi8sCisJCQkJNDk0ODRGQjcxMDJDRjIzQzAwMTg3REQzIC8qIENh
bnZhc1BhdHRlcm4uaCAqLywKKwkJCQk0OTQ4NEZCODEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFz
UGF0dGVybi5pZGwgKi8sCisJCQkJNDk0ODRGQjkxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1Bp
eGVsQXJyYXkuY3BwICovLAorCQkJCTQ5NDg0RkJBMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQ
aXhlbEFycmF5LmggKi8sCisJCQkJNDk0ODRGQkIxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1Bp
eGVsQXJyYXkuaWRsICovLAorCQkJCTQ5NDg0RkJDMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwICovLAorCQkJCTQ5NDg0RkJEMTAyQ0YyM0MwMDE4N0REMyAv
KiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLywKKwkJCQk0OTQ4NEZCRTEwMkNGMjNDMDAx
ODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKKwkJCQk0OTQ4NEZCRjEw
MkNGMjNDMDAxODdERDMgLyogQ2FudmFzU3R5bGUuY3BwICovLAorCQkJCTQ5NDg0RkMwMTAyQ0Yy
M0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBjYW52YXM7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk0OUU5MTFCMjBFRjg2RDI3MDA5
RDBDQUYgLyogdHJhbnNmb3JtcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0xMTgwNywyMCArMTE4MzIsNyBAQAogCQk5M0VFQzFFQzA5QzI4Nzc3MDBDNTE1
RDEgLyogaHRtbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0J
CQkJOTNFRUMxRjAwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc0dyYWRpZW50LmNwcCAqLywKLQkJ
CQk5M0VFQzFGMTA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzR3JhZGllbnQuaCAqLywKLQkJCQk5
MzBDQUI4ODA5QzQ5RUZBMDAyMjlDMDQgLyogQ2FudmFzR3JhZGllbnQuaWRsICovLAotCQkJCTkz
RUVDMjZFMDlDMzIxODAwMEM1MTVEMSAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLywKLQkJCQk5M0VF
QzFGMjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5oICovLAotCQkJCTkzMENBQjhG
MDlDNDlGMUIwMDIyOUMwNCAvKiBDYW52YXNQYXR0ZXJuLmlkbCAqLywKLQkJCQlBNzA5NEFGOTBG
MjdBRTYwMDA1OTZDRUMgLyogQ2FudmFzUGl4ZWxBcnJheS5jcHAgKi8sCi0JCQkJODk4RDFGQjIw
RjI3OTM0QjAwNEJCQUM3IC8qIENhbnZhc1BpeGVsQXJyYXkuaCAqLywKLQkJCQlBNzA5NEFGQjBG
MjdBRUUzMDA1OTZDRUMgLyogQ2FudmFzUGl4ZWxBcnJheS5pZGwgKi8sCi0JCQkJOTNFRUMxRUQw
OUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8sCi0JCQkJ
OTNFRUMxRUUwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oICov
LAotCQkJCTkzMENBQUQ2MDlDNDk1QjYwMDIyOUMwNCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaWRsICovLAotCQkJCTkzRUVDMjcwMDlDMzIxODgwMEM1MTVEMSAvKiBDYW52YXNTdHlsZS5j
cHAgKi8sCi0JCQkJOTNFRUMxRUYwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1N0eWxlLmggKi8s
CisJCQkJNDk0ODRGQUUxMDJDRjAxRTAwMTg3REQzIC8qIGNhbnZhcyAqLywKIAkJCQk5M0M0NDFF
RDBGODEzQTFBMDBDMUE2MzQgLyogQ29sbGVjdGlvbkNhY2hlLmNwcCAqLywKIAkJCQk5M0M0NDFF
RTBGODEzQTFBMDBDMUE2MzQgLyogQ29sbGVjdGlvbkNhY2hlLmggKi8sCiAJCQkJOTNDNDQxRkYw
RjgxM0FFMTAwQzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggKi8sCkBAIC0xNDk2MywxMSArMTQ5
NzUsNiBAQAogCQkJCUJDQjE2QzI2MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRYQkxEb2N1bWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCMTZDMjgwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZFhTTFN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTUwMDgyNDVFNTkwMDFF
OUFCQyAvKiBDYWNoZVBvbGljeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTNFRUMyMDMwOUMyODc3
NzAwQzUxNUQxIC8qIENhbnZhc0dyYWRpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0VFQzIw
NDA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
ODk4RDFGQjMwRjI3OTM0QjAwNEJCQUM3IC8qIENhbnZhc1BpeGVsQXJyYXkuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTkzRUVDMjAwMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzRUVDMjAxMDlDMjg3NzcwMEM1MTVEMSAvKiBD
YW52YXNTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2OUUwOTlERjAyNzAwOTBENzgx
IC8qIENEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0MTg1RUUwQ0Q2NUYwNDAw
NzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUw
QjZBMDA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNzE3Myw2ICsxNzE4MCwxMSBAQAogCQkJCTBGRjUwMjYzMTAyQkE5MkMwMDY2RjM5QSAvKiBE
T01NZWRpYUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY1MDI2QTEwMkJBOTQzMDA2
NkYzOUEgLyogSlNNZWRpYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNTAyNzIxMDJCQTk2QTAw
NjZGMzlBIC8qIE1lZGlhLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTQ4NEZDMjEwMkNGMjNDMDAx
ODdERDMgLyogQ2FudmFzR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5NDg0RkM1MTAy
Q0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTQ4
NEZDODEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGl4ZWxBcnJheS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDk0ODRGQ0IxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDk0ODRGQ0UxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZh
c1N0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3Mjc0LDYgKzE3Mjg2LDEwIEBACiAJCQkJODUx
MzZDQTgwQUVENjY1OTAwRjkwQTNEIC8qIHdlc3RSZXNpemVDdXJzb3IucG5nIGluIFJlc291cmNl
cyAqLywKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBp
biBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRD
dXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKKwkJCQk0OTQ4NEZDMzEwMkNGMjNDMDAxODdERDMg
LyogQ2FudmFzR3JhZGllbnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OTQ4NEZDNjEwMkNG
MjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5
NDg0RkM5MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQaXhlbEFycmF5LmlkbCBpbiBSZXNvdXJj
ZXMgKi8sCisJCQkJNDk0ODRGQ0MxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTc0OTgsMTEgKzE3NTE0LDYgQEAKIAkJ
CQlCQ0IxNkMyMzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkU2NyaXB0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDQjE2QzI1MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRYQkxEb2N1bWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0IxNkMyNzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVk
WFNMU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0VFQzIwMjA5QzI4Nzc3MDBD
NTE1RDEgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNFRUMyNkYw
OUMzMjE4MDAwQzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
QTcwOTRBRkEwRjI3QUU2MDAwNTk2Q0VDIC8qIENhbnZhc1BpeGVsQXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOTNFRUMxRkYwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0VFQzI3MTA5QzMyMTg4MDBDNTE1RDEg
LyogQ2FudmFzU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1MEI2OUQwOTlERjAyNzAw
OTBENzgxIC8qIENEQVRBU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTQxODVFRjBD
RDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjU1MEI2OUYwOTlERjAyNzAwOTBENzgxIC8qIENoYXJhY3RlckRhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0xOTIyMCw2ICsxOTIzMSwxMSBAQAogCQkJCTBGRjUwMjVDMTAyQkE5MDEw
MDY2RjM5QSAvKiBET01NZWRpYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRjUwMjY5MTAyQkE5
NDMwMDY2RjM5QSAvKiBKU01lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjUwMjcxMTAy
QkE5NkEwMDY2RjM5QSAvKiBNZWRpYS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTQ4NEZDMTEw
MkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NDk0ODRGQzQxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNDk0ODRGQzcxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BpeGVsQXJyYXkuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDk0ODRGQ0ExMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTQ4NEZDRDEwMkNGMjND
MDAxODdERDMgLyogQ2FudmFzU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3Jl
L2h0bWwvQ2FudmFzR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52
YXNHcmFkaWVudC5jcHAJKHJldmlzaW9uIDQ2OTE5KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc0dy
YWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKLQotI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1DYW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQoY29uc3QgRmxv
YXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQotICAgIDogbV9ncmFkaWVudChHcmFk
aWVudDo6Y3JlYXRlKHAwLCBwMSkpCi0gICAgLCBtX2Rhc2hiYXJkQ29tcGF0aWJpbGl0eU1vZGUo
ZmFsc2UpCi17Ci19Ci0KLUNhbnZhc0dyYWRpZW50OjpDYW52YXNHcmFkaWVudChjb25zdCBGbG9h
dFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSkKLSAg
ICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShwMCwgcjAsIHAxLCByMSkpCi0gICAgLCBt
X2Rhc2hiYXJkQ29tcGF0aWJpbGl0eU1vZGUoZmFsc2UpCi17Ci19Ci0KLXZvaWQgQ2FudmFzR3Jh
ZGllbnQ6OmFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCEodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAxLjBm
KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgUkdCQTMyIHJnYmEgPSAwOwotICAgIGlmICghQ1NTUGFyc2VyOjpwYXJzZUNvbG9y
KHJnYmEsIGNvbG9yKSkgewotICAgICAgICBpZiAoIW1fZGFzaGJhcmRDb21wYXRpYmlsaXR5TW9k
ZSkKLSAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fZ3JhZGllbnQtPmFkZENvbG9yU3RvcCh2YWx1ZSwgQ29sb3IocmdiYSkpOwotfQot
Ci19IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmgJKHJldmlzaW9uIDQ2OTE5
KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbnZhc0dyYWRp
ZW50X2gKLSNkZWZpbmUgQ2FudmFzR3JhZGllbnRfaAotCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIK
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFN0cmluZzsKLQotICAgIHR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLSAgICBjbGFzcyBDYW52YXNHcmFkaWVudCA6IHB1Ymxp
YyBSZWZDb3VudGVkPENhbnZhc0dyYWRpZW50PiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAw
LCBjb25zdCBGbG9hdFBvaW50JiBwMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDYW52YXNHcmFkaWVudChwMCwgcDEpKTsKLSAgICAgICAgfQotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQm
IHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc0dyYWRpZW50KHAwLCByMCwg
cDEsIHIxKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEdyYWRpZW50KiBncmFkaWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnQuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGFk
ZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvciwgRXhjZXB0aW9uQ29k
ZSYpOwotCi0gICAgICAgIHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9h
dCogZywgZmxvYXQqIGIsIGZsb2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQtPmdldENvbG9yKHZh
bHVlLCByLCBnLCBiLCBhKTsgfQotCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAg
ICAgICB2b2lkIHNldERhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKCkgeyBtX2Rhc2hiYXJkQ29t
cGF0aWJpbGl0eU1vZGUgPSB0cnVlOyB9Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IENhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBw
MSk7Ci0gICAgICAgIENhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCBy
MCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKTsKLSAgICAgICAgCi0gICAgICAgIFJl
ZlB0cjxHcmFkaWVudD4gbV9ncmFkaWVudDsKLSAgICAgICAgYm9vbCBtX2Rhc2hiYXJkQ29tcGF0
aWJpbGl0eU1vZGU7Ci0gICAgfTsKLQotfSAvL25hbWVzcGFjZQotCi0jZW5kaWYKSW5kZXg6IFdl
YkNvcmUvaHRtbC9DYW52YXNHcmFkaWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0NhbnZhc0dyYWRpZW50LmlkbAkocmV2aXNpb24gNDY5MTkpCisrKyBXZWJDb3JlL2h0bWwvQ2Fu
dmFzR3JhZGllbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLW1vZHVsZSBodG1sIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIElu
dGVyZmFjZVVVSUQ9YmIxMTA4ZWEtNmI4Yy00YTA4LTg5NGEtMjE4NjI4NjMwY2RiLAotICAgICAg
ICBJbXBsZW1lbnRhdGlvblVVSUQ9YTI5NDJhZTYtMjczMS00Mjg2LTk4Y2MtOWQ1ZTc5ZTIwZGUx
Ci0gICAgXSBDYW52YXNHcmFkaWVudCB7Ci0KLSAgICAgICAgdm9pZCBhZGRDb2xvclN0b3AoaW4g
ZmxvYXQgb2Zmc2V0LCBpbiBET01TdHJpbmcgY29sb3IpCi0gICAgICAgICAgICByYWlzZXMgKERP
TUV4Y2VwdGlvbik7Ci0KLSAgICB9OwotCi19Ci0KSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNQ
YXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5jcHAJ
KHJldmlzaW9uIDQ2OTE5KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdm9pZCBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgYm9vbCYgcmVwZWF0WCwgYm9vbCYgcmVwZWF0WSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgZWMgPSAwOwotICAgIGlmICh0eXBlLmlzRW1wdHkoKSB8fCB0eXBlID09ICJyZXBl
YXQiKSB7Ci0gICAgICAgIHJlcGVhdFggPSB0cnVlOwotICAgICAgICByZXBlYXRZID0gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHlwZSA9PSAibm8tcmVwZWF0Iikgewot
ICAgICAgICByZXBlYXRYID0gZmFsc2U7Ci0gICAgICAgIHJlcGVhdFkgPSBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHlwZSA9PSAicmVwZWF0LXgiKSB7Ci0gICAgICAg
IHJlcGVhdFggPSB0cnVlOwotICAgICAgICByZXBlYXRZID0gZmFsc2U7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKHR5cGUgPT0gInJlcGVhdC15IikgewotICAgICAgICByZXBlYXRY
ID0gZmFsc2U7Ci0gICAgICAgIHJlcGVhdFkgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGVjID0gU1lOVEFYX0VSUjsKLX0KLQotQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVy
bihJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNs
ZWFuKQotICAgIDogbV9wYXR0ZXJuKFBhdHRlcm46OmNyZWF0ZShpbWFnZSwgcmVwZWF0WCwgcmVw
ZWF0WSkpCi0gICAgLCBtX29yaWdpbkNsZWFuKG9yaWdpbkNsZWFuKQotewotfQotCi19CkluZGV4
OiBXZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9DYW52YXNQYXR0ZXJuLmgJKHJldmlzaW9uIDQ2OTE5KQorKysgV2ViQ29yZS9odG1sL0NhbnZh
c1BhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBDYW52YXNQYXR0ZXJuX2gKLSNkZWZpbmUgQ2FudmFzUGF0dGVybl9oCi0KLSNp
bmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBJ
bWFnZTsKLSAgICBjbGFzcyBTdHJpbmc7Ci0KLSAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2Rl
OwotCi0gICAgY2xhc3MgQ2FudmFzUGF0dGVybiA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc1Bh
dHRlcm4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlUmVwZXRpdGlv
blR5cGUoY29uc3QgU3RyaW5nJiwgYm9vbCYgcmVwZWF0WCwgYm9vbCYgcmVwZWF0WSwgRXhjZXB0
aW9uQ29kZSYpOwotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IGNy
ZWF0ZShJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdp
bkNsZWFuKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZh
c1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBQYXR0ZXJuKiBwYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJu
LmdldCgpOyB9Ci0KLSAgICAgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZ2luQ2xlYW47IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENhbnZhc1BhdHRlcm4oSW1h
Z2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7Ci0KLSAg
ICAgICAgUmVmUHRyPFBhdHRlcm4+IG1fcGF0dGVybjsKLSAgICAgICAgYm9vbCBtX29yaWdpbkNs
ZWFuOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0NhbnZhc1BhdHRlcm4uaWRsCShyZXZpc2lvbiA0NjkxOSkKKysrIFdlYkNvcmUvaHRtbC9DYW52
YXNQYXR0ZXJuLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi1tb2R1bGUgaHRtbCB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBJbnRl
cmZhY2VVVUlEPWMyMTMxMzQ4LTZkOGMtNDdiNS04NmNjLWQ0MWFmZjM0Y2UxNSwKLSAgICAgICAg
SW1wbGVtZW50YXRpb25VVUlEPTgyZjVkNzEzLTNkMTctNDRkZC1hYTRhLTc3NjZmZTM0NTk0MAot
ICAgIF0gQ2FudmFzUGF0dGVybiB7Ci0KLSAgICB9OwotCi19Ci0KSW5kZXg6IFdlYkNvcmUvaHRt
bC9DYW52YXNQaXhlbEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFz
UGl4ZWxBcnJheS5jcHAJKHJldmlzaW9uIDQ2OTE5KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1Bp
eGVsQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICAKLSAgICBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IENhbnZh
c1BpeGVsQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENhbnZhc1BpeGVsQXJyYXkobGVuZ3RoKSk7Ci0gICAgfQotICAgIAot
ICAgIENhbnZhc1BpeGVsQXJyYXk6OkNhbnZhc1BpeGVsQXJyYXkodW5zaWduZWQgbGVuZ3RoKQot
ICAgICAgICA6IG1fZGF0YShXVEY6OkJ5dGVBcnJheTo6Y3JlYXRlKGxlbmd0aCkpCi0gICAgewot
ICAgIH0KLSAgICAKLX0KSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNQaXhlbEFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1BpeGVsQXJyYXkuaAkocmV2aXNpb24gNDY5
MTkpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzUGl4ZWxBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2FudmFzUGl4ZWxBcnJheV9oCi0jZGVmaW5l
IENhbnZhc1BpeGVsQXJyYXlfaAotCi0jaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotICAgIGNsYXNzIENhbnZhc1BpeGVsQXJyYXkgOiBwdWJsaWMg
UmVmQ291bnRlZDxDYW52YXNQaXhlbEFycmF5PiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsK
LSAgICAgICAgCi0gICAgICAgIFdURjo6Qnl0ZUFycmF5KiBkYXRhKCkgeyByZXR1cm4gbV9kYXRh
LmdldCgpOyB9Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS0+bGVuZ3RoKCk7IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4
LCBkb3VibGUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZGF0YS0+c2V0KGluZGV4
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVk
IGluZGV4LCB1bnNpZ25lZCBjaGFyJiByZXN1bHQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2RhdGEtPmdldChpbmRleCwgcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgQ2FudmFzUGl4ZWxBcnJheSh1bnNpZ25lZCBsZW5ndGgpOwotICAg
ICAgICBSZWZQdHI8V1RGOjpCeXRlQXJyYXk+IG1fZGF0YTsKLSAgICB9OwotICAgIAotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ2FudmFzUGl4ZWxBcnJheV9oCkluZGV4OiBX
ZWJDb3JlL2h0bWwvQ2FudmFzUGl4ZWxBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0NhbnZhc1BpeGVsQXJyYXkuaWRsCShyZXZpc2lvbiA0NjkxOSkKKysrIFdlYkNvcmUvaHRt
bC9DYW52YXNQaXhlbEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi1tb2R1bGUgaHRtbCB7Ci0jaWYgIWRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgfHwg
IUxBTkdVQUdFX0pBVkFTQ1JJUFQgfHwgZGVmaW5lZChWOF9CSU5ESU5HKSAmJiBWOF9CSU5ESU5H
Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ3VzdG9tSGVhZGVyLAotICAgICAgICBIYXNDdXN0
b21JbmRleEdldHRlciwKLSAgICAgICAgSGFzQ3VzdG9tSW5kZXhTZXR0ZXIKLSAgICBdIENhbnZh
c1BpeGVsQXJyYXkgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBsZW5ndGg7Ci0g
ICAgfTsKLSNlbmRpZgotfQpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAJKHJldmlzaW9uIDQ2OTE5KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU2NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKLQotI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKLSNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgotI2luY2x1ZGUgIkNhbnZhc1BhdHRl
cm4uaCIKLSNpbmNsdWRlICJDYW52YXNTdHlsZS5oIgotI2luY2x1ZGUgIkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUg
IkNTU1N0eWxlU2VsZWN0b3IuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxDYW52
YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5k
ZXJIVE1MQ2FudmFzLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgotI2luY2x1ZGUgIlRl
eHRNZXRyaWNzLmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgPHN0
ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWZh
dWx0Rm9udCA9ICIxMHB4IHNhbnMtc2VyaWYiOwotCi0KLWNsYXNzIENhbnZhc1N0cm9rZVN0eWxl
QXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIgewotcHVibGljOgotICAgIENhbnZh
c1N0cm9rZVN0eWxlQXBwbGllcihDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNhbnZhc0NvbnRl
eHQpCi0gICAgICAgIDogbV9jYW52YXNDb250ZXh0KGNhbnZhc0NvbnRleHQpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0KiBj
KQotICAgIHsKLSAgICAgICAgYy0+c2V0U3Ryb2tlVGhpY2tuZXNzKG1fY2FudmFzQ29udGV4dC0+
bGluZVdpZHRoKCkpOwotICAgICAgICBjLT5zZXRMaW5lQ2FwKG1fY2FudmFzQ29udGV4dC0+Z2V0
TGluZUNhcCgpKTsKLSAgICAgICAgYy0+c2V0TGluZUpvaW4obV9jYW52YXNDb250ZXh0LT5nZXRM
aW5lSm9pbigpKTsKLSAgICAgICAgYy0+c2V0TWl0ZXJMaW1pdChtX2NhbnZhc0NvbnRleHQtPm1p
dGVyTGltaXQoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCogbV9jYW52YXNDb250ZXh0OwotfTsKLQotCi0KLUNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMpCi0g
ICAgOiBtX2NhbnZhcyhjYW52YXMpCi0gICAgLCBtX3N0YXRlU3RhY2soMSkKLXsKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCBldmVuIGlmIHRoZSBkcmF3aW5nQ29udGV4dCgpIGhhcyBhIGRpZmZlcmVu
dCBkZWZhdWx0Ci0gICAgLy8gdGhpY2tuZXNzLCBpdCBpcyBpbiBzeW5jIHdpdGggdGhlIGNhbnZh
cyB0aGlja25lc3MuCi0gICAgc2V0TGluZVdpZHRoKGxpbmVXaWR0aCgpKTsKLX0KLQotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlZigpCi17Ci0gICAgbV9jYW52YXMtPnJlZigpOwot
fQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGVyZWYoKQotewotICAgIG1fY2Fu
dmFzLT5kZXJlZigpOyAKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KCkKLXsKLSAgICBtX3N0YXRlU3RhY2sucmVzaXplKDEpOwotICAgIG1fc3RhdGVTdGFjay5maXJz
dCgpID0gU3RhdGUoKTsKLX0KLQotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6U3Rh
dGUoKQotICAgIDogbV9zdHJva2VTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlKCJibGFjayIpKQot
ICAgICwgbV9maWxsU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZSgiYmxhY2siKSkKLSAgICAsIG1f
bGluZVdpZHRoKDEpCi0gICAgLCBtX2xpbmVDYXAoQnV0dENhcCkKLSAgICAsIG1fbGluZUpvaW4o
TWl0ZXJKb2luKQotICAgICwgbV9taXRlckxpbWl0KDEwKQotICAgICwgbV9zaGFkb3dCbHVyKDAp
Ci0gICAgLCBtX3NoYWRvd0NvbG9yKCJibGFjayIpCi0gICAgLCBtX2dsb2JhbEFscGhhKDEpCi0g
ICAgLCBtX2dsb2JhbENvbXBvc2l0ZShDb21wb3NpdGVTb3VyY2VPdmVyKQotICAgICwgbV9pbnZl
cnRpYmxlQ1RNKHRydWUpCi0gICAgLCBtX3RleHRBbGlnbihTdGFydFRleHRBbGlnbikKLSAgICAs
IG1fdGV4dEJhc2VsaW5lKEFscGhhYmV0aWNUZXh0QmFzZWxpbmUpCi0gICAgLCBtX3VucGFyc2Vk
Rm9udChkZWZhdWx0Rm9udCkKLSAgICAsIG1fcmVhbGl6ZWRGb250KGZhbHNlKQotewotfQotCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2F2ZSgpCi17Ci0gICAgQVNTRVJUKG1fc3Rh
dGVTdGFjay5zaXplKCkgPj0gMSk7Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChzdGF0ZSgpKTsK
LSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykK
LSAgICAgICAgcmV0dXJuOwotICAgIGMtPnNhdmUoKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnJlc3RvcmUoKQotewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgp
ID49IDEpOwotICAgIGlmIChtX3N0YXRlU3RhY2suc2l6ZSgpIDw9IDEpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX3BhdGgudHJhbnNmb3JtKHN0YXRlKCkubV90cmFuc2Zvcm0pOwotICAgIG1fc3Rh
dGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgbV9wYXRoLnRyYW5zZm9ybShzdGF0ZSgpLm1fdHJh
bnNmb3JtLmludmVyc2UoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRl
eHQoKTsKLSAgICBpZiAoIWMpCi0gICAgICAgIHJldHVybjsKLSAgICBjLT5yZXN0b3JlKCk7Ci19
Ci0KLUNhbnZhc1N0eWxlKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGUoKS5tX3N0cm9rZVN0eWxlLmdldCgpOwotfQotCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxD
YW52YXNTdHlsZT4gc3R5bGUpCi17Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigpKSB7Ci0gICAgICAgIGlmIChDYW52YXNQ
YXR0ZXJuKiBwYXR0ZXJuID0gc3R5bGUtPmNhbnZhc1BhdHRlcm4oKSkgewotICAgICAgICAgICAg
aWYgKCFwYXR0ZXJuLT5vcmlnaW5DbGVhbigpKQotICAgICAgICAgICAgICAgIG1fY2FudmFzLT5z
ZXRPcmlnaW5UYWludGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0ZSgpLm1fc3Ry
b2tlU3R5bGUgPSBzdHlsZTsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4
dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotICAgIHN0YXRlKCkubV9zdHJva2VT
dHlsZS0+YXBwbHlTdHJva2VDb2xvcihjKTsKLX0KLQotQ2FudmFzU3R5bGUqIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZmlsbFN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGUoKS5t
X2ZpbGxTdHlsZS5nZXQoKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dEZpbGxTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBzdHlsZSkKLXsKLSAgICBpZiAoIXN0
eWxlKQotICAgICAgICByZXR1cm47Ci0gCi0gICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigp
KSB7Ci0gICAgICAgIGlmIChDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0gc3R5bGUtPmNhbnZhc1Bh
dHRlcm4oKSkgewotICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5vcmlnaW5DbGVhbigpKQotICAg
ICAgICAgICAgICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWludGVkKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzdGF0ZSgpLm1fZmlsbFN0eWxlID0gc3R5bGU7Ci0gICAgR3JhcGhpY3NDb250
ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWMpCi0gICAgICAgIHJldHVybjsK
LSAgICBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5hcHBseUZpbGxDb2xvcihjKTsKLX0KLQotZmxvYXQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lV2lkdGgoKSBjb25zdAotewotICAgIHJldHVy
biBzdGF0ZSgpLm1fbGluZVdpZHRoOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0TGluZVdpZHRoKGZsb2F0IHdpZHRoKQotewotICAgIGlmICghKHdpZHRoID4gMCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBzdGF0ZSgpLm1fbGluZVdpZHRoID0gd2lkdGg7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWMpCi0gICAgICAg
IHJldHVybjsKLSAgICBjLT5zZXRTdHJva2VUaGlja25lc3Mod2lkdGgpOwotfQotCi1TdHJpbmcg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lQ2FwKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bGluZUNhcE5hbWUoc3RhdGUoKS5tX2xpbmVDYXApOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0TGluZUNhcChjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgTGluZUNhcCBj
YXA7Ci0gICAgaWYgKCFwYXJzZUxpbmVDYXAocywgY2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHN0YXRlKCkubV9saW5lQ2FwID0gY2FwOwotICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdp
bmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm47Ci0gICAgYy0+c2V0TGlu
ZUNhcChjYXApOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lSm9p
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxpbmVKb2luTmFtZShzdGF0ZSgpLm1fbGluZUpvaW4p
OwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZUpvaW4oY29uc3Qg
U3RyaW5nJiBzKQotewotICAgIExpbmVKb2luIGpvaW47Ci0gICAgaWYgKCFwYXJzZUxpbmVKb2lu
KHMsIGpvaW4pKQotICAgICAgICByZXR1cm47Ci0gICAgc3RhdGUoKS5tX2xpbmVKb2luID0gam9p
bjsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICgh
YykKLSAgICAgICAgcmV0dXJuOwotICAgIGMtPnNldExpbmVKb2luKGpvaW4pOwotfQotCi1mbG9h
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1pdGVyTGltaXQoKSBjb25zdAotewotICAgIHJl
dHVybiBzdGF0ZSgpLm1fbWl0ZXJMaW1pdDsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaWYgKCEobGltaXQgPiAw
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN0YXRlKCkubV9taXRlckxpbWl0ID0gbGltaXQ7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWMpCi0g
ICAgICAgIHJldHVybjsKLSAgICBjLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLX0KLQotZmxvYXQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzaGFkb3dPZmZzZXRYKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc3RhdGUoKS5tX3NoYWRvd09mZnNldC53aWR0aCgpOwotfQotCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93T2Zmc2V0WChmbG9hdCB4KQotewotICAgIHN0YXRl
KCkubV9zaGFkb3dPZmZzZXQuc2V0V2lkdGgoeCk7Ci0gICAgYXBwbHlTaGFkb3coKTsKLX0KLQot
ZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzaGFkb3dPZmZzZXRZKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3RhdGUoKS5tX3NoYWRvd09mZnNldC5oZWlnaHQoKTsKLX0KLQotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvd09mZnNldFkoZmxvYXQgeSkKLXsKLSAg
ICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LnNldEhlaWdodCh5KTsKLSAgICBhcHBseVNoYWRvdygp
OwotfQotCi1mbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNoYWRvd0JsdXIoKSBjb25z
dAotewotICAgIHJldHVybiBzdGF0ZSgpLm1fc2hhZG93Qmx1cjsKLX0KLQotdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvd0JsdXIoZmxvYXQgYmx1cikKLXsKLSAgICBzdGF0
ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgYXBwbHlTaGFkb3coKTsKLX0KLQotU3RyaW5n
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2hhZG93Q29sb3IoKSBjb25zdAotewotICAgIC8v
IEZJWE1FOiBXaGF0IHNob3VsZCB0aGlzIHJldHVybiBpZiB5b3UgY2FsbGVkIHNldFNoYWRvdyB3
aXRoIGEgbm9uLXN0cmluZyBjb2xvcj8KLSAgICByZXR1cm4gc3RhdGUoKS5tX3NoYWRvd0NvbG9y
OwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93Q29sb3IoY29u
c3QgU3RyaW5nJiBjb2xvcikKLXsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBjb2xvcjsK
LSAgICBhcHBseVNoYWRvdygpOwotfQotCi1mbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
Omdsb2JhbEFscGhhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGUoKS5tX2dsb2JhbEFscGhh
OwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0R2xvYmFsQWxwaGEoZmxv
YXQgYWxwaGEpCi17Ci0gICAgaWYgKCEoYWxwaGEgPj0gMCAmJiBhbHBoYSA8PSAxKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHN0YXRlKCkubV9nbG9iYWxBbHBoYSA9IGFscGhhOwotICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjKQotICAgICAgICBy
ZXR1cm47Ci0gICAgYy0+c2V0QWxwaGEoYWxwaGEpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBjb21wb3NpdGVPcGVyYXRvck5hbWUoc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSk7Ci19
Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVy
YXRpb24oY29uc3QgU3RyaW5nJiBvcGVyYXRpb24pCi17Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
b3A7Ci0gICAgaWYgKCFwYXJzZUNvbXBvc2l0ZU9wZXJhdG9yKG9wZXJhdGlvbiwgb3ApKQotICAg
ICAgICByZXR1cm47Ci0gICAgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSA9IG9wOwotICAgIEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjKQotICAgICAg
ICByZXR1cm47Ci0gICAgYy0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLX0KLQotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKLXsKLSAg
ICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCi0gICAgICAg
IHJldHVybjsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG5ld1RyYW5zZm9ybSA9IHN0YXRl
KCkubV90cmFuc2Zvcm07Ci0gICAgbmV3VHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShzeCwgc3kp
OwotICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIHN0YXRl
KCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwotICAgIGMtPnNjYWxlKEZsb2F0
U2l6ZShzeCwgc3kpKTsKLSAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4
KCkuc2NhbGVOb25Vbmlmb3JtKDEuMC9zeCwgMS4wL3N5KSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCi17Ci0gICAgR3Jh
cGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWMpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1f
dHJhbnNmb3JtOwotICAgIG5ld1RyYW5zZm9ybS5yb3RhdGUoYW5nbGVJblJhZGlhbnMgLyBwaURv
dWJsZSAqIDE4MC4wKTsKLSAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgewot
ICAgICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKLSAgICBj
LT5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgIG1fcGF0aC50cmFuc2Zvcm0oVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKS5yb3RhdGUoLWFuZ2xlSW5SYWRpYW5zIC8gcGlEb3VibGUgKiAxODAuMCkp
OwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNsYXRlKGZsb2F0IHR4
LCBmbG9hdCB0eSkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgp
OwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG5l
d1RyYW5zZm9ybSA9IHN0YXRlKCkubV90cmFuc2Zvcm07Ci0gICAgbmV3VHJhbnNmb3JtLnRyYW5z
bGF0ZSh0eCwgdHkpOwotICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7Ci0g
ICAgICAgIHN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwotICAgIGMt
PnRyYW5zbGF0ZSh0eCwgdHkpOwotICAgIG1fcGF0aC50cmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgoKS50cmFuc2xhdGUoLXR4LCAtdHkpKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnRyYW5zZm9ybShmbG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9h
dCBtMjIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
c3RhdGUoKS5tX2ludmVydGlibGVDVE0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBI
VE1MNSAzLjE0LjExLjEgLS0gaWdub3JlIGFueSBjYWxscyB0aGF0IHBhc3Mgbm9uLWZpbml0ZSBu
dW1iZXJzCi0gICAgaWYgKCFpc2Zpbml0ZShtMTEpIHwgIWlzZmluaXRlKG0yMSkgfCAhaXNmaW5p
dGUoZHgpIHwgCi0gICAgICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0yMikgfCAhaXNm
aW5pdGUoZHkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0obTExLCBtMTIsIG0yMSwgbTIyLCBkeCwgZHkpOwotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG5ld1RyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIHN0YXRlKCkubV90cmFuc2Zvcm07Ci0g
ICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKLSAgICAgICAgc3RhdGUoKS5t
X2ludmVydGlibGVDVE0gPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0
YXRlKCkubV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07Ci0gICAgYy0+Y29uY2F0Q1RNKHRyYW5z
Zm9ybSk7Ci0gICAgbV9wYXRoLnRyYW5zZm9ybSh0cmFuc2Zvcm0uaW52ZXJzZSgpKTsKLX0KLQot
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFRyYW5zZm9ybShmbG9hdCBtMTEsIGZs
b2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBtMjIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKLXsKLSAg
ICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEhUTUw1IDMuMTQuMTEuMSAtLSBpZ25vcmUgYW55
IGNhbGxzIHRoYXQgcGFzcyBub24tZmluaXRlIG51bWJlcnMKLSAgICBpZiAoIWlzZmluaXRlKG0x
MSkgfCAhaXNmaW5pdGUobTIxKSB8ICFpc2Zpbml0ZShkeCkgfCAKLSAgICAgICAgIWlzZmluaXRl
KG0xMikgfCAhaXNmaW5pdGUobTIyKSB8ICFpc2Zpbml0ZShkeSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07Ci0g
ICAgaWYgKCFjdG0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBjLT5jb25j
YXRDVE0oYy0+Z2V0Q1RNKCkuaW52ZXJzZSgpKTsKLSAgICBjLT5jb25jYXRDVE0obV9jYW52YXMt
PmJhc2VUcmFuc2Zvcm0oKSk7Ci0gICAgc3RhdGUoKS5tX3RyYW5zZm9ybS5tdWx0aXBseShjdG0u
aW52ZXJzZSgpKTsKLSAgICBtX3BhdGgudHJhbnNmb3JtKGN0bSk7Ci0KLSAgICBzdGF0ZSgpLm1f
aW52ZXJ0aWJsZUNUTSA9IHRydWU7Ci0gICAgdHJhbnNmb3JtKG0xMSwgbTEyLCBtMjEsIG0yMiwg
ZHgsIGR5KTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNv
bG9yKGNvbnN0IFN0cmluZyYgY29sb3IpCi17Ci0gICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5
bGU6OmNyZWF0ZShjb2xvcikpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0U3Ryb2tlQ29sb3IoZmxvYXQgZ3JheUxldmVsKQotewotICAgIHNldFN0cm9rZVN0eWxlKENh
bnZhc1N0eWxlOjpjcmVhdGUoZ3JheUxldmVsLCAxKSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBh
bHBoYSkKLXsKLSAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlKGNvbG9yLCBh
bHBoYSkpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlQ29s
b3IoZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBzZXRTdHJva2VTdHlsZShD
YW52YXNTdHlsZTo6Y3JlYXRlKGdyYXlMZXZlbCwgYWxwaGEpKTsKLX0KLQotdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0
IGIsIGZsb2F0IGEpCi17Ci0gICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZShy
LCBnLCBiLCBhKSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJv
a2VDb2xvcihmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQotewot
ICAgIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUoYywgbSwgeSwgaywgYSkpOwot
fQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGNvbnN0IFN0
cmluZyYgY29sb3IpCi17Ci0gICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUoY29s
b3IpKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcihm
bG9hdCBncmF5TGV2ZWwpCi17Ci0gICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUo
Z3JheUxldmVsLCAxKSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRG
aWxsQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpCi17Ci0gICAgc2V0Rmls
bFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUoY29sb3IsIGFscGhhKSk7Ci19Ci0KLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IoZmxvYXQgZ3JheUxldmVsLCBmbG9h
dCBhbHBoYSkKLXsKLSAgICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZShncmF5TGV2
ZWwsIGFscGhhKSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxs
Q29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKLXsKLSAgICBzZXRGaWxs
U3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZShyLCBnLCBiLCBhKSk7Ci19Ci0KLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQg
eSwgZmxvYXQgaywgZmxvYXQgYSkKLXsKLSAgICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGU6OmNy
ZWF0ZShjLCBtLCB5LCBrLCBhKSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpiZWdpblBhdGgoKQotewotICAgIG1fcGF0aC5jbGVhcigpOwotfQotCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Y2xvc2VQYXRoKCkKLXsKLSAgICBtX3BhdGguY2xvc2VTdWJwYXRo
KCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjptb3ZlVG8oZmxvYXQgeCwg
ZmxvYXQgeSkKLXsKLSAgICBpZiAoIWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7Ci19Ci0KLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lVG8oZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBp
ZiAoIWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9w
YXRoLmhhc0N1cnJlbnRQb2ludCgpKQotICAgICAgICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQo
eCwgeSkpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgs
IHkpKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnF1YWRyYXRpY0N1cnZl
VG8oZmxvYXQgY3B4LCBmbG9hdCBjcHksIGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgaWYgKCFp
c2Zpbml0ZShjcHgpIHwgIWlzZmluaXRlKGNweSkgfCAhaXNmaW5pdGUoeCkgfCAhaXNmaW5pdGUo
eSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX3BhdGguaGFzQ3VycmVudFBvaW50KCkpCi0gICAg
ICAgIG1fcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7Ci0gICAgZWxzZQotICAgICAgICBt
X3BhdGguYWRkUXVhZEN1cnZlVG8oRmxvYXRQb2ludChjcHgsIGNweSksIEZsb2F0UG9pbnQoeCwg
eSkpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YmV6aWVyQ3VydmVUbyhm
bG9hdCBjcDF4LCBmbG9hdCBjcDF5LCBmbG9hdCBjcDJ4LCBmbG9hdCBjcDJ5LCBmbG9hdCB4LCBm
bG9hdCB5KQotewotICAgIGlmICghaXNmaW5pdGUoY3AxeCkgfCAhaXNmaW5pdGUoY3AxeSkgfCAh
aXNmaW5pdGUoY3AyeCkgfCAhaXNmaW5pdGUoY3AyeSkgfCAhaXNmaW5pdGUoeCkgfCAhaXNmaW5p
dGUoeSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RN
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX3BhdGguaGFzQ3VycmVudFBvaW50KCkpCi0g
ICAgICAgIG1fcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX3BhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KGNwMXgsIGNwMXkpLCBGbG9hdFBv
aW50KGNwMngsIGNwMnkpLCBGbG9hdFBvaW50KHgsIHkpKTsKLX0KLQotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmFyY1RvKGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZsb2F0
IHkxLCBmbG9hdCByLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYg
KCFpc2Zpbml0ZSh4MCkgfCAhaXNmaW5pdGUoeTApIHwgIWlzZmluaXRlKHgxKSB8ICFpc2Zpbml0
ZSh5MSkgfCAhaXNmaW5pdGUocikpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAociA8
IDApIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9wYXRoLmFkZEFyY1RvKEZsb2F0UG9pbnQoeDAsIHkwKSwgRmxvYXRQb2ludCh4MSwgeTEp
LCByKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyYyhmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wgYW50aWNsb2Nrd2lzZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmICghaXNmaW5pdGUoeCkg
fCAhaXNmaW5pdGUoeSkgfCAhaXNmaW5pdGUocikgfCAhaXNmaW5pdGUoc2EpIHwgIWlzZmluaXRl
KGVhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChyIDwgMCkgewotICAgICAgICBl
YyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghc3Rh
dGUoKS5tX2ludmVydGlibGVDVE0pCi0gICAgICAgIHJldHVybjsKLSAgICBtX3BhdGguYWRkQXJj
KEZsb2F0UG9pbnQoeCwgeSksIHIsIHNhLCBlYSwgYW50aWNsb2Nrd2lzZSk7Ci19Ci0gICAgCi1z
dGF0aWMgYm9vbCB2YWxpZGF0ZVJlY3RGb3JDYW52YXMoZmxvYXQmIHgsIGZsb2F0JiB5LCBmbG9h
dCYgd2lkdGgsIGZsb2F0JiBoZWlnaHQpCi17Ci0gICAgaWYgKCFpc2Zpbml0ZSh4KSB8ICFpc2Zp
bml0ZSh5KSB8ICFpc2Zpbml0ZSh3aWR0aCkgfCAhaXNmaW5pdGUoaGVpZ2h0KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICh3aWR0aCA8IDApIHsKLSAgICAgICAgd2lkdGgg
PSAtd2lkdGg7Ci0gICAgICAgIHggLT0gd2lkdGg7Ci0gICAgfQotICAgIAotICAgIGlmIChoZWln
aHQgPCAwKSB7Ci0gICAgICAgIGhlaWdodCA9IC1oZWlnaHQ7Ci0gICAgICAgIHkgLT0gaGVpZ2h0
OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCkKLXsKLSAgICBpZiAoIXZhbGlkYXRlUmVjdEZvckNhbnZhcyh4LCB5LCB3aWR0aCwgaGVp
Z2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0p
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3BhdGguYWRkUmVjdChGbG9hdFJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOwotfQotCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29t
cGF0aWJpbGl0eU1vZGUoKQotewotICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2NhbnZh
cy0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKLSAgICAgICAgaWYgKHNldHRpbmdzLT51c2VzRGFz
aGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQotICAgICAgICAgICAgbV9wYXRoLmNs
ZWFyKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwo
KQotewotICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7Ci0gICAgaWYg
KCFjKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGMtPmJlZ2luUGF0aCgpOwotICAgICAgICBjLT5hZGRQYXRoKG1fcGF0aCk7Ci0gICAgICAgIHdp
bGxEcmF3KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7Ci0gICAgICAgIGMtPmZpbGxQYXRoKCk7Ci0g
ICAgfQotCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIGNsZWFyUGF0aEZvckRh
c2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsKLSNlbmRpZgotfQotCi12b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQq
IGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbV9wYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBjLT5iZWdpblBhdGgoKTsKLSAgICAgICAg
Yy0+YWRkUGF0aChtX3BhdGgpOwotCi0gICAgICAgIENhbnZhc1N0cm9rZVN0eWxlQXBwbGllciBz
dHJva2VBcHBsaWVyKHRoaXMpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gbV9w
YXRoLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlQXBwbGllcik7Ci0gICAgICAgIHdpbGxEcmF3
KGJvdW5kaW5nUmVjdCk7Ci0KLSAgICAgICAgYy0+c3Ryb2tlUGF0aCgpOwotICAgIH0KLQotI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICBjbGVhclBhdGhGb3JEYXNoYm9hcmRCYWNr
d2FyZENvbXBhdGliaWxpdHlNb2RlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmNsaXAoKQotewotICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdD
b250ZXh0KCk7Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgp
Lm1faW52ZXJ0aWJsZUNUTSkKLSAgICAgICAgcmV0dXJuOwotICAgIGMtPmNsaXAobV9wYXRoKTsK
LSNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0gICAgY2xlYXJQYXRoRm9yRGFzaGJvYXJk
QmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpOwotI2VuZGlmCi19Ci0KLWJvb2wgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjppc1BvaW50SW5QYXRoKGNvbnN0IGZsb2F0IHgsIGNvbnN0IGZsb2F0
IHkpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBp
ZiAoIWMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRp
YmxlQ1RNKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFBvaW50IHBvaW50KHgs
IHkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN0bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07
Ci0gICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1lZFBvaW50ID0gY3RtLmludmVyc2UoKS5tYXBQb2lu
dChwb2ludCk7Ci0gICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyh0cmFuc2Zvcm1lZFBvaW50KTsK
LX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsZWFyUmVjdChmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQotewotICAgIGlmICghdmFsaWRhdGVS
ZWN0Rm9yQ2FudmFzKHgsIHksIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAg
R3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWMpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQotICAgICAgICBy
ZXR1cm47Ci0gICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgd2ls
bERyYXcocmVjdCk7Ci0gICAgYy0+Y2xlYXJSZWN0KHJlY3QpOwotfQotCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6ZmlsbFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgs
IGZsb2F0IGhlaWdodCkKLXsKLSAgICBpZiAoIXZhbGlkYXRlUmVjdEZvckNhbnZhcyh4LCB5LCB3
aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWMpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9h
dFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB3aWxsRHJhdyhyZWN0KTsKLQot
ICAgIGMtPnNhdmUoKTsKLSAgICBjLT5maWxsUmVjdChyZWN0KTsKLSAgICBjLT5yZXN0b3JlKCk7
Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VSZWN0KGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCi17Ci0gICAgaWYgKCF2YWxpZGF0
ZVJlY3RGb3JDYW52YXMoeCwgeSwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBzdHJva2VSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQsIHN0YXRlKCkubV9saW5lV2lkdGgpOwot
fQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdChmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0g
ICAgaWYgKCF2YWxpZGF0ZVJlY3RGb3JDYW52YXMoeCwgeSwgd2lkdGgsIGhlaWdodCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIShsaW5lV2lkdGggPj0gMCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7Ci0gICAg
aWYgKCFjKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNU
TSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci0KLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKLSAgICBib3VuZGlu
Z1JlY3QuaW5mbGF0ZShsaW5lV2lkdGggLyAyKTsKLSAgICB3aWxsRHJhdyhib3VuZGluZ1JlY3Qp
OwotCi0gICAgYy0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotfQotCi0jaWYgUExBVEZP
Uk0oQ0cpCi1zdGF0aWMgaW5saW5lIENHU2l6ZSBhZGp1c3RlZFNoYWRvd1NpemUoQ0dGbG9hdCB3
aWR0aCwgQ0dGbG9hdCBoZWlnaHQpCi17Ci0gICAgLy8gV29yayBhcm91bmQgPHJkYXI6Ly9wcm9i
bGVtLzU1MzkzODg+IGJ5IGVuc3VyaW5nIHRoYXQgc2hhZG93IG9mZnNldHMgd2lsbCBnZXQgdHJ1
bmNhdGVkCi0gICAgLy8gdG8gdGhlIGRlc2lyZWQgaW50ZWdlci4KLSAgICBzdGF0aWMgY29uc3Qg
Q0dGbG9hdCBleHRyYVNoYWRvd09mZnNldCA9IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCgxLjAg
LyAxMjgpOwotICAgIGlmICh3aWR0aCA+IDApCi0gICAgICAgIHdpZHRoICs9IGV4dHJhU2hhZG93
T2Zmc2V0OwotICAgIGVsc2UgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgd2lkdGggLT0gZXh0cmFT
aGFkb3dPZmZzZXQ7Ci0KLSAgICBpZiAoaGVpZ2h0ID4gMCkKLSAgICAgICAgaGVpZ2h0ICs9IGV4
dHJhU2hhZG93T2Zmc2V0OwotICAgIGVsc2UgaWYgKGhlaWdodCA8IDApCi0gICAgICAgIGhlaWdo
dCAtPSBleHRyYVNoYWRvd09mZnNldDsKLQotICAgIHJldHVybiBDR1NpemVNYWtlKHdpZHRoLCBo
ZWlnaHQpOwotfQotI2VuZGlmCi0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRT
aGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1cikKLXsKLSAgICBzdGF0
ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgIHN0YXRl
KCkubV9zaGFkb3dCbHVyID0gYmx1cjsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSAiIjsK
LSAgICBhcHBseVNoYWRvdygpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGNvbnN0IFN0
cmluZyYgY29sb3IpCi17Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgc3Rh
dGUoKS5tX3NoYWRvd0NvbG9yID0gY29sb3I7Ci0gICAgYXBwbHlTaGFkb3coKTsKLX0KLQotdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5TGV2ZWwpCi17Ci0gICAgc3RhdGUoKS5tX3No
YWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICBzdGF0ZSgpLm1fc2hh
ZG93Qmx1ciA9IGJsdXI7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gIiI7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUkdCQTMyIHJnYmEgPSBtYWtlUkdCQTMyRnJvbUZsb2F0cyhncmF5
TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCAxLjBmKTsKLSAgICBjLT5zZXRTaGFkb3coSW50
U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBDb2xvcihyZ2JhKSk7
Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3coZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQg
YWxwaGEpCi17Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgc3RhdGUoKS5t
X3NoYWRvd0NvbG9yID0gY29sb3I7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5n
Q29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUkdCQTMyIHJn
YmEgPSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyZW50IGJsYWNrCi0gICAgaWYgKCFzdGF0ZSgp
Lm1fc2hhZG93Q29sb3IuaXNFbXB0eSgpKQotICAgICAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3Io
cmdiYSwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yKTsKLSAgICBjLT5zZXRTaGFkb3coSW50U2l6ZSh3
aWR0aCwgLWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBDb2xvcihjb2xvcldpdGhPdmVy
cmlkZUFscGhhKHJnYmEsIGFscGhhKSkpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZs
b2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCi17Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNl
dCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9
IGJsdXI7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gIiI7Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUkdCQTMyIHJnYmEgPSBtYWtlUkdCQTMyRnJvbUZsb2F0cyhncmF5TGV2ZWwsIGdy
YXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSk7Ci0gICAgYy0+c2V0U2hhZG93KEludFNpemUod2lk
dGgsIC1oZWlnaHQpLCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgQ29sb3IocmdiYSkpOwotfQotCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEp
Ci17Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgc3RhdGUoKS5tX3NoYWRv
d0NvbG9yID0gIiI7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgp
OwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUkdCQTMyIHJnYmEgPSBtYWtl
UkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmVudCBi
bGFjawotICAgIGlmICghc3RhdGUoKS5tX3NoYWRvd0NvbG9yLmlzRW1wdHkoKSkKLSAgICAgICAg
Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIHN0YXRlKCkubV9zaGFkb3dDb2xvcik7Ci0gICAg
Yy0+c2V0U2hhZG93KEludFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLm1fc2hhZG93Qmx1
ciwgQ29sb3IocmdiYSkpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGMsIGZs
b2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCi17Ci0gICAgc3RhdGUoKS5tX3NoYWRv
d09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93
Qmx1ciA9IGJsdXI7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gIiI7Ci0KLSAgICBHcmFw
aGljc0NvbnRleHQqIGRjID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWRjKQotICAgICAg
ICByZXR1cm47Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgY29uc3QgQ0dGbG9hdCBjb21wb25lbnRz
WzVdID0geyBjLCBtLCB5LCBrLCBhIH07Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2Ug
PSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VDTVlLKCk7Ci0gICAgQ0dDb2xvclJlZiBzaGFkb3dD
b2xvciA9IENHQ29sb3JDcmVhdGUoY29sb3JTcGFjZSwgY29tcG9uZW50cyk7Ci0gICAgQ0dDb2xv
clNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKLSAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29s
b3IoZGMtPnBsYXRmb3JtQ29udGV4dCgpLCBhZGp1c3RlZFNoYWRvd1NpemUod2lkdGgsIC1oZWln
aHQpLCBibHVyLCBzaGFkb3dDb2xvcik7Ci0gICAgQ0dDb2xvclJlbGVhc2Uoc2hhZG93Q29sb3Ip
OwotI2Vsc2UKLSAgICBkYy0+c2V0U2hhZG93KEludFNpemUod2lkdGgsIC1oZWlnaHQpLCBibHVy
LCBDb2xvcihjLCBtLCB5LCBrLCBhKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmNsZWFyU2hhZG93KCkKLXsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0
ID0gRmxvYXRTaXplKCk7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSAwOwotICAgIHN0YXRl
KCkubV9zaGFkb3dDb2xvciA9ICIiOwotICAgIGFwcGx5U2hhZG93KCk7Ci19Ci0KLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcHBseVNoYWRvdygpCi17Ci0gICAgR3JhcGhpY3NDb250
ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJHQkEzMiByZ2JhID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmVudCBibGFjawot
ICAgIGlmICghc3RhdGUoKS5tX3NoYWRvd0NvbG9yLmlzRW1wdHkoKSkKLSAgICAgICAgQ1NTUGFy
c2VyOjpwYXJzZUNvbG9yKHJnYmEsIHN0YXRlKCkubV9zaGFkb3dDb2xvcik7Ci0gICAgZmxvYXQg
d2lkdGggPSBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAgZmxvYXQgaGVpZ2h0
ID0gc3RhdGUoKS5tX3NoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICBjLT5zZXRTaGFkb3coSW50
U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkubV9zaGFkb3dCbHVyLCBDb2xvcihyZ2JhKSk7
Ci19Ci0KLXN0YXRpYyBJbnRTaXplIHNpemUoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCi17Ci0g
ICAgaWYgKENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpKQot
ICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2UtPmltYWdlU2l6ZSgxLjBmKTsgLy8gRklYTUU6IE5v
dCBzdXJlIGFib3V0IHRoaXMuCi0gICAgcmV0dXJuIEludFNpemUoKTsKLX0KLQotI2lmIEVOQUJM
RShWSURFTykKLXN0YXRpYyBJbnRTaXplIHNpemUoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8pCi17
Ci0gICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSB2aWRlby0+cGxheWVyKCkpCi0gICAgICAg
IHJldHVybiBwbGF5ZXItPm5hdHVyYWxTaXplKCk7Ci0gICAgcmV0dXJuIEludFNpemUoKTsKLX0K
LSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBub3JtYWxpemVSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihyZWN0LngoKSwgcmVj
dC5yaWdodCgpKSwKLSAgICAgICAgbWluKHJlY3QueSgpLCByZWN0LmJvdHRvbSgpKSwKLSAgICAg
ICAgbWF4KHJlY3Qud2lkdGgoKSwgLXJlY3Qud2lkdGgoKSksCi0gICAgICAgIG1heChyZWN0Lmhl
aWdodCgpLCAtcmVjdC5oZWlnaHQoKSkpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6Y2hlY2tPcmlnaW4oY29uc3QgS1VSTCYgdXJsKQotewotICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwotICAgIGlmICgh
bV9jYW52YXMtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhvcmlnaW4u
Z2V0KCkpKQotICAgICAgICBtX2NhbnZhcy0+c2V0T3JpZ2luVGFpbnRlZCgpOwotfQotCi12b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2hlY2tPcmlnaW4oY29uc3QgU3RyaW5nJiB1cmwp
Ci17Ci0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlRnJvbVN0cmluZyh1cmwpOwotICAgIGlmICghbV9jYW52YXMtPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhvcmlnaW4uZ2V0KCkpKQotICAgICAgICBtX2NhbnZh
cy0+c2V0T3JpZ2luVGFpbnRlZCgpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBmbG9hdCB4LCBmbG9hdCB5KQot
ewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgSW50U2l6ZSBzID0gc2l6ZShpbWFnZSk7Ci0gICAg
RXhjZXB0aW9uQ29kZSBlYzsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHMud2lkdGgoKSwg
cy5oZWlnaHQoKSwgZWMpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
d0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLAotICAgIGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VS
VChpbWFnZSk7Ci0gICAgSW50U2l6ZSBzID0gc2l6ZShpbWFnZSk7Ci0gICAgZHJhd0ltYWdlKGlt
YWdlLCBGbG9hdFJlY3QoMCwgMCwgcy53aWR0aCgpLCBzLmhlaWdodCgpKSwgRmxvYXRSZWN0KHgs
IHksIHdpZHRoLCBoZWlnaHQpLCBlYyk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAotICAgIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0KLSAgICBlYyA9IDA7Ci0KLSAgICBGbG9hdFJlY3Qg
aW1hZ2VSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZShpbWFnZSkpOwotICAgIGlm
ICghaW1hZ2VSZWN0LmNvbnRhaW5zKG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCkpIHx8IHNyY1JlY3Qu
d2lkdGgoKSA9PSAwIHx8IHNyY1JlY3QuaGVpZ2h0KCkgPT0gMCkgewotICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFkc3RSZWN0
LndpZHRoKCkgfHwgIWRzdFJlY3QuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdl
KCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
Y2FudmFzLT5vcmlnaW5DbGVhbigpKQotICAgICAgICBjaGVja09yaWdpbihjYWNoZWRJbWFnZS0+
cmVzcG9uc2UoKS51cmwoKSk7Ci0KLSAgICBpZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkgJiYg
IWNhY2hlZEltYWdlLT5pbWFnZSgpLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpKQotICAgICAg
ICBtX2NhbnZhcy0+c2V0T3JpZ2luVGFpbnRlZCgpOwotCi0gICAgRmxvYXRSZWN0IHNvdXJjZVJl
Y3QgPSBjLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHNyY1JlY3QpOwotICAgIEZsb2F0UmVjdCBkZXN0
UmVjdCA9IGMtPnJvdW5kVG9EZXZpY2VQaXhlbHMoZHN0UmVjdCk7Ci0gICAgd2lsbERyYXcoZGVz
dFJlY3QpOwotICAgIGMtPmRyYXdJbWFnZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgZGVzdFJlY3Qs
IHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOwotfQotCi12b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMs
IGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQVNTRVJUKGNhbnZhcyk7Ci0gICAgRXhjZXB0aW9u
Q29kZSBlYzsKLSAgICBkcmF3SW1hZ2UoY2FudmFzLCB4LCB5LCBjYW52YXMtPndpZHRoKCksIGNh
bnZhcy0+aGVpZ2h0KCksIGVjKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLAotICAgIGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IEFTU0VSVChjYW52YXMpOwotICAgIGRyYXdJbWFnZShjYW52YXMsIEZsb2F0UmVjdCgwLCAwLCBj
YW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpLCBGbG9hdFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCksIGVjKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJ
bWFnZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBBU1NFUlQoY2FudmFzKTsKLQotICAgIGVjID0gMDsKLQotICAgIEZsb2F0UmVjdCBzcmNDYW52
YXNSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY2FudmFzLT5zaXplKCkpOwotICAgIGlm
ICghc3JjQ2FudmFzUmVjdC5jb250YWlucyhub3JtYWxpemVSZWN0KHNyY1JlY3QpKSB8fCBzcmNS
ZWN0LndpZHRoKCkgPT0gMCB8fCBzcmNSZWN0LmhlaWdodCgpID09IDApIHsKLSAgICAgICAgZWMg
PSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghZHN0
UmVjdC53aWR0aCgpIHx8ICFkc3RSZWN0LmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCi0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgRmxvYXRSZWN0IHNvdXJjZVJlY3QgPSBjLT5yb3VuZFRv
RGV2aWNlUGl4ZWxzKHNyY1JlY3QpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGMtPnJvdW5k
VG9EZXZpY2VQaXhlbHMoZHN0UmVjdCk7Ci0gICAgICAgIAotICAgIC8vIEZJWE1FOiBEbyB0aGlz
IHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSAgICBJ
bWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLSAgICBpZiAoIWJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjYW52YXMtPm9yaWdpbkNsZWFuKCkpCi0gICAg
ICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWludGVkKCk7Ci0KLSAgICBjLT5kcmF3SW1hZ2UoYnVm
ZmVyLT5pbWFnZSgpLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBv
c2l0ZSk7Ci0gICAgd2lsbERyYXcoZGVzdFJlY3QpOyAvLyBUaGlzIGNhbGwgY29tZXMgYWZ0ZXIg
ZHJhd0ltYWdlLCBzaW5jZSB0aGUgYnVmZmVyIHdlIGRyYXcgaW50byBtYXkgYmUgb3VyIG93biwg
YW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGRpcnR5LgotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IEFyZ3VhYmx5IHdpbGxEcmF3IHNob3VsZCBiZWNvbWUgZGlkRHJhdyBh
bmQgb2NjdXIgYWZ0ZXIgZHJhd2luZyBjYWxscyBhbmQgbm90IGJlZm9yZSB0aGVtIHRvIGF2b2lk
IHByb2JsZW1zIGxpa2UgdGhpcy4KLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIGZs
b2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQVNTRVJUKHZpZGVvKTsKLSAgICBJbnRTaXplIHMgPSBz
aXplKHZpZGVvKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGRyYXdJbWFnZSh2aWRlbywg
eCwgeSwgcy53aWR0aCgpLCBzLmhlaWdodCgpLCBlYyk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFTU0VSVCh2
aWRlbyk7Ci0gICAgSW50U2l6ZSBzID0gc2l6ZSh2aWRlbyk7Ci0gICAgZHJhd0ltYWdlKHZpZGVv
LCBGbG9hdFJlY3QoMCwgMCwgcy53aWR0aCgpLCBzLmhlaWdodCgpKSwgRmxvYXRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpLCBlYyk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQodmlkZW8p
OwotICAgIAotICAgIGVjID0gMDsKLSAgICBGbG9hdFJlY3QgdmlkZW9SZWN0ID0gRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgc2l6ZSh2aWRlbykpOwotICAgIGlmICghdmlkZW9SZWN0LmNvbnRhaW5z
KG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCkpIHx8IHNyY1JlY3Qud2lkdGgoKSA9PSAwIHx8IHNyY1Jl
Y3QuaGVpZ2h0KCkgPT0gMCkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghZHN0UmVjdC53aWR0aCgpIHx8ICFkc3RS
ZWN0LmhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0
KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWMpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkpCi0gICAgICAgIGNoZWNrT3JpZ2luKHZpZGVvLT5j
dXJyZW50U3JjKCkpOwotCi0gICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigpICYmICF2aWRl
by0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKLSAgICAgICAgbV9jYW52YXMtPnNldE9yaWdp
blRhaW50ZWQoKTsKLQotICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0ID0gYy0+cm91bmRUb0Rldmlj
ZVBpeGVscyhzcmNSZWN0KTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjLT5yb3VuZFRvRGV2
aWNlUGl4ZWxzKGRzdFJlY3QpOwotICAgIHdpbGxEcmF3KGRlc3RSZWN0KTsKLQotICAgIGMtPnNh
dmUoKTsKLSAgICBjLT5jbGlwKGRlc3RSZWN0KTsKLSAgICBjLT50cmFuc2xhdGUoZGVzdFJlY3Qu
eCgpLCBkZXN0UmVjdC55KCkpOwotICAgIGMtPnNjYWxlKEZsb2F0U2l6ZShkZXN0UmVjdC53aWR0
aCgpL3NvdXJjZVJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCkvc291cmNlUmVjdC5oZWln
aHQoKSkpOwotICAgIGMtPnRyYW5zbGF0ZSgtc291cmNlUmVjdC54KCksIC1zb3VyY2VSZWN0Lnko
KSk7Ci0gICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGMsIEludFJlY3QoSW50
UG9pbnQoKSwgc2l6ZSh2aWRlbykpKTsKLSAgICBjLT5yZXN0b3JlKCk7Ci19Ci0jZW5kaWYKLQot
Ly8gRklYTUU6IFdoeSBpc24ndCB0aGlzIGp1c3QgYW5vdGhlciBvdmVybG9hZCBvZiBkcmF3SW1h
Z2U/IFdoeSBoYXZlIGEgZGlmZmVyZW50IG5hbWU/Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZHJhd0ltYWdlRnJvbVJlY3QoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsCi0gICAgZmxv
YXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gsCi0gICAgZmxvYXQgZHgsIGZsb2F0
IGR5LCBmbG9hdCBkdywgZmxvYXQgZGgsCi0gICAgY29uc3QgU3RyaW5nJiBjb21wb3NpdGVPcGVy
YXRpb24pCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVk
SW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCk7Ci0gICAgaWYgKCFjYWNo
ZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVh
bigpKQotICAgICAgICBjaGVja09yaWdpbihjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS51cmwoKSk7
Ci0KLSAgICBpZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkgJiYgIWNhY2hlZEltYWdlLT5pbWFn
ZSgpLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpKQotICAgICAgICBtX2NhbnZhcy0+c2V0T3Jp
Z2luVGFpbnRlZCgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQo
KTsKLSAgICBpZiAoIWMpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXN0YXRlKCkubV9pbnZl
cnRpYmxlQ1RNKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBvcDsK
LSAgICBpZiAoIXBhcnNlQ29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBvcCkp
Ci0gICAgICAgIG9wID0gQ29tcG9zaXRlU291cmNlT3ZlcjsKLQotICAgIEZsb2F0UmVjdCBkZXN0
UmVjdCA9IEZsb2F0UmVjdChkeCwgZHksIGR3LCBkaCk7Ci0gICAgd2lsbERyYXcoZGVzdFJlY3Qp
OwotICAgIGMtPmRyYXdJbWFnZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgZGVzdFJlY3QsIEZsb2F0
UmVjdChzeCwgc3ksIHN3LCBzaCksIG9wKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEFscGhhKGZsb2F0IGFscGhhKQotewotICAgIHNldEdsb2JhbEFscGhhKGFscGhh
KTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihjb25zdCBTdHJpbmcmIG9wZXJhdGlvbikKLXsKLSAgICBzZXRHbG9iYWxDb21wb3NpdGVP
cGVyYXRpb24ob3BlcmF0aW9uKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnByZXBhcmVHcmFkaWVudEZvckRhc2hib2FyZChDYW52YXNHcmFkaWVudCogZ3JhZGllbnQpIGNv
bnN0Ci17Ci0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIGlmIChTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKLSAgICAgICAgaWYg
KHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQotICAg
ICAgICAgICAgZ3JhZGllbnQtPnNldERhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKCk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShncmFkaWVudCk7Ci0jZW5kaWYKLX0KLQotUGFzc1JlZlB0cjxD
YW52YXNHcmFkaWVudD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVMaW5lYXJHcmFk
aWVudChmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHgxLCBmbG9hdCB5MSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKCFpc2Zpbml0ZSh4MCkgfHwgIWlzZmluaXRlKHkwKSB8fCAhaXNm
aW5pdGUoeDEpIHx8ICFpc2Zpbml0ZSh5MSkpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxDYW52YXNH
cmFkaWVudD4gZ3JhZGllbnQgPSBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoeDAs
IHkwKSwgRmxvYXRQb2ludCh4MSwgeTEpKTsKLSAgICBwcmVwYXJlR3JhZGllbnRGb3JEYXNoYm9h
cmQoZ3JhZGllbnQuZ2V0KCkpOwotICAgIHJldHVybiBncmFkaWVudDsKLX0KLQotUGFzc1JlZlB0
cjxDYW52YXNHcmFkaWVudD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVSYWRpYWxH
cmFkaWVudChmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHIwLCBmbG9hdCB4MSwgZmxvYXQgeTEs
IGZsb2F0IHIxLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIWlzZmluaXRlKHgwKSB8
fCAhaXNmaW5pdGUoeTApIHx8ICFpc2Zpbml0ZShyMCkgfHwgCi0gICAgICAgICFpc2Zpbml0ZSh4
MSkgfHwgIWlzZmluaXRlKHkxKSB8fCAhaXNmaW5pdGUocjEpKSB7Ci0gICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBQYXNzUmVmUHRy
PENhbnZhc0dyYWRpZW50PiBncmFkaWVudCA9ICBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKEZsb2F0
UG9pbnQoeDAsIHkwKSwgcjAsIEZsb2F0UG9pbnQoeDEsIHkxKSwgcjEpOwotICAgIHByZXBhcmVH
cmFkaWVudEZvckRhc2hib2FyZChncmFkaWVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIGdyYWRpZW50
OwotfQotCi1QYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y3JlYXRlUGF0dGVybihIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwKLSAgICBjb25zdCBTdHJp
bmcmIHJlcGV0aXRpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBib29sIHJlcGVh
dFgsIHJlcGVhdFk7Ci0gICAgZWMgPSAwOwotICAgIENhbnZhc1BhdHRlcm46OnBhcnNlUmVwZXRp
dGlvblR5cGUocmVwZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVjKTsKLSAgICBpZiAo
ZWMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFpbWFnZS0+Y29tcGxldGUoKSkgewot
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsK
LSAgICBpZiAoIWNhY2hlZEltYWdlIHx8ICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKSkK
LSAgICAgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShJbWFnZTo6bnVsbEltYWdlKCks
IHJlcGVhdFgsIHJlcGVhdFksIHRydWUpOwotCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBv
cmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhjYWNoZWRJbWFnZS0+dXJs
KCkpOwotICAgIGJvb2wgb3JpZ2luQ2xlYW4gPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+Y2FuQWNjZXNzKG9yaWdpbi5nZXQoKSk7Ci0gICAgcmV0dXJuIENhbnZhc1Bh
dHRlcm46OmNyZWF0ZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3Jp
Z2luQ2xlYW4pOwotfQotCi1QYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLAotICAg
IGNvbnN0IFN0cmluZyYgcmVwZXRpdGlvblR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmICghY2FudmFzLT53aWR0aCgpIHx8ICFjYW52YXMtPmhlaWdodCgpKSB7Ci0gICAgICAgIGVj
ID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICBib29sIHJlcGVhdFgsIHJlcGVhdFk7Ci0gICAgZWMgPSAwOwotICAgIENhbnZhc1BhdHRlcm46
OnBhcnNlUmVwZXRpdGlvblR5cGUocmVwZXRpdGlvblR5cGUsIHJlcGVhdFgsIHJlcGVhdFksIGVj
KTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBDYW52YXNQYXR0
ZXJuOjpjcmVhdGUoY2FudmFzLT5idWZmZXIoKS0+aW1hZ2UoKSwgcmVwZWF0WCwgcmVwZWF0WSwg
Y2FudmFzLT5vcmlnaW5DbGVhbigpKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKLXsKLSAg
ICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCi0gICAgICAg
IHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSByOwotICAgIGlmIChvcHRpb25z
ICYgQ2FudmFzV2lsbERyYXdBcHBseVRyYW5zZm9ybSkgewotICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOwotICAgICAgICBkaXJ0eVJlY3QgPSBj
dG0ubWFwUmVjdChyKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG9wdGlvbnMgJiBDYW52YXNXaWxs
RHJhd0FwcGx5U2hhZG93KSB7Ci0gICAgICAgIC8vIFRoZSBzaGFkb3cgZ2V0cyBhcHBsaWVkIGFm
dGVyIHRyYW5zZm9ybWF0aW9uCi0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KGRpcnR5UmVj
dCk7Ci0gICAgICAgIHNoYWRvd1JlY3QubW92ZShzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0KTsKLSAg
ICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHN0YXRlKCkubV9zaGFkb3dCbHVyKTsKLSAgICAgICAg
ZGlydHlSZWN0LnVuaXRlKHNoYWRvd1JlY3QpOwotICAgIH0KLSAgICAKLSAgICBpZiAob3B0aW9u
cyAmIENhbnZhc1dpbGxEcmF3QXBwbHlDbGlwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBhcHBseSB0
aGUgY3VycmVudCBjbGlwIHRvIHRoZSByZWN0YW5nbGUuIFVuZm9ydHVuYXRlbHkgd2UgY2FuJ3Qg
Z2V0IHRoZSBjbGlwCi0gICAgICAgIC8vIGJhY2sgb3V0IG9mIHRoZSBHcmFwaGljc0NvbnRleHQs
IHNvIHRvIHRha2UgY2xpcCBpbnRvIGFjY291bnQgZm9yIGluY3JlbWVudGFsIHBhaW50aW5nLAot
ICAgICAgICAvLyB3ZSdkIGhhdmUgdG8ga2VlcCB0aGUgY2xpcCBwYXRoIGFyb3VuZC4KLSAgICB9
Ci0gICAgCi0gICAgbV9jYW52YXMtPndpbGxEcmF3KGRpcnR5UmVjdCk7Ci19Ci0KLUdyYXBoaWNz
Q29udGV4dCogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fY2FudmFzLT5kcmF3aW5nQ29udGV4dCgpOwotfQotCi1zdGF0aWMg
UGFzc1JlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGNvbnN0IEludFNpemUm
IHNpemUpCi17Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gZGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRl
KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbWVtc2V0KGRhdGEtPmRhdGEoKS0+
ZGF0YSgpLT5kYXRhKCksIDAsIGRhdGEtPmRhdGEoKS0+ZGF0YSgpLT5sZW5ndGgoKSk7Ci0gICAg
cmV0dXJuIGRhdGEuZ2V0KCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZUltYWdlRGF0YShmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0
Ci17Ci0gICAgRmxvYXRTaXplIHVuc2NhbGVkU2l6ZShzdywgc2gpOwotICAgIEludFNpemUgc2Nh
bGVkU2l6ZSA9IG1fY2FudmFzLT5jb252ZXJ0TG9naWNhbFRvRGV2aWNlKHVuc2NhbGVkU2l6ZSk7
Ci0gICAgaWYgKHNjYWxlZFNpemUud2lkdGgoKSA8IDEpCi0gICAgICAgIHNjYWxlZFNpemUuc2V0
V2lkdGgoMSk7Ci0gICAgaWYgKHNjYWxlZFNpemUuaGVpZ2h0KCkgPCAxKQotICAgICAgICBzY2Fs
ZWRTaXplLnNldEhlaWdodCgxKTsKLSAgICAKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURh
dGEoc2NhbGVkU2l6ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBm
bG9hdCBzaCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NhbnZhcy0+
b3JpZ2luQ2xlYW4oKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIAotICAgIEZsb2F0UmVjdCB1bnNjYWxlZFJlY3Qoc3gsIHN5LCBz
dywgc2gpOwotICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IG1fY2FudmFzLT5jb252ZXJ0TG9naWNh
bFRvRGV2aWNlKHVuc2NhbGVkUmVjdCk7Ci0gICAgaWYgKHNjYWxlZFJlY3Qud2lkdGgoKSA8IDEp
Ci0gICAgICAgIHNjYWxlZFJlY3Quc2V0V2lkdGgoMSk7Ci0gICAgaWYgKHNjYWxlZFJlY3QuaGVp
Z2h0KCkgPCAxKQotICAgICAgICBzY2FsZWRSZWN0LnNldEhlaWdodCgxKTsKLSAgICBJbWFnZUJ1
ZmZlciogYnVmZmVyID0gbV9jYW52YXMgPyBtX2NhbnZhcy0+YnVmZmVyKCkgOiAwOwotICAgIGlm
ICghYnVmZmVyKQotICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoc2NhbGVkUmVj
dC5zaXplKCkpOwotICAgIHJldHVybiBidWZmZXItPmdldEltYWdlRGF0YShzY2FsZWRSZWN0KTsK
LX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YShJbWFnZURh
dGEqIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKCFkYXRhKSB7Ci0gICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIGR4LCBkeSwgMCwgMCwgZGF0YS0+
d2lkdGgoKSwgZGF0YS0+aGVpZ2h0KCksIGVjKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnB1dEltYWdlRGF0YShJbWFnZURhdGEqIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBk
eSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGVjID0gVFlQ
RV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFpc2Zpbml0
ZShkeCkgfHwgIWlzZmluaXRlKGR5KSB8fCAhaXNmaW5pdGUoZGlydHlYKSB8fCAKLSAgICAgICAg
IWlzZmluaXRlKGRpcnR5WSkgfHwgIWlzZmluaXRlKGRpcnR5V2lkdGgpIHx8ICFpc2Zpbml0ZShk
aXJ0eUhlaWdodCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBtX2NhbnZhcy0+YnVmZmVy
KCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkaXJ0eVdp
ZHRoIDwgMCkgewotICAgICAgICBkaXJ0eVggKz0gZGlydHlXaWR0aDsKLSAgICAgICAgZGlydHlX
aWR0aCA9IC1kaXJ0eVdpZHRoOwotICAgIH0KLQotICAgIGlmIChkaXJ0eUhlaWdodCA8IDApIHsK
LSAgICAgICAgZGlydHlZICs9IGRpcnR5SGVpZ2h0OwotICAgICAgICBkaXJ0eUhlaWdodCA9IC1k
aXJ0eUhlaWdodDsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgY2xpcFJlY3QoZGlydHlYLCBkaXJ0
eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKLSAgICBjbGlwUmVjdC5pbnRlcnNlY3QoSW50
UmVjdCgwLCAwLCBkYXRhLT53aWR0aCgpLCBkYXRhLT5oZWlnaHQoKSkpOwotICAgIEludFNpemUg
ZGVzdE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwot
ICAgIEludFJlY3Qgc291cmNlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwotICAg
IHNvdXJjZVJlY3QubW92ZShkZXN0T2Zmc2V0KTsKLSAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJ
bnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+c2l6ZSgpKSk7Ci0gICAgaWYgKHNvdXJjZVJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgd2lsbERyYXcoc291cmNlUmVjdCwgMCk7
ICAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKLSAgICBzb3VyY2VSZWN0Lm1v
dmUoLWRlc3RPZmZzZXQpOwotICAgIEludFBvaW50IGRlc3RQb2ludChkZXN0T2Zmc2V0LndpZHRo
KCksIGRlc3RPZmZzZXQuaGVpZ2h0KCkpOwotICAgIAotICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRh
KGRhdGEsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCk7Ci19Ci0KLVN0cmluZyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmZvbnQoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0ZSgpLm1fdW5wYXJz
ZWRGb250OwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25z
dCBTdHJpbmcmIG5ld0ZvbnQpCi17Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiB0ZW1wRGVjbCA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKLSAg
ICBDU1NQYXJzZXIgcGFyc2VyKCFtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkp
OyAvLyBVc2UgdGhlIHBhcnNlIG1vZGUgb2YgdGhlIGNhbnZhcycgZG9jdW1lbnQgd2hlbiBwYXJz
aW5nIENTUy4KLSAgICAgICAgCi0gICAgU3RyaW5nIGRlY2xhcmF0aW9uVGV4dCgiZm9udDogIik7
Ci0gICAgZGVjbGFyYXRpb25UZXh0ICs9IG5ld0ZvbnQ7Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFy
YXRpb24odGVtcERlY2wuZ2V0KCksIGRlY2xhcmF0aW9uVGV4dCk7Ci0gICAgaWYgKCF0ZW1wRGVj
bC0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgIC8vIFRoZSBw
YXJzZSBzdWNjZWVkZWQuCi0gICAgc3RhdGUoKS5tX3VucGFyc2VkRm9udCA9IG5ld0ZvbnQ7Ci0g
ICAgCi0gICAgLy8gTWFwIHRoZSA8Y2FudmFzPiBmb250IGludG8gdGhlIHRleHQgc3R5bGUuIElm
IHRoZSBmb250IHVzZXMga2V5d29yZHMgbGlrZSBsYXJnZXIvc21hbGxlciwgdGhlc2Ugd2lsbCB3
b3JrCi0gICAgLy8gcmVsYXRpdmUgdG8gdGhlIGNhbnZhcy4KLSAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIGlmIChtX2NhbnZhcy0+
Y29tcHV0ZWRTdHlsZSgpKQotICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG1f
Y2FudmFzLT5jb21wdXRlZFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpKTsKLQotICAgIC8vIE5v
dyBtYXAgdGhlIGZvbnQgcHJvcGVydHkgaW50byB0aGUgc3R5bGUuCi0gICAgQ1NTU3R5bGVTZWxl
Y3Rvciogc3R5bGVTZWxlY3RvciA9IG1fY2FudmFzLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9y
KCk7Ci0gICAgc3R5bGVTZWxlY3Rvci0+YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlG
b250LCB0ZW1wRGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnQpLmdldCgp
LCBuZXdTdHlsZS5nZXQoKSk7Ci0gICAgCi0gICAgc3RhdGUoKS5tX2ZvbnQgPSBuZXdTdHlsZS0+
Zm9udCgpOwotICAgIHN0YXRlKCkubV9mb250LnVwZGF0ZShzdHlsZVNlbGVjdG9yLT5mb250U2Vs
ZWN0b3IoKSk7Ci0gICAgc3RhdGUoKS5tX3JlYWxpemVkRm9udCA9IHRydWU7Ci19Ci0gICAgICAg
IAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dGV4dEFsaWduKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gdGV4dEFsaWduTmFtZShzdGF0ZSgpLm1fdGV4dEFsaWduKTsKLX0KLQotdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFRleHRBbGlnbihjb25zdCBTdHJpbmcmIHMp
Ci17Ci0gICAgVGV4dEFsaWduIGFsaWduOwotICAgIGlmICghcGFyc2VUZXh0QWxpZ24ocywgYWxp
Z24pKQotICAgICAgICByZXR1cm47Ci0gICAgc3RhdGUoKS5tX3RleHRBbGlnbiA9IGFsaWduOwot
fQotICAgICAgICAKLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRleHRCYXNlbGlu
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRleHRCYXNlbGluZU5hbWUoc3RhdGUoKS5tX3RleHRC
YXNlbGluZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRUZXh0QmFz
ZWxpbmUoY29uc3QgU3RyaW5nJiBzKQotewotICAgIFRleHRCYXNlbGluZSBiYXNlbGluZTsKLSAg
ICBpZiAoIXBhcnNlVGV4dEJhc2VsaW5lKHMsIGJhc2VsaW5lKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHN0YXRlKCkubV90ZXh0QmFzZWxpbmUgPSBiYXNlbGluZTsKLX0KLQotdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwg
ZmxvYXQgeSkKLXsKLSAgICBkcmF3VGV4dEludGVybmFsKHRleHQsIHgsIHksIHRydWUpOwotfQot
Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBtYXhXaWR0aCkKLXsKLSAgICBkcmF3VGV4dElu
dGVybmFsKHRleHQsIHgsIHksIHRydWUsIG1heFdpZHRoLCB0cnVlKTsKLX0KLQotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9h
dCB4LCBmbG9hdCB5KQotewotICAgIGRyYXdUZXh0SW50ZXJuYWwodGV4dCwgeCwgeSwgZmFsc2Up
OwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IG1heFdpZHRoKQotewotICAgIGRy
YXdUZXh0SW50ZXJuYWwodGV4dCwgeCwgeSwgZmFsc2UsIG1heFdpZHRoLCB0cnVlKTsKLX0KLQot
UGFzc1JlZlB0cjxUZXh0TWV0cmljcz4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjptZWFzdXJl
VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCi17Ci0gICAgUmVmUHRyPFRleHRNZXRyaWNzPiBtZXRy
aWNzID0gVGV4dE1ldHJpY3M6OmNyZWF0ZSgpOwotICAgIG1ldHJpY3MtPnNldFdpZHRoKGFjY2Vz
c0ZvbnQoKS53aWR0aChUZXh0UnVuKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpKSkp
OwotICAgIHJldHVybiBtZXRyaWNzOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd1RleHRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHks
IGJvb2wgZmlsbCwgZmxvYXQgLyptYXhXaWR0aCovLCBib29sIC8qdXNlTWF4V2lkdGgqLykKLXsK
LSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBjb25zdCBGb250JiBmb250ID0gYWNjZXNzRm9udCgpOwot
Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBtYXhXaWR0aC4KLSAgICAvLyBGSVhNRTogTmVlZCB0byB0
dXJuIG9mZiBmb250IHNtb290aGluZy4KLQotICAgIGJvb2wgcnRsID0gbV9jYW52YXMtPmNvbXB1
dGVkU3R5bGUoKSA/IG1fY2FudmFzLT5jb21wdXRlZFN0eWxlKCktPmRpcmVjdGlvbigpID09IFJU
TCA6IGZhbHNlOwotICAgIGJvb2wgb3ZlcnJpZGUgPSBtX2NhbnZhcy0+Y29tcHV0ZWRTdHlsZSgp
ID8gbV9jYW52YXMtPmNvbXB1dGVkU3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSA6
IGZhbHNlOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAgICBjb25z
dCBVQ2hhciogc3RyaW5nID0gdGV4dC5jaGFyYWN0ZXJzKCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVu
KHN0cmluZywgbGVuZ3RoLCAwLCAwLCAwLCBydGwsIG92ZXJyaWRlLCBmYWxzZSwgZmFsc2UpOwot
Ci0gICAgLy8gRHJhdyB0aGUgaXRlbSB0ZXh0IGF0IHRoZSBjb3JyZWN0IHBvaW50LgotICAgIEZs
b2F0UG9pbnQgbG9jYXRpb24oeCwgeSk7Ci0gICAgc3dpdGNoIChzdGF0ZSgpLm1fdGV4dEJhc2Vs
aW5lKSB7Ci0gICAgICAgIGNhc2UgVG9wVGV4dEJhc2VsaW5lOgotICAgICAgICBjYXNlIEhhbmdp
bmdUZXh0QmFzZWxpbmU6Ci0gICAgICAgICAgICBsb2NhdGlvbi5zZXRZKHkgKyBmb250LmFzY2Vu
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJvdHRvbVRleHRCYXNlbGlu
ZToKLSAgICAgICAgY2FzZSBJZGVvZ3JhcGhpY1RleHRCYXNlbGluZToKLSAgICAgICAgICAgIGxv
Y2F0aW9uLnNldFkoeSAtIGZvbnQuZGVzY2VudCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE1pZGRsZVRleHRCYXNlbGluZToKLSAgICAgICAgICAgIGxvY2F0aW9uLnNldFko
eSAtIGZvbnQuZGVzY2VudCgpICsgZm9udC5oZWlnaHQoKSAvIDIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQWxwaGFiZXRpY1RleHRCYXNlbGluZToKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIAotICAgIGZsb2F0IHdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHRleHQsIGZhbHNl
LCAwLCAwLCBydGwsIG92ZXJyaWRlKSk7Ci0KLSAgICBUZXh0QWxpZ24gYWxpZ24gPSBzdGF0ZSgp
Lm1fdGV4dEFsaWduOwotICAgIGlmIChhbGlnbiA9PSBTdGFydFRleHRBbGlnbikKLSAgICAgICAg
IGFsaWduID0gcnRsID8gUmlnaHRUZXh0QWxpZ24gOiBMZWZ0VGV4dEFsaWduOwotICAgIGVsc2Ug
aWYgKGFsaWduID09IEVuZFRleHRBbGlnbikKLSAgICAgICAgYWxpZ24gPSBydGwgPyBMZWZ0VGV4
dEFsaWduIDogUmlnaHRUZXh0QWxpZ247Ci0gICAgCi0gICAgc3dpdGNoIChhbGlnbikgewotICAg
ICAgICBjYXNlIENlbnRlclRleHRBbGlnbjoKLSAgICAgICAgICAgIGxvY2F0aW9uLnNldFgobG9j
YXRpb24ueCgpIC0gd2lkdGggLyAyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFJpZ2h0VGV4dEFsaWduOgotICAgICAgICAgICAgbG9jYXRpb24uc2V0WChsb2NhdGlvbi54KCkg
LSB3aWR0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICAvLyBUaGUgc2xvcCBidWlsdCBpbiB0byB0aGlz
IG1hc2sgcmVjdCBtYXRjaGVzIHRoZSBoZXVyaXN0aWMgdXNlZCBpbiBGb250Q0dXaW4uY3BwIGZv
ciBHREkgdGV4dC4KLSAgICBGbG9hdFJlY3QgdGV4dFJlY3QgPSBGbG9hdFJlY3QobG9jYXRpb24u
eCgpIC0gZm9udC5oZWlnaHQoKSAvIDIsIGxvY2F0aW9uLnkoKSAtIGZvbnQuYXNjZW50KCkgLSBm
b250LmxpbmVHYXAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgg
KyBmb250LmhlaWdodCgpLCBmb250LmxpbmVTcGFjaW5nKCkpOwotICAgIGlmICghZmlsbCkKLSAg
ICAgICAgdGV4dFJlY3QuaW5mbGF0ZShjLT5zdHJva2VUaGlja25lc3MoKSAvIDIpOwotCi0gICAg
aWYgKGZpbGwpCi0gICAgICAgIG1fY2FudmFzLT53aWxsRHJhdyh0ZXh0UmVjdCk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIFdoZW4gc3Ryb2tpbmcgdGV4dCwgcG9pbnR5IG1pdGVycyBjYW4gZXh0
ZW5kIG91dHNpZGUgb2YgdGV4dFJlY3QsIHNvIHdlCi0gICAgICAgIC8vIHB1bnQgYW5kIGRpcnR5
IHRoZSB3aG9sZSBjYW52YXMuCi0gICAgICAgIG1fY2FudmFzLT53aWxsRHJhdyhGbG9hdFJlY3Qo
MCwgMCwgbV9jYW52YXMtPndpZHRoKCksIG1fY2FudmFzLT5oZWlnaHQoKSkpOwotICAgIH0KLSAg
ICAKLSNpZiBQTEFURk9STShDRykKLSAgICBDYW52YXNTdHlsZSogZHJhd1N0eWxlID0gZmlsbCA/
IHN0YXRlKCkubV9maWxsU3R5bGUuZ2V0KCkgOiBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUuZ2V0KCk7
Ci0gICAgaWYgKGRyYXdTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSB8fCBkcmF3U3R5bGUtPmNhbnZh
c1BhdHRlcm4oKSkgewotICAgICAgICAvLyBGSVhNRTogVGhlIHJlY3QgaXMgbm90IGJpZyBlbm91
Z2ggZm9yIG1pdGVycyBvbiBzdHJva2VkIHRleHQuCi0gICAgICAgIEludFJlY3QgbWFza1JlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KTsKLQotICAgICAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobWFza1JlY3Quc2l6ZSgpLCBmYWxz
ZSk7Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFza0lt
YWdlLT5jb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGZpbGwpCi0gICAgICAgICAgICBtYXNrSW1h
Z2VDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6YmxhY2sp
OwotICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGMtPnN0
cm9rZVRoaWNrbmVzcygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1hc2tJbWFnZUNvbnRleHQt
PnNldFRleHREcmF3aW5nTW9kZShmaWxsID8gY1RleHRGaWxsIDogY1RleHRTdHJva2UpOwotICAg
ICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLW1hc2tSZWN0LngoKSwgLW1hc2tSZWN0
LnkoKSk7Ci0gICAgICAgIAotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5kcmF3QmlkaVRleHQo
Zm9udCwgdGV4dFJ1biwgbG9jYXRpb24pOwotICAgICAgICAKLSAgICAgICAgYy0+c2F2ZSgpOwot
ICAgICAgICBjLT5jbGlwVG9JbWFnZUJ1ZmZlcihtYXNrUmVjdCwgbWFza0ltYWdlLmdldCgpKTsK
LSAgICAgICAgZHJhd1N0eWxlLT5hcHBseUZpbGxDb2xvcihjKTsKLSAgICAgICAgYy0+ZmlsbFJl
Y3QobWFza1JlY3QpOwotICAgICAgICBjLT5yZXN0b3JlKCk7Ci0KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgYy0+c2V0VGV4dERyYXdpbmdNb2RlKGZpbGwgPyBjVGV4dEZp
bGwgOiBjVGV4dFN0cm9rZSk7Ci0gICAgYy0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxv
Y2F0aW9uKTsKLX0KLQotY29uc3QgRm9udCYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphY2Nl
c3NGb250KCkKLXsKLSAgICBpZiAoIXN0YXRlKCkubV9yZWFsaXplZEZvbnQpCi0gICAgICAgIHNl
dEZvbnQoc3RhdGUoKS5tX3VucGFyc2VkRm9udCk7Ci0gICAgcmV0dXJuIHN0YXRlKCkubV9mb250
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiA0NjkxOSkKKysrIFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEX2gK
LSNkZWZpbmUgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEX2gKLQotI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiRm9udC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBQTEFU
Rk9STShDRykKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vydmlj
ZXMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDYW52YXNH
cmFkaWVudDsKLSAgICBjbGFzcyBDYW52YXNQYXR0ZXJuOwotICAgIGNsYXNzIENhbnZhc1N0eWxl
OwotICAgIGNsYXNzIEZsb2F0UmVjdDsKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAg
Y2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7Ci0gICAgY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLSAg
ICBjbGFzcyBIVE1MVmlkZW9FbGVtZW50OwotICAgIGNsYXNzIEltYWdlRGF0YTsKLSAgICBjbGFz
cyBLVVJMOwotICAgIGNsYXNzIFRleHRNZXRyaWNzOwotCi0gICAgdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKLQotICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQoSFRNTENhbnZhc0VsZW1lbnQqKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgcmVmKCk7Ci0g
ICAgICAgIHZvaWQgZGVyZWYoKTsKLSAgICAgICAgCi0gICAgICAgIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsgfQotCi0gICAgICAgIENhbnZhc1N0
eWxlKiBzdHJva2VTdHlsZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFBh
c3NSZWZQdHI8Q2FudmFzU3R5bGU+KTsKLQotICAgICAgICBDYW52YXNTdHlsZSogZmlsbFN0eWxl
KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0RmlsbFN0eWxlKFBhc3NSZWZQdHI8Q2FudmFzU3R5
bGU+KTsKLQotICAgICAgICBmbG9hdCBsaW5lV2lkdGgoKSBjb25zdDsKLSAgICAgICAgdm9pZCBz
ZXRMaW5lV2lkdGgoZmxvYXQpOwotCi0gICAgICAgIFN0cmluZyBsaW5lQ2FwKCkgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgc2V0TGluZUNhcChjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICBTdHJpbmcg
bGluZUpvaW4oKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRMaW5lSm9pbihjb25zdCBTdHJpbmcm
KTsKLQotICAgICAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICAgICAgZmxvYXQgc2hhZG93T2Zmc2V0WCgpIGNvbnN0
OwotICAgICAgICB2b2lkIHNldFNoYWRvd09mZnNldFgoZmxvYXQpOwotCi0gICAgICAgIGZsb2F0
IHNoYWRvd09mZnNldFkoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRTaGFkb3dPZmZzZXRZKGZs
b2F0KTsKLQotICAgICAgICBmbG9hdCBzaGFkb3dCbHVyKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQg
c2V0U2hhZG93Qmx1cihmbG9hdCk7Ci0KLSAgICAgICAgU3RyaW5nIHNoYWRvd0NvbG9yKCkgY29u
c3Q7Ci0gICAgICAgIHZvaWQgc2V0U2hhZG93Q29sb3IoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAg
ICAgZmxvYXQgZ2xvYmFsQWxwaGEoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRHbG9iYWxBbHBo
YShmbG9hdCk7Ci0KLSAgICAgICAgU3RyaW5nIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbigpIGNv
bnN0OwotICAgICAgICB2b2lkIHNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbihjb25zdCBTdHJp
bmcmKTsKLQotICAgICAgICB2b2lkIHNhdmUoKTsKLSAgICAgICAgdm9pZCByZXN0b3JlKCk7Ci0K
LSAgICAgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpOwotICAgICAgICB2b2lkIHJv
dGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Ci0gICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHR4LCBmbG9hdCB0eSk7Ci0gICAgICAgIHZvaWQgdHJhbnNmb3JtKGZsb2F0IG0xMSwgZmxvYXQg
bTEyLCBmbG9hdCBtMjEsIGZsb2F0IG0yMiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKLSAgICAgICAg
dm9pZCBzZXRUcmFuc2Zvcm0oZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0yMSwgZmxvYXQg
bTIyLCBmbG9hdCBkeCwgZmxvYXQgZHkpOwotCi0gICAgICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3Io
Y29uc3QgU3RyaW5nJiBjb2xvcik7Ci0gICAgICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoZmxvYXQg
Z3JheUxldmVsKTsKLSAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBTdHJpbmcmIGNv
bG9yLCBmbG9hdCBhbHBoYSk7Ci0gICAgICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoZmxvYXQgZ3Jh
eUxldmVsLCBmbG9hdCBhbHBoYSk7Ci0gICAgICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoZmxvYXQg
ciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci0gICAgICAgIHZvaWQgc2V0U3Ryb2tlQ29s
b3IoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7Ci0KLSAgICAg
ICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvcik7Ci0gICAgICAgIHZvaWQg
c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZlbCk7Ci0gICAgICAgIHZvaWQgc2V0RmlsbENvbG9y
KGNvbnN0IFN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhhKTsKLSAgICAgICAgdm9pZCBzZXRGaWxs
Q29sb3IoZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSk7Ci0gICAgICAgIHZvaWQgc2V0Rmls
bENvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwotICAgICAgICB2b2lk
IHNldEZpbGxDb2xvcihmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBh
KTsKLQotICAgICAgICB2b2lkIGJlZ2luUGF0aCgpOwotICAgICAgICB2b2lkIGNsb3NlUGF0aCgp
OwotCi0gICAgICAgIHZvaWQgbW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpOwotICAgICAgICB2b2lk
IGxpbmVUbyhmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCBxdWFkcmF0aWNDdXJ2ZVRv
KGZsb2F0IGNweCwgZmxvYXQgY3B5LCBmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCBi
ZXppZXJDdXJ2ZVRvKGZsb2F0IGNwMXgsIGZsb2F0IGNwMXksIGZsb2F0IGNwMngsIGZsb2F0IGNw
MnksIGZsb2F0IHgsIGZsb2F0IHkpOwotICAgICAgICB2b2lkIGFyY1RvKGZsb2F0IHgwLCBmbG9h
dCB5MCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCByYWRpdXMsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICAgICAgdm9pZCBhcmMoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgciwgZmxvYXQgc2EsIGZs
b2F0IGVhLCBib29sIGNsb2Nrd2lzZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICB2b2lkIHJl
Y3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCk7Ci0KLSAgICAg
ICAgdm9pZCBmaWxsKCk7Ci0gICAgICAgIHZvaWQgc3Ryb2tlKCk7Ci0gICAgICAgIHZvaWQgY2xp
cCgpOwotCi0gICAgICAgIGJvb2wgaXNQb2ludEluUGF0aChjb25zdCBmbG9hdCB4LCBjb25zdCBm
bG9hdCB5KTsKLQotICAgICAgICB2b2lkIGNsZWFyUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0KTsKLSAgICAgICAgdm9pZCBmaWxsUmVjdChmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KTsKLSAgICAgICAgdm9pZCBzdHJva2VS
ZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpOwotICAgICAg
ICB2b2lkIHN0cm9rZVJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCwgZmxvYXQgbGluZVdpZHRoKTsKLQotICAgICAgICB2b2lkIHNldFNoYWRvdyhmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyKTsKLSAgICAgICAgdm9pZCBzZXRTaGFkb3co
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgY29uc3QgU3RyaW5nJiBjb2xv
cik7Ci0gICAgICAgIHZvaWQgc2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZs
b2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCk7Ci0gICAgICAgIHZvaWQgc2V0U2hhZG93KGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGNvbnN0IFN0cmluZyYgY29sb3IsIGZs
b2F0IGFscGhhKTsKLSAgICAgICAgdm9pZCBzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSk7Ci0gICAgICAg
IHZvaWQgc2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwotICAgICAgICB2b2lkIHNldFNoYWRv
dyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBjLCBmbG9hdCBt
LCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKLQotICAgICAgICB2b2lkIGNsZWFyU2hhZG93
KCk7Ci0KLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCosIGZsb2F0IHgs
IGZsb2F0IHkpOwotICAgICAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgRXhjZXB0aW9uQ29kZSYp
OwotICAgICAgICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqLCBmbG9hdCB4LCBmbG9h
dCB5KTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqLCBmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKLSNp
ZiBFTkFCTEUoVklERU8pCi0gICAgICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQq
LCBmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTFZpZGVvRWxl
bWVudCosIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBFeGNlcHRp
b25Db2RlJik7Ci0jZW5kaWYKLQotICAgICAgICB2b2lkIGRyYXdJbWFnZUZyb21SZWN0KEhUTUxJ
bWFnZUVsZW1lbnQqLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCwKLSAg
ICAgICAgICAgIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHcsIGZsb2F0IGRoLCBjb25zdCBT
dHJpbmcmIGNvbXBvc2l0ZU9wZXJhdGlvbik7Ci0KLSAgICAgICAgdm9pZCBzZXRBbHBoYShmbG9h
dCk7Ci0KLSAgICAgICAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJik7
Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gY3JlYXRlTGluZWFyR3JhZGll
bnQoZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCB4MSwgZmxvYXQgeTEsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gY3JlYXRlUmFkaWFsR3JhZGll
bnQoZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCByMCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9h
dCByMSwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+
IGNyZWF0ZVBhdHRlcm4oSFRNTEltYWdlRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcmVwZXRpdGlv
blR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJu
PiBjcmVhdGVQYXR0ZXJuKEhUTUxDYW52YXNFbGVtZW50KiwgY29uc3QgU3RyaW5nJiByZXBldGl0
aW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICAKLSAgICAgICAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IGNyZWF0ZUltYWdlRGF0YShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBjb25z
dDsKLSAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShmbG9hdCBzeCwg
ZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAg
ICAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqLCBmbG9hdCBkeCwgZmxvYXQgZHksIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgZmxv
YXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlX
aWR0aCwgZmxvYXQgZGlydHlIZWlnaHQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgCi0gICAg
ICAgIHZvaWQgcmVzZXQoKTsKLQotICAgICAgICBTdHJpbmcgZm9udCgpIGNvbnN0OwotICAgICAg
ICB2b2lkIHNldEZvbnQoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcg
dGV4dEFsaWduKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0VGV4dEFsaWduKGNvbnN0IFN0cmlu
ZyYpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHRleHRCYXNlbGluZSgpIGNvbnN0OwotICAg
ICAgICB2b2lkIHNldFRleHRCYXNlbGluZShjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgCi0gICAg
ICAgIHZvaWQgZmlsbFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5KTsK
LSAgICAgICAgdm9pZCBmaWxsVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IG1heFdpZHRoKTsKLSAgICAgICAgdm9pZCBzdHJva2VUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgc3Ryb2tlVGV4dChjb25z
dCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IG1heFdpZHRoKTsKLSAgICAg
ICAgUGFzc1JlZlB0cjxUZXh0TWV0cmljcz4gbWVhc3VyZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
KTsKLQotICAgICAgICBMaW5lQ2FwIGdldExpbmVDYXAoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgp
Lm1fbGluZUNhcDsgfQotICAgICAgICBMaW5lSm9pbiBnZXRMaW5lSm9pbigpIGNvbnN0IHsgcmV0
dXJuIHN0YXRlKCkubV9saW5lSm9pbjsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RydWN0
IFN0YXRlIHsKLSAgICAgICAgICAgIFN0YXRlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFJlZlB0cjxDYW52YXNTdHlsZT4gbV9zdHJva2VTdHlsZTsKLSAgICAgICAgICAgIFJlZlB0cjxD
YW52YXNTdHlsZT4gbV9maWxsU3R5bGU7Ci0gICAgICAgICAgICBmbG9hdCBtX2xpbmVXaWR0aDsK
LSAgICAgICAgICAgIExpbmVDYXAgbV9saW5lQ2FwOwotICAgICAgICAgICAgTGluZUpvaW4gbV9s
aW5lSm9pbjsKLSAgICAgICAgICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKLSAgICAgICAgICAgIEZs
b2F0U2l6ZSBtX3NoYWRvd09mZnNldDsKLSAgICAgICAgICAgIGZsb2F0IG1fc2hhZG93Qmx1cjsK
LSAgICAgICAgICAgIFN0cmluZyBtX3NoYWRvd0NvbG9yOwotICAgICAgICAgICAgZmxvYXQgbV9n
bG9iYWxBbHBoYTsKLSAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fZ2xvYmFsQ29tcG9z
aXRlOwotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAg
ICAgICAgICBib29sIG1faW52ZXJ0aWJsZUNUTTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gVGV4dCBzdGF0ZS4KLSAgICAgICAgICAgIFRleHRBbGlnbiBtX3RleHRBbGlnbjsKLSAgICAg
ICAgICAgIFRleHRCYXNlbGluZSBtX3RleHRCYXNlbGluZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgU3RyaW5nIG1fdW5wYXJzZWRGb250OwotICAgICAgICAgICAgRm9udCBtX2ZvbnQ7Ci0g
ICAgICAgICAgICBib29sIG1fcmVhbGl6ZWRGb250OwotICAgICAgICB9OwotICAgICAgICBQYXRo
IG1fcGF0aDsKLQotICAgICAgICBTdGF0ZSYgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlU3RhY2su
bGFzdCgpOyB9Ci0gICAgICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGVTdGFjay5sYXN0KCk7IH0KLQotICAgICAgICB2b2lkIGFwcGx5U2hhZG93KCk7Ci0KLSAg
ICAgICAgZW51bSBDYW52YXNXaWxsRHJhd09wdGlvbiB7Ci0gICAgICAgICAgICBDYW52YXNXaWxs
RHJhd0FwcGx5VHJhbnNmb3JtID0gMSwKLSAgICAgICAgICAgIENhbnZhc1dpbGxEcmF3QXBwbHlT
aGFkb3cgPSAxIDw8IDEsCi0gICAgICAgICAgICBDYW52YXNXaWxsRHJhd0FwcGx5Q2xpcCA9IDEg
PDwgMiwKLSAgICAgICAgICAgIENhbnZhc1dpbGxEcmF3QXBwbHlBbGwgPSAweGZmZmZmZmZmCi0g
ICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICB2b2lkIHdpbGxEcmF3KGNvbnN0IEZsb2F0UmVj
dCYsIHVuc2lnbmVkIG9wdGlvbnMgPSBDYW52YXNXaWxsRHJhd0FwcGx5QWxsKTsKLQotICAgICAg
ICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7Ci0KLSAgICAgICAgdm9p
ZCBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7
Ci0KLSAgICAgICAgdm9pZCBkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCwgZmxv
YXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBmbG9hdCBtYXhXaWR0aCA9IDAsIGJvb2wgdXNlTWF4
V2lkdGggPSBmYWxzZSk7Ci0KLSAgICAgICAgY29uc3QgRm9udCYgYWNjZXNzRm9udCgpOwotCi0j
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgICAgICB2b2lkIGNsZWFyUGF0aEZvckRh
c2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsKLSNlbmRpZgotICAgICAgICAKLSAg
ICAgICAgdm9pZCBwcmVwYXJlR3JhZGllbnRGb3JEYXNoYm9hcmQoQ2FudmFzR3JhZGllbnQqIGdy
YWRpZW50KSBjb25zdDsKLSAgICAgICAgdm9pZCBjaGVja09yaWdpbihjb25zdCBLVVJMJik7Ci0g
ICAgICAgIHZvaWQgY2hlY2tPcmlnaW4oY29uc3QgU3RyaW5nJik7Ci0KLSAgICAgICAgSFRNTENh
bnZhc0VsZW1lbnQqIG1fY2FudmFzOwotICAgICAgICBWZWN0b3I8U3RhdGUsIDE+IG1fc3RhdGVT
dGFjazsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDog
V2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHJldmlzaW9uIDQ2OTE5
KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLW1vZHVsZSBodG1s
IHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IsCi0gICAg
ICAgIEludGVyZmFjZVVVSUQ9OThmYjQ4YWUtNzIxNi00ODljLTg2MmItOGUxMjE3ZmM0NDQzLAot
ICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9YWI0ZjA3ODEtMTUyZi00NTBlLTk1NDYtNWIzOTg3
NDkxYTU0Ci0gICAgXSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgewotCi0gICAgICAgIC8vIFdl
YiBBcHBsaWNhdGlvbnMgMS4wIGRyYWZ0Ci0KLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhU
TUxDYW52YXNFbGVtZW50IGNhbnZhczsKLQotICAgICAgICB2b2lkIHNhdmUoKTsKLSAgICAgICAg
dm9pZCByZXN0b3JlKCk7Ci0KLSAgICAgICAgdm9pZCBzY2FsZShpbiBmbG9hdCBzeCwgaW4gZmxv
YXQgc3kpOwotICAgICAgICB2b2lkIHJvdGF0ZShpbiBmbG9hdCBhbmdsZSk7Ci0gICAgICAgIHZv
aWQgdHJhbnNsYXRlKGluIGZsb2F0IHR4LCBpbiBmbG9hdCB0eSk7Ci0gICAgICAgIHZvaWQgdHJh
bnNmb3JtKGluIGZsb2F0IG0xMSwgaW4gZmxvYXQgbTEyLCBpbiBmbG9hdCBtMjEsIGluIGZsb2F0
IG0yMiwgaW4gZmxvYXQgZHgsIGluIGZsb2F0IGR5KTsKLSAgICAgICAgdm9pZCBzZXRUcmFuc2Zv
cm0oaW4gZmxvYXQgbTExLCBpbiBmbG9hdCBtMTIsIGluIGZsb2F0IG0yMSwgaW4gZmxvYXQgbTIy
LCBpbiBmbG9hdCBkeCwgaW4gZmxvYXQgZHkpOwotCi0gICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBn
bG9iYWxBbHBoYTsKLSAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10g
RE9NU3RyaW5nIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjsKLQotICAgICAgICBDYW52YXNHcmFk
aWVudCBjcmVhdGVMaW5lYXJHcmFkaWVudChpbiBmbG9hdCB4MCwgaW4gZmxvYXQgeTAsIGluIGZs
b2F0IHgxLCBpbiBmbG9hdCB5MSkKLSAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsK
LSAgICAgICAgQ2FudmFzR3JhZGllbnQgY3JlYXRlUmFkaWFsR3JhZGllbnQoaW4gZmxvYXQgeDAs
IGluIGZsb2F0IHkwLCBpbiBmbG9hdCByMCwgaW4gZmxvYXQgeDEsIGluIGZsb2F0IHkxLCBpbiBm
bG9hdCByMSkKLSAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICBh
dHRyaWJ1dGUgZmxvYXQgbGluZVdpZHRoOwotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxs
VG9OdWxsU3RyaW5nXSBET01TdHJpbmcgbGluZUNhcDsKLSAgICAgICAgYXR0cmlidXRlIFtDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGxpbmVKb2luOwotICAgICAgICBhdHRyaWJ1
dGUgZmxvYXQgbWl0ZXJMaW1pdDsKLQotICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgc2hhZG93T2Zm
c2V0WDsKLSAgICAgICAgYXR0cmlidXRlIGZsb2F0IHNoYWRvd09mZnNldFk7Ci0gICAgICAgIGF0
dHJpYnV0ZSBmbG9hdCBzaGFkb3dCbHVyOwotICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxs
VG9OdWxsU3RyaW5nXSBET01TdHJpbmcgc2hhZG93Q29sb3I7Ci0KLSAgICAgICAgdm9pZCBjbGVh
clJlY3QoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgd2lkdGgsIGluIGZsb2F0IGhl
aWdodCk7Ci0gICAgICAgIHZvaWQgZmlsbFJlY3QoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4g
ZmxvYXQgd2lkdGgsIGluIGZsb2F0IGhlaWdodCk7Ci0KLSAgICAgICAgdm9pZCBiZWdpblBhdGgo
KTsKLSAgICAgICAgdm9pZCBjbG9zZVBhdGgoKTsKLSAgICAgICAgdm9pZCBtb3ZlVG8oaW4gZmxv
YXQgeCwgaW4gZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgbGluZVRvKGluIGZsb2F0IHgsIGluIGZs
b2F0IHkpOwotICAgICAgICB2b2lkIHF1YWRyYXRpY0N1cnZlVG8oaW4gZmxvYXQgY3B4LCBpbiBm
bG9hdCBjcHksIGluIGZsb2F0IHgsIGluIGZsb2F0IHkpOwotICAgICAgICB2b2lkIGJlemllckN1
cnZlVG8oaW4gZmxvYXQgY3AxeCwgaW4gZmxvYXQgY3AxeSwgaW4gZmxvYXQgY3AyeCwgaW4gZmxv
YXQgY3AyeSwgaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgYXJjVG8oaW4g
ZmxvYXQgeDEsIGluIGZsb2F0IHkxLCBpbiBmbG9hdCB4MiwgaW4gZmxvYXQgeTIsIGluIGZsb2F0
IHJhZGl1cykKLSAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgdm9p
ZCByZWN0KGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHdpZHRoLCBpbiBmbG9hdCBo
ZWlnaHQpOwotICAgICAgICB2b2lkIGFyYyhpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9h
dCByYWRpdXMsIGluIGZsb2F0IHN0YXJ0QW5nbGUsIGluIGZsb2F0IGVuZEFuZ2xlLCBpbiBib29s
ZWFuIGFudGljbG9ja3dpc2UpCi0gICAgICAgICAgICByYWlzZXMgKERPTUV4Y2VwdGlvbik7Ci0g
ICAgICAgIHZvaWQgZmlsbCgpOwotICAgICAgICB2b2lkIHN0cm9rZSgpOwotICAgICAgICB2b2lk
IGNsaXAoKTsKLSAgICAgICAgYm9vbGVhbiBpc1BvaW50SW5QYXRoKGluIGZsb2F0IHgsIGluIGZs
b2F0IHkpOwotCi0gICAgICAgIC8vIHRleHQKLSAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBm
b250OwotICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRleHRBbGlnbjsKLSAgICAgICAgYXR0
cmlidXRlIERPTVN0cmluZyB0ZXh0QmFzZWxpbmU7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgZmls
bFRleHQoLyogNCAqLyk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgc3Ryb2tlVGV4dCgvKiA0ICov
KTsKLSAgICAgICAgVGV4dE1ldHJpY3MgbWVhc3VyZVRleHQoaW4gRE9NU3RyaW5nIHRleHQpOwot
Ci0gICAgICAgIC8vIG90aGVyCi0KLSAgICAgICAgdm9pZCBzZXRBbHBoYShpbiBmbG9hdCBhbHBo
YSk7Ci0gICAgICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGluIERPTVN0cmluZyBjb21w
b3NpdGVPcGVyYXRpb24pOwotCi0gICAgICAgIHZvaWQgc2V0TGluZVdpZHRoKGluIGZsb2F0IHdp
ZHRoKTsKLSAgICAgICAgdm9pZCBzZXRMaW5lQ2FwKGluIERPTVN0cmluZyBjYXApOwotICAgICAg
ICB2b2lkIHNldExpbmVKb2luKGluIERPTVN0cmluZyBqb2luKTsKLSAgICAgICAgdm9pZCBzZXRN
aXRlckxpbWl0KGluIGZsb2F0IGxpbWl0KTsKLQotICAgICAgICB2b2lkIGNsZWFyU2hhZG93KCk7
Ci0KLSAgICAgICAgW0N1c3RvbV0gdm9pZCBzZXRTdHJva2VDb2xvcigvKiAxICAqLyk7Ci0gICAg
ICAgIFtDdXN0b21dIHZvaWQgc2V0RmlsbENvbG9yKC8qIDEgKi8pOwotICAgICAgICBbQ3VzdG9t
XSB2b2lkIHN0cm9rZVJlY3QoLyogNCAqLyk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgZHJhd0lt
YWdlKC8qIDMgKi8pOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGRyYXdJbWFnZUZyb21SZWN0KC8q
IDEwICovKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBzZXRTaGFkb3coLyogMyAqLyk7Ci0gICAg
ICAgIFtDdXN0b21dIHZvaWQgY3JlYXRlUGF0dGVybigvKiAyICovKTsKLSAgICAgICAgCi0gICAg
ICAgIGF0dHJpYnV0ZSBbQ3VzdG9tXSBjdXN0b20gc3Ryb2tlU3R5bGU7Ci0gICAgICAgIGF0dHJp
YnV0ZSBbQ3VzdG9tXSBjdXN0b20gZmlsbFN0eWxlOwotICAgICAgICAKLSAgICAgICAgLy8gcGl4
ZWwgbWFuaXB1bGF0aW9uCi0gICAgICAgIEltYWdlRGF0YSBjcmVhdGVJbWFnZURhdGEoaW4gZmxv
YXQgc3csIGluIGZsb2F0IHNoKTsKLSAgICAgICAgSW1hZ2VEYXRhIGdldEltYWdlRGF0YShpbiBm
bG9hdCBzeCwgaW4gZmxvYXQgc3ksIGluIGZsb2F0IHN3LCBpbiBmbG9hdCBzaCkKLSAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHB1dEltYWdl
RGF0YSgvKiBpbiBJbWFnZURhdGEgaW1hZ2VkYXRhLCBpbiBmbG9hdCBkeCwgaW4gZmxvYXQgZHkg
WywgaW4gZmxvYXQgZGlydHlYLCBpbiBmbG9hdCBkaXJ0eVksIGluIGZsb2F0IGRpcnR5V2lkdGgs
IGluIGZsb2F0IGRpcnR5SGVpZ2h0XSAqLyk7Ci0gICAgfTsKLQotfQotCkluZGV4OiBXZWJDb3Jl
L2h0bWwvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNT
dHlsZS5jcHAJKHJldmlzaW9uIDQ2OTE5KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwyMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FudmFzU3R5bGUuaCIKLQotI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgotI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCi0jaW5jbHVkZSAiQ2FudmFz
UGF0dGVybi5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0KLSNpZiBQTEFURk9STShDRykKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q0dDb250ZXh0Lmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFFQYWlu
dGVyPgotI2luY2x1ZGUgPFFCcnVzaD4KLSNpbmNsdWRlIDxRUGVuPgotI2luY2x1ZGUgPFFDb2xv
cj4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhbnZhc1N0eWxlOjpDYW52YXNT
dHlsZShjb25zdCBTdHJpbmcmIGNvbG9yKQotICAgIDogbV90eXBlKENvbG9yU3RyaW5nKQotICAg
ICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0
IGdyYXlMZXZlbCkKLSAgICA6IG1fdHlwZShHcmF5TGV2ZWwpCi0gICAgLCBtX2FscGhhKDEpCi0g
ICAgLCBtX2dyYXlMZXZlbChncmF5TGV2ZWwpCi17Ci19Ci0KLUNhbnZhc1N0eWxlOjpDYW52YXNT
dHlsZShjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSkKLSAgICA6IG1fdHlwZShDb2xv
clN0cmluZ1dpdGhBbHBoYSkKLSAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgLCBtX2FscGhhKGFs
cGhhKQotewotfQotCi1DYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgZ3JheUxldmVsLCBm
bG9hdCBhbHBoYSkKLSAgICA6IG1fdHlwZShHcmF5TGV2ZWwpCi0gICAgLCBtX2FscGhhKGFscGhh
KQotICAgICwgbV9ncmF5TGV2ZWwoZ3JheUxldmVsKQotewotfQotCi1DYW52YXNTdHlsZTo6Q2Fu
dmFzU3R5bGUoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKLSAgICA6IG1fdHlw
ZShSR0JBKQotICAgICwgbV9hbHBoYShhKQotICAgICwgbV9yZWQocikKLSAgICAsIG1fZ3JlZW4o
ZykKLSAgICAsIG1fYmx1ZShiKQotewotfQotCi1DYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxv
YXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKLSAgICA6IG1fdHlwZShD
TVlLQSkKLSAgICAsIG1fYWxwaGEoYSkKLSAgICAsIG1fY3lhbihjKQotICAgICwgbV9tYWdlbnRh
KG0pCi0gICAgLCBtX3llbGxvdyh5KQotICAgICwgbV9ibGFjayhrKQotewotfQotCi1DYW52YXNT
dHlsZTo6Q2FudmFzU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gZ3JhZGllbnQpCi0g
ICAgOiBtX3R5cGUoZ3JhZGllbnQgPyBHcmFkaWVudCA6IENvbG9yU3RyaW5nKQotICAgICwgbV9n
cmFkaWVudChncmFkaWVudCkKLXsKLX0KLQotQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKFBhc3NS
ZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybikKLSAgICA6IG1fdHlwZShwYXR0ZXJuID8gSW1h
Z2VQYXR0ZXJuIDogQ29sb3JTdHJpbmcpCi0gICAgLCBtX3BhdHRlcm4ocGF0dGVybikKLXsKLX0K
LQotdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCi17Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNo
IChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBDb2xvclN0cmluZzogewotICAgICAgICAgICAgQ29s
b3IgYyA9IENvbG9yKG1fY29sb3IpOwotICAgICAgICAgICAgaWYgKGMuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYy5yZ2IoKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSR0JBMzIgY29sb3Ig
PSAwOyAvLyBkZWZhdWx0IGlzIHRyYW5zcGFyZW50IGJsYWNrCi0gICAgICAgICAgICBpZiAoQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKGNvbG9yLCBtX2NvbG9yKSkKLSAgICAgICAgICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIENvbG9yU3RyaW5nV2l0aEFscGhhOiB7Ci0gICAgICAgICAgICBDb2xv
ciBjID0gQ29sb3IobV9jb2xvcik7Ci0gICAgICAgICAgICBpZiAoYy5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihjb2xvcldpdGhPdmVycmlkZUFs
cGhhKGMucmdiKCksIG1fYWxwaGEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNw
YXJlbnQgYmxhY2sKLSAgICAgICAgICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3Is
IG1fY29sb3IpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIG1fYWxwaGEpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JheUxldmVsOgotICAgICAgICAgICAgLy8gV2UncmUg
b25seSBzdXBwb3J0aW5nIDI1NSBsZXZlbHMgb2YgZ3JheSBoZXJlLiAgU2luY2UgdGhpcyBpc24n
dAotICAgICAgICAgICAgLy8gZXZlbiBwYXJ0IG9mIEhUTUw1LCBJIGRvbid0IGV4cGVjdCBhbnlv
bmUgd2lsbCBjYXJlLiAgSWYgdGhleSBkbwotICAgICAgICAgICAgLy8gd2UnbGwgbWFrZSBhIGZh
bmNpZXIgQ29sb3IgYWJzdHJhY3Rpb24uCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihDb2xvcihtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBtX2FscGhh
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSR0JBOgotICAgICAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IobV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9h
bHBoYSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ01ZS0E6IHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3Jh
cGhpY3NDb250ZXh0IEFQSS4KLSAgICAgICAgICAgIC8vIFdlJ2xsIG5lZWQgYSBmYW5jaWVyIENv
bG9yIGFic3RyYWN0aW9uIHRvIHN1cHBvcnQgQ1lNS0EgY29ycmVjdGx5Ci0jaWYgUExBVEZPUk0o
Q0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29sb3IoY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIG1fY3lhbiwgbV9tYWdlbnRhLCBtX3llbGxvdywgbV9ibGFjaywgbV9h
bHBoYSk7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICAgICAgICAgIFFQZW4gY3VycmVudFBlbiA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wZW4oKTsKLSAgICAgICAgICAgIFFDb2xvciBj
bHI7Ci0gICAgICAgICAgICBjbHIuc2V0Q215a0YobV9jeWFuLCBtX21hZ2VudGEsIG1feWVsbG93
LCBtX2JsYWNrLCBtX2FscGhhKTsKLSAgICAgICAgICAgIGN1cnJlbnRQZW4uc2V0Q29sb3IoY2xy
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXRQZW4oY3VycmVu
dFBlbik7Ci0jZWxzZQotICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3Io
bV9jeWFuLCBtX21hZ2VudGEsIG1feWVsbG93LCBtX2JsYWNrLCBtX2FscGhhKSk7Ci0jZW5kaWYK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhZGllbnQ6Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudChjYW52YXNHcmFkaWVudCgpLT5n
cmFkaWVudCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEltYWdlUGF0dGVy
bjoKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVBhdHRlcm4oY2FudmFzUGF0dGVybigp
LT5wYXR0ZXJuKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIENhbnZh
c1N0eWxlOjphcHBseUZpbGxDb2xvcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAg
aWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAg
ICAgICAgY2FzZSBDb2xvclN0cmluZzogewotICAgICAgICAgICAgQ29sb3IgYyA9IENvbG9yKG1f
Y29sb3IpOwotICAgICAgICAgICAgaWYgKGMuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0RmlsbENvbG9yKGMucmdiKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgUkdCQTMyIHJnYmEgPSAwOyAvLyBkZWZhdWx0IGlz
IHRyYW5zcGFyZW50IGJsYWNrCi0gICAgICAgICAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZUNvbG9y
KHJnYmEsIG1fY29sb3IpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihy
Z2JhKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29sb3JT
dHJpbmdXaXRoQWxwaGE6IHsKLSAgICAgICAgICAgIENvbG9yIGMgPSBDb2xvcihtX2NvbG9yKTsK
LSAgICAgICAgICAgIGlmIChjLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxDb2xvcihjb2xvcldpdGhPdmVycmlkZUFscGhhKGMucmdiKCksIG1fYWxwaGEpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJHQkEz
MiBjb2xvciA9IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJlbnQgYmxhY2sKLSAgICAgICAgICAg
IGlmIChDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29sb3IsIG1fY29sb3IpKQotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihjb2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBt
X2FscGhhKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdy
YXlMZXZlbDoKLSAgICAgICAgICAgIC8vIFdlJ3JlIG9ubHkgc3VwcG9ydGluZyAyNTUgbGV2ZWxz
IG9mIGdyYXkgaGVyZS4gIFNpbmNlIHRoaXMgaXNuJ3QKLSAgICAgICAgICAgIC8vIGV2ZW4gcGFy
dCBvZiBIVE1MNSwgSSBkb24ndCBleHBlY3QgYW55b25lIHdpbGwgY2FyZS4gIElmIHRoZXkgZG8K
LSAgICAgICAgICAgIC8vIHdlJ2xsIG1ha2UgYSBmYW5jaWVyIENvbG9yIGFic3RyYWN0aW9uLgot
ICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yKG1fZ3JheUxldmVsLCBtX2dy
YXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFJHQkE6Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3Io
bV9yZWQsIG1fZ3JlZW4sIG1fYmx1ZSwgbV9hbHBoYSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ01ZS0E6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91
Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSAgICAgICAgICAg
IC8vIFdlJ2xsIG5lZWQgYSBmYW5jaWVyIENvbG9yIGFic3RyYWN0aW9uIHRvIHN1cHBvcnQgQ1lN
S0EgY29ycmVjdGx5Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRD
TVlLRmlsbENvbG9yKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX2N5YW4sIG1fbWFnZW50
YSwgbV95ZWxsb3csIG1fYmxhY2ssIG1fYWxwaGEpOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAg
ICAgICAgICBRQnJ1c2ggY3VycmVudEJydXNoID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmJydXNoKCk7Ci0gICAgICAgICAgICBRQ29sb3IgY2xyOwotICAgICAgICAgICAgY2xyLnNldENt
eWtGKG1fY3lhbiwgbV9tYWdlbnRhLCBtX3llbGxvdywgbV9ibGFjaywgbV9hbHBoYSk7Ci0gICAg
ICAgICAgICBjdXJyZW50QnJ1c2guc2V0Q29sb3IoY2xyKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5zZXRCcnVzaChjdXJyZW50QnJ1c2gpOwotI2Vsc2UKLSAgICAg
ICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcihtX2N5YW4sIG1fbWFnZW50YSwgbV95
ZWxsb3csIG1fYmxhY2ssIG1fYWxwaGEpKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFkaWVudDoKLSAgICAgICAgICAgIGNvbnRleHQtPnNl
dEZpbGxHcmFkaWVudChjYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEltYWdlUGF0dGVybjoKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotfQpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgJKHJldmlzaW9uIDQ2OTE5
KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FudmFzU3R5bGVfaAotI2RlZmluZSBD
YW52YXNTdHlsZV9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDYW52YXNHcmFkaWVudDsKLSAgICBjbGFzcyBDYW52YXNQ
YXR0ZXJuOwotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLQotICAgIGNsYXNzIENhbnZhc1N0
eWxlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzU3R5bGU+IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBj
b2xvcikgeyByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1N0eWxlKGNvbG9yKSk7IH0KLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IGNyZWF0ZShmbG9hdCBncmF5TGV2ZWwp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNTdHlsZShncmF5TGV2ZWwpKTsgfQotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgY29s
b3IsIGZsb2F0IGFscGhhKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzU3R5bGUoY29sb3Is
IGFscGhhKSk7IH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IGNyZWF0
ZShmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2Fu
dmFzU3R5bGUoZ3JheUxldmVsLCBhbHBoYSkpOyB9Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc1N0eWxlPiBjcmVhdGUoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1N0eWxlKHIsIGcsIGIsIGEpKTsgfQotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gY3JlYXRlKGZsb2F0IGMsIGZsb2F0IG0s
IGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNT
dHlsZShjLCBtLCB5LCBrLCBhKSk7IH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFz
U3R5bGU+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBncmFkaWVudCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IENhbnZhc1N0eWxlKGdyYWRpZW50KSk7IH0KLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+
IHBhdHRlcm4pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNTdHlsZShwYXR0ZXJuKSk7IH0K
LQotICAgICAgICBTdHJpbmcgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAg
ICAgIENhbnZhc0dyYWRpZW50KiBjYW52YXNHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3Jh
ZGllbnQuZ2V0KCk7IH0KLSAgICAgICAgQ2FudmFzUGF0dGVybiogY2FudmFzUGF0dGVybigpIGNv
bnN0IHsgcmV0dXJuIG1fcGF0dGVybi5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgYXBwbHlGaWxs
Q29sb3IoR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgICAgIHZvaWQgYXBwbHlTdHJva2VDb2xvcihH
cmFwaGljc0NvbnRleHQqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENhbnZhc1N0eWxlKGNv
bnN0IFN0cmluZyYgY29sb3IpOwotICAgICAgICBDYW52YXNTdHlsZShmbG9hdCBncmF5TGV2ZWwp
OwotICAgICAgICBDYW52YXNTdHlsZShjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSk7
Ci0gICAgICAgIENhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpOwotICAg
ICAgICBDYW52YXNTdHlsZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsKLSAg
ICAgICAgQ2FudmFzU3R5bGUoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxv
YXQgYSk7Ci0gICAgICAgIENhbnZhc1N0eWxlKFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+KTsK
LSAgICAgICAgQ2FudmFzU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPik7Ci0KLSAgICAg
ICAgZW51bSBUeXBlIHsgQ29sb3JTdHJpbmcsIENvbG9yU3RyaW5nV2l0aEFscGhhLCBHcmF5TGV2
ZWwsIFJHQkEsIENNWUtBLCBHcmFkaWVudCwgSW1hZ2VQYXR0ZXJuIH07Ci0KLSAgICAgICAgVHlw
ZSBtX3R5cGU7Ci0KLSAgICAgICAgU3RyaW5nIG1fY29sb3I7Ci0gICAgICAgIFJlZlB0cjxDYW52
YXNHcmFkaWVudD4gbV9ncmFkaWVudDsKLSAgICAgICAgUmVmUHRyPENhbnZhc1BhdHRlcm4+IG1f
cGF0dGVybjsKLQotICAgICAgICBmbG9hdCBtX2FscGhhOwotCi0gICAgICAgIGZsb2F0IG1fZ3Jh
eUxldmVsOwotCi0gICAgICAgIGZsb2F0IG1fcmVkOwotICAgICAgICBmbG9hdCBtX2dyZWVuOwot
ICAgICAgICBmbG9hdCBtX2JsdWU7Ci0KLSAgICAgICAgZmxvYXQgbV9jeWFuOwotICAgICAgICBm
bG9hdCBtX21hZ2VudGE7Ci0gICAgICAgIGZsb2F0IG1feWVsbG93OwotICAgICAgICBmbG9hdCBt
X2JsYWNrOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAkocmV2aXNpb24gNDY5MTkpCShm
cm9tIFdlYkNvcmUvaHRtbC9DYW52YXNHcmFkaWVudC5jcHA6NDY5MTkpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBh
dG9rZXIuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FudmFz
R3JhZGllbnQuaCIKKworI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYW52YXNHcmFkaWVudDo6Q2FudmFz
R3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQorICAg
IDogbV9ncmFkaWVudChHcmFkaWVudDo6Y3JlYXRlKHAwLCBwMSkpCisgICAgLCBtX2Rhc2hiYXJk
Q29tcGF0aWJpbGl0eU1vZGUoZmFsc2UpCit7Cit9CisKK0NhbnZhc0dyYWRpZW50OjpDYW52YXNH
cmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQm
IHAxLCBmbG9hdCByMSkKKyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNyZWF0ZShwMCwgcjAs
IHAxLCByMSkpCisgICAgLCBtX2Rhc2hiYXJkQ29tcGF0aWJpbGl0eU1vZGUoZmFsc2UpCit7Cit9
CisKK3ZvaWQgQ2FudmFzR3JhZGllbnQ6OmFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3Qg
U3RyaW5nJiBjb2xvciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCEodmFsdWUgPj0g
MCAmJiB2YWx1ZSA8PSAxLjBmKSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgUkdCQTMyIHJnYmEgPSAwOworICAgIGlmICghQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIGNvbG9yKSkgeworICAgICAgICBpZiAoIW1fZGFzaGJh
cmRDb21wYXRpYmlsaXR5TW9kZSkKKyAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZ3JhZGllbnQtPmFkZENvbG9yU3RvcCh2YWx1ZSwg
Q29sb3IocmdiYSkpOworfQorCit9IC8vIG5hbWVzcGFjZQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOm1lcmdlaW5mbwoKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmgJKHJl
dmlzaW9uIDQ2OTE5KQkoZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaDo0NjkxOSkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FudmFz
R3JhZGllbnRfaAorI2RlZmluZSBDYW52YXNHcmFkaWVudF9oCisKKyNpbmNsdWRlICJHcmFkaWVu
dC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU3RyaW5nOworCisgICAg
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworICAgIGNsYXNzIENhbnZhc0dyYWRpZW50IDog
cHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzR3JhZGllbnQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2lu
dCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENhbnZhc0dyYWRpZW50KHAwLCBwMSkpOworICAgICAgICB9CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQ
b2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzR3JhZGllbnQocDAs
IHIwLCBwMSwgcjEpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgR3JhZGllbnQqIGdy
YWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudC5nZXQoKTsgfQorCisgICAgICAgIHZv
aWQgYWRkQ29sb3JTdG9wKGZsb2F0IHZhbHVlLCBjb25zdCBTdHJpbmcmIGNvbG9yLCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICAgICAgdm9pZCBnZXRDb2xvcihmbG9hdCB2YWx1ZSwgZmxvYXQqIHIs
IGZsb2F0KiBnLCBmbG9hdCogYiwgZmxvYXQqIGEpIGNvbnN0IHsgbV9ncmFkaWVudC0+Z2V0Q29s
b3IodmFsdWUsIHIsIGcsIGIsIGEpOyB9CisKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CisgICAgICAgIHZvaWQgc2V0RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUoKSB7IG1fZGFzaGJh
cmRDb21wYXRpYmlsaXR5TW9kZSA9IHRydWU7IH0KKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9p
bnQmIHAxKTsKKyAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZs
b2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpOworICAgICAgICAKKyAgICAg
ICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OworICAgICAgICBib29sIG1fZGFzaGJhcmRD
b21wYXRpYmlsaXR5TW9kZTsKKyAgICB9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc0dyYWRpZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmlkbAkocmV2aXNpb24gNDY5MTkpCShmcm9tIFdlYkNvcmUvaHRtbC9DYW52
YXNHcmFkaWVudC5pZGw6NDY5MTkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRp
ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCittb2R1bGUgaHRtbCB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBJbnRlcmZhY2VV
VUlEPWJiMTEwOGVhLTZiOGMtNGEwOC04OTRhLTIxODYyODYzMGNkYiwKKyAgICAgICAgSW1wbGVt
ZW50YXRpb25VVUlEPWEyOTQyYWU2LTI3MzEtNDI4Ni05OGNjLTlkNWU3OWUyMGRlMQorICAgIF0g
Q2FudmFzR3JhZGllbnQgeworCisgICAgICAgIHZvaWQgYWRkQ29sb3JTdG9wKGluIGZsb2F0IG9m
ZnNldCwgaW4gRE9NU3RyaW5nIGNvbG9yKQorICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRp
b24pOworCisgICAgfTsKKworfQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZv
CgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwCShyZXZpc2lvbiA0Njkx
OSkJKGZyb20gV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRlcm4uY3BwOjQ2OTE5KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNh
bnZhc1BhdHRlcm4uaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FudmFzUGF0
dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVh
dFgsIGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgdHlwZSA9PSAicmVwZWF0IikgeworICAgICAgICByZXBl
YXRYID0gdHJ1ZTsKKyAgICAgICAgcmVwZWF0WSA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKHR5cGUgPT0gIm5vLXJlcGVhdCIpIHsKKyAgICAgICAgcmVwZWF0WCA9IGZh
bHNlOworICAgICAgICByZXBlYXRZID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKHR5cGUgPT0gInJlcGVhdC14IikgeworICAgICAgICByZXBlYXRYID0gdHJ1ZTsKKyAg
ICAgICAgcmVwZWF0WSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0
eXBlID09ICJyZXBlYXQteSIpIHsKKyAgICAgICAgcmVwZWF0WCA9IGZhbHNlOworICAgICAgICBy
ZXBlYXRZID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlYyA9IFNZTlRBWF9F
UlI7Cit9CisKK0NhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKKyAgICA6IG1fcGF0dGVy
bihQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpKQorICAgICwgbV9vcmln
aW5DbGVhbihvcmlnaW5DbGVhbikKK3sKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
bWVyZ2VpbmZvCgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmgJKHJldmlzaW9u
IDQ2OTE5KQkoZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oOjQ2OTE5KQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FudmFzUGF0dGVybl9oCisjZGVmaW5l
IENhbnZhc1BhdHRlcm5faAorCisjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgY2xhc3MgSW1hZ2U7CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworICAgIGNsYXNzIENhbnZhc1BhdHRlcm4gOiBwdWJs
aWMgUmVmQ291bnRlZDxDYW52YXNQYXR0ZXJuPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgdm9pZCBwYXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0cmluZyYsIGJvb2wmIHJlcGVhdFgs
IGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDYW52YXNQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJv
b2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKGltYWdlLCByZXBlYXRYLCByZXBlYXRZLCBv
cmlnaW5DbGVhbikpOworICAgICAgICB9CisKKyAgICAgICAgUGF0dGVybiogcGF0dGVybigpIGNv
bnN0IHsgcmV0dXJuIG1fcGF0dGVybi5nZXQoKTsgfQorCisgICAgICAgIGJvb2wgb3JpZ2luQ2xl
YW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbkNsZWFuOyB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBDYW52YXNQYXR0ZXJuKEltYWdlKiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJv
b2wgb3JpZ2luQ2xlYW4pOworCisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBtX3BhdHRlcm47Cisg
ICAgICAgIGJvb2wgbV9vcmlnaW5DbGVhbjsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNQYXR0ZXJuLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwoKSW5kZXg6IFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbAkocmV2aXNpb24gNDY5MTkpCShmcm9tIFdl
YkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmlkbDo0NjkxOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUGF0dGVybi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworbW9kdWxlIGh0bWwgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAg
ICAgSW50ZXJmYWNlVVVJRD1jMjEzMTM0OC02ZDhjLTQ3YjUtODZjYy1kNDFhZmYzNGNlMTUsCisg
ICAgICAgIEltcGxlbWVudGF0aW9uVVVJRD04MmY1ZDcxMy0zZDE3LTQ0ZGQtYWE0YS03NzY2ZmUz
NDU5NDAKKyAgICBdIENhbnZhc1BhdHRlcm4geworCisgICAgfTsKKworfQorCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaWRsCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjptZXJnZWluZm8KCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1BpeGVsQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UGl4ZWxBcnJheS5jcHAJKHJldmlzaW9uIDQ2OTE5KQkoZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFz
UGl4ZWxBcnJheS5jcHA6NDY5MTkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVs
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICAKKyAgICBQYXNzUmVmUHRyPENhbnZhc1BpeGVsQXJyYXk+IENhbnZhc1Bp
eGVsQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENhbnZhc1BpeGVsQXJyYXkobGVuZ3RoKSk7CisgICAgfQorICAgIAorICAg
IENhbnZhc1BpeGVsQXJyYXk6OkNhbnZhc1BpeGVsQXJyYXkodW5zaWduZWQgbGVuZ3RoKQorICAg
ICAgICA6IG1fZGF0YShXVEY6OkJ5dGVBcnJheTo6Y3JlYXRlKGxlbmd0aCkpCisgICAgeworICAg
IH0KKyAgICAKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUGl4ZWxBcnJheS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwoKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oCShyZXZpc2lvbiA0NjkxOSkJKGZy
b20gV2ViQ29yZS9odG1sL0NhbnZhc1BpeGVsQXJyYXkuaDo0NjkxOSkKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ2FudmFzUGl4ZWxBcnJheV9oCisjZGVmaW5lIENhbnZhc1BpeGVs
QXJyYXlfaAorCisjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAorICAgIGNsYXNzIENhbnZhc1BpeGVsQXJyYXkgOiBwdWJsaWMgUmVmQ291bnRlZDxD
YW52YXNQaXhlbEFycmF5PiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDYW52YXNQaXhlbEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisg
ICAgICAgIFdURjo6Qnl0ZUFycmF5KiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+bGVuZ3RoKCk7
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0KGluZGV4LCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGluZGV4LCB1bnNp
Z25lZCBjaGFyJiByZXN1bHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2RhdGEtPmdldChpbmRleCwgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgQ2FudmFzUGl4ZWxBcnJheSh1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBSZWZQdHI8
V1RGOjpCeXRlQXJyYXk+IG1fZGF0YTsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQ2FudmFzUGl4ZWxBcnJheV9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46bWVyZ2VpbmZvCgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFy
cmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJy
YXkuaWRsCShyZXZpc2lvbiA0NjkxOSkJKGZyb20gV2ViQ29yZS9odG1sL0NhbnZhc1BpeGVsQXJy
YXkuaWRsOjQ2OTE5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgaHRtbCB7Cisj
aWYgIWRlZmluZWQoTEFOR1VBR0VfSkFWQVNDUklQVCkgfHwgIUxBTkdVQUdFX0pBVkFTQ1JJUFQg
fHwgZGVmaW5lZChWOF9CSU5ESU5HKSAmJiBWOF9CSU5ESU5HCisgICAgaW50ZXJmYWNlIFsKKyAg
ICAgICAgQ3VzdG9tSGVhZGVyLAorICAgICAgICBIYXNDdXN0b21JbmRleEdldHRlciwKKyAgICAg
ICAgSGFzQ3VzdG9tSW5kZXhTZXR0ZXIKKyAgICBdIENhbnZhc1BpeGVsQXJyYXkgeworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBsZW5ndGg7CisgICAgfTsKKyNlbmRpZgorfQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmlk
bApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCgpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNDY5MTkp
CShmcm9tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOjQ2OTE5KQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgiCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1
ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fu
dmFzR3JhZGllbnQuaCIKKyNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCisjaW5jbHVkZSAiQ2Fu
dmFzU3R5bGUuaCIKKyNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIktVUkwu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJUZXh0TWV0cmljcy5oIgorI2luY2x1
ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0
Zi9CeXRlQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZGVmYXVsdEZvbnQgPSAiMTBweCBzYW5z
LXNlcmlmIjsKKworCitjbGFzcyBDYW52YXNTdHJva2VTdHlsZUFwcGxpZXIgOiBwdWJsaWMgU3Ry
b2tlU3R5bGVBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBDYW52YXNTdHJva2VTdHlsZUFwcGxpZXIo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjYW52YXNDb250ZXh0KQorICAgICAgICA6IG1fY2Fu
dmFzQ29udGV4dChjYW52YXNDb250ZXh0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVh
bCB2b2lkIHN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dCogYykKKyAgICB7CisgICAgICAgIGMt
PnNldFN0cm9rZVRoaWNrbmVzcyhtX2NhbnZhc0NvbnRleHQtPmxpbmVXaWR0aCgpKTsKKyAgICAg
ICAgYy0+c2V0TGluZUNhcChtX2NhbnZhc0NvbnRleHQtPmdldExpbmVDYXAoKSk7CisgICAgICAg
IGMtPnNldExpbmVKb2luKG1fY2FudmFzQ29udGV4dC0+Z2V0TGluZUpvaW4oKSk7CisgICAgICAg
IGMtPnNldE1pdGVyTGltaXQobV9jYW52YXNDb250ZXh0LT5taXRlckxpbWl0KCkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIG1fY2FudmFzQ29udGV4
dDsKK307CisKKworCitDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQorICAgIDogbV9jYW52YXMoY2FudmFz
KQorICAgICwgbV9zdGF0ZVN0YWNrKDEpCit7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgZXZlbiBp
ZiB0aGUgZHJhd2luZ0NvbnRleHQoKSBoYXMgYSBkaWZmZXJlbnQgZGVmYXVsdAorICAgIC8vIHRo
aWNrbmVzcywgaXQgaXMgaW4gc3luYyB3aXRoIHRoZSBjYW52YXMgdGhpY2tuZXNzLgorICAgIHNl
dExpbmVXaWR0aChsaW5lV2lkdGgoKSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpyZWYoKQoreworICAgIG1fY2FudmFzLT5yZWYoKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRlcmVmKCkKK3sKKyAgICBtX2NhbnZhcy0+ZGVyZWYoKTsgCit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCit7CisgICAgbV9zdGF0ZVN0
YWNrLnJlc2l6ZSgxKTsKKyAgICBtX3N0YXRlU3RhY2suZmlyc3QoKSA9IFN0YXRlKCk7Cit9CisK
K0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKCkKKyAgICA6IG1fc3Ryb2tl
U3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZSgiYmxhY2siKSkKKyAgICAsIG1fZmlsbFN0eWxlKENh
bnZhc1N0eWxlOjpjcmVhdGUoImJsYWNrIikpCisgICAgLCBtX2xpbmVXaWR0aCgxKQorICAgICwg
bV9saW5lQ2FwKEJ1dHRDYXApCisgICAgLCBtX2xpbmVKb2luKE1pdGVySm9pbikKKyAgICAsIG1f
bWl0ZXJMaW1pdCgxMCkKKyAgICAsIG1fc2hhZG93Qmx1cigwKQorICAgICwgbV9zaGFkb3dDb2xv
cigiYmxhY2siKQorICAgICwgbV9nbG9iYWxBbHBoYSgxKQorICAgICwgbV9nbG9iYWxDb21wb3Np
dGUoQ29tcG9zaXRlU291cmNlT3ZlcikKKyAgICAsIG1faW52ZXJ0aWJsZUNUTSh0cnVlKQorICAg
ICwgbV90ZXh0QWxpZ24oU3RhcnRUZXh0QWxpZ24pCisgICAgLCBtX3RleHRCYXNlbGluZShBbHBo
YWJldGljVGV4dEJhc2VsaW5lKQorICAgICwgbV91bnBhcnNlZEZvbnQoZGVmYXVsdEZvbnQpCisg
ICAgLCBtX3JlYWxpemVkRm9udChmYWxzZSkKK3sKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNhdmUoKQoreworICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID49IDEp
OworICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoc3RhdGUoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAg
ICBjLT5zYXZlKCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXN0b3Jl
KCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA+PSAxKTsKKyAgICBpZiAobV9z
dGF0ZVN0YWNrLnNpemUoKSA8PSAxKQorICAgICAgICByZXR1cm47CisgICAgbV9wYXRoLnRyYW5z
Zm9ybShzdGF0ZSgpLm1fdHJhbnNmb3JtKTsKKyAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgp
OworICAgIG1fcGF0aC50cmFuc2Zvcm0oc3RhdGUoKS5tX3RyYW5zZm9ybS5pbnZlcnNlKCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQor
ICAgICAgICByZXR1cm47CisgICAgYy0+cmVzdG9yZSgpOworfQorCitDYW52YXNTdHlsZSogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHN0YXRlKCkubV9zdHJva2VTdHlsZS5nZXQoKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldFN0cm9rZVN0eWxlKFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHN0eWxlKQor
eworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NhbnZhcy0+
b3JpZ2luQ2xlYW4oKSkgeworICAgICAgICBpZiAoQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0
eWxlLT5jYW52YXNQYXR0ZXJuKCkpIHsKKyAgICAgICAgICAgIGlmICghcGF0dGVybi0+b3JpZ2lu
Q2xlYW4oKSkKKyAgICAgICAgICAgICAgICBtX2NhbnZhcy0+c2V0T3JpZ2luVGFpbnRlZCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlID0gc3R5bGU7Cisg
ICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisg
ICAgICAgIHJldHVybjsKKyAgICBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmFwcGx5U3Ryb2tlQ29s
b3IoYyk7Cit9CisKK0NhbnZhc1N0eWxlKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxT
dHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRlKCkubV9maWxsU3R5bGUuZ2V0KCk7Cit9
CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUoUGFzc1JlZlB0
cjxDYW52YXNTdHlsZT4gc3R5bGUpCit7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJu
OworIAorICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSkgeworICAgICAgICBpZiAoQ2Fu
dmFzUGF0dGVybiogcGF0dGVybiA9IHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpIHsKKyAgICAgICAg
ICAgIGlmICghcGF0dGVybi0+b3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgICAgICAgICBtX2NhbnZh
cy0+c2V0T3JpZ2luVGFpbnRlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGUoKS5t
X2ZpbGxTdHlsZSA9IHN0eWxlOworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250
ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgc3RhdGUoKS5tX2ZpbGxT
dHlsZS0+YXBwbHlGaWxsQ29sb3IoYyk7Cit9CisKK2Zsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6bGluZVdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGUoKS5tX2xpbmVXaWR0
aDsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldExpbmVXaWR0aChmbG9h
dCB3aWR0aCkKK3sKKyAgICBpZiAoISh3aWR0aCA+IDApKQorICAgICAgICByZXR1cm47CisgICAg
c3RhdGUoKS5tX2xpbmVXaWR0aCA9IHdpZHRoOworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRy
YXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgYy0+c2V0
U3Ryb2tlVGhpY2tuZXNzKHdpZHRoKTsKK30KKworU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6bGluZUNhcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxpbmVDYXBOYW1lKHN0YXRlKCku
bV9saW5lQ2FwKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldExpbmVD
YXAoY29uc3QgU3RyaW5nJiBzKQoreworICAgIExpbmVDYXAgY2FwOworICAgIGlmICghcGFyc2VM
aW5lQ2FwKHMsIGNhcCkpCisgICAgICAgIHJldHVybjsKKyAgICBzdGF0ZSgpLm1fbGluZUNhcCA9
IGNhcDsKKyAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlm
ICghYykKKyAgICAgICAgcmV0dXJuOworICAgIGMtPnNldExpbmVDYXAoY2FwKTsKK30KKworU3Ry
aW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6bGluZUpvaW4oKSBjb25zdAoreworICAgIHJl
dHVybiBsaW5lSm9pbk5hbWUoc3RhdGUoKS5tX2xpbmVKb2luKTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldExpbmVKb2luKGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBM
aW5lSm9pbiBqb2luOworICAgIGlmICghcGFyc2VMaW5lSm9pbihzLCBqb2luKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHN0YXRlKCkubV9saW5lSm9pbiA9IGpvaW47CisgICAgR3JhcGhpY3NDb250
ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsK
KyAgICBjLT5zZXRMaW5lSm9pbihqb2luKTsKK30KKworZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjptaXRlckxpbWl0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGUoKS5tX21pdGVy
TGltaXQ7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRNaXRlckxpbWl0
KGZsb2F0IGxpbWl0KQoreworICAgIGlmICghKGxpbWl0ID4gMCkpCisgICAgICAgIHJldHVybjsK
KyAgICBzdGF0ZSgpLm1fbWl0ZXJMaW1pdCA9IGxpbWl0OworICAgIEdyYXBoaWNzQ29udGV4dCog
YyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAg
Yy0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7Cit9CisKK2Zsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2hhZG93T2Zmc2V0WCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRlKCkubV9zaGFk
b3dPZmZzZXQud2lkdGgoKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dFNoYWRvd09mZnNldFgoZmxvYXQgeCkKK3sKKyAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LnNl
dFdpZHRoKHgpOworICAgIGFwcGx5U2hhZG93KCk7Cit9CisKK2Zsb2F0IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2hhZG93T2Zmc2V0WSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRlKCku
bV9zaGFkb3dPZmZzZXQuaGVpZ2h0KCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRTaGFkb3dPZmZzZXRZKGZsb2F0IHkpCit7CisgICAgc3RhdGUoKS5tX3NoYWRvd09m
ZnNldC5zZXRIZWlnaHQoeSk7CisgICAgYXBwbHlTaGFkb3coKTsKK30KKworZmxvYXQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzaGFkb3dCbHVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3Rh
dGUoKS5tX3NoYWRvd0JsdXI7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRTaGFkb3dCbHVyKGZsb2F0IGJsdXIpCit7CisgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBi
bHVyOworICAgIGFwcGx5U2hhZG93KCk7Cit9CisKK1N0cmluZyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNoYWRvd0NvbG9yKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQg
dGhpcyByZXR1cm4gaWYgeW91IGNhbGxlZCBzZXRTaGFkb3cgd2l0aCBhIG5vbi1zdHJpbmcgY29s
b3I/CisgICAgcmV0dXJuIHN0YXRlKCkubV9zaGFkb3dDb2xvcjsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvd0NvbG9yKGNvbnN0IFN0cmluZyYgY29sb3IpCit7
CisgICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gY29sb3I7CisgICAgYXBwbHlTaGFkb3coKTsK
K30KKworZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpnbG9iYWxBbHBoYSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0YXRlKCkubV9nbG9iYWxBbHBoYTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldEdsb2JhbEFscGhhKGZsb2F0IGFscGhhKQoreworICAgIGlm
ICghKGFscGhhID49IDAgJiYgYWxwaGEgPD0gMSkpCisgICAgICAgIHJldHVybjsKKyAgICBzdGF0
ZSgpLm1fZ2xvYmFsQWxwaGEgPSBhbHBoYTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3
aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIGMtPnNldEFs
cGhhKGFscGhhKTsKK30KKworU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Z2xvYmFs
Q29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcG9zaXRlT3BlcmF0
b3JOYW1lKHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOworfQorCit2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0cmluZyYg
b3BlcmF0aW9uKQoreworICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wOworICAgIGlmICghcGFyc2VD
b21wb3NpdGVPcGVyYXRvcihvcGVyYXRpb24sIG9wKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN0
YXRlKCkubV9nbG9iYWxDb21wb3NpdGUgPSBvcDsKKyAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIGMtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAg
IG5ld1RyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oc3gsIHN5KTsKKyAgICBpZiAoIW5ld1RyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9
IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhdGUoKS5tX3RyYW5zZm9y
bSA9IG5ld1RyYW5zZm9ybTsKKyAgICBjLT5zY2FsZShGbG9hdFNpemUoc3gsIHN5KSk7CisgICAg
bV9wYXRoLnRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnNjYWxlTm9uVW5pZm9ybSgx
LjAvc3gsIDEuMC9zeSkpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cm90
YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQoreworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRy
YXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFz
dGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBuZXdU
cmFuc2Zvcm0ucm90YXRlKGFuZ2xlSW5SYWRpYW5zIC8gcGlEb3VibGUgKiAxODAuMCk7CisgICAg
aWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgc3RhdGUoKS5tX2lu
dmVydGlibGVDVE0gPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRl
KCkubV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07CisgICAgYy0+cm90YXRlKGFuZ2xlSW5SYWRp
YW5zKTsKKyAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkucm90YXRl
KC1hbmdsZUluUmFkaWFucyAvIHBpRG91YmxlICogMTgwLjApKTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpCit7CisgICAg
R3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgp
Lm1fdHJhbnNmb3JtOworICAgIG5ld1RyYW5zZm9ybS50cmFuc2xhdGUodHgsIHR5KTsKKyAgICBp
ZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBzdGF0ZSgpLm1faW52
ZXJ0aWJsZUNUTSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhdGUo
KS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKKyAgICBjLT50cmFuc2xhdGUodHgsIHR5KTsK
KyAgICBtX3BhdGgudHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKC10
eCwgLXR5KSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2Zvcm0o
ZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9hdCBkeCwgZmxv
YXQgZHkpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAg
ICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxl
Q1RNKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gSFRNTDUgMy4xNC4xMS4xIC0tIGln
bm9yZSBhbnkgY2FsbHMgdGhhdCBwYXNzIG5vbi1maW5pdGUgbnVtYmVycworICAgIGlmICghaXNm
aW5pdGUobTExKSB8ICFpc2Zpbml0ZShtMjEpIHwgIWlzZmluaXRlKGR4KSB8IAorICAgICAgICAh
aXNmaW5pdGUobTEyKSB8ICFpc2Zpbml0ZShtMjIpIHwgIWlzZmluaXRlKGR5KSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtKG0xMSwgbTEyLCBt
MjEsIG0yMiwgZHgsIGR5KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZXdUcmFuc2Zvcm0g
PSB0cmFuc2Zvcm0gKiBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIGlmICghbmV3VHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIHN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFs
c2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0g
bmV3VHJhbnNmb3JtOworICAgIGMtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOworICAgIG1fcGF0aC50
cmFuc2Zvcm0odHJhbnNmb3JtLmludmVyc2UoKSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRUcmFuc2Zvcm0oZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0yMSwg
ZmxvYXQgbTIyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBIVE1MNSAzLjE0LjExLjEgLS0gaWdub3JlIGFueSBjYWxscyB0aGF0IHBhc3Mgbm9u
LWZpbml0ZSBudW1iZXJzCisgICAgaWYgKCFpc2Zpbml0ZShtMTEpIHwgIWlzZmluaXRlKG0yMSkg
fCAhaXNmaW5pdGUoZHgpIHwgCisgICAgICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0y
MikgfCAhaXNmaW5pdGUoZHkpKQorICAgICAgICByZXR1cm47CisKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIGlmICghY3RtLmlzSW52ZXJ0
aWJsZSgpKQorICAgICAgICByZXR1cm47CisgICAgYy0+Y29uY2F0Q1RNKGMtPmdldENUTSgpLmlu
dmVyc2UoKSk7CisgICAgYy0+Y29uY2F0Q1RNKG1fY2FudmFzLT5iYXNlVHJhbnNmb3JtKCkpOwor
ICAgIHN0YXRlKCkubV90cmFuc2Zvcm0ubXVsdGlwbHkoY3RtLmludmVyc2UoKSk7CisgICAgbV9w
YXRoLnRyYW5zZm9ybShjdG0pOworCisgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSB0cnVl
OworICAgIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBtMjIsIGR4LCBkeSk7Cit9CisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihjb25zdCBTdHJpbmcmIGNv
bG9yKQoreworICAgIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUoY29sb3IpKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0
IGdyYXlMZXZlbCkKK3sKKyAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlKGdy
YXlMZXZlbCwgMSkpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ry
b2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpCit7CisgICAgc2V0U3Ry
b2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZShjb2xvciwgYWxwaGEpKTsKK30KKwordm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0IGdyYXlMZXZlbCwg
ZmxvYXQgYWxwaGEpCit7CisgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZShn
cmF5TGV2ZWwsIGFscGhhKSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRTdHJva2VDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQoreworICAg
IHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUociwgZywgYiwgYSkpOworfQorCit2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlQ29sb3IoZmxvYXQgYywgZmxv
YXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKK3sKKyAgICBzZXRTdHJva2VTdHlsZShD
YW52YXNTdHlsZTo6Y3JlYXRlKGMsIG0sIHksIGssIGEpKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yKQoreworICAg
IHNldEZpbGxTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlKGNvbG9yKSk7Cit9CisKK3ZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IoZmxvYXQgZ3JheUxldmVsKQorewor
ICAgIHNldEZpbGxTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlKGdyYXlMZXZlbCwgMSkpOworfQor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGNvbnN0IFN0cmlu
ZyYgY29sb3IsIGZsb2F0IGFscGhhKQoreworICAgIHNldEZpbGxTdHlsZShDYW52YXNTdHlsZTo6
Y3JlYXRlKGNvbG9yLCBhbHBoYSkpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCit7CisgICAgc2V0
RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUoZ3JheUxldmVsLCBhbHBoYSkpOworfQorCit2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGZsb2F0IHIsIGZsb2F0
IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpj
cmVhdGUociwgZywgYiwgYSkpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0RmlsbENvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEp
Cit7CisgICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUoYywgbSwgeSwgaywgYSkp
OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YmVnaW5QYXRoKCkKK3sKKyAg
ICBtX3BhdGguY2xlYXIoKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNs
b3NlUGF0aCgpCit7CisgICAgbV9wYXRoLmNsb3NlU3VicGF0aCgpOworfQorCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6bW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgaWYg
KCFpc2Zpbml0ZSh4KSB8ICFpc2Zpbml0ZSh5KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
c3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKKyAgICBtX3BhdGgubW92
ZVRvKEZsb2F0UG9pbnQoeCwgeSkpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6bGluZVRvKGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgaWYgKCFpc2Zpbml0ZSh4KSB8ICFp
c2Zpbml0ZSh5KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGli
bGVDVE0pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fcGF0aC5oYXNDdXJyZW50UG9pbnQo
KSkKKyAgICAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5KSk7Cit9CisKK3ZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpxdWFkcmF0aWNDdXJ2ZVRvKGZsb2F0IGNweCwgZmxvYXQg
Y3B5LCBmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIGlmICghaXNmaW5pdGUoY3B4KSB8ICFpc2Zp
bml0ZShjcHkpIHwgIWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICghbV9wYXRoLmhhc0N1cnJlbnRQb2ludCgpKQorICAgICAgICBtX3BhdGgubW92ZVRvKEZs
b2F0UG9pbnQoeCwgeSkpOworICAgIGVsc2UKKyAgICAgICAgbV9wYXRoLmFkZFF1YWRDdXJ2ZVRv
KEZsb2F0UG9pbnQoY3B4LCBjcHkpLCBGbG9hdFBvaW50KHgsIHkpKTsKK30KKwordm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmJlemllckN1cnZlVG8oZmxvYXQgY3AxeCwgZmxvYXQgY3Ax
eSwgZmxvYXQgY3AyeCwgZmxvYXQgY3AyeSwgZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBpZiAo
IWlzZmluaXRlKGNwMXgpIHwgIWlzZmluaXRlKGNwMXkpIHwgIWlzZmluaXRlKGNwMngpIHwgIWlz
ZmluaXRlKGNwMnkpIHwgIWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghbV9wYXRoLmhhc0N1cnJlbnRQb2ludCgpKQorICAgICAgICBtX3BhdGgubW92ZVRv
KEZsb2F0UG9pbnQoeCwgeSkpOworICAgIGVsc2UKKyAgICAgICAgbV9wYXRoLmFkZEJlemllckN1
cnZlVG8oRmxvYXRQb2ludChjcDF4LCBjcDF5KSwgRmxvYXRQb2ludChjcDJ4LCBjcDJ5KSwgRmxv
YXRQb2ludCh4LCB5KSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcmNU
byhmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgciwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmICghaXNmaW5pdGUoeDApIHwgIWlz
ZmluaXRlKHkwKSB8ICFpc2Zpbml0ZSh4MSkgfCAhaXNmaW5pdGUoeTEpIHwgIWlzZmluaXRlKHIp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHIgPCAwKSB7CisgICAgICAgIGVjID0g
SU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFzdGF0ZSgp
Lm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGF0aC5hZGRBcmNUbyhG
bG9hdFBvaW50KHgwLCB5MCksIEZsb2F0UG9pbnQoeDEsIHkxKSwgcik7Cit9CisKK3ZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcmMoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgciwgZmxv
YXQgc2EsIGZsb2F0IGVhLCBib29sIGFudGljbG9ja3dpc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGVjID0gMDsKKyAgICBpZiAoIWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpIHwgIWlz
ZmluaXRlKHIpIHwgIWlzZmluaXRlKHNhKSB8ICFpc2Zpbml0ZShlYSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAociA8IDApIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RN
KQorICAgICAgICByZXR1cm47CisgICAgbV9wYXRoLmFkZEFyYyhGbG9hdFBvaW50KHgsIHkpLCBy
LCBzYSwgZWEsIGFudGljbG9ja3dpc2UpOworfQorICAgIAorc3RhdGljIGJvb2wgdmFsaWRhdGVS
ZWN0Rm9yQ2FudmFzKGZsb2F0JiB4LCBmbG9hdCYgeSwgZmxvYXQmIHdpZHRoLCBmbG9hdCYgaGVp
Z2h0KQoreworICAgIGlmICghaXNmaW5pdGUoeCkgfCAhaXNmaW5pdGUoeSkgfCAhaXNmaW5pdGUo
d2lkdGgpIHwgIWlzZmluaXRlKGhlaWdodCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAod2lkdGggPCAwKSB7CisgICAgICAgIHdpZHRoID0gLXdpZHRoOworICAgICAgICB4
IC09IHdpZHRoOworICAgIH0KKyAgICAKKyAgICBpZiAoaGVpZ2h0IDwgMCkgeworICAgICAgICBo
ZWlnaHQgPSAtaGVpZ2h0OworICAgICAgICB5IC09IGhlaWdodDsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZWN0KGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7CisgICAgaWYgKCF2
YWxpZGF0ZVJlY3RGb3JDYW52YXMoeCwgeSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9wYXRoLmFkZFJlY3QoRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKK30KKwor
I2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjbGVhclBhdGhGb3JEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkKK3sK
KyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jYW52YXMtPmRvY3VtZW50KCktPnNldHRp
bmdzKCkpCisgICAgICAgIGlmIChzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0
aWJpbGl0eU1vZGUoKSkKKyAgICAgICAgICAgIG1fcGF0aC5jbGVhcigpOworfQorI2VuZGlmCisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsKCkKK3sKKyAgICBHcmFwaGljc0Nv
bnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV9wYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBjLT5iZWdpblBhdGgoKTsKKyAg
ICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOworICAgICAgICB3aWxsRHJhdyhtX3BhdGguYm91bmRp
bmdSZWN0KCkpOworICAgICAgICBjLT5maWxsUGF0aCgpOworICAgIH0KKworI2lmIEVOQUJMRShE
QVNIQk9BUkRfU1VQUE9SVCkKKyAgICBjbGVhclBhdGhGb3JEYXNoYm9hcmRCYWNrd2FyZENvbXBh
dGliaWxpdHlNb2RlKCk7CisjZW5kaWYKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnN0cm9rZSgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQo
KTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZl
cnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgYy0+YmVnaW5QYXRoKCk7CisgICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsK
KworICAgICAgICBDYW52YXNTdHJva2VTdHlsZUFwcGxpZXIgc3Ryb2tlQXBwbGllcih0aGlzKTsK
KyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9IG1fcGF0aC5zdHJva2VCb3VuZGluZ1Jl
Y3QoJnN0cm9rZUFwcGxpZXIpOworICAgICAgICB3aWxsRHJhdyhib3VuZGluZ1JlY3QpOworCisg
ICAgICAgIGMtPnN0cm9rZVBhdGgoKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NV
UFBPUlQpCisgICAgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9k
ZSgpOworI2VuZGlmCit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGlwKCkK
K3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlmICgh
YykKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisg
ICAgICAgIHJldHVybjsKKyAgICBjLT5jbGlwKG1fcGF0aCk7CisjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQorICAgIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0
eU1vZGUoKTsKKyNlbmRpZgorfQorCitib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNQ
b2ludEluUGF0aChjb25zdCBmbG9hdCB4LCBjb25zdCBmbG9hdCB5KQoreworICAgIEdyYXBoaWNz
Q29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgRmxvYXRQb2ludCBwb2ludCh4LCB5KTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIEZsb2F0UG9pbnQgdHJh
bnNmb3JtZWRQb2ludCA9IGN0bS5pbnZlcnNlKCkubWFwUG9pbnQocG9pbnQpOworICAgIHJldHVy
biBtX3BhdGguY29udGFpbnModHJhbnNmb3JtZWRQb2ludCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpjbGVhclJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgs
IGZsb2F0IGhlaWdodCkKK3sKKyAgICBpZiAoIXZhbGlkYXRlUmVjdEZvckNhbnZhcyh4LCB5LCB3
aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9
IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVj
dCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIHdpbGxEcmF3KHJlY3QpOworICAgIGMt
PmNsZWFyUmVjdChyZWN0KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZp
bGxSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCit7Cisg
ICAgaWYgKCF2YWxpZGF0ZVJlY3RGb3JDYW52YXMoeCwgeSwgd2lkdGgsIGhlaWdodCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7
CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0
aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCk7CisgICAgd2lsbERyYXcocmVjdCk7CisKKyAgICBjLT5zYXZlKCk7CisgICAg
Yy0+ZmlsbFJlY3QocmVjdCk7CisgICAgYy0+cmVzdG9yZSgpOworfQorCit2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIGlmICghdmFsaWRhdGVSZWN0Rm9yQ2FudmFzKHgsIHks
IHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgc3Ryb2tlUmVjdCh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBzdGF0ZSgpLm1fbGluZVdpZHRoKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgs
IGZsb2F0IGhlaWdodCwgZmxvYXQgbGluZVdpZHRoKQoreworICAgIGlmICghdmFsaWRhdGVSZWN0
Rm9yQ2FudmFzKHgsIHksIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKCEobGluZVdpZHRoID49IDApKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsK
KworICAgIEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgRmxvYXRS
ZWN0IGJvdW5kaW5nUmVjdCA9IHJlY3Q7CisgICAgYm91bmRpbmdSZWN0LmluZmxhdGUobGluZVdp
ZHRoIC8gMik7CisgICAgd2lsbERyYXcoYm91bmRpbmdSZWN0KTsKKworICAgIGMtPnN0cm9rZVJl
Y3QocmVjdCwgbGluZVdpZHRoKTsKK30KKworI2lmIFBMQVRGT1JNKENHKQorc3RhdGljIGlubGlu
ZSBDR1NpemUgYWRqdXN0ZWRTaGFkb3dTaXplKENHRmxvYXQgd2lkdGgsIENHRmxvYXQgaGVpZ2h0
KQoreworICAgIC8vIFdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4PiBieSBlbnN1
cmluZyB0aGF0IHNoYWRvdyBvZmZzZXRzIHdpbGwgZ2V0IHRydW5jYXRlZAorICAgIC8vIHRvIHRo
ZSBkZXNpcmVkIGludGVnZXIuCisgICAgc3RhdGljIGNvbnN0IENHRmxvYXQgZXh0cmFTaGFkb3dP
ZmZzZXQgPSBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoMS4wIC8gMTI4KTsKKyAgICBpZiAod2lk
dGggPiAwKQorICAgICAgICB3aWR0aCArPSBleHRyYVNoYWRvd09mZnNldDsKKyAgICBlbHNlIGlm
ICh3aWR0aCA8IDApCisgICAgICAgIHdpZHRoIC09IGV4dHJhU2hhZG93T2Zmc2V0OworCisgICAg
aWYgKGhlaWdodCA+IDApCisgICAgICAgIGhlaWdodCArPSBleHRyYVNoYWRvd09mZnNldDsKKyAg
ICBlbHNlIGlmIChoZWlnaHQgPCAwKQorICAgICAgICBoZWlnaHQgLT0gZXh0cmFTaGFkb3dPZmZz
ZXQ7CisKKyAgICByZXR1cm4gQ0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KTsKK30KKyNlbmRpZgor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIpCit7CisgICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9
IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJs
dXI7CisgICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gIiI7CisgICAgYXBwbHlTaGFkb3coKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNvbG9yKQoreworICAg
IHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUod2lkdGgsIGhlaWdodCk7CisgICAg
c3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOworICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9
IGNvbG9yOworICAgIGFwcGx5U2hhZG93KCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwg
ZmxvYXQgZ3JheUxldmVsKQoreworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNp
emUod2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOworICAg
IHN0YXRlKCkubV9zaGFkb3dDb2xvciA9ICIiOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0g
ZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKworICAgIFJH
QkEzMiByZ2JhID0gbWFrZVJHQkEzMkZyb21GbG9hdHMoZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdy
YXlMZXZlbCwgMS4wZik7CisgICAgYy0+c2V0U2hhZG93KEludFNpemUod2lkdGgsIC1oZWlnaHQp
LCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgQ29sb3IocmdiYSkpOworfQorCit2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZs
b2F0IGJsdXIsIGNvbnN0IFN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhhKQoreworICAgIHN0YXRl
KCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUo
KS5tX3NoYWRvd0JsdXIgPSBibHVyOworICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IGNvbG9y
OworCisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAo
IWMpCisgICAgICAgIHJldHVybjsKKworICAgIFJHQkEzMiByZ2JhID0gMDsgLy8gZGVmYXVsdCBp
cyB0cmFuc3BhcmVudCBibGFjaworICAgIGlmICghc3RhdGUoKS5tX3NoYWRvd0NvbG9yLmlzRW1w
dHkoKSkKKyAgICAgICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIHN0YXRlKCkubV9zaGFk
b3dDb2xvcik7CisgICAgYy0+c2V0U2hhZG93KEludFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0
ZSgpLm1fc2hhZG93Qmx1ciwgQ29sb3IoY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShyZ2JhLCBhbHBo
YSkpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5TGV2ZWwsIGZsb2F0
IGFscGhhKQoreworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUod2lkdGgs
IGhlaWdodCk7CisgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOworICAgIHN0YXRlKCku
bV9zaGFkb3dDb2xvciA9ICIiOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0Nv
bnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKworICAgIFJHQkEzMiByZ2Jh
ID0gbWFrZVJHQkEzMkZyb21GbG9hdHMoZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwg
YWxwaGEpOworICAgIGMtPnNldFNoYWRvdyhJbnRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUo
KS5tX3NoYWRvd0JsdXIsIENvbG9yKHJnYmEpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVy
LCBmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQoreworICAgIHN0YXRlKCkubV9z
aGFkb3dPZmZzZXQgPSBGbG9hdFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUoKS5tX3No
YWRvd0JsdXIgPSBibHVyOworICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9ICIiOworCisgICAg
R3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJHQkEzMiByZ2JhID0gbWFrZVJHQkEzMkZyb21GbG9hdHMociwg
ZywgYiwgYSk7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJlbnQgYmxhY2sKKyAgICBpZiAoIXN0YXRl
KCkubV9zaGFkb3dDb2xvci5pc0VtcHR5KCkpCisgICAgICAgIENTU1BhcnNlcjo6cGFyc2VDb2xv
cihyZ2JhLCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IpOworICAgIGMtPnNldFNoYWRvdyhJbnRTaXpl
KHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5tX3NoYWRvd0JsdXIsIENvbG9yKHJnYmEpKTsKK30K
Kwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9h
dCBrLCBmbG9hdCBhKQoreworICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUo
d2lkdGgsIGhlaWdodCk7CisgICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOworICAgIHN0
YXRlKCkubV9zaGFkb3dDb2xvciA9ICIiOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBkYyA9IGRy
YXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFkYykKKyAgICAgICAgcmV0dXJuOworI2lmIFBMQVRG
T1JNKENHKQorICAgIGNvbnN0IENHRmxvYXQgY29tcG9uZW50c1s1XSA9IHsgYywgbSwgeSwgaywg
YSB9OworICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRl
RGV2aWNlQ01ZSygpOworICAgIENHQ29sb3JSZWYgc2hhZG93Q29sb3IgPSBDR0NvbG9yQ3JlYXRl
KGNvbG9yU3BhY2UsIGNvbXBvbmVudHMpOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JT
cGFjZSk7CisgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGRjLT5wbGF0Zm9ybUNvbnRl
eHQoKSwgYWRqdXN0ZWRTaGFkb3dTaXplKHdpZHRoLCAtaGVpZ2h0KSwgYmx1ciwgc2hhZG93Q29s
b3IpOworICAgIENHQ29sb3JSZWxlYXNlKHNoYWRvd0NvbG9yKTsKKyNlbHNlCisgICAgZGMtPnNl
dFNoYWRvdyhJbnRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgYmx1ciwgQ29sb3IoYywgbSwgeSwgaywg
YSkpOworI2VuZGlmCit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGVhclNo
YWRvdygpCit7CisgICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOworICAg
IHN0YXRlKCkubV9zaGFkb3dCbHVyID0gMDsKKyAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSAi
IjsKKyAgICBhcHBseVNoYWRvdygpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6YXBwbHlTaGFkb3coKQoreworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250
ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisKKyAgICBSR0JBMzIgcmdiYSA9
IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJlbnQgYmxhY2sKKyAgICBpZiAoIXN0YXRlKCkubV9z
aGFkb3dDb2xvci5pc0VtcHR5KCkpCisgICAgICAgIENTU1BhcnNlcjo6cGFyc2VDb2xvcihyZ2Jh
LCBzdGF0ZSgpLm1fc2hhZG93Q29sb3IpOworICAgIGZsb2F0IHdpZHRoID0gc3RhdGUoKS5tX3No
YWRvd09mZnNldC53aWR0aCgpOworICAgIGZsb2F0IGhlaWdodCA9IHN0YXRlKCkubV9zaGFkb3dP
ZmZzZXQuaGVpZ2h0KCk7CisgICAgYy0+c2V0U2hhZG93KEludFNpemUod2lkdGgsIC1oZWlnaHQp
LCBzdGF0ZSgpLm1fc2hhZG93Qmx1ciwgQ29sb3IocmdiYSkpOworfQorCitzdGF0aWMgSW50U2l6
ZSBzaXplKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlKQoreworICAgIGlmIChDYWNoZWRJbWFnZSog
Y2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hl
ZEltYWdlLT5pbWFnZVNpemUoMS4wZik7IC8vIEZJWE1FOiBOb3Qgc3VyZSBhYm91dCB0aGlzLgor
ICAgIHJldHVybiBJbnRTaXplKCk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitzdGF0aWMgSW50
U2l6ZSBzaXplKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvKQoreworICAgIGlmIChNZWRpYVBsYXll
ciogcGxheWVyID0gdmlkZW8tPnBsYXllcigpKQorICAgICAgICByZXR1cm4gcGxheWVyLT5uYXR1
cmFsU2l6ZSgpOworICAgIHJldHVybiBJbnRTaXplKCk7Cit9CisjZW5kaWYKKworc3RhdGljIGlu
bGluZSBGbG9hdFJlY3Qgbm9ybWFsaXplUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgcmV0dXJuIEZsb2F0UmVjdChtaW4ocmVjdC54KCksIHJlY3QucmlnaHQoKSksCisgICAgICAg
IG1pbihyZWN0LnkoKSwgcmVjdC5ib3R0b20oKSksCisgICAgICAgIG1heChyZWN0LndpZHRoKCks
IC1yZWN0LndpZHRoKCkpLAorICAgICAgICBtYXgocmVjdC5oZWlnaHQoKSwgLXJlY3QuaGVpZ2h0
KCkpKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNoZWNrT3JpZ2luKGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNl
Y3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKKyAgICBpZiAoIW1fY2FudmFzLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3Mob3JpZ2luLmdldCgpKSkKKyAgICAgICAgbV9j
YW52YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmNoZWNrT3JpZ2luKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFJlZlB0cjxTZWN1
cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcodXJs
KTsKKyAgICBpZiAoIW1fY2FudmFzLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5B
Y2Nlc3Mob3JpZ2luLmdldCgpKSkKKyAgICAgICAgbV9jYW52YXMtPnNldE9yaWdpblRhaW50ZWQo
KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZSwgZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBBU1NFUlQoaW1hZ2Up
OworICAgIEludFNpemUgcyA9IHNpemUoaW1hZ2UpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7Cisg
ICAgZHJhd0ltYWdlKGltYWdlLCB4LCB5LCBzLndpZHRoKCksIHMuaGVpZ2h0KCksIGVjKTsKK30K
Kwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZSwKKyAgICBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoaW1hZ2UpOworICAgIEludFNp
emUgcyA9IHNpemUoaW1hZ2UpOworICAgIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KDAsIDAs
IHMud2lkdGgoKSwgcy5oZWlnaHQoKSksIEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwg
ZWMpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwKKyAgICBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoaW1h
Z2UpOworCisgICAgZWMgPSAwOworCisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIHNpemUoaW1hZ2UpKTsKKyAgICBpZiAoIWltYWdlUmVjdC5jb250YWlu
cyhub3JtYWxpemVSZWN0KHNyY1JlY3QpKSB8fCBzcmNSZWN0LndpZHRoKCkgPT0gMCB8fCBzcmNS
ZWN0LmhlaWdodCgpID09IDApIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZHN0UmVjdC53aWR0aCgpIHx8ICFkc3RSZWN0
LmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
c3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZElt
YWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpOworICAgIGlmICghY2FjaGVk
SW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4o
KSkKKyAgICAgICAgY2hlY2tPcmlnaW4oY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkudXJsKCkpOwor
CisgICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigpICYmICFjYWNoZWRJbWFnZS0+aW1hZ2Uo
KS0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKKyAgICAgICAgbV9jYW52YXMtPnNldE9yaWdp
blRhaW50ZWQoKTsKKworICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0ID0gYy0+cm91bmRUb0Rldmlj
ZVBpeGVscyhzcmNSZWN0KTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjLT5yb3VuZFRvRGV2
aWNlUGl4ZWxzKGRzdFJlY3QpOworICAgIHdpbGxEcmF3KGRlc3RSZWN0KTsKKyAgICBjLT5kcmF3
SW1hZ2UoY2FjaGVkSW1hZ2UtPmltYWdlKCksIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0ZSgp
Lm1fZ2xvYmFsQ29tcG9zaXRlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBmbG9hdCB4LCBmbG9hdCB5KQor
eworICAgIEFTU0VSVChjYW52YXMpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgZHJhd0lt
YWdlKGNhbnZhcywgeCwgeSwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCBlYyk7
Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhcywKKyAgICBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQoY2FudmFzKTsKKyAg
ICBkcmF3SW1hZ2UoY2FudmFzLCBGbG9hdFJlY3QoMCwgMCwgY2FudmFzLT53aWR0aCgpLCBjYW52
YXMtPmhlaWdodCgpKSwgRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpLCBlYyk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcywgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAorICAgIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKGNhbnZhcyk7CisK
KyAgICBlYyA9IDA7CisKKyAgICBGbG9hdFJlY3Qgc3JjQ2FudmFzUmVjdCA9IEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIGNhbnZhcy0+c2l6ZSgpKTsKKyAgICBpZiAoIXNyY0NhbnZhc1JlY3QuY29u
dGFpbnMobm9ybWFsaXplUmVjdChzcmNSZWN0KSkgfHwgc3JjUmVjdC53aWR0aCgpID09IDAgfHwg
c3JjUmVjdC5oZWlnaHQoKSA9PSAwKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWRzdFJlY3Qud2lkdGgoKSB8fCAhZHN0
UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0ID0gYy0+cm91bmRUb0RldmljZVBpeGVscyhzcmNSZWN0
KTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKGRzdFJl
Y3QpOworICAgICAgICAKKyAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWlu
ZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9
IGNhbnZhcy0+YnVmZmVyKCk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghY2FudmFzLT5vcmlnaW5DbGVhbigpKQorICAgICAgICBtX2NhbnZhcy0+c2V0T3Jp
Z2luVGFpbnRlZCgpOworCisgICAgYy0+ZHJhd0ltYWdlKGJ1ZmZlci0+aW1hZ2UoKSwgZGVzdFJl
Y3QsIHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpOworICAgIHdpbGxEcmF3
KGRlc3RSZWN0KTsgLy8gVGhpcyBjYWxsIGNvbWVzIGFmdGVyIGRyYXdJbWFnZSwgc2luY2UgdGhl
IGJ1ZmZlciB3ZSBkcmF3IGludG8gbWF5IGJlIG91ciBvd24sIGFuZCB3ZSBuZWVkIHRvIG1ha2Ug
c3VyZSBpdCBpcyBkaXJ0eS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmd1
YWJseSB3aWxsRHJhdyBzaG91bGQgYmVjb21lIGRpZERyYXcgYW5kIG9jY3VyIGFmdGVyIGRyYXdp
bmcgY2FsbHMgYW5kIG5vdCBiZWZvcmUgdGhlbSB0byBhdm9pZCBwcm9ibGVtcyBsaWtlIHRoaXMu
Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBmbG9hdCB4LCBmbG9hdCB5KQorewor
ICAgIEFTU0VSVCh2aWRlbyk7CisgICAgSW50U2l6ZSBzID0gc2l6ZSh2aWRlbyk7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICBkcmF3SW1hZ2UodmlkZW8sIHgsIHksIHMud2lkdGgoKSwgcy5o
ZWlnaHQoKSwgZWMpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBBU1NFUlQodmlkZW8pOworICAgIEludFNpemUg
cyA9IHNpemUodmlkZW8pOworICAgIGRyYXdJbWFnZSh2aWRlbywgRmxvYXRSZWN0KDAsIDAsIHMu
d2lkdGgoKSwgcy5oZWlnaHQoKSksIEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwgZWMp
OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxWaWRl
b0VsZW1lbnQqIHZpZGVvLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgQVNTRVJUKHZpZGVvKTsKKyAgICAKKyAgICBlYyA9IDA7
CisgICAgRmxvYXRSZWN0IHZpZGVvUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUo
dmlkZW8pKTsKKyAgICBpZiAoIXZpZGVvUmVjdC5jb250YWlucyhub3JtYWxpemVSZWN0KHNyY1Jl
Y3QpKSB8fCBzcmNSZWN0LndpZHRoKCkgPT0gMCB8fCBzcmNSZWN0LmhlaWdodCgpID09IDApIHsK
KyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIWRzdFJlY3Qud2lkdGgoKSB8fCAhZHN0UmVjdC5oZWlnaHQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0
KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52
ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2FudmFzLT5vcmlnaW5D
bGVhbigpKQorICAgICAgICBjaGVja09yaWdpbih2aWRlby0+Y3VycmVudFNyYygpKTsKKworICAg
IGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSAmJiAhdmlkZW8tPmhhc1NpbmdsZVNlY3VyaXR5
T3JpZ2luKCkpCisgICAgICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWludGVkKCk7CisKKyAgICBG
bG9hdFJlY3Qgc291cmNlUmVjdCA9IGMtPnJvdW5kVG9EZXZpY2VQaXhlbHMoc3JjUmVjdCk7Cisg
ICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gYy0+cm91bmRUb0RldmljZVBpeGVscyhkc3RSZWN0KTsK
KyAgICB3aWxsRHJhdyhkZXN0UmVjdCk7CisKKyAgICBjLT5zYXZlKCk7CisgICAgYy0+Y2xpcChk
ZXN0UmVjdCk7CisgICAgYy0+dHJhbnNsYXRlKGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpKTsK
KyAgICBjLT5zY2FsZShGbG9hdFNpemUoZGVzdFJlY3Qud2lkdGgoKS9zb3VyY2VSZWN0LndpZHRo
KCksIGRlc3RSZWN0LmhlaWdodCgpL3NvdXJjZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICBjLT50cmFu
c2xhdGUoLXNvdXJjZVJlY3QueCgpLCAtc291cmNlUmVjdC55KCkpOworICAgIHZpZGVvLT5wYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dChjLCBJbnRSZWN0KEludFBvaW50KCksIHNpemUodmlkZW8p
KSk7CisgICAgYy0+cmVzdG9yZSgpOworfQorI2VuZGlmCisKKy8vIEZJWE1FOiBXaHkgaXNuJ3Qg
dGhpcyBqdXN0IGFub3RoZXIgb3ZlcmxvYWQgb2YgZHJhd0ltYWdlPyBXaHkgaGF2ZSBhIGRpZmZl
cmVudCBuYW1lPwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZUZyb21S
ZWN0KEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLAorICAgIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxv
YXQgc3csIGZsb2F0IHNoLAorICAgIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHcsIGZsb2F0
IGRoLAorICAgIGNvbnN0IFN0cmluZyYgY29tcG9zaXRlT3BlcmF0aW9uKQoreworICAgIGlmICgh
aW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9
IGltYWdlLT5jYWNoZWRJbWFnZSgpOworICAgIGlmICghY2FjaGVkSW1hZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgY2hlY2tP
cmlnaW4oY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkudXJsKCkpOworCisgICAgaWYgKG1fY2FudmFz
LT5vcmlnaW5DbGVhbigpICYmICFjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+aGFzU2luZ2xlU2VjdXJp
dHlPcmlnaW4oKSkKKyAgICAgICAgbV9jYW52YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKKworICAg
IEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3A7CisgICAgaWYgKCFwYXJzZUNvbXBv
c2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgb3ApKQorICAgICAgICBvcCA9IENvbXBv
c2l0ZVNvdXJjZU92ZXI7CisKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBGbG9hdFJlY3QoZHgs
IGR5LCBkdywgZGgpOworICAgIHdpbGxEcmF3KGRlc3RSZWN0KTsKKyAgICBjLT5kcmF3SW1hZ2Uo
Y2FjaGVkSW1hZ2UtPmltYWdlKCksIGRlc3RSZWN0LCBGbG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gp
LCBvcCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRBbHBoYShmbG9h
dCBhbHBoYSkKK3sKKyAgICBzZXRHbG9iYWxBbHBoYShhbHBoYSk7Cit9CisKK3ZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBv
cGVyYXRpb24pCit7CisgICAgc2V0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKG9wZXJhdGlvbik7
Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwcmVwYXJlR3JhZGllbnRGb3JE
YXNoYm9hcmQoQ2FudmFzR3JhZGllbnQqIGdyYWRpZW50KSBjb25zdAoreworI2lmIEVOQUJMRShE
QVNIQk9BUkRfU1VQUE9SVCkKKyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gbV9jYW52YXMt
PmRvY3VtZW50KCktPnNldHRpbmdzKCkpCisgICAgICAgIGlmIChzZXR0aW5ncy0+dXNlc0Rhc2hi
b2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSkKKyAgICAgICAgICAgIGdyYWRpZW50LT5z
ZXREYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
Z3JhZGllbnQpOworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlTGluZWFyR3JhZGllbnQoZmxvYXQgeDAsIGZsb2F0
IHkwLCBmbG9hdCB4MSwgZmxvYXQgeTEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICgh
aXNmaW5pdGUoeDApIHx8ICFpc2Zpbml0ZSh5MCkgfHwgIWlzZmluaXRlKHgxKSB8fCAhaXNmaW5p
dGUoeTEpKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50ID0g
Q2FudmFzR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHgwLCB5MCksIEZsb2F0UG9pbnQoeDEs
IHkxKSk7CisgICAgcHJlcGFyZUdyYWRpZW50Rm9yRGFzaGJvYXJkKGdyYWRpZW50LmdldCgpKTsK
KyAgICByZXR1cm4gZ3JhZGllbnQ7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUmFkaWFsR3JhZGllbnQoZmxvYXQgeDAsIGZs
b2F0IHkwLCBmbG9hdCByMCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCByMSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKCFpc2Zpbml0ZSh4MCkgfHwgIWlzZmluaXRlKHkwKSB8fCAh
aXNmaW5pdGUocjApIHx8IAorICAgICAgICAhaXNmaW5pdGUoeDEpIHx8ICFpc2Zpbml0ZSh5MSkg
fHwgIWlzZmluaXRlKHIxKSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4gZ3Jh
ZGllbnQgPSAgQ2FudmFzR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KHgwLCB5MCksIHIwLCBG
bG9hdFBvaW50KHgxLCB5MSksIHIxKTsKKyAgICBwcmVwYXJlR3JhZGllbnRGb3JEYXNoYm9hcmQo
Z3JhZGllbnQuZ2V0KCkpOworICAgIHJldHVybiBncmFkaWVudDsKK30KKworUGFzc1JlZlB0cjxD
YW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4oSFRN
TEltYWdlRWxlbWVudCogaW1hZ2UsCisgICAgY29uc3QgU3RyaW5nJiByZXBldGl0aW9uVHlwZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgYm9vbCByZXBlYXRYLCByZXBlYXRZOworICAgIGVj
ID0gMDsKKyAgICBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBlKHJlcGV0aXRpb25U
eXBlLCByZXBlYXRYLCByZXBlYXRZLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmICghaW1hZ2UtPmNvbXBsZXRlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElE
X1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQ2FjaGVkSW1hZ2Uq
IGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCk7CisgICAgaWYgKCFjYWNoZWRJbWFn
ZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlKCkpCisgICAgICAgIHJldHVybiBDYW52
YXNQYXR0ZXJuOjpjcmVhdGUoSW1hZ2U6Om51bGxJbWFnZSgpLCByZXBlYXRYLCByZXBlYXRZLCB0
cnVlKTsKKworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmln
aW46OmNyZWF0ZUZyb21TdHJpbmcoY2FjaGVkSW1hZ2UtPnVybCgpKTsKKyAgICBib29sIG9yaWdp
bkNsZWFuID0gbV9jYW52YXMtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vz
cyhvcmlnaW4uZ2V0KCkpOworICAgIHJldHVybiBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoY2FjaGVk
SW1hZ2UtPmltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKTsKK30KKworUGFz
c1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBh
dHRlcm4oSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywKKyAgICBjb25zdCBTdHJpbmcmIHJlcGV0
aXRpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNhbnZhcy0+d2lkdGgo
KSB8fCAhY2FudmFzLT5oZWlnaHQoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgYm9vbCByZXBlYXRYLCByZXBl
YXRZOworICAgIGVjID0gMDsKKyAgICBDYW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBl
KHJlcGV0aXRpb25UeXBlLCByZXBlYXRYLCByZXBlYXRZLCBlYyk7CisgICAgaWYgKGVjKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRlKGNhbnZhcy0+
YnVmZmVyKCktPmltYWdlKCksIHJlcGVhdFgsIHJlcGVhdFksIGNhbnZhcy0+b3JpZ2luQ2xlYW4o
KSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdyhjb25zdCBG
bG9hdFJlY3QmIHIsIHVuc2lnbmVkIG9wdGlvbnMpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9h
dFJlY3QgZGlydHlSZWN0ID0gcjsKKyAgICBpZiAob3B0aW9ucyAmIENhbnZhc1dpbGxEcmF3QXBw
bHlUcmFuc2Zvcm0pIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3RtID0gc3RhdGUo
KS5tX3RyYW5zZm9ybTsKKyAgICAgICAgZGlydHlSZWN0ID0gY3RtLm1hcFJlY3Qocik7CisgICAg
fQorICAgIAorICAgIGlmIChvcHRpb25zICYgQ2FudmFzV2lsbERyYXdBcHBseVNoYWRvdykgewor
ICAgICAgICAvLyBUaGUgc2hhZG93IGdldHMgYXBwbGllZCBhZnRlciB0cmFuc2Zvcm1hdGlvbgor
ICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChkaXJ0eVJlY3QpOworICAgICAgICBzaGFkb3dS
ZWN0Lm1vdmUoc3RhdGUoKS5tX3NoYWRvd09mZnNldCk7CisgICAgICAgIHNoYWRvd1JlY3QuaW5m
bGF0ZShzdGF0ZSgpLm1fc2hhZG93Qmx1cik7CisgICAgICAgIGRpcnR5UmVjdC51bml0ZShzaGFk
b3dSZWN0KTsKKyAgICB9CisgICAgCisgICAgaWYgKG9wdGlvbnMgJiBDYW52YXNXaWxsRHJhd0Fw
cGx5Q2xpcCkgeworICAgICAgICAvLyBGSVhNRTogYXBwbHkgdGhlIGN1cnJlbnQgY2xpcCB0byB0
aGUgcmVjdGFuZ2xlLiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGdldCB0aGUgY2xpcAorICAgICAg
ICAvLyBiYWNrIG91dCBvZiB0aGUgR3JhcGhpY3NDb250ZXh0LCBzbyB0byB0YWtlIGNsaXAgaW50
byBhY2NvdW50IGZvciBpbmNyZW1lbnRhbCBwYWludGluZywKKyAgICAgICAgLy8gd2UnZCBoYXZl
IHRvIGtlZXAgdGhlIGNsaXAgcGF0aCBhcm91bmQuCisgICAgfQorICAgIAorICAgIG1fY2FudmFz
LT53aWxsRHJhdyhkaXJ0eVJlY3QpOworfQorCitHcmFwaGljc0NvbnRleHQqIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZHJhd2luZ0NvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2Nh
bnZhcy0+ZHJhd2luZ0NvbnRleHQoKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBjcmVhdGVFbXB0eUltYWdlRGF0YShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIFJlZlB0
cjxJbWFnZURhdGE+IGRhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOworICAgIG1lbXNldChkYXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpLCAwLCBk
YXRhLT5kYXRhKCktPmRhdGEoKS0+bGVuZ3RoKCkpOworICAgIHJldHVybiBkYXRhLmdldCgpOwor
fQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVh
dGVJbWFnZURhdGEoZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAoreworICAgIEZsb2F0U2l6ZSB1
bnNjYWxlZFNpemUoc3csIHNoKTsKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBtX2NhbnZhcy0+
Y29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFNpemUpOworICAgIGlmIChzY2FsZWRTaXpl
LndpZHRoKCkgPCAxKQorICAgICAgICBzY2FsZWRTaXplLnNldFdpZHRoKDEpOworICAgIGlmIChz
Y2FsZWRTaXplLmhlaWdodCgpIDwgMSkKKyAgICAgICAgc2NhbGVkU2l6ZS5zZXRIZWlnaHQoMSk7
CisgICAgCisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKHNjYWxlZFNpemUpOworfQor
CitQYXNzUmVmUHRyPEltYWdlRGF0YT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpnZXRJbWFn
ZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAoreworICAgIGlmICghbV9jYW52YXMtPm9yaWdpbkNsZWFuKCkpIHsKKyAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAK
KyAgICBGbG9hdFJlY3QgdW5zY2FsZWRSZWN0KHN4LCBzeSwgc3csIHNoKTsKKyAgICBJbnRSZWN0
IHNjYWxlZFJlY3QgPSBtX2NhbnZhcy0+Y29udmVydExvZ2ljYWxUb0RldmljZSh1bnNjYWxlZFJl
Y3QpOworICAgIGlmIChzY2FsZWRSZWN0LndpZHRoKCkgPCAxKQorICAgICAgICBzY2FsZWRSZWN0
LnNldFdpZHRoKDEpOworICAgIGlmIChzY2FsZWRSZWN0LmhlaWdodCgpIDwgMSkKKyAgICAgICAg
c2NhbGVkUmVjdC5zZXRIZWlnaHQoMSk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IG1fY2Fu
dmFzID8gbV9jYW52YXMtPmJ1ZmZlcigpIDogMDsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKHNjYWxlZFJlY3Quc2l6ZSgpKTsKKyAgICByZXR1
cm4gYnVmZmVyLT5nZXRJbWFnZURhdGEoc2NhbGVkUmVjdCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBkYXRhLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZGF0YSkgeworICAgICAg
ICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHB1
dEltYWdlRGF0YShkYXRhLCBkeCwgZHksIDAsIDAsIGRhdGEtPndpZHRoKCksIGRhdGEtPmhlaWdo
dCgpLCBlYyk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhKiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxv
YXQgZGlydHlZLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmICghZGF0YSkgeworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXNmaW5pdGUoZHgpIHx8ICFpc2Zpbml0ZShk
eSkgfHwgIWlzZmluaXRlKGRpcnR5WCkgfHwgCisgICAgICAgICFpc2Zpbml0ZShkaXJ0eVkpIHx8
ICFpc2Zpbml0ZShkaXJ0eVdpZHRoKSB8fCAhaXNmaW5pdGUoZGlydHlIZWlnaHQpKSB7CisgICAg
ICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJ
bWFnZUJ1ZmZlciogYnVmZmVyID0gbV9jYW52YXMtPmJ1ZmZlcigpOworICAgIGlmICghYnVmZmVy
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGlydHlXaWR0aCA8IDApIHsKKyAgICAgICAg
ZGlydHlYICs9IGRpcnR5V2lkdGg7CisgICAgICAgIGRpcnR5V2lkdGggPSAtZGlydHlXaWR0aDsK
KyAgICB9CisKKyAgICBpZiAoZGlydHlIZWlnaHQgPCAwKSB7CisgICAgICAgIGRpcnR5WSArPSBk
aXJ0eUhlaWdodDsKKyAgICAgICAgZGlydHlIZWlnaHQgPSAtZGlydHlIZWlnaHQ7CisgICAgfQor
CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0KGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0
eUhlaWdodCk7CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS0+d2lk
dGgoKSwgZGF0YS0+aGVpZ2h0KCkpKTsKKyAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nh
c3Q8aW50PihkeCksIHN0YXRpY19jYXN0PGludD4oZHkpKTsKKyAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKKyAgICBzb3VyY2VSZWN0Lm1vdmUoZGVz
dE9mZnNldCk7CisgICAgc291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBi
dWZmZXItPnNpemUoKSkpOworICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHdpbGxEcmF3KHNvdXJjZVJlY3QsIDApOyAgLy8gaWdub3JlIHRyYW5zZm9y
bSwgc2hhZG93IGFuZCBjbGlwCisgICAgc291cmNlUmVjdC5tb3ZlKC1kZXN0T2Zmc2V0KTsKKyAg
ICBJbnRQb2ludCBkZXN0UG9pbnQoZGVzdE9mZnNldC53aWR0aCgpLCBkZXN0T2Zmc2V0LmhlaWdo
dCgpKTsKKyAgICAKKyAgICBidWZmZXItPnB1dEltYWdlRGF0YShkYXRhLCBzb3VyY2VSZWN0LCBk
ZXN0UG9pbnQpOworfQorCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGUoKS5tX3VucGFyc2VkRm9udDsKK30KKwordm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQor
eworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdGVtcERlY2wgPSBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgQ1NTUGFyc2VyIHBhcnNlcigh
bV9jYW52YXMtPmRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKTsgLy8gVXNlIHRoZSBwYXJzZSBt
b2RlIG9mIHRoZSBjYW52YXMnIGRvY3VtZW50IHdoZW4gcGFyc2luZyBDU1MuCisgICAgICAgIAor
ICAgIFN0cmluZyBkZWNsYXJhdGlvblRleHQoImZvbnQ6ICIpOworICAgIGRlY2xhcmF0aW9uVGV4
dCArPSBuZXdGb250OworICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRlbXBEZWNsLmdldCgp
LCBkZWNsYXJhdGlvblRleHQpOworICAgIGlmICghdGVtcERlY2wtPmxlbmd0aCgpKQorICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAvLyBUaGUgcGFyc2Ugc3VjY2VlZGVkLgorICAg
IHN0YXRlKCkubV91bnBhcnNlZEZvbnQgPSBuZXdGb250OworICAgIAorICAgIC8vIE1hcCB0aGUg
PGNhbnZhcz4gZm9udCBpbnRvIHRoZSB0ZXh0IHN0eWxlLiBJZiB0aGUgZm9udCB1c2VzIGtleXdv
cmRzIGxpa2UgbGFyZ2VyL3NtYWxsZXIsIHRoZXNlIHdpbGwgd29yaworICAgIC8vIHJlbGF0aXZl
IHRvIHRoZSBjYW52YXMuCisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRl
clN0eWxlOjpjcmVhdGUoKTsKKyAgICBpZiAobV9jYW52YXMtPmNvbXB1dGVkU3R5bGUoKSkKKyAg
ICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihtX2NhbnZhcy0+Y29tcHV0ZWRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKSk7CisKKyAgICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3Bl
cnR5IGludG8gdGhlIHN0eWxlLgorICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3Ig
PSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgIHN0eWxlU2VsZWN0
b3ItPmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5Rm9udCwgdGVtcERlY2wtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250KS5nZXQoKSwgbmV3U3R5bGUuZ2V0KCkpOwor
ICAgIAorICAgIHN0YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQoKTsKKyAgICBzdGF0ZSgp
Lm1fZm9udC51cGRhdGUoc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCkpOworICAgIHN0YXRl
KCkubV9yZWFsaXplZEZvbnQgPSB0cnVlOworfQorICAgICAgICAKK1N0cmluZyBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRleHRBbGlnbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRleHRBbGln
bk5hbWUoc3RhdGUoKS5tX3RleHRBbGlnbik7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRUZXh0QWxpZ24oY29uc3QgU3RyaW5nJiBzKQoreworICAgIFRleHRBbGlnbiBh
bGlnbjsKKyAgICBpZiAoIXBhcnNlVGV4dEFsaWduKHMsIGFsaWduKSkKKyAgICAgICAgcmV0dXJu
OworICAgIHN0YXRlKCkubV90ZXh0QWxpZ24gPSBhbGlnbjsKK30KKyAgICAgICAgCitTdHJpbmcg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0ZXh0QmFzZWxpbmUoKSBjb25zdAoreworICAgIHJl
dHVybiB0ZXh0QmFzZWxpbmVOYW1lKHN0YXRlKCkubV90ZXh0QmFzZWxpbmUpOworfQorCit2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VGV4dEJhc2VsaW5lKGNvbnN0IFN0cmluZyYg
cykKK3sKKyAgICBUZXh0QmFzZWxpbmUgYmFzZWxpbmU7CisgICAgaWYgKCFwYXJzZVRleHRCYXNl
bGluZShzLCBiYXNlbGluZSkpCisgICAgICAgIHJldHVybjsKKyAgICBzdGF0ZSgpLm1fdGV4dEJh
c2VsaW5lID0gYmFzZWxpbmU7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpm
aWxsVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgZHJh
d1RleHRJbnRlcm5hbCh0ZXh0LCB4LCB5LCB0cnVlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmZpbGxUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgbWF4V2lkdGgpCit7CisgICAgZHJhd1RleHRJbnRlcm5hbCh0ZXh0LCB4LCB5LCB0
cnVlLCBtYXhXaWR0aCwgdHJ1ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2VUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAg
ICBkcmF3VGV4dEludGVybmFsKHRleHQsIHgsIHksIGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4
LCBmbG9hdCB5LCBmbG9hdCBtYXhXaWR0aCkKK3sKKyAgICBkcmF3VGV4dEludGVybmFsKHRleHQs
IHgsIHksIGZhbHNlLCBtYXhXaWR0aCwgdHJ1ZSk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dE1ldHJp
Y3M+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6bWVhc3VyZVRleHQoY29uc3QgU3RyaW5nJiB0
ZXh0KQoreworICAgIFJlZlB0cjxUZXh0TWV0cmljcz4gbWV0cmljcyA9IFRleHRNZXRyaWNzOjpj
cmVhdGUoKTsKKyAgICBtZXRyaWNzLT5zZXRXaWR0aChhY2Nlc3NGb250KCkud2lkdGgoVGV4dFJ1
bih0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICByZXR1cm4gbWV0cmlj
czsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIGZsb2F0IC8q
bWF4V2lkdGgqLywgYm9vbCAvKnVzZU1heFdpZHRoKi8pCit7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgY29uc3QgRm9udCYgZm9udCA9IGFjY2Vzc0ZvbnQoKTsKKworICAgIC8vIEZJWE1FOiBIYW5k
bGUgbWF4V2lkdGguCisgICAgLy8gRklYTUU6IE5lZWQgdG8gdHVybiBvZmYgZm9udCBzbW9vdGhp
bmcuCisKKyAgICBib29sIHJ0bCA9IG1fY2FudmFzLT5jb21wdXRlZFN0eWxlKCkgPyBtX2NhbnZh
cy0+Y29tcHV0ZWRTdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwgOiBmYWxzZTsKKyAgICBib29s
IG92ZXJyaWRlID0gbV9jYW52YXMtPmNvbXB1dGVkU3R5bGUoKSA/IG1fY2FudmFzLT5jb21wdXRl
ZFN0eWxlKCktPnVuaWNvZGVCaWRpKCkgPT0gT3ZlcnJpZGUgOiBmYWxzZTsKKworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgY29uc3QgVUNoYXIqIHN0cmluZyA9IHRl
eHQuY2hhcmFjdGVycygpOworICAgIFRleHRSdW4gdGV4dFJ1bihzdHJpbmcsIGxlbmd0aCwgMCwg
MCwgMCwgcnRsLCBvdmVycmlkZSwgZmFsc2UsIGZhbHNlKTsKKworICAgIC8vIERyYXcgdGhlIGl0
ZW0gdGV4dCBhdCB0aGUgY29ycmVjdCBwb2ludC4KKyAgICBGbG9hdFBvaW50IGxvY2F0aW9uKHgs
IHkpOworICAgIHN3aXRjaCAoc3RhdGUoKS5tX3RleHRCYXNlbGluZSkgeworICAgICAgICBjYXNl
IFRvcFRleHRCYXNlbGluZToKKyAgICAgICAgY2FzZSBIYW5naW5nVGV4dEJhc2VsaW5lOgorICAg
ICAgICAgICAgbG9jYXRpb24uc2V0WSh5ICsgZm9udC5hc2NlbnQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBCb3R0b21UZXh0QmFzZWxpbmU6CisgICAgICAgIGNhc2UgSWRl
b2dyYXBoaWNUZXh0QmFzZWxpbmU6CisgICAgICAgICAgICBsb2NhdGlvbi5zZXRZKHkgLSBmb250
LmRlc2NlbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNaWRkbGVUZXh0
QmFzZWxpbmU6CisgICAgICAgICAgICBsb2NhdGlvbi5zZXRZKHkgLSBmb250LmRlc2NlbnQoKSAr
IGZvbnQuaGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFs
cGhhYmV0aWNUZXh0QmFzZWxpbmU6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgLy8g
RG8gbm90aGluZy4KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBmbG9hdCB3
aWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bih0ZXh0LCBmYWxzZSwgMCwgMCwgcnRsLCBvdmVycmlk
ZSkpOworCisgICAgVGV4dEFsaWduIGFsaWduID0gc3RhdGUoKS5tX3RleHRBbGlnbjsKKyAgICBp
ZiAoYWxpZ24gPT0gU3RhcnRUZXh0QWxpZ24pCisgICAgICAgICBhbGlnbiA9IHJ0bCA/IFJpZ2h0
VGV4dEFsaWduIDogTGVmdFRleHRBbGlnbjsKKyAgICBlbHNlIGlmIChhbGlnbiA9PSBFbmRUZXh0
QWxpZ24pCisgICAgICAgIGFsaWduID0gcnRsID8gTGVmdFRleHRBbGlnbiA6IFJpZ2h0VGV4dEFs
aWduOworICAgIAorICAgIHN3aXRjaCAoYWxpZ24pIHsKKyAgICAgICAgY2FzZSBDZW50ZXJUZXh0
QWxpZ246CisgICAgICAgICAgICBsb2NhdGlvbi5zZXRYKGxvY2F0aW9uLngoKSAtIHdpZHRoIC8g
Mik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSaWdodFRleHRBbGlnbjoKKyAg
ICAgICAgICAgIGxvY2F0aW9uLnNldFgobG9jYXRpb24ueCgpIC0gd2lkdGgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhlIHNsb3AgYnVpbHQgaW4gdG8gdGhpcyBtYXNrIHJlY3QgbWF0Y2hlcyB0
aGUgaGV1cmlzdGljIHVzZWQgaW4gRm9udENHV2luLmNwcCBmb3IgR0RJIHRleHQuCisgICAgRmxv
YXRSZWN0IHRleHRSZWN0ID0gRmxvYXRSZWN0KGxvY2F0aW9uLngoKSAtIGZvbnQuaGVpZ2h0KCkg
LyAyLCBsb2NhdGlvbi55KCkgLSBmb250LmFzY2VudCgpIC0gZm9udC5saW5lR2FwKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICsgZm9udC5oZWlnaHQoKSwgZm9u
dC5saW5lU3BhY2luZygpKTsKKyAgICBpZiAoIWZpbGwpCisgICAgICAgIHRleHRSZWN0LmluZmxh
dGUoYy0+c3Ryb2tlVGhpY2tuZXNzKCkgLyAyKTsKKworICAgIGlmIChmaWxsKQorICAgICAgICBt
X2NhbnZhcy0+d2lsbERyYXcodGV4dFJlY3QpOworICAgIGVsc2UgeworICAgICAgICAvLyBXaGVu
IHN0cm9raW5nIHRleHQsIHBvaW50eSBtaXRlcnMgY2FuIGV4dGVuZCBvdXRzaWRlIG9mIHRleHRS
ZWN0LCBzbyB3ZQorICAgICAgICAvLyBwdW50IGFuZCBkaXJ0eSB0aGUgd2hvbGUgY2FudmFzLgor
ICAgICAgICBtX2NhbnZhcy0+d2lsbERyYXcoRmxvYXRSZWN0KDAsIDAsIG1fY2FudmFzLT53aWR0
aCgpLCBtX2NhbnZhcy0+aGVpZ2h0KCkpKTsKKyAgICB9CisgICAgCisjaWYgUExBVEZPUk0oQ0cp
CisgICAgQ2FudmFzU3R5bGUqIGRyYXdTdHlsZSA9IGZpbGwgPyBzdGF0ZSgpLm1fZmlsbFN0eWxl
LmdldCgpIDogc3RhdGUoKS5tX3N0cm9rZVN0eWxlLmdldCgpOworICAgIGlmIChkcmF3U3R5bGUt
PmNhbnZhc0dyYWRpZW50KCkgfHwgZHJhd1N0eWxlLT5jYW52YXNQYXR0ZXJuKCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFRoZSByZWN0IGlzIG5vdCBiaWcgZW5vdWdoIGZvciBtaXRlcnMgb24gc3Ry
b2tlZCB0ZXh0LgorICAgICAgICBJbnRSZWN0IG1hc2tSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0
ZXh0UmVjdCk7CisKKyAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tSZWN0LnNpemUoKSwgZmFsc2UpOworCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4dCgpOworCisg
ICAgICAgIGlmIChmaWxsKQorICAgICAgICAgICAgbWFza0ltYWdlQ29udGV4dC0+c2V0RmlsbENv
bG9yKENvbG9yOjpibGFjayk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWFza0ltYWdl
Q29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICAgICAgICAgIG1hc2tJ
bWFnZUNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhjLT5zdHJva2VUaGlja25lc3MoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUo
ZmlsbCA/IGNUZXh0RmlsbCA6IGNUZXh0U3Ryb2tlKTsKKyAgICAgICAgbWFza0ltYWdlQ29udGV4
dC0+dHJhbnNsYXRlKC1tYXNrUmVjdC54KCksIC1tYXNrUmVjdC55KCkpOworICAgICAgICAKKyAg
ICAgICAgbWFza0ltYWdlQ29udGV4dC0+ZHJhd0JpZGlUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2F0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIGMtPnNhdmUoKTsKKyAgICAgICAgYy0+Y2xpcFRvSW1h
Z2VCdWZmZXIobWFza1JlY3QsIG1hc2tJbWFnZS5nZXQoKSk7CisgICAgICAgIGRyYXdTdHlsZS0+
YXBwbHlGaWxsQ29sb3IoYyk7CisgICAgICAgIGMtPmZpbGxSZWN0KG1hc2tSZWN0KTsKKyAgICAg
ICAgYy0+cmVzdG9yZSgpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAg
IGMtPnNldFRleHREcmF3aW5nTW9kZShmaWxsID8gY1RleHRGaWxsIDogY1RleHRTdHJva2UpOwor
ICAgIGMtPmRyYXdCaWRpVGV4dChmb250LCB0ZXh0UnVuLCBsb2NhdGlvbik7Cit9CisKK2NvbnN0
IEZvbnQmIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YWNjZXNzRm9udCgpCit7CisgICAgaWYg
KCFzdGF0ZSgpLm1fcmVhbGl6ZWRGb250KQorICAgICAgICBzZXRGb250KHN0YXRlKCkubV91bnBh
cnNlZEZvbnQpOworICAgIHJldHVybiBzdGF0ZSgpLm1fZm9udDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8K
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgJKHJldmlzaW9uIDQ2OTE5KQkoZnJvbSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmg6NDY5MTkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRfaAorI2RlZmluZSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRfaAorCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRGT1JNKENHKQorI2lu
Y2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIENhbnZhc0dyYWRpZW50OworICAg
IGNsYXNzIENhbnZhc1BhdHRlcm47CisgICAgY2xhc3MgQ2FudmFzU3R5bGU7CisgICAgY2xhc3Mg
RmxvYXRSZWN0OworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKKyAgICBjbGFzcyBIVE1MQ2Fu
dmFzRWxlbWVudDsKKyAgICBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworICAgIGNsYXNzIEhUTUxW
aWRlb0VsZW1lbnQ7CisgICAgY2xhc3MgSW1hZ2VEYXRhOworICAgIGNsYXNzIEtVUkw7CisgICAg
Y2xhc3MgVGV4dE1ldHJpY3M7CisKKyAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCisg
ICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIDogcHVibGljIE5vbmNvcHlhYmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChIVE1MQ2FudmFz
RWxlbWVudCopOworICAgICAgICAKKyAgICAgICAgdm9pZCByZWYoKTsKKyAgICAgICAgdm9pZCBk
ZXJlZigpOworICAgICAgICAKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNv
bnN0IHsgcmV0dXJuIG1fY2FudmFzOyB9CisKKyAgICAgICAgQ2FudmFzU3R5bGUqIHN0cm9rZVN0
eWxlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52
YXNTdHlsZT4pOworCisgICAgICAgIENhbnZhc1N0eWxlKiBmaWxsU3R5bGUoKSBjb25zdDsKKyAg
ICAgICAgdm9pZCBzZXRGaWxsU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4pOworCisgICAg
ICAgIGZsb2F0IGxpbmVXaWR0aCgpIGNvbnN0OworICAgICAgICB2b2lkIHNldExpbmVXaWR0aChm
bG9hdCk7CisKKyAgICAgICAgU3RyaW5nIGxpbmVDYXAoKSBjb25zdDsKKyAgICAgICAgdm9pZCBz
ZXRMaW5lQ2FwKGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIFN0cmluZyBsaW5lSm9pbigpIGNv
bnN0OworICAgICAgICB2b2lkIHNldExpbmVKb2luKGNvbnN0IFN0cmluZyYpOworCisgICAgICAg
IGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZs
b2F0KTsKKworICAgICAgICBmbG9hdCBzaGFkb3dPZmZzZXRYKCkgY29uc3Q7CisgICAgICAgIHZv
aWQgc2V0U2hhZG93T2Zmc2V0WChmbG9hdCk7CisKKyAgICAgICAgZmxvYXQgc2hhZG93T2Zmc2V0
WSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFNoYWRvd09mZnNldFkoZmxvYXQpOworCisgICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXIoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRTaGFkb3dCbHVy
KGZsb2F0KTsKKworICAgICAgICBTdHJpbmcgc2hhZG93Q29sb3IoKSBjb25zdDsKKyAgICAgICAg
dm9pZCBzZXRTaGFkb3dDb2xvcihjb25zdCBTdHJpbmcmKTsKKworICAgICAgICBmbG9hdCBnbG9i
YWxBbHBoYSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldEdsb2JhbEFscGhhKGZsb2F0KTsKKwor
ICAgICAgICBTdHJpbmcgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3Q7CisgICAgICAg
IHZvaWQgc2V0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0cmluZyYpOworCisgICAg
ICAgIHZvaWQgc2F2ZSgpOworICAgICAgICB2b2lkIHJlc3RvcmUoKTsKKworICAgICAgICB2b2lk
IHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSk7CisgICAgICAgIHZvaWQgcm90YXRlKGZsb2F0IGFu
Z2xlSW5SYWRpYW5zKTsKKyAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgdHgsIGZsb2F0IHR5
KTsKKyAgICAgICAgdm9pZCB0cmFuc2Zvcm0oZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0y
MSwgZmxvYXQgbTIyLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgICAgICB2b2lkIHNldFRyYW5z
Zm9ybShmbG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBtMjIsIGZsb2F0IGR4
LCBmbG9hdCBkeSk7CisKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBTdHJpbmcm
IGNvbG9yKTsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwpOwor
ICAgICAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IFN0cmluZyYgY29sb3IsIGZsb2F0IGFs
cGhhKTsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0
IGFscGhhKTsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBm
bG9hdCBiLCBmbG9hdCBhKTsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCBjLCBm
bG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKKworICAgICAgICB2b2lkIHNldEZp
bGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yKTsKKyAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3Io
ZmxvYXQgZ3JheUxldmVsKTsKKyAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgU3RyaW5n
JiBjb2xvciwgZmxvYXQgYWxwaGEpOworICAgICAgICB2b2lkIHNldEZpbGxDb2xvcihmbG9hdCBn
cmF5TGV2ZWwsIGZsb2F0IGFscGhhKTsKKyAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoZmxvYXQg
ciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CisgICAgICAgIHZvaWQgc2V0RmlsbENvbG9y
KGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpOworCisgICAgICAg
IHZvaWQgYmVnaW5QYXRoKCk7CisgICAgICAgIHZvaWQgY2xvc2VQYXRoKCk7CisKKyAgICAgICAg
dm9pZCBtb3ZlVG8oZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQgbGluZVRvKGZsb2F0
IHgsIGZsb2F0IHkpOworICAgICAgICB2b2lkIHF1YWRyYXRpY0N1cnZlVG8oZmxvYXQgY3B4LCBm
bG9hdCBjcHksIGZsb2F0IHgsIGZsb2F0IHkpOworICAgICAgICB2b2lkIGJlemllckN1cnZlVG8o
ZmxvYXQgY3AxeCwgZmxvYXQgY3AxeSwgZmxvYXQgY3AyeCwgZmxvYXQgY3AyeSwgZmxvYXQgeCwg
ZmxvYXQgeSk7CisgICAgICAgIHZvaWQgYXJjVG8oZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCB4
MSwgZmxvYXQgeTEsIGZsb2F0IHJhZGl1cywgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lk
IGFyYyhmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByLCBmbG9hdCBzYSwgZmxvYXQgZWEsIGJvb2wg
Y2xvY2t3aXNlLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgcmVjdChmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KTsKKworICAgICAgICB2b2lkIGZpbGwo
KTsKKyAgICAgICAgdm9pZCBzdHJva2UoKTsKKyAgICAgICAgdm9pZCBjbGlwKCk7CisKKyAgICAg
ICAgYm9vbCBpc1BvaW50SW5QYXRoKGNvbnN0IGZsb2F0IHgsIGNvbnN0IGZsb2F0IHkpOworCisg
ICAgICAgIHZvaWQgY2xlYXJSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQpOworICAgICAgICB2b2lkIGZpbGxSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQpOworICAgICAgICB2b2lkIHN0cm9rZVJlY3QoZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCk7CisgICAgICAgIHZvaWQgc3Ryb2tl
UmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBs
aW5lV2lkdGgpOworCisgICAgICAgIHZvaWQgc2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQsIGZsb2F0IGJsdXIpOworICAgICAgICB2b2lkIHNldFNoYWRvdyhmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNvbG9yKTsKKyAgICAgICAg
dm9pZCBzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxv
YXQgZ3JheUxldmVsKTsKKyAgICAgICAgdm9pZCBzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCwgZmxvYXQgYmx1ciwgY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpOwor
ICAgICAgICB2b2lkIHNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBi
bHVyLCBmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKTsKKyAgICAgICAgdm9pZCBzZXRTaGFk
b3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgciwgZmxvYXQg
ZywgZmxvYXQgYiwgZmxvYXQgYSk7CisgICAgICAgIHZvaWQgc2V0U2hhZG93KGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZs
b2F0IGssIGZsb2F0IGEpOworCisgICAgICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKKworICAgICAg
ICB2b2lkIGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgZmxvYXQgeCwgZmxvYXQgeSk7Cisg
ICAgICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqLCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZv
aWQgZHJhd0ltYWdlKEhUTUxJbWFnZUVsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lk
IGRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCosIGZsb2F0IHgsIGZsb2F0IHkpOworICAgICAg
ICB2b2lkIGRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCosIGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBk
cmF3SW1hZ2UoSFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJMRShWSURF
TykKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIGZsb2F0IHgsIGZs
b2F0IHkpOworICAgICAgICB2b2lkIGRyYXdJbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgZmxvYXQg
eCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgICAgICB2b2lkIGRyYXdJbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIEV4Y2VwdGlvbkNvZGUmKTsKKyNl
bmRpZgorCisgICAgICAgIHZvaWQgZHJhd0ltYWdlRnJvbVJlY3QoSFRNTEltYWdlRWxlbWVudCos
IGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLAorICAgICAgICAgICAgZmxv
YXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkdywgZmxvYXQgZGgsIGNvbnN0IFN0cmluZyYgY29tcG9z
aXRlT3BlcmF0aW9uKTsKKworICAgICAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKKworICAgICAg
ICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmKTsKKworICAgICAgICBQ
YXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBjcmVhdGVMaW5lYXJHcmFkaWVudChmbG9hdCB4MCwg
ZmxvYXQgeTAsIGZsb2F0IHgxLCBmbG9hdCB5MSwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBQ
YXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBjcmVhdGVSYWRpYWxHcmFkaWVudChmbG9hdCB4MCwg
ZmxvYXQgeTAsIGZsb2F0IHIwLCBmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHIxLCBFeGNlcHRp
b25Db2RlJik7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gY3JlYXRlUGF0dGVy
bihIVE1MSW1hZ2VFbGVtZW50KiwgY29uc3QgU3RyaW5nJiByZXBldGl0aW9uVHlwZSwgRXhjZXB0
aW9uQ29kZSYpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+IGNyZWF0ZVBhdHRl
cm4oSFRNTENhbnZhc0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHJlcGV0aXRpb25UeXBlLCBFeGNl
cHRpb25Db2RlJik7CisgICAgICAgIAorICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gY3Jl
YXRlSW1hZ2VEYXRhKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIGNvbnN0OworICAgICAgICBQ
YXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxv
YXQgc3csIGZsb2F0IHNoLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSosIGZsb2F0IGR4LCBmbG9hdCBkeSwgRXhjZXB0aW9uQ29kZSYp
OworICAgICAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBk
aXJ0eUhlaWdodCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICAKKyAgICAgICAgdm9pZCByZXNl
dCgpOworCisgICAgICAgIFN0cmluZyBmb250KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0Rm9u
dChjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyB0ZXh0QWxpZ24oKSBj
b25zdDsKKyAgICAgICAgdm9pZCBzZXRUZXh0QWxpZ24oY29uc3QgU3RyaW5nJik7CisgICAgICAg
IAorICAgICAgICBTdHJpbmcgdGV4dEJhc2VsaW5lKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0
VGV4dEJhc2VsaW5lKGNvbnN0IFN0cmluZyYpOworICAgICAgICAKKyAgICAgICAgdm9pZCBmaWxs
VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsb2F0IHkpOworICAgICAgICB2b2lk
IGZpbGxUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbWF4
V2lkdGgpOworICAgICAgICB2b2lkIHN0cm9rZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9h
dCB4LCBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCBzdHJva2VUZXh0KGNvbnN0IFN0cmluZyYgdGV4
dCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgbWF4V2lkdGgpOworICAgICAgICBQYXNzUmVmUHRy
PFRleHRNZXRyaWNzPiBtZWFzdXJlVGV4dChjb25zdCBTdHJpbmcmIHRleHQpOworCisgICAgICAg
IExpbmVDYXAgZ2V0TGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkubV9saW5lQ2FwOyB9
CisgICAgICAgIExpbmVKb2luIGdldExpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5t
X2xpbmVKb2luOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdHJ1Y3QgU3RhdGUgeworICAg
ICAgICAgICAgU3RhdGUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPENhbnZh
c1N0eWxlPiBtX3N0cm9rZVN0eWxlOworICAgICAgICAgICAgUmVmUHRyPENhbnZhc1N0eWxlPiBt
X2ZpbGxTdHlsZTsKKyAgICAgICAgICAgIGZsb2F0IG1fbGluZVdpZHRoOworICAgICAgICAgICAg
TGluZUNhcCBtX2xpbmVDYXA7CisgICAgICAgICAgICBMaW5lSm9pbiBtX2xpbmVKb2luOworICAg
ICAgICAgICAgZmxvYXQgbV9taXRlckxpbWl0OworICAgICAgICAgICAgRmxvYXRTaXplIG1fc2hh
ZG93T2Zmc2V0OworICAgICAgICAgICAgZmxvYXQgbV9zaGFkb3dCbHVyOworICAgICAgICAgICAg
U3RyaW5nIG1fc2hhZG93Q29sb3I7CisgICAgICAgICAgICBmbG9hdCBtX2dsb2JhbEFscGhhOwor
ICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9nbG9iYWxDb21wb3NpdGU7CisgICAgICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKKyAgICAgICAgICAgIGJvb2wg
bV9pbnZlcnRpYmxlQ1RNOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUZXh0IHN0YXRl
LgorICAgICAgICAgICAgVGV4dEFsaWduIG1fdGV4dEFsaWduOworICAgICAgICAgICAgVGV4dEJh
c2VsaW5lIG1fdGV4dEJhc2VsaW5lOworICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJpbmcg
bV91bnBhcnNlZEZvbnQ7CisgICAgICAgICAgICBGb250IG1fZm9udDsKKyAgICAgICAgICAgIGJv
b2wgbV9yZWFsaXplZEZvbnQ7CisgICAgICAgIH07CisgICAgICAgIFBhdGggbV9wYXRoOworCisg
ICAgICAgIFN0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7IH0KKyAg
ICAgICAgY29uc3QgU3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZVN0YWNrLmxh
c3QoKTsgfQorCisgICAgICAgIHZvaWQgYXBwbHlTaGFkb3coKTsKKworICAgICAgICBlbnVtIENh
bnZhc1dpbGxEcmF3T3B0aW9uIHsKKyAgICAgICAgICAgIENhbnZhc1dpbGxEcmF3QXBwbHlUcmFu
c2Zvcm0gPSAxLAorICAgICAgICAgICAgQ2FudmFzV2lsbERyYXdBcHBseVNoYWRvdyA9IDEgPDwg
MSwKKyAgICAgICAgICAgIENhbnZhc1dpbGxEcmF3QXBwbHlDbGlwID0gMSA8PCAyLAorICAgICAg
ICAgICAgQ2FudmFzV2lsbERyYXdBcHBseUFsbCA9IDB4ZmZmZmZmZmYKKyAgICAgICAgfTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgd2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JiwgdW5zaWduZWQg
b3B0aW9ucyA9IENhbnZhc1dpbGxEcmF3QXBwbHlBbGwpOworCisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCogZHJhd2luZ0NvbnRleHQoKSBjb25zdDsKKworICAgICAgICB2b2lkIGFwcGx5U3Ryb2tl
UGF0dGVybigpOworICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKTsKKworICAgICAgICB2
b2lkIGRyYXdUZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5
LCBib29sIGZpbGwsIGZsb2F0IG1heFdpZHRoID0gMCwgYm9vbCB1c2VNYXhXaWR0aCA9IGZhbHNl
KTsKKworICAgICAgICBjb25zdCBGb250JiBhY2Nlc3NGb250KCk7CisKKyNpZiBFTkFCTEUoREFT
SEJPQVJEX1NVUFBPUlQpCisgICAgICAgIHZvaWQgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFja3dh
cmRDb21wYXRpYmlsaXR5TW9kZSgpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICB2b2lkIHBy
ZXBhcmVHcmFkaWVudEZvckRhc2hib2FyZChDYW52YXNHcmFkaWVudCogZ3JhZGllbnQpIGNvbnN0
OworICAgICAgICB2b2lkIGNoZWNrT3JpZ2luKGNvbnN0IEtVUkwmKTsKKyAgICAgICAgdm9pZCBj
aGVja09yaWdpbihjb25zdCBTdHJpbmcmKTsKKworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCog
bV9jYW52YXM7CisgICAgICAgIFZlY3RvcjxTdGF0ZSwgMT4gbV9zdGF0ZVN0YWNrOworICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjptZXJnZWluZm8KCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCShyZXZpc2lvbiA0NjkxOSkJKGZyb20gV2Vi
Q29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGw6NDY5MTkpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21vZHVsZSBodG1sIHsKKwor
ICAgIGludGVyZmFjZSBbCisgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IsCisgICAgICAgIElu
dGVyZmFjZVVVSUQ9OThmYjQ4YWUtNzIxNi00ODljLTg2MmItOGUxMjE3ZmM0NDQzLAorICAgICAg
ICBJbXBsZW1lbnRhdGlvblVVSUQ9YWI0ZjA3ODEtMTUyZi00NTBlLTk1NDYtNWIzOTg3NDkxYTU0
CisgICAgXSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgeworCisgICAgICAgIC8vIFdlYiBBcHBs
aWNhdGlvbnMgMS4wIGRyYWZ0CisKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxDYW52
YXNFbGVtZW50IGNhbnZhczsKKworICAgICAgICB2b2lkIHNhdmUoKTsKKyAgICAgICAgdm9pZCBy
ZXN0b3JlKCk7CisKKyAgICAgICAgdm9pZCBzY2FsZShpbiBmbG9hdCBzeCwgaW4gZmxvYXQgc3kp
OworICAgICAgICB2b2lkIHJvdGF0ZShpbiBmbG9hdCBhbmdsZSk7CisgICAgICAgIHZvaWQgdHJh
bnNsYXRlKGluIGZsb2F0IHR4LCBpbiBmbG9hdCB0eSk7CisgICAgICAgIHZvaWQgdHJhbnNmb3Jt
KGluIGZsb2F0IG0xMSwgaW4gZmxvYXQgbTEyLCBpbiBmbG9hdCBtMjEsIGluIGZsb2F0IG0yMiwg
aW4gZmxvYXQgZHgsIGluIGZsb2F0IGR5KTsKKyAgICAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oaW4g
ZmxvYXQgbTExLCBpbiBmbG9hdCBtMTIsIGluIGZsb2F0IG0yMSwgaW4gZmxvYXQgbTIyLCBpbiBm
bG9hdCBkeCwgaW4gZmxvYXQgZHkpOworCisgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBnbG9iYWxB
bHBoYTsKKyAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3Ry
aW5nIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjsKKworICAgICAgICBDYW52YXNHcmFkaWVudCBj
cmVhdGVMaW5lYXJHcmFkaWVudChpbiBmbG9hdCB4MCwgaW4gZmxvYXQgeTAsIGluIGZsb2F0IHgx
LCBpbiBmbG9hdCB5MSkKKyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAg
ICAgQ2FudmFzR3JhZGllbnQgY3JlYXRlUmFkaWFsR3JhZGllbnQoaW4gZmxvYXQgeDAsIGluIGZs
b2F0IHkwLCBpbiBmbG9hdCByMCwgaW4gZmxvYXQgeDEsIGluIGZsb2F0IHkxLCBpbiBmbG9hdCBy
MSkKKyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKworICAgICAgICBhdHRyaWJ1
dGUgZmxvYXQgbGluZVdpZHRoOworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxs
U3RyaW5nXSBET01TdHJpbmcgbGluZUNhcDsKKyAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGxpbmVKb2luOworICAgICAgICBhdHRyaWJ1dGUgZmxv
YXQgbWl0ZXJMaW1pdDsKKworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgc2hhZG93T2Zmc2V0WDsK
KyAgICAgICAgYXR0cmlidXRlIGZsb2F0IHNoYWRvd09mZnNldFk7CisgICAgICAgIGF0dHJpYnV0
ZSBmbG9hdCBzaGFkb3dCbHVyOworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxs
U3RyaW5nXSBET01TdHJpbmcgc2hhZG93Q29sb3I7CisKKyAgICAgICAgdm9pZCBjbGVhclJlY3Qo
aW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgd2lkdGgsIGluIGZsb2F0IGhlaWdodCk7
CisgICAgICAgIHZvaWQgZmlsbFJlY3QoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQg
d2lkdGgsIGluIGZsb2F0IGhlaWdodCk7CisKKyAgICAgICAgdm9pZCBiZWdpblBhdGgoKTsKKyAg
ICAgICAgdm9pZCBjbG9zZVBhdGgoKTsKKyAgICAgICAgdm9pZCBtb3ZlVG8oaW4gZmxvYXQgeCwg
aW4gZmxvYXQgeSk7CisgICAgICAgIHZvaWQgbGluZVRvKGluIGZsb2F0IHgsIGluIGZsb2F0IHkp
OworICAgICAgICB2b2lkIHF1YWRyYXRpY0N1cnZlVG8oaW4gZmxvYXQgY3B4LCBpbiBmbG9hdCBj
cHksIGluIGZsb2F0IHgsIGluIGZsb2F0IHkpOworICAgICAgICB2b2lkIGJlemllckN1cnZlVG8o
aW4gZmxvYXQgY3AxeCwgaW4gZmxvYXQgY3AxeSwgaW4gZmxvYXQgY3AyeCwgaW4gZmxvYXQgY3Ay
eSwgaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSk7CisgICAgICAgIHZvaWQgYXJjVG8oaW4gZmxvYXQg
eDEsIGluIGZsb2F0IHkxLCBpbiBmbG9hdCB4MiwgaW4gZmxvYXQgeTIsIGluIGZsb2F0IHJhZGl1
cykKKyAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCByZWN0
KGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHdpZHRoLCBpbiBmbG9hdCBoZWlnaHQp
OworICAgICAgICB2b2lkIGFyYyhpbiBmbG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCByYWRp
dXMsIGluIGZsb2F0IHN0YXJ0QW5nbGUsIGluIGZsb2F0IGVuZEFuZ2xlLCBpbiBib29sZWFuIGFu
dGljbG9ja3dpc2UpCisgICAgICAgICAgICByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAg
IHZvaWQgZmlsbCgpOworICAgICAgICB2b2lkIHN0cm9rZSgpOworICAgICAgICB2b2lkIGNsaXAo
KTsKKyAgICAgICAgYm9vbGVhbiBpc1BvaW50SW5QYXRoKGluIGZsb2F0IHgsIGluIGZsb2F0IHkp
OworCisgICAgICAgIC8vIHRleHQKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBmb250Owor
ICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRleHRBbGlnbjsKKyAgICAgICAgYXR0cmlidXRl
IERPTVN0cmluZyB0ZXh0QmFzZWxpbmU7CisgICAgICAgIFtDdXN0b21dIHZvaWQgZmlsbFRleHQo
LyogNCAqLyk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgc3Ryb2tlVGV4dCgvKiA0ICovKTsKKyAg
ICAgICAgVGV4dE1ldHJpY3MgbWVhc3VyZVRleHQoaW4gRE9NU3RyaW5nIHRleHQpOworCisgICAg
ICAgIC8vIG90aGVyCisKKyAgICAgICAgdm9pZCBzZXRBbHBoYShpbiBmbG9hdCBhbHBoYSk7Cisg
ICAgICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGluIERPTVN0cmluZyBjb21wb3NpdGVP
cGVyYXRpb24pOworCisgICAgICAgIHZvaWQgc2V0TGluZVdpZHRoKGluIGZsb2F0IHdpZHRoKTsK
KyAgICAgICAgdm9pZCBzZXRMaW5lQ2FwKGluIERPTVN0cmluZyBjYXApOworICAgICAgICB2b2lk
IHNldExpbmVKb2luKGluIERPTVN0cmluZyBqb2luKTsKKyAgICAgICAgdm9pZCBzZXRNaXRlckxp
bWl0KGluIGZsb2F0IGxpbWl0KTsKKworICAgICAgICB2b2lkIGNsZWFyU2hhZG93KCk7CisKKyAg
ICAgICAgW0N1c3RvbV0gdm9pZCBzZXRTdHJva2VDb2xvcigvKiAxICAqLyk7CisgICAgICAgIFtD
dXN0b21dIHZvaWQgc2V0RmlsbENvbG9yKC8qIDEgKi8pOworICAgICAgICBbQ3VzdG9tXSB2b2lk
IHN0cm9rZVJlY3QoLyogNCAqLyk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgZHJhd0ltYWdlKC8q
IDMgKi8pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIGRyYXdJbWFnZUZyb21SZWN0KC8qIDEwICov
KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBzZXRTaGFkb3coLyogMyAqLyk7CisgICAgICAgIFtD
dXN0b21dIHZvaWQgY3JlYXRlUGF0dGVybigvKiAyICovKTsKKyAgICAgICAgCisgICAgICAgIGF0
dHJpYnV0ZSBbQ3VzdG9tXSBjdXN0b20gc3Ryb2tlU3R5bGU7CisgICAgICAgIGF0dHJpYnV0ZSBb
Q3VzdG9tXSBjdXN0b20gZmlsbFN0eWxlOworICAgICAgICAKKyAgICAgICAgLy8gcGl4ZWwgbWFu
aXB1bGF0aW9uCisgICAgICAgIEltYWdlRGF0YSBjcmVhdGVJbWFnZURhdGEoaW4gZmxvYXQgc3cs
IGluIGZsb2F0IHNoKTsKKyAgICAgICAgSW1hZ2VEYXRhIGdldEltYWdlRGF0YShpbiBmbG9hdCBz
eCwgaW4gZmxvYXQgc3ksIGluIGZsb2F0IHN3LCBpbiBmbG9hdCBzaCkKKyAgICAgICAgICAgIHJh
aXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHB1dEltYWdlRGF0YSgv
KiBpbiBJbWFnZURhdGEgaW1hZ2VkYXRhLCBpbiBmbG9hdCBkeCwgaW4gZmxvYXQgZHkgWywgaW4g
ZmxvYXQgZGlydHlYLCBpbiBmbG9hdCBkaXJ0eVksIGluIGZsb2F0IGRpcnR5V2lkdGgsIGluIGZs
b2F0IGRpcnR5SGVpZ2h0XSAqLyk7CisgICAgfTsKKworfQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOm1lcmdlaW5mbwoKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5
bGUuY3BwCShyZXZpc2lvbiA0NjkxOSkJKGZyb20gV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmNw
cDo0NjkxOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDYW52YXNTdHlsZS5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgi
CisjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKKyNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKworI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQu
aD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5j
bHVkZSA8UUJydXNoPgorI2luY2x1ZGUgPFFQZW4+CisjaW5jbHVkZSA8UUNvbG9yPgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGNvbnN0
IFN0cmluZyYgY29sb3IpCisgICAgOiBtX3R5cGUoQ29sb3JTdHJpbmcpCisgICAgLCBtX2NvbG9y
KGNvbG9yKQoreworfQorCitDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgZ3JheUxldmVs
KQorICAgIDogbV90eXBlKEdyYXlMZXZlbCkKKyAgICAsIG1fYWxwaGEoMSkKKyAgICAsIG1fZ3Jh
eUxldmVsKGdyYXlMZXZlbCkKK3sKK30KKworQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGNvbnN0
IFN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhhKQorICAgIDogbV90eXBlKENvbG9yU3RyaW5nV2l0
aEFscGhhKQorICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYWxwaGEoYWxwaGEpCit7Cit9
CisKK0NhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhh
KQorICAgIDogbV90eXBlKEdyYXlMZXZlbCkKKyAgICAsIG1fYWxwaGEoYWxwaGEpCisgICAgLCBt
X2dyYXlMZXZlbChncmF5TGV2ZWwpCit7Cit9CisKK0NhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShm
bG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQorICAgIDogbV90eXBlKFJHQkEpCisg
ICAgLCBtX2FscGhhKGEpCisgICAgLCBtX3JlZChyKQorICAgICwgbV9ncmVlbihnKQorICAgICwg
bV9ibHVlKGIpCit7Cit9CisKK0NhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBjLCBmbG9h
dCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIDogbV90eXBlKENNWUtBKQorICAg
ICwgbV9hbHBoYShhKQorICAgICwgbV9jeWFuKGMpCisgICAgLCBtX21hZ2VudGEobSkKKyAgICAs
IG1feWVsbG93KHkpCisgICAgLCBtX2JsYWNrKGspCit7Cit9CisKK0NhbnZhc1N0eWxlOjpDYW52
YXNTdHlsZShQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50PiBncmFkaWVudCkKKyAgICA6IG1fdHlw
ZShncmFkaWVudCA/IEdyYWRpZW50IDogQ29sb3JTdHJpbmcpCisgICAgLCBtX2dyYWRpZW50KGdy
YWRpZW50KQoreworfQorCitDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoUGFzc1JlZlB0cjxDYW52
YXNQYXR0ZXJuPiBwYXR0ZXJuKQorICAgIDogbV90eXBlKHBhdHRlcm4gPyBJbWFnZVBhdHRlcm4g
OiBDb2xvclN0cmluZykKKyAgICAsIG1fcGF0dGVybihwYXR0ZXJuKQoreworfQorCit2b2lkIENh
bnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKG1fdHlwZSkg
eworICAgICAgICBjYXNlIENvbG9yU3RyaW5nOiB7CisgICAgICAgICAgICBDb2xvciBjID0gQ29s
b3IobV9jb2xvcik7CisgICAgICAgICAgICBpZiAoYy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihjLnJnYigpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJHQkEzMiBjb2xvciA9IDA7IC8vIGRl
ZmF1bHQgaXMgdHJhbnNwYXJlbnQgYmxhY2sKKyAgICAgICAgICAgIGlmIChDU1NQYXJzZXI6OnBh
cnNlQ29sb3IoY29sb3IsIG1fY29sb3IpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKGNvbG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQ29sb3JTdHJpbmdXaXRoQWxwaGE6IHsKKyAgICAgICAgICAgIENvbG9yIGMgPSBDb2xv
cihtX2NvbG9yKTsKKyAgICAgICAgICAgIGlmIChjLmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoYy5yZ2Io
KSwgbV9hbHBoYSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgUkdCQTMyIGNvbG9yID0gMDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmVudCBibGFj
aworICAgICAgICAgICAgaWYgKENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcikp
CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoY29sb3JXaXRoT3ZlcnJp
ZGVBbHBoYShjb2xvciwgbV9hbHBoYSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBHcmF5TGV2ZWw6CisgICAgICAgICAgICAvLyBXZSdyZSBvbmx5IHN1cHBv
cnRpbmcgMjU1IGxldmVscyBvZiBncmF5IGhlcmUuICBTaW5jZSB0aGlzIGlzbid0CisgICAgICAg
ICAgICAvLyBldmVuIHBhcnQgb2YgSFRNTDUsIEkgZG9uJ3QgZXhwZWN0IGFueW9uZSB3aWxsIGNh
cmUuICBJZiB0aGV5IGRvCisgICAgICAgICAgICAvLyB3ZSdsbCBtYWtlIGEgZmFuY2llciBDb2xv
ciBhYnN0cmFjdGlvbi4KKyAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9y
KG1fZ3JheUxldmVsLCBtX2dyYXlMZXZlbCwgbV9ncmF5TGV2ZWwsIG1fYWxwaGEpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJHQkE6CisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihDb2xvcihtX3JlZCwgbV9ncmVlbiwgbV9ibHVlLCBtX2FscGhhKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDTVlLQTogeworICAgICAgICAgICAgLy8g
RklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRl
eHQgQVBJLgorICAgICAgICAgICAgLy8gV2UnbGwgbmVlZCBhIGZhbmNpZXIgQ29sb3IgYWJzdHJh
Y3Rpb24gdG8gc3VwcG9ydCBDWU1LQSBjb3JyZWN0bHkKKyNpZiBQTEFURk9STShDRykKKyAgICAg
ICAgICAgIENHQ29udGV4dFNldENNWUtTdHJva2VDb2xvcihjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgbV9jeWFuLCBtX21hZ2VudGEsIG1feWVsbG93LCBtX2JsYWNrLCBtX2FscGhhKTsKKyNl
bGlmIFBMQVRGT1JNKFFUKQorICAgICAgICAgICAgUVBlbiBjdXJyZW50UGVuID0gY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPnBlbigpOworICAgICAgICAgICAgUUNvbG9yIGNscjsKKyAgICAg
ICAgICAgIGNsci5zZXRDbXlrRihtX2N5YW4sIG1fbWFnZW50YSwgbV95ZWxsb3csIG1fYmxhY2ss
IG1fYWxwaGEpOworICAgICAgICAgICAgY3VycmVudFBlbi5zZXRDb2xvcihjbHIpOworICAgICAg
ICAgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnNldFBlbihjdXJyZW50UGVuKTsKKyNl
bHNlCisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcihtX2N5YW4sIG1f
bWFnZW50YSwgbV95ZWxsb3csIG1fYmxhY2ssIG1fYWxwaGEpKTsKKyNlbmRpZgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFkaWVudDoKKyAgICAgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KGNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW1hZ2VQYXR0ZXJuOgorICAgICAg
ICAgICAgY29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybihjYW52YXNQYXR0ZXJuKCktPnBhdHRlcm4o
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgQ2FudmFzU3R5bGU6OmFw
cGx5RmlsbENvbG9yKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRl
eHQpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNl
IENvbG9yU3RyaW5nOiB7CisgICAgICAgICAgICBDb2xvciBjID0gQ29sb3IobV9jb2xvcik7Cisg
ICAgICAgICAgICBpZiAoYy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRGaWxsQ29sb3IoYy5yZ2IoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBSR0JBMzIgcmdiYSA9IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJl
bnQgYmxhY2sKKyAgICAgICAgICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlQ29sb3IocmdiYSwgbV9j
b2xvcikpCisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHJnYmEpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb2xvclN0cmluZ1dpdGhB
bHBoYTogeworICAgICAgICAgICAgQ29sb3IgYyA9IENvbG9yKG1fY29sb3IpOworICAgICAgICAg
ICAgaWYgKGMuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENv
bG9yKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoYy5yZ2IoKSwgbV9hbHBoYSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkdCQTMyIGNvbG9yID0g
MDsgLy8gZGVmYXVsdCBpcyB0cmFuc3BhcmVudCBibGFjaworICAgICAgICAgICAgaWYgKENTU1Bh
cnNlcjo6cGFyc2VDb2xvcihjb2xvciwgbV9jb2xvcikpCisgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0RmlsbENvbG9yKGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIG1fYWxwaGEpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR3JheUxldmVsOgor
ICAgICAgICAgICAgLy8gV2UncmUgb25seSBzdXBwb3J0aW5nIDI1NSBsZXZlbHMgb2YgZ3JheSBo
ZXJlLiAgU2luY2UgdGhpcyBpc24ndAorICAgICAgICAgICAgLy8gZXZlbiBwYXJ0IG9mIEhUTUw1
LCBJIGRvbid0IGV4cGVjdCBhbnlvbmUgd2lsbCBjYXJlLiAgSWYgdGhleSBkbworICAgICAgICAg
ICAgLy8gd2UnbGwgbWFrZSBhIGZhbmNpZXIgQ29sb3IgYWJzdHJhY3Rpb24uCisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3IobV9ncmF5TGV2ZWwsIG1fZ3JheUxldmVsLCBt
X2dyYXlMZXZlbCwgbV9hbHBoYSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UkdCQToKKyAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcihtX3JlZCwgbV9n
cmVlbiwgbV9ibHVlLCBtX2FscGhhKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDTVlLQTogeworICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9y
bS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgorICAgICAgICAgICAgLy8gV2UnbGwg
bmVlZCBhIGZhbmNpZXIgQ29sb3IgYWJzdHJhY3Rpb24gdG8gc3VwcG9ydCBDWU1LQSBjb3JyZWN0
bHkKKyNpZiBQTEFURk9STShDRykKKyAgICAgICAgICAgIENHQ29udGV4dFNldENNWUtGaWxsQ29s
b3IoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fY3lhbiwgbV9tYWdlbnRhLCBtX3llbGxv
dywgbV9ibGFjaywgbV9hbHBoYSk7CisjZWxpZiBQTEFURk9STShRVCkKKyAgICAgICAgICAgIFFC
cnVzaCBjdXJyZW50QnJ1c2ggPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+YnJ1c2goKTsK
KyAgICAgICAgICAgIFFDb2xvciBjbHI7CisgICAgICAgICAgICBjbHIuc2V0Q215a0YobV9jeWFu
LCBtX21hZ2VudGEsIG1feWVsbG93LCBtX2JsYWNrLCBtX2FscGhhKTsKKyAgICAgICAgICAgIGN1
cnJlbnRCcnVzaC5zZXRDb2xvcihjbHIpOworICAgICAgICAgICAgY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPnNldEJydXNoKGN1cnJlbnRCcnVzaCk7CisjZWxzZQorICAgICAgICAgICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKENvbG9yKG1fY3lhbiwgbV9tYWdlbnRhLCBtX3llbGxvdywgbV9i
bGFjaywgbV9hbHBoYSkpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEdyYWRpZW50OgorICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbEdyYWRp
ZW50KGNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW1hZ2VQYXR0ZXJuOgorICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbFBh
dHRlcm4oY2FudmFzUGF0dGVybigpLT5wYXR0ZXJuKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1N0eWxlLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWVyZ2VpbmZvCgpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuaAkocmV2aXNpb24gNDY5MTkpCShmcm9tIFdlYkNvcmUvaHRt
bC9DYW52YXNTdHlsZS5oOjQ2OTE5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIENhbnZhc1N0eWxlX2gKKyNkZWZpbmUgQ2FudmFzU3R5bGVfaAorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQ2FudmFz
R3JhZGllbnQ7CisgICAgY2xhc3MgQ2FudmFzUGF0dGVybjsKKyAgICBjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7CisKKyAgICBjbGFzcyBDYW52YXNTdHlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZh
c1N0eWxlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNT
dHlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgY29sb3IpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
YW52YXNTdHlsZShjb2xvcikpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1N0
eWxlPiBjcmVhdGUoZmxvYXQgZ3JheUxldmVsKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFz
U3R5bGUoZ3JheUxldmVsKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5
bGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENhbnZhc1N0eWxlKGNvbG9yLCBhbHBoYSkpOyB9CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENhbnZhc1N0eWxlPiBjcmVhdGUoZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBo
YSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1N0eWxlKGdyYXlMZXZlbCwgYWxwaGEpKTsg
fQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gY3JlYXRlKGZsb2F0IHIs
IGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNT
dHlsZShyLCBnLCBiLCBhKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5
bGU+IGNyZWF0ZShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzU3R5bGUoYywgbSwgeSwgaywgYSkpOyB9CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBjcmVhdGUoUGFzc1JlZlB0cjxDYW52
YXNHcmFkaWVudD4gZ3JhZGllbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNTdHlsZShn
cmFkaWVudCkpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBjcmVh
dGUoUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJuKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgQ2FudmFzU3R5bGUocGF0dGVybikpOyB9CisKKyAgICAgICAgU3RyaW5nIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgICAgICBDYW52YXNHcmFkaWVudCogY2FudmFzR3Jh
ZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50LmdldCgpOyB9CisgICAgICAgIENhbnZh
c1BhdHRlcm4qIGNhbnZhc1BhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm4uZ2V0KCk7
IH0KKworICAgICAgICB2b2lkIGFwcGx5RmlsbENvbG9yKEdyYXBoaWNzQ29udGV4dCopOworICAg
ICAgICB2b2lkIGFwcGx5U3Ryb2tlQ29sb3IoR3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBDYW52YXNTdHlsZShjb25zdCBTdHJpbmcmIGNvbG9yKTsKKyAgICAgICAg
Q2FudmFzU3R5bGUoZmxvYXQgZ3JheUxldmVsKTsKKyAgICAgICAgQ2FudmFzU3R5bGUoY29uc3Qg
U3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpOworICAgICAgICBDYW52YXNTdHlsZShmbG9hdCBn
cmF5TGV2ZWwsIGZsb2F0IGFscGhhKTsKKyAgICAgICAgQ2FudmFzU3R5bGUoZmxvYXQgciwgZmxv
YXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CisgICAgICAgIENhbnZhc1N0eWxlKGZsb2F0IGMsIGZs
b2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpOworICAgICAgICBDYW52YXNTdHlsZShQ
YXNzUmVmUHRyPENhbnZhc0dyYWRpZW50Pik7CisgICAgICAgIENhbnZhc1N0eWxlKFBhc3NSZWZQ
dHI8Q2FudmFzUGF0dGVybj4pOworCisgICAgICAgIGVudW0gVHlwZSB7IENvbG9yU3RyaW5nLCBD
b2xvclN0cmluZ1dpdGhBbHBoYSwgR3JheUxldmVsLCBSR0JBLCBDTVlLQSwgR3JhZGllbnQsIElt
YWdlUGF0dGVybiB9OworCisgICAgICAgIFR5cGUgbV90eXBlOworCisgICAgICAgIFN0cmluZyBt
X2NvbG9yOworICAgICAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IG1fZ3JhZGllbnQ7CisgICAg
ICAgIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBtX3BhdHRlcm47CisKKyAgICAgICAgZmxvYXQgbV9h
bHBoYTsKKworICAgICAgICBmbG9hdCBtX2dyYXlMZXZlbDsKKworICAgICAgICBmbG9hdCBtX3Jl
ZDsKKyAgICAgICAgZmxvYXQgbV9ncmVlbjsKKyAgICAgICAgZmxvYXQgbV9ibHVlOworCisgICAg
ICAgIGZsb2F0IG1fY3lhbjsKKyAgICAgICAgZmxvYXQgbV9tYWdlbnRhOworICAgICAgICBmbG9h
dCBtX3llbGxvdzsKKyAgICAgICAgZmxvYXQgbV9ibGFjazsKKyAgICB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNTdHlsZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptZXJnZWluZm8KCg==
</data>
<flag name="review"
          id="18520"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>