<?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>25337</bug_id>
          
          <creation_ts>2009-04-22 21:18:55 -0700</creation_ts>
          <short_desc>Move ThreadingQt.cpp under the qt directory.</short_desc>
          <delta_ts>2009-04-24 17:28:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Laszlo Gombos">laszlo.gombos</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>118472</commentid>
    <comment_count>0</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2009-04-22 21:18:55 -0700</bug_when>
    <thetext>JavaScriptCore/wtf/ThreadingQt.cpp should be under JavaScriptCore/wtf/qt/ThreadingQt.cpp to be consistent with the rest of the source tree structure. Separate bugs will be created for other port specific Threading files (Win, Gtk).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118473</commentid>
    <comment_count>1</comment_count>
      <attachid>29705</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2009-04-22 21:28:58 -0700</bug_when>
    <thetext>Created attachment 29705
Move ThreadingQt.cpp under the qt directory. 

Also enable Qt builds without threading support when ENABLE_THREADS is set to 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118478</commentid>
    <comment_count>2</comment_count>
      <attachid>29705</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-04-22 23:04:27 -0700</bug_when>
    <thetext>Comment on attachment 29705
Move ThreadingQt.cpp under the qt directory. 

This patch does two completely unrelated things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118491</commentid>
    <comment_count>3</comment_count>
      <attachid>29709</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2009-04-23 05:45:01 -0700</bug_when>
    <thetext>Created attachment 29709
Do one thing and do it well. Move ThreadingQt.cpp under the qt directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118541</commentid>
    <comment_count>4</comment_count>
      <attachid>29709</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-04-23 14:16:36 -0700</bug_when>
    <thetext>Comment on attachment 29709
Do one thing and do it well. Move ThreadingQt.cpp under the qt directory.

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118783</commentid>
    <comment_count>5</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-04-24 17:28:21 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 29709 [review])
&gt; rs=me
&gt; 

Landed in r42858</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29705</attachid>
            <date>2009-04-22 21:28:58 -0700</date>
            <delta_ts>2009-04-23 05:45:01 -0700</delta_ts>
            <desc>Move ThreadingQt.cpp under the qt directory. </desc>
            <filename>patch_25337.txt</filename>
            <type>text/plain</type>
            <size>16274</size>
            <attacher name="Laszlo Gombos">laszlo.gombos</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyNzcxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDQtMjIgIExhc3psbyBH
