<?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>23373</bug_id>
          
          <creation_ts>2009-01-15 19:44:15 -0800</creation_ts>
          <short_desc>Implement ThreadCondition::timedWait for Win32</short_desc>
          <delta_ts>2009-01-22 00:33:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</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>22718</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106010</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-01-15 19:44:15 -0800</bug_when>
    <thetext>The Win32 port of Threading does not have this implemented and we need it now for MessageQueue::waitForMessageTimed. The code we have is borrowed from early version of boost/pthreads-win32. I&apos;m bringing their later revision with timedWait.

See comment in ThreadingWin.cpp file for more info and related links.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106011</commentid>
    <comment_count>1</comment_count>
      <attachid>26782</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-01-15 19:56:04 -0800</bug_when>
    <thetext>Created attachment 26782
Proposed patch

Only affects Win32 code. Built on mac and win. Run workers and storage layout tests on win (those actually use threading and don&apos;t depend on font metrics :-).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106014</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-01-15 20:53:38 -0800</bug_when>
    <thetext>The patch looks good to me.  I&apos;m going to apply it to my local tree and try it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106017</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-01-15 22:10:52 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; The patch looks good to me.  I&apos;m going to apply it to my local tree and try it out.

FYI -- It builds and runs find in my local Cairo-based Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106407</commentid>
    <comment_count>4</comment_count>
      <attachid>26876</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-01-20 16:36:12 -0800</bug_when>
    <thetext>Created attachment 26876
irc_chat.txt

Additional info on license use: asking questions on webkit-dev and on IRC indicates the usage of 2 licenses in a single file is ok. It is not necessary, but nice to include the lust of pthread-win32 contributors which is referred by their license.

See http://www.nabble.com/Using-LGPL-derived-source-in-one-of-the-wtf-files.-td21550637.html
and attached file irc_chat.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106409</commentid>
    <comment_count>5</comment_count>
      <attachid>26877</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-01-20 16:54:55 -0800</bug_when>
    <thetext>Created attachment 26877
Proposed patch, v2

Added CONTRIBUTORS and fixed couple of style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106484</commentid>
    <comment_count>6</comment_count>
      <attachid>26901</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-01-21 12:07:53 -0800</bug_when>
    <thetext>Created attachment 26901
review notes (in IRC) addressed

- renamed CONTRIBUTORS to CONTRIBUTORS.pthreads-win32
- updated ChangeLog
- removed &apos;::&apos; for Win32 APIs
- build release on Win, no warnings. Not sure where to use ASSERT_UNUSED.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106487</commentid>
    <comment_count>7</comment_count>
      <attachid>26901</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-21 12:16:31 -0800</bug_when>
    <thetext>Comment on attachment 26901
review notes (in IRC) addressed

r=me

Perhaps MSVC doesn&apos;t warn about unused variable, or maybe we have that warning disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106584</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-01-22 00:33:11 -0800</bug_when>
    <thetext>Committed revision 40122.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26782</attachid>
            <date>2009-01-15 19:56:04 -0800</date>
            <delta_ts>2009-01-20 16:54:55 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>win32.txt</filename>
            <type>text/plain</type>
            <size>18740</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzOGJlYzI3Li43ODdjOGY1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMDktMDEtMTUgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzczCisKKyAgICAgICAgSW1wbGVtZW50IFRo
