<?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>45220</bug_id>
          
          <creation_ts>2010-09-03 18:10:04 -0700</creation_ts>
          <short_desc>REGRESSION(r66781): Breaks the build. Adds a mac-specific file to platform/graphics without #if PLATFORM() guards and changes the GraphicsContext3D interface without updating all implementations (Requested by jamesr on #webkit).</short_desc>
          <delta_ts>2010-09-03 18:16:08 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>30625</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>jamesr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>274307</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-03 18:10:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/66781 broke the build:
Breaks the build. Adds a mac-specific file to platform/graphics without #if PLATFORM() guards and changes the GraphicsContext3D interface without updating all implementations (Requested by jamesr on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274308</commentid>
    <comment_count>1</comment_count>
      <attachid>66576</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-03 18:10:18 -0700</bug_when>
    <thetext>Created attachment 66576
ROLLOUT of r66781

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID --ignore-builders

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274311</commentid>
    <comment_count>2</comment_count>
      <attachid>66576</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-03 18:13:47 -0700</bug_when>
    <thetext>Comment on attachment 66576
ROLLOUT of r66781

landing by hand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274313</commentid>
    <comment_count>3</comment_count>
      <attachid>66576</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-03 18:16:04 -0700</bug_when>
    <thetext>Comment on attachment 66576
ROLLOUT of r66781

Clearing flags on attachment: 66576

Committed r66783: &lt;http://trac.webkit.org/changeset/66783&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274314</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-09-03 18:16:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66576</attachid>
            <date>2010-09-03 18:10:18 -0700</date>
            <delta_ts>2010-09-03 18:16:04 -0700</delta_ts>
            <desc>ROLLOUT of r66781</desc>
            <filename>bug-45220-20100904011017.patch</filename>
            <type>text/plain</type>
            <size>105694</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzZjZGU2MmI3YWM4ZTBiNTA3N2IyZTQ1NGE4NmJhZjQ3YjNmMzljMy4uYzczYjdiNzkyZTc2ODA4