b21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNTMzNworCisgICAgICAgIE1vdmUgVGhyZWFkaW5nUXQuY3BwIHVuZGVyIHRo
ZSBxdCBkaXJlY3RvcnkuIEVuYWJsZSBRdCBidWlsZHMgd2l0aAorICAgICAgICBubyB0aHJlYWRp
bmcgc3VwcG9ydCBpZiBFTkFCTEVfVEhSRUFEUyBpcyBzZXQgdG8gMC4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnByaToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUXQuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIHd0Zi9xdC9UaHJlYWRpbmdRdC5jcHA6IENvcGllZCBmcm9tIEphdmFTY3Jp
cHRDb3JlL3d0Zi9UaHJlYWRpbmdRdC5jcHAuCisKIDIwMDktMDQtMjIgIE1hcmsgUm93ZSAgPG1y
b3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBHYXZpbiBCYXJyYWNs
b3VnaC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHJldmlzaW9uIDQyNzQ4KQor
KysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0x
Myw2ICsxMyw4IEBAIHdpbjMyLSogewogICAgIExJQlMgKz0gLWx3aW5tbQogfQogCishY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1RIUkVBRFM9Lik6IERFRklORVMgKz0gRU5BQkxFX1RIUkVBRFM9
MQorCiAjIERpc2FibGUgdGhlIEpJVCBkdWUgdG8gbnVtZXJvdXMgb2JzZXJ2ZWQgbWlzY29tcGls
YXRpb25zIDooCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0pJVD0uKSB7CiAgICAgQ09ORklH
KHJlbGVhc2UpOmlzRXF1YWwoUVRfQVJDSCxpMzg2KSB7CkBAIC0xODQsOSArMTg2LDE0IEBAIFNP
VVJDRVMgKz0gXAogICAgIHByb2ZpbGVyL1RyZWVQcm9maWxlLmNwcCBcCiAgICAgd3RmL0Zhc3RN
YWxsb2MuY3BwIFwKICAgICB3dGYvVGhyZWFkaW5nLmNwcCBcCi0gICAgd3RmL1RocmVhZGluZ1F0
LmNwcCBcCiAgICAgd3RmL3F0L01haW5UaHJlYWRRdC5jcHAKIAorY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX1RIUkVBRFM9MSkgeworICAgIFNPVVJDRVMgKz0gd3RmL3F0L1RocmVhZGluZ1F0LmNw
cAorfSBlbHNlIHsKKyAgICBTT1VSQ0VTICs9IHd0Zi9UaHJlYWRpbmdOb25lLmNwcAorfQorCiAj
IEdFTkVSQVRPUiAxLUE6IExVVCBjcmVhdG9yCiBsdXQub3V0cHV0ID0gJCRHRU5FUkFURURfU09V
UkNFU19ESVIvJHtRTUFLRV9GSUxFX0JBU0V9Lmx1dC5oCiBsdXQuY29tbWFuZHMgPSBwZXJsICQk
UFdEL2NyZWF0ZV9oYXNoX3RhYmxlICR7UU1BS0VfRklMRV9OQU1FfSAtaSA+ICR7UU1BS0VfRklM
RV9PVVR9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdRdC5jcHAJKHJldmlzaW9uIDQyNzQ4
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1F0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwyNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2Qg
KGpoYXlnb29kQHJlYWt0aXguY29tKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGhy
ZWFkaW5nLmgiCi0KLSNpbmNsdWRlICJDdXJyZW50VGltZS5oIgotI2luY2x1ZGUgIkhhc2hNYXAu
aCIKLSNpbmNsdWRlICJNYWluVGhyZWFkLmgiCi0jaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5o
IgotCi0jaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRTXV0ZXg+Ci0jaW5j
bHVkZSA8UVRocmVhZD4KLSNpbmNsdWRlIDxRV2FpdENvbmRpdGlvbj4KLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLWNsYXNzIFRocmVhZFByaXZhdGUgOiBwdWJsaWMgUVRocmVhZCB7Ci1wdWJsaWM6Ci0g
ICAgVGhyZWFkUHJpdmF0ZShUaHJlYWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhKTsK
LSAgICB2b2lkIHJ1bigpOwotICAgIHZvaWQqIGdldFJldHVyblZhbHVlKCkgeyByZXR1cm4gbV9y
ZXR1cm5WYWx1ZTsgfQotcHJpdmF0ZToKLSAgICB2b2lkKiBtX2RhdGE7Ci0gICAgVGhyZWFkRnVu
Y3Rpb24gbV9lbnRyeVBvaW50OwotICAgIHZvaWQqIG1fcmV0dXJuVmFsdWU7Ci19OwotCi1UaHJl
YWRQcml2YXRlOjpUaHJlYWRQcml2YXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQq
IGRhdGEpIAotICAgIDogbV9kYXRhKGRhdGEpCi0gICAgLCBtX2VudHJ5UG9pbnQoZW50cnlQb2lu
dCkKLSAgICAsIG1fcmV0dXJuVmFsdWUoMCkKLXsKLX0KLQotdm9pZCBUaHJlYWRQcml2YXRlOjpy
dW4oKQotewotICAgIG1fcmV0dXJuVmFsdWUgPSBtX2VudHJ5UG9pbnQobV9kYXRhKTsKLX0KLQot
Ci1zdGF0aWMgTXV0ZXgqIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4OwotCi1zdGF0
aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRpZmllcjsKLQotc3RhdGljIE11dGV4
JiB0aHJlYWRNYXBNdXRleCgpCi17Ci0gICAgc3RhdGljIE11dGV4IG11dGV4OwotICAgIHJldHVy
biBtdXRleDsKLX0KLQotc3RhdGljIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgUVRocmVhZCo+
JiB0aHJlYWRNYXAoKQotewotICAgIHN0YXRpYyBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFFU
aHJlYWQqPiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIFRocmVhZElkZW50aWZp
ZXIgaWRlbnRpZmllckJ5UXRocmVhZEhhbmRsZShRVGhyZWFkKiYgdGhyZWFkKQotewotICAgIE11
dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAgIEhhc2hNYXA8VGhyZWFk
SWRlbnRpZmllciwgUVRocmVhZCo+OjppdGVyYXRvciBpID0gdGhyZWFkTWFwKCkuYmVnaW4oKTsK
LSAgICBmb3IgKDsgaSAhPSB0aHJlYWRNYXAoKS5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChp
LT5zZWNvbmQgPT0gdGhyZWFkKQotICAgICAgICAgICAgcmV0dXJuIGktPmZpcnN0OwotICAgIH0K
LQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgVGhyZWFkSWRlbnRpZmllciBlc3RhYmxpc2hJ
ZGVudGlmaWVyRm9yVGhyZWFkKFFUaHJlYWQqJiB0aHJlYWQpCi17Ci0gICAgQVNTRVJUKCFpZGVu
dGlmaWVyQnlRdGhyZWFkSGFuZGxlKHRocmVhZCkpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHRocmVhZE1hcE11dGV4KCkpOwotCi0gICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRp
ZmllckNvdW50ID0gMTsKLQotICAgIHRocmVhZE1hcCgpLmFkZChpZGVudGlmaWVyQ291bnQsIHRo
cmVhZCk7Ci0KLSAgICByZXR1cm4gaWRlbnRpZmllckNvdW50Kys7Ci19Ci0KLXN0YXRpYyB2b2lk
IGNsZWFyVGhyZWFkRm9ySWRlbnRpZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIE11
dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAgIEFTU0VSVCh0aHJlYWRN
YXAoKS5jb250YWlucyhpZCkpOwotCi0gICAgdGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsKLX0KLQot
c3RhdGljIFFUaHJlYWQqIHRocmVhZEZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkK
LXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0KLSAgICByZXR1
cm4gdGhyZWFkTWFwKCkuZ2V0KGlkKTsKLX0KLQotdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkK
LXsKLSAgICBpZiAoIWF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KSB7Ci0gICAgICAg
IGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4ID0gbmV3IE11dGV4OwotICAgICAgICB0
aHJlYWRNYXBNdXRleCgpOwotICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9y
KCk7Ci0gICAgICAgIFFUaHJlYWQqIG1haW5UaHJlYWQgPSBRQ29yZUFwcGxpY2F0aW9uOjppbnN0
YW5jZSgpLT50aHJlYWQoKTsKLSAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBpZGVudGlm
aWVyQnlRdGhyZWFkSGFuZGxlKG1haW5UaHJlYWQpOwotICAgICAgICBpZiAoIW1haW5UaHJlYWRJ
ZGVudGlmaWVyKQotICAgICAgICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBlc3RhYmxpc2hJ
ZGVudGlmaWVyRm9yVGhyZWFkKG1haW5UaHJlYWQpOwotICAgICAgICBpbml0aWFsaXplTWFpblRo
cmVhZCgpOwotICAgIH0KLX0KLQotdm9pZCBsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgoKQotewotICAgIEFTU0VSVChhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCk7
Ci0gICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgtPmxvY2soKTsKLX0KLQotdm9p
ZCB1bmxvY2tBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCgpCi17Ci0gICAgYXRvbWlj
YWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgtPnVubG9jaygpOwotfQotCi1UaHJlYWRJZGVudGlm
aWVyIGNyZWF0ZVRocmVhZEludGVybmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQq
IGRhdGEsIGNvbnN0IGNoYXIqKQotewotICAgIFRocmVhZFByaXZhdGUqIHRocmVhZCA9IG5ldyBU
aHJlYWRQcml2YXRlKGVudHJ5UG9pbnQsIGRhdGEpOwotICAgIGlmICghdGhyZWFkKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAg
d2l0aCBkYXRhICVwIiwgZW50cnlQb2ludCwgZGF0YSk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICB0aHJlYWQtPnN0YXJ0KCk7Ci0KLSAgICBRVGhyZWFkKiB0aHJlYWRSZWYgPSBzdGF0
aWNfY2FzdDxRVGhyZWFkKj4odGhyZWFkKTsKLQotICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlm
aWVyRm9yVGhyZWFkKHRocmVhZFJlZik7Ci19Ci0KLXZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFs
KGNvbnN0IGNoYXIqKQotewotfQotCi1pbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRCwgdm9pZCoqIHJlc3VsdCkKLXsKLSAgICBBU1NFUlQodGhyZWFk
SUQpOwotCi0gICAgUVRocmVhZCogdGhyZWFkID0gdGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJ
RCk7Ci0KLSAgICBib29sIHJlcyA9IHRocmVhZC0+d2FpdCgpOwotCi0gICAgY2xlYXJUaHJlYWRG
b3JJZGVudGlmaWVyKHRocmVhZElEKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0
ID0gc3RhdGljX2Nhc3Q8VGhyZWFkUHJpdmF0ZSo+KHRocmVhZCktPmdldFJldHVyblZhbHVlKCk7
Ci0KLSAgICByZXR1cm4gIXJlczsKLX0KLQotdm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRp
ZmllcikKLXsKLX0KLQotVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKLXsKLSAgICBR
VGhyZWFkKiBjdXJyZW50VGhyZWFkID0gUVRocmVhZDo6Y3VycmVudFRocmVhZCgpOwotICAgIGlm
IChUaHJlYWRJZGVudGlmaWVyIGlkID0gaWRlbnRpZmllckJ5UXRocmVhZEhhbmRsZShjdXJyZW50
VGhyZWFkKSkKLSAgICAgICAgcmV0dXJuIGlkOwotICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlm
aWVyRm9yVGhyZWFkKGN1cnJlbnRUaHJlYWQpOwotfQotCi1ib29sIGlzTWFpblRocmVhZCgpCi17
Ci0gICAgcmV0dXJuIFFUaHJlYWQ6OmN1cnJlbnRUaHJlYWQoKSA9PSBRQ29yZUFwcGxpY2F0aW9u
OjppbnN0YW5jZSgpLT50aHJlYWQoKTsKLX0KLQotTXV0ZXg6Ok11dGV4KCkKLSAgICA6IG1fbXV0
ZXgobmV3IFFNdXRleCgpKQotewotfQotCi1NdXRleDo6fk11dGV4KCkKLXsKLSAgICBkZWxldGUg
bV9tdXRleDsKLX0KLQotdm9pZCBNdXRleDo6bG9jaygpCi17Ci0gICAgbV9tdXRleC0+bG9jaygp
OwotfQotCi1ib29sIE11dGV4Ojp0cnlMb2NrKCkKLXsKLSAgICByZXR1cm4gbV9tdXRleC0+dHJ5
TG9jaygpOwotfQotCi12b2lkIE11dGV4Ojp1bmxvY2soKQotewotICAgIG1fbXV0ZXgtPnVubG9j
aygpOwotfQotCi1UaHJlYWRDb25kaXRpb246OlRocmVhZENvbmRpdGlvbigpCi0gICAgOiBtX2Nv
bmRpdGlvbihuZXcgUVdhaXRDb25kaXRpb24oKSkKLXsKLX0KLQotVGhyZWFkQ29uZGl0aW9uOjp+
VGhyZWFkQ29uZGl0aW9uKCkKLXsKLSAgICBkZWxldGUgbV9jb25kaXRpb247Ci19Ci0KLXZvaWQg
VGhyZWFkQ29uZGl0aW9uOjp3YWl0KE11dGV4JiBtdXRleCkKLXsKLSAgICBtX2NvbmRpdGlvbi0+
d2FpdChtdXRleC5pbXBsKCkpOwotfQotCi1ib29sIFRocmVhZENvbmRpdGlvbjo6dGltZWRXYWl0
KE11dGV4JiBtdXRleCwgZG91YmxlIGFic29sdXRlVGltZSkKLXsKLSAgICBkb3VibGUgY3VycmVu
dFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCk7Ci0KLSAgICAvLyBUaW1lIGlzIGluIHRoZSBwYXN0
IC0gcmV0dXJuIGltbWVkaWF0ZWx5LgotICAgIGlmIChhYnNvbHV0ZVRpbWUgPCBjdXJyZW50VGlt
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGltZSBpcyB0b28gZmFyIGluIHRo
ZSBmdXR1cmUgKGFuZCB3b3VsZCBvdmVyZmxvdyB1bnNpZ25lZCBsb25nKSAtIHdhaXQgZm9yZXZl
ci4KLSAgICBpZiAoYWJzb2x1dGVUaW1lIC0gY3VycmVudFRpbWUgPiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KElOVF9NQVgpIC8gMTAwMC4wKSB7Ci0gICAgICAgIHdhaXQobXV0ZXgpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBkb3VibGUgaW50ZXJ2YWxNaWxsaXNlY29uZHMgPSAo
YWJzb2x1dGVUaW1lIC0gY3VycmVudFRpbWUpICogMTAwMC4wOwotICAgIHJldHVybiBtX2NvbmRp
dGlvbi0+d2FpdChtdXRleC5pbXBsKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGludGVy
dmFsTWlsbGlzZWNvbmRzKSk7Ci19Ci0KLXZvaWQgVGhyZWFkQ29uZGl0aW9uOjpzaWduYWwoKQot
ewotICAgIG1fY29uZGl0aW9uLT53YWtlT25lKCk7Ci19Ci0KLXZvaWQgVGhyZWFkQ29uZGl0aW9u
Ojpicm9hZGNhc3QoKQotewotICAgIG1fY29uZGl0aW9uLT53YWtlQWxsKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9xdC9UaHJlYWRpbmdR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3F0L1RocmVhZGluZ1F0LmNw
cAkocmV2aXNpb24gNDI3NDgpCShmcm9tIEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdRdC5j
cHA6NDI3NDgpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvcXQvVGhyZWFkaW5nUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0
aW4gSGF5Z29vZCAoamhheWdvb2RAcmVha3RpeC5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUaHJlYWRpbmcuaCIKKworI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCisjaW5jbHVk
ZSAiSGFzaE1hcC5oIgorI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKKyNpbmNsdWRlICJSYW5kb21O
dW1iZXJTZWVkLmgiCisKKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFN
dXRleD4KKyNpbmNsdWRlIDxRVGhyZWFkPgorI2luY2x1ZGUgPFFXYWl0Q29uZGl0aW9uPgorCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgVGhyZWFkUHJpdmF0ZSA6IHB1YmxpYyBRVGhyZWFkIHsK
K3B1YmxpYzoKKyAgICBUaHJlYWRQcml2YXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZv
aWQqIGRhdGEpOworICAgIHZvaWQgcnVuKCk7CisgICAgdm9pZCogZ2V0UmV0dXJuVmFsdWUoKSB7
IHJldHVybiBtX3JldHVyblZhbHVlOyB9Citwcml2YXRlOgorICAgIHZvaWQqIG1fZGF0YTsKKyAg
ICBUaHJlYWRGdW5jdGlvbiBtX2VudHJ5UG9pbnQ7CisgICAgdm9pZCogbV9yZXR1cm5WYWx1ZTsK
K307CisKK1RocmVhZFByaXZhdGU6OlRocmVhZFByaXZhdGUoVGhyZWFkRnVuY3Rpb24gZW50cnlQ
b2ludCwgdm9pZCogZGF0YSkgCisgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZW50cnlQb2lu
dChlbnRyeVBvaW50KQorICAgICwgbV9yZXR1cm5WYWx1ZSgwKQoreworfQorCit2b2lkIFRocmVh
ZFByaXZhdGU6OnJ1bigpCit7CisgICAgbV9yZXR1cm5WYWx1ZSA9IG1fZW50cnlQb2ludChtX2Rh
dGEpOworfQorCisKK3N0YXRpYyBNdXRleCogYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0
ZXg7CisKK3N0YXRpYyBUaHJlYWRJZGVudGlmaWVyIG1haW5UaHJlYWRJZGVudGlmaWVyOworCitz
dGF0aWMgTXV0ZXgmIHRocmVhZE1hcE11dGV4KCkKK3sKKyAgICBzdGF0aWMgTXV0ZXggbXV0ZXg7
CisgICAgcmV0dXJuIG11dGV4OworfQorCitzdGF0aWMgSGFzaE1hcDxUaHJlYWRJZGVudGlmaWVy
LCBRVGhyZWFkKj4mIHRocmVhZE1hcCgpCit7CisgICAgc3RhdGljIEhhc2hNYXA8VGhyZWFkSWRl
bnRpZmllciwgUVRocmVhZCo+IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgVGhy
ZWFkSWRlbnRpZmllciBpZGVudGlmaWVyQnlRdGhyZWFkSGFuZGxlKFFUaHJlYWQqJiB0aHJlYWQp
Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworCisgICAgSGFz
aE1hcDxUaHJlYWRJZGVudGlmaWVyLCBRVGhyZWFkKj46Oml0ZXJhdG9yIGkgPSB0aHJlYWRNYXAo
KS5iZWdpbigpOworICAgIGZvciAoOyBpICE9IHRocmVhZE1hcCgpLmVuZCgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGktPnNlY29uZCA9PSB0aHJlYWQpCisgICAgICAgICAgICByZXR1cm4gaS0+Zmly
c3Q7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBUaHJlYWRJZGVudGlmaWVy
IGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQoUVRocmVhZComIHRocmVhZCkKK3sKKyAgICBB
U1NFUlQoIWlkZW50aWZpZXJCeVF0aHJlYWRIYW5kbGUodGhyZWFkKSk7CisKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7CisKKyAgICBzdGF0aWMgVGhyZWFkSWRlbnRp
ZmllciBpZGVudGlmaWVyQ291bnQgPSAxOworCisgICAgdGhyZWFkTWFwKCkuYWRkKGlkZW50aWZp
ZXJDb3VudCwgdGhyZWFkKTsKKworICAgIHJldHVybiBpZGVudGlmaWVyQ291bnQrKzsKK30KKwor
c3RhdGljIHZvaWQgY2xlYXJUaHJlYWRGb3JJZGVudGlmaWVyKFRocmVhZElkZW50aWZpZXIgaWQp
Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworCisgICAgQVNT
RVJUKHRocmVhZE1hcCgpLmNvbnRhaW5zKGlkKSk7CisKKyAgICB0aHJlYWRNYXAoKS5yZW1vdmUo
aWQpOworfQorCitzdGF0aWMgUVRocmVhZCogdGhyZWFkRm9ySWRlbnRpZmllcihUaHJlYWRJZGVu
dGlmaWVyIGlkKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsK
KworICAgIHJldHVybiB0aHJlYWRNYXAoKS5nZXQoaWQpOworfQorCit2b2lkIGluaXRpYWxpemVU
aHJlYWRpbmcoKQoreworICAgIGlmICghYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgp
IHsKKyAgICAgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXggPSBuZXcgTXV0ZXg7
CisgICAgICAgIHRocmVhZE1hcE11dGV4KCk7CisgICAgICAgIGluaXRpYWxpemVSYW5kb21OdW1i
ZXJHZW5lcmF0b3IoKTsKKyAgICAgICAgUVRocmVhZCogbWFpblRocmVhZCA9IFFDb3JlQXBwbGlj
YXRpb246Omluc3RhbmNlKCktPnRocmVhZCgpOworICAgICAgICBtYWluVGhyZWFkSWRlbnRpZmll
ciA9IGlkZW50aWZpZXJCeVF0aHJlYWRIYW5kbGUobWFpblRocmVhZCk7CisgICAgICAgIGlmICgh
bWFpblRocmVhZElkZW50aWZpZXIpCisgICAgICAgICAgICBtYWluVGhyZWFkSWRlbnRpZmllciA9
IGVzdGFibGlzaElkZW50aWZpZXJGb3JUaHJlYWQobWFpblRocmVhZCk7CisgICAgICAgIGluaXRp
YWxpemVNYWluVGhyZWFkKCk7CisgICAgfQorfQorCit2b2lkIGxvY2tBdG9taWNhbGx5SW5pdGlh
bGl6ZWRTdGF0aWNNdXRleCgpCit7CisgICAgQVNTRVJUKGF0b21pY2FsbHlJbml0aWFsaXplZFN0
YXRpY011dGV4KTsKKyAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleC0+bG9jaygp
OworfQorCit2b2lkIHVubG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKK3sK
KyAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleC0+dW5sb2NrKCk7Cit9CisKK1Ro
cmVhZElkZW50aWZpZXIgY3JlYXRlVGhyZWFkSW50ZXJuYWwoVGhyZWFkRnVuY3Rpb24gZW50cnlQ
b2ludCwgdm9pZCogZGF0YSwgY29uc3QgY2hhciopCit7CisgICAgVGhyZWFkUHJpdmF0ZSogdGhy
ZWFkID0gbmV3IFRocmVhZFByaXZhdGUoZW50cnlQb2ludCwgZGF0YSk7CisgICAgaWYgKCF0aHJl
YWQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRocmVhZCBhdCBlbnRy
eSBwb2ludCAlcCB3aXRoIGRhdGEgJXAiLCBlbnRyeVBvaW50LCBkYXRhKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIHRocmVhZC0+c3RhcnQoKTsKKworICAgIFFUaHJlYWQqIHRocmVh
ZFJlZiA9IHN0YXRpY19jYXN0PFFUaHJlYWQqPih0aHJlYWQpOworCisgICAgcmV0dXJuIGVzdGFi
bGlzaElkZW50aWZpZXJGb3JUaHJlYWQodGhyZWFkUmVmKTsKK30KKwordm9pZCBzZXRUaHJlYWRO
YW1lSW50ZXJuYWwoY29uc3QgY2hhciopCit7Cit9CisKK2ludCB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbihUaHJlYWRJZGVudGlmaWVyIHRocmVhZElELCB2b2lkKiogcmVzdWx0KQoreworICAgIEFT
U0VSVCh0aHJlYWRJRCk7CisKKyAgICBRVGhyZWFkKiB0aHJlYWQgPSB0aHJlYWRGb3JJZGVudGlm
aWVyKHRocmVhZElEKTsKKworICAgIGJvb2wgcmVzID0gdGhyZWFkLT53YWl0KCk7CisKKyAgICBj
bGVhclRocmVhZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOworICAgIGlmIChyZXN1bHQpCisgICAg
ICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxUaHJlYWRQcml2YXRlKj4odGhyZWFkKS0+Z2V0UmV0
dXJuVmFsdWUoKTsKKworICAgIHJldHVybiAhcmVzOworfQorCit2b2lkIGRldGFjaFRocmVhZChU
aHJlYWRJZGVudGlmaWVyKQoreworfQorCitUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQo
KQoreworICAgIFFUaHJlYWQqIGN1cnJlbnRUaHJlYWQgPSBRVGhyZWFkOjpjdXJyZW50VGhyZWFk
KCk7CisgICAgaWYgKFRocmVhZElkZW50aWZpZXIgaWQgPSBpZGVudGlmaWVyQnlRdGhyZWFkSGFu
ZGxlKGN1cnJlbnRUaHJlYWQpKQorICAgICAgICByZXR1cm4gaWQ7CisgICAgcmV0dXJuIGVzdGFi
bGlzaElkZW50aWZpZXJGb3JUaHJlYWQoY3VycmVudFRocmVhZCk7Cit9CisKK2Jvb2wgaXNNYWlu
VGhyZWFkKCkKK3sKKyAgICByZXR1cm4gUVRocmVhZDo6Y3VycmVudFRocmVhZCgpID09IFFDb3Jl
QXBwbGljYXRpb246Omluc3RhbmNlKCktPnRocmVhZCgpOworfQorCitNdXRleDo6TXV0ZXgoKQor
ICAgIDogbV9tdXRleChuZXcgUU11dGV4KCkpCit7Cit9CisKK011dGV4Ojp+TXV0ZXgoKQorewor
ICAgIGRlbGV0ZSBtX211dGV4OworfQorCit2b2lkIE11dGV4Ojpsb2NrKCkKK3sKKyAgICBtX211
dGV4LT5sb2NrKCk7Cit9CisKK2Jvb2wgTXV0ZXg6OnRyeUxvY2soKQoreworICAgIHJldHVybiBt
X211dGV4LT50cnlMb2NrKCk7Cit9CisKK3ZvaWQgTXV0ZXg6OnVubG9jaygpCit7CisgICAgbV9t
dXRleC0+dW5sb2NrKCk7Cit9CisKK1RocmVhZENvbmRpdGlvbjo6VGhyZWFkQ29uZGl0aW9uKCkK
KyAgICA6IG1fY29uZGl0aW9uKG5ldyBRV2FpdENvbmRpdGlvbigpKQoreworfQorCitUaHJlYWRD
b25kaXRpb246On5UaHJlYWRDb25kaXRpb24oKQoreworICAgIGRlbGV0ZSBtX2NvbmRpdGlvbjsK
K30KKwordm9pZCBUaHJlYWRDb25kaXRpb246OndhaXQoTXV0ZXgmIG11dGV4KQoreworICAgIG1f
Y29uZGl0aW9uLT53YWl0KG11dGV4LmltcGwoKSk7Cit9CisKK2Jvb2wgVGhyZWFkQ29uZGl0aW9u
Ojp0aW1lZFdhaXQoTXV0ZXgmIG11dGV4LCBkb3VibGUgYWJzb2x1dGVUaW1lKQoreworICAgIGRv
dWJsZSBjdXJyZW50VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKKworICAgIC8vIFRpbWUgaXMg
aW4gdGhlIHBhc3QgLSByZXR1cm4gaW1tZWRpYXRlbHkuCisgICAgaWYgKGFic29sdXRlVGltZSA8
IGN1cnJlbnRUaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaW1lIGlzIHRv
byBmYXIgaW4gdGhlIGZ1dHVyZSAoYW5kIHdvdWxkIG92ZXJmbG93IHVuc2lnbmVkIGxvbmcpIC0g
d2FpdCBmb3JldmVyLgorICAgIGlmIChhYnNvbHV0ZVRpbWUgLSBjdXJyZW50VGltZSA+IHN0YXRp
Y19jYXN0PGRvdWJsZT4oSU5UX01BWCkgLyAxMDAwLjApIHsKKyAgICAgICAgd2FpdChtdXRleCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGRvdWJsZSBpbnRlcnZhbE1pbGxp
c2Vjb25kcyA9IChhYnNvbHV0ZVRpbWUgLSBjdXJyZW50VGltZSkgKiAxMDAwLjA7CisgICAgcmV0
dXJuIG1fY29uZGl0aW9uLT53YWl0KG11dGV4LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oaW50ZXJ2YWxNaWxsaXNlY29uZHMpKTsKK30KKwordm9pZCBUaHJlYWRDb25kaXRpb246
OnNpZ25hbCgpCit7CisgICAgbV9jb25kaXRpb24tPndha2VPbmUoKTsKK30KKwordm9pZCBUaHJl
YWRDb25kaXRpb246OmJyb2FkY2FzdCgpCit7CisgICAgbV9jb25kaXRpb24tPndha2VBbGwoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="14846"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29709</attachid>
            <date>2009-04-23 05:45:01 -0700</date>
            <delta_ts>2009-04-23 14:16:36 -0700</delta_ts>
            <desc>Do one thing and do it well. Move ThreadingQt.cpp under the qt directory.</desc>
            <filename>patch_25337_v2.txt</filename>
            <type>text/plain</type>
            <size>15672</size>
            <attacher name="Laszlo Gombos">laszlo.gombos</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQyNzcxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDQtMjMgIExhc3psbyBH