cmVhZENvbmRpdGlvbjo6dGltZWRXYWl0KCkuCisgICAgICAgIFNpbmNlIHdlIGJvcnJvdyB0aGUg
Y29kZSBmb3IgY29uZGl0aW9uIHZhcmlhYmxlcyBmcm9tIG90aGVyIHNvdXJjZXMsCisgICAgICAg
IEkgZGlkIHRoZSBzYW1lIGZvciB0aW1lZFdhaXQoKS4gU2VlIGNvbW1lbnRzIGluIFRocmVhZGlu
Z1dpbi5jcHAgZm9yCisgICAgICAgIHJhdGlvbmFsZSBhbmQgbW9yZSBpbmZvLgorCisgICAgICAg
ICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOiBhZGRp
dGlvbmFsIGluZm8gYW5kIHB0aHJlYWQtd2luMzIgbGljZW5zZSBhdCB0aGUgYmVnaW5uaW5nLgor
ICAgICAgICAoV1RGOjpQbGF0Zm9ybUNvbmRpdGlvbjo6dGltZWRXYWl0KTogbmV3IG1ldGhvZCwg
ZGVyaXZlZCBmcm9tIHB0aHJlYWRzLXdpbjMyLgorICAgICAgICAoV1RGOjpQbGF0Zm9ybUNvbmRp
dGlvbjo6c2lnbmFsKTogc2FtZQorICAgICAgICAoV1RGOjpUaHJlYWRDb25kaXRpb246OlRocmVh
ZENvbmRpdGlvbik6CisgICAgICAgIChXVEY6OlRocmVhZENvbmRpdGlvbjo6flRocmVhZENvbmRp
dGlvbik6CisgICAgICAgIChXVEY6OlRocmVhZENvbmRpdGlvbjo6d2FpdCk6IHRoaXMgbm93IGNh
bGxzIFBsYXRmb3JtQ29uZGl0aW9uOjp0aW1lZFdhaXQuCisgICAgICAgIChXVEY6OlRocmVhZENv
bmRpdGlvbjo6dGltZWRXYWl0KTogc2FtZQorICAgICAgICAoV1RGOjpUaHJlYWRDb25kaXRpb246
OnNpZ25hbCk6IHRoaXMgbm93IGNhbGxzIFBsYXRmb3JtQ29uZGl0aW9uOjpzaWduYWwuCisgICAg
ICAgIChXVEY6OlRocmVhZENvbmRpdGlvbjo6YnJvYWRjYXN0KTogc2FtZQorCiAyMDA5LTAxLTE0
ICBBZGFtIFRyZWF0ICA8YWRhbS50cmVhdEB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgQnVp
bGQgZml4IGZvciBRdCBmcm9tIERtaXRyeSBUaXRvdi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3d0Zi9UaHJlYWRpbmcuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaAppbmRl
eCAxYjE3ZWViLi4xZjM2ODdlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFk
aW5nLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oCkBAIC0xMzIsMTIgKzEz
MiwxNSBAQCBzdHJ1Y3QgUGxhdGZvcm1NdXRleCB7CiAgICAgc2l6ZV90IG1fcmVjdXJzaW9uQ291
bnQ7CiB9Owogc3RydWN0IFBsYXRmb3JtQ29uZGl0aW9uIHsKLSAgICBzaXplX3QgbV90aW1lZE91
dDsKLSAgICBzaXplX3QgbV9ibG9ja2VkOwotICAgIHNpemVfdCBtX3dhaXRpbmdGb3JSZW1vdmFs
OwotICAgIEhBTkRMRSBtX2dhdGU7Ci0gICAgSEFORExFIG1fcXVldWU7Ci0gICAgSEFORExFIG1f
bXV0ZXg7CisgICAgc2l6ZV90IG1fd2FpdGVyc0dvbmU7CisgICAgc2l6ZV90IG1fd2FpdGVyc0Js
b2NrZWQ7CisgICAgc2l6ZV90IG1fd2FpdGVyc1RvVW5ibG9jazsgCisgICAgSEFORExFIG1fYmxv
Y2tMb2NrOworICAgIEhBTkRMRSBtX2Jsb2NrUXVldWU7CisgICAgSEFORExFIG1fdW5ibG9ja0xv
Y2s7CisKKyAgICBib29sIHRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiwgRFdPUkQgZHVyYXRpb25N
aWxsaXNlY29uZHMpOworICAgIHZvaWQgc2lnbmFsKGJvb2wgdW5ibG9ja0FsbCk7CiB9OwogI2Vs
c2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1NdXRleDsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1dp
bi5jcHAKaW5kZXggODBhNWJmMy4uZGY5NmFlMSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
d3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1dp
bi5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNCw0MCArMjUsNjAgQEAKICAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoZXJlIGFyZSBudW1lcm91cyBh
Y2FkZW1pYyBhbmQgcHJhY3RpY2FsIHdvcmtzIG9uIGhvdyB0byBpbXBsZW1lbnQgcHRocmVhZF9j
b25kX3dhaXQvcHRocmVhZF9jb25kX3NpZ25hbC9wdGhyZWFkX2NvbmRfYnJvYWRjYXN0CisgKiBm
dW5jdGlvbnMgb24gV2luMzIuIEhlcmUgaXMgb25lIGV4YW1wbGU6IGh0dHA6Ly93d3cuY3Mud3Vz
dGwuZWR1L35zY2htaWR0L3dpbjMyLWN2LTEuaHRtbCB3aGljaCBpcyB3aWRlbHkgY3JlZGl0ZWQg
YXMgYSAnc3RhcnRpbmcgcG9pbnQnCisgKiBvZiBtb2Rlcm4gYXR0ZW1wdHMuIFRoZXJlIGFyZSBz
ZXZlcmFsIG1vcmUgb3IgbGVzcyBwcm92ZW4gaW1wbGVtZW50YXRpb25zLCBvbmUgaW4gQm9vc3Qg
QysrIGxpYnJhcnkgKGh0dHA6Ly93d3cuYm9vc3Qub3JnKSBhbmQgYW5vdGhlcgorICogaW4gcHRo
cmVhZHMtd2luMzIgKGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9wdGhyZWFkcy13aW4zMi8pLgorICoK
KyAqIFRoZSBudW1iZXIgb2YgYXJ0aWNsZXMgYW5kIGRpc2N1c3Npb25zIGlzIHRoZSBldmlkZW5j
ZSBvZiBzaWduaWZpY2FudCBkaWZmaWN1bHRpZXMgaW4gaW1wbGVtZW50aW5nIHRoZXNlIHByaW1p
dGl2ZXMgY29ycmVjdGx5LgorICogVGhlIGJyaWVmIHNlYXJjaCBvZiByZXZpc2lvbnMsIENoYW5n
ZUxvZyBlbnRyaWVzLCBkaXNjdXNzaW9ucyBpbiBjb21wLnByb2dyYW1taW5nLnRocmVhZHMgYW5k
IG90aGVyIHBsYWNlcyBjbGVhcmx5IGRvY3VtZW50cworICogbnVtZXJvdXMgcGl0ZmFsbHMgYW5k
IHBlcmZvcm1hbmNlIHByb2JsZW1zIHRoZSBhdXRob3JzIGhhZCB0byBvdmVyY29tZSB0byBhcnJp
dmUgdG8gdGhlIHN1aXRhYmxlIGltcGxlbWVudGF0aW9ucy4KKyAqIE9wdGltYWxseSwgV2ViS2l0
IHdvdWxkIHVzZSBvbmUgb2YgdGhvc2Ugc3VwcG9ydGVkL3Rlc3RlZCBsaWJyYXJpZXMgZGlyZWN0
bHkuIFRvIHJvbGwgb3V0IG91ciBvd24gaW1wbGVtZW50YXRpb24gaXMgaW1wcmFjdGljYWwsCisg
KiBpZiBldmVuIGZvciB0aGUgbGFjayBvZiBzdWZmaWNpZW50IHRlc3RpbmcuIEhvd2V2ZXIsIGEg
ZmFpdGhmdWwgcmVwcm9kdWN0aW9uIG9mIHRoZSBjb2RlIGZyb20gb25lIG9mIHRoZSBwb3B1bGFy
IHN1cHBvcnRlZAorICogbGlicmFyaWVzIHNlZW1zIHRvIGJlIGEgZ29vZCBjb21wcm9taXNlLgor
ICoKKyAqIFRoZSBlYXJseSBCb29zdCBpbXBsZW1lbnRhdGlvbiAoaHR0cDovL3d3dy5ib3hiYWNr
dXAub3JnL3RyYWMvYnJvd3Nlci9ib3gvbmljay93aW4vbGliL3dpbjMyL2Jvb3N0XzFfMzJfMC9s
aWJzL3RocmVhZC9zcmMvY29uZGl0aW9uLmNwcD9yZXY9MzApCisgKiBpcyBpZGVudGljYWwgdG8g
cHRocmVhZHMtd2luMzIgKGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9jZ2ktYmluL2N2c3dlYi5jZ2kv
cHRocmVhZHMvcHRocmVhZF9jb25kX3dhaXQuYz9yZXY9MS4xMCZjb250ZW50LXR5cGU9dGV4dC94
LWN2c3dlYi1tYXJrdXAmY3Zzcm9vdD1wdGhyZWFkcy13aW4zMikuCisgKiBDdXJyZW50IEJvb3N0
IHVzZXMgeWV0IGFub3RoZXIgKGFsdGhvdWdoIHNlZW1pbmdseSBlcXVpdmFsZW50KSBhbGdvcml0
aG0gd2hpY2ggY2FtZSBmcm9tIHRoZWlyICd0aHJlYWQgcmV3cml0ZScgZWZmb3J0LgogICoKLSAq
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0gKiBOb3RlOiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIGNv
bmRpdGlvbiB2YXJpYWJsZXMgdW5kZXIgdGhlIFdpbmRvd3MKLSAqIHBsYWZvcm0gd2FzIGJhc2Vk
IG9uIHRoYXQgb2YgdGhlIGV4Y2VsbGVudCBCT09TVCBDKysgbGlicmFyeS4gIEl0Ci0gKiBoYXMg
YmVlbiByZXdyaXR0ZW4gdG8gZml0IGluIHdpdGggdGhlIFdlYktpdCBhcmNoaXRlY3R1cmUgYW5k
IHRvCi0gKiB1c2UgaXRzIGNvZGluZyBjb252ZW50aW9ucy4KLSAqID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisgKiBUaGlzIGZpbGUgaW5jbHVkZXMgdGltZWRXYWl0L3NpZ25hbC9icm9hZGNhc3QgaW1w
bGVtZW50YXRpb25zIHRyYW5zbGF0ZWQgdG8gV2ViS2l0IGNvZGluZyBzdHlsZSBmcm9tIHRoZSBs
YXRlc3QgYWxnb3JpdGhtIGJ5CisgKiBBbGV4YW5kZXIgVGVyZWtob3YgYW5kIExvdWlzIFRob21h
cywgYXMgY2FwdHVyZWQgaGVyZTogaHR0cDovL3NvdXJjZXdhcmUub3JnL2NnaS1iaW4vY3Zzd2Vi
LmNnaS9wdGhyZWFkcy9wdGhyZWFkX2NvbmRfd2FpdC5jP3Jldj0xLjEwJmNvbnRlbnQtdHlwZT10
ZXh0L3gtY3Zzd2ViLW1hcmt1cCZjdnNyb290PXB0aHJlYWRzLXdpbjMyCisgKiBJdCByZXBsYWNl
cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlaXIgcHJldmlvdXMgYWxnb3JpdGhtLCBhbHNvIGRv
Y3VtZW50ZWQgaW4gdGhlIHNhbWUgc291cmNlIGFib3ZlLgorICogVGhlIG5hbWluZyBhbmQgY29t
bWVudHMgYXJlIGxlZnQgdmVyeSBjbG9zZSB0byBvcmlnaW5hbCB0byBlbmFibGUgZWFzeSBjcm9z
cy1jaGVjay4KICAqCi0gKiBUaGUgQm9vc3QgbGljZW5zZSBpcyB2aXJ0dWFsbHkgaWRlbnRpY2Fs
IHRvIHRoZSBBcHBsZSB2YXJpYXRpb24gYXQgdGhlCi0gKiB0b3Agb2YgdGhpcyBmaWxlLCBidXQg
aXMgaW5jbHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzOgorICogVGhlIGNvcnJlc3BvbmRpbmcg
UHRocmVhZHMtd2luMzIgTGljZW5zZSBpcyBpbmNsdWRlZCBiZWxvdy4KKyAqLworCisvKgorICog
ICAgICBQdGhyZWFkcy13aW4zMiAtIFBPU0lYIFRocmVhZHMgTGlicmFyeSBmb3IgV2luMzIKKyAq
ICAgICAgQ29weXJpZ2h0KEMpIDE5OTggSm9obiBFLiBCb3Nzb20KKyAqICAgICAgQ29weXJpZ2h0
KEMpIDE5OTksMjAwNSBQdGhyZWFkcy13aW4zMiBjb250cmlidXRvcnMKICAqCi0gKiBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMworICogICAg
ICBDb250YWN0IEVtYWlsOiBycGpAY2FsbGlzdG8uY2FuYmVycmEuZWR1LmF1CiAgKgotICogUGVy
bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g
b3Igb3JnYW5pemF0aW9uCi0gKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQg
YWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQotICogdGhpcyBsaWNlbnNlICh0
aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCi0g
KiBleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJp
dmF0aXZlIHdvcmtzIG9mIHRoZQotICogU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFy
dGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KLSAqIGRvIHNvLCBhbGwg
c3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorICogICAgICBUaGUgY3VycmVudCBsaXN0IG9mIGNv
bnRyaWJ1dG9ycyBpcyBjb250YWluZWQKKyAqICAgICAgaW4gdGhlIGZpbGUgQ09OVFJJQlVUT1JT
IGluY2x1ZGVkIHdpdGggdGhlIHNvdXJjZQorICogICAgICBjb2RlIGRpc3RyaWJ1dGlvbi4gVGhl
IGxpc3QgY2FuIGFsc28gYmUgc2VlbiBhdCB0aGUKKyAqICAgICAgZm9sbG93aW5nIFdvcmxkIFdp
ZGUgV2ViIGxvY2F0aW9uOgorICogICAgICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL3B0aHJl
YWRzLXdpbjMyL2NvbnRyaWJ1dG9ycy5odG1sCiAgKgotICogVGhlIGNvcHlyaWdodCBub3RpY2Vz
IGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKLSAq
IHRoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIsCi0gKiBtdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhl
IFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKLSAqIGFsbCBkZXJpdmF0aXZlIHdv
cmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKLSAq
IHdvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVj
dCBjb2RlIGdlbmVyYXRlZCBieQotICogYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorICog
ICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0g
KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF
RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVW
RU5UCi0gKiBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElO
RyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJ
TkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF
IFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICogICAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICAgICAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICAgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeSBpbiB0aGUgZmlsZSBDT1BZ
SU5HLkxJQjsKKyAqICAgICAgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLAorICogICAgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtNjks
NiArOTAsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2luY2x1ZGUgPHdpbmRv
d3MuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51
bWJlclNlZWQuaD4KQEAgLTI5MywxODAgKzMxNSwxNjMgQEAgdm9pZCBNdXRleDo6dW5sb2NrKCkK
ICAgICA6OkxlYXZlQ3JpdGljYWxTZWN0aW9uKCZtX211dGV4Lm1faW50ZXJuYWxNdXRleCk7CiB9
CiAKLXN0YXRpYyBjb25zdCBsb25nIE1heFNlbWFwaG9yZUNvdW50ID0gc3RhdGljX2Nhc3Q8bG9u
Zz4ofjBVTCA+PiAxKTsKLQotVGhyZWFkQ29uZGl0aW9uOjpUaHJlYWRDb25kaXRpb24oKQorYm9v
bCBQbGF0Zm9ybUNvbmRpdGlvbjo6dGltZWRXYWl0KFBsYXRmb3JtTXV0ZXgmIG11dGV4LCBEV09S
RCBkdXJhdGlvbk1pbGxpc2Vjb25kcykKIHsKLSAgICBtX2NvbmRpdGlvbi5tX3RpbWVkT3V0ID0g
MDsKLSAgICBtX2NvbmRpdGlvbi5tX2Jsb2NrZWQgPSAwOwotICAgIG1fY29uZGl0aW9uLm1fd2Fp
dGluZ0ZvclJlbW92YWwgPSAwOwotICAgIG1fY29uZGl0aW9uLm1fZ2F0ZSA9IDo6Q3JlYXRlU2Vt
YXBob3JlKDAsIDEsIDEsIDApOwotICAgIG1fY29uZGl0aW9uLm1fcXVldWUgPSA6OkNyZWF0ZVNl
bWFwaG9yZSgwLCAwLCBNYXhTZW1hcGhvcmVDb3VudCwgMCk7Ci0gICAgbV9jb25kaXRpb24ubV9t
dXRleCA9IDo6Q3JlYXRlTXV0ZXgoMCwgMCwgMCk7Ci0KLSAgICBpZiAoIW1fY29uZGl0aW9uLm1f
Z2F0ZSB8fCAhbV9jb25kaXRpb24ubV9xdWV1ZSB8fCAhbV9jb25kaXRpb24ubV9tdXRleCkgewot
ICAgICAgICBpZiAobV9jb25kaXRpb24ubV9nYXRlKQotICAgICAgICAgICAgOjpDbG9zZUhhbmRs
ZShtX2NvbmRpdGlvbi5tX2dhdGUpOwotICAgICAgICBpZiAobV9jb25kaXRpb24ubV9xdWV1ZSkK
LSAgICAgICAgICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRpb24ubV9xdWV1ZSk7Ci0gICAgICAg
IGlmIChtX2NvbmRpdGlvbi5tX211dGV4KQotICAgICAgICAgICAgOjpDbG9zZUhhbmRsZShtX2Nv
bmRpdGlvbi5tX211dGV4KTsKLSAgICB9Ci19Ci0KLVRocmVhZENvbmRpdGlvbjo6flRocmVhZENv
bmRpdGlvbigpCi17Ci0gICAgOjpDbG9zZUhhbmRsZShtX2NvbmRpdGlvbi5tX2dhdGUpOwotICAg
IDo6Q2xvc2VIYW5kbGUobV9jb25kaXRpb24ubV9xdWV1ZSk7Ci0gICAgOjpDbG9zZUhhbmRsZSht
X2NvbmRpdGlvbi5tX211dGV4KTsKLX0KLSAgICAKLXZvaWQgVGhyZWFkQ29uZGl0aW9uOjp3YWl0
KE11dGV4JiBtdXRleCkKLXsKLSAgICBQbGF0Zm9ybU11dGV4JiBjcyA9IG11dGV4LmltcGwoKTsK
LQogICAgIC8vIEVudGVyIHRoZSB3YWl0IHN0YXRlLgotICAgIERXT1JEIHJlcyA9IDo6V2FpdEZv
clNpbmdsZU9iamVjdChtX2NvbmRpdGlvbi5tX2dhdGUsIElORklOSVRFKTsKKyAgICBEV09SRCBy
ZXMgPSA6OldhaXRGb3JTaW5nbGVPYmplY3QobV9ibG9ja0xvY2ssIElORklOSVRFKTsKICAgICBB
U1NFUlQocmVzID09IFdBSVRfT0JKRUNUXzApOwotICAgICsrbV9jb25kaXRpb24ubV9ibG9ja2Vk
OwotICAgIHJlcyA9IDo6UmVsZWFzZVNlbWFwaG9yZShtX2NvbmRpdGlvbi5tX2dhdGUsIDEsIDAp
OworICAgICsrbV93YWl0ZXJzQmxvY2tlZDsKKyAgICByZXMgPSA6OlJlbGVhc2VTZW1hcGhvcmUo
bV9ibG9ja0xvY2ssIDEsIDApOwogICAgIEFTU0VSVChyZXMpOwogCi0gICAgOjpMZWF2ZUNyaXRp
Y2FsU2VjdGlvbigmY3MubV9pbnRlcm5hbE11dGV4KTsKKyAgICA6OkxlYXZlQ3JpdGljYWxTZWN0
aW9uKCZtdXRleC5tX2ludGVybmFsTXV0ZXgpOwogCi0gICAgcmVzID0gOjpXYWl0Rm9yU2luZ2xl
T2JqZWN0KG1fY29uZGl0aW9uLm1fcXVldWUsIElORklOSVRFKTsKLSAgICBBU1NFUlQocmVzID09
IFdBSVRfT0JKRUNUXzApOworICAgIC8vIE1haW4gd2FpdCAtIHVzZSB0aW1lb3V0LgorICAgIGJv
b2wgdGltZWRPdXQgPSAoOjpXYWl0Rm9yU2luZ2xlT2JqZWN0KG1fYmxvY2tRdWV1ZSwgZHVyYXRp
b25NaWxsaXNlY29uZHMpID09IFdBSVRfVElNRU9VVCk7CiAKLSAgICByZXMgPSA6OldhaXRGb3JT
aW5nbGVPYmplY3QobV9jb25kaXRpb24ubV9tdXRleCwgSU5GSU5JVEUpOworICAgIHJlcyA9IDo6
V2FpdEZvclNpbmdsZU9iamVjdChtX3VuYmxvY2tMb2NrLCBJTkZJTklURSk7CiAgICAgQVNTRVJU
KHJlcyA9PSBXQUlUX09CSkVDVF8wKTsKLSAgICBzaXplX3Qgd2FzV2FpdGluZyA9IG1fY29uZGl0
aW9uLm1fd2FpdGluZ0ZvclJlbW92YWw7Ci0gICAgc2l6ZV90IHdhc1RpbWVkT3V0ID0gbV9jb25k
aXRpb24ubV90aW1lZE91dDsKLSAgICBpZiAod2FzV2FpdGluZyAhPSAwKSB7Ci0gICAgICAgIGlm
ICgtLW1fY29uZGl0aW9uLm1fd2FpdGluZ0ZvclJlbW92YWwgPT0gMCkgewotICAgICAgICAgICAg
aWYgKG1fY29uZGl0aW9uLm1fYmxvY2tlZCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzID0g
OjpSZWxlYXNlU2VtYXBob3JlKG1fY29uZGl0aW9uLm1fZ2F0ZSwgMSwgMCk7ICAvLyBvcGVuIG1f
Z2F0ZQotICAgICAgICAgICAgICAgIEFTU0VSVChyZXMpOwotICAgICAgICAgICAgICAgIHdhc1dh
aXRpbmcgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobV9jb25kaXRp
b24ubV90aW1lZE91dCAhPSAwKQotICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLm1fdGltZWRP
dXQgPSAwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICgrK21fY29uZGl0aW9uLm1fdGltZWRP
dXQgPT0gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KSgpIC8gMikpIHsKLSAg
ICAgICAgLy8gdGltZW91dCBvY2N1cmVkLCBub3JtYWxpemUgdGhlIG1fY29uZGl0aW9uLm1fdGlt
ZWRPdXQgY291bnQKKworICAgIGludCBzaWduYWxzTGVmdCA9IG1fd2FpdGVyc1RvVW5ibG9jazsK
KworICAgIGlmIChtX3dhaXRlcnNUb1VuYmxvY2sgIT0gMCkKKyAgICAgICAgLS1tX3dhaXRlcnNU
b1VuYmxvY2s7CisgICAgZWxzZSBpZiAoKyttX3dhaXRlcnNHb25lID09IChJTlRfTUFYIC8gMikp
IHsgLy8gdGltZW91dC9jYW5jZWxlZCBvciBzcHVyaW91cyBzZW1hcGhvcmUKKyAgICAgICAgLy8g
dGltZW91dCBvciBzcHVyaW91cyB3YWtldXAgb2NjdXJlZCwgbm9ybWFsaXplIHRoZSBtX3dhaXRl
cnNHb25lIGNvdW50CiAgICAgICAgIC8vIHRoaXMgbWF5IG9jY3VyIGlmIG1hbnkgY2FsbHMgdG8g
d2FpdCB3aXRoIGEgdGltZW91dCBhcmUgbWFkZSBhbmQKICAgICAgICAgLy8gbm8gY2FsbCB0byBu
b3RpZnlfKiBpcyBtYWRlCi0gICAgICAgIHJlcyA9IDo6V2FpdEZvclNpbmdsZU9iamVjdChtX2Nv
bmRpdGlvbi5tX2dhdGUsIElORklOSVRFKTsKKyAgICAgICAgcmVzID0gOjpXYWl0Rm9yU2luZ2xl
T2JqZWN0KG1fYmxvY2tMb2NrLCBJTkZJTklURSk7CiAgICAgICAgIEFTU0VSVChyZXMgPT0gV0FJ
VF9PQkpFQ1RfMCk7Ci0gICAgICAgIG1fY29uZGl0aW9uLm1fYmxvY2tlZCAtPSBtX2NvbmRpdGlv
bi5tX3RpbWVkT3V0OwotICAgICAgICByZXMgPSA6OlJlbGVhc2VTZW1hcGhvcmUobV9jb25kaXRp
b24ubV9nYXRlLCAxLCAwKTsKKyAgICAgICAgbV93YWl0ZXJzQmxvY2tlZCAtPSBtX3dhaXRlcnNH
b25lOworICAgICAgICByZXMgPSA6OlJlbGVhc2VTZW1hcGhvcmUobV9ibG9ja0xvY2ssIDEsIDAp
OwogICAgICAgICBBU1NFUlQocmVzKTsKLSAgICAgICAgbV9jb25kaXRpb24ubV90aW1lZE91dCA9
IDA7CisgICAgICAgIG1fd2FpdGVyc0dvbmUgPSAwOwogICAgIH0KLSAgICByZXMgPSA6OlJlbGVh
c2VNdXRleChtX2NvbmRpdGlvbi5tX211dGV4KTsKKworICAgIHJlcyA9IDo6UmVsZWFzZU11dGV4
KG1fdW5ibG9ja0xvY2spOwogICAgIEFTU0VSVChyZXMpOwogCi0gICAgaWYgKHdhc1dhaXRpbmcg
PT0gMSkgewotICAgICAgICBmb3IgKC8qKi8gOyB3YXNUaW1lZE91dDsgLS13YXNUaW1lZE91dCkg
ewotICAgICAgICAgICAgLy8gYmV0dGVyIG5vdyB0aGFuIHNwdXJpb3VzIGxhdGVyCi0gICAgICAg
ICAgICByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmplY3QobV9jb25kaXRpb24ubV9xdWV1ZSwgSU5G
SU5JVEUpOwotICAgICAgICAgICAgQVNTRVJUKHJlcyA9PSBXQUlUX09CSkVDVF8wKTsKLSAgICAg
ICAgfQotICAgICAgICByZXMgPSA6OlJlbGVhc2VTZW1hcGhvcmUobV9jb25kaXRpb24ubV9nYXRl
LCAxLCAwKTsKKyAgICBpZiAoc2lnbmFsc0xlZnQgPT0gMSkgeworICAgICAgICByZXMgPSA6OlJl
bGVhc2VTZW1hcGhvcmUobV9ibG9ja0xvY2ssIDEsIDApOyAvLyBPcGVuIHRoZSBnYXRlLgogICAg
ICAgICBBU1NFUlQocmVzKTsKICAgICB9CiAKLSAgICA6OkVudGVyQ3JpdGljYWxTZWN0aW9uICgm
Y3MubV9pbnRlcm5hbE11dGV4KTsKLX0KKyAgICA6OkVudGVyQ3JpdGljYWxTZWN0aW9uICgmbXV0
ZXgubV9pbnRlcm5hbE11dGV4KTsKIAotYm9vbCBUaHJlYWRDb25kaXRpb246OnRpbWVkV2FpdChN
dXRleCYgbXV0ZXgsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpCi17Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudC4KLSAgICBBU1NFUlQoZmFsc2UpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
IXRpbWVkT3V0OwogfQogCi12b2lkIFRocmVhZENvbmRpdGlvbjo6c2lnbmFsKCkKK3ZvaWQgUGxh
dGZvcm1Db25kaXRpb246OnNpZ25hbChib29sIHVuYmxvY2tBbGwpCiB7Ci0gICAgdW5zaWduZWQg
c2lnbmFscyA9IDA7CisgICAgdW5zaWduZWQgc2lnbmFsc1RvSXNzdWUgPSAwOwogCi0gICAgRFdP
UkQgcmVzID0gOjpXYWl0Rm9yU2luZ2xlT2JqZWN0KG1fY29uZGl0aW9uLm1fbXV0ZXgsIElORklO
SVRFKTsKKyAgICBEV09SRCByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmplY3QobV91bmJsb2NrTG9j
aywgSU5GSU5JVEUpOwogICAgIEFTU0VSVChyZXMgPT0gV0FJVF9PQkpFQ1RfMCk7CiAKLSAgICBp
ZiAobV9jb25kaXRpb24ubV93YWl0aW5nRm9yUmVtb3ZhbCAhPSAwKSB7IC8vIHRoZSBtX2dhdGUg
aXMgYWxyZWFkeSBjbG9zZWQKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uLm1fYmxvY2tlZCA9PSAw
KSB7Ci0gICAgICAgICAgICByZXMgPSA6OlJlbGVhc2VNdXRleChtX2NvbmRpdGlvbi5tX211dGV4
KTsKKyAgICBpZiAobV93YWl0ZXJzVG9VbmJsb2NrICE9IDApIHsgLy8gdGhlIGdhdGUgaXMgYWxy
ZWFkeSBjbG9zZWQKKyAgICAgICAgaWYgKG1fd2FpdGVyc0Jsb2NrZWQgPT0gMCkgeyAvLyBuby1v
cAorICAgICAgICAgICAgcmVzID0gOjpSZWxlYXNlTXV0ZXgobV91bmJsb2NrTG9jayk7CiAgICAg
ICAgICAgICBBU1NFUlQocmVzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgICsrbV9jb25kaXRpb24ubV93YWl0aW5nRm9yUmVtb3ZhbDsKLSAgICAgICAgLS1tX2Nv
bmRpdGlvbi5tX2Jsb2NrZWQ7Ci0KLSAgICAgICAgc2lnbmFscyA9IDE7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgcmVzID0gOjpXYWl0Rm9yU2luZ2xlT2JqZWN0KG1fY29uZGl0aW9uLm1fZ2F0ZSwg
SU5GSU5JVEUpOworICAgICAgICBpZiAodW5ibG9ja0FsbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgc2lnbmFsc1RvSXNzdWUgPSBtX3dhaXRlcnNCbG9ja2VkOworICAgICAgICAgICAgbV93YWl0
ZXJzVG9VbmJsb2NrICs9IG1fd2FpdGVyc0Jsb2NrZWQ7CisgICAgICAgICAgICBtX3dhaXRlcnNC
bG9ja2VkID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNpZ25hbHNUb0lzc3Vl
ID0gMTsKKyAgICAgICAgICAgICsrbV93YWl0ZXJzVG9VbmJsb2NrOworICAgICAgICAgICAgLS1t
X3dhaXRlcnNCbG9ja2VkOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3dhaXRlcnNCbG9j
a2VkID4gbV93YWl0ZXJzR29uZSkgeworICAgICAgICByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmpl
Y3QobV9ibG9ja0xvY2ssIElORklOSVRFKTsgLy8gQ2xvc2UgdGhlIGdhdGUuCiAgICAgICAgIEFT
U0VSVChyZXMgPT0gV0FJVF9PQkpFQ1RfMCk7Ci0gICAgICAgIGlmIChtX2NvbmRpdGlvbi5tX2Js
b2NrZWQgPiBtX2NvbmRpdGlvbi5tX3RpbWVkT3V0KSB7Ci0gICAgICAgICAgICBpZiAobV9jb25k
aXRpb24ubV90aW1lZE91dCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24ubV9i
bG9ja2VkIC09IG1fY29uZGl0aW9uLm1fdGltZWRPdXQ7Ci0gICAgICAgICAgICAgICAgbV9jb25k
aXRpb24ubV90aW1lZE91dCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzaWduYWxz
ID0gbV9jb25kaXRpb24ubV93YWl0aW5nRm9yUmVtb3ZhbCA9IDE7Ci0gICAgICAgICAgICAtLW1f
Y29uZGl0aW9uLm1fYmxvY2tlZDsKKyAgICAgICAgaWYgKG1fd2FpdGVyc0dvbmUgIT0gMCkgewor
ICAgICAgICAgICAgbV93YWl0ZXJzQmxvY2tlZCAtPSBtX3dhaXRlcnNHb25lOworICAgICAgICAg
ICAgbV93YWl0ZXJzR29uZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVuYmxvY2tBbGwp
IHsKKyAgICAgICAgICAgIHNpZ25hbHNUb0lzc3VlID0gbV93YWl0ZXJzQmxvY2tlZDsKKyAgICAg
ICAgICAgIG1fd2FpdGVyc1RvVW5ibG9jayA9IG1fd2FpdGVyc0Jsb2NrZWQ7CisgICAgICAgICAg
ICBtX3dhaXRlcnNCbG9ja2VkID0gMDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJl
cyA9IDo6UmVsZWFzZVNlbWFwaG9yZShtX2NvbmRpdGlvbi5tX2dhdGUsIDEsIDApOwotICAgICAg
ICAgICAgQVNTRVJUKHJlcyk7CisgICAgICAgICAgICBzaWduYWxzVG9Jc3N1ZSA9IDE7CisgICAg
ICAgICAgICBtX3dhaXRlcnNUb1VuYmxvY2sgPSAxOworICAgICAgICAgICAgLS1tX3dhaXRlcnNC
bG9ja2VkOwogICAgICAgICB9CisgICAgfSBlbHNlIHsgLy8gTm8tb3AuCisgICAgICAgIHJlcyA9
OjpSZWxlYXNlTXV0ZXgobV91bmJsb2NrTG9jayk7CisgICAgICAgIEFTU0VSVChyZXMpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmVzID06OlJlbGVhc2VNdXRleChtX2NvbmRpdGlv
bi5tX211dGV4KTsKKyAgICByZXMgPTo6UmVsZWFzZU11dGV4KG1fdW5ibG9ja0xvY2spOwogICAg
IEFTU0VSVChyZXMpOwogCi0gICAgaWYgKHNpZ25hbHMpIHsKLSAgICAgICAgcmVzID0gOjpSZWxl
YXNlU2VtYXBob3JlKG1fY29uZGl0aW9uLm1fcXVldWUsIHNpZ25hbHMsIDApOworICAgIGlmIChz
aWduYWxzVG9Jc3N1ZSkgeworICAgICAgICByZXMgPSA6OlJlbGVhc2VTZW1hcGhvcmUobV9ibG9j
a1F1ZXVlLCBzaWduYWxzVG9Jc3N1ZSwgMCk7CiAgICAgICAgIEFTU0VSVChyZXMpOwogICAgIH0K
IH0KIAotdm9pZCBUaHJlYWRDb25kaXRpb246OmJyb2FkY2FzdCgpCitzdGF0aWMgY29uc3QgbG9u
ZyBNYXhTZW1hcGhvcmVDb3VudCA9IHN0YXRpY19jYXN0PGxvbmc+KH4wVUwgPj4gMSk7CisKK1Ro
cmVhZENvbmRpdGlvbjo6VGhyZWFkQ29uZGl0aW9uKCkKIHsKLSAgICB1bnNpZ25lZCBzaWduYWxz
ID0gMDsKKyAgICBtX2NvbmRpdGlvbi5tX3dhaXRlcnNHb25lID0gMDsKKyAgICBtX2NvbmRpdGlv
bi5tX3dhaXRlcnNCbG9ja2VkID0gMDsKKyAgICBtX2NvbmRpdGlvbi5tX3dhaXRlcnNUb1VuYmxv
Y2sgPSAwOworICAgIG1fY29uZGl0aW9uLm1fYmxvY2tMb2NrID0gOjpDcmVhdGVTZW1hcGhvcmUo
MCwgMSwgMSwgMCk7CisgICAgbV9jb25kaXRpb24ubV9ibG9ja1F1ZXVlID0gOjpDcmVhdGVTZW1h
cGhvcmUoMCwgMCwgTWF4U2VtYXBob3JlQ291bnQsIDApOworICAgIG1fY29uZGl0aW9uLm1fdW5i
bG9ja0xvY2sgPSA6OkNyZWF0ZU11dGV4KDAsIDAsIDApOworCisgICAgaWYgKCFtX2NvbmRpdGlv
bi5tX2Jsb2NrTG9jayB8fCAhbV9jb25kaXRpb24ubV9ibG9ja1F1ZXVlIHx8ICFtX2NvbmRpdGlv
bi5tX3VuYmxvY2tMb2NrKSB7CisgICAgICAgIGlmIChtX2NvbmRpdGlvbi5tX2Jsb2NrTG9jaykK
KyAgICAgICAgICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRpb24ubV9ibG9ja0xvY2spOworICAg
ICAgICBpZiAobV9jb25kaXRpb24ubV9ibG9ja1F1ZXVlKQorICAgICAgICAgICAgOjpDbG9zZUhh
bmRsZShtX2NvbmRpdGlvbi5tX2Jsb2NrUXVldWUpOworICAgICAgICBpZiAobV9jb25kaXRpb24u
bV91bmJsb2NrTG9jaykKKyAgICAgICAgICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRpb24ubV91
bmJsb2NrTG9jayk7CisgICAgfQorfQogCi0gICAgRFdPUkQgcmVzID0gOjpXYWl0Rm9yU2luZ2xl
T2JqZWN0KG1fY29uZGl0aW9uLm1fbXV0ZXgsIElORklOSVRFKTsKLSAgICBBU1NFUlQocmVzID09
IFdBSVRfT0JKRUNUXzApOworVGhyZWFkQ29uZGl0aW9uOjp+VGhyZWFkQ29uZGl0aW9uKCkKK3sK
KyAgICA6OkNsb3NlSGFuZGxlKG1fY29uZGl0aW9uLm1fYmxvY2tMb2NrKTsKKyAgICA6OkNsb3Nl
SGFuZGxlKG1fY29uZGl0aW9uLm1fYmxvY2tRdWV1ZSk7CisgICAgOjpDbG9zZUhhbmRsZShtX2Nv
bmRpdGlvbi5tX3VuYmxvY2tMb2NrKTsKK30KIAotICAgIGlmIChtX2NvbmRpdGlvbi5tX3dhaXRp
bmdGb3JSZW1vdmFsICE9IDApIHsgLy8gdGhlIG1fZ2F0ZSBpcyBhbHJlYWR5IGNsb3NlZAotICAg
ICAgICBpZiAobV9jb25kaXRpb24ubV9ibG9ja2VkID09IDApIHsKLSAgICAgICAgICAgIHJlcyA9
IDo6UmVsZWFzZU11dGV4KG1fY29uZGl0aW9uLm1fbXV0ZXgpOwotICAgICAgICAgICAgQVNTRVJU
KHJlcyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KK3ZvaWQgVGhyZWFkQ29uZGl0
aW9uOjp3YWl0KE11dGV4JiBtdXRleCkKK3sKKyAgICBtX2NvbmRpdGlvbi50aW1lZFdhaXQobXV0
ZXguaW1wbCgpLCBJTkZJTklURSk7Cit9CiAKLSAgICAgICAgbV9jb25kaXRpb24ubV93YWl0aW5n
Rm9yUmVtb3ZhbCArPSAoc2lnbmFscyA9IG1fY29uZGl0aW9uLm1fYmxvY2tlZCk7Ci0gICAgICAg
IG1fY29uZGl0aW9uLm1fYmxvY2tlZCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVzID0g
OjpXYWl0Rm9yU2luZ2xlT2JqZWN0KG1fY29uZGl0aW9uLm1fZ2F0ZSwgSU5GSU5JVEUpOwotICAg
ICAgICBBU1NFUlQocmVzID09IFdBSVRfT0JKRUNUXzApOwotICAgICAgICBpZiAobV9jb25kaXRp
b24ubV9ibG9ja2VkID4gbV9jb25kaXRpb24ubV90aW1lZE91dCkgewotICAgICAgICAgICAgaWYg
KG1fY29uZGl0aW9uLm1fdGltZWRPdXQgIT0gMCkgewotICAgICAgICAgICAgICAgIG1fY29uZGl0
aW9uLm1fYmxvY2tlZCAtPSBtX2NvbmRpdGlvbi5tX3RpbWVkT3V0OwotICAgICAgICAgICAgICAg
IG1fY29uZGl0aW9uLm1fdGltZWRPdXQgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
c2lnbmFscyA9IG1fY29uZGl0aW9uLm1fd2FpdGluZ0ZvclJlbW92YWwgPSBtX2NvbmRpdGlvbi5t
X2Jsb2NrZWQ7Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbi5tX2Jsb2NrZWQgPSAwOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmVzID0gOjpSZWxlYXNlU2VtYXBob3JlKG1fY29uZGl0
aW9uLm1fZ2F0ZSwgMSwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVzKTsKLSAgICAgICAgfQot
ICAgIH0KK2Jvb2wgVGhyZWFkQ29uZGl0aW9uOjp0aW1lZFdhaXQoTXV0ZXgmIG11dGV4LCBkb3Vi
bGUgYWJzb2x1dGVUaW1lKQoreworICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IFdURjo6Y3VycmVu
dFRpbWUoKTsKIAotICAgIHJlcyA9IDo6UmVsZWFzZU11dGV4KG1fY29uZGl0aW9uLm1fbXV0ZXgp
OwotICAgIEFTU0VSVChyZXMpOworICAgIC8vIFRpbWUgaXMgaW4gdGhlIHBhc3QgLSByZXR1cm4g
aW1tZWRpYXRlbHkuCisgICAgaWYgKGFic29sdXRlVGltZSA8IGN1cnJlbnRUaW1lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoc2lnbmFscykgewotICAgICAgICByZXMgPSA6OlJl
bGVhc2VTZW1hcGhvcmUobV9jb25kaXRpb24ubV9xdWV1ZSwgc2lnbmFscywgMCk7Ci0gICAgICAg
IEFTU0VSVChyZXMpOwotICAgIH0KKyAgICBkb3VibGUgaW50ZXJ2YWxNaWxsaXNlY29uZHMgPSAo
YWJzb2x1dGVUaW1lIC0gY3VycmVudFRpbWUpICogMTAwMC4wOworICAgIGlmIChpbnRlcnZhbE1p
bGxpc2Vjb25kcyA+PSBJTlRfTUFYKQorICAgICAgICBpbnRlcnZhbE1pbGxpc2Vjb25kcyA9IElO
VF9NQVg7CisKKyAgICByZXR1cm4gbV9jb25kaXRpb24udGltZWRXYWl0KG11dGV4LmltcGwoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaW50ZXJ2YWxNaWxsaXNlY29uZHMpKTsKK30KKwor
dm9pZCBUaHJlYWRDb25kaXRpb246OnNpZ25hbCgpCit7CisgICAgbV9jb25kaXRpb24uc2lnbmFs
KGZhbHNlKTsgLy8gVW5ibG9jayBvbmx5IDEgdGhyZWFkLgorfQorCit2b2lkIFRocmVhZENvbmRp
dGlvbjo6YnJvYWRjYXN0KCkKK3sKKyAgICBtX2NvbmRpdGlvbi5zaWduYWwodHJ1ZSk7IC8vIFVu
YmxvY2sgYWxsIHRocmVhZHMuCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>26876</attachid>
            <date>2009-01-20 16:36:12 -0800</date>
            <delta_ts>2009-01-20 16:36:12 -0800</delta_ts>
            <desc>irc_chat.txt</desc>
            <filename>irc_chat.txt</filename>
            <type>text/plain</type>
            <size>1264</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGltaWNoOiBvdGhlcm1hY2llajogdGhlIGZpbGUgdGhlcmUgaXMgZ29pbmcgdG8gaGF2ZSAyIGxp
