<?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>46928</bug_id>
          
          <creation_ts>2010-09-30 12:29:01 -0700</creation_ts>
          <short_desc>Add isLeftToRightDirection() to RenderStyle</short_desc>
          <delta_ts>2010-09-30 13:45:14 -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>CSS</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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>287735</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-30 12:29:01 -0700</bug_when>
    <thetext>Add isLeftToRightDirection() to RenderStyle and change callers that did direction() == LTR and direction() == RTL to use this instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287736</commentid>
    <comment_count>1</comment_count>
      <attachid>69362</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-30 12:30:20 -0700</bug_when>
    <thetext>Created attachment 69362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287737</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-30 12:34:35 -0700</bug_when>
    <thetext>Attachment 69362 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/rendering/RenderFlexibleBox.cpp:578:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287753</commentid>
    <comment_count>3</comment_count>
      <attachid>69362</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-09-30 12:56:45 -0700</bug_when>
    <thetext>Comment on attachment 69362
Patch

Bonus points if you find the style errors and fix them! But I won&apos;t require it since this is basically a search-and-replace patch. Yay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287758</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-30 13:01:47 -0700</bug_when>
    <thetext>Fixed in r68817..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287782</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-30 13:45:09 -0700</bug_when>
    <thetext>This borked SL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287783</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-30 13:45:14 -0700</bug_when>
    <thetext>fast/blockflow/root-lr-basic.html -&gt; failed</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69362</attachid>
            <date>2010-09-30 12:30:20 -0700</date>
            <delta_ts>2010-09-30 12:56:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>82182</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODgxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTU0IEBACisyMDEwLTA5LTMwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY5MjgKKyAgICAgICAgCisgICAg
ICAgIEFkZCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgdG8gUmVuZGVyU3R5bGUgYW5kIGNoYW5n
ZSBjYWxsZXJzIHRoYXQgZGlkIGRpcmVjdGlvbigpID09IExUUiBhbmQgZGlyZWN0aW9uKCkgPT0g
UlRMIHRvIHVzZSB0aGlzIGluc3RlYWQuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjppc0xlZnRQYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkpOgorICAg
ICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFz
QmlkaVNlbGVjdGlvbik6CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENh
bmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFs
bHlEaXN0aW5jdENhbmRpZGF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5o
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojppc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6Y2FyZXRMZWZ0bW9zdE9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OmNhcmV0UmlnaHRtb3N0T2Zmc2V0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVG
bG93Qm94OjpkZXRlcm1pbmVTcGFjaW5nRm9yRmxvd0JveGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbklubGluZURpcmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludFRleHREZWNvcmF0aW9ucyk6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVJdGVy
YXRvcjo6ZGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBsYWNlRWxsaXBzaXNCb3gpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6cGFpbnREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6OnBhaW50U3BlbGxpbmdPckdyYW1tYXJNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojp0ZXh0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRl
eHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdFBvc2l0aW9uZWRC
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lTG9naWNhbExl
ZnRQb3NpdGlvbkZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWlu
dENvbHVtblJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbHVt
bkNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRIb3Jpem9udGFs
U2VsZWN0aW9uR2FwSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNh
bExlZnRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dp
Y2FsUmlnaHRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpy
aWdodG1vc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGVmdG1v
c3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29sdW1uUmVjdEF0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldEJvcmRlclBhZGRpbmdNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjptYXJnaW5TdGFydEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjptYXJnaW5FbmRGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0
TWFyZ2luU3RhcnRGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0
TWFyZ2luRW5kRm9yQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9yZGVyUGFkZGluZ01hcmdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29uc3RydWN0TGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0Zvckxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNraXBUcmFpbGluZ1doaXRlc3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNraXBMZWFkaW5nV2hpdGVzcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWspOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNoZWNrTGluZXNGb3JUZXh0T3ZlcmZsb3cp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjptYXJnaW5TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1h
cmdpbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldE1hcmdpblN0YXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0TWFyZ2luRW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja1dpZHRoRm9yUG9zaXRpb25lZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0
aFJlcGxhY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cmVsYXRpdmVQb3NpdGlvbk9mZnNldFgp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGaWVsZHNldDo6bGF5b3V0TGVnZW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmxleEJveEl0ZXJhdG9yOjpGbGV4
Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91
dEhvcml6b250YWxCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6Omxh
eW91dFZlcnRpY2FsQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06
OnBvc2l0aW9uTGlzdE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6
bWFya2VyVGV4dFdpdGhTdWZmaXgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c3VmZml4KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpj
b21wdXRlUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZXRlcjo6dmFsdWVQYXJ0UmVjdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBy
b2dyZXNzOjp2YWx1ZVBhcnRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNhbGNCb3JkZXJMZWZ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjYWxjQm9yZGVyUmlnaHQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVDZWxsOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZlJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlQ2VsbDo6Y29sbGVjdEJvcmRlclN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
U2VjdGlvbjo6bGF5b3V0Um93cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rp
b246OnJlY2FsY091dGVyQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2Vj
dGlvbjo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9u
Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dDo6cG9zaXRpb25MaW5lQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Zm9yd2FyZEV2ZW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
bGV2ZWxJbmRpY2F0b3JGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBh
aW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5n
L1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJv
eDo6bWVhc3VyZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94
OjpidWlsZExheW91dEluZm9ybWF0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR0lubGluZVRleHRCb3gp
OgorICAgICAgICAqIHJlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5
bGU6OmJvcmRlclN0YXJ0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmJv
cmRlckVuZFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjptYXJnaW5TdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6bWFyZ2luRW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclN0eWxlOjptYXJnaW5TdGFydFVzaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjptYXJnaW5FbmRVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6cGFkZGluZ1N0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpw
YWRkaW5nRW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjppc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKToK
KyAgICAgICAgKiB3bWwvV01MVGFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldN
TFRhYmxlRWxlbWVudDo6YWxpZ25DZWxscyk6CisKIDIwMTAtMDktMzAgIERhdmlkIEh5YXR0ICA8
aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA2ODU2MSkKKysrIFdlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEyLDcgKzMwMTIs
NyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzRm9yCiBib29sIENTU1N0
eWxlU2VsZWN0b3I6OmlzTGVmdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QKIHsKICAgICBib29s
IGlzRmlyc3RQYWdlTGVmdCA9IGZhbHNlOwotICAgIGlmIChtX3Jvb3RFbGVtZW50U3R5bGUtPmRp
cmVjdGlvbigpID09IFJUTCkKKyAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHlsZS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpKQogICAgICAgICBpc0ZpcnN0UGFnZUxlZnQgPSB0cnVlOwogCiAgICAg
cmV0dXJuIChwYWdlSW5kZXggKyAoaXNGaXJzdFBhZ2VMZWZ0ID8gMSA6IDApKSAlIDI7CkBAIC00
MTkwLDkgKzQxOTAsOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGludCBpZCA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpOwogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVTdGFydCkKLSAgICAgICAgICAg
IG1fc3R5bGUtPnNldFRleHRBbGlnbihtX3N0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBMRUZU
IDogUklHSFQpOworICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dEFsaWduKG1fc3R5bGUtPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7CiAgICAgICAgIGVsc2UgaWYg
KGlkID09IENTU1ZhbHVlRW5kKQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dEFsaWduKG1f
c3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/IFJJR0hUIDogTEVGVCk7CisgICAgICAgICAgICBt
X3N0eWxlLT5zZXRUZXh0QWxpZ24obV9zdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
UklHSFQgOiBMRUZUKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4
dEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCShyZXZpc2lvbiA2ODU2MSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NDMsNyArNjQzLDcgQEAgYm9vbCBFZGl0b3I6Omhhc0JpZGlTZWxlY3Rp
b24oKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLSAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFJU
TCkKKyAgICBpZiAoIXN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgcmV0dXJuIHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5jb250YWlu
c05vblplcm9CaWRpTGV2ZWwoKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3Bw
CShyZXZpc2lvbiA2ODU2MSkKKysrIFdlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsOSArMTIzLDkgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0
aW9uOjpsZWZ0VmlzdWFsbHlEaQogCiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAg
ICBpZiAoKHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgfHwgcmVuZGVyZXItPmlzQlIoKSkgJiYgb2Zm
c2V0ID09IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gYm94LT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9k
ZWVwUG9zaXRpb24pOworICAgICAgICAgICAgICAgIHJldHVybiBib3gtPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3Np
dGlvbikgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAK
LSAgICAgICAgICAgIG9mZnNldCA9IGJveC0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gcmVuZGVyZXIt
PnByZXZpb3VzT2Zmc2V0KG9mZnNldCkgOiByZW5kZXJlci0+bmV4dE9mZnNldChvZmZzZXQpOwor
ICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZW5k
ZXJlci0+cHJldmlvdXNPZmZzZXQob2Zmc2V0KSA6IHJlbmRlcmVyLT5uZXh0T2Zmc2V0KG9mZnNl
dCk7CiAKICAgICAgICAgICAgIGludCBjYXJldE1pbk9mZnNldCA9IGJveC0+Y2FyZXRNaW5PZmZz
ZXQoKTsKICAgICAgICAgICAgIGludCBjYXJldE1heE9mZnNldCA9IGJveC0+Y2FyZXRNYXhPZmZz
ZXQoKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRW
aXN1YWxseURpCiAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gY2FyZXRNaW5PZmZzZXQgJiYgb2Zm
c2V0IDwgY2FyZXRNYXhPZmZzZXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIGlmIChib3gtPmRpcmVjdGlvbigpID09IExUUiA/IG9mZnNldCA8IGNhcmV0TWluT2Zmc2V0
IDogb2Zmc2V0ID4gY2FyZXRNYXhPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChib3gtPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCA8IGNhcmV0TWluT2Zmc2V0IDogb2Zmc2V0ID4g
Y2FyZXRNYXhPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAvLyBPdmVyc2hvdCB0byB0aGUgbGVm
dC4KICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIHByZXZCb3ggPSBib3gtPnByZXZMZWFmQ2hp
bGQoKTsKICAgICAgICAgICAgICAgICBpZiAoIXByZXZCb3gpCkBAIC0yNTksOSArMjU5LDkgQEAg
UG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RAogCiAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgICAgICAgICBpZiAoKHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgfHwgcmVu
ZGVyZXItPmlzQlIoKSkgJiYgb2Zmc2V0ID09IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBib3gtPmRpcmVjdGlvbigpID09IExUUiA/IG5leHRWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFsbHlE
aXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5k
aWRhdGUobV9kZWVwUG9zaXRpb24pIDogcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KG1fZGVlcFBvc2l0aW9uKTsKIAotICAgICAgICAgICAgb2Zmc2V0ID0gYm94LT5kaXJlY3Rpb24o
KSA9PSBMVFIgPyByZW5kZXJlci0+bmV4dE9mZnNldChvZmZzZXQpIDogcmVuZGVyZXItPnByZXZp
b3VzT2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICBvZmZzZXQgPSBib3gtPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IHJlbmRlcmVyLT5uZXh0T2Zmc2V0KG9mZnNldCkgOiByZW5kZXJlci0+
cHJldmlvdXNPZmZzZXQob2Zmc2V0KTsKIAogICAgICAgICAgICAgaW50IGNhcmV0TWluT2Zmc2V0
ID0gYm94LT5jYXJldE1pbk9mZnNldCgpOwogICAgICAgICAgICAgaW50IGNhcmV0TWF4T2Zmc2V0
ID0gYm94LT5jYXJldE1heE9mZnNldCgpOwpAQCAtMjY5LDcgKzI2OSw3IEBAIFBvc2l0aW9uIFZp
c2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseUQKICAgICAgICAgICAgIGlmIChvZmZzZXQgPiBj
YXJldE1pbk9mZnNldCAmJiBvZmZzZXQgPCBjYXJldE1heE9mZnNldCkKICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gb2Zm
c2V0ID4gY2FyZXRNYXhPZmZzZXQgOiBvZmZzZXQgPCBjYXJldE1pbk9mZnNldCkgeworICAgICAg
ICAgICAgaWYgKGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0ID4gY2FyZXRN
YXhPZmZzZXQgOiBvZmZzZXQgPCBjYXJldE1pbk9mZnNldCkgewogICAgICAgICAgICAgICAgIC8v
IE92ZXJzaG90IHRvIHRoZSByaWdodC4KICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIG5leHRC
b3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKTsKICAgICAgICAgICAgICAgICBpZiAoIW5leHRCb3gp
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCShyZXZpc2lvbiA2ODU2MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0OSw3ICsxNzQ5LDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIHR1cm4gb2ZmIGZvbnQgc21vb3RoaW5nLgogCiAgICAgUmVuZGVyU3R5bGUqIGNvbXB1
dGVkU3R5bGUgPSBjYW52YXMoKS0+Y29tcHV0ZWRTdHlsZSgpOwotICAgIGJvb2wgcnRsID0gY29t
cHV0ZWRTdHlsZSA/IGNvbXB1dGVkU3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCA6IGZhbHNlOwor
ICAgIGJvb2wgcnRsID0gY29tcHV0ZWRTdHlsZSA/ICFjb21wdXRlZFN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgOiBmYWxzZTsKICAgICBib29sIG92ZXJyaWRlID0gY29tcHV0ZWRTdHls
ZSA/IGNvbXB1dGVkU3R5bGUtPnVuaWNvZGVCaWRpKCkgPT0gT3ZlcnJpZGUgOiBmYWxzZTsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVC
b3guaAkocmV2aXNpb24gNjg1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAko
d29ya2luZyBjb3B5KQpAQCAtMjUxLDggKzI1MSw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBj
aGFyIGJpZGlMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fYmlkaUVtYmVkZGluZ0xldmVsOyB9CiAg
ICAgdm9pZCBzZXRCaWRpTGV2ZWwodW5zaWduZWQgY2hhciBsZXZlbCkgeyBtX2JpZGlFbWJlZGRp
bmdMZXZlbCA9IGxldmVsOyB9CiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2JpZGlFbWJlZGRpbmdMZXZlbCAlIDIgPyBSVEwgOiBMVFI7IH0KLSAgICBpbnQg
Y2FyZXRMZWZ0bW9zdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlvbigpID09IExUUiA/
IGNhcmV0TWluT2Zmc2V0KCkgOiBjYXJldE1heE9mZnNldCgpOyB9Ci0gICAgaW50IGNhcmV0Umln
aHRtb3N0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aW9uKCkgPT0gTFRSID8gY2FyZXRN
YXhPZmZzZXQoKSA6IGNhcmV0TWluT2Zmc2V0KCk7IH0KKyAgICBib29sIGlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24oKSA9PSBMVFI7IH0KKyAgICBpbnQg
Y2FyZXRMZWZ0bW9zdE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IGNhcmV0TWluT2Zmc2V0KCkgOiBjYXJldE1heE9mZnNldCgpOyB9CisgICAgaW50IGNh
cmV0UmlnaHRtb3N0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gY2FyZXRNYXhPZmZzZXQoKSA6IGNhcmV0TWluT2Zmc2V0KCk7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBjbGVhclRydW5jYXRpb24oKSB7IH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAJKHJldmlzaW9uIDY4NTYxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIElubGlu
ZUZsb3dCb3g6OmRldGVybWluZVNwYWNpbmdGb3JGCiAKICAgICAvLyBUaGUgcm9vdCBpbmxpbmUg
Ym94IG5ldmVyIGhhcyBib3JkZXJzL21hcmdpbnMvcGFkZGluZy4KICAgICBpZiAocGFyZW50KCkp
IHsKLSAgICAgICAgYm9vbCBsdHIgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFI7CisgICAgICAgIGJvb2wgbHRyID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpOwogCiAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhbGwgaW5pdGlh
bCBsaW5lcyBhcmUgdW5jb25zdHJ1Y3RlZC4gIElmIHNvLCB0aGVuCiAgICAgICAgIC8vIHdlIGtu
b3cgdGhlIGlubGluZSBiZWdhbiBvbiB0aGlzIGxpbmUgKHVubGVzcyB3ZSBhcmUgYSBjb250aW51
YXRpb24pLgpAQCAtMzA5LDcgKzMwOSw3IEBAIGludCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVz
SW5JbmxpbmVEaXIKICAgICAgICAgICAgIHhQb3MgKz0gdGV4dC0+bG9naWNhbFdpZHRoKCk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+aXNQb3Np
dGlvbmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+cGFyZW50
KCktPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
ci0+cmVuZGVyZXIoKS0+cGFyZW50KCktPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSkKICAgICAgICAgICAgICAgICAgICAgY3Vyci0+c2V0WCh4UG9zKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIE91ciBvZmZzZXQgdGhhdCB3ZSBjYWNoZSBu
ZWVkcyB0byBiZSBmcm9tIHRoZSBlZGdlIG9mIHRoZSByaWdodCBib3JkZXIgYm94IGFuZApAQCAt
OTQ1LDcgKzk0NSw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRUZXh0RGVjb3JhdGlvbnMK
ICAgICAgICAgaWYgKHJvb3RMaW5lLT5lbGxpcHNpc0JveCgpKSB7CiAgICAgICAgICAgICBpbnQg
ZWxsaXBzaXNYID0gbV94ICsgcm9vdExpbmUtPmVsbGlwc2lzQm94KCktPngoKTsKICAgICAgICAg
ICAgIGludCBlbGxpcHNpc1dpZHRoID0gcm9vdExpbmUtPmVsbGlwc2lzQm94KCktPmxvZ2ljYWxX
aWR0aCgpOwotICAgICAgICAgICAgYm9vbCBsdHIgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBMVFI7CisgICAgICAgICAgICBib29sIGx0ciA9IHJlbmRlcmVyKCktPnN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChyb290TGluZSA9
PSB0aGlzKSB7CiAgICAgICAgICAgICAgICAgLy8gVHJpbSB3IGFuZCB4IHNvIHRoYXQgdGhlIHVu
ZGVybGluZSBpc24ndCBkcmF3biB1bmRlcm5lYXRoIHRoZSBlbGxpcHNpcy4KICAgICAgICAgICAg
ICAgICAvLyBsdHI6IGlzIG91ciByaWdodCBlZGdlIGZhcnRoZXIgcmlnaHQgdGhhbiB0aGUgcmln
aHQgZWRnZSBvZiB0aGUgZWxsaXBzaXMuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJ
dGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9y
LmgJKHJldmlzaW9uIDY4NTYxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBAIEFMV0FZU19JTkxJTkUgV1RGOjpV
bmljb2RlOjpEaXJlY3Rpb24gSW4KICAgICAgICAgcmV0dXJuIFdURjo6VW5pY29kZTo6ZGlyZWN0
aW9uKGMpOwogCiAgICAgaWYgKG9iaiAmJiBvYmotPmlzTGlzdE1hcmtlcigpKQotICAgICAgICBy
ZXR1cm4gb2JqLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBXVEY6OlVuaWNvZGU6Okxl
ZnRUb1JpZ2h0IDogV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdDsKKyAgICAgICAgcmV0dXJuIG9i
ai0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gV1RGOjpVbmljb2RlOjpMZWZ0
VG9SaWdodCA6IFdURjo6VW5pY29kZTo6UmlnaHRUb0xlZnQ7CiAKICAgICByZXR1cm4gV1RGOjpV
bmljb2RlOjpPdGhlck5ldXRyYWw7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAkocmV2aXNpb24gNjg1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIEludFJlY3QgSW5saW5lVGV4
dEJveDo6c2VsZWN0aW9uUmVjdChpbnQKICAgICAgICAgZVBvcyA9IGxlbjsKICAgICB9CiAKLSAg
ICBJbnRSZWN0IHIgPSBlbmNsb3NpbmdJbnRSZWN0KGYuc2VsZWN0aW9uUmVjdEZvclRleHQoVGV4
dFJ1bihjaGFyYWN0ZXJzLCBsZW4sIHRleHRPYmotPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1f
dG9BZGQsIGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJPdmVycmlkZSksCisgICAgSW50UmVjdCBy
ID0gZW5jbG9zaW5nSW50UmVjdChmLnNlbGVjdGlvblJlY3RGb3JUZXh0KFRleHRSdW4oY2hhcmFj
dGVycywgbGVuLCB0ZXh0T2JqLT5hbGxvd1RhYnMoKSwgdGV4dFBvcygpLCBtX3RvQWRkLCAhaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpLCBtX2Rpck92ZXJyaWRlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQodHggKyBtX3gs
IHR5ICsgc2VsVG9wKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7CiAgICAgaWYgKHIueCgpID4g
dHggKyBtX3ggKyBtX2xvZ2ljYWxXaWR0aCkKICAgICAgICAgci5zZXRXaWR0aCgwKTsKQEAgLTE5
OCw3ICsxOTgsNyBAQCBpbnQgSW5saW5lVGV4dEJveDo6cGxhY2VFbGxpcHNpc0JveChib29sCiAg
ICAgICAgIC8vIFRoZSBpbmxpbmUgYm94IG1heSBoYXZlIGRpZmZlcmVudCBkaXJlY3Rpb25hbGl0
eSB0aGFuIGl0J3MgcGFyZW50LiAgU2luY2UgdHJ1bmNhdGlvbgogICAgICAgICAvLyBiZWhhdmlv
ciBkZXBlbmRzIGJvdGggb24gYm90aCB0aGUgcGFyZW50IGFuZCB0aGUgaW5saW5lIGJsb2NrJ3Mg
ZGlyZWN0aW9uYWxpdHksIHdlCiAgICAgICAgIC8vIG11c3Qga2VlcCB0cmFjayBvZiB0aGVzZSBz
ZXBhcmF0ZWx5LgotICAgICAgICBib29sIGx0ciA9IGRpcmVjdGlvbigpID09IExUUjsKKyAgICAg
ICAgYm9vbCBsdHIgPSBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CiAgICAgICAgIGlmIChsdHIg
IT0gZmxvd0lzTFRSKSB7CiAgICAgICAgICAgLy8gV2lkdGggaW4gcGl4ZWxzIG9mIHRoZSB2aXNp
YmxlIHBvcnRpb24gb2YgdGhlIGJveCwgZXhjbHVkaW5nIHRoZSBlbGxpcHNpcy4KICAgICAgICAg
ICBpbnQgdmlzaWJsZUJveFdpZHRoID0gdmlzaWJsZVJpZ2h0RWRnZSAtIHZpc2libGVMZWZ0RWRn
ZSAgLSBlbGxpcHNpc1dpZHRoOwpAQCAtMzgyLDggKzM4Miw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdHJ1
bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKSB7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gZmxvd0Rp
cmVjdGlvbiA9IHJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5kaXJlY3Rp
b24oKTsKLSAgICAgICAgaWYgKGZsb3dEaXJlY3Rpb24gIT0gZGlyZWN0aW9uKCkpIHsKKyAgICAg
ICAgaWYgKHJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgIT0gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgICAg
ICAvLyBNYWtlIHRoZSB2aXNpYmxlIGZyYWdtZW50IG9mIHRleHQgaHVnIHRoZSBlZGdlIGNsb3Nl
c3QgdG8gdGhlIHJlc3Qgb2YgdGhlIHJ1biBieSBtb3ZpbmcgdGhlIG9yaWdpbgogICAgICAgICAg
ICAgLy8gYXQgd2hpY2ggd2Ugc3RhcnQgZHJhd2luZyB0ZXh0LgogICAgICAgICAgICAgLy8gZS5n
LiBJbiB0aGUgY2FzZSBvZiBMVFIgdGV4dCB0cnVuY2F0ZWQgaW4gYW4gUlRMIENvbnRleHQsIHRo
ZSBjb3JyZWN0IGJlaGF2aW9yIGlzOgpAQCAtMzk1LDcgKzM5NCw3IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICAgICAgICAgIGludCB3aWR0aE9mVmlzaWJs
ZVRleHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIoKSktPndpZHRoKG1fc3RhcnQsIG1fdHJ1bmNh
dGlvbiwgdGV4dFBvcygpLCBtX2ZpcnN0TGluZSk7CiAgICAgICAgICAgICBpbnQgd2lkdGhPZkhp
ZGRlblRleHQgPSBtX2xvZ2ljYWxXaWR0aCAtIHdpZHRoT2ZWaXNpYmxlVGV4dDsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgaGl0IHRlc3RpbmcgbG9naWMgYWxzbyBuZWVkcyB0byB0YWtlIHRo
aXMgdHJhbnNsYXRpb24gaW50IGFjY291bnQuCi0gICAgICAgICAgICB0eCArPSBkaXJlY3Rpb24o
KSA9PSBMVFIgPyB3aWR0aE9mSGlkZGVuVGV4dCA6IC13aWR0aE9mSGlkZGVuVGV4dDsKKyAgICAg
ICAgICAgIHR4ICs9IGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHdpZHRoT2ZIaWRkZW5UZXh0
IDogLXdpZHRoT2ZIaWRkZW5UZXh0OwogICAgICAgICB9CiAgICAgfQogCkBAIC01MDQsNyArNTAz
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogCiAgICAgaW50
IGJhc2VsaW5lID0gcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250KCkuYXNjZW50
KCk7CiAgICAgSW50UG9pbnQgdGV4dE9yaWdpbihtX3ggKyB0eCwgbV95ICsgdHkgKyBiYXNlbGlu
ZSk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKGNoYXJhY3RlcnMsIGxlbmd0aCwgdGV4dFJlbmRlcmVy
KCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fdG9BZGQsIGRpcmVjdGlvbigpID09IFJUTCwg
bV9kaXJPdmVycmlkZSB8fCBzdHlsZVRvVXNlLT52aXN1YWxseU9yZGVyZWQoKSk7CisgICAgVGV4
dFJ1biB0ZXh0UnVuKGNoYXJhY3RlcnMsIGxlbmd0aCwgdGV4dFJlbmRlcmVyKCktPmFsbG93VGFi
cygpLCB0ZXh0UG9zKCksIG1fdG9BZGQsICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCksIG1fZGly
T3ZlcnJpZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwogCiAgICAgaW50IHNQ
b3MgPSAwOwogICAgIGludCBlUG9zID0gMDsKQEAgLTYzNSw3ICs2MzQsNyBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAKICAgICBjb250ZXh0LT5jbGlwKEludFJl
Y3QobV94ICsgdHgsIHkgKyB0eSwgbV9sb2dpY2FsV2lkdGgsIGgpKTsKICAgICBjb250ZXh0LT5k
cmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBUZXh0UnVuKGNoYXJhY3RlcnMsIGxlbmd0aCwgdGV4
dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fdG9BZGQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbigpID09IFJUTCwgbV9kaXJPdmVycmlk
ZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCksIG1fZGlyT3ZlcnJpZGUgfHwgc3R5
bGUtPnZpc3VhbGx5T3JkZXJlZCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRQb2ludChtX3ggKyB0eCwgeSArIHR5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSwg
c1BvcywgZVBvcyk7CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQpAQCAtNjU4LDcgKzY1Nyw3
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2sKICAgICBpbnQgeSA9
IHNlbGVjdGlvblRvcCgpOwogICAgIGludCBoID0gc2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgY29u
dGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgVGV4dFJ1bih0ZXh0UmVuZGVyZXIoKS0+
dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFs
bG93VGFicygpLCB0ZXh0UG9zKCksIG1fdG9BZGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0aW9uKCkgPT0gUlRMLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1
YWxseU9yZGVyZWQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRl
cmVkKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KG1feCAr
IHR4LCB5ICsgdHkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKICAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CkBAIC02OTQsNyArNjkzLDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcAogICAgIGludCB3aWR0aCA9IG1fbG9naWNhbFdp
ZHRoOwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewogICAgICAgICB3
aWR0aCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+d2lkdGgobV9zdGFydCwgbV90cnVuY2F0
aW9uLCB0ZXh0UG9zKCksIG1fZmlyc3RMaW5lKTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbigpID09
IFJUTCkKKyAgICAgICAgaWYgKCFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAg
ICB0eCArPSAobV9sb2dpY2FsV2lkdGggLSB3aWR0aCk7CiAgICAgfQogICAgIApAQCAtODEzLDcg
KzgxMiw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW0KIAogICAg
ICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgJiB3aWR0aAogICAgICAgICBJbnRQb2ludCBzdGFydFBv
aW50KHR4ICsgbV94LCB0eSArIHNlbGVjdGlvblRvcCgpKTsKLSAgICAgICAgVGV4dFJ1biBydW4o
dGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hhcmFjdGVycygpICsgbV9zdGFydCwgbV9sZW4sIHRl
eHRSZW5kZXJlcigpLT5hbGxvd1RhYnMoKSwgdGV4dFBvcygpLCBtX3RvQWRkLCBkaXJlY3Rpb24o
KSA9PSBSVEwsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKTsKKyAg
ICAgICAgVGV4dFJ1biBydW4odGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hhcmFjdGVycygpICsg
bV9zdGFydCwgbV9sZW4sIHRleHRSZW5kZXJlcigpLT5hbGxvd1RhYnMoKSwgdGV4dFBvcygpLCBt
X3RvQWRkLCAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxl
LT52aXN1YWxseU9yZGVyZWQoKSk7CiAgICAgICAgIGludCBoID0gc2VsZWN0aW9uSGVpZ2h0KCk7
CiAgICAgICAgIAogICAgICAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzdGFydFBvaW50LCBoLCBzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbikpOwpAQCAtODU4LDcgKzg1Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIKICAgICAKICAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIu
c3RhcnRPZmZzZXQgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7CiAgICAgaW50IGVQb3MgPSBtaW4o
bWFya2VyLmVuZE9mZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7ICAgIAotICAgIFRl
eHRSdW4gcnVuKHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIG1fc3RhcnQs
IG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQb3MoKSwgbV90b0FkZCwg
ZGlyZWN0aW9uKCkgPT0gUlRMLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVy
ZWQoKSk7CisgICAgVGV4dFJ1biBydW4odGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hhcmFjdGVy
cygpICsgbV9zdGFydCwgbV9sZW4sIHRleHRSZW5kZXJlcigpLT5hbGxvd1RhYnMoKSwgdGV4dFBv
cygpLCBtX3RvQWRkLCAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpLCBtX2Rpck92ZXJyaWRlIHx8
IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CiAgICAgCiAgICAgLy8gQWx3YXlzIGNvbXB1dGUg
YW5kIHN0b3JlIHRoZSByZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtlci4gVGhlIGNvbXB1
dGVkIHJlY3QgaXMgaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMuCiAgICAgSW50UmVjdCBtYXJrZXJS
ZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgSW50
UG9pbnQobV94LCB5KSwgaCwgc1BvcywgZVBvcykpOwpAQCAtODg2LDcgKzg4NSw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWMKICAgICAKICAgICBpbnQgc1BvcyA9
IG1heChtYXJrZXIuc3RhcnRPZmZzZXQgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7CiAgICAgaW50
IGVQb3MgPSBtaW4obWFya2VyLmVuZE9mZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7
ICAgIAotICAgIFRleHRSdW4gcnVuKHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMo
KSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQb3Mo
KSwgbV90b0FkZCwgZGlyZWN0aW9uKCkgPT0gUlRMLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52
aXN1YWxseU9yZGVyZWQoKSk7CisgICAgVGV4dFJ1biBydW4odGV4dFJlbmRlcmVyKCktPnRleHQo
KS0+Y2hhcmFjdGVycygpICsgbV9zdGFydCwgbV9sZW4sIHRleHRSZW5kZXJlcigpLT5hbGxvd1Rh
YnMoKSwgdGV4dFBvcygpLCBtX3RvQWRkLCAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpLCBtX2Rp
ck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CiAgICAgSW50UG9pbnQgc3Rh
cnRQb2ludCA9IEludFBvaW50KG1feCwgeSk7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSBhbmQgc3Rv
cmUgdGhlIHJlY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2VyLgpAQCAtMTAzMSw3ICsxMDMw
LDcgQEAgaW50IElubGluZVRleHRCb3g6OnRleHRQb3MoKSBjb25zdAogICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgCiAgICAgUmVuZGVyQmxvY2sqIGJsb2NrRWxlbWVudCA9IHJlbmRlcmVyKCkt
PmNvbnRhaW5pbmdCbG9jaygpOwotICAgIHJldHVybiBkaXJlY3Rpb24oKSA9PSBSVEwgPyB4KCkg
LSBibG9ja0VsZW1lbnQtPmJvcmRlclJpZ2h0KCkgLSBibG9ja0VsZW1lbnQtPnBhZGRpbmdSaWdo
dCgpCisgICAgcmV0dXJuICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB4KCkgLSBibG9ja0Vs
ZW1lbnQtPmJvcmRlclJpZ2h0KCkgLSBibG9ja0VsZW1lbnQtPnBhZGRpbmdSaWdodCgpCiAgICAg
ICAgICAgICAgICAgICAgICAgOiB4KCkgLSBibG9ja0VsZW1lbnQtPmJvcmRlckxlZnQoKSAtIGJs
b2NrRWxlbWVudC0+cGFkZGluZ0xlZnQoKTsKIH0KIApAQCAtMTA0Myw3ICsxMDQyLDcgQEAgaW50
IElubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGludAogICAgIFJlbmRlclRleHQqIHRl
eHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIoKSk7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
dGV4dC0+c3R5bGUobV9maXJzdExpbmUpOwogICAgIGNvbnN0IEZvbnQqIGYgPSAmc3R5bGUtPmZv
bnQoKTsKLSAgICByZXR1cm4gZi0+b2Zmc2V0Rm9yUG9zaXRpb24oVGV4dFJ1bih0ZXh0UmVuZGVy
ZXIoKS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVy
KCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fdG9BZGQsIGRpcmVjdGlvbigpID09IFJUTCwg
bV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpLAorICAgIHJldHVybiBm
LT5vZmZzZXRGb3JQb3NpdGlvbihUZXh0UnVuKHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJh
Y3RlcnMoKSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRl
eHRQb3MoKSwgbV90b0FkZCwgIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSwgbV9kaXJPdmVycmlk
ZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfeCAtIG1feCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCkBAIC0xMDU3LDEw
ICsxMDU2LDEwIEBAIGludCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQKIAog
ICAgIFJlbmRlclRleHQqIHRleHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIoKSk7CiAgICAgY29u
c3QgRm9udCYgZiA9IHRleHQtPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpOwotICAgIGludCBm
cm9tID0gZGlyZWN0aW9uKCkgPT0gUlRMID8gb2Zmc2V0IC0gbV9zdGFydCA6IDA7Ci0gICAgaW50
IHRvID0gZGlyZWN0aW9uKCkgPT0gUlRMID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OworICAg
IGludCBmcm9tID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQg
OiAwOworICAgIGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9m
ZnNldCAtIG1fc3RhcnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVh
cmluZyBoZXJlPwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGYuc2VsZWN0aW9uUmVjdEZv
clRleHQoVGV4dFJ1bih0ZXh0LT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIG1fc3RhcnQsIG1fbGVu
LCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQb3MoKSwgbV90b0FkZCwgZGlyZWN0
aW9uKCkgPT0gUlRMLCBtX2Rpck92ZXJyaWRlKSwKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVj
dChmLnNlbGVjdGlvblJlY3RGb3JUZXh0KFRleHRSdW4odGV4dC0+dGV4dCgpLT5jaGFyYWN0ZXJz
KCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9z
KCksIG1fdG9BZGQsICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCksIG1fZGlyT3ZlcnJpZGUpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9p
bnQobV94LCAwKSwgMCwgZnJvbSwgdG8pKS5yaWdodCgpOwogfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA2ODgxNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyNCw3ICsxMzI0LDcgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6ZXhwYW5kc1RvRW5jbG9zZU92ZXJoYQogdm9pZCBSZW5kZXJCbG9jazo6YWRq
dXN0UG9zaXRpb25lZEJsb2NrKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1h
cmdpbkluZm8pCiB7CiAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5oYXNTdGF0aWNYKCkpIHsKLSAg
ICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgaWYgKHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIGNoaWxkLT5sYXllcigp
LT5zZXRTdGF0aWNYKGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBjaGlsZC0+bGF5ZXIoKS0+c2V0U3RhdGljWChib3JkZXJSaWdodCgpICsg
cGFkZGluZ1JpZ2h0KCkpOwpAQCAtMTY1NSw3ICsxNjU1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
ZGV0ZXJtaW5lTG9naWNhbExlZnRQbwogICAgIC8vIFNvbWUgb2JqZWN0cyAoZS5nLiwgdGFibGVz
LCBob3Jpem9udGFsIHJ1bGVzLCBvdmVyZmxvdzphdXRvIGJsb2NrcykgYXZvaWQgZmxvYXRzLiAg
VGhleSBuZWVkCiAgICAgLy8gdG8gc2hpZnQgb3ZlciBhcyBuZWNlc3NhcnkgdG8gZG9kZ2UgYW55
IGZsb2F0cyB0aGF0IG1pZ2h0IGdldCBpbiB0aGUgd2F5LgogICAgIGlmIChjaGlsZC0+YXZvaWRz
RmxvYXRzKCkpIHsKLSAgICAgICAgaW50IHN0YXJ0T2ZmID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkg
PT0gTFRSID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxIZWlnaHQoKSwgZmFsc2Up
IDogdG90YWxBdmFpbGFibGVMb2dpY2FsV2lkdGggLSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5l
KGxvZ2ljYWxIZWlnaHQoKSwgZmFsc2UpOworICAgICAgICBpbnQgc3RhcnRPZmYgPSBzdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUobG9n
aWNhbEhlaWdodCgpLCBmYWxzZSkgOiB0b3RhbEF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAtIGxvZ2lj
YWxSaWdodE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBmYWxzZSk7CiAgICAgICAgIGlm
IChzdHlsZSgpLT50ZXh0QWxpZ24oKSAhPSBXRUJLSVRfQ0VOVEVSICYmICFjaGlsZC0+c3R5bGUo
KS0+bWFyZ2luU3RhcnRVc2luZyhzdHlsZSgpKS5pc0F1dG8oKSkgewogICAgICAgICAgICAgaWYg
KGNoaWxkTWFyZ2luU3RhcnQgPCAwKQogICAgICAgICAgICAgICAgIHN0YXJ0T2ZmICs9IGNoaWxk
TWFyZ2luU3RhcnQ7CkBAIC0xNjcxLDcgKzE2NzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpkZXRl
cm1pbmVMb2dpY2FsTGVmdFBvCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzZXRMb2dpY2FsTGVm
dEZvckNoaWxkKGNoaWxkLCBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBuZXdQb3NpdGlv
biA6IHRvdGFsQXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gbmV3UG9zaXRpb24gLSBsb2dpY2FsV2lk
dGhGb3JDaGlsZChjaGlsZCkpOworICAgIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoY2hpbGQsIHN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG5ld1Bvc2l0aW9uIDogdG90YWxBdmFp
bGFibGVMb2dpY2FsV2lkdGggLSBuZXdQb3NpdGlvbiAtIGxvZ2ljYWxXaWR0aEZvckNoaWxkKGNo
aWxkKSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihj
b25zdCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKQpAQCAtMjEyMywxNCArMjEyMywxNCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVzKFBhaW50CiAgICAgLy8gV2UgbmVlZCB0byBk
byBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBjaGlsZCBwYWludGluZyBpbnRvIHN0
cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwogICAgIHVuc2ln
bmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7Ci0gICAgaW50IGN1cnJYT2Zmc2V0
ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRlbnRXaWR0aCgpOworICAg
IGludCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IDAg
OiBjb250ZW50V2lkdGgoKTsKICAgICBpbnQgcnVsZUFkZCA9IGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KCk7Ci0gICAgaW50IHJ1bGVYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8g
MCA6IGNvbnRlbnRXaWR0aCgpOworICAgIGludCBydWxlWCA9IHN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IDAgOiBjb250ZW50V2lkdGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewogICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1
bW5SZWN0QXQoY29sSW5mbywgaSk7CiAKICAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBwb3Np
dGlvbi4KLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgeworICAgICAg
ICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgICAgICBy
dWxlWCArPSBjb2xSZWN0LndpZHRoKCkgKyBjb2xHYXAgLyAyOwogICAgICAgICAgICAgY3VyclhP
ZmZzZXQgKz0gY29sUmVjdC53aWR0aCgpICsgY29sR2FwOwogICAgICAgICB9IGVsc2UgewpAQCAt
MjE0NSw3ICsyMTQ1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWlu
dAogICAgICAgICAgICAgaW50IHJ1bGVUb3AgPSB0eSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1Rv
cCgpOwogICAgICAgICAgICAgaW50IHJ1bGVCb3R0b20gPSBydWxlVG9wICsgY29udGVudEhlaWdo
dCgpOwogICAgICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKHBhaW50SW5mby5jb250ZXh0LCBy
dWxlU3RhcnQsIHJ1bGVUb3AsIHJ1bGVFbmQsIHJ1bGVCb3R0b20sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gQlNMZWZ0IDogQlNS
aWdodCwgcnVsZUNvbG9yLCBydWxlU3R5bGUsIDAsIDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IEJTTGVmdCA6IEJT
UmlnaHQsIHJ1bGVDb2xvciwgcnVsZVN0eWxlLCAwLCAwKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgcnVsZVggPSBjdXJyWE9mZnNldDsKQEAgLTIxNjEsNyArMjE2MSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uQ29udGVudHMoUGEKICAgICB1bnNpZ25lZCBjb2xDb3Vu
dCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIg
PyAwIDogY29udGVudFdpZHRoKCkgLSBjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lkdGgoKTsK
KyAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyAwIDogY29udGVudFdpZHRoKCkgLSBjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lkdGgoKTsK
ICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b2xDb3VudDsgaSsrKSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhl
IHJlY3QsIGFuZCB0aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgpAQCAtMjE4OSw3ICsyMTg5LDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQYQogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHBvc2l0aW9uLgotICAgICAgICBp
ZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICBpZiAoc3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgY3VyclhPZmZzZXQgKz0gY29sUmVj
dC53aWR0aCgpICsgY29sR2FwOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjdXJyWE9mZnNl
dCAtPSAoY29sUmVjdC53aWR0aCgpICsgY29sR2FwKTsKQEAgLTI4MDQsNyArMjgwNCw3IEBAIElu
dFJlY3QgUmVuZGVyQmxvY2s6OmZpbGxSaWdodFNlbGVjdGlvbkcKIAogdm9pZCBSZW5kZXJCbG9j
azo6Z2V0SG9yaXpvbnRhbFNlbGVjdGlvbkdhcEluZm8oU2VsZWN0aW9uU3RhdGUgc3RhdGUsIGJv
b2wmIGxlZnRHYXAsIGJvb2wmIHJpZ2h0R2FwKQogewotICAgIGJvb2wgbHRyID0gc3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gTFRSOworICAgIGJvb2wgbHRyID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpOwogICAgIGxlZnRHYXAgPSAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25JbnNpZGUpIHx8CiAgICAgICAgICAgICAgIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvbkVuZCAmJiBsdHIpIHx8CiAgICAgICAgICAgICAgIChzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvblN0YXJ0ICYmICFsdHIpOwpAQCAtMzIyNyw3ICszMjI3LDcgQEAgaW50IFJl
bmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbgogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKGFwcGx5VGV4dEluZGVudCAmJiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsK
KyAgICBpZiAoYXBwbHlUZXh0SW5kZW50ICYmIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkgewogICAgICAgICBpbnQgY3cgPSAwOwogICAgICAgICBpZiAoc3R5bGUoKS0+dGV4dElu
ZGVudCgpLmlzUGVyY2VudCgpKQogICAgICAgICAgICAgY3cgPSBjb250YWluaW5nQmxvY2soKS0+
YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CkBAIC0zMjU2LDcgKzMyNTYsNyBAQCBpbnQgUmVuZGVy
QmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgaWYgKGFwcGx5VGV4dEluZGVudCAmJiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpIHsK
KyAgICBpZiAoYXBwbHlUZXh0SW5kZW50ICYmICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpIHsKICAgICAgICAgaW50IGN3ID0gMDsKICAgICAgICAgaWYgKHN0eWxlKCktPnRleHRJ
bmRlbnQoKS5pc1BlcmNlbnQoKSkKICAgICAgICAgICAgIGN3ID0gY29udGFpbmluZ0Jsb2NrKCkt
PmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwpAQCAtMzQ1MSw3ICszNDUxLDcgQEAgaW50IFJlbmRl
ckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogCiAgICAgaWYgKGhhc0NvbHVtbnMoKSkg
ewogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3IgTFRSCi0gICAgICAgIGlmIChzdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKKyAgICAgICAgaWYgKHN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkgewogICAgICAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNv
bHVtbkluZm8oKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gY29sdW1uQ291bnQoY29s
SW5mbyk7CiAgICAgICAgICAgICBpZiAoY291bnQpCkBAIC0zNDc5LDcgKzM0NzksNyBAQCBpbnQg
UmVuZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBub2RlIGlzIGEgcm9vdCBlZGl0YWJsZSBlbGVtZW50
LCB0aGVuIHRoZSByaWdodG1vc3RQb3NpdGlvbiBzaG91bGQgYWNjb3VudCBmb3IgYSBjYXJldCBh
dCB0aGUgZW5kLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGZpbmQgYW5vdGhl
ciB3YXkgdG8gZG8gdGhpcywgc2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93IHdoZW4gd2UgZG9u
J3Qgd2FudCB0aGVtIHRvLgotICAgICAgICAgICAgICAgIGlmIChub2RlKCkgJiYgbm9kZSgpLT5p
c0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUoKSA9PSBub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSAmJiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgJiYgIXBhZGRpbmdSaWdodCgpKQor
ICAgICAgICAgICAgICAgIGlmIChub2RlKCkgJiYgbm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgp
ICYmIG5vZGUoKSA9PSBub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAmJiBzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgIXBhZGRpbmdSaWdodCgpKQogICAgICAgICAgICAg
ICAgICAgICBjaGlsZFJpZ2h0RWRnZSArPSAxOwogICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4
KHJpZ2h0LCBjaGlsZFJpZ2h0RWRnZSArIHBhZGRpbmdSaWdodCgpICsgcmVsYXRpdmVPZmZzZXQp
OwogICAgICAgICAgICAgfQpAQCAtMzU1Miw3ICszNTUyLDcgQEAgaW50IFJlbmRlckJsb2NrOjps
ZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogCiAgICAgaWYgKGhhc0NvbHVtbnMoKSkgewogICAgICAg
ICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3IgUlRMCi0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBSVEwpIHsKKyAgICAgICAgaWYgKCFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkpIHsKICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZv
KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwog
ICAgICAgICAgICAgaWYgKGNvdW50KQpAQCAtNDQyMiw3ICs0NDIyLDcgQEAgSW50UmVjdCBSZW5k
ZXJCbG9jazo6Y29sdW1uUmVjdEF0KENvbHVtbgogICAgIGludCBjb2xIZWlnaHQgPSBjb2xJbmZv
LT5jb2x1bW5IZWlnaHQoKTsKICAgICBpbnQgY29sVG9wID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCk7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgpOwotICAgIGludCBjb2xMZWZ0ID0g
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gCisgICAgaW50IGNvbExlZnQgPSBzdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyAKICAgICAgICAgICAgICAgICAgICAgICBib3Jk
ZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgKGluZGV4ICogKGNvbFdpZHRoICsgY29sR2FwKSkK
ICAgICAgICAgICAgICAgICAgICAgICA6IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBj
b250ZW50V2lkdGgoKSAtIGNvbFdpZHRoIC0gKGluZGV4ICogKGNvbFdpZHRoICsgY29sR2FwKSk7
CiAgICAgcmV0dXJuIEludFJlY3QoY29sTGVmdCwgY29sVG9wLCBjb2xXaWR0aCwgY29sSGVpZ2h0
KTsKQEAgLTQ0NjQsOCArNDQ2NCw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmxheW91dENvbHVtbnMo
Ym9vbCBoYXMKIAogICAgICAgICBpZiAoY29sdW1uQ291bnQoY29sSW5mbykpIHsKICAgICAgICAg
ICAgIEludFJlY3QgbGFzdFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQo
Y29sSW5mbykgLSAxKTsKLSAgICAgICAgICAgIGludCBvdmVyZmxvd0xlZnQgPSBzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBSVEwgPyBtaW4oMCwgbGFzdFJlY3QueCgpKSA6IDA7Ci0gICAgICAgICAg
ICBpbnQgb3ZlcmZsb3dSaWdodCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IG1heCh3
aWR0aCgpLCBsYXN0UmVjdC54KCkgKyBsYXN0UmVjdC53aWR0aCgpKSA6IDA7CisgICAgICAgICAg
ICBpbnQgb3ZlcmZsb3dMZWZ0ID0gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IG1pbigwLCBsYXN0UmVjdC54KCkpIDogMDsKKyAgICAgICAgICAgIGludCBvdmVyZmxvd1JpZ2h0
ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4KHdpZHRoKCksIGxhc3RS
ZWN0LngoKSArIGxhc3RSZWN0LndpZHRoKCkpIDogMDsKICAgICAgICAgICAgIGludCBvdmVyZmxv
d0hlaWdodCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29sSW5mby0+Y29sdW1uSGVp
Z2h0KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQob3ZlcmZs
b3dIZWlnaHQgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQoKSk7CkBAIC00NzExLDcgKzQ3MTEsNyBAQCBzdGF0aWMgaW50IGdldEJv
cmRlclBhZGRpbmdNYXJnaW4oY29uc3QgCiB7CiAgICAgUmVuZGVyU3R5bGUqIGNzdHlsZSA9IGNo
aWxkLT5zdHlsZSgpOwogICAgIGludCByZXN1bHQgPSAwOwotICAgIGJvb2wgbGVmdFNpZGUgPSAo
Y3N0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIpID8gIWVuZE9mSW5saW5lIDogZW5kT2ZJbmxpbmU7
CisgICAgYm9vbCBsZWZ0U2lkZSA9IChjc3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkg
PyAhZW5kT2ZJbmxpbmUgOiBlbmRPZklubGluZTsKICAgICByZXN1bHQgKz0gZ2V0QlBNV2lkdGgo
KGxlZnRTaWRlID8gY2hpbGQtPm1hcmdpbkxlZnQoKSA6IGNoaWxkLT5tYXJnaW5SaWdodCgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnRTaWRlID8gY3N0eWxlLT5tYXJnaW5MZWZ0
KCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3R5bGUtPm1hcmdp
blJpZ2h0KCkpKTsKQEAgLTU3MzMsNyArNTczMyw3IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6Omxv
Y2FsQ2FyZXRSZWN0KElubGkKICAgICBzd2l0Y2ggKGN1cnJlbnRTdHlsZS0+dGV4dEFsaWduKCkp
IHsKICAgICAgICAgY2FzZSBUQUFVVE86CiAgICAgICAgIGNhc2UgSlVTVElGWToKLSAgICAgICAg
ICAgIGlmIChjdXJyZW50U3R5bGUtPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAgICAgIGlm
ICghY3VycmVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgYWxpZ25tZW50ID0gYWxpZ25SaWdodDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIExFRlQ6CkBAIC02MDY5LDI2ICs2MDY5LDI2IEBAIGludCBSZW5kZXJCbG9jazo6bWFyZ2lu
QWZ0ZXJGb3JDaGlsZChSZW4KIGludCBSZW5kZXJCbG9jazo6bWFyZ2luU3RhcnRGb3JDaGlsZChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPmlz
VmVydGljYWxCbG9ja0Zsb3coKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlKCktPmRpcmVjdGlvbigp
ID09IExUUiA/IGNoaWxkLT5tYXJnaW5MZWZ0KCkgOiBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLSAg
ICByZXR1cm4gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gY2hpbGQtPm1hcmdpblRvcCgp
IDogY2hpbGQtPm1hcmdpbkJvdHRvbSgpOworICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gY2hpbGQtPm1hcmdpbkxlZnQoKSA6IGNoaWxkLT5tYXJnaW5S
aWdodCgpOworICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBj
aGlsZC0+bWFyZ2luVG9wKCkgOiBjaGlsZC0+bWFyZ2luQm90dG9tKCk7CiB9CiAKIGludCBSZW5k
ZXJCbG9jazo6bWFyZ2luRW5kRm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBj
b25zdAogewogICAgIGlmIChzdHlsZSgpLT5pc1ZlcnRpY2FsQmxvY2tGbG93KCkpCi0gICAgICAg
IHJldHVybiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBjaGlsZC0+bWFyZ2luUmlnaHQo
KSA6IGNoaWxkLT5tYXJnaW5MZWZ0KCk7Ci0gICAgcmV0dXJuIHN0eWxlKCktPmRpcmVjdGlvbigp
ID09IExUUiA/IGNoaWxkLT5tYXJnaW5Cb3R0b20oKSA6IGNoaWxkLT5tYXJnaW5Ub3AoKTsKKyAg
ICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNoaWxkLT5t
YXJnaW5SaWdodCgpIDogY2hpbGQtPm1hcmdpbkxlZnQoKTsKKyAgICByZXR1cm4gc3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY2hpbGQtPm1hcmdpbkJvdHRvbSgpIDogY2hpbGQt
Pm1hcmdpblRvcCgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXJnaW5TdGFydEZvckNo
aWxkKFJlbmRlckJveCogY2hpbGQsIGludCBtYXJnaW4pCiB7CiAgICAgaWYgKHN0eWxlKCktPmlz
VmVydGljYWxCbG9ja0Zsb3coKSkgewotICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkg
PT0gTFRSKQorICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQog
ICAgICAgICAgICAgY2hpbGQtPnNldE1hcmdpbkxlZnQobWFyZ2luKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgY2hpbGQtPnNldE1hcmdpblJpZ2h0KG1hcmdpbik7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgaWYgKHN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIGNoaWxkLT5zZXRN
YXJnaW5Ub3AobWFyZ2luKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2hpbGQtPnNldE1h
cmdpbkJvdHRvbShtYXJnaW4pOwpAQCAtNjA5OCwxMiArNjA5OCwxMiBAQCB2b2lkIFJlbmRlckJs
b2NrOjpzZXRNYXJnaW5TdGFydEZvckNoaWxkCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXJnaW5F
bmRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbWFyZ2luKQogewogICAgIGlmIChzdHls
ZSgpLT5pc1ZlcnRpY2FsQmxvY2tGbG93KCkpIHsKLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVj
dGlvbigpID09IExUUikKKyAgICAgICAgaWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkKICAgICAgICAgICAgIGNoaWxkLT5zZXRNYXJnaW5SaWdodChtYXJnaW4pOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBjaGlsZC0+c2V0TWFyZ2luTGVmdChtYXJnaW4pOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAg
IGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICBjaGls
ZC0+c2V0TWFyZ2luQm90dG9tKG1hcmdpbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNo
aWxkLT5zZXRNYXJnaW5Ub3AobWFyZ2luKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gNjg2ODEpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw3IEBAIGNvbnN0IHVuc2lnbmVkIGNNYXhMaW5lRGVwdGggPSAyMDA7CiAKIHN0YXRpYyBpbnQg
Z2V0Qm9yZGVyUGFkZGluZ01hcmdpbihSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQsIGJvb2wg
ZW5kT2ZJbmxpbmUpCiB7Ci0gICAgYm9vbCBsZWZ0U2lkZSA9IChjaGlsZC0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gTFRSKSA/ICFlbmRPZklubGluZSA6IGVuZE9mSW5saW5lOworICAgIGJvb2wg
bGVmdFNpZGUgPSAoY2hpbGQtPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgPyAh
ZW5kT2ZJbmxpbmUgOiBlbmRPZklubGluZTsKICAgICBpZiAobGVmdFNpZGUpCiAgICAgICAgIHJl
dHVybiBjaGlsZC0+bWFyZ2luTGVmdCgpICsgY2hpbGQtPnBhZGRpbmdMZWZ0KCkgKyBjaGlsZC0+
Ym9yZGVyTGVmdCgpOwogICAgIHJldHVybiBjaGlsZC0+bWFyZ2luUmlnaHQoKSArIGNoaWxkLT5w
YWRkaW5nUmlnaHQoKSArIGNoaWxkLT5ib3JkZXJSaWdodCgpOwpAQCAtMjQ0LDcgKzI0NCw3IEBA
IFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RMaW4KICAgICAgICAgLy8gQ3Jl
YXRlIGEgYm94IGZvciBvdXIgb2JqZWN0LgogICAgICAgICBib29sIGlzT25seVJ1biA9IChydW5D
b3VudCA9PSAxKTsKICAgICAgICAgaWYgKHJ1bkNvdW50ID09IDIgJiYgIXItPm1fb2JqZWN0LT5p
c0xpc3RNYXJrZXIoKSkKLSAgICAgICAgICAgIGlzT25seVJ1biA9ICgoc3R5bGUoKS0+ZGlyZWN0
aW9uKCkgPT0gUlRMKSA/IGxhc3RSdW4gOiBmaXJzdFJ1biktPm1fb2JqZWN0LT5pc0xpc3RNYXJr
ZXIoKTsKKyAgICAgICAgICAgIGlzT25seVJ1biA9ICghc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbGFzdFJ1biA6IGZpcnN0UnVuKS0+bV9vYmplY3QtPmlzTGlzdE1hcmtlcigp
OwogCiAgICAgICAgIElubGluZUJveCogYm94ID0gY3JlYXRlSW5saW5lQm94Rm9yUmVuZGVyZXIo
ci0+bV9vYmplY3QsIGZhbHNlLCBpc09ubHlSdW4pOwogICAgICAgICByLT5tX2JveCA9IGJveDsK
QEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0
aW9uCiAgICAgICAgIGNhc2UgV0VCS0lUX0xFRlQ6CiAgICAgICAgICAgICAvLyBUaGUgZGlyZWN0
aW9uIG9mIHRoZSBibG9jayBzaG91bGQgZGV0ZXJtaW5lIHdoYXQgaGFwcGVucyB3aXRoIHdpZGUg
bGluZXMuICBJbgogICAgICAgICAgICAgLy8gcGFydGljdWxhciB3aXRoIFJUTCBibG9ja3MsIHdp
ZGUgbGluZXMgc2hvdWxkIHN0aWxsIHNwaWxsIG91dCB0byB0aGUgbGVmdC4KLSAgICAgICAgICAg
IGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKKyAgICAgICAgICAgIGlmIChzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodG90
V2lkdGggPiBhdmFpbGFibGVXaWR0aCAmJiB0cmFpbGluZ1NwYWNlUnVuKQogICAgICAgICAgICAg
ICAgICAgICB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+c2V0TG9naWNhbFdpZHRoKG1heCgwLCB0
cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+bG9naWNhbFdpZHRoKCkgLSB0b3RXaWR0aCArIGF2YWls
YWJsZVdpZHRoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzg1LDcgKzM4NSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb24KICAgICAgICAgY2FzZSBUQUFV
VE86CiAgICAgICAgICAgICBudW1TcGFjZXMgPSAwOwogICAgICAgICAgICAgLy8gZm9yIHJpZ2h0
IHRvIGxlZnQgZmFsbCB0aHJvdWdoIHRvIHJpZ2h0IGFsaWduZWQKLSAgICAgICAgICAgIGlmIChz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKKyAgICAgICAgICAgIGlmIChzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodG90V2lkdGgg
PiBhdmFpbGFibGVXaWR0aCAmJiB0cmFpbGluZ1NwYWNlUnVuKQogICAgICAgICAgICAgICAgICAg
ICB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+c2V0TG9naWNhbFdpZHRoKG1heCgwLCB0cmFpbGlu
Z1NwYWNlUnVuLT5tX2JveC0+bG9naWNhbFdpZHRoKCkgLSB0b3RXaWR0aCArIGF2YWlsYWJsZVdp
ZHRoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvbgogICAgICAgICAgICAgLy8gV2lkZSBs
aW5lcyBzcGlsbCBvdXQgb2YgdGhlIGJsb2NrIGJhc2VkIG9mZiBkaXJlY3Rpb24uCiAgICAgICAg
ICAgICAvLyBTbyBldmVuIGlmIHRleHQtYWxpZ24gaXMgcmlnaHQsIGlmIGRpcmVjdGlvbiBpcyBM
VFIsIHdpZGUgbGluZXMgc2hvdWxkIG92ZXJmbG93IG91dCBvZiB0aGUgcmlnaHQKICAgICAgICAg
ICAgIC8vIHNpZGUgb2YgdGhlIGJsb2NrLgotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVj
dGlvbigpID09IExUUikgeworICAgICAgICAgICAgaWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGlmICh0cmFpbGluZ1NwYWNlUnVuKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRvdFdpZHRoIC09IHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5s
b2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZVJ1bi0+bV9i
b3gtPnNldExvZ2ljYWxXaWR0aCgwKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uCiAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFj
ZVdpZHRoID0gbWluKHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5sb2dpY2FsV2lkdGgoKSwgKGF2
YWlsYWJsZVdpZHRoIC0gdG90V2lkdGggKyAxKSAvIDIpOwogICAgICAgICAgICAgICAgIHRyYWls
aW5nU3BhY2VSdW4tPm1fYm94LT5zZXRMb2dpY2FsV2lkdGgobWF4KDAsIHRyYWlsaW5nU3BhY2VX
aWR0aCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUikKKyAgICAgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCiAgICAgICAgICAgICAgICAgeCArPSBtYXgoKGF2YWlsYWJsZVdpZHRoIC0gdG90V2lk
dGgpIC8gMiwgMCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgeCArPSB0b3RX
aWR0aCA+IGF2YWlsYWJsZVdpZHRoID8gKGF2YWlsYWJsZVdpZHRoIC0gdG90V2lkdGgpIDogKGF2
YWlsYWJsZVdpZHRoIC0gdG90V2lkdGgpIC8gMiAtIHRyYWlsaW5nU3BhY2VXaWR0aDsKQEAgLTEw
MzksNyArMTAzOSw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGEK
ICAgICAgICAgcG9zID0gbGFzdC0+bGluZUJyZWFrUG9zKCk7CiAgICAgICAgIHJlc29sdmVyLnNl
dFN0YXR1cyhsYXN0LT5saW5lQnJlYWtCaWRpU3RhdHVzKCkpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGJvb2wgbHRyID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSCisgICAgICAgIGJvb2wg
bHRyID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpCiAgICAgI2lmIEVOQUJMRShT
VkcpICAgCiAgICAgICAgICAgICB8fCAoc3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBVQk5vcm1h
bCAmJiBpc1NWR1RleHQoKSkKICAgICAjZW5kaWYKQEAgLTEyNTIsMTYgKzEyNTIsMTYgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZQogICAgICAgICAgICAgICAgIC8v
IEEgcmVsYXRpdmUgcG9zaXRpb25lZCBpbmxpbmUgZW5jbG9zZXMgdXMuICBJbiB0aGlzIGNhc2Us
IHdlIGFsc28gaGF2ZSB0byBkZXRlcm1pbmUgb3VyCiAgICAgICAgICAgICAgICAgLy8gcG9zaXRp
b24gYXMgdGhvdWdoIHdlIHdlcmUgYW4gaW5saW5lLiAgU2V0IHxzdGF0aWNYfCBhbmQgfHN0YXRp
Y1l8IG9uIHRoZSByZWxhdGl2ZSBwb3NpdGlvbmVkCiAgICAgICAgICAgICAgICAgLy8gaW5saW5l
IHNvIHRoYXQgd2UgY2FuIG9idGFpbiB0aGUgdmFsdWUgbGF0ZXIuCi0gICAgICAgICAgICAgICAg
dG9SZW5kZXJJbmxpbmUoYyktPmxheWVyKCktPnNldFN0YXRpY1goc3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCgpLCBmYWxzZSkgOiBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGhlaWdodCgpLCBmYWxzZSkpOworICAgICAgICAgICAg
ICAgIHRvUmVuZGVySW5saW5lKGMpLT5sYXllcigpLT5zZXRTdGF0aWNYKHN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShoZWlnaHQoKSwg
ZmFsc2UpIDogbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShoZWlnaHQoKSwgZmFsc2UpKTsKICAg
ICAgICAgICAgICAgICB0b1JlbmRlcklubGluZShjKS0+bGF5ZXIoKS0+c2V0U3RhdGljWShoZWln
aHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9
IHRvUmVuZGVyQm94KG9iamVjdCk7CiAgICAgICAgICAgICBpZiAoYm94LT5zdHlsZSgpLT5oYXNT
dGF0aWNYKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYm94LT5zdHlsZSgpLT5pc09yaWdpbmFs
RGlzcGxheUlubGluZVR5cGUoKSkKLSAgICAgICAgICAgICAgICAgICAgYm94LT5sYXllcigpLT5z
ZXRTdGF0aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yTGluZShoZWlnaHQoKSwgZmFsc2UpIDogd2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZv
ckxpbmUoaGVpZ2h0KCksIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIGJveC0+bGF5ZXIo
KS0+c2V0U3RhdGljWChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUoaGVpZ2h0KCksIGZhbHNlKSA6IHdpZHRoKCkgLSBsb2dpY2FsUmln
aHRPZmZzZXRGb3JMaW5lKGhlaWdodCgpLCBmYWxzZSkpOwogICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgYm94LT5sYXllcigpLT5zZXRTdGF0aWNYKHN0eWxlKCktPmRp
cmVjdGlvbigpID09IExUUiA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJS
aWdodCgpICsgcGFkZGluZ1JpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBib3gtPmxheWVy
KCktPnNldFN0YXRpY1goc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gYm9yZGVy
TGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSk7
CiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBpZiAoYm94LT5zdHlsZSgpLT5oYXNT
dGF0aWNZKCkpCkBAIC0xMjg4LDE2ICsxMjg4LDE2IEBAIGludCBSZW5kZXJCbG9jazo6c2tpcExl
YWRpbmdXaGl0ZXNwYWNlKEkKICAgICAgICAgICAgICAgICAvLyBBIHJlbGF0aXZlIHBvc2l0aW9u
ZWQgaW5saW5lIGVuY2xvc2VzIHVzLiAgSW4gdGhpcyBjYXNlLCB3ZSBhbHNvIGhhdmUgdG8gZGV0
ZXJtaW5lIG91cgogICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGFzIHRob3VnaCB3ZSB3ZXJl
IGFuIGlubGluZS4gIFNldCB8c3RhdGljWHwgYW5kIHxzdGF0aWNZfCBvbiB0aGUgcmVsYXRpdmUg
cG9zaXRpb25lZAogICAgICAgICAgICAgICAgIC8vIGlubGluZSBzbyB0aGF0IHdlIGNhbiBvYnRh
aW4gdGhlIHZhbHVlIGxhdGVyLgotICAgICAgICAgICAgICAgIHRvUmVuZGVySW5saW5lKGMpLT5s
YXllcigpLT5zZXRTdGF0aWNYKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZShoZWlnaHQoKSwgZmlyc3RMaW5lKSA6IGxvZ2ljYWxSaWdodE9mZnNl
dEZvckxpbmUoaGVpZ2h0KCksIGZpcnN0TGluZSkpOworICAgICAgICAgICAgICAgIHRvUmVuZGVy
SW5saW5lKGMpLT5sYXllcigpLT5zZXRTdGF0aWNYKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShoZWlnaHQoKSwgZmlyc3RMaW5lKSA6
IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaGVpZ2h0KCksIGZpcnN0TGluZSkpOwogICAgICAg
ICAgICAgICAgIHRvUmVuZGVySW5saW5lKGMpLT5sYXllcigpLT5zZXRTdGF0aWNZKGhlaWdodCgp
KTsKICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gdG9S
ZW5kZXJCb3gob2JqZWN0KTsKICAgICAgICAgICAgIGlmIChib3gtPnN0eWxlKCktPmhhc1N0YXRp
Y1goKSkgewogICAgICAgICAgICAgICAgIGlmIChib3gtPnN0eWxlKCktPmlzT3JpZ2luYWxEaXNw
bGF5SW5saW5lVHlwZSgpKQotICAgICAgICAgICAgICAgICAgICBib3gtPmxheWVyKCktPnNldFN0
YXRpY1goc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbG9naWNhbExlZnRPZmZzZXRGb3JM
aW5lKGhlaWdodCgpLCBmaXJzdExpbmUpIDogd2lkdGgoKSAtIGxvZ2ljYWxSaWdodE9mZnNldEZv
ckxpbmUoaGVpZ2h0KCksIGZpcnN0TGluZSkpOworICAgICAgICAgICAgICAgICAgICBib3gtPmxh
eWVyKCktPnNldFN0YXRpY1goc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKGhlaWdodCgpLCBmaXJzdExpbmUpIDogd2lkdGgoKSAtIGxv
Z2ljYWxSaWdodE9mZnNldEZvckxpbmUoaGVpZ2h0KCksIGZpcnN0TGluZSkpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYm94LT5sYXllcigpLT5zZXRTdGF0aWNY
KHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0
KCkgOiBib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkpOworICAgICAgICAgICAgICAgICAg
ICBib3gtPmxheWVyKCktPnNldFN0YXRpY1goc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlclJpZ2h0KCkgKyBwYWRk
aW5nUmlnaHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBpZiAoYm94LT5z
dHlsZSgpLT5oYXNTdGF0aWNZKCkpCkBAIC0xNDk4LDcgKzE0OTgsNyBAQCBJbmxpbmVJdGVyYXRv
ciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgYm9vbCBpc0lubGlu
ZVR5cGUgPSBib3gtPnN0eWxlKCktPmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpOwogICAg
ICAgICAgICAgICAgIGJvb2wgbmVlZFRvU2V0U3RhdGljWCA9IGJveC0+c3R5bGUoKS0+aGFzU3Rh
dGljWCgpOwogICAgICAgICAgICAgICAgIGlmIChib3gtPnN0eWxlKCktPmhhc1N0YXRpY1goKSAm
JiAhaXNJbmxpbmVUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJveC0+bGF5ZXIoKS0+c2V0
U3RhdGljWChvLT5wYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8KKyAgICAg
ICAgICAgICAgICAgICAgYm94LT5sYXllcigpLT5zZXRTdGF0aWNYKG8tPnBhcmVudCgpLT5zdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIG5lZWRUb1NldFN0YXRpY1ggPSBmYWxzZTsKQEAgLTIwMzUsNyArMjAz
NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNoZWNrTGluZXNGb3JUZXh0T3ZlcmYKICAgICAvLyBp
ZiB0aGUgcmlnaHQgZWRnZSBvZiBhIGxpbmUgYm94IGV4Y2VlZHMgdGhhdC4gIEZvciBSVEwsIHdl
IHVzZSB0aGUgbGVmdCBlZGdlIG9mIHRoZSBwYWRkaW5nIGJveCBhbmQKICAgICAvLyBjaGVjayB0
aGUgbGVmdCBlZGdlIG9mIHRoZSBsaW5lIGJveCB0byBzZWUgaWYgaXQgaXMgbGVzcwogICAgIC8v
IEluY2x1ZGUgdGhlIHNjcm9sbGJhciBmb3Igb3ZlcmZsb3cgYmxvY2tzLCB3aGljaCBtZWFucyB3
ZSB3YW50IHRvIHVzZSAiY29udGVudFdpZHRoKCkiCi0gICAgYm9vbCBsdHIgPSBzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFI7CisgICAgYm9vbCBsdHIgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCk7CiAgICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94
KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgIGludCBibG9j
a1JpZ2h0RWRnZSA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoY3Vyci0+eSgpLCBjdXJyID09
IGZpcnN0Um9vdEJveCgpKTsKICAgICAgICAgaW50IGJsb2NrTGVmdEVkZ2UgPSBsb2dpY2FsTGVm
dE9mZnNldEZvckxpbmUoY3Vyci0+eSgpLCBjdXJyID09IGZpcnN0Um9vdEJveCgpKTsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNjg2ODcpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMjYgKzExOCwyNiBAQCBp
bnQgUmVuZGVyQm94OjptYXJnaW5BZnRlcigpIGNvbnN0CiBpbnQgUmVuZGVyQm94OjptYXJnaW5T
dGFydCgpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPmlzVmVydGljYWxCbG9ja0Zsb3coKSkK
LSAgICAgICAgcmV0dXJuIHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IG1fbWFyZ2luTGVm
dCA6IG1fbWFyZ2luUmlnaHQ7Ci0gICAgcmV0dXJuIHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UiA/IG1fbWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b207CisgICAgICAgIHJldHVybiBzdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX21hcmdpbkxlZnQgOiBtX21hcmdpblJpZ2h0
OworICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX21hcmdp
blRvcCA6IG1fbWFyZ2luQm90dG9tOwogfQogCiBpbnQgUmVuZGVyQm94OjptYXJnaW5FbmQoKSBj
b25zdAogewogICAgIGlmIChzdHlsZSgpLT5pc1ZlcnRpY2FsQmxvY2tGbG93KCkpCi0gICAgICAg
IHJldHVybiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBtX21hcmdpblJpZ2h0IDogbV9t
YXJnaW5MZWZ0OwotICAgIHJldHVybiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBtX21h
cmdpbkJvdHRvbSA6IG1fbWFyZ2luVG9wOworICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gbV9tYXJnaW5SaWdodCA6IG1fbWFyZ2luTGVmdDsKKyAgICBy
ZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9tYXJnaW5Cb3R0b20g
OiBtX21hcmdpblRvcDsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldE1hcmdpblN0YXJ0KGludCBt
YXJnaW4pCiB7CiAgICAgaWYgKHN0eWxlKCktPmlzVmVydGljYWxCbG9ja0Zsb3coKSkgewotICAg
ICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICBpZiAoc3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0g
bWFyZ2luOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2lu
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIp
CisgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAg
ICAgICBtX21hcmdpblRvcCA9IG1hcmdpbjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9t
YXJnaW5Cb3R0b20gPSBtYXJnaW47CkBAIC0xNDcsMTIgKzE0NywxMiBAQCB2b2lkIFJlbmRlckJv
eDo6c2V0TWFyZ2luU3RhcnQoaW50IG1hcmdpCiB2b2lkIFJlbmRlckJveDo6c2V0TWFyZ2luRW5k
KGludCBtYXJnaW4pCiB7CiAgICAgaWYgKHN0eWxlKCktPmlzVmVydGljYWxCbG9ja0Zsb3coKSkg
ewotICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICBpZiAo
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgbV9tYXJnaW5S
aWdodCA9IG1hcmdpbjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0g
bWFyZ2luOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIpCisgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAg
ICAgICAgICAgICBtX21hcmdpbkJvdHRvbSA9IG1hcmdpbjsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9tYXJnaW5Ub3AgPSBtYXJnaW47CkBAIC0zODcsNyArMzg3LDcgQEAgaW50IFJlbmRl
ckJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKICAg
ICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbFdpZHRoKCk7CiAgICAgLy8gRm9yIG9iamVjdHMg
d2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNoZXMgSUUuCi0gICAgaWYgKHN0eWxlKCkt
PmRpcmVjdGlvbigpID09IExUUikKKyAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKQogICAgICAgICByZXR1cm4gbWF4KGNsaWVudFdpZHRoKCksIHJpZ2h0bW9zdFBvc2l0
aW9uKHRydWUsIGZhbHNlKSAtIGJvcmRlckxlZnQoKSk7CiAgICAgcmV0dXJuIGNsaWVudFdpZHRo
KCkgLSBtaW4oMCwgbGVmdG1vc3RQb3NpdGlvbih0cnVlLCBmYWxzZSkgLSBib3JkZXJMZWZ0KCkp
OwogfQpAQCAtMTU4Niw4ICsxNTg2LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVJbmxpbmVE
aXJlY3Rpb25NYQogICAgIH0gCiAgICAgCiAgICAgLy8gQ2FzZSBUaHJlZTogVGhlIG9iamVjdCBp
cyBiZWluZyBwdXNoZWQgdG8gdGhlIGVuZCBvZiB0aGUgY29udGFpbmluZyBibG9jaydzIGF2YWls
YWJsZSBsb2dpY2FsIHdpZHRoLgotICAgIGJvb2wgcHVzaFRvRW5kRnJvbVRleHRBbGlnbiA9ICFt
YXJnaW5FbmRMZW5ndGguaXNBdXRvKCkgJiYgKChjb250YWluaW5nQmxvY2tTdHlsZS0+ZGlyZWN0
aW9uKCkgPT0gUlRMICYmIGNvbnRhaW5pbmdCbG9ja1N0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJL
SVRfTEVGVCkKLSAgICAgICAgfHwgKGNvbnRhaW5pbmdCbG9ja1N0eWxlLT5kaXJlY3Rpb24oKSA9
PSBMVFIgJiYgY29udGFpbmluZ0Jsb2NrU3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9SSUdI
VCkpOworICAgIGJvb2wgcHVzaFRvRW5kRnJvbVRleHRBbGlnbiA9ICFtYXJnaW5FbmRMZW5ndGgu
aXNBdXRvKCkgJiYgKCghY29udGFpbmluZ0Jsb2NrU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSAmJiBjb250YWluaW5nQmxvY2tTdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lUX0xFRlQp
CisgICAgICAgIHx8IChjb250YWluaW5nQmxvY2tTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpICYmIGNvbnRhaW5pbmdCbG9ja1N0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQp
KTsKICAgICBpZiAoKG1hcmdpblN0YXJ0TGVuZ3RoLmlzQXV0bygpICYmIGNoaWxkV2lkdGggPCBj
b250YWluZXJXaWR0aCkgfHwgcHVzaFRvRW5kRnJvbVRleHRBbGlnbikgewogICAgICAgICBjb250
YWluaW5nQmxvY2stPnNldE1hcmdpbkVuZEZvckNoaWxkKHRoaXMsIG1hcmdpbkVuZExlbmd0aC5j
YWxjVmFsdWUoY29udGFpbmVyV2lkdGgpKTsKICAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5zZXRN
YXJnaW5TdGFydEZvckNoaWxkKHRoaXMsIGNvbnRhaW5lcldpZHRoIC0gY2hpbGRXaWR0aCAtIGNv
bnRhaW5pbmdCbG9jay0+bWFyZ2luRW5kRm9yQ2hpbGQodGhpcykpOwpAQCAtMTk1OCw3ICsxOTU4
LDcgQEAgaW50IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrV2lkdGhGb3JQbwogCiAgICAgaW50
IGZyb21MZWZ0OwogICAgIGludCBmcm9tUmlnaHQ7Ci0gICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CisgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgIGZyb21MZWZ0ID0g
Zmlyc3QtPmxvZ2ljYWxMZWZ0KCkgKyBmaXJzdC0+Ym9yZGVyTG9naWNhbExlZnQoKTsKICAgICAg
ICAgZnJvbVJpZ2h0ID0gbGFzdC0+bG9naWNhbExlZnQoKSArIGxhc3QtPmxvZ2ljYWxXaWR0aCgp
IC0gbGFzdC0+Ym9yZGVyTG9naWNhbFJpZ2h0KCk7CiAgICAgfSBlbHNlIHsKQEAgLTIzMDAsNyAr
MjMwMCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWwKICAgICAv
LyBwb3NpdGlvbmVkLCBpbmxpbmUgYmVjYXVzZSByaWdodCBub3csIGl0IGlzIHVzaW5nIHRoZSB4
UG9zCiAgICAgLy8gb2YgdGhlIGZpcnN0IGxpbmUgYm94IHdoZW4gcmVhbGx5IGl0IHNob3VsZCB1
c2UgdGhlIGxhc3QgbGluZSBib3guICBXaGVuCiAgICAgLy8gdGhpcyBpcyBmaXhlZCBlbHNld2hl
cmUsIHRoaXMgYmxvY2sgc2hvdWxkIGJlIHJlbW92ZWQuCi0gICAgaWYgKGNvbnRhaW5lckJsb2Nr
LT5pc1JlbmRlcklubGluZSgpICYmIGNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBSVEwpIHsKKyAgICBpZiAoY29udGFpbmVyQmxvY2stPmlzUmVuZGVySW5saW5lKCkgJiYg
IWNvbnRhaW5lckJsb2NrLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAg
ICAgICAgY29uc3QgUmVuZGVySW5saW5lKiBmbG93ID0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVy
QmxvY2spOwogICAgICAgICBJbmxpbmVGbG93Qm94KiBmaXJzdExpbmUgPSBmbG93LT5maXJzdExp
bmVCb3goKTsKICAgICAgICAgSW5saW5lRmxvd0JveCogbGFzdExpbmUgPSBmbG93LT5sYXN0TGlu
ZUJveCgpOwpAQCAtMjcwNiw3ICsyNzA2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbAogICAgIC8vIHBvc2l0aW9uZWQsIGlubGluZSBjb250YWluaW5nIGJsb2Nr
IGJlY2F1c2UgcmlnaHQgbm93LCBpdCBpcyB1c2luZyB0aGUgeFBvcwogICAgIC8vIG9mIHRoZSBm
aXJzdCBsaW5lIGJveCB3aGVuIHJlYWxseSBpdCBzaG91bGQgdXNlIHRoZSBsYXN0IGxpbmUgYm94
LiAgV2hlbgogICAgIC8vIHRoaXMgaXMgZml4ZWQgZWxzZXdoZXJlLCB0aGlzIGJsb2NrIHNob3Vs
ZCBiZSByZW1vdmVkLgotICAgIGlmIChjb250YWluZXJCbG9jay0+aXNSZW5kZXJJbmxpbmUoKSAm
JiBjb250YWluZXJCbG9jay0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKSB7CisgICAgaWYg
KGNvbnRhaW5lckJsb2NrLT5pc1JlbmRlcklubGluZSgpICYmICFjb250YWluZXJCbG9jay0+c3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlcklu
bGluZSogZmxvdyA9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lckJsb2NrKTsKICAgICAgICAgSW5s
aW5lRmxvd0JveCogZmlyc3RMaW5lID0gZmxvdy0+Zmlyc3RMaW5lQm94KCk7CiAgICAgICAgIElu
bGluZUZsb3dCb3gqIGxhc3RMaW5lID0gZmxvdy0+bGFzdExpbmVCb3goKTsKQEAgLTI4NjAsOSAr
Mjg2MCw5IEBAIEludFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmUKIAogICAg
IC8vIEZJWE1FOiBXaGF0IGFib3V0IGJvcmRlciBhbmQgcGFkZGluZz8KICAgICBJbnRSZWN0IHJl
Y3QoeCgpLCB5KCksIGNhcmV0V2lkdGgsIGhlaWdodCgpKTsKLSAgICBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiA9IGJveCA/IGJveC0+ZGlyZWN0aW9uKCkgOiBzdHlsZSgpLT5kaXJlY3Rpb24oKTsK
KyAgICBib29sIGx0ciA9IGJveCA/IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIDogc3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogCi0gICAgaWYgKCghY2FyZXRPZmZzZXQp
IF4gKGRpcmVjdGlvbiA9PSBMVFIpKQorICAgIGlmICgoIWNhcmV0T2Zmc2V0KSBeIGx0cikKICAg
ICAgICAgcmVjdC5tb3ZlKEludFNpemUod2lkdGgoKSAtIGNhcmV0V2lkdGgsIDApKTsKIAogICAg
IGlmIChib3gpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAJKHJldmlzaW9uIDY4NjgxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNyArMzI0LDcgQEAgaW50IFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpyZWxhdGl2ZVBvc2l0aQogICAgIC8vIGNhbGwgYXZhaWxhYmxlV2lk
dGggb24gb3VyIGNvbnRhaW5pbmcgYmxvY2suCiAgICAgaWYgKCFzdHlsZSgpLT5sZWZ0KCkuaXNB
dXRvKCkpIHsKICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgICAgIGlmICghc3R5bGUoKS0+cmlnaHQoKS5pc0F1dG8oKSAmJiBjb250YWluaW5nQmxvY2so
KS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICBpZiAoIXN0eWxlKCktPnJp
Z2h0KCkuaXNBdXRvKCkgJiYgIWNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gLXN0eWxlKCktPnJpZ2h0KCkuY2Fs
Y1ZhbHVlKGNiLT5hdmFpbGFibGVXaWR0aCgpKTsKICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmxl
ZnQoKS5jYWxjVmFsdWUoY2ItPmF2YWlsYWJsZVdpZHRoKCkpOwogICAgIH0KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHJldmlzaW9uIDY4NTYxKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmxheW91dExlZ2UKICAgICAgICAgbGVn
ZW5kLT5sYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgICAgIGludCB4UG9zOwotICAgICAgICBpZiAo
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKSB7CisgICAgICAgIGlmICghc3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxlZ2VuZC0+c3R5
bGUoKS0+dGV4dEFsaWduKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIExFRlQ6CiAgICAgICAg
ICAgICAgICAgICAgIHhQb3MgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNp
b24gNjg1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMywxNCArMjEzLDE0IEBAIHZvaWQgUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5ZWRG
aWxlbmFtZSA9IGZpbGVUZXh0VmFsdWUoKTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZGlz
cGxheWVkRmlsZW5hbWUubGVuZ3RoKCk7CiAgICAgICAgIGNvbnN0IFVDaGFyKiBzdHJpbmcgPSBk
aXNwbGF5ZWRGaWxlbmFtZS5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIFRleHRSdW4gdGV4dFJ1bihz
dHJpbmcsIGxlbmd0aCwgZmFsc2UsIDAsIDAsIHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCwg
c3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSk7CisgICAgICAgIFRleHRSdW4gdGV4
dFJ1bihzdHJpbmcsIGxlbmd0aCwgZmFsc2UsIDAsIDAsICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCksIHN0eWxlKCktPnVuaWNvZGVCaWRpKCkgPT0gT3ZlcnJpZGUpOwogICAgICAg
ICAKICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXJlIHRoZSBmaWxlbmFtZSBzaG91bGQgYmUgcGxh
Y2VkCiAgICAgICAgIGludCBjb250ZW50TGVmdCA9IHR4ICsgYm9yZGVyTGVmdCgpICsgcGFkZGlu
Z0xlZnQoKTsKICAgICAgICAgaW50IGJ1dHRvbkFuZEljb25XaWR0aCA9IG1fYnV0dG9uLT5yZW5k
ZXJCb3goKS0+d2lkdGgoKSArIGFmdGVyQnV0dG9uU3BhY2luZwogICAgICAgICAgICAgKyAobV9m
aWxlQ2hvb3Nlci0+aWNvbigpID8gaWNvbldpZHRoICsgaWNvbkZpbGVuYW1lU3BhY2luZyA6IDAp
OwogICAgICAgICBpbnQgdGV4dFg7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIpCisgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAg
ICAgICAgICAgICB0ZXh0WCA9IGNvbnRlbnRMZWZ0ICsgYnV0dG9uQW5kSWNvbldpZHRoOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB0ZXh0WCA9IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRo
KCkgLSBidXR0b25BbmRJY29uV2lkdGggLSBzdHlsZSgpLT5mb250KCkud2lkdGgodGV4dFJ1bik7
CkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRP
YmplYwogICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXJlIHRoZSBpY29uIHNob3VsZCBiZSBw
bGFjZWQKICAgICAgICAgICAgIGludCBpY29uWSA9IHR5ICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCkgKyAoY29udGVudEhlaWdodCgpIC0gaWNvbkhlaWdodCkgLyAyOwogICAgICAgICAgICAg
aW50IGljb25YOwotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikK
KyAgICAgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAg
ICAgICAgICAgICAgaWNvblggPSBjb250ZW50TGVmdCArIG1fYnV0dG9uLT5yZW5kZXJCb3goKS0+
d2lkdGgoKSArIGFmdGVyQnV0dG9uU3BhY2luZzsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBtX2J1dHRvbi0+
cmVuZGVyQm94KCktPndpZHRoKCkgLSBhZnRlckJ1dHRvblNwYWNpbmcgLSBpY29uV2lkdGg7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA2ODYy
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgRmxleEJveEl0ZXJhdG9yKFJlbmRl
ckZsZXhpYmxlQm94KiBwYXJlbnQpCiAgICAgewogICAgICAgICBib3ggPSBwYXJlbnQ7Ci0gICAg
ICAgIGlmIChib3gtPnN0eWxlKCktPmJveE9yaWVudCgpID09IEhPUklaT05UQUwgJiYgYm94LT5z
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGlmIChib3gtPnN0eWxlKCktPmJv
eE9yaWVudCgpID09IEhPUklaT05UQUwgJiYgIWJveC0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQogICAgICAgICAgICAgZm9yd2FyZCA9IGJveC0+c3R5bGUoKS0+Ym94RGlyZWN0
aW9uKCkgIT0gQk5PUk1BTDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZm9yd2FyZCA9IGJv
eC0+c3R5bGUoKS0+Ym94RGlyZWN0aW9uKCkgPT0gQk5PUk1BTDsKQEAgLTQxNyw3ICs0MTcsNyBA
QCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgICAgICAgICBp
ZiAoY2hpbGQtPmlzUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAgICAgY2hpbGQtPmNvbnRh
aW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKICAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQtPnN0eWxlKCktPmhhc1N0YXRpY1goKSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY2hpbGQtPmxheWVyKCktPnNldFN0YXRpY1goeFBvcyk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgY2hpbGQtPmxheWVyKCktPnNldFN0YXRpY1god2lkdGgoKSAtIHhQb3MpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTU3NSw4ICs1NzUsOCBAQCB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpsYXlvdXRIb3Jpem9udGFsCiAKICAgICBSZW5kZXJCbG9jazo6ZmluaXNoRGVsYXlVcGRh
dGVTY3JvbGxJbmZvKCk7CiAKLSAgICBpZiAocmVtYWluaW5nU3BhY2UgPiAwICYmICgoc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSICYmIHN0eWxlKCktPmJveFBhY2soKSAhPSBCU1RBUlQpIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlKCktPmRpcmVjdGlvbigpID09
IFJUTCAmJiBzdHlsZSgpLT5ib3hQYWNrKCkgIT0gQkVORCkpKSB7CisgICAgaWYgKHJlbWFpbmlu
Z1NwYWNlID4gMCAmJiAoKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBzdHls
ZSgpLT5ib3hQYWNrKCkgIT0gQlNUQVJUKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICghc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIHN0eWxlKCktPmJveFBh
Y2soKSAhPSBCRU5EKSkpIHsKICAgICAgICAgLy8gQ2hpbGRyZW4gbXVzdCBiZSByZXBvc2l0aW9u
ZWQuCiAgICAgICAgIGludCBvZmZzZXQgPSAwOwogICAgICAgICBpZiAoc3R5bGUoKS0+Ym94UGFj
aygpID09IEJKVVNUSUZZKSB7CkBAIC02NDUsNyArNjQ1LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJs
ZUJveDo6bGF5b3V0VmVydGljYWxCbwogewogICAgIGludCB4UG9zID0gYm9yZGVyTGVmdCgpICsg
cGFkZGluZ0xlZnQoKTsKICAgICBpbnQgeVBvcyA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgp
OwotICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgaWYgKCFzdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIHhQb3MgPSB3aWR0aCgpIC0gcGFk
ZGluZ1JpZ2h0KCkgLSBib3JkZXJSaWdodCgpOwogICAgIGludCB0b0FkZCA9IGJvcmRlckJvdHRv
bSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwogICAg
IGJvb2wgaGVpZ2h0U3BlY2lmaWVkID0gZmFsc2U7CkBAIC02ODgsNyArNjg4LDcgQEAgdm9pZCBS
ZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwogICAgICAgICAgICAgaWYgKGNoaWxk
LT5pc1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgICAgIGNoaWxkLT5jb250YWluaW5nQmxv
Y2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChjaGlsZCk7CiAgICAgICAgICAgICAgICAgaWYg
KGNoaWxkLT5zdHlsZSgpLT5oYXNTdGF0aWNYKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkLT5sYXllcigpLT5zZXRTdGF0aWNYKGJvcmRlckxlZnQoKStwYWRkaW5nTGVmdCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQt
PmxheWVyKCktPnNldFN0YXRpY1goYm9yZGVyUmlnaHQoKStwYWRkaW5nUmlnaHQoKSk7CkBAIC03
MjcsMTMgKzcyNywxMyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJv
CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkWCArPSBjaGlsZC0+bWFyZ2luTGVmdCgpICsgbWF4
KDAsIChjb250ZW50V2lkdGgoKSAtIChjaGlsZC0+d2lkdGgoKSArIGNoaWxkLT5tYXJnaW5MZWZ0
KCkgKyBjaGlsZC0+bWFyZ2luUmlnaHQoKSkpLzIpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBjYXNlIEJFTkQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgICAgICAgICAgICAgIGlmICghc3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGRYICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkWCArPSBjb250ZW50V2lkdGgoKSAtIGNoaWxk
LT5tYXJnaW5SaWdodCgpIC0gY2hpbGQtPndpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIEJTVEFSVC9CU1RSRVRDSAotICAgICAg
ICAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGRYICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkWCArPSBjb250
ZW50V2lkdGgoKSAtIGNoaWxkLT5tYXJnaW5SaWdodCgpIC0gY2hpbGQtPndpZHRoKCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA2ODU2MSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2MCw3ICsxOTYw
LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbgogICAgIAogICAg
IG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7CiAgICAgCi0gICAgYm9vbCBsdHIgPSBy
ZW5kZXJlcigpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFI7CisgICAgYm9vbCBsdHIgPSBy
ZW5kZXJlcigpLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CiAKICAgICBpbnQg
Y2xpZW50V2lkdGggPSBib3gtPmNsaWVudFdpZHRoKCk7CiAgICAgaW50IGNsaWVudEhlaWdodCA9
IGJveC0+Y2xpZW50SGVpZ2h0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAkocmV2aXNpb24gNjg1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzM0LDcgKzMzNCw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6
cGFpbnRJdGVtRm9yZWdyb3VuZCgKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGl0ZW1UZXh0Lmxl
bmd0aCgpOwogICAgIGNvbnN0IFVDaGFyKiBzdHJpbmcgPSBpdGVtVGV4dC5jaGFyYWN0ZXJzKCk7
Ci0gICAgVGV4dFJ1biB0ZXh0UnVuKHN0cmluZywgbGVuZ3RoLCAwLCAwLCAwLCBpdGVtU3R5bGUt
PmRpcmVjdGlvbigpID09IFJUTCwgaXRlbVN0eWxlLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRl
LCBmYWxzZSwgZmFsc2UpOworICAgIFRleHRSdW4gdGV4dFJ1bihzdHJpbmcsIGxlbmd0aCwgMCwg
MCwgMCwgIWl0ZW1TdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpLCBpdGVtU3R5bGUtPnVu
aWNvZGVCaWRpKCkgPT0gT3ZlcnJpZGUsIGZhbHNlLCBmYWxzZSk7CiAKICAgICAvLyBEcmF3IHRo
ZSBpdGVtIHRleHQKICAgICBpZiAoaXRlbVN0eWxlLT52aXNpYmlsaXR5KCkgIT0gSElEREVOKQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gNjg1NjEpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2MSw3ICsyNjEsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIo
CiAgICAgICAgIC8vIEZJWE1FOiBJbmxpbmUgZmxvd3MgaW4gdGhlIGxpbmUgYm94IGhpZXJhcmNo
eSB0aGF0IGhhdmUgc2VsZi1wYWludGluZyBsYXllcnMgc2hvdWxkIGFjdCBhcyBjdXRvZmYgcG9p
bnRzCiAgICAgICAgIC8vIGFuZCByZWFsbHkgc2hvdWxkbid0IGtlZXAgcHJvcGFnYXRpbmcgb3Zl
cmZsb3cgdXAuICBUaGlzIHdvbid0IHJlYWxseSBicmVhayBhbnl0aGluZyBvdGhlciB0aGFuIHJl
cGFpbnRpbmcKICAgICAgICAgLy8gbm90IGJlaW5nIGFzIHRpZ2h0IGFzIGl0IGNvdWxkIGJlIHRo
b3VnaC4KLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgeworICAgICAg
ICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgICAgICBp
bnQgbGVmdExpbmVPZmZzZXQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoeU9mZnNldCwgbG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKHlPZmZzZXQsIGZhbHNlKSwgZmFsc2UpOwogICAgICAgICAg
ICAgbWFya2VyWFBvcyA9IGxlZnRMaW5lT2Zmc2V0IC0geE9mZnNldCAtIHBhZGRpbmdMZWZ0KCkg
LSBib3JkZXJMZWZ0KCkgKyBtX21hcmtlci0+bWFyZ2luTGVmdCgpOwogICAgICAgICAgICAgbV9t
YXJrZXItPmlubGluZUJveFdyYXBwZXIoKS0+YWRqdXN0UG9zaXRpb24obWFya2VyWFBvcyAtIG1h
cmtlck9sZFgsIDApOwpAQCAtMzI2LDEyICszMjYsMTIgQEAgU3RyaW5nIFJlbmRlckxpc3RJdGVt
OjptYXJrZXJUZXh0V2l0aFN1ZgogICAgIGNvbnN0IFN0cmluZyBtYXJrZXJTdWZmaXggPSBtX21h
cmtlci0+c3VmZml4KCk7CiAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHRWZWN0b3I7CiAKLSAgICBp
ZiAobV9tYXJrZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICBpZiAoIW1fbWFy
a2VyLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIHJlc3VsdFZl
Y3Rvci5hcHBlbmQobWFya2VyU3VmZml4LmNoYXJhY3RlcnMoKSwgbWFya2VyU3VmZml4Lmxlbmd0
aCgpKTsKIAogICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQobWFya2VyVGV4dC5jaGFyYWN0ZXJzKCks
IG1hcmtlclRleHQubGVuZ3RoKCkpOwogCi0gICAgaWYgKG1fbWFya2VyLT5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBMVFIpCisgICAgaWYgKG1fbWFya2VyLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCiAgICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQobWFya2VyU3VmZml4LmNo
YXJhY3RlcnMoKSwgbWFya2VyU3VmZml4Lmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KHJlc3VsdFZlY3Rvcik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcAkocmV2aXNpb24gNjg1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgdm9pZCBSZW5k
ZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogCiAgICAgY29uc3QgRm9udCYgZm9udCA9
IHN0eWxlKCktPmZvbnQoKTsKICAgICBjb25zdCBVQ2hhciBzdWZmaXggPSBsaXN0TWFya2VyU3Vm
Zml4KHR5cGUsIG1fbGlzdEl0ZW0tPnZhbHVlKCkpOwotICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIpIHsKKyAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KSB7CiAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7CiAgICAgICAgIGNv
bnRleHQtPmRyYXdUZXh0KHN0eWxlKCktPmZvbnQoKSwgdGV4dFJ1biwgbWFya2VyLmxvY2F0aW9u
KCkpOwogICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9IHsgc3VmZml4LCAnICcgfTsKQEAg
LTE0NDQsNyArMTQ0NCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygp
CiAKICAgICBpZiAoaXNJbnNpZGUoKSkgewogICAgICAgICBpZiAoaXNJbWFnZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICAgICAgaWYg
KHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgICAgICBtYXJn
aW5SaWdodCA9IGNNYXJrZXJQYWRkaW5nOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIG1hcmdpbkxlZnQgPSBjTWFya2VyUGFkZGluZzsKQEAgLTE0NTIsNyArMTQ1Miw3IEBAIHZv
aWQgUmVuZGVyTGlzdE1hcmtlcjo6dXBkYXRlTWFyZ2lucygpCiAgICAgICAgICAgICBjYXNlIERp
c2M6CiAgICAgICAgICAgICBjYXNlIENpcmNsZToKICAgICAgICAgICAgIGNhc2UgU3F1YXJlOgot
ICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAtMTsKICAgICAgICAgICAgICAgICAgICAgbWFy
Z2luUmlnaHQgPSBmb250LmFzY2VudCgpIC0gbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyAx
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDY0LDcgKzE0NjQsNyBAQCB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigp
ID09IExUUikgeworICAgICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KSB7CiAgICAgICAgICAgICBpZiAoaXNJbWFnZSgpKQogICAgICAgICAgICAgICAgIG1hcmdpbkxl
ZnQgPSAtbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBjTWFya2VyUGFkZGluZzsKICAgICAg
ICAgICAgIGVsc2UgewpAQCAtMTUzMiw3ICsxNTMyLDcgQEAgU3RyaW5nIFJlbmRlckxpc3RNYXJr
ZXI6OnN1ZmZpeCgpIGNvbnN0CiAKICAgICAvLyBJZiB0aGUgc3VmZml4IGlzIG5vdCAnICcsIGFu
IGV4dHJhIHNwYWNlIGlzIG5lZWRlZAogICAgIGlmIChzdWZmaXggIT0gJyAnKSB7Ci0gICAgICAg
IGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgIGlmIChzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5k
KCcgJyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdFZlY3Rvci5wcmVwZW5kKCcg
Jyk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gNjg1NjEp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEwLDcgKzExMCw3IEBAIGludCBSZW5kZXJNYXJxdWVlOjpjb21wdXRlUG9zaXRpb24oRU1h
cnEKICAgICBBU1NFUlQoYm94KTsKICAgICBSZW5kZXJTdHlsZSogcyA9IGJveC0+c3R5bGUoKTsK
ICAgICBpZiAoaXNIb3Jpem9udGFsKCkpIHsKLSAgICAgICAgYm9vbCBsdHIgPSBzLT5kaXJlY3Rp
b24oKSA9PSBMVFI7CisgICAgICAgIGJvb2wgbHRyID0gcy0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpOwogICAgICAgICBpbnQgY2xpZW50V2lkdGggPSBib3gtPmNsaWVudFdpZHRoKCk7CiAgICAg
ICAgIGludCBjb250ZW50V2lkdGggPSBsdHIgPyBib3gtPnJpZ2h0bW9zdFBvc2l0aW9uKHRydWUs
IGZhbHNlKSA6IGJveC0+bGVmdG1vc3RQb3NpdGlvbih0cnVlLCBmYWxzZSk7CiAgICAgICAgIGlm
IChsdHIpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCShyZXZpc2lvbiA2ODU2MSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw3IEBAIEludFJlY3QgUmVuZGVyTWV0ZXI6OnZhbHVlUGFydFJlY3QoKSBjb24K
ICAgICAKICAgICBpZiAocmVjdC5oZWlnaHQoKSA8PSByZWN0LndpZHRoKCkpIHsKICAgICAgICAg
aW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihyZWN0LndpZHRoKCkqdmFsdWVSYXRpbygpKTsK
LSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkgeworICAgICAgICBpZiAo
IXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewogICAgICAgICAgICAgcmVjdC5z
ZXRYKHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIHdpZHRoKSk7CiAgICAgICAgICAgICByZWN0
LnNldFdpZHRoKHdpZHRoKTsKICAgICAgICAgfSBlbHNlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJQcm9ncmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUHJvZ3Jlc3MuY3BwCShyZXZpc2lvbiA2ODU2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclByb2dyZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQg
UmVuZGVyUHJvZ3Jlc3M6OnVwZGF0ZUFuaW1hdGlvblN0YXQKIEludFJlY3QgUmVuZGVyUHJvZ3Jl
c3M6OnZhbHVlUGFydFJlY3QoKSBjb25zdAogewogICAgIEludFJlY3QgcmVjdChib3JkZXJMZWZ0
KCkgKyBwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSwgbHJvdW5kKCh3
aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gcGFkZGluZ0xlZnQoKSAtIGJvcmRlclJpZ2h0KCkgLSBw
YWRkaW5nUmlnaHQoKSkgKiBwb3NpdGlvbigpKSwgaGVpZ2h0KCkgIC0gYm9yZGVyVG9wKCkgLSBw
YWRkaW5nVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIHBhZGRpbmdCb3R0b20oKSk7Ci0gICAgaWYg
KHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICBpZiAoIXN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSBib3JkZXJSaWdo
dCgpIC0gcGFkZGluZ1JpZ2h0KCkgLSByZWN0LndpZHRoKCkpOwogICAgIHJldHVybiByZWN0Owog
fQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gNjg1NjEpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMiw3
ICs3MzIsNyBAQCBpbnQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJMZWZ0KCkgY29uc3QKICAgICAg
ICAgaWYgKHRiLnN0eWxlKCkgPiBCSElEREVOKQogICAgICAgICAgICAgYm9yZGVyV2lkdGggPSB0
Yi53aWR0aCgpOwogCi0gICAgICAgIGludCBsZWZ0bW9zdENvbHVtbiA9IHN0eWxlKCktPmRpcmVj
dGlvbigpID09IFJUTCA/IG51bUVmZkNvbHMoKSAtIDEgOiAwOworICAgICAgICBpbnQgbGVmdG1v
c3RDb2x1bW4gPSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbnVtRWZmQ29s
cygpIC0gMSA6IDA7CiAgICAgICAgIFJlbmRlclRhYmxlQ29sKiBjb2xHcm91cCA9IGNvbEVsZW1l
bnQobGVmdG1vc3RDb2x1bW4pOwogICAgICAgICBpZiAoY29sR3JvdXApIHsKICAgICAgICAgICAg
IGNvbnN0IEJvcmRlclZhbHVlJiBnYiA9IHN0eWxlKCktPmJvcmRlckxlZnQoKTsKQEAgLTc5MSw3
ICs3OTEsNyBAQCBpbnQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJSaWdodCgpIGNvbnN0CiAgICAg
ICAgIGlmICh0Yi5zdHlsZSgpID4gQkhJRERFTikKICAgICAgICAgICAgIGJvcmRlcldpZHRoID0g
dGIud2lkdGgoKTsKIAotICAgICAgICBpbnQgcmlnaHRtb3N0Q29sdW1uID0gc3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gUlRMID8gMCA6IG51bUVmZkNvbHMoKSAtIDE7CisgICAgICAgIGludCByaWdo
dG1vc3RDb2x1bW4gPSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMCA6IG51
bUVmZkNvbHMoKSAtIDE7CiAgICAgICAgIFJlbmRlclRhYmxlQ29sKiBjb2xHcm91cCA9IGNvbEVs
ZW1lbnQocmlnaHRtb3N0Q29sdW1uKTsKICAgICAgICAgaWYgKGNvbEdyb3VwKSB7CiAgICAgICAg
ICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgZ2IgPSBzdHlsZSgpLT5ib3JkZXJSaWdodCgpOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA2ODU2MSkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzNyw3ICsyMzcsNyBAQCBJbnRSZWN0IFJlbmRlclRhYmxlQ2VsbDo6Y2xpcHBlZE92ZXJmbG93
CiAgICAgaWYgKCF0YWJsZSgpLT5jb2xsYXBzZUJvcmRlcnMoKSB8fCB0YWJsZSgpLT5uZWVkc1Nl
Y3Rpb25SZWNhbGMoKSkKICAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpjbGlwcGVkT3ZlcmZs
b3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKIAotICAgIGJvb2wgcnRsID0gdGFi
bGUoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMOworICAgIGJvb2wgcnRsID0gIXRhYmxl
KCktPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICBpbnQgb3V0bGluZVNp
emUgPSBzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpOwogICAgIGludCBsZWZ0ID0gbWF4KGJvcmRlckhh
bGZMZWZ0KHRydWUpLCBvdXRsaW5lU2l6ZSk7CiAgICAgaW50IHJpZ2h0ID0gbWF4KGJvcmRlckhh
bGZSaWdodCh0cnVlKSwgb3V0bGluZVNpemUpOwpAQCAtNzE0LDcgKzcxNCw3IEBAIGludCBSZW5k
ZXJUYWJsZUNlbGw6OmJvcmRlckFmdGVyKCkgY29uc3QKIAogaW50IFJlbmRlclRhYmxlQ2VsbDo6
Ym9yZGVySGFsZkxlZnQoYm9vbCBvdXRlcikgY29uc3QKIHsKLSAgICBDb2xsYXBzZWRCb3JkZXJW
YWx1ZSBib3JkZXIgPSBjb2xsYXBzZWRMZWZ0Qm9yZGVyKHRhYmxlKCktPnN0eWxlKCktPmRpcmVj
dGlvbigpID09IFJUTCk7CisgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyID0gY29sbGFw
c2VkTGVmdEJvcmRlcighdGFibGUoKS0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KTsKICAgICBpZiAoYm9yZGVyLmV4aXN0cygpKQogICAgICAgICByZXR1cm4gKGJvcmRlci53aWR0
aCgpICsgKG91dGVyID8gMCA6IDEpKSAvIDI7IC8vIEdpdmUgdGhlIGV4dHJhIHBpeGVsIHRvIHRv
cCBhbmQgbGVmdC4KICAgICByZXR1cm4gMDsKQEAgLTcyMiw3ICs3MjIsNyBAQCBpbnQgUmVuZGVy
VGFibGVDZWxsOjpib3JkZXJIYWxmTGVmdChib29sCiAgICAgCiBpbnQgUmVuZGVyVGFibGVDZWxs
Ojpib3JkZXJIYWxmUmlnaHQoYm9vbCBvdXRlcikgY29uc3QKIHsKLSAgICBDb2xsYXBzZWRCb3Jk
ZXJWYWx1ZSBib3JkZXIgPSBjb2xsYXBzZWRSaWdodEJvcmRlcih0YWJsZSgpLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBSVEwpOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvcmRlciA9IGNv
bGxhcHNlZFJpZ2h0Qm9yZGVyKCF0YWJsZSgpLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpOwogICAgIGlmIChib3JkZXIuZXhpc3RzKCkpCiAgICAgICAgIHJldHVybiAoYm9yZGVy
LndpZHRoKCkgKyAob3V0ZXIgPyAxIDogMCkpIC8gMjsKICAgICByZXR1cm4gMDsKQEAgLTgzNCw3
ICs4MzQsNyBAQCBzdGF0aWMgdm9pZCBhZGRCb3JkZXJTdHlsZShSZW5kZXJUYWJsZUNlCiAKIHZv
aWQgUmVuZGVyVGFibGVDZWxsOjpjb2xsZWN0Qm9yZGVyU3R5bGVzKENvbGxhcHNlZEJvcmRlclN0
eWxlcyYgYm9yZGVyU3R5bGVzKSBjb25zdAogewotICAgIGJvb2wgcnRsID0gdGFibGUoKS0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMOworICAgIGJvb2wgcnRsID0gIXRhYmxlKCktPnN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICBhZGRCb3JkZXJTdHlsZShib3JkZXJT
dHlsZXMsIGNvbGxhcHNlZExlZnRCb3JkZXIocnRsKSk7CiAgICAgYWRkQm9yZGVyU3R5bGUoYm9y
ZGVyU3R5bGVzLCBjb2xsYXBzZWRSaWdodEJvcmRlcihydGwpKTsKICAgICBhZGRCb3JkZXJTdHls
ZShib3JkZXJTdHlsZXMsIGNvbGxhcHNlZFRvcEJvcmRlcigpKTsKQEAgLTg2MSw3ICs4NjEsNyBA
QCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkCiAgICAgaWYgKCF0YWJs
ZSgpLT5jdXJyZW50Qm9yZGVyU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGJv
b2wgcnRsID0gdGFibGUoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMOworICAgIGJvb2wg
cnRsID0gIXRhYmxlKCktPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICBD
b2xsYXBzZWRCb3JkZXJWYWx1ZSBsZWZ0VmFsID0gY29sbGFwc2VkTGVmdEJvcmRlcihydGwpOwog
ICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIHJpZ2h0VmFsID0gY29sbGFwc2VkUmlnaHRCb3JkZXIo
cnRsKTsKICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSB0b3BWYWwgPSBjb2xsYXBzZWRUb3BCb3Jk
ZXIoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2
aXNpb24gNjg1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDUsNyArNjA1LDcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlv
bjo6bGF5b3V0Um93cyhpbnQgdAogICAgICAgICAgICAgCiAgICAgICAgICAgICBJbnRSZWN0IG9s
ZENlbGxSZWN0KGNlbGwtPngoKSwgY2VsbC0+eSgpICwgY2VsbC0+d2lkdGgoKSwgY2VsbC0+aGVp
Z2h0KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gUlRMKQorICAgICAgICAgICAgaWYgKCFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpCiAgICAgICAgICAgICAgICAgY2VsbC0+c2V0TG9jYXRpb24odGFibGUoKS0+Y29sdW1u
UG9zaXRpb25zKClbbkVmZkNvbHNdIC0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbdGFibGUo
KS0+Y29sVG9FZmZDb2woY2VsbC0+Y29sKCkgKyBjZWxsLT5jb2xTcGFuKCkpXSArIGhzcGFjaW5n
LCBtX3Jvd1Bvc1tyaW5keF0pOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNl
bGwtPnNldExvY2F0aW9uKHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpW2NdICsgaHNwYWNpbmcs
IG1fcm93UG9zW3JpbmR4XSk7CkBAIC05MTEsNyArOTExLDcgQEAgaW50IFJlbmRlclRhYmxlU2Vj
dGlvbjo6Y2FsY091dGVyQm9yZGVyUgogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVjYWxj
T3V0ZXJCb3JkZXIoKQogewotICAgIGJvb2wgcnRsID0gdGFibGUoKS0+c3R5bGUoKS0+ZGlyZWN0
aW9uKCkgPT0gUlRMOworICAgIGJvb2wgcnRsID0gIXRhYmxlKCktPnN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKTsKICAgICBtX291dGVyQm9yZGVyVG9wID0gY2FsY091dGVyQm9yZGVy
VG9wKCk7CiAgICAgbV9vdXRlckJvcmRlckJvdHRvbSA9IGNhbGNPdXRlckJvcmRlckJvdHRvbSgp
OwogICAgIG1fb3V0ZXJCb3JkZXJMZWZ0ID0gY2FsY091dGVyQm9yZGVyTGVmdChydGwpOwpAQCAt
MTA0Myw3ICsxMDQzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBh
aQogICAgIHVuc2lnbmVkIHN0YXJ0Y29sID0gMDsKICAgICB1bnNpZ25lZCBlbmRjb2wgPSB0b3Rh
bENvbHM7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBSVEwuCi0gICAgaWYgKCFtX2hhc092ZXJm
bG93aW5nQ2VsbCAmJiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKKyAgICBpZiAoIW1f
aGFzT3ZlcmZsb3dpbmdDZWxsICYmIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkg
ewogICAgICAgICBpbnQgcmVsYXRpdmVYID0geCAtIHR4OwogICAgICAgICBpbnQgbGVmdCA9IHJl
bGF0aXZlWCAtIG9zOwogICAgICAgICBWZWN0b3I8aW50PiYgY29sdW1uUG9zID0gdGFibGUoKS0+
Y29sdW1uUG9zaXRpb25zKCk7CkBAIC0xMjIzLDcgKzEyMjMsNyBAQCBib29sIFJlbmRlclRhYmxl
U2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgICAgIC0tbGVmdHJvdzsKIAogICAgIFZlY3Rv
cjxpbnQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKLSAgICBib29s
IHJ0bCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTDsKKyAgICBib29sIHJ0bCA9ICFzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CiAgICAgaW50IHJlbGF0aXZlWCA9IHhQb3Mg
LSB0eDsKICAgICBpZiAocnRsKQogICAgICAgICByZWxhdGl2ZVggPSBjb2x1bW5Qb3NbY29sdW1u
UG9zLnNpemUoKSAtIDFdIC0gcmVsYXRpdmVYOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHJldmlzaW9uIDY4NTYxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxMSw3ICs1MTEsNyBAQCBJbnRSZWN0IFJlbmRlclRleHQ6Omxv
Y2FsQ2FyZXRSZWN0KElubGluCiAgICAgc3dpdGNoIChjYlN0eWxlLT50ZXh0QWxpZ24oKSkgewog
ICAgIGNhc2UgVEFBVVRPOgogICAgIGNhc2UgSlVTVElGWToKLSAgICAgICAgcmlnaHRBbGlnbmVk
ID0gY2JTdHlsZS0+ZGlyZWN0aW9uKCkgPT0gUlRMOworICAgICAgICByaWdodEFsaWduZWQgPSAh
Y2JTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFJJR0hUOgogICAgIGNhc2UgV0VCS0lUX1JJR0hUOgpAQCAtMTIyNCw3ICsxMjI0LDcgQEAg
dm9pZCBSZW5kZXJUZXh0Ojpwb3NpdGlvbkxpbmVCb3goSW5saW5lQgogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgbV9jb250YWluc1JldmVyc2VkVGV4dCB8PSBzLT5kaXJlY3Rpb24oKSA9
PSBSVEw7CisgICAgbV9jb250YWluc1JldmVyc2VkVGV4dCB8PSAhcy0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpOwogfQogCiB1bnNpZ25lZCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCBsZW4sIGludCB4UG9zLCBib29sIGZpcnN0TGluZSwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJm
bG93KSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA2ODU2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw3
ICszNjgsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Zm9yd2FyCiAgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkgewogICAgICAgICBp
ZiAoaW5uZXJUZXh0UmVuZGVyZXIpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogaW5u
ZXJMYXllciA9IGlubmVyVGV4dFJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAgICAgICAgIGlu
bmVyTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCA/IGlu
bmVyTGF5ZXItPnNjcm9sbFdpZHRoKCkgOiAwLCAwKTsKKyAgICAgICAgICAgICAgICBpbm5lckxh
eWVyLT5zY3JvbGxUb09mZnNldCghc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
aW5uZXJMYXllci0+c2Nyb2xsV2lkdGgoKSA6IDAsIDApOwogICAgICAgICB9CiAKICAgICAgICAg
Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQkocmV2aXNpb24gNjg1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTA1LDcgKzkwNSw3IEBAIE5TTGV2ZWxJbmRp
Y2F0b3JDZWxsKiBSZW5kZXJUaGVtZU1hYzo6bGUKICAgICB9CiAKICAgICBbY2VsbCBzZXRMZXZl
bEluZGljYXRvclN0eWxlOmxldmVsSW5kaWNhdG9yU3R5bGVGb3Ioc3R5bGUtPmFwcGVhcmFuY2Uo
KSldOwotICAgIFtjZWxsIHNldEJhc2VXcml0aW5nRGlyZWN0aW9uOnN0eWxlLT5kaXJlY3Rpb24o
KSA9PSBMVFIgPyBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IE5TV3JpdGluZ0RpcmVj
dGlvblJpZ2h0VG9MZWZ0XTsKKyAgICBbY2VsbCBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjpzdHls
ZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmln
aHQgOiBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdF07CiAgICAgW2NlbGwgc2V0TWluVmFs
dWU6ZWxlbWVudC0+bWluKCldOwogICAgIFtjZWxsIHNldE1heFZhbHVlOmVsZW1lbnQtPm1heCgp
XTsKICAgICBSZXRhaW5QdHI8TlNOdW1iZXI+IHZhbHVlT2JqZWN0ID0gW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6dmFsdWVdOwpAQCAtOTU5LDcgKzk1OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50UHJvZ3Jlc3NCYXIoUmUKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CiAKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkg
eworICAgIGlmICghcmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkgewogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKDIgKiByZWN0Lngo
KSArIHJlY3Qud2lkdGgoKSwgMCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoLTEsIDEpKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcAkocmV2aXNpb24gNjg1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQwLDggKzQ0MCw4IEBAIHN0YXRpYyB2
b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3RyZWFtJiB0cywKICAgICBpZiAoby5jb250YWluaW5nQmxv
Y2soKS0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgeSAtPSB0b1JlbmRlclRhYmxlQ2VsbChvLmNv
bnRhaW5pbmdCbG9jaygpKS0+aW50cmluc2ljUGFkZGluZ0JlZm9yZSgpOwogICAgIHRzIDw8ICJ0
ZXh0IHJ1biBhdCAoIiA8PCBydW4ubV94IDw8ICIsIiA8PCB5IDw8ICIpIHdpZHRoICIgPDwgcnVu
Lm1fbG9naWNhbFdpZHRoOwotICAgIGlmIChydW4uZGlyZWN0aW9uKCkgPT0gUlRMIHx8IHJ1bi5t
X2Rpck92ZXJyaWRlKSB7Ci0gICAgICAgIHRzIDw8IChydW4uZGlyZWN0aW9uKCkgPT0gUlRMID8g
IiBSVEwiIDogIiBMVFIiKTsKKyAgICBpZiAoIXJ1bi5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
fHwgcnVuLm1fZGlyT3ZlcnJpZGUpIHsKKyAgICAgICAgdHMgPDwgKCFydW4uaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gIiBSVEwiIDogIiBMVFIiKTsKICAgICAgICAgaWYgKHJ1bi5tX2Rpck92
ZXJyaWRlKQogICAgICAgICAgICAgdHMgPDwgIiBvdmVycmlkZSI7CiAgICAgfQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDY4NTYxKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDcgKzY3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjptZWFzdXJlQ2hhcmFjdGVyKAogewog
ICAgIEFTU0VSVChzdHlsZSk7CiAKLSAgICBpbnQgb2Zmc2V0ID0gZGlyZWN0aW9uKCkgPT0gUlRM
ID8gZW5kKCkgLSBwb3NpdGlvbiA6IHN0YXJ0KCkgKyBwb3NpdGlvbjsKKyAgICBpbnQgb2Zmc2V0
ID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGVuZCgpIC0gcG9zaXRpb24gOiBzdGFydCgp
ICsgcG9zaXRpb247CiAgICAgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGUgPSBsZW4oKSAtIHBvc2l0
aW9uIC0gMTsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHRSZW5kZXJlcigpLT5j
aGFyYWN0ZXJzKCk7CiAKQEAgLTY0Nyw3ICs2NDcsNiBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6
OmJ1aWxkTGF5b3V0SW5mb3JtCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7
CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0UmVuZGVyZXItPmNoYXJhY3RlcnMo
KTsKIAotICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbigpOwogICAg
IHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBzdGFydCgpOwogICAgIHVuc2lnbmVkIGVuZFBvc2l0
aW9uID0gZW5kKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuKCk7CkBAIC03MTcsMTAgKzcx
NiwxMCBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OmJ1aWxkTGF5b3V0SW5mb3JtCiAgICAgICAg
IC8vIFRha2UgbGV0dGVyICYgd29yZCBzcGFjaW5nIGFuZCBrZXJuaW5nIGludG8gYWNjb3VudAog
ICAgICAgICBmbG9hdCBzcGFjaW5nID0gZm9udC5sZXR0ZXJTcGFjaW5nKCkgKyBjYWxjdWxhdGVD
U1NLZXJuaW5nKGxlbmd0aENvbnRleHQsIHN0eWxlKTsKIAotICAgICAgICBjb25zdCBVQ2hhciog
Y3VycmVudENoYXJhY3RlciA9IGNoYXJhY3RlcnMgKyAodGV4dERpcmVjdGlvbiA9PSBSVEwgPyBl
bmRQb3NpdGlvbiAtIGkgOiBzdGFydFBvc2l0aW9uICsgaSk7CisgICAgICAgIGNvbnN0IFVDaGFy
KiBjdXJyZW50Q2hhcmFjdGVyID0gY2hhcmFjdGVycyArICghaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gZW5kUG9zaXRpb24gLSBpIDogc3RhcnRQb3NpdGlvbiArIGkpOwogICAgICAgICBjb25z
dCBVQ2hhciogbGFzdENoYXJhY3RlciA9IDA7CiAKLSAgICAgICAgaWYgKHRleHREaXJlY3Rpb24g
PT0gUlRMKSB7CisgICAgICAgIGlmICghaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAg
ICAgICAgICBpZiAoaSA8IGVuZFBvc2l0aW9uKQogICAgICAgICAgICAgICAgIGxhc3RDaGFyYWN0
ZXIgPSBjaGFyYWN0ZXJzICsgZW5kUG9zaXRpb24gLSBpICsgIDE7CiAgICAgICAgIH0gZWxzZSB7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNp
b24gNjg1NjEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDg0LDggKzQ4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0
ZVNWR0lubGluZVRleHRCb3gKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB0cyA8
PCAiIHdpZHRoICIgPDwgY3VtbXVsYXRlZFdpZHRoT2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShy
YW5nZSk7CiAKLSAgICAgICAgICAgIGlmICh0ZXh0Qm94LT5kaXJlY3Rpb24oKSA9PSBSVEwgfHwg
dGV4dEJveC0+bV9kaXJPdmVycmlkZSkgewotICAgICAgICAgICAgICAgIHRzIDw8ICh0ZXh0Qm94
LT5kaXJlY3Rpb24oKSA9PSBSVEwgPyAiIFJUTCIgOiAiIExUUiIpOworICAgICAgICAgICAgaWYg
KCF0ZXh0Qm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgfHwgdGV4dEJveC0+bV9kaXJPdmVy
cmlkZSkgeworICAgICAgICAgICAgICAgIHRzIDw8ICghdGV4dEJveC0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gIiBSVEwiIDogIiBMVFIiKTsKIAogICAgICAgICAgICAgICAgIGlmICh0ZXh0
Qm94LT5tX2Rpck92ZXJyaWRlKQogICAgICAgICAgICAgICAgICAgICB0cyA8PCAiIG92ZXJyaWRl
IjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3Bw
CShyZXZpc2lvbiA2ODU2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNyArMzAwLDcgQEAgVGV4dFJ1biBzdmdU
ZXh0UnVuRm9ySW5saW5lVGV4dEJveChjb25zdAogICAgICAgICAgICAgICAgICwgZmFsc2UgLyog
YWxsb3dUYWJzICovCiAgICAgICAgICAgICAgICAgLCAwIC8qIHhQb3MsIG9ubHkgcmVsZXZhbnQg
d2l0aCBhbGxvd1RhYnM9dHJ1ZSAqLwogICAgICAgICAgICAgICAgICwgMCAvKiBwYWRkaW5nLCBv
bmx5IHJlbGV2YW50IGZvciBqdXN0aWZpZWQgdGV4dCwgbm90IHJlbGV2YW50IGZvciBTVkcgKi8K
LSAgICAgICAgICAgICAgICAsIHRleHRCb3gtPmRpcmVjdGlvbigpID09IFJUTAorICAgICAgICAg
ICAgICAgICwgIXRleHRCb3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKQogICAgICAgICAgICAg
ICAgICwgdGV4dEJveC0+bV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkg
LyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gNjg1NjEp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNDEsMTUgKzExNDEsMTUgQEAgdW5zaWduZWQgc2hvcnQgUmVuZGVyU3R5bGU6OmJv
cmRlckFmdGVyVwogdW5zaWduZWQgc2hvcnQgUmVuZGVyU3R5bGU6OmJvcmRlclN0YXJ0V2lkdGgo
KSBjb25zdAogewogICAgIGlmIChpc1ZlcnRpY2FsQmxvY2tGbG93KCkpCi0gICAgICAgIHJldHVy
biBkaXJlY3Rpb24oKSA9PSBMVFIgPyBib3JkZXJMZWZ0V2lkdGgoKSA6IGJvcmRlclJpZ2h0V2lk
dGgoKTsKLSAgICByZXR1cm4gZGlyZWN0aW9uKCkgPT0gTFRSID8gYm9yZGVyVG9wV2lkdGgoKSA6
IGJvcmRlckJvdHRvbVdpZHRoKCk7CisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBib3JkZXJMZWZ0V2lkdGgoKSA6IGJvcmRlclJpZ2h0V2lkdGgoKTsKKyAgICByZXR1
cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gYm9yZGVyVG9wV2lkdGgoKSA6IGJvcmRlckJv
dHRvbVdpZHRoKCk7CiB9CiAKIHVuc2lnbmVkIHNob3J0IFJlbmRlclN0eWxlOjpib3JkZXJFbmRX
aWR0aCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVmVydGljYWxCbG9ja0Zsb3coKSkKLSAgICAgICAg
cmV0dXJuIGRpcmVjdGlvbigpID09IExUUiA/IGJvcmRlclJpZ2h0V2lkdGgoKSA6IGJvcmRlckxl
ZnRXaWR0aCgpOwotICAgIHJldHVybiBkaXJlY3Rpb24oKSA9PSBMVFIgPyBib3JkZXJCb3R0b21X
aWR0aCgpIDogYm9yZGVyVG9wV2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IGJvcmRlclJpZ2h0V2lkdGgoKSA6IGJvcmRlckxlZnRXaWR0aCgpOworICAg
IHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBib3JkZXJCb3R0b21XaWR0aCgpIDog
Ym9yZGVyVG9wV2lkdGgoKTsKIH0KICAgICAKIExlbmd0aCBSZW5kZXJTdHlsZTo6bWFyZ2luQmVm
b3JlKCkgY29uc3QKQEAgLTEyMTksMjkgKzEyMTksMjkgQEAgTGVuZ3RoIFJlbmRlclN0eWxlOjpt
YXJnaW5BZnRlclVzaW5nKGNvbgogTGVuZ3RoIFJlbmRlclN0eWxlOjptYXJnaW5TdGFydCgpIGNv
bnN0CiB7CiAgICAgaWYgKGlzVmVydGljYWxCbG9ja0Zsb3coKSkKLSAgICAgICAgcmV0dXJuIGRp
cmVjdGlvbigpID09IExUUiA/IG1hcmdpbkxlZnQoKSA6IG1hcmdpblJpZ2h0KCk7Ci0gICAgcmV0
dXJuIGRpcmVjdGlvbigpID09IExUUiA/IG1hcmdpblRvcCgpIDogbWFyZ2luQm90dG9tKCk7Cisg
ICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXJnaW5MZWZ0KCkgOiBt
YXJnaW5SaWdodCgpOworICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXJn
aW5Ub3AoKSA6IG1hcmdpbkJvdHRvbSgpOwogfQogCiBMZW5ndGggUmVuZGVyU3R5bGU6Om1hcmdp
bkVuZCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzVmVydGljYWxCbG9ja0Zsb3coKSkKLSAgICAgICAg
cmV0dXJuIGRpcmVjdGlvbigpID09IExUUiA/IG1hcmdpblJpZ2h0KCkgOiBtYXJnaW5MZWZ0KCk7
Ci0gICAgcmV0dXJuIGRpcmVjdGlvbigpID09IExUUiA/IG1hcmdpbkJvdHRvbSgpIDogbWFyZ2lu
VG9wKCk7CisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXJnaW5S
aWdodCgpIDogbWFyZ2luTGVmdCgpOworICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBtYXJnaW5Cb3R0b20oKSA6IG1hcmdpblRvcCgpOwogfQogICAgIAogTGVuZ3RoIFJlbmRl
clN0eWxlOjptYXJnaW5TdGFydFVzaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlclN0eWxlKSBj
b25zdAogewogICAgIGlmIChvdGhlclN0eWxlLT5pc1ZlcnRpY2FsQmxvY2tGbG93KCkpCi0gICAg
ICAgIHJldHVybiBvdGhlclN0eWxlLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBtYXJnaW5MZWZ0KCkg
OiBtYXJnaW5SaWdodCgpOwotICAgIHJldHVybiBvdGhlclN0eWxlLT5kaXJlY3Rpb24oKSA9PSBM
VFIgPyBtYXJnaW5Ub3AoKSA6IG1hcmdpbkJvdHRvbSgpOworICAgICAgICByZXR1cm4gb3RoZXJT
dHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWFyZ2luTGVmdCgpIDogbWFyZ2luUmln
aHQoKTsKKyAgICByZXR1cm4gb3RoZXJTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
bWFyZ2luVG9wKCkgOiBtYXJnaW5Cb3R0b20oKTsKIH0KIAogTGVuZ3RoIFJlbmRlclN0eWxlOjpt
YXJnaW5FbmRVc2luZyhjb25zdCBSZW5kZXJTdHlsZSogb3RoZXJTdHlsZSkgY29uc3QKIHsKICAg
ICBpZiAob3RoZXJTdHlsZS0+aXNWZXJ0aWNhbEJsb2NrRmxvdygpKQotICAgICAgICByZXR1cm4g
b3RoZXJTdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbWFyZ2luUmlnaHQoKSA6IG1hcmdpbkxl
ZnQoKTsKLSAgICByZXR1cm4gb3RoZXJTdHlsZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbWFyZ2lu
Qm90dG9tKCkgOiBtYXJnaW5Ub3AoKTsKKyAgICAgICAgcmV0dXJuIG90aGVyU3R5bGUtPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IG1hcmdpblJpZ2h0KCkgOiBtYXJnaW5MZWZ0KCk7CisgICAg
cmV0dXJuIG90aGVyU3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1hcmdpbkJvdHRv
bSgpIDogbWFyZ2luVG9wKCk7CiB9CiAKIExlbmd0aCBSZW5kZXJTdHlsZTo6cGFkZGluZ0JlZm9y
ZSgpIGNvbnN0CkBAIC0xMjc5LDE1ICsxMjc5LDE1IEBAIExlbmd0aCBSZW5kZXJTdHlsZTo6cGFk
ZGluZ0FmdGVyKCkgY29uc3QKIExlbmd0aCBSZW5kZXJTdHlsZTo6cGFkZGluZ1N0YXJ0KCkgY29u
c3QKIHsKICAgICBpZiAoaXNWZXJ0aWNhbEJsb2NrRmxvdygpKQotICAgICAgICByZXR1cm4gZGly
ZWN0aW9uKCkgPT0gTFRSID8gcGFkZGluZ0xlZnQoKSA6IHBhZGRpbmdSaWdodCgpOwotICAgIHJl
dHVybiBkaXJlY3Rpb24oKSA9PSBMVFIgPyBwYWRkaW5nVG9wKCkgOiBwYWRkaW5nQm90dG9tKCk7
CisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBwYWRkaW5nTGVmdCgp
IDogcGFkZGluZ1JpZ2h0KCk7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IHBhZGRpbmdUb3AoKSA6IHBhZGRpbmdCb3R0b20oKTsKIH0KIAogTGVuZ3RoIFJlbmRlclN0eWxl
OjpwYWRkaW5nRW5kKCkgY29uc3QKIHsKICAgICBpZiAoaXNWZXJ0aWNhbEJsb2NrRmxvdygpKQot
ICAgICAgICByZXR1cm4gZGlyZWN0aW9uKCkgPT0gTFRSID8gcGFkZGluZ1JpZ2h0KCkgOiBwYWRk
aW5nTGVmdCgpOwotICAgIHJldHVybiBkaXJlY3Rpb24oKSA9PSBMVFIgPyBwYWRkaW5nQm90dG9t
KCkgOiBwYWRkaW5nVG9wKCk7CisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBwYWRkaW5nUmlnaHQoKSA6IHBhZGRpbmdMZWZ0KCk7CisgICAgcmV0dXJuIGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IHBhZGRpbmdCb3R0b20oKSA6IHBhZGRpbmdUb3AoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCShyZXZpc2lvbiA2ODU2MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3Niw2ICs0NzYsOCBAQCBwdWJsaWM6CiAgICAg
ZmxvYXQgZWZmZWN0aXZlWm9vbSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT5t
X2VmZmVjdGl2ZVpvb207IH0KIAogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dERpcmVjdGlvbj4oaW5oZXJpdGVkX2ZsYWdzLl9kaXJl
Y3Rpb24pOyB9CisgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gZGlyZWN0aW9uKCkgPT0gTFRSOyB9CisKICAgICBMZW5ndGggbGluZUhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIGluaGVyaXRlZC0+bGluZV9oZWlnaHQ7IH0KICAgICBpbnQgY29tcHV0ZWRMaW5l
SGVpZ2h0KCkgY29uc3QKICAgICB7CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUYWJsZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDY4NTYxKQorKysgV2ViQ29yZS93bWwvV01MVGFibGVFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgV01MVGFibGVFbGVtZW50OjphbGlnbkNlbGxz
KFZlY3RvcjwKICAgICBib29sIHJ0bCA9IGZhbHNlOwogICAgIGlmIChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gcm93RWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICBpZiAoUmVuZGVyU3R5
bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCkpCi0gICAgICAgICAgICBydGwgPSBzdHlsZS0+
ZGlyZWN0aW9uKCkgPT0gUlRMOworICAgICAgICAgICAgcnRsID0gIXN0eWxlLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCk7CiAgICAgfQogCiAgICAgcm93RWxlbWVudC0+c2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6YWxpZ25BdHRyLCBydGwgPyAicmlnaHQiIDogImxlZnQiKTsK
</data>
<flag name="review"
          id="59042"
          type_id="1"
          status="+"
          setter="bdakin"
    />
          </attachment>
      

    </bug>

</bugzilla>