b21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNTMzNworCisgICAgICAgIE1vdmUgVGhyZWFkaW5nUXQuY3BwIHVuZGVyIHRo
ZSBxdCBkaXJlY3RvcnkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6CisgICAgICAg
ICogd3RmL1RocmVhZGluZ1F0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvcXQvVGhyZWFk
aW5nUXQuY3BwOiBDb3BpZWQgZnJvbSBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUXQuY3Bw
LgorCiAyMDA5LTA0LTIyICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAg
UnViYmVyLXN0YW1wZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUucHJpCShyZXZpc2lvbiA0Mjc0OCkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnByaQkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIHByb2ZpbGVyL1RyZWVQcm9maWxlLmNwcCBcCiAgICAgd3RmL0Zhc3RNYWxsb2MuY3Bw
IFwKICAgICB3dGYvVGhyZWFkaW5nLmNwcCBcCi0gICAgd3RmL1RocmVhZGluZ1F0LmNwcCBcCisg
ICAgd3RmL3F0L1RocmVhZGluZ1F0LmNwcCBcCiAgICAgd3RmL3F0L01haW5UaHJlYWRRdC5jcHAK
IAogIyBHRU5FUkFUT1IgMS1BOiBMVVQgY3JlYXRvcgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3Rm
L1RocmVhZGluZ1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFk
aW5nUXQuY3BwCShyZXZpc2lvbiA0Mjc0OCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRp
bmdRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEp1c3RpbiBIYXlnb29kIChqaGF5Z29vZEByZWFrdGl4LmNvbSkKLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRocmVhZGluZy5oIgotCi0jaW5jbHVkZSAiQ3VycmVudFRp
bWUuaCIKLSNpbmNsdWRlICJIYXNoTWFwLmgiCi0jaW5jbHVkZSAiTWFpblRocmVhZC5oIgotI2lu
Y2x1ZGUgIlJhbmRvbU51bWJlclNlZWQuaCIKLQotI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+
Ci0jaW5jbHVkZSA8UU11dGV4PgotI2luY2x1ZGUgPFFUaHJlYWQ+Ci0jaW5jbHVkZSA8UVdhaXRD
b25kaXRpb24+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBUaHJlYWRQcml2YXRlIDogcHVi
bGljIFFUaHJlYWQgewotcHVibGljOgotICAgIFRocmVhZFByaXZhdGUoVGhyZWFkRnVuY3Rpb24g
ZW50cnlQb2ludCwgdm9pZCogZGF0YSk7Ci0gICAgdm9pZCBydW4oKTsKLSAgICB2b2lkKiBnZXRS
ZXR1cm5WYWx1ZSgpIHsgcmV0dXJuIG1fcmV0dXJuVmFsdWU7IH0KLXByaXZhdGU6Ci0gICAgdm9p
ZCogbV9kYXRhOwotICAgIFRocmVhZEZ1bmN0aW9uIG1fZW50cnlQb2ludDsKLSAgICB2b2lkKiBt
X3JldHVyblZhbHVlOwotfTsKLQotVGhyZWFkUHJpdmF0ZTo6VGhyZWFkUHJpdmF0ZShUaHJlYWRG
dW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhKSAKLSAgICA6IG1fZGF0YShkYXRhKQotICAg
ICwgbV9lbnRyeVBvaW50KGVudHJ5UG9pbnQpCi0gICAgLCBtX3JldHVyblZhbHVlKDApCi17Ci19
Ci0KLXZvaWQgVGhyZWFkUHJpdmF0ZTo6cnVuKCkKLXsKLSAgICBtX3JldHVyblZhbHVlID0gbV9l
bnRyeVBvaW50KG1fZGF0YSk7Ci19Ci0KLQotc3RhdGljIE11dGV4KiBhdG9taWNhbGx5SW5pdGlh
bGl6ZWRTdGF0aWNNdXRleDsKLQotc3RhdGljIFRocmVhZElkZW50aWZpZXIgbWFpblRocmVhZElk
ZW50aWZpZXI7Ci0KLXN0YXRpYyBNdXRleCYgdGhyZWFkTWFwTXV0ZXgoKQotewotICAgIHN0YXRp
YyBNdXRleCBtdXRleDsKLSAgICByZXR1cm4gbXV0ZXg7Ci19Ci0KLXN0YXRpYyBIYXNoTWFwPFRo
cmVhZElkZW50aWZpZXIsIFFUaHJlYWQqPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgSGFz
aE1hcDxUaHJlYWRJZGVudGlmaWVyLCBRVGhyZWFkKj4gbWFwOwotICAgIHJldHVybiBtYXA7Ci19
Ci0KLXN0YXRpYyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJCeVF0aHJlYWRIYW5kbGUoUVRo
cmVhZComIHRocmVhZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgo
KSk7Ci0KLSAgICBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFFUaHJlYWQqPjo6aXRlcmF0b3Ig
aSA9IHRocmVhZE1hcCgpLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gdGhyZWFkTWFwKCkuZW5k
KCk7ICsraSkgewotICAgICAgICBpZiAoaS0+c2Vjb25kID09IHRocmVhZCkKLSAgICAgICAgICAg
IHJldHVybiBpLT5maXJzdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFRo
cmVhZElkZW50aWZpZXIgZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChRVGhyZWFkKiYgdGhy
ZWFkKQotewotICAgIEFTU0VSVCghaWRlbnRpZmllckJ5UXRocmVhZEhhbmRsZSh0aHJlYWQpKTsK
LQotICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLQotICAgIHN0YXRp
YyBUaHJlYWRJZGVudGlmaWVyIGlkZW50aWZpZXJDb3VudCA9IDE7Ci0KLSAgICB0aHJlYWRNYXAo
KS5hZGQoaWRlbnRpZmllckNvdW50LCB0aHJlYWQpOwotCi0gICAgcmV0dXJuIGlkZW50aWZpZXJD
b3VudCsrOwotfQotCi1zdGF0aWMgdm9pZCBjbGVhclRocmVhZEZvcklkZW50aWZpZXIoVGhyZWFk
SWRlbnRpZmllciBpZCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIodGhyZWFkTWFwTXV0ZXgo
KSk7Ci0KLSAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMoaWQpKTsKLQotICAgIHRocmVh
ZE1hcCgpLnJlbW92ZShpZCk7Ci19Ci0KLXN0YXRpYyBRVGhyZWFkKiB0aHJlYWRGb3JJZGVudGlm
aWVyKFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVh
ZE1hcE11dGV4KCkpOwotCi0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChpZCk7Ci19Ci0KLXZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCi17Ci0gICAgaWYgKCFhdG9taWNhbGx5SW5pdGlhbGl6
ZWRTdGF0aWNNdXRleCkgewotICAgICAgICBhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRl
eCA9IG5ldyBNdXRleDsKLSAgICAgICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICAgICAgaW5pdGlh
bGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpOwotICAgICAgICBRVGhyZWFkKiBtYWluVGhyZWFk
ID0gUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKS0+dGhyZWFkKCk7Ci0gICAgICAgIG1haW5U
aHJlYWRJZGVudGlmaWVyID0gaWRlbnRpZmllckJ5UXRocmVhZEhhbmRsZShtYWluVGhyZWFkKTsK
LSAgICAgICAgaWYgKCFtYWluVGhyZWFkSWRlbnRpZmllcikKLSAgICAgICAgICAgIG1haW5UaHJl
YWRJZGVudGlmaWVyID0gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChtYWluVGhyZWFkKTsK
LSAgICAgICAgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgbG9ja0F0
b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKLXsKLSAgICBBU1NFUlQoYXRvbWljYWxs
eUluaXRpYWxpemVkU3RhdGljTXV0ZXgpOwotICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRp
Y011dGV4LT5sb2NrKCk7Ci19Ci0KLXZvaWQgdW5sb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3Rh
dGljTXV0ZXgoKQotewotICAgIGF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4LT51bmxv
Y2soKTsKLX0KLQotVGhyZWFkSWRlbnRpZmllciBjcmVhdGVUaHJlYWRJbnRlcm5hbChUaHJlYWRG
dW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhLCBjb25zdCBjaGFyKikKLXsKLSAgICBUaHJl
YWRQcml2YXRlKiB0aHJlYWQgPSBuZXcgVGhyZWFkUHJpdmF0ZShlbnRyeVBvaW50LCBkYXRhKTsK
LSAgICBpZiAoIXRocmVhZCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUg
dGhyZWFkIGF0IGVudHJ5IHBvaW50ICVwIHdpdGggZGF0YSAlcCIsIGVudHJ5UG9pbnQsIGRhdGEp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgdGhyZWFkLT5zdGFydCgpOwotCi0gICAg
UVRocmVhZCogdGhyZWFkUmVmID0gc3RhdGljX2Nhc3Q8UVRocmVhZCo+KHRocmVhZCk7Ci0KLSAg
ICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZCh0aHJlYWRSZWYpOwotfQotCi12
b2lkIHNldFRocmVhZE5hbWVJbnRlcm5hbChjb25zdCBjaGFyKikKLXsKLX0KLQotaW50IHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQsIHZvaWQqKiByZXN1
bHQpCi17Ci0gICAgQVNTRVJUKHRocmVhZElEKTsKLQotICAgIFFUaHJlYWQqIHRocmVhZCA9IHRo
cmVhZEZvcklkZW50aWZpZXIodGhyZWFkSUQpOwotCi0gICAgYm9vbCByZXMgPSB0aHJlYWQtPndh
aXQoKTsKLQotICAgIGNsZWFyVGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7Ci0gICAgaWYg
KHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PFRocmVhZFByaXZhdGUqPih0
aHJlYWQpLT5nZXRSZXR1cm5WYWx1ZSgpOwotCi0gICAgcmV0dXJuICFyZXM7Ci19Ci0KLXZvaWQg
ZGV0YWNoVGhyZWFkKFRocmVhZElkZW50aWZpZXIpCi17Ci19Ci0KLVRocmVhZElkZW50aWZpZXIg
Y3VycmVudFRocmVhZCgpCi17Ci0gICAgUVRocmVhZCogY3VycmVudFRocmVhZCA9IFFUaHJlYWQ6
OmN1cnJlbnRUaHJlYWQoKTsKLSAgICBpZiAoVGhyZWFkSWRlbnRpZmllciBpZCA9IGlkZW50aWZp
ZXJCeVF0aHJlYWRIYW5kbGUoY3VycmVudFRocmVhZCkpCi0gICAgICAgIHJldHVybiBpZDsKLSAg
ICByZXR1cm4gZXN0YWJsaXNoSWRlbnRpZmllckZvclRocmVhZChjdXJyZW50VGhyZWFkKTsKLX0K
LQotYm9vbCBpc01haW5UaHJlYWQoKQotewotICAgIHJldHVybiBRVGhyZWFkOjpjdXJyZW50VGhy
ZWFkKCkgPT0gUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKS0+dGhyZWFkKCk7Ci19Ci0KLU11
dGV4OjpNdXRleCgpCi0gICAgOiBtX211dGV4KG5ldyBRTXV0ZXgoKSkKLXsKLX0KLQotTXV0ZXg6
On5NdXRleCgpCi17Ci0gICAgZGVsZXRlIG1fbXV0ZXg7Ci19Ci0KLXZvaWQgTXV0ZXg6OmxvY2so
KQotewotICAgIG1fbXV0ZXgtPmxvY2soKTsKLX0KLQotYm9vbCBNdXRleDo6dHJ5TG9jaygpCi17
Ci0gICAgcmV0dXJuIG1fbXV0ZXgtPnRyeUxvY2soKTsKLX0KLQotdm9pZCBNdXRleDo6dW5sb2Nr
KCkKLXsKLSAgICBtX211dGV4LT51bmxvY2soKTsKLX0KLQotVGhyZWFkQ29uZGl0aW9uOjpUaHJl
YWRDb25kaXRpb24oKQotICAgIDogbV9jb25kaXRpb24obmV3IFFXYWl0Q29uZGl0aW9uKCkpCi17
Ci19Ci0KLVRocmVhZENvbmRpdGlvbjo6flRocmVhZENvbmRpdGlvbigpCi17Ci0gICAgZGVsZXRl
IG1fY29uZGl0aW9uOwotfQotCi12b2lkIFRocmVhZENvbmRpdGlvbjo6d2FpdChNdXRleCYgbXV0
ZXgpCi17Ci0gICAgbV9jb25kaXRpb24tPndhaXQobXV0ZXguaW1wbCgpKTsKLX0KLQotYm9vbCBU
aHJlYWRDb25kaXRpb246OnRpbWVkV2FpdChNdXRleCYgbXV0ZXgsIGRvdWJsZSBhYnNvbHV0ZVRp
bWUpCi17Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpOwotCi0g
ICAgLy8gVGltZSBpcyBpbiB0aGUgcGFzdCAtIHJldHVybiBpbW1lZGlhdGVseS4KLSAgICBpZiAo
YWJzb2x1dGVUaW1lIDwgY3VycmVudFRpbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIFRpbWUgaXMgdG9vIGZhciBpbiB0aGUgZnV0dXJlIChhbmQgd291bGQgb3ZlcmZsb3cgdW5z
aWduZWQgbG9uZykgLSB3YWl0IGZvcmV2ZXIuCi0gICAgaWYgKGFic29sdXRlVGltZSAtIGN1cnJl
bnRUaW1lID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihJTlRfTUFYKSAvIDEwMDAuMCkgewotICAgICAg
ICB3YWl0KG11dGV4KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgZG91Ymxl
IGludGVydmFsTWlsbGlzZWNvbmRzID0gKGFic29sdXRlVGltZSAtIGN1cnJlbnRUaW1lKSAqIDEw
MDAuMDsKLSAgICByZXR1cm4gbV9jb25kaXRpb24tPndhaXQobXV0ZXguaW1wbCgpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPihpbnRlcnZhbE1pbGxpc2Vjb25kcykpOwotfQotCi12b2lkIFRo
cmVhZENvbmRpdGlvbjo6c2lnbmFsKCkKLXsKLSAgICBtX2NvbmRpdGlvbi0+d2FrZU9uZSgpOwot
fQotCi12b2lkIFRocmVhZENvbmRpdGlvbjo6YnJvYWRjYXN0KCkKLXsKLSAgICBtX2NvbmRpdGlv
bi0+d2FrZUFsbCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS93dGYvcXQvVGhyZWFkaW5nUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAJKHJldmlzaW9uIDQyNzQ4KQkoZnJvbSBKYXZhU2Ny
aXB0Q29yZS93dGYvVGhyZWFkaW5nUXQuY3BwOjQyNzQ4KQorKysgSmF2YVNjcmlwdENvcmUvd3Rm
L3F0L1RocmVhZGluZ1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29t
KQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCisKKyNpbmNsdWRl
ICJDdXJyZW50VGltZS5oIgorI2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJNYWluVGhy
ZWFkLmgiCisjaW5jbHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5oIgorCisjaW5jbHVkZSA8UUNvcmVB
cHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRTXV0ZXg+CisjaW5jbHVkZSA8UVRocmVhZD4KKyNpbmNs
dWRlIDxRV2FpdENvbmRpdGlvbj4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFRocmVhZFBy
aXZhdGUgOiBwdWJsaWMgUVRocmVhZCB7CitwdWJsaWM6CisgICAgVGhyZWFkUHJpdmF0ZShUaHJl
YWRGdW5jdGlvbiBlbnRyeVBvaW50LCB2b2lkKiBkYXRhKTsKKyAgICB2b2lkIHJ1bigpOworICAg
IHZvaWQqIGdldFJldHVyblZhbHVlKCkgeyByZXR1cm4gbV9yZXR1cm5WYWx1ZTsgfQorcHJpdmF0
ZToKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgVGhyZWFkRnVuY3Rpb24gbV9lbnRyeVBvaW50Owor
ICAgIHZvaWQqIG1fcmV0dXJuVmFsdWU7Cit9OworCitUaHJlYWRQcml2YXRlOjpUaHJlYWRQcml2
YXRlKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEpIAorICAgIDogbV9kYXRh
KGRhdGEpCisgICAgLCBtX2VudHJ5UG9pbnQoZW50cnlQb2ludCkKKyAgICAsIG1fcmV0dXJuVmFs
dWUoMCkKK3sKK30KKwordm9pZCBUaHJlYWRQcml2YXRlOjpydW4oKQoreworICAgIG1fcmV0dXJu
VmFsdWUgPSBtX2VudHJ5UG9pbnQobV9kYXRhKTsKK30KKworCitzdGF0aWMgTXV0ZXgqIGF0b21p
Y2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4OworCitzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBt
YWluVGhyZWFkSWRlbnRpZmllcjsKKworc3RhdGljIE11dGV4JiB0aHJlYWRNYXBNdXRleCgpCit7
CisgICAgc3RhdGljIE11dGV4IG11dGV4OworICAgIHJldHVybiBtdXRleDsKK30KKworc3RhdGlj
IEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgUVRocmVhZCo+JiB0aHJlYWRNYXAoKQoreworICAg
IHN0YXRpYyBIYXNoTWFwPFRocmVhZElkZW50aWZpZXIsIFFUaHJlYWQqPiBtYXA7CisgICAgcmV0
dXJuIG1hcDsKK30KKworc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckJ5UXRocmVh
ZEhhbmRsZShRVGhyZWFkKiYgdGhyZWFkKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJl
YWRNYXBNdXRleCgpKTsKKworICAgIEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgUVRocmVhZCo+
OjppdGVyYXRvciBpID0gdGhyZWFkTWFwKCkuYmVnaW4oKTsKKyAgICBmb3IgKDsgaSAhPSB0aHJl
YWRNYXAoKS5lbmQoKTsgKytpKSB7CisgICAgICAgIGlmIChpLT5zZWNvbmQgPT0gdGhyZWFkKQor
ICAgICAgICAgICAgcmV0dXJuIGktPmZpcnN0OworICAgIH0KKworICAgIHJldHVybiAwOworfQor
CitzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKFFU
aHJlYWQqJiB0aHJlYWQpCit7CisgICAgQVNTRVJUKCFpZGVudGlmaWVyQnlRdGhyZWFkSGFuZGxl
KHRocmVhZCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwor
CisgICAgc3RhdGljIFRocmVhZElkZW50aWZpZXIgaWRlbnRpZmllckNvdW50ID0gMTsKKworICAg
IHRocmVhZE1hcCgpLmFkZChpZGVudGlmaWVyQ291bnQsIHRocmVhZCk7CisKKyAgICByZXR1cm4g
aWRlbnRpZmllckNvdW50Kys7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyVGhyZWFkRm9ySWRlbnRp
ZmllcihUaHJlYWRJZGVudGlmaWVyIGlkKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcih0aHJl
YWRNYXBNdXRleCgpKTsKKworICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhpZCkpOwor
CisgICAgdGhyZWFkTWFwKCkucmVtb3ZlKGlkKTsKK30KKworc3RhdGljIFFUaHJlYWQqIHRocmVh
ZEZvcklkZW50aWZpZXIoVGhyZWFkSWRlbnRpZmllciBpZCkKK3sKKyAgICBNdXRleExvY2tlciBs
b2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7CisKKyAgICByZXR1cm4gdGhyZWFkTWFwKCkuZ2V0KGlk
KTsKK30KKwordm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKK3sKKyAgICBpZiAoIWF0b21pY2Fs
bHlJbml0aWFsaXplZFN0YXRpY011dGV4KSB7CisgICAgICAgIGF0b21pY2FsbHlJbml0aWFsaXpl
ZFN0YXRpY011dGV4ID0gbmV3IE11dGV4OworICAgICAgICB0aHJlYWRNYXBNdXRleCgpOworICAg
ICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJhdG9yKCk7CisgICAgICAgIFFUaHJlYWQq
IG1haW5UaHJlYWQgPSBRQ29yZUFwcGxpY2F0aW9uOjppbnN0YW5jZSgpLT50aHJlYWQoKTsKKyAg
ICAgICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBpZGVudGlmaWVyQnlRdGhyZWFkSGFuZGxlKG1h
aW5UaHJlYWQpOworICAgICAgICBpZiAoIW1haW5UaHJlYWRJZGVudGlmaWVyKQorICAgICAgICAg
ICAgbWFpblRocmVhZElkZW50aWZpZXIgPSBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKG1h
aW5UaHJlYWQpOworICAgICAgICBpbml0aWFsaXplTWFpblRocmVhZCgpOworICAgIH0KK30KKwor
dm9pZCBsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKQoreworICAgIEFTU0VS
VChhdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCk7CisgICAgYXRvbWljYWxseUluaXRp
YWxpemVkU3RhdGljTXV0ZXgtPmxvY2soKTsKK30KKwordm9pZCB1bmxvY2tBdG9taWNhbGx5SW5p
dGlhbGl6ZWRTdGF0aWNNdXRleCgpCit7CisgICAgYXRvbWljYWxseUluaXRpYWxpemVkU3RhdGlj
TXV0ZXgtPnVubG9jaygpOworfQorCitUaHJlYWRJZGVudGlmaWVyIGNyZWF0ZVRocmVhZEludGVy
bmFsKFRocmVhZEZ1bmN0aW9uIGVudHJ5UG9pbnQsIHZvaWQqIGRhdGEsIGNvbnN0IGNoYXIqKQor
eworICAgIFRocmVhZFByaXZhdGUqIHRocmVhZCA9IG5ldyBUaHJlYWRQcml2YXRlKGVudHJ5UG9p
bnQsIGRhdGEpOworICAgIGlmICghdGhyZWFkKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGNyZWF0ZSB0aHJlYWQgYXQgZW50cnkgcG9pbnQgJXAgd2l0aCBkYXRhICVwIiwgZW50cnlQ
b2ludCwgZGF0YSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB0aHJlYWQtPnN0YXJ0
KCk7CisKKyAgICBRVGhyZWFkKiB0aHJlYWRSZWYgPSBzdGF0aWNfY2FzdDxRVGhyZWFkKj4odGhy
ZWFkKTsKKworICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKHRocmVhZFJl
Zik7Cit9CisKK3ZvaWQgc2V0VGhyZWFkTmFtZUludGVybmFsKGNvbnN0IGNoYXIqKQoreworfQor
CitpbnQgd2FpdEZvclRocmVhZENvbXBsZXRpb24oVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCwg
dm9pZCoqIHJlc3VsdCkKK3sKKyAgICBBU1NFUlQodGhyZWFkSUQpOworCisgICAgUVRocmVhZCog
dGhyZWFkID0gdGhyZWFkRm9ySWRlbnRpZmllcih0aHJlYWRJRCk7CisKKyAgICBib29sIHJlcyA9
IHRocmVhZC0+d2FpdCgpOworCisgICAgY2xlYXJUaHJlYWRGb3JJZGVudGlmaWVyKHRocmVhZElE
KTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICAqcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VGhyZWFk
UHJpdmF0ZSo+KHRocmVhZCktPmdldFJldHVyblZhbHVlKCk7CisKKyAgICByZXR1cm4gIXJlczsK
K30KKwordm9pZCBkZXRhY2hUaHJlYWQoVGhyZWFkSWRlbnRpZmllcikKK3sKK30KKworVGhyZWFk
SWRlbnRpZmllciBjdXJyZW50VGhyZWFkKCkKK3sKKyAgICBRVGhyZWFkKiBjdXJyZW50VGhyZWFk
ID0gUVRocmVhZDo6Y3VycmVudFRocmVhZCgpOworICAgIGlmIChUaHJlYWRJZGVudGlmaWVyIGlk
ID0gaWRlbnRpZmllckJ5UXRocmVhZEhhbmRsZShjdXJyZW50VGhyZWFkKSkKKyAgICAgICAgcmV0
dXJuIGlkOworICAgIHJldHVybiBlc3RhYmxpc2hJZGVudGlmaWVyRm9yVGhyZWFkKGN1cnJlbnRU
aHJlYWQpOworfQorCitib29sIGlzTWFpblRocmVhZCgpCit7CisgICAgcmV0dXJuIFFUaHJlYWQ6
OmN1cnJlbnRUaHJlYWQoKSA9PSBRQ29yZUFwcGxpY2F0aW9uOjppbnN0YW5jZSgpLT50aHJlYWQo
KTsKK30KKworTXV0ZXg6Ok11dGV4KCkKKyAgICA6IG1fbXV0ZXgobmV3IFFNdXRleCgpKQorewor
fQorCitNdXRleDo6fk11dGV4KCkKK3sKKyAgICBkZWxldGUgbV9tdXRleDsKK30KKwordm9pZCBN
dXRleDo6bG9jaygpCit7CisgICAgbV9tdXRleC0+bG9jaygpOworfQorCitib29sIE11dGV4Ojp0
cnlMb2NrKCkKK3sKKyAgICByZXR1cm4gbV9tdXRleC0+dHJ5TG9jaygpOworfQorCit2b2lkIE11
dGV4Ojp1bmxvY2soKQoreworICAgIG1fbXV0ZXgtPnVubG9jaygpOworfQorCitUaHJlYWRDb25k
aXRpb246OlRocmVhZENvbmRpdGlvbigpCisgICAgOiBtX2NvbmRpdGlvbihuZXcgUVdhaXRDb25k
aXRpb24oKSkKK3sKK30KKworVGhyZWFkQ29uZGl0aW9uOjp+VGhyZWFkQ29uZGl0aW9uKCkKK3sK
KyAgICBkZWxldGUgbV9jb25kaXRpb247Cit9CisKK3ZvaWQgVGhyZWFkQ29uZGl0aW9uOjp3YWl0
KE11dGV4JiBtdXRleCkKK3sKKyAgICBtX2NvbmRpdGlvbi0+d2FpdChtdXRleC5pbXBsKCkpOwor
fQorCitib29sIFRocmVhZENvbmRpdGlvbjo6dGltZWRXYWl0KE11dGV4JiBtdXRleCwgZG91Ymxl
IGFic29sdXRlVGltZSkKK3sKKyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBXVEY6OmN1cnJlbnRU
aW1lKCk7CisKKyAgICAvLyBUaW1lIGlzIGluIHRoZSBwYXN0IC0gcmV0dXJuIGltbWVkaWF0ZWx5
LgorICAgIGlmIChhYnNvbHV0ZVRpbWUgPCBjdXJyZW50VGltZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gVGltZSBpcyB0b28gZmFyIGluIHRoZSBmdXR1cmUgKGFuZCB3b3VsZCBv
dmVyZmxvdyB1bnNpZ25lZCBsb25nKSAtIHdhaXQgZm9yZXZlci4KKyAgICBpZiAoYWJzb2x1dGVU
aW1lIC0gY3VycmVudFRpbWUgPiBzdGF0aWNfY2FzdDxkb3VibGU+KElOVF9NQVgpIC8gMTAwMC4w
KSB7CisgICAgICAgIHdhaXQobXV0ZXgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBkb3VibGUgaW50ZXJ2YWxNaWxsaXNlY29uZHMgPSAoYWJzb2x1dGVUaW1lIC0gY3VycmVu
dFRpbWUpICogMTAwMC4wOworICAgIHJldHVybiBtX2NvbmRpdGlvbi0+d2FpdChtdXRleC5pbXBs
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGludGVydmFsTWlsbGlzZWNvbmRzKSk7Cit9
CisKK3ZvaWQgVGhyZWFkQ29uZGl0aW9uOjpzaWduYWwoKQoreworICAgIG1fY29uZGl0aW9uLT53
YWtlT25lKCk7Cit9CisKK3ZvaWQgVGhyZWFkQ29uZGl0aW9uOjpicm9hZGNhc3QoKQoreworICAg
IG1fY29uZGl0aW9uLT53YWtlQWxsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="14850"
          type_id="1"
          status="+"
          setter="mrowe"
    />
          </attachment>
      

    </bug>

</bugzilla>