Y2Vuc2VzIGluIGl0IC0gbm9ybWFsIFdlYktpdCBvbmUgYW5kIExHUEwgZnJvbSB0aGUgbGlicmFy
eSwgcHRocmVhZHMtd2luMzIuCmRpbWljaDogb3RoZXJtYWNpZWo6IEkgZGVyaXZlZCBjb3VwbGUg
b2YgZnVuY3Rpb25zIGZyb20gdGhlcmUKZGltaWNoOiBvdGhlcm1hY2llajogU28gdGhlIHF1ZXN0
aW9uIGlzIGlmIGhhdmluZyAyIGxpY2Vuc2VzIGluIHRoZSBzYW1lIGZpbGUgaXMgYSBzYW5lIGlk
ZWEgYW5kIGlmIHdlIGNhbiByZWFsbHkgdXNlIExHUEwgc291cmNlIHRoaXMgd2F5Cm90aGVybWFj
aWVqOiBkaW1pY2g6IGlzIHRoZSBwdGhyZWFkcyBMR1BMIGluIGFueSB3YXkgZGlmZmVyZW50Pwpv
dGhlcm1hY2llajogZnJvbSB0aGUgb25lIHdlIG5vcm1hbGx5IHVzZSBpbiBXZWJLaXQ/CmRpbWlj
aDogb3RoZXJtYWNpZWo6IHRoZSBvbmUgaW4gdGhlIGZpbGUgaXMgYSBjb3B5IG9mIHRoZWlycwpv
dGhlcm1hY2llajogaXQncyBjZXJ0YWlubHkgZmluZSB0byBjb21iaW5lIExHUEwgY29kZSBmcm9t
IGRpZmZlcmVudCBzb3VyY2VzLCB5b3Ugc2hvdWxkIG9ubHkgbmVlZCBvbmUgY29weSBvZiB0aGUg
TEdQTCBoZWFkZXIgdy8gbXVsdGlwbGUgY29weXJpZ2h0cwpkaW1pY2g6IG90aGVybWFjaWVqOiBp
dCBoYXMgYSByZWZlcmVlbmNlIHRvIGEgZmlsZSB3aXRoIGNvbnRyaWJ1dG9ycywgSSB0aGluayBJ
IHNob3VsZCBhZGQgaXQgYWxvbmcKb3RoZXJtYWNpZWo6IGlmIHRoZXJlIGlzIGFsc28gQlNELWxp
Y2Vuc2VkIGNvZGUgaW4gdGhlIGZpbGUgeW91IHNob3VsZCBtZW50aW9uIGJvdGggbGljZW5zZXMK
b3RoZXJtYWNpZWo6IGlmIHRoZSBjb250cmlidXRvcnMgZG9uJ3Qgb3duIGNvcHlyaWdodCwgdGhl
biB3ZSBkb24ndCBuZWNlc3NhcmlseSBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGUKb3RoZXJtYWNp
ZWo6IGVzcGVjaWFsbHkgaWYgdGhlcmUgaXMgYSBVUkwgcmVmZXJlbmNpbmcgaXQKb3RoZXJtYWNp
ZWo6IHRoYXQgY3JlZGl0IGlzIG5vdCByZWFsbHkgcGFydCBvZiB0aGUgbGljZW5zZSBwZXIgc2Ug
YWZhaWN0Cm90aGVybWFjaWVqOiBidXQgaXQgaXMgbmljZSB0byBpbmNsdWRlIGl0CmRpbWljaDog
b3RoZXJtYWNpZWo6IEkgc2VlLiBTbyAyIGxpY2Vuc2VzIGFyZSBvaywgYW5kIGluY2x1ZGluZyB0
aGUgZmlsZSB3aXRoIG5hbWVzIGNvdWxkIGJlIGEgbmljZSB0aGluZy4Kb3RoZXJtYWNpZWo6IGRp
bWljaDogeWVwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26877</attachid>
            <date>2009-01-20 16:54:55 -0800</date>
            <delta_ts>2009-01-21 12:07:53 -0800</delta_ts>
            <desc>Proposed patch, v2</desc>
            <filename>win32_2.txt</filename>
            <type>text/plain</type>
            <size>24466</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzOGJlYzI3Li43ODdjOGY1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMDktMDEtMTUgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzczCisKKyAgICAgICAgSW1wbGVtZW50IFRo