MjA5YmRkNGE0MzE3NTE5ZDQyMzc4NjQ3MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjggQEAKKzIwMTAtMDktMDMgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgorCisgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHI2Njc4MS4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvNjY3ODEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ1MjIwCisKKyAgICAgICAgQnJlYWtzIHRoZSBidWlsZC4gQWRkcyBhIG1hYy1z
cGVjaWZpYyBmaWxlIHRvCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzIHdpdGhvdXQgI2lmIFBM
QVRGT1JNKCkgZ3VhcmRzIGFuZCBjaGFuZ2VzCisgICAgICAgIHRoZSBHcmFwaGljc0NvbnRleHQz
RCBpbnRlcmZhY2Ugd2l0aG91dCB1cGRhdGluZyBhbGwKKyAgICAgICAgaW1wbGVtZW50YXRpb25z
IChSZXF1ZXN0ZWQgYnkgamFtZXNyIG9uICN3ZWJraXQpLgorCisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TE9iamVjdDo6ZGVsZXRlT2JqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdM
RVdlYktpdEJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFw
aGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp2YWxpZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
ckRlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5j
aWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpk
cmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxl
bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VT
aGFkZXJDb21waWxlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c2FtcGxlQ292ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNj
aXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3ApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0yZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00
aSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpk
ZWxldGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2l6ZUluQnl0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVy
cm9yKToKKwogMjAxMC0wOS0wMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMzQ5NzYzNDlh
NDBkMzdjM2NmZDY5Y2UyMDVmOGQ0YzUxMTg3MDY4My4uMzMyMWNiYjdkNGJmM2I2MTFlMzMxOTVk
YzI0MjBhMWU5Mzc2MzFmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI1OTksNyArMjU5OSw2IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggOWU1YjEwM2Q4MzZkMjVjYTc1ODc2ZTIzNjg1NWFkZDgy
NmNkZGYxOS4uYzhiODhlYzI0YmUzMjU0NjUxYWVhMTk4ODg2NDZiYjFhYjUyMzE2MSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUzNjksNyArNTM2OSw2
IEBACiAJCUZBQkU3MkZFMTA1OUMyMTEwMEQ5OTlERCAvKiBNYXRoTUxOYW1lcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQUJFNzJGQzEwNTlDMjEx
MDBEOTk5REQgLyogTWF0aE1MTmFtZXMuY3BwICovOyB9OwogCQlGQUMxMkNDNDExMjBEQTY5MDBE
QUNDMzYgLyogUmVuZGVyTWF0aE1MU3ViU3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBQzEyQ0MyMTEyMERBNjkwMERBQ0MzNiAvKiBSZW5kZXJN
YXRoTUxTdWJTdXAuY3BwICovOyB9OwogCQlGQUMxMkNDNTExMjBEQTY5MDBEQUNDMzYgLyogUmVu
ZGVyTWF0aE1MU3ViU3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGQUMxMkNDMzExMjBEQTY5MDBEQUNDMzYgLyogUmVuZGVyTWF0aE1MU3ViU3VwLmgg
Ki87IH07Ci0JCUZCNThDQjc5MTIyRjE1MzgwMDg3ODg1MSAvKiBHcmFwaGljc0NvbnRleHQzRE9w
ZW5HTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
QjU4Q0FFQTEyMjg1ODY1MDA4Nzg4NTEgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwICov
OyB9OwogCQlGRTZGRDQ4ODBGNjc2RTU3MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNkZENDg1MEY2NzZFNTcw
MDA5Mjg3MyAvKiBDb29yZGluYXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFNkZENDhEMEY2NzZFOTMwMDA5Mjg3MyAvKiBKU0Nvb3JkaW5h
dGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
NkZENDhCMEY2NzZFOTMwMDA5Mjg3MyAvKiBKU0Nvb3JkaW5hdGVzLmNwcCAqLzsgfTsKIAkJRkU2
RkQ0OEUwRjY3NkU5MzAwMDkyODczIC8qIEpTQ29vcmRpbmF0ZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNkZENDhDMEY2NzZFOTMwMDA5Mjg3MyAv
KiBKU0Nvb3JkaW5hdGVzLmggKi87IH07CkBAIC0xMTI0MSw3ICsxMTI0MCw2IEBACiAJCUZBQkU3
MkZDMTA1OUMyMTEwMEQ5OTlERCAvKiBNYXRoTUxOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNYXRoTUxOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZBQzEyQ0MyMTEyMERBNjkwMERBQ0MzNiAvKiBSZW5kZXJNYXRoTUxTdWJTdXAu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWF0aE1MU3Vi
U3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkFDMTJDQzMxMTIwREE2OTAw
REFDQzM2IC8qIFJlbmRlck1hdGhNTFN1YlN1cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJNYXRoTUxTdWJTdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJRkI1OENBRUExMjI4NTg2NTAwODc4ODUxIC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNE
T3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0OUVGOTcwREM1MTQ2
MjAwNDI2NkUxIC8qIERhc2hib2FyZFN1cHBvcnRDU1NQcm9wZXJ0eU5hbWVzLmluICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IERhc2hib2FyZFN1cHBvcnRDU1NQcm9wZXJ0eU5hbWVzLmluOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTZGRDQ4NTBGNjc2RTU3MDAwOTI4NzMgLyogQ29v
cmRpbmF0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29vcmRpbmF0ZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2RkQ0ODYwRjY3NkU1NzAwMDkyODcz
IC8qIENvb3JkaW5hdGVzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDb29yZGluYXRlcy5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTkxMyw3ICsxNTkxMSw2IEBACiAJ
CQkJQjJBMDE1OTMwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oICovLAogCQkJ
CTZFMjFDNkJGMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgKi8sCiAJ
CQkJNDlDN0I5RkIxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggKi8sCi0J
CQkJRkI1OENBRUExMjI4NTg2NTAwODc4ODUxIC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cCAqLywKIAkJCQlBODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhpY3NDb250ZXh0UHJp
dmF0ZS5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVy
LmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5o
ICovLApAQCAtMjA0OTQsNyArMjA0OTEsNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1
aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBh
dGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVu
Z2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9
ICgKIAkJCQlFbmdsaXNoLApAQCAtMjI4OTksNyArMjI4OTUsNiBAQAogCQkJCTg5ODc4NUI4MTIy
Q0EyQTcwMDNBQUJEQSAvKiBKU01ldGFkYXRhQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODk4Nzg1RjAxMjJFMUU4NzAwM0FBQkRBIC8qIEpTRmlsZUV4Y2VwdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4OTg3ODVGNDEyMkUxRUFDMDAzQUFCREEgLyogSlNGaWxlUmVhZGVyU3lu
Yy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjU4Q0I3OTEyMkYxNTM4MDA4Nzg4NTEgLyogR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xPYmplY3QuY3BwCmluZGV4IGU4M2E5Njg5MDU1NzM5N2VkZThkYjdlMGIzZGMzZWNlOWNiY2M1
YTMuLjVmZDU1MzQwODNiMTIxYmVmYWYwNTQyMmI4MDM5ZTVmNjA3NDkzOTEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xPYmplY3QuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgV2ViR0xPYmplY3Q6
OmRlbGV0ZU9iamVjdCgpCiB7CiAgICAgaWYgKG1fb2JqZWN0KSB7CiAgICAgICAgIGlmIChtX2Nv
bnRleHQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZW5z
dXJlQ29udGV4dCgpOworICAgICAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAgICAgICAgIGRlbGV0ZU9iamVjdEltcGwobV9v
YmplY3QpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbV9hdHRhY2htZW50Q291bnQpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKaW5kZXggMjAzM2M0
ZDIyN2UwNDU1MTBjOGZiYTM1OThkMTlkMDFjZDEzYTJjZS4uZDAxZGU4ZmJiOTkxMGNjMWE4YjA1
NWJlMjcwZGMzYjM5NGFkNmNiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9BTkdMRVdlYktpdEJyaWRnZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5H
TEVXZWJLaXRCcmlkZ2UuaApAQCAtMzgsNyArMzgsNiBAQCBlbnVtIEFOR0xFU2hhZGVyVHlwZSB7
CiAgICAgU0hBREVSX1RZUEVfRlJBR01FTlQgPSBFU2hMYW5nRnJhZ21lbnQKIH07CiAKLQogY2xh
c3MgQU5HTEVXZWJLaXRCcmlkZ2UgewogcHVibGljOgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggMjA5MjMzMDg5ZDA3YzdmNjNiNTRiNjZl
NTEyZWU1ZTMwNjliNGJmMi4uYjU4MzgxMzg4NjY5OGVjYjU2MDU1MzFiZTdmNTZiMGEzOWQ2NTA2
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApA
QCAtNDUxLDcgKzQ1MSw3IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAjZW5kaWYKLSAgICB2b2lkIGVuc3Vy
ZUNvbnRleHQoKTsKKyAgICB2b2lkIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAjaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkKICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcg
b24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OWQ0MjI3ZDI3YTExODU0Y2E1YmNlNGFkYTVk
ZDc1NTYwOTkxM2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKLQotI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiQXJyYXlCdWZm
ZXJWaWV3LmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUg
IkZsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRl
ICJJbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJV
aW50OEFycmF5LmgiCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKLQotI2lmIFBMQVRGT1JNKE1B
QykKLSNpbmNsdWRlIDxPcGVuR0wvQ0dMUmVuZGVyZXJzLmg+Ci0jaW5jbHVkZSA8T3BlbkdML2ds
Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQotewotICAgIGNvbnN0IGNoYXIqIGV4dGVu
c2lvbnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VY
VEVOU0lPTlMpKTsKLSAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChzdGQ6
OnN0cnN0cihleHRlbnNpb25zLCAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpIHsKLSAg
ICAgICAgICAgIGlmICghbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICBtX2F0dHJzLmRl
cHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwg
PSBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGJv
b2wgaXNWYWxpZFZlbmRvciA9IHRydWU7Ci0gICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMgd2Ug
b25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLgotICAgICAgICBjb25z
dCBjaGFyKiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3Ry
aW5nKEdMX1ZFTkRPUikpOwotICAgICAgICBpZiAoIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5WSURJ
QSIpKQotICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZhbHNlOwotICAgICAgICBpZiAoIWlz
VmFsaWRWZW5kb3IgfHwgIXN0ZDo6c3Ryc3RyKGV4dGVuc2lvbnMsICJHTF9FWFRfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKSkKLSAgICAgICAgICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7
Ci0gICAgfQotICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGVuZm9yY2luZyBwcmVtdWx0aXBsaWVk
QWxwaGEgPSB0cnVlLCBpbXBsZW1lbnQgdGhlCi0gICAgLy8gY29ycmVjdCBiZWhhdmlvciB3aGVu
IHByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlIGlzIHJlcXVlc3RlZC4KLSAgICBtX2F0dHJzLnBy
ZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCi17Ci0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygp
OwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0KLSAg
ICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7Ci0gICAgaW50IHRvdGFsQnl0ZXMg
PSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKLQotICAgIE93bkFycmF5UHRyPHVuc2lnbmVk
IGNoYXI+IHBpeGVscyhuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7Ci0gICAgaWYgKCFw
aXhlbHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29u
dGV4dE9iaik7Ci0KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVB
RF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6
Z2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdo
dCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVS
X0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAgICAg
ICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
R0xpbnQgcGFja0FsaWdubWVudCA9IDQ7Ci0gICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1l
bnQgPSBmYWxzZTsKLSAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNr
QWxpZ25tZW50KTsKLSAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKLSAgICAgICAgOjpnbFBp
eGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKLSAgICAgICAgbXVzdFJlc3RvcmVQYWNr
QWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84
XzhfOF9SRVYsIHBpeGVscy5nZXQoKSk7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25t
ZW50KQotICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGln
bm1lbnQpOwotCi0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Ci0KLSAgICBwYWludFRv
Q2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAod2lk
dGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCB8fCAhbV9j
b250ZXh0T2JqKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jdXJyZW50V2lkdGggPSB3
aWR0aDsKLSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgCi0gICAgQ0dMU2V0Q3Vy
cmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICAKLSAgICBHTHVpbnQgaW50ZXJuYWxDb2xv
ckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKLSAg
ICBpZiAobV9hdHRycy5hbHBoYSkgewotICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xf
UkdCQTg7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKLSAgICAgICAgY29sb3JGb3JtYXQg
PSBHTF9SR0I7Ci0gICAgfQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkgewotICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBp
cyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgotICAgICAgICAvLyBTZWUgR3JhcGhpY3NDb250
ZXh0M0QgY29uc3RydWN0b3IuCi0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgJiYgbV9hdHRy
cy5kZXB0aCkKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9FWFQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOwotICAgIH0KLQotICAgIGJvb2wg
bXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLQotICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8K
LSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291
bnQ7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19FWFQsICZtYXhTYW1w
bGVDb3VudCk7Ci0gICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwgbWF4U2Ft
cGxlQ291bnQpOwotICAgICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhTYW1wbGVDb3VudCkKLSAg
ICAgICAgICAgIHNhbXBsZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7Ci0gICAgICAgIGlmIChtX2Jv
dW5kRkJPICE9IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAg
ICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOwotICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAg
ICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRo
KQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICA6
OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKLSAgICAgICAg
aWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgewotICAgICAgICAgICAgLy8gRklYTUU6IGNsZWFu
dXAuCi0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCi0gICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsK
LSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xv
ckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKLSAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwg
fHwgbV9hdHRycy5kZXB0aCkpIHsKLSAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsUmVu
ZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3Rl
bmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
Ci0gICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAg
ICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVG
RkVSX0VYVCwgMCk7Ci0gICAgfQotICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQo
R0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKLSAg
ICAgICAgLy8gRklYTUU6IGNsZWFudXAKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBp
ZiAobV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICAgICAgbXVzdFJlc3Rv
cmVGQk8gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMg
dG8gMC4KLSAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xf
VFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUUsIHN0ZW5jaWxNYXNrID0gR0xfVFJV
RTsKLSAgICBHTGJvb2xlYW4gaXNTY2lzc29yRW5hYmxlZCA9IEdMX0ZBTFNFOwotICAgIEdMYm9v
bGVhbiBpc0RpdGhlckVuYWJsZWQgPSBHTF9GQUxTRTsKLSAgICBHTGJpdGZpZWxkIGNsZWFyTWFz
ayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dS
SVRFTUFTSywgY29sb3JNYXNrKTsKLSAgICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUs
IEdMX1RSVUUsIEdMX1RSVUUpOwotICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7Ci0gICAgICAgIDo6
Z2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOwotICAgICAgICA6
OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVG
RkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICA6Omds
R2V0Qm9vbGVhbnYoR0xfU1RFTkNJTF9XUklURU1BU0ssICZzdGVuY2lsTWFzayk7Ci0gICAgICAg
IDo6Z2xTdGVuY2lsTWFzayhHTF9UUlVFKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5D
SUxfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJs
ZWQoR0xfU0NJU1NPUl9URVNUKTsKLSAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwot
ICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVSKTsKLSAgICA6Omds
RGlzYWJsZShHTF9ESVRIRVIpOwotCi0gICAgOjpnbENsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICA6
OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNv
bG9yTWFza1szXSk7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgIDo6Z2xEZXB0aE1h
c2soZGVwdGhNYXNrKTsKLSAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICA6OmdsU3Rl
bmNpbE1hc2soc3RlbmNpbE1hc2spOwotICAgIGlmIChpc1NjaXNzb3JFbmFibGVkKQotICAgICAg
ICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgZWxzZQotICAgICAgICA6OmdsRGlz
YWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCi0gICAgICAg
IDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKLSAgICBlbHNlCi0gICAgICAgIDo6Z2xEaXNhYmxlKEdM
X0RJVEhFUik7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKLQotICAgIDo6Z2xG
bHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCi17
Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211
bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZS
QU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKDAs
IDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDAsIDAsIG1fY3VycmVudFdpZHRo
LCBtX2N1cnJlbnRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJP
KTsKLSAgICB9Ci0gICAgOjpnbEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKLXsKLSAgICBlbnN1cmVDb250
ZXh0KCk7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQo
c2hhZGVyKTsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEF0dGFjaFNoYWRlcigoR0x1
aW50KSBwcm9ncmFtLCAoR0x1aW50KSBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCB1bnNpZ25l
ZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0p
OwotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKChHTHVp
bnQpIHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEJpbmRCdWZm
ZXIodGFyZ2V0LCAoR0x1aW50KSBidWZmZXIpOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCBidWZmZXIpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIEdMdWludCBmYm87Ci0gICAg
aWYgKGJ1ZmZlcikKLSAgICAgICAgZmJvID0gKEdMdWludClidWZmZXI7Ci0gICAgZWxzZQotICAg
ICAgICBmYm8gPSAobV9hdHRycy5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8p
OwotICAgIGlmIChmYm8gIT0gbV9ib3VuZEZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKHRhcmdldCwgZmJvKTsKLSAgICAgICAgbV9ib3VuZEZCTyA9IGZibzsKLSAgICB9Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIGVuc3VyZUNv
bnRleHQoKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIChHTHVpbnQpIHJl
bmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBl
bnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgKEdMdWludCkgdGV4
dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoZG91YmxlIHJl
ZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKQotewotICAgIGVuc3Vy
ZUNvbnRleHQoKTsKLSAgICA6OmdsQmxlbmRDb2xvcihzdGF0aWNfY2FzdDxmbG9hdD4ocmVkKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWUpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYWxwaGEpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymxl
bmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1vZGUpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwot
ICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBs
b25nIG1vZGVBbHBoYSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEJsZW5kRXF1
YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcg
ZGZhY3RvcikKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEJsZW5kRnVuYyhzZmFj
dG9yLCBkZmFjdG9yKTsKLX0gICAgICAgCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5k
RnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwg
dW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSkKLXsKLSAgICBl
bnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdC
LCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZm
ZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2Fn
ZSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBz
aXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBsb25nIHVzYWdlKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsQnVmZmVyRGF0
YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIGludCBz
aXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6Omds
QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Ci19Ci0KLXVuc2lnbmVk
IGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQg
bG9uZyB0YXJnZXQpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIHJldHVybiA6OmdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckNvbG9yKGRvdWJsZSByLCBkb3VibGUgZywgZG91YmxlIGIsIGRvdWJsZSBhKQot
ewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsQ2xlYXJDb2xvcihzdGF0aWNfY2FzdDxm
bG9hdD4ociksIHN0YXRpY19jYXN0PGZsb2F0PihnKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGIpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oYSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
cih1bnNpZ25lZCBsb25nIG1hc2spCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xD
bGVhcihtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChkb3Vi
bGUgZGVwdGgpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xDbGVhckRlcHRoKGRl
cHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKGxvbmcgcykK
LXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbENsZWFyU3RlbmNpbChzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBi
b29sIGJsdWUsIGJvb2wgYWxwaGEpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xD
b2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFT
U0VSVChzaGFkZXIpOwotICAgIGVuc3VyZUNvbnRleHQoKTsKLQotICAgIGludCBHTHNoYWRlclR5
cGU7Ci0gICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7Ci0KLSAgICBnbEdldFNoYWRlcml2
KHNoYWRlciwgU0hBREVSX1RZUEUsICZHTHNoYWRlclR5cGUpOwotICAgIAotICAgIGlmIChHTHNo
YWRlclR5cGUgPT0gVkVSVEVYX1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9U
WVBFX1ZFUlRFWDsKLSAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVS
KQotICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm47IC8vIEludmFsaWQgc2hhZGVyIHR5cGUuCi0KLSAgICBIYXNoTWFwPFBs
YXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9z
aGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2hhZGVyU291cmNlRW50
cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZTsKLSAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLQotICAgIGJvb2wgaXNWYWxpZCA9
IG1fY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRh
KCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOwot
Ci0gICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKLSAgICBlbnRyeS5pc1ZhbGlkID0gaXNW
YWxpZDsKLQotICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlk
bid0IHZhbGlkYXRlLCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRl
ZCBzb3VyY2UgICAgCi0KLSAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCk7Ci0KLSAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVk
U2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwotICAgIGNvbnN0
IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5kYXRh
KCk7Ci0gICAgCi0gICAgOjpnbFNoYWRlclNvdXJjZSgoR0x1aW50KSBzaGFkZXIsIDEsICZ0cmFu
c2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7Ci0gICAgCi0gICAgOjpn
bENvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVyKTsKLSAgICAKLSAgICBpbnQgR0xDb21waWxl
U3VjY2VzczsKLSAgICAKLSAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLCBDT01Q
SUxFX1NUQVRVUywgJkdMQ29tcGlsZVN1Y2Nlc3MpOwotICAgIAotICAgIC8vIEFTU0VSVCB0aGF0
IEFOR0xFIGdlbmVyYXRlZCBHTFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdMCi0gICAgQVNT
RVJUKEdMQ29tcGlsZVN1Y2Nlc3MgPT0gR0xfVFJVRSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQotewotICAgIGVuc3Vy
ZUNvbnRleHQoKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVB
RF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6
Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4
ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7
Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4
LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewot
ICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0g
ICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0
LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJ
TkVBUik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZC
Tyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKHVuc2lnbmVkIGxvbmcg
bW9kZSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEN1bGxGYWNlKG1vZGUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5j
KQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soYm9vbCBmbGFnKQotewotICAgIGVu
c3VyZUNvbnRleHQoKTsKLSAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpCi17Ci0g
ICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0p
OwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsRGV0
YWNoU2hhZGVyKChHTHVpbnQpIHByb2dyYW0sIChHTHVpbnQpIHNoYWRlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApCi17Ci0gICAgZW5z
dXJlQ29udGV4dCgpOwotICAgIDo6Z2xEaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQot
ewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyh1bnNpZ25l
ZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpCi17Ci0gICAgZW5zdXJlQ29udGV4
dCgpOwotICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2ln
bmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpCi17Ci0gICAg
ZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkK
LXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEVuYWJsZShjYXApOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25n
IGluZGV4KQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQot
ewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsRmluaXNoKCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpn
bEZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikK
LXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgR0x1aW50IHJlbmRlcmJ1ZmZlciA9IChHTHVp
bnQpIGJ1ZmZlcjsKLSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1F
TlQpIHsKLSAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgREVQ
VEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpOwotICAgICAg
ICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBTVEVOQ0lMX0FUVEFDSE1F
TlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgcmVuZGVyYnVmZmVyKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVu
ZGVyYnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlLCBsb25nIGxldmVsKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6Omds
RnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIChH
THVpbnQpIHRleHR1cmUsIGxldmVsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJv
bnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAg
OjpnbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJh
dGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwot
ICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcEVYVCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCB1bnNpZ25l
ZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgR0xpbnQgbWF4QXR0cmli
dXRlU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHBy
b2dyYW0pLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXpl
KTsKLSAgICBHTGNoYXIgbmFtZVttYXhBdHRyaWJ1dGVTaXplXTsgLy8gR0xfQUNUSVZFX0FUVFJJ
QlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24KLSAgICBHTHNpemVpIG5h
bWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsK
LSAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbSksIGlu
ZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsK
LSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmZvLm5h
bWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAg
ICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9n
cmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICBHTGludCBt
YXhVbmlmb3JtU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVp
bnQ+KHByb2dyYW0pLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNp
emUpOwotICAgIEdMY2hhciBuYW1lW21heFVuaWZvcm1TaXplXTsgLy8gR0xfQUNUSVZFX1VOSUZP
Uk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uCi0gICAgR0xzaXplaSBuYW1l
TGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0g
ICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0oc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFtKSwgaW5k
ZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKLSAg
ICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmZvLm5hbWUg
PSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBp
bmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBpbnQg
bWF4Q291bnQsIGludCogY291bnQsIHVuc2lnbmVkIGludCogc2hhZGVycykKLXsKLSAgICBpZiAo
IXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xHZXRB
dHRhY2hlZFNoYWRlcnMoc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFtKSwgbWF4Q291bnQsIGNv
dW50LCBzaGFkZXJzKTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGVuc3VyZUNvbnRleHQo
KTsKLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0sIG5h
bWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1f
YXR0cnM7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkK
LXsKLSAgICBpZiAobV9zeW50aGV0aWNFcnJvcnMuc2l6ZSgpID4gMCkgewotICAgICAgICBMaXN0
SGFzaFNldDx1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgaXRlciA9IG1fc3ludGhldGljRXJyb3Jz
LmJlZ2luKCk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZXJyID0gKml0ZXI7Ci0gICAgICAgIG1f
c3ludGhldGljRXJyb3JzLnJlbW92ZShpdGVyKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9
Ci0KLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOwotfQot
Ci1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUp
Ci17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIHJldHVybiBTdHJpbmcoKGNvbnN0IGNoYXIq
KSA6OmdsR2V0U3RyaW5nKG5hbWUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGlu
dCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQotewotICAgIGVuc3Vy
ZUNvbnRleHQoKTsKLSAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZW5zdXJlQ29udGV4dCgp
OwotICAgIHJldHVybiA6OmdsSXNCdWZmZXIoKEdMdWludCkgYnVmZmVyKTsKLX0KLQotYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKQotewotICAgIGVu
c3VyZUNvbnRleHQoKTsKLSAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVi
dWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlckVYVCgo
R0x1aW50KSBmcmFtZWJ1ZmZlcik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgcmV0dXJuIDo6
Z2xJc1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAg
IGlmICghcmVuZGVyYnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBlbnN1cmVD
b250ZXh0KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVCgoR0x1aW50KSByZW5k
ZXJidWZmZXIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIHJldHVybiA6OmdsSXNTaGFkZXIoKEdM
dWludCkgc2hhZGVyKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICByZXR1cm4gOjpnbElzVGV4
dHVyZSgoR0x1aW50KSB0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlu
ZVdpZHRoKGRvdWJsZSB3aWR0aCkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbExp
bmVXaWR0aChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIEFT
U0VSVChwcm9ncmFtKTsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbExpbmtQcm9ncmFt
KChHTHVpbnQpIHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0
b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKQotewotICAgIGVuc3VyZUNvbnRl
eHQoKTsKLSAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMp
Ci17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KHN0YXRpY19j
YXN0PGZsb2F0PihmYWN0b3IpLCBzdGF0aWNfY2FzdDxmbG9hdD4odW5pdHMpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1
bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgLy8gRklYTUU6IHJlbW92ZSB0
aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwK
LSAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9y
ZSByZWFkaW5nIHBpeGVscy4KLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEZsdXNoKCk7
Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6OmdsQmxpdEZyYW1l
YnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5
ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6
OmdsRmx1c2goKTsKLSAgICB9Ci0gICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9i
b3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgLy8gRklYTUU6
IFRoaXMgaXMgbm90IGltcGxlbWVudGVkIG9uIGRlc2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhh
dmUgaWZkZWZzIGZvciB0aGUgZGlmZmVyZW50IEdMIHZhcmlhbnRzCi19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKGludGVy
bmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBERVBUSF9TVEVOQ0lMOgotICAgICAgICBpbnRlcm5hbGZv
cm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IERFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIX0NP
TVBPTkVOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSR0JBNDoKLSAgICBjYXNlIFJHQjVf
QTE6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBSR0I1NjU6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpCi17Ci0gICAgZW5z
dXJlQ29udGV4dCgpOwotICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZShzdGF0aWNfY2FzdDxmbG9hdD4o
dmFsdWUpLCBpbnZlcnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKGxv
bmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkK
LXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgQVNTRVJUKHNo
YWRlcik7Ci0KLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBl
bnRyeTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291cmNl
TWFwLnNldChzaGFkZXIsIGVudHJ5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNr
KQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVm
LCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0
ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2ln
bmVkIGxvbmcgbWFzaykKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbFN0ZW5jaWxG
dW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c3RlbmNpbE1hc2sodW5zaWduZWQgbG9uZyBtYXNrKQotewotICAgIGVuc3VyZUNv
bnRleHQoKTsKLSAgICA6OmdsU3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25l
ZCBsb25nIG1hc2spCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xTdGVuY2lsTWFz
a1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsT3AodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBs
b25nIHpwYXNzKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsU3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxP
cFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25l
ZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQotewotICAgIGVuc3VyZUNvbnRleHQo
KTsKLSAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJn
ZXQsIHVuc2lnbmVkIHBuYW1lLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7
Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHZhbHVlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHZhbHVlKQotewotICAgIGVuc3VyZUNv
bnRleHQoKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBzdGF0aWNfY2Fz
dDxmbG9hdD4odmFsdWUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFm
KGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6
OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKLXsKLSAg
ICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKGxvbmcgbG9jYXRp
b24sIGZsb2F0IHYwLCBmbG9hdCB2MSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpn
bFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogYXJyYXksIGludCBzaXplKQotewot
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgZW5z
dXJlQ29udGV4dCgpOwotICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBm
bG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAg
ICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogYXJyYXksIGludCBz
aXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAz
Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXpl
LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00Zihsb25nIGxv
Y2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKLXsKLSAgICBl
bnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2Miwg
djMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRp
b24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbFVu
aWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB2MCkKLXsKLSAgICBlbnN1cmVDb250
ZXh0KCk7Ci0gICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogYXJyYXksIGludCBz
aXplKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmko
bG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwot
ICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiBhcnJheSwgaW50IHNpemUp
Ci17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAg
ICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRp
b24sIGludCB2MCwgaW50IHYxLCBpbnQgdjIpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAg
IDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCogYXJyYXksIGludCBzaXpl
KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCi0g
ICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aShsb25nIGxvY2F0
aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyLCBpbnQgdjMpCi17Ci0gICAgZW5zdXJlQ29udGV4
dCgpOwotICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFy
cmF5LCBpbnQgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgNAotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsVW5pZm9ybTRpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogYXJyYXksIGlu
dCBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiA0Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQq
IGFycmF5LCBpbnQgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEg
bXVsdGlwbGUgb2YgOQotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsVW5pZm9ybU1hdHJp
eDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bv
c2UsIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDE2Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xV
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0pCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xVc2VQcm9ncmFtKChHTHVpbnQp
IHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAg
IGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKChHTHVpbnQpIHByb2dy
YW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25l
ZCBsb25nIGluZHgsIGZsb2F0IHYwKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6Omds
VmVydGV4QXR0cmliMWYoaW5keCwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkpCi17Ci0gICAg
ZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5keCwgYXJyYXkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25n
IGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAg
OjpnbFZlcnRleEF0dHJpYjJmKGluZHgsIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiBhcnJheSkK
LXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmR4LCBh
cnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKHVuc2ln
bmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKLXsKLSAgICBlbnN1
cmVDb250ZXh0KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZHgsIHYwLCB2MSwgdjIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9u
ZyBpbmR4LCBmbG9hdCogYXJyYXkpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwg
ZmxvYXQgdjIsIGZsb2F0IHYzKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsVmVy
dGV4QXR0cmliNGYoaW5keCwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogYXJyYXkp
Ci17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5keCwg
YXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVy
KHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1hbGl6ZWQs
IHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLSAgICBlbnN1
cmVDb250ZXh0KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3
cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xWaWV3cG9ydChzdGF0aWNf
Y2FzdDxHTGludD4oeCksIHN0YXRpY19jYXN0PEdMaW50Pih5KSwgc3RhdGljX2Nhc3Q8R0xzaXpl
aT4od2lkdGgpLCBzdGF0aWNfY2FzdDxHTHNpemVpPihoZWlnaHQpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSwgdW5zaWduZWQg
Y2hhciogdmFsdWUpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xHZXRCb29sZWFu
dihwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQ
YXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50
KiB2YWx1ZSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEdldEJ1ZmZlclBhcmFt
ZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBl
bnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICBp
ZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCi0gICAgICAgIGF0dGFj
aG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhl
ciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQo
dGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQotewot
ICAgIC8vIE5lZWQgdG8gZW11bGF0ZSBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVC9U
WVBFIGZvciBHTC4gIEFueSB2YWxpZAotICAgIC8vIGNvbWJpbmF0aW9uIHNob3VsZCB3b3JrLCBi
dXQgR0xfUkdCL0dMX1VOU0lHTkVEX0JZVEUgbWlnaHQgYmUgdGhlIG1vc3QKLSAgICAvLyB1c2Vm
dWwgZm9yIGRlc2t0b3AgV2ViR0wgdXNlcnMuCi0gICAgLy8gTmVlZCB0byBlbXVsYXRlIE1BWF9G
UkFHTUVOVC9WRVJURVhfVU5JRk9STV9WRUNUT1JTIGFuZCBNQVhfVkFSWUlOR19WRUNUT1JTCi0g
ICAgLy8gYmVjYXVzZSBkZXNrdG9wIEdMJ3MgY29ycmVzcG9uZGluZyBxdWVyaWVzIHJldHVybiB0
aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMKLSAgICAvLyB3aGVyZWFzIEdMRVMyIHJldHVybiB0aGUg
bnVtYmVyIG9mIHZlY3RvcnMgKGVhY2ggdmVjdG9yIGhhcyA0IGNvbXBvbmVudHMpLgotICAgIC8v
IFRoZXJlZm9yZSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlc2t0b3AgR0wgbmVlZHMgdG8gYmUg
ZGl2aWRlZCBieSA0LgotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7
Ci0gICAgY2FzZSBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKLSAgICAgICAgKnZh
bHVlID0gR0xfUkdCOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfVFlQRToKLSAgICAgICAgKnZhbHVlID0gR0xfVU5TSUdORURfQllURTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgotICAgICAg
ICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUywgdmFs
dWUpOwotICAgICAgICAqdmFsdWUgLz0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9W
RVJURVhfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7Ci0gICAgICAgICp2YWx1ZSAvPSA0Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIE1BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsIHZhbHVlKTsKLSAgICAgICAgKnZh
bHVlIC89IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIDo6Z2xHZXRJ
bnRlZ2VydihwbmFtZSwgdmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBw
bmFtZSwgaW50KiB2YWx1ZSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEdldFBy
b2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLCBwbmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAg
R0xpbnQgbGVuZ3RoOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYoKEdMdWludCkgcHJvZ3JhbSwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICAKLSAgICBHTHNpemVpIHNpemU7Ci0gICAg
R0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKLSAgICBpZiAoIWlu
Zm8pCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZygoR0x1
aW50KSBwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKLSAgICBTdHJpbmcgcyhpbmZvKTsK
LSAgICBmYXN0RnJlZShpbmZvKTsKLSAgICByZXR1cm4gczsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgp
OwotICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2
YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotCi0gICAgZW5zdXJlQ29udGV4dCgpOwotCi0gICAgSGFzaE1hcDxQ
bGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7
Ci0gICAgY2FzZSBERUxFVEVfU1RBVFVTOgotICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAg
IC8vIExldCBPcGVuR0wgaGFuZGxlIHRoZXNlLgotICAgIAotICAgICAgICA6OmdsR2V0U2hhZGVy
aXYoKEdMdWludCkgc2hhZGVyLCBwbmFtZSwgdmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICAK
LSAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgotICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAoKnZhbHVlKSA9IHN0YXRpY19jYXN0PGlu
dD4oZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgCi0gICAgICAg
ICgqdmFsdWUpID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNlY29uZC5pc1ZhbGlkKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgCi0gICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgIGlm
IChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICgqdmFs
dWUpID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIAotICAgICAgICAo
KnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgCi0gICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKLSAgICAgICAgKCp2YWx1
ZSkgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVN
KTsKLSAgICB9Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xv
ZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAg
IGVuc3VyZUNvbnRleHQoKTsKLSAgICBHTGludCBsZW5ndGg7Ci0gICAgOjpnbEdldFNoYWRlcml2
KChHTHVpbnQpIHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAgIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgcmV0dXJuICIiOwotCi0gICAgIFNo
YWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICAgaWYgKGVudHJ5
LmlzVmFsaWQpIHsKLSAgICAgICAgR0xpbnQgbGVuZ3RoOwotICAgICAgICA6OmdsR2V0U2hhZGVy
aXYoKEdMdWludCkgc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotCi0gICAg
ICAgIEdMc2l6ZWkgc2l6ZTsKLSAgICAgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RN
YWxsb2MobGVuZ3RoKTsKLSAgICAgICAgaWYgKCFpbmZvKQotICAgICAgICAgICAgcmV0dXJuICIi
OwotCi0gICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKChHTHVpbnQpIHNoYWRlciwgbGVuZ3Ro
LCAmc2l6ZSwgaW5mbyk7Ci0KLSAgICAgICAgU3RyaW5nIHMoaW5mbyk7Ci0gICAgICAgIGZhc3RG
cmVlKGluZm8pOwotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGVu
dHJ5LmxvZzsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBl
bnN1cmVDb250ZXh0KCk7Ci0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNv
dXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXIpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuICIiOwotCi0gICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLnNvdXJjZTsKLX0KLQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKQotewotICAgIGVuc3Vy
ZUNvbnRleHQoKTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKLXsKLSAg
ICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgZmxvYXQqIHZhbHVlKQotewot
ICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICA6OmdsR2V0VW5pZm9ybWZ2KChHTHVpbnQpIHByb2dy
YW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGludCogdmFs
dWUpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xHZXRVbmlmb3JtaXYoKEdMdWlu
dCkgcHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotbG9uZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIGVuc3VyZUNvbnRleHQo
KTsKLSAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0
ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9h
dCogdmFsdWUpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRy
aWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSwgaW50KiB2YWx1ZSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgOjpnbEdldFZlcnRl
eEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQotCi1sb25nIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQg
bG9uZyBwbmFtZSkKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0KLSAgICB2b2lkKiBwb2ludGVy
OwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVy
KTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxsb25nPihwb2ludGVyKTsKLX0KLQotaW50
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwg
dm9pZCogcGl4ZWxzKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLQotICAgIDo6Z2xUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQotewot
ICAgIGVuc3VyZUNvbnRleHQoKTsKLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVh
bCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMg
dGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQotICAgIDo6Z2xUZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIEdMdWludCBvOwot
ICAgIGdsR2VuQnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXVuc2lnbmVkIEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgZW5zdXJlQ29udGV4
dCgpOwotICAgIEdMdWludCBvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dy
YW0oKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFt
KCk7Ci19Ci0KLXVuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIo
KQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAgICBHTHVpbnQgbzsKLSAgICBnbEdlblJlbmRl
cmJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi11bnNpZ25lZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKLXsKLSAgICBlbnN1
cmVDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5U
X1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKLX0KLQot
dW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIGVuc3Vy
ZUNvbnRleHQoKTsKLSAgICBHTHVpbnQgbzsKLSAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKHVu
c2lnbmVkIGJ1ZmZlcikKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAgZ2xEZWxldGVCdWZm
ZXJzKDEsICZidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFt
ZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0g
ICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFtKQotewotICAg
IGVuc3VyZUNvbnRleHQoKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCByZW5kZXJi
dWZmZXIpCi17Ci0gICAgZW5zdXJlQ29udGV4dCgpOwotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVy
c0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVs
ZXRlU2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKLXsKLSAgICBlbnN1cmVDb250ZXh0KCk7Ci0gICAg
Z2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVs
ZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQotewotICAgIGVuc3VyZUNvbnRleHQoKTsKLSAg
ICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4
dDNEOjpzaXplSW5CeXRlcyhpbnQgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBj
YXNlIEdMX0JZVEU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0xieXRlKTsKLSAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0x1Ynl0ZSk7Ci0gICAgY2Fz
ZSBHTF9TSE9SVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTHNob3J0KTsKLSAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdXNob3J0KTsKLSAgICBj
YXNlIEdMX0lOVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7Ci0gICAgY2FzZSBHTF9V
TlNJR05FRF9JTlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0x1aW50KTsKLSAgICBjYXNlIEdM
X0ZMT0FUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3lu
dGhlc2l6ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vy
cm9ycy5hZGQoZXJyb3IpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0
M0RNYWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQz
RE1hYy5tbQppbmRleCAzY2IzYjU1NDExZTUyMzIxMDk1ZDcxNWM5MjI1NmVjYTZjMDQxZmVlLi41
NGIyNjFjN2FjZGE3OTMwMGQxOTZiZTcyYWM2NDU2ODYzZjY4NGM2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQpAQCAt
MzEsMjIgKzMxLDIxIEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogCi0jaW5jbHVk
ZSAiQU5HTEUvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVk
ZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKICNpbmNsdWRl
ICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0
bWFwQ29udGV4dC5oPgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxPcGVuR0wvQ0dMUmVuZGVyZXJzLmg+Ci0jaW5jbHVkZSA8
T3BlbkdML2dsLmg+CiAjaW5jbHVkZSAiVWludDhBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMTGF5
ZXIuaCIKLSNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R0JpdG1hcENvbnRleHQuaD4KKyNpbmNsdWRlIDxPcGVuR0wvQ0dMUmVuZGVyZXJzLmg+CisjaW5j
bHVkZSA8T3BlbkdML2dsLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC0yMzAsMTQgKzIyOSw4MSBAQCBHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmVuc3VyZUNvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVBdHRyaWJ1dGVzKCkKK3sKKyAgICBjb25zdCBjaGFyKiBleHRlbnNpb25zID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSk7CisgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBpZiAoc3RkOjpzdHJzdHIoZXh0ZW5zaW9u
cywgIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7CisgICAgICAgICAgICBpZiAoIW1f
YXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgfQor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3Ig
PSB0cnVlOworICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRp
YWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQS4KKyAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsK
KyAgICAgICAgaWYgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKKyAgICAgICAgICAg
IGlzVmFsaWRWZW5kb3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFz
dGQ6OnN0cnN0cihleHRlbnNpb25zLCAiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikp
CisgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIH0KKyAgICAvLyBG
SVhNRTogaW5zdGVhZCBvZiBlbmZvcmNpbmcgcHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZSwgaW1w
bGVtZW50IHRoZQorICAgIC8vIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBwcmVtdWx0aXBsaWVkQWxw
aGEgPSBmYWxzZSBpcyByZXF1ZXN0ZWQuCisgICAgbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEg
PSB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQo
KQoreworICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHRPYmopCisgICAg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOworICAgIEltYWdl
QnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CisKKyAgICBpbnQgcm93Qnl0
ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7CisgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAq
IG1fY3VycmVudEhlaWdodDsKKworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVs
cyhuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7CisgICAgaWYgKCFwaXhlbHMpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRD
dXJyZW50Q29udGV4dCgpOwotICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRleHRPYmop
Ci0gICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgQ0dMU2V0
Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8g
PSBmYWxzZTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQs
IG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBtdXN0UmVz
dG9yZUZCTyA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gIT0g
bV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKKyAgICBib29sIG11
c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9Q
QUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOworICAgIGlmIChwYWNrQWxpZ25tZW50ID4g
NCkgeworICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQpOworICAg
ICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKworICAgIDo6Z2xS
ZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX0JHUkEs
IEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzLmdldCgpKTsKKworICAgIGlmICht
dXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCisgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNL
X0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5k
RkJPKTsKKworICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgY2FudmFzLT53aWR0aCgpLCBjYW52
YXMtPmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7
CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdApA
QCAtMjU0LDcgKzMyMCwxMzQzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsK
IH0KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCit7CisgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1
cnJlbnRIZWlnaHQgfHwgIW1fY29udGV4dE9iaikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG1fY3VycmVudFdpZHRoID0gd2lkdGg7CisgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0Owor
ICAgIAorICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgCisgICAg
R0x1aW50IGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3Rl
bmNpbEZvcm1hdCA9IDA7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgaW50ZXJu
YWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjg7Cisg
ICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxv
Z2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAgICAg
Ly8gU2VlIEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgorICAgICAgICBpZiAobV9hdHRy
cy5zdGVuY2lsICYmIG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3Rl
bmNpbEZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsK
KyAgICB9CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisKKyAgICAvLyByZXNp
emUgbXVsdGlzYW1wbGUgRkJPCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAg
IEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1NB
TVBMRVNfRVhULCAmbWF4U2FtcGxlQ291bnQpOworICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9
IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4g
bWF4U2FtcGxlQ291bnQpCisgICAgICAgICAgICBzYW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50
OworICAgICAgICBpZiAobV9ib3VuZEZCTyAhPSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZUZCTyk7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9t
dWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxD
b2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwg
R0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICA6Omds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAg
ICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwg
R0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgMCk7CisgICAgICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJB
TUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBjbGVhbnVwLgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTworICAgIGlmIChtX2Jv
dW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAg
ICB9CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAg
OjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAm
JiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKSB7CisgICAgICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBp
ZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBpZiAobV9h
dHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVm
ZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgIH0KKyAgICBpZiAoZ2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEVfRVhUKSB7CisgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCisgICAgICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgfQorCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSW5pdGlh
bGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dM
X1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFLCBz
dGVuY2lsTWFzayA9IEdMX1RSVUU7CisgICAgR0xib29sZWFuIGlzU2Npc3NvckVuYWJsZWQgPSBH
TF9GQUxTRTsKKyAgICBHTGJvb2xlYW4gaXNEaXRoZXJFbmFibGVkID0gR0xfRkFMU0U7CisgICAg
R0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAgIDo6Z2xHZXRC
b29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7CisgICAgOjpnbENvbG9yTWFz
ayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKKyAgICBpZiAobV9hdHRycy5k
ZXB0aCkgeworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVw
dGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJN
YXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5j
aWwpIHsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX1NURU5DSUxfV1JJVEVNQVNLLCAmc3Rl
bmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNs
ZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlzU2Npc3NvckVu
YWJsZWQgPSA6OmdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgOjpnbERpc2FibGUo
R0xfU0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVuYWJsZWQgPSA6OmdsSXNFbmFibGVkKEdM
X0RJVEhFUik7CisgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKKworICAgIDo6Z2xDbGVhcihj
bGVhck1hc2spOworCisgICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sx
XSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOworICAgIGlmIChtX2F0dHJzLmRlcHRoKQor
ICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7CisgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCkKKyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrKHN0ZW5jaWxNYXNrKTsKKyAgICBpZiAoaXNTY2lz
c29yRW5hYmxlZCkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGVs
c2UKKyAgICAgICAgOjpnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBpZiAoaXNEaXRo
ZXJFbmFibGVkKQorICAgICAgICA6OmdsRW5hYmxlKEdMX0RJVEhFUik7CisgICAgZWxzZQorICAg
ICAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3Vu
ZEZCTyk7CisKKyAgICA6OmdsRmx1c2goKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuc3Vy
ZUNvbnRleHQoQ0dMQ29udGV4dE9iaiBjb250ZXh0KQoreworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBDR0xDb250ZXh0T2JqIGN1cnJlbnRDb250ZXh0
ID0gQ0dMR2V0Q3VycmVudENvbnRleHQoKTsKKyAgICBpZiAoY3VycmVudENvbnRleHQgIT0gY29u
dGV4dCkKKyAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoY29udGV4dCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBlbnN1cmVDb250ZXh0
KG1fY29udGV4dE9iaik7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1w
bGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZG
RVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9j
dXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3Vy
cmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworICAg
IH0KKyAgICA6OmdsRmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2
ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQoreworICAgIGVuc3VyZUNvbnRleHQobV9j
b250ZXh0T2JqKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFT
U0VSVChzaGFkZXIpOworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6Omds
QXR0YWNoU2hhZGVyKChHTHVpbnQpIHByb2dyYW0sIChHTHVpbnQpIHNoYWRlcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBBU1NFUlQocHJvZ3JhbSk7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAg
IDo6Z2xCaW5kQXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRm
OCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5z
aWduZWQgbG9uZyB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIGVuc3Vy
ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIChHTHVp
bnQpIGJ1ZmZlcik7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgR0x1aW50IGZibzsKKyAgICBpZiAo
YnVmZmVyKQorICAgICAgICBmYm8gPSAoR0x1aW50KWJ1ZmZlcjsKKyAgICBlbHNlCisgICAgICAg
IGZibyA9IChtX2F0dHJzLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7Cisg
ICAgaWYgKGZibyAhPSBtX2JvdW5kRkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQodGFyZ2V0LCBmYm8pOworICAgICAgICBtX2JvdW5kRkJPID0gZmJvOworICAgIH0KK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgKEdM
dWludCkgcmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
VGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQor
eworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQmluZFRleHR1cmUo
dGFyZ2V0LCAoR0x1aW50KSB0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUg
YWxwaGEpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xCbGVu
ZENvbG9yKHN0YXRpY19jYXN0PGZsb2F0PihyZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW4p
LCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKCB1bnNpZ25lZCBsb25n
IG1vZGUgKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQmxl
bmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxw
aGEpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xCbGVuZEVx
dWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKworCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25n
IGRmYWN0b3IpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xC
bGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9ICAgICAgIAorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIHNyY1JHQiwgdW5zaWduZWQg
bG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxw
aGEpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xCbGVuZEZ1
bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50
IHNpemUsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRl
eHRPYmopOworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBpbnQgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0
LCBzaXplLCBkYXRhLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZl
clN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBpbnQgc2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAg
OjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOworfQorCit1bnNp
Z25lZCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0KQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAg
ICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihkb3VibGUgciwgZG91YmxlIGcsIGRvdWJs
ZSBiLCBkb3VibGUgYSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAg
OjpnbENsZWFyQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHIpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
ZyksIHN0YXRpY19jYXN0PGZsb2F0PihiKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGEpKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKQoreworICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQ2xlYXIobWFzayk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKQoreworICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChsb25nIHMpCit7Cisg
ICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBn
cmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKKyAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBlbnN1cmVDb250ZXh0KG1fY29u
dGV4dE9iaik7CisKKyAgICBpbnQgR0xzaGFkZXJUeXBlOworICAgIEFOR0xFU2hhZGVyVHlwZSBz
aGFkZXJUeXBlOworCisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAmR0xz
aGFkZXJUeXBlKTsKKyAgICAKKyAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFERVIp
CisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAgZWxzZSBpZiAo
R0xzaGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNI
QURFUl9UWVBFX0ZSQUdNRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOyAvLyBJbnZhbGlk
IHNoYWRlciB0eXBlLgorCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3Vy
Y2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OworCisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNoYWRl
ckluZm9Mb2c7CisKKyAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVy
U291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKKworICAgIGVudHJ5LmxvZyA9IHNoYWRlcklu
Zm9Mb2c7CisgICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAgICBpZiAoIWlzVmFsaWQp
CisgICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBm
b3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAgIAorCisgICAgaW50IHRy
YW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpOwor
CisgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRy
ID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOworICAgIAorICAgIDo6Z2xTaGFkZXJT
b3VyY2UoKEdMdWludCkgc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0
ZWRTaGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKChHTHVpbnQpIHNo
YWRlcik7CisgICAgCisgICAgaW50IEdMQ29tcGlsZVN1Y2Nlc3M7CisgICAgCisgICAgOjpnbEdl
dFNoYWRlcml2KChHTHVpbnQpIHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZHTENvbXBpbGVTdWNj
ZXNzKTsKKyAgICAKKyAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5lcmF0ZWQgR0xTTCB3aWxs
IGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAorICAgIEFTU0VSVChHTENvbXBpbGVTdWNjZXNzID09IEdM
X1RSVUUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNp
Z25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1h
dCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0LCBsb25nIGJvcmRlcikKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Cisg
ICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmxpdEZyYW1lYnVm
ZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsg
aGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0KKyAgICA6
OmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9u
ZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAg
ICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwg
eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5F
QVIpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
bV9mYm8pOworICAgIH0KKyAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKG1fYXR0cnMu
YW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1v
ZGUpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xDdWxsRmFj
ZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKHVuc2lnbmVk
IGxvbmcgZnVuYykKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpn
bERlcHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNr
KGJvb2wgZmxhZykKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpn
bERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5n
ZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKKyAgICA6OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NF
UlQoc2hhZGVyKTsKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbERl
dGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLCAoR0x1aW50KSBzaGFkZXIpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQoreworICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQg
bG9uZyBpbmRleCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNv
dW50KQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsRHJhd0Fy
cmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
cmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNp
Z25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKKyAgICA6OmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAg
ZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xFbmFibGUoY2FwKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQg
bG9uZyBpbmRleCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZmluaXNoKCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAg
OjpnbEZpbmlzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCit7Cisg
ICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xGbHVzaCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgZW5zdXJlQ29u
dGV4dChtX2NvbnRleHRPYmopOworICAgIEdMdWludCByZW5kZXJidWZmZXIgPSAoR0x1aW50KSBi
dWZmZXI7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7
CisgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIERFUFRIX0FU
VEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgOjpn
bEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgU1RFTkNJTF9BVFRBQ0hNRU5ULCBy
ZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CisgICAgfSBlbHNlCisgICAgICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1
ZmZlcnRhcmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
YXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSwgbG9uZyBsZXZlbCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Cisg
ICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCAoR0x1aW50KSB0ZXh0dXJlLCBsZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmZyb250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgZW5zdXJlQ29udGV4dCht
X2NvbnRleHRPYmopOworICAgIDo6Z2xGcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsR2VuZXJhdGVNaXBtYXBFWFQo
dGFyZ2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZW5zdXJl
Q29udGV4dChtX2NvbnRleHRPYmopOworICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwor
ICAgIDo6Z2xHZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFtKSwgR0xfQUNU
SVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CisgICAgR0xjaGFy
IG5hbWVbbWF4QXR0cmlidXRlU2l6ZV07IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsK
KyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFj
dGl2ZUF0dHJpYihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0pLCBpbmRleCwgbWF4QXR0cmli
dXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisgICAgaWYgKCFuYW1l
TGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5h
bWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0g
c2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCB1bnNpZ25lZCBsb25n
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgR0xpbnQgbWF4
VW5pZm9ybVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1aW50
Pihwcm9ncmFtKSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXpl
KTsKKyAgICBHTGNoYXIgbmFtZVttYXhVbmlmb3JtU2l6ZV07IC8vIEdMX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbgorICAgIEdMc2l6ZWkgbmFtZUxl
bmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAg
IDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbSksIGluZGV4
LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisgICAg
aWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5mby5uYW1lID0g
U3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5m
by5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgaW50IG1h
eENvdW50LCBpbnQqIGNvdW50LCB1bnNpZ25lZCBpbnQqIHNoYWRlcnMpCit7CisgICAgaWYgKCFw
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAg
ICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbSksIG1h
eENvdW50LCBjb3VudCwgc2hhZGVycyk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisgICAgCisgICAg
ZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9j
YXRpb24oKEdMdWludCkgcHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRy
aWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbV9hdHRyczsKK30KKwordW5zaWduZWQgbG9uZyBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5z
aXplKCkgPiAwKSB7CisgICAgICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+OjppdGVyYXRv
ciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKKyAgICAgICAgdW5zaWduZWQgbG9u
ZyBlcnIgPSAqaXRlcjsKKyAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOwor
ICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKKyAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSkKK3sKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgcmV0dXJuIFN0cmluZygoY29uc3QgY2hhciopIDo6Z2xH
ZXRTdHJpbmcobmFtZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQorewor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZW5zdXJl
Q29udGV4dChtX2NvbnRleHRPYmopOworICAgIHJldHVybiA6OmdsSXNCdWZmZXIoKEdMdWludCkg
YnVmZmVyKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKHVuc2lnbmVk
IGxvbmcgY2FwKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICByZXR1
cm4gOjpnbElzRW5hYmxlZChjYXApOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFt
ZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKKyAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoKEdMdWludCkg
ZnJhbWVidWZmZXIpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBy
ZXR1cm4gOjpnbElzUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtKTsKK30KKworYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIp
Cit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgcmV0dXJuIDo6Z2xJc1JlbmRl
cmJ1ZmZlckVYVCgoR0x1aW50KSByZW5kZXJidWZmZXIpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNo
YWRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGVuc3VyZUNvbnRleHQobV9j
b250ZXh0T2JqKTsKKyAgICByZXR1cm4gOjpnbElzU2hhZGVyKChHTHVpbnQpIHNoYWRlcik7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIHJldHVybiA6OmdsSXNUZXh0
dXJlKChHTHVpbnQpIHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5l
V2lkdGgoZG91YmxlIHdpZHRoKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
KyAgICA6OmdsTGluZVdpZHRoKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKKyAgICA6OmdsTGlua1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFy
YW0pCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xQaXhlbFN0
b3JlaShwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29u
T2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cykKK3sKKyAgICBlbnN1cmVDb250ZXh0
KG1fY29udGV4dE9iaik7CisgICAgOjpnbFBvbHlnb25PZmZzZXQoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGZhY3RvciksIHN0YXRpY19jYXN0PGZsb2F0Pih1bml0cykpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxv
bmcgdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xG
bHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAorICAgIC8vIGFs
bCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcg
cGl4ZWxzLgorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsRmx1c2go
KTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCbGl0RnJh
bWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgs
IHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAg
IDo6Z2xGbHVzaCgpOworICAgIH0KKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBt
X2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICAvLyBGSVhN
RTogVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8g
aGF2ZSBpZmRlZnMgZm9yIHRoZSBkaWZmZXJlbnQgR0wgdmFyaWFudHMKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgLy86OmdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAgY2FzZSBERVBUSF9T
VEVOQ0lMOgorICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhU
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICBp
bnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBSR0JBNDoKKyAgICBjYXNlIFJHQjVfQTE6CisgICAgICAgIGludGVybmFsZm9ybWF0ID0g
R0xfUkdCQTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSR0I1NjU6CisgICAgICAgIGludGVy
bmFsZm9ybWF0ID0gR0xfUkdCOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgOjpnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1
ZSwgYm9vbCBpbnZlcnQpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAg
IDo6Z2xTYW1wbGVDb3ZlcmFnZShzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpLCBpbnZlcnQpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRlcik7
CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworCisgICAgU2hhZGVyU291
cmNlRW50cnkgZW50cnk7CisKKyAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7CisKKyAgICBtX3No
YWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnN0ZW5jaWxGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVk
IGxvbmcgbWFzaykKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpn
bFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25n
IGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMs
IHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKHVu
c2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Cisg
ICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsTWFza1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNr
KQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsU3RlbmNpbE1h
c2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQg
bG9uZyB6cGFzcykKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpn
bFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcg
ZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKK3sKKyAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZh
Y2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgdmFsdWUp
Cit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJmKHRhcmdldCwgcG5hbWUsIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgcG5hbWUsIGludCB2YWx1ZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
CisgICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHZhbHVlKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZihsb25nIGxv
Y2F0aW9uLCBmbG9hdCB2MCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Cisg
ICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xVbmlmb3JtMWZ2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAgZW5zdXJlQ29u
dGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwg
ZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgMgorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAg
ICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtM2YobG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYx
LCBmbG9hdCB2MikKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpn
bFVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIGFycmF5LCBpbnQgc2l6ZSkK
K3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMworICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYo
bG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCit7
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xVbmlmb3JtNGYobG9j
YXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRmdihsb25nIGxvY2F0aW9uLCBmbG9hdCogYXJyYXksIGludCBzaXplKQoreworICAgIC8v
IEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgZW5zdXJlQ29u
dGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShsb25nIGxvY2F0
aW9uLCBpbnQgdjApCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6
Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKGxv
bmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKKyAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCogYXJyYXks
IGludCBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiAyCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xVbmlmb3Jt
Mml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyKQoreworICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9u
LCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihs
b25nIGxvY2F0aW9uLCBpbnQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMworICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKKyAgICA6OmdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkobG9uZyBsb2NhdGlvbiwgaW50IHYw
LCBpbnQgdjEsIGludCB2MiwgaW50IHYzKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKKyAgICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgaW50KiBh
cnJheSwgaW50IHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDQKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFVu
aWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxv
YXQqIGFycmF5LCBpbnQgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgNAorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6
OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiBhcnJheSwgaW50IHNpemUpCit7CisgICAgLy8gRklY
TUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkKKyAgICBlbnN1cmVDb250ZXh0
KG1fY29udGV4dE9iaik7CisgICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUs
IHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogYXJyYXksIGlu
dCBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiAxNgorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVW5pZm9ybU1h
dHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQorewor
ICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVXNlUHJvZ3JhbSgoR0x1
aW50KSBwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9n
cmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CiAg
ICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xWYWxpZGF0ZVBy
b2dyYW0oKEdMdWludCkgcHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjApCit7CisgICAgZW5zdXJl
Q29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmR4LCB2MCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0KiBhcnJheSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9i
aik7CisgICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmR4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQg
djAsIGZsb2F0IHYxKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6
OmdsVmVydGV4QXR0cmliMmYoaW5keCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIGFycmF5KQor
eworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVmVydGV4QXR0cmli
MmZ2KGluZHgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQor
eworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVmVydGV4QXR0cmli
M2YoaW5keCwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiBhcnJheSkKK3sKKyAgICBlbnN1
cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmR4LCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKHVuc2ln
bmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCit7
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0
ZihpbmR4LCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiBhcnJheSkKK3sKKyAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFZlcnRleEF0dHJpYjRmdihpbmR4
LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50
ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBpbnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXpl
ZCwgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihp
bmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
CisgICAgOjpnbFZpZXdwb3J0KHN0YXRpY19jYXN0PEdMaW50Pih4KSwgc3RhdGljX2Nhc3Q8R0xp
bnQ+KHkpLCBzdGF0aWNfY2FzdDxHTHNpemVpPih3aWR0aCksIHN0YXRpY19jYXN0PEdMc2l6ZWk+
KGhlaWdodCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudih1bnNp
Z25lZCBsb25nIHBuYW1lLCB1bnNpZ25lZCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRG
bG9hdHYodW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKQoreworICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2Nv
bnRleHRPYmopOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVO
VCkKKyAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxf
QVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGludCogdmFsdWUpCit7CisgICAgLy8gTmVlZCB0byBlbXVsYXRlIElNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfRk9STUFUL1RZUEUgZm9yIEdMLiAgQW55IHZhbGlkCisgICAgLy8gY29tYmluYXRp
b24gc2hvdWxkIHdvcmssIGJ1dCBHTF9SR0IvR0xfVU5TSUdORURfQllURSBtaWdodCBiZSB0aGUg
bW9zdAorICAgIC8vIHVzZWZ1bCBmb3IgZGVza3RvcCBXZWJHTCB1c2Vycy4KKyAgICAvLyBOZWVk
IHRvIGVtdWxhdGUgTUFYX0ZSQUdNRU5UL1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgYW5kIE1BWF9W
QVJZSU5HX1ZFQ1RPUlMKKyAgICAvLyBiZWNhdXNlIGRlc2t0b3AgR0wncyBjb3JyZXNwb25kaW5n
IHF1ZXJpZXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cworICAgIC8vIHdoZXJlYXMg
R0xFUzIgcmV0dXJuIHRoZSBudW1iZXIgb2YgdmVjdG9ycyAoZWFjaCB2ZWN0b3IgaGFzIDQgY29t
cG9uZW50cykuCisgICAgLy8gVGhlcmVmb3JlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVza3Rv
cCBHTCBuZWVkcyB0byBiZSBkaXZpZGVkIGJ5IDQuCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRl
eHRPYmopOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIElNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfRk9STUFUOgorICAgICAgICAqdmFsdWUgPSBHTF9SR0I7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgorICAgICAgICAqdmFs
dWUgPSBHTF9VTlNJR05FRF9CWVRFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJB
R01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7CisgICAgICAgICp2YWx1ZSAvPSA0Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgorICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFMsIHZh
bHVlKTsKKyAgICAgICAgKnZhbHVlIC89IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTUFY
X1ZBUllJTkdfVkVDVE9SUzoKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5H
X0ZMT0FUUywgdmFsdWUpOworICAgICAgICAqdmFsdWUgLz0gNDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAg
fQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KChHTHVpbnQp
IHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VS
VChwcm9ncmFtKTsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAg
R0xpbnQgbGVuZ3RoOworICAgIDo6Z2xHZXRQcm9ncmFtaXYoKEdMdWludCkgcHJvZ3JhbSwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICAKKyAgICBHTHNpemVpIHNpemU7CisgICAg
R0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoIWlu
Zm8pCisgICAgICAgIHJldHVybiAiIjsKKworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZygoR0x1
aW50KSBwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKyAgICBTdHJpbmcgcyhpbmZvKTsK
KyAgICBmYXN0RnJlZShpbmZvKTsKKyAgICByZXR1cm4gczsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgZW5zdXJlQ29udGV4dCht
X2NvbnRleHRPYmopOworICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJn
ZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRl
cml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZh
bHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIAorICAgIGVuc3VyZUNvbnRleHQobV9j
b250ZXh0T2JqKTsKKyAgICAKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNv
dXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXIpOworICAgIAorICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICAgICAgY2FzZSBERUxFVEVfU1RB
VFVTOgorICAgICAgICBjYXNlIFNIQURFUl9UWVBFOgorICAgICAgICAgICAgLy8gTGV0IE9wZW5H
TCBoYW5kbGUgdGhlc2UuCisgICAgICAgIAorICAgICAgICAgICAgOjpnbEdldFNoYWRlcml2KChH
THVpbnQpIHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAoKnZhbHVlKSA9IHN0YXRpY19jYXN0PGlu
dD4ocmVzdWx0LT5zZWNvbmQuaXNWYWxpZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAoKnZhbHVl
KSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5n
dGgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU0hB
REVSX1NPVVJDRV9MRU5HVEg6CisgICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlclNvdXJj
ZShzaGFkZXIpLmxlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsK
KyAgICB9Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBHTGludCBsZW5ndGg7CisgICAgOjpnbEdl
dFNoYWRlcml2KChHTHVpbnQpIHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsK
KworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVy
YXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgcmV0dXJuICIiOwor
CisgICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICAg
aWYgKGVudHJ5LmlzVmFsaWQpIHsKKyAgICAgICAgIEdMaW50IGxlbmd0aDsKKyAgICAgICAgIDo6
Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0
aCk7CisKKyAgICAgICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICAgICAgIEdMY2hhciogaW5mbyA9IChH
TGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CisgICAgICAgICBpZiAoIWluZm8pCisgICAgICAg
ICAgICAgcmV0dXJuICIiOworCisgICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZygoR0x1aW50
KSBzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8pOworCisgICAgICAgICBTdHJpbmcgcyhpbmZv
KTsKKyAgICAgICAgIGZhc3RGcmVlKGluZm8pOworICAgICAgICAgcmV0dXJuIHM7CisgICAgIH0K
KyAgICAgZWxzZSB7CisgICAgICAgICByZXR1cm4gZW50cnkubG9nOworICAgICB9Cit9CisKK1N0
cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgZW5zdXJlQ29udGV4dChtX2Nv
bnRleHRPYmopOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VF
bnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
KworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJl
dHVybiAiIjsKKworICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7Cit9CisKKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVy
aXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUp
Cit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xHZXRUZXhQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGxvbmcgbG9jYXRpb24s
IGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAg
OjpnbEdldFVuaWZvcm1mdigoR0x1aW50KSBwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKQoreworICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKKyAgICA6OmdsR2V0VW5pZm9ybWl2KChHTHVpbnQpIHByb2dyYW0sIGxv
Y2F0aW9uLCB2YWx1ZSk7Cit9CisKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1M
b2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRP
YmopOworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZl
cnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZs
b2F0KiB2YWx1ZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpn
bEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKKyAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7
Cit9CisKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNp
Z25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKKyAgICAKKyAgICB2b2lkKiBwb2ludGVyOworICAgIDo6Z2xHZXRW
ZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxsb25nPihwb2ludGVyKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVk
IGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25l
ZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQor
eworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKworICAgIDo6Z2xUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQoreworICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKworICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5l
ZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdl
IGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQorICAgIDo6Z2xUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRP
YmopOworICAgIEdMdWludCBvOworICAgIGdsR2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJu
IG87Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigp
Cit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIEdMdWludCBvOworICAg
IGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWdu
ZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKKyAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK3Vu
c2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlblJlbmRl
cmJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICBlbnN1
cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBl
ID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hB
REVSKTsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQor
eworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBHTHVpbnQgbzsKKyAgICBn
bEdlblRleHR1cmVzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlQnVmZmVyKHVuc2lnbmVkIGJ1ZmZlcikKK3sKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFt
ZWJ1ZmZlcikKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgZ2xEZWxl
dGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFtKQoreworICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCByZW5k
ZXJidWZmZXIpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIGdsRGVs
ZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKK3sKKyAgICBlbnN1cmVD
b250ZXh0KG1fY29udGV4dE9iaik7CisgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQor
eworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBnbERlbGV0ZVRleHR1cmVz
KDEsICZ0ZXh0dXJlKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpzaXplSW5CeXRlcyhp
bnQgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHTF9CWVRFOgor
ICAgICAgICAgICAgcmV0dXJuIHNpemVvZihHTGJ5dGUpOworICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6CisgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKEdMdWJ5dGUpOworICAgICAgICBj
YXNlIEdMX1NIT1JUOgorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihHTHNob3J0KTsKKyAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICAgIHJldHVybiBzaXplb2YoR0x1
c2hvcnQpOworICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICAgIHJldHVybiBzaXplb2Yo
R0xpbnQpOworICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgIHJldHVy
biBzaXplb2YoR0x1aW50KTsKKyAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgIHJl
dHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVy
cm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpCit7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVy
cm9yKTsKK30KIAogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>