cmVhZENvbmRpdGlvbjo6dGltZWRXYWl0KCkuCisgICAgICAgIFNpbmNlIHdlIGJvcnJvdyB0aGUg
Y29kZSBmb3IgY29uZGl0aW9uIHZhcmlhYmxlcyBmcm9tIG90aGVyIHNvdXJjZXMsCisgICAgICAg
IEkgZGlkIHRoZSBzYW1lIGZvciB0aW1lZFdhaXQoKS4gU2VlIGNvbW1lbnRzIGluIFRocmVhZGlu
Z1dpbi5jcHAgZm9yCisgICAgICAgIHJhdGlvbmFsZSBhbmQgbW9yZSBpbmZvLgorCisgICAgICAg
ICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdXaW4uY3BwOiBhZGRp
dGlvbmFsIGluZm8gYW5kIHB0aHJlYWQtd2luMzIgbGljZW5zZSBhdCB0aGUgYmVnaW5uaW5nLgor
ICAgICAgICAoV1RGOjpQbGF0Zm9ybUNvbmRpdGlvbjo6dGltZWRXYWl0KTogbmV3IG1ldGhvZCwg
ZGVyaXZlZCBmcm9tIHB0aHJlYWRzLXdpbjMyLgorICAgICAgICAoV1RGOjpQbGF0Zm9ybUNvbmRp
dGlvbjo6c2lnbmFsKTogc2FtZQorICAgICAgICAoV1RGOjpUaHJlYWRDb25kaXRpb246OlRocmVh
ZENvbmRpdGlvbik6CisgICAgICAgIChXVEY6OlRocmVhZENvbmRpdGlvbjo6flRocmVhZENvbmRp
dGlvbik6CisgICAgICAgIChXVEY6OlRocmVhZENvbmRpdGlvbjo6d2FpdCk6IHRoaXMgbm93IGNh
bGxzIFBsYXRmb3JtQ29uZGl0aW9uOjp0aW1lZFdhaXQuCisgICAgICAgIChXVEY6OlRocmVhZENv
bmRpdGlvbjo6dGltZWRXYWl0KTogc2FtZQorICAgICAgICAoV1RGOjpUaHJlYWRDb25kaXRpb246
OnNpZ25hbCk6IHRoaXMgbm93IGNhbGxzIFBsYXRmb3JtQ29uZGl0aW9uOjpzaWduYWwuCisgICAg
ICAgIChXVEY6OlRocmVhZENvbmRpdGlvbjo6YnJvYWRjYXN0KTogc2FtZQorCiAyMDA5LTAxLTE0
ICBBZGFtIFRyZWF0ICA8YWRhbS50cmVhdEB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgQnVp
bGQgZml4IGZvciBRdCBmcm9tIERtaXRyeSBUaXRvdi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL3d0Zi9DT05UUklCVVRPUlMgYi9KYXZhU2NyaXB0Q29yZS93dGYvQ09OVFJJQlVUT1JTCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZTBmMjYKLS0tIC9kZXYvbnVsbAor
KysgYi9KYXZhU2NyaXB0Q29yZS93dGYvQ09OVFJJQlVUT1JTCkBAIC0wLDAgKzEsMTM3IEBACitU
aGlzIGlzIGEgY29weSBvZiBDT05UUklCVVRPUlMgZmlsZSBmb3IgdGhlIFB0aHJlYWRzLXdpbjMy
IGxpYnJhcnksIGRvd25sb2FkZWQKK2Zyb20gaHR0cDovL3NvdXJjZXdhcmUub3JnL2NnaS1iaW4v
Y3Zzd2ViLmNnaS9+Y2hlY2tvdXR+L3B0aHJlYWRzL0NPTlRSSUJVVE9SUz9yZXY9MS4zMiZjdnNy
b290PXB0aHJlYWRzLXdpbjMyCisKK0luY2x1ZGVkIGhlcmUgdG8gY29tcGxpbWVudCB0aGUgUHRo
cmVhZHMtd2luMzIgbGljZW5zZSBoZWFkZXIgaW4gd3RmL1RocmVhZGluZ1dpbi5jcHAgZmlsZS4K
K1dlYktpdCBpcyB1c2luZyBkZXJpdmVkIHNvdXJjZXMgb2YgVGhyZWFkQ29uZGl0aW9uIGNvZGUg
ZnJvbSBQdGhyZWFkcy13aW4zMi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb250cmli
dXRvcnMgKGluIGFwcHJveGltYXRlIG9yZGVyIG9mIGFwcGVhcmFuY2UpCisKK1tTZWUgYWxzbyB0
aGUgQ2hhbmdlTG9nIGZpbGUgd2hlcmUgaW5kaXZpZHVhbHMgYXJlCithdHRyaWJ1dGVkIGluIGxv
ZyBlbnRyaWVzLiBMaWtld2lzZSBpbiB0aGUgRkFRIGZpbGUuXQorCitCZW4gRWxsaXN0b24JCWJq
ZSBhdCBjeWdudXMgZG90IGNvbQorCQkJCQlJbml0aWF0ZWQgdGhlIHByb2plY3Q7CisJCQkJCXNl
dHVwIHRoZSBwcm9qZWN0IGluZnJhc3RydWN0dXJlIChDVlMsIHdlYiBwYWdlLCBldGMuKTsKKwkJ
CQkJZWFybHkgcHJvdG90eXBlIHJvdXRpbmVzLgorUm9zcyBKb2huc29uCQlycGogYXQgY2FsbGlz
dG8gZG90IGNhbmJlcnJhIGRvdCBlZHUgZG90IGF1CisJCQkJCWVhcmx5IHByb3RvdHlwZSByb3V0
aW5lczsKKwkJCQkJb25nb2luZyBwcm9qZWN0IGNvb3JkaW5hdGlvbi9tYWludGVuYW5jZTsKKwkJ
CQkJaW1wbGVtZW50YXRpb24gb2Ygc3BpbiBsb2NrcyBhbmQgYmFycmllcnM7CisJCQkJCXZhcmlv
dXMgZW5oYW5jZW1lbnRzOworCQkJCQlidWcgZml4ZXM7CisJCQkJCWRvY3VtZW50YXRpb247CisJ
CQkJCXRlc3RzdWl0ZS4KK1JvYmVydCBDb2xxdWhvdW4JcmpjIGF0IHRydW1wIGRvdCBuZXQgZG90
IGF1CisJCQkJCUVhcmx5IGJ1ZyBmaXhlcy4KK0pvaG4gRS4gQm9zc29tCQlKb2huIGRvdCBCb3Nz
b20gYXQgY29nbm9zIGRvdCBjb20KKwkJCQkJQ29udHJpYnV0ZWQgc3Vic3RhbnRpYWwgb3JpZ2lu
YWwgd29ya2luZyBpbXBsZW1lbnRhdGlvbjsKKwkJCQkJYnVnIGZpeGVzOworCQkJCQlvbmdvaW5n
IGd1aWRhbmNlIGFuZCBzdGFuZGFyZHMgaW50ZXJwcmV0YXRpb24uCitBbmRlcnMgTm9ybGFuZGVy
CWFub3JsYW5kIGF0IGhlbTIgZG90IHBhc3NhZ2VuIGRvdCBzZQorCQkJCQlFYXJseSBlbmhhbmNl
bWVudHMgYW5kIHJ1bnRpbWUgY2hlY2tpbmcgZm9yIHN1cHBvcnRlZAorCQkJCQlXaW4zMiByb3V0
aW5lcy4KK1RvciBMaWxscXZpc3QJCXRtbCBhdCBpa2kgZG90IGZpCisJCQkJCUdlbmVyYWwgZW5o
YW5jZW1lbnRzOworCQkJCQllYXJseSBidWcgZml4ZXMgdG8gY29uZGl0aW9uIHZhcmlhYmxlcy4K
K1Njb3R0IExpZ2h0bmVyCQlzY290dCBhdCBjdXJyaWN1bHVtIGRvdCBjb20KKwkJCQkJQnVnIGZp
eC4KK0tldmluIFJ1bGFuZAkJS2V2aW4gZG90IFJ1bGFuZCBhdCBhbmhldXNlci1idXNjaCBkb3Qg
Y29tCisJCQkJCVZhcmlvdXMgYnVnIGZpeGVzLgorTWlrZSBSdXNzbwkJbWlrZXIgYXQgZWFpIGRv
dCBjb20KKwkJCQkJQnVnIGZpeC4KK01hcmsgRS4gQXJtc3Ryb25nCWF2YWlsIGF0IHBhY2JlbGwg
ZG90IG5ldAorCQkJCQlCdWcgZml4ZXMuCitMb3JpbiBIb2Noc3RlaW4gCWxtaCBhdCB4aXBob3Mg
ZG90IGNhCisJCQkJCWdlbmVyYWwgYnVnIGZpeGVzOyBidWcgZml4ZXMgdG8gY29uZGl0aW9uIHZh
cmlhYmxlcy4KK1BldGVyIFNsYWNpawkJUGV0ZXIgZG90IFNsYWNpayBhdCB0YXRyYW1lZCBkb3Qg
c2sKKwkJCQkJQnVnIGZpeGVzLgorTXVtaXQgS2hhbgkJa2hhbiBhdCB4cmF5bGl0aCBkb3Qgd2lz
YyBkb3QgZWR1CisJCQkJCUZpeGVzIHRvIHdvcmsgd2l0aCBNaW5ndzMyLgorTWlsYW4gR2FyZGlh
bgkJbWcgYXQgdGF0cmFtZWQgZG90IHNrCisJCQkJCUJ1ZyBmaXhlcyBhbmQgcmVwb3J0cy9hbmFs
eXNlcyBvZiBvYnNjdXJlIHByb2JsZW1zLgorQXVyZWxpbyBNZWRpbmEJCWF1cmVsaW9tIGF0IGNy
dCBkb3QgY29tCisJCQkJCUZpcnN0IGltcGxlbWVudGF0aW9uIG9mIHJlYWQtd3JpdGUgbG9ja3Mu
CitHcmFoYW0gRHVtcGxldG9uCUdyYWhhbSBkb3QgRHVtcGxldG9uIGF0IHJhIGRvdCBwYWQgZG90
IG90YyBkb3QgdGVsc3RyYSBkb3QgY29tIGRvdCBhdQorCQkJCQlCdWcgZml4IGluIGNvbmRpdGlv
biB2YXJpYWJsZXMuCitUcmlzdGFuIFNhdmF0aWVyCXRyaXN0YW4gYXQgbXBlZ3R2IGRvdCBjb20K
KwkJCQkJV2luQ0UgcG9ydC4KK0VyaWsgSGVuc2VtYQkJZXJpayBhdCBoZW5zZW1hIGRvdCB4czRh
bGwgZG90IG5sCisJCQkJCUJ1ZyBmaXhlcy4KK1JpY2ggUGV0ZXJzCQlycGV0ZXJzIGF0IG1pY3Jv
LW1hZ2ljIGRvdCBjb20KK1RvZGQgT3dlbgkJdG93ZW4gYXQgbHVjaWRjYWxtIGRvdCBkcm9wYmVh
ciBkb3QgaWQgZG90IGF1CisJCQkJCUJ1ZyBmaXhlcyB0byBkbGwgbG9hZGluZy4KK0phc29uIE55
ZQkJam55ZSBhdCBuYm5ldCBkb3QgbmIgZG90IGNhCisJCQkJCUltcGxlbWVudGF0aW9uIG9mIGFz
eW5jIGNhbmNlbGF0aW9uLgorRnJlZCBGb3Jlc3RlcgkJZmZvcmVzdCBhdCBldGljb21tIGRvdCBu
ZXQKK0tldmluIEQuIENsYXJrCQlrY2xhcmsgYXQgY2FibGV0cm9uIGRvdCBjb20KK0RhdmlkIEJh
Z2dldHQJCWRtYiBhdCBpdGFzb2Z0d2FyZSBkb3QgY29tCisJCQkJCUJ1ZyBmaXhlcy4KK1BhdWwg
UmVkb25kbwkJcGF1bCBhdCBtYXRjaHZpc2lvbiBkb3QgY29tCitTY290dCBNY0Nhc2tpbGwgCXNj
b3R0IGF0IDNkZnggZG90IGNvbQorCQkJCQlCdWcgZml4ZXMuCitKZWYgR2VhcmhhcnQJCWpnZWFy
aGFydCBhdCB0cHNzeXMgZG90IGNvbQorCQkJCQlCdWcgZml4LgorQXJ0aHVyIEthbnRvcgkJYWth
bnRvciBhdCBiZXh1c2EgZG90IGNvbQorCQkJCQlNdXRleCBlbmhhbmNlbWVudHMuCitTdGV2ZW4g
UmVkZGllCQlzbXIgYXQgZXNzZW1lciBkb3QgY29tIGRvdCBhdQorCQkJCQlCdWcgZml4LgorQWxl
eGFuZGVyIFRlcmVraG92CVRFUkVLSE9WIGF0IGRlIGRvdCBpYm0gZG90IGNvbQorCQkJCQlSZS1p
bXBsZW1lbnRlZCBhbmQgaW1wcm92ZWQgcmVhZC13cml0ZSBsb2NrczsKKwkJCQkJKHdpdGggTG91
aXMgVGhvbWFzKSByZS1pbXBsZW1lbnRlZCBhbmQgaW1wcm92ZWQKKwkJCQkJY29uZGl0aW9uIHZh
cmlhYmxlczsKKwkJCQkJZW5oYW5jZW1lbnRzIHRvIHNlbWFwaG9yZXM7CisJCQkJCWVuaGFuY2Vt
ZW50cyB0byBtdXRleGVzOworCQkJCQluZXcgbXV0ZXggaW1wbGVtZW50YXRpb24gaW4gJ2Z1dGV4
JyBzdHlsZTsKKwkJCQkJc3VnZ2VzdGVkIGEgcm9idXN0IGltcGxlbWVudGF0aW9uIG9mIHB0aHJl
YWRfb25jZQorCQkJCQlzaW1pbGFyIHRvIHRoYXQgaW1wbGVtZW50ZWQgYnkgVi5LbGlhdGhja287
CisJCQkJCXN5c3RlbSBjbG9jayBjaGFuZ2UgaGFuZGxpbmcgcmUgQ1YgdGltZW91dHM7CisJCQkJ
CWJ1ZyBmaXhlcy4KK1Rob21hcyBQZmFmZgkJdHBmYWZmIGF0IGdteCBkb3QgbmV0CisJCQkJCUNo
YW5nZXMgdG8gbWFrZSBDIHZlcnNpb24gdXNhYmxlIHdpdGggQysrIGFwcGxpY2F0aW9uczsKKwkJ
CQkJcmUtaW1wbGVtZW50ZWQgbXV0ZXggcm91dGluZXMgdG8gYXZvaWQgV2luMzIgbXV0ZXhlcwor
CQkJCQlhbmQgVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb247CisJCQkJCXByb2NlZHVyZSB0byBmaXgg
TWluZ3czMiB0aHJlYWQtc2FmZXR5IGlzc3Vlcy4KK0ZyYW5jbyBCZXoJCWZyYW5jbyBkb3QgYmV6
IGF0IGdteCBkb3QgZGUKKwkJCQkJcHJvY2VkdXJlIHRvIGZpeCBNaW5ndzMyIHRocmVhZC1zYWZl
dHkgaXNzdWVzLgorTG91aXMgVGhvbWFzCQlsdGhvbWFzIGF0IGFyYml0cmFkZSBkb3QgY29tCisJ
CQkJCSh3aXRoIEFsZXhhbmRlciBUZXJla2hvdikgcmUtaW1wbGVtZW50ZWQgYW5kIGltcHJvdmVk
CisJCQkJCWNvbmRpdGlvbiB2YXJpYWJsZXMuCitEYXZpZCBLb3JuCQlkZ2sgYXQgcmVzZWFyY2gg
ZG90IGF0dCBkb3QgY29tCisJCQkJCVBvcnRlZCB0byBVV0lOLgorUGhpbCBGcmlzYmllLCBKci4J
cGhpbCBhdCBoYXdrc29mdCBkb3QgY29tCisJCQkJCUJ1ZyBmaXguCitSYWxmIEJyZXNlCQlSYWxm
IGRvdCBCcmVzZSBhdCBwZGI0IGRvdCBzaWVtZW5zIGRvdCBkZQorCQkJCQlCdWcgZml4LgorcHJp
b254IGF0IGp1bm8gZG90IGNvbSAJcHJpb254IGF0IGp1bm8gZG90IGNvbQorCQkJCQlCdWcgZml4
ZXMuCitNYXggV29vZGJ1cnkJCW10ZXcgYXQgY2RzIGRvdCBkdWtlIGRvdCBlZHUKKwkJCQkJUE9T
SVggdmVyc2lvbmluZyBjb25kaXRpb25hbHM7CisJCQkJCXJlZHVjZWQgbmFtZXNwYWNlIHBvbGx1
dGlvbjsKKwkJCQkJaWRlYSB0byBzZXBhcmF0ZSByb3V0aW5lcyB0byByZWR1Y2Ugc3RhdGljYWxs
eQorCQkJCQlsaW5rZWQgaW1hZ2Ugc2l6ZXMuCitSb2IgRmFubmVyCQlyZmFubmVyIGF0IHN0b25l
dGhyZWUgZG90IGNvbQorCQkJCQlCdWcgZml4LgorTWljaGFlbCBKb2huc29uIAltaWNoYWVsaiBh
dCBtYWluZSBkb3QgcnIgZG90IGNvbQorCQkJCQlCdWcgZml4LgorTmljb2xhcyBCYXJyeQkJYm9v
emFpIGF0IHlhaG9vIGRvdCBjb20KKwkJCQkJQnVnIGZpeGVzLgorUGlldCB2YW4gQnJ1Z2dlbglw
aWV0dmIgYXQgbmV3YnJpZGdlcyBkb3QgbmwKKwkJCQkJQnVnIGZpeC4KK01ha290byBLYXRvCQly
YXZlbiBhdCBvbGRza29vbCBkb3QganAKKwkJCQkJQU1ENjQgcG9ydC4KK1BhbmFnaW90aXMgRS4g
SGFkamlkb3VrYXMJcGVoIGF0IGhwY2xhYiBkb3QgY2VpZCBkb3QgdXBhdHJhcyBkb3QgZ3IKKwkJ
CQkJQ29udHJpYnV0ZWQgdGhlIFF1ZXVlVXNlckFQQ0V4IHBhY2thZ2Ugd2hpY2gKKwkJCQkJbWFr
ZXMgcHJlZW1wdGl2ZSBhc3luYyBjYW5jZWxhdGlvbiBwb3NzaWJsZS4KK1dpbGwgQnJ5YW50CQl3
aWxsIGRvdCBicnlhbnQgYXQgZWNvc20gZG90IGNvbQorCQkJCQlCb3JsYW5kIGNvbXBpbGVyIHBh
dGNoIGFuZCBtYWtlZmlsZS4KK0FudWogR295YWwJCWFudWogZG90IGdveWFsIGF0IGdtYWlsIGRv
dCBjb20KKwkJCQkJUG9ydCB0byBEaWdpdGFsIE1hcnMgY29tcGlsZXIuCitHb3R0bG9iIEZyZWdl
CQlnb3R0bG9iZnJlZ2UgYXQgIGdtYWlsIGRvdCBjb20KKwkJCQkJcmUtaW1wbGVtZW50ZWQgcHRo
cmVhZF9vbmNlICh2ZXJzaW9uIDIpCisJCQkJCShwdGhyZWFkX29uY2UgY2FuY2VsbGF0aW9uIGFk
ZGVkIGJ5IHJwaikuCitWbGFkaW1pciBLbGlhdGNoa28JdmxhZGltaXIgYXQga2xpYXRjaGtvIGRv
dCBjb20KKwkJCQkJcmVpbXBsZW1lbnRlZCBwdGhyZWFkX29uY2Ugd2l0aCB0aGUgc2FtZSBmb3Jt
CisJCQkJCWFzIGRlc2NyaWJlZCBieSBBLlRlcmVraG92IChsYXRlciB2ZXJzaW9uIDIpOworCQkJ
CQlpbXBsZW1lbnRhdGlvbiBvZiBNQ1MgKE1lbGxvci1DcnVtbWV5L1Njb3R0KSBsb2Nrcy4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYv
VGhyZWFkaW5nLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nLmgKaW5kZXggMWIxN2Vl
Yi4uMWYzNjg3ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oCisr
KyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmcuaApAQCAtMTMyLDEyICsxMzIsMTUgQEAg
c3RydWN0IFBsYXRmb3JtTXV0ZXggewogICAgIHNpemVfdCBtX3JlY3Vyc2lvbkNvdW50OwogfTsK
IHN0cnVjdCBQbGF0Zm9ybUNvbmRpdGlvbiB7Ci0gICAgc2l6ZV90IG1fdGltZWRPdXQ7Ci0gICAg
c2l6ZV90IG1fYmxvY2tlZDsKLSAgICBzaXplX3QgbV93YWl0aW5nRm9yUmVtb3ZhbDsKLSAgICBI
QU5ETEUgbV9nYXRlOwotICAgIEhBTkRMRSBtX3F1ZXVlOwotICAgIEhBTkRMRSBtX211dGV4Owor
ICAgIHNpemVfdCBtX3dhaXRlcnNHb25lOworICAgIHNpemVfdCBtX3dhaXRlcnNCbG9ja2VkOwor
ICAgIHNpemVfdCBtX3dhaXRlcnNUb1VuYmxvY2s7IAorICAgIEhBTkRMRSBtX2Jsb2NrTG9jazsK
KyAgICBIQU5ETEUgbV9ibG9ja1F1ZXVlOworICAgIEhBTkRMRSBtX3VuYmxvY2tMb2NrOworCisg
ICAgYm9vbCB0aW1lZFdhaXQoUGxhdGZvcm1NdXRleCYsIERXT1JEIGR1cmF0aW9uTWlsbGlzZWNv
bmRzKTsKKyAgICB2b2lkIHNpZ25hbChib29sIHVuYmxvY2tBbGwpOwogfTsKICNlbHNlCiB0eXBl
ZGVmIHZvaWQqIFBsYXRmb3JtTXV0ZXg7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYv
VGhyZWFkaW5nV2luLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmlu
ZGV4IDgwYTViZjMuLmJlM2EzZDkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJl
YWRpbmdXaW4uY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjQsNDAgKzI1LDYwIEBACiAgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBUaGVyZSBhcmUgbnVtZXJvdXMgYWNhZGVtaWMg
YW5kIHByYWN0aWNhbCB3b3JrcyBvbiBob3cgdG8gaW1wbGVtZW50IHB0aHJlYWRfY29uZF93YWl0
L3B0aHJlYWRfY29uZF9zaWduYWwvcHRocmVhZF9jb25kX2Jyb2FkY2FzdAorICogZnVuY3Rpb25z
IG9uIFdpbjMyLiBIZXJlIGlzIG9uZSBleGFtcGxlOiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+
c2NobWlkdC93aW4zMi1jdi0xLmh0bWwgd2hpY2ggaXMgd2lkZWx5IGNyZWRpdGVkIGFzIGEgJ3N0
YXJ0aW5nIHBvaW50JworICogb2YgbW9kZXJuIGF0dGVtcHRzLiBUaGVyZSBhcmUgc2V2ZXJhbCBt
b3JlIG9yIGxlc3MgcHJvdmVuIGltcGxlbWVudGF0aW9ucywgb25lIGluIEJvb3N0IEMrKyBsaWJy
YXJ5IChodHRwOi8vd3d3LmJvb3N0Lm9yZykgYW5kIGFub3RoZXIKKyAqIGluIHB0aHJlYWRzLXdp
bjMyIChodHRwOi8vc291cmNld2FyZS5vcmcvcHRocmVhZHMtd2luMzIvKS4KKyAqCisgKiBUaGUg
bnVtYmVyIG9mIGFydGljbGVzIGFuZCBkaXNjdXNzaW9ucyBpcyB0aGUgZXZpZGVuY2Ugb2Ygc2ln
bmlmaWNhbnQgZGlmZmljdWx0aWVzIGluIGltcGxlbWVudGluZyB0aGVzZSBwcmltaXRpdmVzIGNv
cnJlY3RseS4KKyAqIFRoZSBicmllZiBzZWFyY2ggb2YgcmV2aXNpb25zLCBDaGFuZ2VMb2cgZW50
cmllcywgZGlzY3Vzc2lvbnMgaW4gY29tcC5wcm9ncmFtbWluZy50aHJlYWRzIGFuZCBvdGhlciBw
bGFjZXMgY2xlYXJseSBkb2N1bWVudHMKKyAqIG51bWVyb3VzIHBpdGZhbGxzIGFuZCBwZXJmb3Jt
YW5jZSBwcm9ibGVtcyB0aGUgYXV0aG9ycyBoYWQgdG8gb3ZlcmNvbWUgdG8gYXJyaXZlIHRvIHRo
ZSBzdWl0YWJsZSBpbXBsZW1lbnRhdGlvbnMuCisgKiBPcHRpbWFsbHksIFdlYktpdCB3b3VsZCB1
c2Ugb25lIG9mIHRob3NlIHN1cHBvcnRlZC90ZXN0ZWQgbGlicmFyaWVzIGRpcmVjdGx5LiBUbyBy
b2xsIG91dCBvdXIgb3duIGltcGxlbWVudGF0aW9uIGlzIGltcHJhY3RpY2FsLAorICogaWYgZXZl
biBmb3IgdGhlIGxhY2sgb2Ygc3VmZmljaWVudCB0ZXN0aW5nLiBIb3dldmVyLCBhIGZhaXRoZnVs
IHJlcHJvZHVjdGlvbiBvZiB0aGUgY29kZSBmcm9tIG9uZSBvZiB0aGUgcG9wdWxhciBzdXBwb3J0
ZWQKKyAqIGxpYnJhcmllcyBzZWVtcyB0byBiZSBhIGdvb2QgY29tcHJvbWlzZS4KKyAqCisgKiBU
aGUgZWFybHkgQm9vc3QgaW1wbGVtZW50YXRpb24gKGh0dHA6Ly93d3cuYm94YmFja3VwLm9yZy90
cmFjL2Jyb3dzZXIvYm94L25pY2svd2luL2xpYi93aW4zMi9ib29zdF8xXzMyXzAvbGlicy90aHJl
YWQvc3JjL2NvbmRpdGlvbi5jcHA/cmV2PTMwKQorICogaXMgaWRlbnRpY2FsIHRvIHB0aHJlYWRz
LXdpbjMyIChodHRwOi8vc291cmNld2FyZS5vcmcvY2dpLWJpbi9jdnN3ZWIuY2dpL3B0aHJlYWRz
L3B0aHJlYWRfY29uZF93YWl0LmM/cmV2PTEuMTAmY29udGVudC10eXBlPXRleHQveC1jdnN3ZWIt
bWFya3VwJmN2c3Jvb3Q9cHRocmVhZHMtd2luMzIpLgorICogQ3VycmVudCBCb29zdCB1c2VzIHll
dCBhbm90aGVyIChhbHRob3VnaCBzZWVtaW5nbHkgZXF1aXZhbGVudCkgYWxnb3JpdGhtIHdoaWNo
IGNhbWUgZnJvbSB0aGVpciAndGhyZWFkIHJld3JpdGUnIGVmZm9ydC4KICAqCi0gKiA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotICogTm90ZTogIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjb25kaXRpb24g
dmFyaWFibGVzIHVuZGVyIHRoZSBXaW5kb3dzCi0gKiBwbGFmb3JtIHdhcyBiYXNlZCBvbiB0aGF0
IG9mIHRoZSBleGNlbGxlbnQgQk9PU1QgQysrIGxpYnJhcnkuICBJdAotICogaGFzIGJlZW4gcmV3
cml0dGVuIHRvIGZpdCBpbiB3aXRoIHRoZSBXZWJLaXQgYXJjaGl0ZWN0dXJlIGFuZCB0bwotICog
dXNlIGl0cyBjb2RpbmcgY29udmVudGlvbnMuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICog
VGhpcyBmaWxlIGluY2x1ZGVzIHRpbWVkV2FpdC9zaWduYWwvYnJvYWRjYXN0IGltcGxlbWVudGF0
aW9ucyB0cmFuc2xhdGVkIHRvIFdlYktpdCBjb2Rpbmcgc3R5bGUgZnJvbSB0aGUgbGF0ZXN0IGFs
Z29yaXRobSBieQorICogQWxleGFuZGVyIFRlcmVraG92IGFuZCBMb3VpcyBUaG9tYXMsIGFzIGNh
cHR1cmVkIGhlcmU6IGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9jZ2ktYmluL2N2c3dlYi5jZ2kvcHRo
cmVhZHMvcHRocmVhZF9jb25kX3dhaXQuYz9yZXY9MS4xMCZjb250ZW50LXR5cGU9dGV4dC94LWN2
c3dlYi1tYXJrdXAmY3Zzcm9vdD1wdGhyZWFkcy13aW4zMgorICogSXQgcmVwbGFjZXMgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIHRoZWlyIHByZXZpb3VzIGFsZ29yaXRobSwgYWxzbyBkb2N1bWVudGVk
IGluIHRoZSBzYW1lIHNvdXJjZSBhYm92ZS4KKyAqIFRoZSBuYW1pbmcgYW5kIGNvbW1lbnRzIGFy
ZSBsZWZ0IHZlcnkgY2xvc2UgdG8gb3JpZ2luYWwgdG8gZW5hYmxlIGVhc3kgY3Jvc3MtY2hlY2su
CiAgKgotICogVGhlIEJvb3N0IGxpY2Vuc2UgaXMgdmlydHVhbGx5IGlkZW50aWNhbCB0byB0aGUg
QXBwbGUgdmFyaWF0aW9uIGF0IHRoZQotICogdG9wIG9mIHRoaXMgZmlsZSwgYnV0IGlzIGluY2x1
ZGVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzczoKKyAqIFRoZSBjb3JyZXNwb25kaW5nIFB0aHJlYWRz
LXdpbjMyIExpY2Vuc2UgaXMgaW5jbHVkZWQgYmVsb3cuCisgKi8KKworLyoKKyAqICAgICAgUHRo
cmVhZHMtd2luMzIgLSBQT1NJWCBUaHJlYWRzIExpYnJhcnkgZm9yIFdpbjMyCisgKiAgICAgIENv
cHlyaWdodChDKSAxOTk4IEpvaG4gRS4gQm9zc29tCisgKiAgICAgIENvcHlyaWdodChDKSAxOTk5
LDIwMDUgUHRocmVhZHMtd2luMzIgY29udHJpYnV0b3JzCiAgKgotICogQm9vc3QgU29mdHdhcmUg
TGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKyAqICAgICAgQ29udGFj
dCBFbWFpbDogcnBqQGNhbGxpc3RvLmNhbmJlcnJhLmVkdS5hdQogICoKLSAqIFBlcm1pc3Npb24g
aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2Fu
aXphdGlvbgotICogb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFu
eWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKLSAqIHRoaXMgbGljZW5zZSAodGhlICJTb2Z0
d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAotICogZXhlY3V0
ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3
b3JrcyBvZiB0aGUKLSAqIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8g
d2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCi0gKiBkbyBzbywgYWxsIHN1YmplY3Qg
dG8gdGhlIGZvbGxvd2luZzoKKyAqICAgICAgVGhlIGN1cnJlbnQgbGlzdCBvZiBjb250cmlidXRv
cnMgaXMgY29udGFpbmVkCisgKiAgICAgIGluIHRoZSBmaWxlIENPTlRSSUJVVE9SUyBpbmNsdWRl
ZCB3aXRoIHRoZSBzb3VyY2UKKyAqICAgICAgY29kZSBkaXN0cmlidXRpb24uIFRoZSBsaXN0IGNh
biBhbHNvIGJlIHNlZW4gYXQgdGhlCisgKiAgICAgIGZvbGxvd2luZyBXb3JsZCBXaWRlIFdlYiBs
b2NhdGlvbjoKKyAqICAgICAgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9wdGhyZWFkcy13aW4z
Mi9jb250cmlidXRvcnMuaHRtbAogICoKLSAqIFRoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUg
U29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCi0gKiB0aGUgYWJv
dmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLAotICogbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy
ZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCi0gKiBhbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0
aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCi0gKiB3b3JrcyBh
cmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBn
ZW5lcmF0ZWQgYnkKLSAqIGEgc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKyAqICAgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogICAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogVEhFIFNP
RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAotICog
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNP
RlRXQVJFIEJFIExJQUJMRQotICogRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00s
IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig
T1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqICAgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgICAgIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgICAg
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkgaW4gdGhlIGZpbGUgQ09QWUlORy5MSUI7
CisgKiAgICAgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwKKyAqICAgICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQQogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTY5LDYgKzkwLDcg
QEAKICNlbmRpZgogI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+Cisj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXJTZWVk
Lmg+CkBAIC0yOTMsMTgwICszMTUsMTYyIEBAIHZvaWQgTXV0ZXg6OnVubG9jaygpCiAgICAgOjpM
ZWF2ZUNyaXRpY2FsU2VjdGlvbigmbV9tdXRleC5tX2ludGVybmFsTXV0ZXgpOwogfQogCi1zdGF0
aWMgY29uc3QgbG9uZyBNYXhTZW1hcGhvcmVDb3VudCA9IHN0YXRpY19jYXN0PGxvbmc+KH4wVUwg
Pj4gMSk7Ci0KLVRocmVhZENvbmRpdGlvbjo6VGhyZWFkQ29uZGl0aW9uKCkKK2Jvb2wgUGxhdGZv
cm1Db25kaXRpb246OnRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiBtdXRleCwgRFdPUkQgZHVyYXRp
b25NaWxsaXNlY29uZHMpCiB7Ci0gICAgbV9jb25kaXRpb24ubV90aW1lZE91dCA9IDA7Ci0gICAg
bV9jb25kaXRpb24ubV9ibG9ja2VkID0gMDsKLSAgICBtX2NvbmRpdGlvbi5tX3dhaXRpbmdGb3JS
ZW1vdmFsID0gMDsKLSAgICBtX2NvbmRpdGlvbi5tX2dhdGUgPSA6OkNyZWF0ZVNlbWFwaG9yZSgw
LCAxLCAxLCAwKTsKLSAgICBtX2NvbmRpdGlvbi5tX3F1ZXVlID0gOjpDcmVhdGVTZW1hcGhvcmUo
MCwgMCwgTWF4U2VtYXBob3JlQ291bnQsIDApOwotICAgIG1fY29uZGl0aW9uLm1fbXV0ZXggPSA6
OkNyZWF0ZU11dGV4KDAsIDAsIDApOwotCi0gICAgaWYgKCFtX2NvbmRpdGlvbi5tX2dhdGUgfHwg
IW1fY29uZGl0aW9uLm1fcXVldWUgfHwgIW1fY29uZGl0aW9uLm1fbXV0ZXgpIHsKLSAgICAgICAg
aWYgKG1fY29uZGl0aW9uLm1fZ2F0ZSkKLSAgICAgICAgICAgIDo6Q2xvc2VIYW5kbGUobV9jb25k
aXRpb24ubV9nYXRlKTsKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uLm1fcXVldWUpCi0gICAgICAg
ICAgICA6OkNsb3NlSGFuZGxlKG1fY29uZGl0aW9uLm1fcXVldWUpOwotICAgICAgICBpZiAobV9j
b25kaXRpb24ubV9tdXRleCkKLSAgICAgICAgICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRpb24u
bV9tdXRleCk7Ci0gICAgfQotfQotCi1UaHJlYWRDb25kaXRpb246On5UaHJlYWRDb25kaXRpb24o
KQotewotICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRpb24ubV9nYXRlKTsKLSAgICA6OkNsb3Nl
SGFuZGxlKG1fY29uZGl0aW9uLm1fcXVldWUpOwotICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRp
b24ubV9tdXRleCk7Ci19Ci0gICAgCi12b2lkIFRocmVhZENvbmRpdGlvbjo6d2FpdChNdXRleCYg
bXV0ZXgpCi17Ci0gICAgUGxhdGZvcm1NdXRleCYgY3MgPSBtdXRleC5pbXBsKCk7Ci0KICAgICAv
LyBFbnRlciB0aGUgd2FpdCBzdGF0ZS4KLSAgICBEV09SRCByZXMgPSA6OldhaXRGb3JTaW5nbGVP
YmplY3QobV9jb25kaXRpb24ubV9nYXRlLCBJTkZJTklURSk7CisgICAgRFdPUkQgcmVzID0gOjpX
YWl0Rm9yU2luZ2xlT2JqZWN0KG1fYmxvY2tMb2NrLCBJTkZJTklURSk7CiAgICAgQVNTRVJUKHJl
cyA9PSBXQUlUX09CSkVDVF8wKTsKLSAgICArK21fY29uZGl0aW9uLm1fYmxvY2tlZDsKLSAgICBy
ZXMgPSA6OlJlbGVhc2VTZW1hcGhvcmUobV9jb25kaXRpb24ubV9nYXRlLCAxLCAwKTsKKyAgICAr
K21fd2FpdGVyc0Jsb2NrZWQ7CisgICAgcmVzID0gOjpSZWxlYXNlU2VtYXBob3JlKG1fYmxvY2tM
b2NrLCAxLCAwKTsKICAgICBBU1NFUlQocmVzKTsKIAotICAgIDo6TGVhdmVDcml0aWNhbFNlY3Rp
b24oJmNzLm1faW50ZXJuYWxNdXRleCk7CisgICAgOjpMZWF2ZUNyaXRpY2FsU2VjdGlvbigmbXV0
ZXgubV9pbnRlcm5hbE11dGV4KTsKIAotICAgIHJlcyA9IDo6V2FpdEZvclNpbmdsZU9iamVjdCht
X2NvbmRpdGlvbi5tX3F1ZXVlLCBJTkZJTklURSk7Ci0gICAgQVNTRVJUKHJlcyA9PSBXQUlUX09C
SkVDVF8wKTsKKyAgICAvLyBNYWluIHdhaXQgLSB1c2UgdGltZW91dC4KKyAgICBib29sIHRpbWVk
T3V0ID0gKDo6V2FpdEZvclNpbmdsZU9iamVjdChtX2Jsb2NrUXVldWUsIGR1cmF0aW9uTWlsbGlz
ZWNvbmRzKSA9PSBXQUlUX1RJTUVPVVQpOwogCi0gICAgcmVzID0gOjpXYWl0Rm9yU2luZ2xlT2Jq
ZWN0KG1fY29uZGl0aW9uLm1fbXV0ZXgsIElORklOSVRFKTsKKyAgICByZXMgPSA6OldhaXRGb3JT
aW5nbGVPYmplY3QobV91bmJsb2NrTG9jaywgSU5GSU5JVEUpOwogICAgIEFTU0VSVChyZXMgPT0g
V0FJVF9PQkpFQ1RfMCk7Ci0gICAgc2l6ZV90IHdhc1dhaXRpbmcgPSBtX2NvbmRpdGlvbi5tX3dh
aXRpbmdGb3JSZW1vdmFsOwotICAgIHNpemVfdCB3YXNUaW1lZE91dCA9IG1fY29uZGl0aW9uLm1f
dGltZWRPdXQ7Ci0gICAgaWYgKHdhc1dhaXRpbmcgIT0gMCkgewotICAgICAgICBpZiAoLS1tX2Nv
bmRpdGlvbi5tX3dhaXRpbmdGb3JSZW1vdmFsID09IDApIHsKLSAgICAgICAgICAgIGlmIChtX2Nv
bmRpdGlvbi5tX2Jsb2NrZWQgIT0gMCkgewotICAgICAgICAgICAgICAgIHJlcyA9IDo6UmVsZWFz
ZVNlbWFwaG9yZShtX2NvbmRpdGlvbi5tX2dhdGUsIDEsIDApOyAgLy8gb3BlbiBtX2dhdGUKLSAg
ICAgICAgICAgICAgICBBU1NFUlQocmVzKTsKLSAgICAgICAgICAgICAgICB3YXNXYWl0aW5nID0g
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1fY29uZGl0aW9uLm1fdGlt
ZWRPdXQgIT0gMCkKLSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi5tX3RpbWVkT3V0ID0gMDsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoKyttX2NvbmRpdGlvbi5tX3RpbWVkT3V0ID09ICgo
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCkoKSAvIDIpKSB7Ci0gICAgICAgIC8v
IHRpbWVvdXQgb2NjdXJlZCwgbm9ybWFsaXplIHRoZSBtX2NvbmRpdGlvbi5tX3RpbWVkT3V0IGNv
dW50CisKKyAgICBpbnQgc2lnbmFsc0xlZnQgPSBtX3dhaXRlcnNUb1VuYmxvY2s7CisKKyAgICBp
ZiAobV93YWl0ZXJzVG9VbmJsb2NrKQorICAgICAgICAtLW1fd2FpdGVyc1RvVW5ibG9jazsKKyAg
ICBlbHNlIGlmICgrK21fd2FpdGVyc0dvbmUgPT0gKElOVF9NQVggLyAyKSkgeyAvLyB0aW1lb3V0
L2NhbmNlbGVkIG9yIHNwdXJpb3VzIHNlbWFwaG9yZQorICAgICAgICAvLyB0aW1lb3V0IG9yIHNw
dXJpb3VzIHdha2V1cCBvY2N1cmVkLCBub3JtYWxpemUgdGhlIG1fd2FpdGVyc0dvbmUgY291bnQK
ICAgICAgICAgLy8gdGhpcyBtYXkgb2NjdXIgaWYgbWFueSBjYWxscyB0byB3YWl0IHdpdGggYSB0
aW1lb3V0IGFyZSBtYWRlIGFuZAogICAgICAgICAvLyBubyBjYWxsIHRvIG5vdGlmeV8qIGlzIG1h
ZGUKLSAgICAgICAgcmVzID0gOjpXYWl0Rm9yU2luZ2xlT2JqZWN0KG1fY29uZGl0aW9uLm1fZ2F0
ZSwgSU5GSU5JVEUpOworICAgICAgICByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmplY3QobV9ibG9j
a0xvY2ssIElORklOSVRFKTsKICAgICAgICAgQVNTRVJUKHJlcyA9PSBXQUlUX09CSkVDVF8wKTsK
LSAgICAgICAgbV9jb25kaXRpb24ubV9ibG9ja2VkIC09IG1fY29uZGl0aW9uLm1fdGltZWRPdXQ7
Ci0gICAgICAgIHJlcyA9IDo6UmVsZWFzZVNlbWFwaG9yZShtX2NvbmRpdGlvbi5tX2dhdGUsIDEs
IDApOworICAgICAgICBtX3dhaXRlcnNCbG9ja2VkIC09IG1fd2FpdGVyc0dvbmU7CisgICAgICAg
IHJlcyA9IDo6UmVsZWFzZVNlbWFwaG9yZShtX2Jsb2NrTG9jaywgMSwgMCk7CiAgICAgICAgIEFT
U0VSVChyZXMpOwotICAgICAgICBtX2NvbmRpdGlvbi5tX3RpbWVkT3V0ID0gMDsKKyAgICAgICAg
bV93YWl0ZXJzR29uZSA9IDA7CiAgICAgfQotICAgIHJlcyA9IDo6UmVsZWFzZU11dGV4KG1fY29u
ZGl0aW9uLm1fbXV0ZXgpOworCisgICAgcmVzID0gOjpSZWxlYXNlTXV0ZXgobV91bmJsb2NrTG9j
ayk7CiAgICAgQVNTRVJUKHJlcyk7CiAKLSAgICBpZiAod2FzV2FpdGluZyA9PSAxKSB7Ci0gICAg
ICAgIGZvciAoLyoqLyA7IHdhc1RpbWVkT3V0OyAtLXdhc1RpbWVkT3V0KSB7Ci0gICAgICAgICAg
ICAvLyBiZXR0ZXIgbm93IHRoYW4gc3B1cmlvdXMgbGF0ZXIKLSAgICAgICAgICAgIHJlcyA9IDo6
V2FpdEZvclNpbmdsZU9iamVjdChtX2NvbmRpdGlvbi5tX3F1ZXVlLCBJTkZJTklURSk7Ci0gICAg
ICAgICAgICBBU1NFUlQocmVzID09IFdBSVRfT0JKRUNUXzApOwotICAgICAgICB9Ci0gICAgICAg
IHJlcyA9IDo6UmVsZWFzZVNlbWFwaG9yZShtX2NvbmRpdGlvbi5tX2dhdGUsIDEsIDApOworICAg
IGlmIChzaWduYWxzTGVmdCA9PSAxKSB7CisgICAgICAgIHJlcyA9IDo6UmVsZWFzZVNlbWFwaG9y
ZShtX2Jsb2NrTG9jaywgMSwgMCk7IC8vIE9wZW4gdGhlIGdhdGUuCiAgICAgICAgIEFTU0VSVChy
ZXMpOwogICAgIH0KIAotICAgIDo6RW50ZXJDcml0aWNhbFNlY3Rpb24gKCZjcy5tX2ludGVybmFs
TXV0ZXgpOwotfQorICAgIDo6RW50ZXJDcml0aWNhbFNlY3Rpb24gKCZtdXRleC5tX2ludGVybmFs
TXV0ZXgpOwogCi1ib29sIFRocmVhZENvbmRpdGlvbjo6dGltZWRXYWl0KE11dGV4JiBtdXRleCwg
ZG91YmxlIGFic29sdXRlVGltZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotICAgIEFT
U0VSVChmYWxzZSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhdGltZWRPdXQ7CiB9
CiAKLXZvaWQgVGhyZWFkQ29uZGl0aW9uOjpzaWduYWwoKQordm9pZCBQbGF0Zm9ybUNvbmRpdGlv
bjo6c2lnbmFsKGJvb2wgdW5ibG9ja0FsbCkKIHsKLSAgICB1bnNpZ25lZCBzaWduYWxzID0gMDsK
KyAgICB1bnNpZ25lZCBzaWduYWxzVG9Jc3N1ZSA9IDA7CiAKLSAgICBEV09SRCByZXMgPSA6Oldh
aXRGb3JTaW5nbGVPYmplY3QobV9jb25kaXRpb24ubV9tdXRleCwgSU5GSU5JVEUpOworICAgIERX
T1JEIHJlcyA9IDo6V2FpdEZvclNpbmdsZU9iamVjdChtX3VuYmxvY2tMb2NrLCBJTkZJTklURSk7
CiAgICAgQVNTRVJUKHJlcyA9PSBXQUlUX09CSkVDVF8wKTsKIAotICAgIGlmIChtX2NvbmRpdGlv
bi5tX3dhaXRpbmdGb3JSZW1vdmFsICE9IDApIHsgLy8gdGhlIG1fZ2F0ZSBpcyBhbHJlYWR5IGNs
b3NlZAotICAgICAgICBpZiAobV9jb25kaXRpb24ubV9ibG9ja2VkID09IDApIHsKLSAgICAgICAg
ICAgIHJlcyA9IDo6UmVsZWFzZU11dGV4KG1fY29uZGl0aW9uLm1fbXV0ZXgpOworICAgIGlmICht
X3dhaXRlcnNUb1VuYmxvY2spIHsgLy8gdGhlIGdhdGUgaXMgYWxyZWFkeSBjbG9zZWQKKyAgICAg
ICAgaWYgKCFtX3dhaXRlcnNCbG9ja2VkKSB7IC8vIG5vLW9wCisgICAgICAgICAgICByZXMgPSA6
OlJlbGVhc2VNdXRleChtX3VuYmxvY2tMb2NrKTsKICAgICAgICAgICAgIEFTU0VSVChyZXMpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgKyttX2NvbmRpdGlvbi5t
X3dhaXRpbmdGb3JSZW1vdmFsOwotICAgICAgICAtLW1fY29uZGl0aW9uLm1fYmxvY2tlZDsKLQot
ICAgICAgICBzaWduYWxzID0gMTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXMgPSA6OldhaXRG
b3JTaW5nbGVPYmplY3QobV9jb25kaXRpb24ubV9nYXRlLCBJTkZJTklURSk7CisgICAgICAgIGlm
ICh1bmJsb2NrQWxsKSB7CisgICAgICAgICAgICBzaWduYWxzVG9Jc3N1ZSA9IG1fd2FpdGVyc0Js
b2NrZWQ7CisgICAgICAgICAgICBtX3dhaXRlcnNUb1VuYmxvY2sgKz0gbV93YWl0ZXJzQmxvY2tl
ZDsKKyAgICAgICAgICAgIG1fd2FpdGVyc0Jsb2NrZWQgPSAwOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgc2lnbmFsc1RvSXNzdWUgPSAxOworICAgICAgICAgICAgKyttX3dhaXRlcnNU
b1VuYmxvY2s7CisgICAgICAgICAgICAtLW1fd2FpdGVyc0Jsb2NrZWQ7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKG1fd2FpdGVyc0Jsb2NrZWQgPiBtX3dhaXRlcnNHb25lKSB7CisgICAgICAg
IHJlcyA9IDo6V2FpdEZvclNpbmdsZU9iamVjdChtX2Jsb2NrTG9jaywgSU5GSU5JVEUpOyAvLyBD
bG9zZSB0aGUgZ2F0ZS4KICAgICAgICAgQVNTRVJUKHJlcyA9PSBXQUlUX09CSkVDVF8wKTsKLSAg
ICAgICAgaWYgKG1fY29uZGl0aW9uLm1fYmxvY2tlZCA+IG1fY29uZGl0aW9uLm1fdGltZWRPdXQp
IHsKLSAgICAgICAgICAgIGlmIChtX2NvbmRpdGlvbi5tX3RpbWVkT3V0ICE9IDApIHsKLSAgICAg
ICAgICAgICAgICBtX2NvbmRpdGlvbi5tX2Jsb2NrZWQgLT0gbV9jb25kaXRpb24ubV90aW1lZE91
dDsKLSAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi5tX3RpbWVkT3V0ID0gMDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHNpZ25hbHMgPSBtX2NvbmRpdGlvbi5tX3dhaXRpbmdGb3JSZW1v
dmFsID0gMTsKLSAgICAgICAgICAgIC0tbV9jb25kaXRpb24ubV9ibG9ja2VkOworICAgICAgICBp
ZiAobV93YWl0ZXJzR29uZSAhPSAwKSB7CisgICAgICAgICAgICBtX3dhaXRlcnNCbG9ja2VkIC09
IG1fd2FpdGVyc0dvbmU7CisgICAgICAgICAgICBtX3dhaXRlcnNHb25lID0gMDsKKyAgICAgICAg
fQorICAgICAgICBpZiAodW5ibG9ja0FsbCkgeworICAgICAgICAgICAgc2lnbmFsc1RvSXNzdWUg
PSBtX3dhaXRlcnNCbG9ja2VkOworICAgICAgICAgICAgbV93YWl0ZXJzVG9VbmJsb2NrID0gbV93
YWl0ZXJzQmxvY2tlZDsKKyAgICAgICAgICAgIG1fd2FpdGVyc0Jsb2NrZWQgPSAwOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmVzID0gOjpSZWxlYXNlU2VtYXBob3JlKG1fY29uZGl0
aW9uLm1fZ2F0ZSwgMSwgMCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVzKTsKKyAgICAgICAgICAg
IHNpZ25hbHNUb0lzc3VlID0gMTsKKyAgICAgICAgICAgIG1fd2FpdGVyc1RvVW5ibG9jayA9IDE7
CisgICAgICAgICAgICAtLW1fd2FpdGVyc0Jsb2NrZWQ7CiAgICAgICAgIH0KKyAgICB9IGVsc2Ug
eyAvLyBOby1vcC4KKyAgICAgICAgcmVzID06OlJlbGVhc2VNdXRleChtX3VuYmxvY2tMb2NrKTsK
KyAgICAgICAgQVNTRVJUKHJlcyk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXMg
PTo6UmVsZWFzZU11dGV4KG1fY29uZGl0aW9uLm1fbXV0ZXgpOworICAgIHJlcyA9OjpSZWxlYXNl
TXV0ZXgobV91bmJsb2NrTG9jayk7CiAgICAgQVNTRVJUKHJlcyk7CiAKLSAgICBpZiAoc2lnbmFs
cykgewotICAgICAgICByZXMgPSA6OlJlbGVhc2VTZW1hcGhvcmUobV9jb25kaXRpb24ubV9xdWV1
ZSwgc2lnbmFscywgMCk7CisgICAgaWYgKHNpZ25hbHNUb0lzc3VlKSB7CisgICAgICAgIHJlcyA9
IDo6UmVsZWFzZVNlbWFwaG9yZShtX2Jsb2NrUXVldWUsIHNpZ25hbHNUb0lzc3VlLCAwKTsKICAg
ICAgICAgQVNTRVJUKHJlcyk7CiAgICAgfQogfQogCi12b2lkIFRocmVhZENvbmRpdGlvbjo6YnJv
YWRjYXN0KCkKK3N0YXRpYyBjb25zdCBsb25nIE1heFNlbWFwaG9yZUNvdW50ID0gc3RhdGljX2Nh
c3Q8bG9uZz4ofjBVTCA+PiAxKTsKKworVGhyZWFkQ29uZGl0aW9uOjpUaHJlYWRDb25kaXRpb24o
KQogewotICAgIHVuc2lnbmVkIHNpZ25hbHMgPSAwOworICAgIG1fY29uZGl0aW9uLm1fd2FpdGVy
c0dvbmUgPSAwOworICAgIG1fY29uZGl0aW9uLm1fd2FpdGVyc0Jsb2NrZWQgPSAwOworICAgIG1f
Y29uZGl0aW9uLm1fd2FpdGVyc1RvVW5ibG9jayA9IDA7CisgICAgbV9jb25kaXRpb24ubV9ibG9j
a0xvY2sgPSA6OkNyZWF0ZVNlbWFwaG9yZSgwLCAxLCAxLCAwKTsKKyAgICBtX2NvbmRpdGlvbi5t
X2Jsb2NrUXVldWUgPSA6OkNyZWF0ZVNlbWFwaG9yZSgwLCAwLCBNYXhTZW1hcGhvcmVDb3VudCwg
MCk7CisgICAgbV9jb25kaXRpb24ubV91bmJsb2NrTG9jayA9IDo6Q3JlYXRlTXV0ZXgoMCwgMCwg
MCk7CisKKyAgICBpZiAoIW1fY29uZGl0aW9uLm1fYmxvY2tMb2NrIHx8ICFtX2NvbmRpdGlvbi5t
X2Jsb2NrUXVldWUgfHwgIW1fY29uZGl0aW9uLm1fdW5ibG9ja0xvY2spIHsKKyAgICAgICAgaWYg
KG1fY29uZGl0aW9uLm1fYmxvY2tMb2NrKQorICAgICAgICAgICAgOjpDbG9zZUhhbmRsZShtX2Nv
bmRpdGlvbi5tX2Jsb2NrTG9jayk7CisgICAgICAgIGlmIChtX2NvbmRpdGlvbi5tX2Jsb2NrUXVl
dWUpCisgICAgICAgICAgICA6OkNsb3NlSGFuZGxlKG1fY29uZGl0aW9uLm1fYmxvY2tRdWV1ZSk7
CisgICAgICAgIGlmIChtX2NvbmRpdGlvbi5tX3VuYmxvY2tMb2NrKQorICAgICAgICAgICAgOjpD
bG9zZUhhbmRsZShtX2NvbmRpdGlvbi5tX3VuYmxvY2tMb2NrKTsKKyAgICB9Cit9CiAKLSAgICBE
V09SRCByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmplY3QobV9jb25kaXRpb24ubV9tdXRleCwgSU5G
SU5JVEUpOwotICAgIEFTU0VSVChyZXMgPT0gV0FJVF9PQkpFQ1RfMCk7CitUaHJlYWRDb25kaXRp
b246On5UaHJlYWRDb25kaXRpb24oKQoreworICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRpb24u
bV9ibG9ja0xvY2spOworICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRpb24ubV9ibG9ja1F1ZXVl
KTsKKyAgICA6OkNsb3NlSGFuZGxlKG1fY29uZGl0aW9uLm1fdW5ibG9ja0xvY2spOworfQogCi0g
ICAgaWYgKG1fY29uZGl0aW9uLm1fd2FpdGluZ0ZvclJlbW92YWwgIT0gMCkgeyAvLyB0aGUgbV9n
YXRlIGlzIGFscmVhZHkgY2xvc2VkCi0gICAgICAgIGlmIChtX2NvbmRpdGlvbi5tX2Jsb2NrZWQg
PT0gMCkgewotICAgICAgICAgICAgcmVzID0gOjpSZWxlYXNlTXV0ZXgobV9jb25kaXRpb24ubV9t
dXRleCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQordm9pZCBUaHJlYWRDb25kaXRpb246OndhaXQoTXV0ZXgmIG11dGV4KQoreworICAg
IG1fY29uZGl0aW9uLnRpbWVkV2FpdChtdXRleC5pbXBsKCksIElORklOSVRFKTsKK30KIAotICAg
ICAgICBtX2NvbmRpdGlvbi5tX3dhaXRpbmdGb3JSZW1vdmFsICs9IChzaWduYWxzID0gbV9jb25k
aXRpb24ubV9ibG9ja2VkKTsKLSAgICAgICAgbV9jb25kaXRpb24ubV9ibG9ja2VkID0gMDsKLSAg
ICB9IGVsc2UgewotICAgICAgICByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmplY3QobV9jb25kaXRp
b24ubV9nYXRlLCBJTkZJTklURSk7Ci0gICAgICAgIEFTU0VSVChyZXMgPT0gV0FJVF9PQkpFQ1Rf
MCk7Ci0gICAgICAgIGlmIChtX2NvbmRpdGlvbi5tX2Jsb2NrZWQgPiBtX2NvbmRpdGlvbi5tX3Rp
bWVkT3V0KSB7Ci0gICAgICAgICAgICBpZiAobV9jb25kaXRpb24ubV90aW1lZE91dCAhPSAwKSB7
Ci0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24ubV9ibG9ja2VkIC09IG1fY29uZGl0aW9uLm1f
dGltZWRPdXQ7Ci0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24ubV90aW1lZE91dCA9IDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBzaWduYWxzID0gbV9jb25kaXRpb24ubV93YWl0aW5n
Rm9yUmVtb3ZhbCA9IG1fY29uZGl0aW9uLm1fYmxvY2tlZDsKLSAgICAgICAgICAgIG1fY29uZGl0
aW9uLm1fYmxvY2tlZCA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXMgPSA6
OlJlbGVhc2VTZW1hcGhvcmUobV9jb25kaXRpb24ubV9nYXRlLCAxLCAwKTsKLSAgICAgICAgICAg
IEFTU0VSVChyZXMpOwotICAgICAgICB9Ci0gICAgfQorYm9vbCBUaHJlYWRDb25kaXRpb246OnRp
bWVkV2FpdChNdXRleCYgbXV0ZXgsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpCit7CisgICAgZG91Ymxl
IGN1cnJlbnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwogCi0gICAgcmVzID0gOjpSZWxlYXNl
TXV0ZXgobV9jb25kaXRpb24ubV9tdXRleCk7Ci0gICAgQVNTRVJUKHJlcyk7CisgICAgLy8gVGlt
ZSBpcyBpbiB0aGUgcGFzdCAtIHJldHVybiBpbW1lZGlhdGVseS4KKyAgICBpZiAoYWJzb2x1dGVU
aW1lIDwgY3VycmVudFRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzaWdu
YWxzKSB7Ci0gICAgICAgIHJlcyA9IDo6UmVsZWFzZVNlbWFwaG9yZShtX2NvbmRpdGlvbi5tX3F1
ZXVlLCBzaWduYWxzLCAwKTsKLSAgICAgICAgQVNTRVJUKHJlcyk7Ci0gICAgfQorICAgIGRvdWJs
ZSBpbnRlcnZhbE1pbGxpc2Vjb25kcyA9IChhYnNvbHV0ZVRpbWUgLSBjdXJyZW50VGltZSkgKiAx
MDAwLjA7CisgICAgaWYgKGludGVydmFsTWlsbGlzZWNvbmRzID49IElOVF9NQVgpCisgICAgICAg
IGludGVydmFsTWlsbGlzZWNvbmRzID0gSU5UX01BWDsKKworICAgIHJldHVybiBtX2NvbmRpdGlv
bi50aW1lZFdhaXQobXV0ZXguaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihpbnRl
cnZhbE1pbGxpc2Vjb25kcykpOworfQorCit2b2lkIFRocmVhZENvbmRpdGlvbjo6c2lnbmFsKCkK
K3sKKyAgICBtX2NvbmRpdGlvbi5zaWduYWwoZmFsc2UpOyAvLyBVbmJsb2NrIG9ubHkgMSB0aHJl
YWQuCit9CisKK3ZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQoreworICAgIG1fY29u
ZGl0aW9uLnNpZ25hbCh0cnVlKTsgLy8gVW5ibG9jayBhbGwgdGhyZWFkcy4KIH0KIAogfSAvLyBu
YW1lc3BhY2UgV1RGCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26901</attachid>
            <date>2009-01-21 12:07:53 -0800</date>
            <delta_ts>2009-01-21 12:16:31 -0800</delta_ts>
            <desc>review notes (in IRC) addressed</desc>
            <filename>win32_3.txt</filename>
            <type>text/plain</type>
            <size>27385</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzOGJlYzI3Li5jOGZhMzM5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMDktMDEtMTUgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzczCisKKyAgICAgICAgSW1wbGVtZW50IFRo
cmVhZENvbmRpdGlvbjo6dGltZWRXYWl0KCkuCisgICAgICAgIFNpbmNlIHdlIGJvcnJvdyB0aGUg
Y29kZSBmb3IgY29uZGl0aW9uIHZhcmlhYmxlcyBmcm9tIG90aGVyIHNvdXJjZXMsCisgICAgICAg
IEkgZGlkIHRoZSBzYW1lIGZvciB0aW1lZFdhaXQoKS4gU2VlIGNvbW1lbnRzIGluIFRocmVhZGlu
Z1dpbi5jcHAgZm9yCisgICAgICAgIHJhdGlvbmFsZSBhbmQgbW9yZSBpbmZvLgorCisgICAgICAg
ICogd3RmL0NPTlRSSUJVVE9SUy5wdGhyZWFkcy13aW4zMjogCisgICAgICAgIEFkZGVkLiBBIGxp
c3Qgb2YgUHRocmVhZHMtd2luMzIgY29udHJpYnV0b3JzIG1lbnRpb25lZCBpbiB0aGVpciBsaWNl
bnNlLiBUaGUgbGljZW5zZSBpdHNlbGYKKyAgICAgICAgaXMgaW5jbHVkZWQgaW50byB3dGYvVGhy
ZWFkaW5nV2luMzIuY3BwLgorCisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAq
IHd0Zi9UaHJlYWRpbmdXaW4uY3BwOgorICAgICAgICBBZGRpdGlvbmFsIGluZm8gYW5kIFB0aHJl
YWRzLXdpbjMyIGxpY2Vuc2UgYXQgdGhlIGJlZ2lubmluZy4KKyAgICAgICAgKFdURjo6UGxhdGZv
cm1Db25kaXRpb246OnRpbWVkV2FpdCk6IG5ldyBtZXRob2QsIGRlcml2ZWQgZnJvbSBQdGhyZWFk
cy13aW4zMi4KKyAgICAgICAgKFdURjo6UGxhdGZvcm1Db25kaXRpb246OnNpZ25hbCk6IHNhbWUK
KyAgICAgICAgKFdURjo6VGhyZWFkQ29uZGl0aW9uOjpUaHJlYWRDb25kaXRpb24pOgorICAgICAg
ICAoV1RGOjpUaHJlYWRDb25kaXRpb246On5UaHJlYWRDb25kaXRpb24pOgorICAgICAgICAoV1RG
OjpUaHJlYWRDb25kaXRpb246OndhaXQpOiB0aGlzIG5vdyBjYWxscyBQbGF0Zm9ybUNvbmRpdGlv
bjo6dGltZWRXYWl0LgorICAgICAgICAoV1RGOjpUaHJlYWRDb25kaXRpb246OnRpbWVkV2FpdCk6
IHNhbWUKKyAgICAgICAgKFdURjo6VGhyZWFkQ29uZGl0aW9uOjpzaWduYWwpOiB0aGlzIG5vdyBj
YWxscyBQbGF0Zm9ybUNvbmRpdGlvbjo6c2lnbmFsLgorICAgICAgICAoV1RGOjpUaHJlYWRDb25k
aXRpb246OmJyb2FkY2FzdCk6IHNhbWUKKwogMjAwOS0wMS0xNCAgQWRhbSBUcmVhdCAgPGFkYW0u
dHJlYXRAdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgUXQgZnJvbSBE
bWl0cnkgVGl0b3YuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvQ09OVFJJQlVUT1JT
LnB0aHJlYWRzLXdpbjMyIGIvSmF2YVNjcmlwdENvcmUvd3RmL0NPTlRSSUJVVE9SUy5wdGhyZWFk
cy13aW4zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGUwZjI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL0NPTlRSSUJVVE9SUy5wdGhyZWFkcy13
aW4zMgpAQCAtMCwwICsxLDEzNyBAQAorVGhpcyBpcyBhIGNvcHkgb2YgQ09OVFJJQlVUT1JTIGZp
bGUgZm9yIHRoZSBQdGhyZWFkcy13aW4zMiBsaWJyYXJ5LCBkb3dubG9hZGVkCitmcm9tIGh0dHA6
Ly9zb3VyY2V3YXJlLm9yZy9jZ2ktYmluL2N2c3dlYi5jZ2kvfmNoZWNrb3V0fi9wdGhyZWFkcy9D
T05UUklCVVRPUlM/cmV2PTEuMzImY3Zzcm9vdD1wdGhyZWFkcy13aW4zMgorCitJbmNsdWRlZCBo
ZXJlIHRvIGNvbXBsaW1lbnQgdGhlIFB0aHJlYWRzLXdpbjMyIGxpY2Vuc2UgaGVhZGVyIGluIHd0
Zi9UaHJlYWRpbmdXaW4uY3BwIGZpbGUuCitXZWJLaXQgaXMgdXNpbmcgZGVyaXZlZCBzb3VyY2Vz
IG9mIFRocmVhZENvbmRpdGlvbiBjb2RlIGZyb20gUHRocmVhZHMtd2luMzIuCisKKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworQ29udHJpYnV0b3JzIChpbiBhcHByb3hpbWF0ZSBvcmRlciBvZiBh
cHBlYXJhbmNlKQorCitbU2VlIGFsc28gdGhlIENoYW5nZUxvZyBmaWxlIHdoZXJlIGluZGl2aWR1
YWxzIGFyZQorYXR0cmlidXRlZCBpbiBsb2cgZW50cmllcy4gTGlrZXdpc2UgaW4gdGhlIEZBUSBm
aWxlLl0KKworQmVuIEVsbGlzdG9uCQliamUgYXQgY3lnbnVzIGRvdCBjb20KKwkJCQkJSW5pdGlh
dGVkIHRoZSBwcm9qZWN0OworCQkJCQlzZXR1cCB0aGUgcHJvamVjdCBpbmZyYXN0cnVjdHVyZSAo
Q1ZTLCB3ZWIgcGFnZSwgZXRjLik7CisJCQkJCWVhcmx5IHByb3RvdHlwZSByb3V0aW5lcy4KK1Jv
c3MgSm9obnNvbgkJcnBqIGF0IGNhbGxpc3RvIGRvdCBjYW5iZXJyYSBkb3QgZWR1IGRvdCBhdQor
CQkJCQllYXJseSBwcm90b3R5cGUgcm91dGluZXM7CisJCQkJCW9uZ29pbmcgcHJvamVjdCBjb29y
ZGluYXRpb24vbWFpbnRlbmFuY2U7CisJCQkJCWltcGxlbWVudGF0aW9uIG9mIHNwaW4gbG9ja3Mg
YW5kIGJhcnJpZXJzOworCQkJCQl2YXJpb3VzIGVuaGFuY2VtZW50czsKKwkJCQkJYnVnIGZpeGVz
OworCQkJCQlkb2N1bWVudGF0aW9uOworCQkJCQl0ZXN0c3VpdGUuCitSb2JlcnQgQ29scXVob3Vu
CXJqYyBhdCB0cnVtcCBkb3QgbmV0IGRvdCBhdQorCQkJCQlFYXJseSBidWcgZml4ZXMuCitKb2hu
IEUuIEJvc3NvbQkJSm9obiBkb3QgQm9zc29tIGF0IGNvZ25vcyBkb3QgY29tCisJCQkJCUNvbnRy
aWJ1dGVkIHN1YnN0YW50aWFsIG9yaWdpbmFsIHdvcmtpbmcgaW1wbGVtZW50YXRpb247CisJCQkJ
CWJ1ZyBmaXhlczsKKwkJCQkJb25nb2luZyBndWlkYW5jZSBhbmQgc3RhbmRhcmRzIGludGVycHJl
dGF0aW9uLgorQW5kZXJzIE5vcmxhbmRlcglhbm9ybGFuZCBhdCBoZW0yIGRvdCBwYXNzYWdlbiBk
b3Qgc2UKKwkJCQkJRWFybHkgZW5oYW5jZW1lbnRzIGFuZCBydW50aW1lIGNoZWNraW5nIGZvciBz
dXBwb3J0ZWQKKwkJCQkJV2luMzIgcm91dGluZXMuCitUb3IgTGlsbHF2aXN0CQl0bWwgYXQgaWtp
IGRvdCBmaQorCQkJCQlHZW5lcmFsIGVuaGFuY2VtZW50czsKKwkJCQkJZWFybHkgYnVnIGZpeGVz
IHRvIGNvbmRpdGlvbiB2YXJpYWJsZXMuCitTY290dCBMaWdodG5lcgkJc2NvdHQgYXQgY3Vycmlj
dWx1bSBkb3QgY29tCisJCQkJCUJ1ZyBmaXguCitLZXZpbiBSdWxhbmQJCUtldmluIGRvdCBSdWxh
bmQgYXQgYW5oZXVzZXItYnVzY2ggZG90IGNvbQorCQkJCQlWYXJpb3VzIGJ1ZyBmaXhlcy4KK01p
a2UgUnVzc28JCW1pa2VyIGF0IGVhaSBkb3QgY29tCisJCQkJCUJ1ZyBmaXguCitNYXJrIEUuIEFy
bXN0cm9uZwlhdmFpbCBhdCBwYWNiZWxsIGRvdCBuZXQKKwkJCQkJQnVnIGZpeGVzLgorTG9yaW4g
SG9jaHN0ZWluIAlsbWggYXQgeGlwaG9zIGRvdCBjYQorCQkJCQlnZW5lcmFsIGJ1ZyBmaXhlczsg
YnVnIGZpeGVzIHRvIGNvbmRpdGlvbiB2YXJpYWJsZXMuCitQZXRlciBTbGFjaWsJCVBldGVyIGRv
dCBTbGFjaWsgYXQgdGF0cmFtZWQgZG90IHNrCisJCQkJCUJ1ZyBmaXhlcy4KK011bWl0IEtoYW4J
CWtoYW4gYXQgeHJheWxpdGggZG90IHdpc2MgZG90IGVkdQorCQkJCQlGaXhlcyB0byB3b3JrIHdp
dGggTWluZ3czMi4KK01pbGFuIEdhcmRpYW4JCW1nIGF0IHRhdHJhbWVkIGRvdCBzaworCQkJCQlC
dWcgZml4ZXMgYW5kIHJlcG9ydHMvYW5hbHlzZXMgb2Ygb2JzY3VyZSBwcm9ibGVtcy4KK0F1cmVs
aW8gTWVkaW5hCQlhdXJlbGlvbSBhdCBjcnQgZG90IGNvbQorCQkJCQlGaXJzdCBpbXBsZW1lbnRh
dGlvbiBvZiByZWFkLXdyaXRlIGxvY2tzLgorR3JhaGFtIER1bXBsZXRvbglHcmFoYW0gZG90IER1
bXBsZXRvbiBhdCByYSBkb3QgcGFkIGRvdCBvdGMgZG90IHRlbHN0cmEgZG90IGNvbSBkb3QgYXUK
KwkJCQkJQnVnIGZpeCBpbiBjb25kaXRpb24gdmFyaWFibGVzLgorVHJpc3RhbiBTYXZhdGllcgl0
cmlzdGFuIGF0IG1wZWd0diBkb3QgY29tCisJCQkJCVdpbkNFIHBvcnQuCitFcmlrIEhlbnNlbWEJ
CWVyaWsgYXQgaGVuc2VtYSBkb3QgeHM0YWxsIGRvdCBubAorCQkJCQlCdWcgZml4ZXMuCitSaWNo
IFBldGVycwkJcnBldGVycyBhdCBtaWNyby1tYWdpYyBkb3QgY29tCitUb2RkIE93ZW4JCXRvd2Vu
IGF0IGx1Y2lkY2FsbSBkb3QgZHJvcGJlYXIgZG90IGlkIGRvdCBhdQorCQkJCQlCdWcgZml4ZXMg
dG8gZGxsIGxvYWRpbmcuCitKYXNvbiBOeWUJCWpueWUgYXQgbmJuZXQgZG90IG5iIGRvdCBjYQor
CQkJCQlJbXBsZW1lbnRhdGlvbiBvZiBhc3luYyBjYW5jZWxhdGlvbi4KK0ZyZWQgRm9yZXN0ZXIJ
CWZmb3Jlc3QgYXQgZXRpY29tbSBkb3QgbmV0CitLZXZpbiBELiBDbGFyawkJa2NsYXJrIGF0IGNh
YmxldHJvbiBkb3QgY29tCitEYXZpZCBCYWdnZXR0CQlkbWIgYXQgaXRhc29mdHdhcmUgZG90IGNv
bQorCQkJCQlCdWcgZml4ZXMuCitQYXVsIFJlZG9uZG8JCXBhdWwgYXQgbWF0Y2h2aXNpb24gZG90
IGNvbQorU2NvdHQgTWNDYXNraWxsIAlzY290dCBhdCAzZGZ4IGRvdCBjb20KKwkJCQkJQnVnIGZp
eGVzLgorSmVmIEdlYXJoYXJ0CQlqZ2VhcmhhcnQgYXQgdHBzc3lzIGRvdCBjb20KKwkJCQkJQnVn
IGZpeC4KK0FydGh1ciBLYW50b3IJCWFrYW50b3IgYXQgYmV4dXNhIGRvdCBjb20KKwkJCQkJTXV0
ZXggZW5oYW5jZW1lbnRzLgorU3RldmVuIFJlZGRpZQkJc21yIGF0IGVzc2VtZXIgZG90IGNvbSBk
b3QgYXUKKwkJCQkJQnVnIGZpeC4KK0FsZXhhbmRlciBUZXJla2hvdglURVJFS0hPViBhdCBkZSBk
b3QgaWJtIGRvdCBjb20KKwkJCQkJUmUtaW1wbGVtZW50ZWQgYW5kIGltcHJvdmVkIHJlYWQtd3Jp
dGUgbG9ja3M7CisJCQkJCSh3aXRoIExvdWlzIFRob21hcykgcmUtaW1wbGVtZW50ZWQgYW5kIGlt
cHJvdmVkCisJCQkJCWNvbmRpdGlvbiB2YXJpYWJsZXM7CisJCQkJCWVuaGFuY2VtZW50cyB0byBz
ZW1hcGhvcmVzOworCQkJCQllbmhhbmNlbWVudHMgdG8gbXV0ZXhlczsKKwkJCQkJbmV3IG11dGV4
IGltcGxlbWVudGF0aW9uIGluICdmdXRleCcgc3R5bGU7CisJCQkJCXN1Z2dlc3RlZCBhIHJvYnVz
dCBpbXBsZW1lbnRhdGlvbiBvZiBwdGhyZWFkX29uY2UKKwkJCQkJc2ltaWxhciB0byB0aGF0IGlt
cGxlbWVudGVkIGJ5IFYuS2xpYXRoY2tvOworCQkJCQlzeXN0ZW0gY2xvY2sgY2hhbmdlIGhhbmRs
aW5nIHJlIENWIHRpbWVvdXRzOworCQkJCQlidWcgZml4ZXMuCitUaG9tYXMgUGZhZmYJCXRwZmFm
ZiBhdCBnbXggZG90IG5ldAorCQkJCQlDaGFuZ2VzIHRvIG1ha2UgQyB2ZXJzaW9uIHVzYWJsZSB3
aXRoIEMrKyBhcHBsaWNhdGlvbnM7CisJCQkJCXJlLWltcGxlbWVudGVkIG11dGV4IHJvdXRpbmVz
IHRvIGF2b2lkIFdpbjMyIG11dGV4ZXMKKwkJCQkJYW5kIFRyeUVudGVyQ3JpdGljYWxTZWN0aW9u
OworCQkJCQlwcm9jZWR1cmUgdG8gZml4IE1pbmd3MzIgdGhyZWFkLXNhZmV0eSBpc3N1ZXMuCitG
cmFuY28gQmV6CQlmcmFuY28gZG90IGJleiBhdCBnbXggZG90IGRlCisJCQkJCXByb2NlZHVyZSB0
byBmaXggTWluZ3czMiB0aHJlYWQtc2FmZXR5IGlzc3Vlcy4KK0xvdWlzIFRob21hcwkJbHRob21h
cyBhdCBhcmJpdHJhZGUgZG90IGNvbQorCQkJCQkod2l0aCBBbGV4YW5kZXIgVGVyZWtob3YpIHJl
LWltcGxlbWVudGVkIGFuZCBpbXByb3ZlZAorCQkJCQljb25kaXRpb24gdmFyaWFibGVzLgorRGF2
aWQgS29ybgkJZGdrIGF0IHJlc2VhcmNoIGRvdCBhdHQgZG90IGNvbQorCQkJCQlQb3J0ZWQgdG8g
VVdJTi4KK1BoaWwgRnJpc2JpZSwgSnIuCXBoaWwgYXQgaGF3a3NvZnQgZG90IGNvbQorCQkJCQlC
dWcgZml4LgorUmFsZiBCcmVzZQkJUmFsZiBkb3QgQnJlc2UgYXQgcGRiNCBkb3Qgc2llbWVucyBk
b3QgZGUKKwkJCQkJQnVnIGZpeC4KK3ByaW9ueCBhdCBqdW5vIGRvdCBjb20gCXByaW9ueCBhdCBq
dW5vIGRvdCBjb20KKwkJCQkJQnVnIGZpeGVzLgorTWF4IFdvb2RidXJ5CQltdGV3IGF0IGNkcyBk
b3QgZHVrZSBkb3QgZWR1CisJCQkJCVBPU0lYIHZlcnNpb25pbmcgY29uZGl0aW9uYWxzOworCQkJ
CQlyZWR1Y2VkIG5hbWVzcGFjZSBwb2xsdXRpb247CisJCQkJCWlkZWEgdG8gc2VwYXJhdGUgcm91
dGluZXMgdG8gcmVkdWNlIHN0YXRpY2FsbHkKKwkJCQkJbGlua2VkIGltYWdlIHNpemVzLgorUm9i
IEZhbm5lcgkJcmZhbm5lciBhdCBzdG9uZXRocmVlIGRvdCBjb20KKwkJCQkJQnVnIGZpeC4KK01p
Y2hhZWwgSm9obnNvbiAJbWljaGFlbGogYXQgbWFpbmUgZG90IHJyIGRvdCBjb20KKwkJCQkJQnVn
IGZpeC4KK05pY29sYXMgQmFycnkJCWJvb3phaSBhdCB5YWhvbyBkb3QgY29tCisJCQkJCUJ1ZyBm
aXhlcy4KK1BpZXQgdmFuIEJydWdnZW4JcGlldHZiIGF0IG5ld2JyaWRnZXMgZG90IG5sCisJCQkJ
CUJ1ZyBmaXguCitNYWtvdG8gS2F0bwkJcmF2ZW4gYXQgb2xkc2tvb2wgZG90IGpwCisJCQkJCUFN
RDY0IHBvcnQuCitQYW5hZ2lvdGlzIEUuIEhhZGppZG91a2FzCXBlaCBhdCBocGNsYWIgZG90IGNl
aWQgZG90IHVwYXRyYXMgZG90IGdyCisJCQkJCUNvbnRyaWJ1dGVkIHRoZSBRdWV1ZVVzZXJBUENF
eCBwYWNrYWdlIHdoaWNoCisJCQkJCW1ha2VzIHByZWVtcHRpdmUgYXN5bmMgY2FuY2VsYXRpb24g
cG9zc2libGUuCitXaWxsIEJyeWFudAkJd2lsbCBkb3QgYnJ5YW50IGF0IGVjb3NtIGRvdCBjb20K
KwkJCQkJQm9ybGFuZCBjb21waWxlciBwYXRjaCBhbmQgbWFrZWZpbGUuCitBbnVqIEdveWFsCQlh
bnVqIGRvdCBnb3lhbCBhdCBnbWFpbCBkb3QgY29tCisJCQkJCVBvcnQgdG8gRGlnaXRhbCBNYXJz
IGNvbXBpbGVyLgorR290dGxvYiBGcmVnZQkJZ290dGxvYmZyZWdlIGF0ICBnbWFpbCBkb3QgY29t
CisJCQkJCXJlLWltcGxlbWVudGVkIHB0aHJlYWRfb25jZSAodmVyc2lvbiAyKQorCQkJCQkocHRo
cmVhZF9vbmNlIGNhbmNlbGxhdGlvbiBhZGRlZCBieSBycGopLgorVmxhZGltaXIgS2xpYXRjaGtv
CXZsYWRpbWlyIGF0IGtsaWF0Y2hrbyBkb3QgY29tCisJCQkJCXJlaW1wbGVtZW50ZWQgcHRocmVh
ZF9vbmNlIHdpdGggdGhlIHNhbWUgZm9ybQorCQkJCQlhcyBkZXNjcmliZWQgYnkgQS5UZXJla2hv
diAobGF0ZXIgdmVyc2lvbiAyKTsKKwkJCQkJaW1wbGVtZW50YXRpb24gb2YgTUNTIChNZWxsb3It
Q3J1bW1leS9TY290dCkgbG9ja3MuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZy5oIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L1RocmVhZGluZy5oCmluZGV4IDFiMTdlZWIuLjFmMzY4N2UgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5n
LmgKQEAgLTEzMiwxMiArMTMyLDE1IEBAIHN0cnVjdCBQbGF0Zm9ybU11dGV4IHsKICAgICBzaXpl
X3QgbV9yZWN1cnNpb25Db3VudDsKIH07CiBzdHJ1Y3QgUGxhdGZvcm1Db25kaXRpb24gewotICAg
IHNpemVfdCBtX3RpbWVkT3V0OwotICAgIHNpemVfdCBtX2Jsb2NrZWQ7Ci0gICAgc2l6ZV90IG1f
d2FpdGluZ0ZvclJlbW92YWw7Ci0gICAgSEFORExFIG1fZ2F0ZTsKLSAgICBIQU5ETEUgbV9xdWV1
ZTsKLSAgICBIQU5ETEUgbV9tdXRleDsKKyAgICBzaXplX3QgbV93YWl0ZXJzR29uZTsKKyAgICBz
aXplX3QgbV93YWl0ZXJzQmxvY2tlZDsKKyAgICBzaXplX3QgbV93YWl0ZXJzVG9VbmJsb2NrOyAK
KyAgICBIQU5ETEUgbV9ibG9ja0xvY2s7CisgICAgSEFORExFIG1fYmxvY2tRdWV1ZTsKKyAgICBI
QU5ETEUgbV91bmJsb2NrTG9jazsKKworICAgIGJvb2wgdGltZWRXYWl0KFBsYXRmb3JtTXV0ZXgm
LCBEV09SRCBkdXJhdGlvbk1pbGxpc2Vjb25kcyk7CisgICAgdm9pZCBzaWduYWwoYm9vbCB1bmJs
b2NrQWxsKTsKIH07CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybU11dGV4OwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS93dGYvVGhyZWFkaW5nV2luLmNwcAppbmRleCA4MGE1YmYzLi4zOTlmYjM4IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9KYXZhU2NyaXB0Q29y
ZS93dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDQwICsyNSw2MSBAQAogICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhl
cmUgYXJlIG51bWVyb3VzIGFjYWRlbWljIGFuZCBwcmFjdGljYWwgd29ya3Mgb24gaG93IHRvIGlt
cGxlbWVudCBwdGhyZWFkX2NvbmRfd2FpdC9wdGhyZWFkX2NvbmRfc2lnbmFsL3B0aHJlYWRfY29u
ZF9icm9hZGNhc3QKKyAqIGZ1bmN0aW9ucyBvbiBXaW4zMi4gSGVyZSBpcyBvbmUgZXhhbXBsZTog
aHR0cDovL3d3dy5jcy53dXN0bC5lZHUvfnNjaG1pZHQvd2luMzItY3YtMS5odG1sIHdoaWNoIGlz
IHdpZGVseSBjcmVkaXRlZCBhcyBhICdzdGFydGluZyBwb2ludCcKKyAqIG9mIG1vZGVybiBhdHRl
bXB0cy4gVGhlcmUgYXJlIHNldmVyYWwgbW9yZSBvciBsZXNzIHByb3ZlbiBpbXBsZW1lbnRhdGlv
bnMsIG9uZSBpbiBCb29zdCBDKysgbGlicmFyeSAoaHR0cDovL3d3dy5ib29zdC5vcmcpIGFuZCBh
bm90aGVyCisgKiBpbiBwdGhyZWFkcy13aW4zMiAoaHR0cDovL3NvdXJjZXdhcmUub3JnL3B0aHJl
YWRzLXdpbjMyLykuCisgKgorICogVGhlIG51bWJlciBvZiBhcnRpY2xlcyBhbmQgZGlzY3Vzc2lv
bnMgaXMgdGhlIGV2aWRlbmNlIG9mIHNpZ25pZmljYW50IGRpZmZpY3VsdGllcyBpbiBpbXBsZW1l
bnRpbmcgdGhlc2UgcHJpbWl0aXZlcyBjb3JyZWN0bHkuCisgKiBUaGUgYnJpZWYgc2VhcmNoIG9m
IHJldmlzaW9ucywgQ2hhbmdlTG9nIGVudHJpZXMsIGRpc2N1c3Npb25zIGluIGNvbXAucHJvZ3Jh
bW1pbmcudGhyZWFkcyBhbmQgb3RoZXIgcGxhY2VzIGNsZWFybHkgZG9jdW1lbnRzCisgKiBudW1l
cm91cyBwaXRmYWxscyBhbmQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgdGhlIGF1dGhvcnMgaGFkIHRv
IG92ZXJjb21lIHRvIGFycml2ZSB0byB0aGUgc3VpdGFibGUgaW1wbGVtZW50YXRpb25zLgorICog
T3B0aW1hbGx5LCBXZWJLaXQgd291bGQgdXNlIG9uZSBvZiB0aG9zZSBzdXBwb3J0ZWQvdGVzdGVk
IGxpYnJhcmllcyBkaXJlY3RseS4gVG8gcm9sbCBvdXQgb3VyIG93biBpbXBsZW1lbnRhdGlvbiBp
cyBpbXByYWN0aWNhbCwKKyAqIGlmIGV2ZW4gZm9yIHRoZSBsYWNrIG9mIHN1ZmZpY2llbnQgdGVz
dGluZy4gSG93ZXZlciwgYSBmYWl0aGZ1bCByZXByb2R1Y3Rpb24gb2YgdGhlIGNvZGUgZnJvbSBv
bmUgb2YgdGhlIHBvcHVsYXIgc3VwcG9ydGVkCisgKiBsaWJyYXJpZXMgc2VlbXMgdG8gYmUgYSBn
b29kIGNvbXByb21pc2UuCisgKgorICogVGhlIGVhcmx5IEJvb3N0IGltcGxlbWVudGF0aW9uICho
dHRwOi8vd3d3LmJveGJhY2t1cC5vcmcvdHJhYy9icm93c2VyL2JveC9uaWNrL3dpbi9saWIvd2lu
MzIvYm9vc3RfMV8zMl8wL2xpYnMvdGhyZWFkL3NyYy9jb25kaXRpb24uY3BwP3Jldj0zMCkKKyAq
IGlzIGlkZW50aWNhbCB0byBwdGhyZWFkcy13aW4zMiAoaHR0cDovL3NvdXJjZXdhcmUub3JnL2Nn
aS1iaW4vY3Zzd2ViLmNnaS9wdGhyZWFkcy9wdGhyZWFkX2NvbmRfd2FpdC5jP3Jldj0xLjEwJmNv
bnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cCZjdnNyb290PXB0aHJlYWRzLXdpbjMyKS4K
KyAqIEN1cnJlbnQgQm9vc3QgdXNlcyB5ZXQgYW5vdGhlciAoYWx0aG91Z2ggc2VlbWluZ2x5IGVx
dWl2YWxlbnQpIGFsZ29yaXRobSB3aGljaCBjYW1lIGZyb20gdGhlaXIgJ3RocmVhZCByZXdyaXRl
JyBlZmZvcnQuCiAgKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIE5vdGU6ICBUaGUgaW1w
bGVtZW50YXRpb24gb2YgY29uZGl0aW9uIHZhcmlhYmxlcyB1bmRlciB0aGUgV2luZG93cwotICog
cGxhZm9ybSB3YXMgYmFzZWQgb24gdGhhdCBvZiB0aGUgZXhjZWxsZW50IEJPT1NUIEMrKyBsaWJy
YXJ5LiAgSXQKLSAqIGhhcyBiZWVuIHJld3JpdHRlbiB0byBmaXQgaW4gd2l0aCB0aGUgV2ViS2l0
IGFyY2hpdGVjdHVyZSBhbmQgdG8KLSAqIHVzZSBpdHMgY29kaW5nIGNvbnZlbnRpb25zLgotICog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKyAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0aW1lZFdhaXQvc2ln
bmFsL2Jyb2FkY2FzdCBpbXBsZW1lbnRhdGlvbnMgdHJhbnNsYXRlZCB0byBXZWJLaXQgY29kaW5n
IHN0eWxlIGZyb20gdGhlIGxhdGVzdCBhbGdvcml0aG0gYnkKKyAqIEFsZXhhbmRlciBUZXJla2hv
diBhbmQgTG91aXMgVGhvbWFzLCBhcyBjYXB0dXJlZCBoZXJlOiBodHRwOi8vc291cmNld2FyZS5v
cmcvY2dpLWJpbi9jdnN3ZWIuY2dpL3B0aHJlYWRzL3B0aHJlYWRfY29uZF93YWl0LmM/cmV2PTEu
MTAmY29udGVudC10eXBlPXRleHQveC1jdnN3ZWItbWFya3VwJmN2c3Jvb3Q9cHRocmVhZHMtd2lu
MzIKKyAqIEl0IHJlcGxhY2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVpciBwcmV2aW91cyBh
bGdvcml0aG0sIGFsc28gZG9jdW1lbnRlZCBpbiB0aGUgc2FtZSBzb3VyY2UgYWJvdmUuCisgKiBU
aGUgbmFtaW5nIGFuZCBjb21tZW50cyBhcmUgbGVmdCB2ZXJ5IGNsb3NlIHRvIG9yaWdpbmFsIHRv
IGVuYWJsZSBlYXN5IGNyb3NzLWNoZWNrLgogICoKLSAqIFRoZSBCb29zdCBsaWNlbnNlIGlzIHZp
cnR1YWxseSBpZGVudGljYWwgdG8gdGhlIEFwcGxlIHZhcmlhdGlvbiBhdCB0aGUKLSAqIHRvcCBv
ZiB0aGlzIGZpbGUsIGJ1dCBpcyBpbmNsdWRlZCBoZXJlIGZvciBjb21wbGV0ZW5lc3M6CisgKiBU
aGUgY29ycmVzcG9uZGluZyBQdGhyZWFkcy13aW4zMiBMaWNlbnNlIGlzIGluY2x1ZGVkIGJlbG93
LCBhbmQgQ09OVFJJQlVUT1JTIGZpbGUgd2hpY2ggaXQgcmVmZXJzIHRvIGlzIGFkZGVkIHRvCisg
KiBzb3VyY2UgZGlyZWN0b3J5IChhcyBDT05UUklCVVRPUlMucHRocmVhZHMtd2luMzIpLgorICov
CisKKy8qCisgKiAgICAgIFB0aHJlYWRzLXdpbjMyIC0gUE9TSVggVGhyZWFkcyBMaWJyYXJ5IGZv
ciBXaW4zMgorICogICAgICBDb3B5cmlnaHQoQykgMTk5OCBKb2huIEUuIEJvc3NvbQorICogICAg
ICBDb3B5cmlnaHQoQykgMTk5OSwyMDA1IFB0aHJlYWRzLXdpbjMyIGNvbnRyaWJ1dG9ycwogICoK
LSAqIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAy
MDAzCisgKiAgICAgIENvbnRhY3QgRW1haWw6IHJwakBjYWxsaXN0by5jYW5iZXJyYS5lZHUuYXUK
ICAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g
YW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KLSAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNv
ZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Ci0gKiB0aGlz
IGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlz
dHJpYnV0ZSwKLSAqIGV4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBw
cmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCi0gKiBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p
dCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bwotICog
ZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgIFRoZSBjdXJyZW50
IGxpc3Qgb2YgY29udHJpYnV0b3JzIGlzIGNvbnRhaW5lZAorICogICAgICBpbiB0aGUgZmlsZSBD
T05UUklCVVRPUlMgaW5jbHVkZWQgd2l0aCB0aGUgc291cmNlCisgKiAgICAgIGNvZGUgZGlzdHJp
YnV0aW9uLiBUaGUgbGlzdCBjYW4gYWxzbyBiZSBzZWVuIGF0IHRoZQorICogICAgICBmb2xsb3dp
bmcgV29ybGQgV2lkZSBXZWIgbG9jYXRpb246CisgKiAgICAgIGh0dHA6Ly9zb3VyY2VzLnJlZGhh
dC5jb20vcHRocmVhZHMtd2luMzIvY29udHJpYnV0b3JzLmh0bWwKICAqCi0gKiBUaGUgY29weXJp
Z2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGlu
Y2x1ZGluZwotICogdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKLSAqIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNv
cGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAotICogYWxsIGRl
cml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVy
aXZhdGl2ZQotICogd29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1
dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5Ci0gKiBhIHNvdXJjZSBsYW5ndWFnZSBwcm9j
ZXNzb3IuCisgKiAgICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogICAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICAgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgogICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU
IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVO
VC4gSU4gTk8gRVZFTlQKLSAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUg
RElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgREFNQUdFUyBP
UiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF
LAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU
V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisg
KiAgICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogICAgICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogICAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5IGluIHRo
ZSBmaWxlIENPUFlJTkcuTElCOworICogICAgICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgICAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCkBAIC02OSw2ICs5MSw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjaW5j
bHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvUmFuZG9tTnVtYmVyU2VlZC5oPgpAQCAtMjE0LDExICsyMzcsMTEgQEAgaW50IHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1bHQp
CiAgICAgaWYgKCF0aHJlYWRIYW5kbGUpCiAgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRp
ZmllciAldSBkaWQgbm90IGNvcnJlc3BvbmQgdG8gYW4gYWN0aXZlIHRocmVhZCB3aGVuIHRyeWlu
ZyB0byBxdWl0IiwgdGhyZWFkSUQpOwogIAotICAgIERXT1JEIGpvaW5SZXN1bHQgPSA6OldhaXRG
b3JTaW5nbGVPYmplY3QodGhyZWFkSGFuZGxlLCBJTkZJTklURSk7CisgICAgRFdPUkQgam9pblJl
c3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkSGFuZGxlLCBJTkZJTklURSk7CiAgICAg
aWYgKGpvaW5SZXN1bHQgPT0gV0FJVF9GQUlMRUQpCiAgICAgICAgIExPR19FUlJPUigiVGhyZWFk
SWRlbnRpZmllciAldSB3YXMgZm91bmQgdG8gYmUgZGVhZGxvY2tlZCB0cnlpbmcgdG8gcXVpdCIs
IHRocmVhZElEKTsKIAotICAgIDo6Q2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKKyAgICBDbG9z
ZUhhbmRsZSh0aHJlYWRIYW5kbGUpOwogICAgIGNsZWFyVGhyZWFkSGFuZGxlRm9ySWRlbnRpZmll
cih0aHJlYWRJRCk7CiAKICAgICByZXR1cm4gam9pblJlc3VsdDsKQEAgLTIzMCwxMyArMjUzLDEz
IEBAIHZvaWQgZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCiAgICAgCiAg
ICAgSEFORExFIHRocmVhZEhhbmRsZSA9IHRocmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFk
SUQpOwogICAgIGlmICh0aHJlYWRIYW5kbGUpCi0gICAgICAgIDo6Q2xvc2VIYW5kbGUodGhyZWFk
SGFuZGxlKTsKKyAgICAgICAgQ2xvc2VIYW5kbGUodGhyZWFkSGFuZGxlKTsKICAgICBjbGVhclRo
cmVhZEhhbmRsZUZvcklkZW50aWZpZXIodGhyZWFkSUQpOwogfQogCiBUaHJlYWRJZGVudGlmaWVy
IGN1cnJlbnRUaHJlYWQoKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRJZGVudGlm
aWVyPig6OkdldEN1cnJlbnRUaHJlYWRJZCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhy
ZWFkSWRlbnRpZmllcj4oR2V0Q3VycmVudFRocmVhZElkKCkpOwogfQogCiBib29sIGlzTWFpblRo
cmVhZCgpCkBAIC0yNDcsMTcgKzI3MCwxNyBAQCBib29sIGlzTWFpblRocmVhZCgpCiBNdXRleDo6
TXV0ZXgoKQogewogICAgIG1fbXV0ZXgubV9yZWN1cnNpb25Db3VudCA9IDA7Ci0gICAgOjpJbml0
aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZtX211dGV4Lm1faW50ZXJuYWxNdXRleCk7CisgICAgSW5p
dGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmbV9tdXRleC5tX2ludGVybmFsTXV0ZXgpOwogfQogCiBN
dXRleDo6fk11dGV4KCkKIHsKLSAgICA6OkRlbGV0ZUNyaXRpY2FsU2VjdGlvbigmbV9tdXRleC5t
X2ludGVybmFsTXV0ZXgpOworICAgIERlbGV0ZUNyaXRpY2FsU2VjdGlvbigmbV9tdXRleC5tX2lu
dGVybmFsTXV0ZXgpOwogfQogCiB2b2lkIE11dGV4Ojpsb2NrKCkKIHsKLSAgICA6OkVudGVyQ3Jp
dGljYWxTZWN0aW9uKCZtX211dGV4Lm1faW50ZXJuYWxNdXRleCk7CisgICAgRW50ZXJDcml0aWNh
bFNlY3Rpb24oJm1fbXV0ZXgubV9pbnRlcm5hbE11dGV4KTsKICAgICArK21fbXV0ZXgubV9yZWN1
cnNpb25Db3VudDsKIH0KICAgICAKQEAgLTI2OSwxNCArMjkyLDE0IEBAIGJvb2wgTXV0ZXg6OnRy
eUxvY2soKQogICAgIC8vIHRyZWF0cyB0aGlzIGFzIGEgc3VjY2Vzc2Z1bCBjYXNlLCBpdCBjaGFu
Z2VzIHRoZSBiZWhhdmlvciBvZiBzZXZlcmFsCiAgICAgLy8gdGVzdHMgaW4gV2ViS2l0IHRoYXQg
Y2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHRocmVhZCBhbHJlYWR5CiAgICAgLy8gb3duZWQg
dGhpcyBtdXRleCAoc2VlIGUuZy4sIEljb25EYXRhYmFzZTo6Z2V0T3JDcmVhdGVJY29uUmVjb3Jk
KQotICAgIERXT1JEIHJlc3VsdCA9IDo6VHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24oJm1fbXV0ZXgu
bV9pbnRlcm5hbE11dGV4KTsKKyAgICBEV09SRCByZXN1bHQgPSBUcnlFbnRlckNyaXRpY2FsU2Vj
dGlvbigmbV9tdXRleC5tX2ludGVybmFsTXV0ZXgpOwogICAgIAogICAgIGlmIChyZXN1bHQgIT0g
MCkgeyAgICAgICAvLyBXZSBnb3QgdGhlIGxvY2sKICAgICAgICAgLy8gSWYgdGhpcyB0aHJlYWQg
YWxyZWFkeSBoYWQgdGhlIGxvY2ssIHdlIG11c3QgdW5sb2NrIGFuZAogICAgICAgICAvLyByZXR1
cm4gZmFsc2Ugc28gdGhhdCB3ZSBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgUE9TSVgncwogICAgICAg
ICAvLyBwdGhyZWFkX211dGV4X3RyeWxvY2s6CiAgICAgICAgIGlmIChtX211dGV4Lm1fcmVjdXJz
aW9uQ291bnQgPiAwKSB7Ci0gICAgICAgICAgICA6OkxlYXZlQ3JpdGljYWxTZWN0aW9uKCZtX211
dGV4Lm1faW50ZXJuYWxNdXRleCk7CisgICAgICAgICAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigm
bV9tdXRleC5tX2ludGVybmFsTXV0ZXgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAKQEAgLTI5MCwxODMgKzMxMywxNjUgQEAgYm9vbCBNdXRleDo6dHJ5TG9jaygpCiB2
b2lkIE11dGV4Ojp1bmxvY2soKQogewogICAgIC0tbV9tdXRleC5tX3JlY3Vyc2lvbkNvdW50Owot
ICAgIDo6TGVhdmVDcml0aWNhbFNlY3Rpb24oJm1fbXV0ZXgubV9pbnRlcm5hbE11dGV4KTsKKyAg
ICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmbV9tdXRleC5tX2ludGVybmFsTXV0ZXgpOwogfQogCi1z
dGF0aWMgY29uc3QgbG9uZyBNYXhTZW1hcGhvcmVDb3VudCA9IHN0YXRpY19jYXN0PGxvbmc+KH4w
VUwgPj4gMSk7Ci0KLVRocmVhZENvbmRpdGlvbjo6VGhyZWFkQ29uZGl0aW9uKCkKK2Jvb2wgUGxh
dGZvcm1Db25kaXRpb246OnRpbWVkV2FpdChQbGF0Zm9ybU11dGV4JiBtdXRleCwgRFdPUkQgZHVy
YXRpb25NaWxsaXNlY29uZHMpCiB7Ci0gICAgbV9jb25kaXRpb24ubV90aW1lZE91dCA9IDA7Ci0g
ICAgbV9jb25kaXRpb24ubV9ibG9ja2VkID0gMDsKLSAgICBtX2NvbmRpdGlvbi5tX3dhaXRpbmdG
b3JSZW1vdmFsID0gMDsKLSAgICBtX2NvbmRpdGlvbi5tX2dhdGUgPSA6OkNyZWF0ZVNlbWFwaG9y
ZSgwLCAxLCAxLCAwKTsKLSAgICBtX2NvbmRpdGlvbi5tX3F1ZXVlID0gOjpDcmVhdGVTZW1hcGhv
cmUoMCwgMCwgTWF4U2VtYXBob3JlQ291bnQsIDApOwotICAgIG1fY29uZGl0aW9uLm1fbXV0ZXgg
PSA6OkNyZWF0ZU11dGV4KDAsIDAsIDApOwotCi0gICAgaWYgKCFtX2NvbmRpdGlvbi5tX2dhdGUg
fHwgIW1fY29uZGl0aW9uLm1fcXVldWUgfHwgIW1fY29uZGl0aW9uLm1fbXV0ZXgpIHsKLSAgICAg
ICAgaWYgKG1fY29uZGl0aW9uLm1fZ2F0ZSkKLSAgICAgICAgICAgIDo6Q2xvc2VIYW5kbGUobV9j
b25kaXRpb24ubV9nYXRlKTsKLSAgICAgICAgaWYgKG1fY29uZGl0aW9uLm1fcXVldWUpCi0gICAg
ICAgICAgICA6OkNsb3NlSGFuZGxlKG1fY29uZGl0aW9uLm1fcXVldWUpOwotICAgICAgICBpZiAo
bV9jb25kaXRpb24ubV9tdXRleCkKLSAgICAgICAgICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRp
b24ubV9tdXRleCk7Ci0gICAgfQotfQotCi1UaHJlYWRDb25kaXRpb246On5UaHJlYWRDb25kaXRp
b24oKQotewotICAgIDo6Q2xvc2VIYW5kbGUobV9jb25kaXRpb24ubV9nYXRlKTsKLSAgICA6OkNs
b3NlSGFuZGxlKG1fY29uZGl0aW9uLm1fcXVldWUpOwotICAgIDo6Q2xvc2VIYW5kbGUobV9jb25k
aXRpb24ubV9tdXRleCk7Ci19Ci0gICAgCi12b2lkIFRocmVhZENvbmRpdGlvbjo6d2FpdChNdXRl
eCYgbXV0ZXgpCi17Ci0gICAgUGxhdGZvcm1NdXRleCYgY3MgPSBtdXRleC5pbXBsKCk7Ci0KICAg
ICAvLyBFbnRlciB0aGUgd2FpdCBzdGF0ZS4KLSAgICBEV09SRCByZXMgPSA6OldhaXRGb3JTaW5n
bGVPYmplY3QobV9jb25kaXRpb24ubV9nYXRlLCBJTkZJTklURSk7CisgICAgRFdPUkQgcmVzID0g
V2FpdEZvclNpbmdsZU9iamVjdChtX2Jsb2NrTG9jaywgSU5GSU5JVEUpOwogICAgIEFTU0VSVChy
ZXMgPT0gV0FJVF9PQkpFQ1RfMCk7Ci0gICAgKyttX2NvbmRpdGlvbi5tX2Jsb2NrZWQ7Ci0gICAg
cmVzID0gOjpSZWxlYXNlU2VtYXBob3JlKG1fY29uZGl0aW9uLm1fZ2F0ZSwgMSwgMCk7CisgICAg
KyttX3dhaXRlcnNCbG9ja2VkOworICAgIHJlcyA9IFJlbGVhc2VTZW1hcGhvcmUobV9ibG9ja0xv
Y2ssIDEsIDApOwogICAgIEFTU0VSVChyZXMpOwogCi0gICAgOjpMZWF2ZUNyaXRpY2FsU2VjdGlv
bigmY3MubV9pbnRlcm5hbE11dGV4KTsKKyAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmbXV0ZXgu
bV9pbnRlcm5hbE11dGV4KTsKIAotICAgIHJlcyA9IDo6V2FpdEZvclNpbmdsZU9iamVjdChtX2Nv
bmRpdGlvbi5tX3F1ZXVlLCBJTkZJTklURSk7Ci0gICAgQVNTRVJUKHJlcyA9PSBXQUlUX09CSkVD
VF8wKTsKKyAgICAvLyBNYWluIHdhaXQgLSB1c2UgdGltZW91dC4KKyAgICBib29sIHRpbWVkT3V0
ID0gKFdhaXRGb3JTaW5nbGVPYmplY3QobV9ibG9ja1F1ZXVlLCBkdXJhdGlvbk1pbGxpc2Vjb25k
cykgPT0gV0FJVF9USU1FT1VUKTsKIAotICAgIHJlcyA9IDo6V2FpdEZvclNpbmdsZU9iamVjdCht
X2NvbmRpdGlvbi5tX211dGV4LCBJTkZJTklURSk7CisgICAgcmVzID0gV2FpdEZvclNpbmdsZU9i
amVjdChtX3VuYmxvY2tMb2NrLCBJTkZJTklURSk7CiAgICAgQVNTRVJUKHJlcyA9PSBXQUlUX09C
SkVDVF8wKTsKLSAgICBzaXplX3Qgd2FzV2FpdGluZyA9IG1fY29uZGl0aW9uLm1fd2FpdGluZ0Zv
clJlbW92YWw7Ci0gICAgc2l6ZV90IHdhc1RpbWVkT3V0ID0gbV9jb25kaXRpb24ubV90aW1lZE91
dDsKLSAgICBpZiAod2FzV2FpdGluZyAhPSAwKSB7Ci0gICAgICAgIGlmICgtLW1fY29uZGl0aW9u
Lm1fd2FpdGluZ0ZvclJlbW92YWwgPT0gMCkgewotICAgICAgICAgICAgaWYgKG1fY29uZGl0aW9u
Lm1fYmxvY2tlZCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzID0gOjpSZWxlYXNlU2VtYXBo
b3JlKG1fY29uZGl0aW9uLm1fZ2F0ZSwgMSwgMCk7ICAvLyBvcGVuIG1fZ2F0ZQotICAgICAgICAg
ICAgICAgIEFTU0VSVChyZXMpOwotICAgICAgICAgICAgICAgIHdhc1dhaXRpbmcgPSAwOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobV9jb25kaXRpb24ubV90aW1lZE91dCAh
PSAwKQotICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLm1fdGltZWRPdXQgPSAwOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmICgrK21fY29uZGl0aW9uLm1fdGltZWRPdXQgPT0gKChzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KSgpIC8gMikpIHsKLSAgICAgICAgLy8gdGltZW91
dCBvY2N1cmVkLCBub3JtYWxpemUgdGhlIG1fY29uZGl0aW9uLm1fdGltZWRPdXQgY291bnQKKwor
ICAgIGludCBzaWduYWxzTGVmdCA9IG1fd2FpdGVyc1RvVW5ibG9jazsKKworICAgIGlmIChtX3dh
aXRlcnNUb1VuYmxvY2spCisgICAgICAgIC0tbV93YWl0ZXJzVG9VbmJsb2NrOworICAgIGVsc2Ug
aWYgKCsrbV93YWl0ZXJzR29uZSA9PSAoSU5UX01BWCAvIDIpKSB7IC8vIHRpbWVvdXQvY2FuY2Vs
ZWQgb3Igc3B1cmlvdXMgc2VtYXBob3JlCisgICAgICAgIC8vIHRpbWVvdXQgb3Igc3B1cmlvdXMg
d2FrZXVwIG9jY3VyZWQsIG5vcm1hbGl6ZSB0aGUgbV93YWl0ZXJzR29uZSBjb3VudAogICAgICAg
ICAvLyB0aGlzIG1heSBvY2N1ciBpZiBtYW55IGNhbGxzIHRvIHdhaXQgd2l0aCBhIHRpbWVvdXQg
YXJlIG1hZGUgYW5kCiAgICAgICAgIC8vIG5vIGNhbGwgdG8gbm90aWZ5XyogaXMgbWFkZQotICAg
ICAgICByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmplY3QobV9jb25kaXRpb24ubV9nYXRlLCBJTkZJ
TklURSk7CisgICAgICAgIHJlcyA9IFdhaXRGb3JTaW5nbGVPYmplY3QobV9ibG9ja0xvY2ssIElO
RklOSVRFKTsKICAgICAgICAgQVNTRVJUKHJlcyA9PSBXQUlUX09CSkVDVF8wKTsKLSAgICAgICAg
bV9jb25kaXRpb24ubV9ibG9ja2VkIC09IG1fY29uZGl0aW9uLm1fdGltZWRPdXQ7Ci0gICAgICAg
IHJlcyA9IDo6UmVsZWFzZVNlbWFwaG9yZShtX2NvbmRpdGlvbi5tX2dhdGUsIDEsIDApOworICAg
ICAgICBtX3dhaXRlcnNCbG9ja2VkIC09IG1fd2FpdGVyc0dvbmU7CisgICAgICAgIHJlcyA9IFJl
bGVhc2VTZW1hcGhvcmUobV9ibG9ja0xvY2ssIDEsIDApOwogICAgICAgICBBU1NFUlQocmVzKTsK
LSAgICAgICAgbV9jb25kaXRpb24ubV90aW1lZE91dCA9IDA7CisgICAgICAgIG1fd2FpdGVyc0dv
bmUgPSAwOwogICAgIH0KLSAgICByZXMgPSA6OlJlbGVhc2VNdXRleChtX2NvbmRpdGlvbi5tX211
dGV4KTsKKworICAgIHJlcyA9IFJlbGVhc2VNdXRleChtX3VuYmxvY2tMb2NrKTsKICAgICBBU1NF
UlQocmVzKTsKIAotICAgIGlmICh3YXNXYWl0aW5nID09IDEpIHsKLSAgICAgICAgZm9yICgvKiov
IDsgd2FzVGltZWRPdXQ7IC0td2FzVGltZWRPdXQpIHsKLSAgICAgICAgICAgIC8vIGJldHRlciBu
b3cgdGhhbiBzcHVyaW91cyBsYXRlcgotICAgICAgICAgICAgcmVzID0gOjpXYWl0Rm9yU2luZ2xl
T2JqZWN0KG1fY29uZGl0aW9uLm1fcXVldWUsIElORklOSVRFKTsKLSAgICAgICAgICAgIEFTU0VS
VChyZXMgPT0gV0FJVF9PQkpFQ1RfMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzID0gOjpSZWxl
YXNlU2VtYXBob3JlKG1fY29uZGl0aW9uLm1fZ2F0ZSwgMSwgMCk7CisgICAgaWYgKHNpZ25hbHNM
ZWZ0ID09IDEpIHsKKyAgICAgICAgcmVzID0gUmVsZWFzZVNlbWFwaG9yZShtX2Jsb2NrTG9jaywg
MSwgMCk7IC8vIE9wZW4gdGhlIGdhdGUuCiAgICAgICAgIEFTU0VSVChyZXMpOwogICAgIH0KIAot
ICAgIDo6RW50ZXJDcml0aWNhbFNlY3Rpb24gKCZjcy5tX2ludGVybmFsTXV0ZXgpOwotfQorICAg
IEVudGVyQ3JpdGljYWxTZWN0aW9uICgmbXV0ZXgubV9pbnRlcm5hbE11dGV4KTsKIAotYm9vbCBU
aHJlYWRDb25kaXRpb246OnRpbWVkV2FpdChNdXRleCYgbXV0ZXgsIGRvdWJsZSBhYnNvbHV0ZVRp
bWUpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLSAgICBBU1NFUlQoZmFsc2UpOwotICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIXRpbWVkT3V0OwogfQogCi12b2lkIFRocmVhZENv
bmRpdGlvbjo6c2lnbmFsKCkKK3ZvaWQgUGxhdGZvcm1Db25kaXRpb246OnNpZ25hbChib29sIHVu
YmxvY2tBbGwpCiB7Ci0gICAgdW5zaWduZWQgc2lnbmFscyA9IDA7CisgICAgdW5zaWduZWQgc2ln
bmFsc1RvSXNzdWUgPSAwOwogCi0gICAgRFdPUkQgcmVzID0gOjpXYWl0Rm9yU2luZ2xlT2JqZWN0
KG1fY29uZGl0aW9uLm1fbXV0ZXgsIElORklOSVRFKTsKKyAgICBEV09SRCByZXMgPSBXYWl0Rm9y
U2luZ2xlT2JqZWN0KG1fdW5ibG9ja0xvY2ssIElORklOSVRFKTsKICAgICBBU1NFUlQocmVzID09
IFdBSVRfT0JKRUNUXzApOwogCi0gICAgaWYgKG1fY29uZGl0aW9uLm1fd2FpdGluZ0ZvclJlbW92
YWwgIT0gMCkgeyAvLyB0aGUgbV9nYXRlIGlzIGFscmVhZHkgY2xvc2VkCi0gICAgICAgIGlmICht
X2NvbmRpdGlvbi5tX2Jsb2NrZWQgPT0gMCkgewotICAgICAgICAgICAgcmVzID0gOjpSZWxlYXNl
TXV0ZXgobV9jb25kaXRpb24ubV9tdXRleCk7CisgICAgaWYgKG1fd2FpdGVyc1RvVW5ibG9jaykg
eyAvLyB0aGUgZ2F0ZSBpcyBhbHJlYWR5IGNsb3NlZAorICAgICAgICBpZiAoIW1fd2FpdGVyc0Js
b2NrZWQpIHsgLy8gbm8tb3AKKyAgICAgICAgICAgIHJlcyA9IFJlbGVhc2VNdXRleChtX3VuYmxv
Y2tMb2NrKTsKICAgICAgICAgICAgIEFTU0VSVChyZXMpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgKyttX2NvbmRpdGlvbi5tX3dhaXRpbmdGb3JSZW1vdmFsOwot
ICAgICAgICAtLW1fY29uZGl0aW9uLm1fYmxvY2tlZDsKLQotICAgICAgICBzaWduYWxzID0gMTsK
LSAgICB9IGVsc2UgewotICAgICAgICByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmplY3QobV9jb25k
aXRpb24ubV9nYXRlLCBJTkZJTklURSk7CisgICAgICAgIGlmICh1bmJsb2NrQWxsKSB7CisgICAg
ICAgICAgICBzaWduYWxzVG9Jc3N1ZSA9IG1fd2FpdGVyc0Jsb2NrZWQ7CisgICAgICAgICAgICBt
X3dhaXRlcnNUb1VuYmxvY2sgKz0gbV93YWl0ZXJzQmxvY2tlZDsKKyAgICAgICAgICAgIG1fd2Fp
dGVyc0Jsb2NrZWQgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2lnbmFsc1Rv
SXNzdWUgPSAxOworICAgICAgICAgICAgKyttX3dhaXRlcnNUb1VuYmxvY2s7CisgICAgICAgICAg
ICAtLW1fd2FpdGVyc0Jsb2NrZWQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fd2FpdGVy
c0Jsb2NrZWQgPiBtX3dhaXRlcnNHb25lKSB7CisgICAgICAgIHJlcyA9IFdhaXRGb3JTaW5nbGVP
YmplY3QobV9ibG9ja0xvY2ssIElORklOSVRFKTsgLy8gQ2xvc2UgdGhlIGdhdGUuCiAgICAgICAg
IEFTU0VSVChyZXMgPT0gV0FJVF9PQkpFQ1RfMCk7Ci0gICAgICAgIGlmIChtX2NvbmRpdGlvbi5t
X2Jsb2NrZWQgPiBtX2NvbmRpdGlvbi5tX3RpbWVkT3V0KSB7Ci0gICAgICAgICAgICBpZiAobV9j
b25kaXRpb24ubV90aW1lZE91dCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24u
bV9ibG9ja2VkIC09IG1fY29uZGl0aW9uLm1fdGltZWRPdXQ7Ci0gICAgICAgICAgICAgICAgbV9j
b25kaXRpb24ubV90aW1lZE91dCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzaWdu
YWxzID0gbV9jb25kaXRpb24ubV93YWl0aW5nRm9yUmVtb3ZhbCA9IDE7Ci0gICAgICAgICAgICAt
LW1fY29uZGl0aW9uLm1fYmxvY2tlZDsKKyAgICAgICAgaWYgKG1fd2FpdGVyc0dvbmUgIT0gMCkg
eworICAgICAgICAgICAgbV93YWl0ZXJzQmxvY2tlZCAtPSBtX3dhaXRlcnNHb25lOworICAgICAg
ICAgICAgbV93YWl0ZXJzR29uZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVuYmxvY2tB
bGwpIHsKKyAgICAgICAgICAgIHNpZ25hbHNUb0lzc3VlID0gbV93YWl0ZXJzQmxvY2tlZDsKKyAg
ICAgICAgICAgIG1fd2FpdGVyc1RvVW5ibG9jayA9IG1fd2FpdGVyc0Jsb2NrZWQ7CisgICAgICAg
ICAgICBtX3dhaXRlcnNCbG9ja2VkID0gMDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHJlcyA9IDo6UmVsZWFzZVNlbWFwaG9yZShtX2NvbmRpdGlvbi5tX2dhdGUsIDEsIDApOwotICAg
ICAgICAgICAgQVNTRVJUKHJlcyk7CisgICAgICAgICAgICBzaWduYWxzVG9Jc3N1ZSA9IDE7Cisg
ICAgICAgICAgICBtX3dhaXRlcnNUb1VuYmxvY2sgPSAxOworICAgICAgICAgICAgLS1tX3dhaXRl
cnNCbG9ja2VkOwogICAgICAgICB9CisgICAgfSBlbHNlIHsgLy8gTm8tb3AuCisgICAgICAgIHJl
cyA9IFJlbGVhc2VNdXRleChtX3VuYmxvY2tMb2NrKTsKKyAgICAgICAgQVNTRVJUKHJlcyk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXMgPTo6UmVsZWFzZU11dGV4KG1fY29uZGl0
aW9uLm1fbXV0ZXgpOworICAgIHJlcyA9IFJlbGVhc2VNdXRleChtX3VuYmxvY2tMb2NrKTsKICAg
ICBBU1NFUlQocmVzKTsKIAotICAgIGlmIChzaWduYWxzKSB7Ci0gICAgICAgIHJlcyA9IDo6UmVs
ZWFzZVNlbWFwaG9yZShtX2NvbmRpdGlvbi5tX3F1ZXVlLCBzaWduYWxzLCAwKTsKKyAgICBpZiAo
c2lnbmFsc1RvSXNzdWUpIHsKKyAgICAgICAgcmVzID0gUmVsZWFzZVNlbWFwaG9yZShtX2Jsb2Nr
UXVldWUsIHNpZ25hbHNUb0lzc3VlLCAwKTsKICAgICAgICAgQVNTRVJUKHJlcyk7CiAgICAgfQog
fQogCi12b2lkIFRocmVhZENvbmRpdGlvbjo6YnJvYWRjYXN0KCkKK3N0YXRpYyBjb25zdCBsb25n
IE1heFNlbWFwaG9yZUNvdW50ID0gc3RhdGljX2Nhc3Q8bG9uZz4ofjBVTCA+PiAxKTsKKworVGhy
ZWFkQ29uZGl0aW9uOjpUaHJlYWRDb25kaXRpb24oKQogewotICAgIHVuc2lnbmVkIHNpZ25hbHMg
PSAwOworICAgIG1fY29uZGl0aW9uLm1fd2FpdGVyc0dvbmUgPSAwOworICAgIG1fY29uZGl0aW9u
Lm1fd2FpdGVyc0Jsb2NrZWQgPSAwOworICAgIG1fY29uZGl0aW9uLm1fd2FpdGVyc1RvVW5ibG9j
ayA9IDA7CisgICAgbV9jb25kaXRpb24ubV9ibG9ja0xvY2sgPSBDcmVhdGVTZW1hcGhvcmUoMCwg
MSwgMSwgMCk7CisgICAgbV9jb25kaXRpb24ubV9ibG9ja1F1ZXVlID0gQ3JlYXRlU2VtYXBob3Jl
KDAsIDAsIE1heFNlbWFwaG9yZUNvdW50LCAwKTsKKyAgICBtX2NvbmRpdGlvbi5tX3VuYmxvY2tM
b2NrID0gQ3JlYXRlTXV0ZXgoMCwgMCwgMCk7CisKKyAgICBpZiAoIW1fY29uZGl0aW9uLm1fYmxv
Y2tMb2NrIHx8ICFtX2NvbmRpdGlvbi5tX2Jsb2NrUXVldWUgfHwgIW1fY29uZGl0aW9uLm1fdW5i
bG9ja0xvY2spIHsKKyAgICAgICAgaWYgKG1fY29uZGl0aW9uLm1fYmxvY2tMb2NrKQorICAgICAg
ICAgICAgQ2xvc2VIYW5kbGUobV9jb25kaXRpb24ubV9ibG9ja0xvY2spOworICAgICAgICBpZiAo
bV9jb25kaXRpb24ubV9ibG9ja1F1ZXVlKQorICAgICAgICAgICAgQ2xvc2VIYW5kbGUobV9jb25k
aXRpb24ubV9ibG9ja1F1ZXVlKTsKKyAgICAgICAgaWYgKG1fY29uZGl0aW9uLm1fdW5ibG9ja0xv
Y2spCisgICAgICAgICAgICBDbG9zZUhhbmRsZShtX2NvbmRpdGlvbi5tX3VuYmxvY2tMb2NrKTsK
KyAgICB9Cit9CiAKLSAgICBEV09SRCByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmplY3QobV9jb25k
aXRpb24ubV9tdXRleCwgSU5GSU5JVEUpOwotICAgIEFTU0VSVChyZXMgPT0gV0FJVF9PQkpFQ1Rf
MCk7CitUaHJlYWRDb25kaXRpb246On5UaHJlYWRDb25kaXRpb24oKQoreworICAgIENsb3NlSGFu
ZGxlKG1fY29uZGl0aW9uLm1fYmxvY2tMb2NrKTsKKyAgICBDbG9zZUhhbmRsZShtX2NvbmRpdGlv
bi5tX2Jsb2NrUXVldWUpOworICAgIENsb3NlSGFuZGxlKG1fY29uZGl0aW9uLm1fdW5ibG9ja0xv
Y2spOworfQogCi0gICAgaWYgKG1fY29uZGl0aW9uLm1fd2FpdGluZ0ZvclJlbW92YWwgIT0gMCkg
eyAvLyB0aGUgbV9nYXRlIGlzIGFscmVhZHkgY2xvc2VkCi0gICAgICAgIGlmIChtX2NvbmRpdGlv
bi5tX2Jsb2NrZWQgPT0gMCkgewotICAgICAgICAgICAgcmVzID0gOjpSZWxlYXNlTXV0ZXgobV9j
b25kaXRpb24ubV9tdXRleCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVzKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQordm9pZCBUaHJlYWRDb25kaXRpb246OndhaXQoTXV0ZXgmIG11
dGV4KQoreworICAgIG1fY29uZGl0aW9uLnRpbWVkV2FpdChtdXRleC5pbXBsKCksIElORklOSVRF
KTsKK30KIAotICAgICAgICBtX2NvbmRpdGlvbi5tX3dhaXRpbmdGb3JSZW1vdmFsICs9IChzaWdu
YWxzID0gbV9jb25kaXRpb24ubV9ibG9ja2VkKTsKLSAgICAgICAgbV9jb25kaXRpb24ubV9ibG9j
a2VkID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICByZXMgPSA6OldhaXRGb3JTaW5nbGVPYmpl
Y3QobV9jb25kaXRpb24ubV9nYXRlLCBJTkZJTklURSk7Ci0gICAgICAgIEFTU0VSVChyZXMgPT0g
V0FJVF9PQkpFQ1RfMCk7Ci0gICAgICAgIGlmIChtX2NvbmRpdGlvbi5tX2Jsb2NrZWQgPiBtX2Nv
bmRpdGlvbi5tX3RpbWVkT3V0KSB7Ci0gICAgICAgICAgICBpZiAobV9jb25kaXRpb24ubV90aW1l
ZE91dCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24ubV9ibG9ja2VkIC09IG1f
Y29uZGl0aW9uLm1fdGltZWRPdXQ7Ci0gICAgICAgICAgICAgICAgbV9jb25kaXRpb24ubV90aW1l
ZE91dCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzaWduYWxzID0gbV9jb25kaXRp
b24ubV93YWl0aW5nRm9yUmVtb3ZhbCA9IG1fY29uZGl0aW9uLm1fYmxvY2tlZDsKLSAgICAgICAg
ICAgIG1fY29uZGl0aW9uLm1fYmxvY2tlZCA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICByZXMgPSA6OlJlbGVhc2VTZW1hcGhvcmUobV9jb25kaXRpb24ubV9nYXRlLCAxLCAwKTsK
LSAgICAgICAgICAgIEFTU0VSVChyZXMpOwotICAgICAgICB9Ci0gICAgfQorYm9vbCBUaHJlYWRD
b25kaXRpb246OnRpbWVkV2FpdChNdXRleCYgbXV0ZXgsIGRvdWJsZSBhYnNvbHV0ZVRpbWUpCit7
CisgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwogCi0gICAgcmVz
ID0gOjpSZWxlYXNlTXV0ZXgobV9jb25kaXRpb24ubV9tdXRleCk7Ci0gICAgQVNTRVJUKHJlcyk7
CisgICAgLy8gVGltZSBpcyBpbiB0aGUgcGFzdCAtIHJldHVybiBpbW1lZGlhdGVseS4KKyAgICBp
ZiAoYWJzb2x1dGVUaW1lIDwgY3VycmVudFRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChzaWduYWxzKSB7Ci0gICAgICAgIHJlcyA9IDo6UmVsZWFzZVNlbWFwaG9yZShtX2Nv
bmRpdGlvbi5tX3F1ZXVlLCBzaWduYWxzLCAwKTsKLSAgICAgICAgQVNTRVJUKHJlcyk7Ci0gICAg
fQorICAgIGRvdWJsZSBpbnRlcnZhbE1pbGxpc2Vjb25kcyA9IChhYnNvbHV0ZVRpbWUgLSBjdXJy
ZW50VGltZSkgKiAxMDAwLjA7CisgICAgaWYgKGludGVydmFsTWlsbGlzZWNvbmRzID49IElOVF9N
QVgpCisgICAgICAgIGludGVydmFsTWlsbGlzZWNvbmRzID0gSU5UX01BWDsKKworICAgIHJldHVy
biBtX2NvbmRpdGlvbi50aW1lZFdhaXQobXV0ZXguaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPihpbnRlcnZhbE1pbGxpc2Vjb25kcykpOworfQorCit2b2lkIFRocmVhZENvbmRpdGlv
bjo6c2lnbmFsKCkKK3sKKyAgICBtX2NvbmRpdGlvbi5zaWduYWwoZmFsc2UpOyAvLyBVbmJsb2Nr
IG9ubHkgMSB0aHJlYWQuCit9CisKK3ZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQor
eworICAgIG1fY29uZGl0aW9uLnNpZ25hbCh0cnVlKTsgLy8gVW5ibG9jayBhbGwgdGhyZWFkcy4K
IH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCg==
</data>
<flag name="review"
          id="12874"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>