<?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>25170</bug_id>
          
          <creation_ts>2009-04-13 17:32:58 -0700</creation_ts>
          <short_desc>Upstream V8WorkerCustom.cpp and V8WorkerContextCustom.cpp for V8 bindings.</short_desc>
          <delta_ts>2009-04-18 18:42:19 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>
          <dependson>25167</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>117389</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-04-13 17:32:58 -0700</bug_when>
    <thetext>Upstream V8WorkerCustom.cpp and V8WorkerContextCustom.cpp for V8 bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117391</commentid>
    <comment_count>1</comment_count>
      <attachid>29449</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-04-13 17:45:07 -0700</bug_when>
    <thetext>Created attachment 29449
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117867</commentid>
    <comment_count>2</comment_count>
      <attachid>29449</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-16 20:40:53 -0700</bug_when>
    <thetext>Comment on attachment 29449
Proposed Patch

Apologies for the delay. Good scrubbing! Needs just a few more changes.

&gt; +ACCESSOR_GETTER(WorkerContextSelf) {

Brace on new line.

&gt; +ACCESSOR_GETTER(WorkerContextOnmessage) {

Ditto.

&gt; +ACCESSOR_SETTER(WorkerContextOnmessage) {

Ditto.

&gt; +v8::Handle&lt;v8::Value&gt; SetTimeoutOrInterval(const v8::Arguments&amp; args, bool singleShot) {

Ditto.

&gt; +v8::Handle&lt;v8::Value&gt; ClearTimeoutOrInterval(const v8::Arguments&amp; args) {

Ditto.

&gt; +    int tid = ToInt32(args[0], ok);

toInt32, and let&apos;s expand tid to timerId.

&gt; +CALLBACK_FUNC_DECL(WorkerContextImportScripts) {

Brace on new line.

&gt; +CALLBACK_FUNC_DECL(WorkerContextSetTimeout) {

Ditto.

&gt; +CALLBACK_FUNC_DECL(WorkerContextClearTimeout) {

Ditto.

&gt; +CALLBACK_FUNC_DECL(WorkerContextSetInterval) {

Ditto.

&gt; +CALLBACK_FUNC_DECL(WorkerContextClearInterval) {

Ditto.

&gt; +CALLBACK_FUNC_DECL(WorkerContextAddEventListener) {

Ditto.

&gt; +CALLBACK_FUNC_DECL(WorkerContextRemoveEventListener) {

Ditto.

&gt; +CALLBACK_FUNC_DECL(WorkerConstructor) {

Ditto.

&gt; +    if (!WorkerContextExecutionProxy::isWebWorkersEnabled()) {
&gt; +        V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, &quot;Worker is not enabled.&quot;);
&gt; +        return v8::Undefined();

Use throwError helper from V8Proxy.

&gt; +        V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, &quot;DOM object constructor cannot be called as a function.&quot;);
&gt; +        return v8::Undefined();

Ditto.

&gt; +    if (args.Length() == 0) {
&gt; +        V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, &quot;Not enough arguments&quot;);
&gt; +        return v8::Undefined();

Ditto.

&gt; +    if (tryCatch.HasCaught()) {
&gt; +        v8::ThrowException(tryCatch.Exception());
&gt; +        return v8::Undefined();

Ditto.

&gt; +ACCESSOR_GETTER(WorkerOnmessage) {

Brace on new line.

&gt; +ACCESSOR_SETTER(WorkerOnmessage) {

Ditto.

&gt; +ACCESSOR_GETTER(WorkerOnerror) {

Ditto.

&gt; +ACCESSOR_SETTER(WorkerOnerror) {

Ditto.

&gt; +CALLBACK_FUNC_DECL(WorkerAddEventListener) {

Ditto.

&gt; +CALLBACK_FUNC_DECL(WorkerRemoveEventListener) {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117946</commentid>
    <comment_count>3</comment_count>
      <attachid>29583</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2009-04-17 11:04:32 -0700</bug_when>
    <thetext>Created attachment 29583
Proposed Patch

All issues fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117970</commentid>
    <comment_count>4</comment_count>
      <attachid>29583</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-17 14:34:58 -0700</bug_when>
    <thetext>Comment on attachment 29583
Proposed Patch

Even better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118039</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-04-18 18:42:19 -0700</bug_when>
    <thetext>landed: http://trac.webkit.org/changeset/42648</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29449</attachid>
            <date>2009-04-13 17:45:07 -0700</date>
            <delta_ts>2009-04-17 11:04:32 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>25170</filename>
            <type>text/plain</type>
            <size>19253</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2IyZDRjOS4uNjc3OWFjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0wNC0xMyAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MTcw
CisgICAgICAgIFVwc3RyZWFtIFY4V29ya2VyQ3VzdG9tLmNwcCBhbmQgVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcCBmb3IgVjggYmluZGluZ3MuCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcDogQWRkZWQuCisKIDIw
MDktMDQtMTMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggNDVlMzYyZC4uNGI5YzhkOSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNw
cApAQCAtNDA2LDcgKzQwNiw3IEBAIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHk6OmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuCiAgICAgcmV0dXJu
IG5ld0xpc3RlbmVyLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2
ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHkp
CitQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwg
Ym9vbCBpc0lubGluZSwgYm9vbCBmaW5kT25seSkKIHsKICAgICByZXR1cm4gZmluZE9yQ3JlYXRl
RXZlbnRMaXN0ZW5lckhlbHBlcihvYmplY3QsIGlzSW5saW5lLCBmaW5kT25seSwgZmFsc2UpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmgKaW5kZXggZTU3MzEyYS4uZGFkMTkxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCkBAIC01Niw3ICs1Niw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gRklYTUU6IGZvbGxvd2luZyBmdW5jdGlvbiBzc2hvdWxk
IGhhdmUgY2FtZWxDYXNlZCBuYW1lcyBvbmNlIFY4IGNvZGUtZ2VuZXJhdGluZyBzY3JpcHQgaXMg
bWlncmF0ZWQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gR2V0Q29udGV4dCgpIHsg
cmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOyB9CiAgICAgICAg
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IEdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBGaW5kT3JD
cmVhdGVFdmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IGxpc3RlbmVyLCBib29sIGlz
SW5saW5lLCBib29sIGZpbmRPbmx5KTsKICAgICAgICAgdm9pZCBSZW1vdmVFdmVudExpc3RlbmVy
KFY4RXZlbnRMaXN0ZW5lciopOwogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1w
bCk7CkBAIC02NSw2ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0VG9WOE9iamVjdChXb3JrZXJDb250
ZXh0KiB3Yyk7CiAKICAgICAgICAgLy8gRmluZHMvY3JlYXRlcyBldmVudCBsaXN0ZW5lciB3cmFw
cGVycy4KKyAgICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUV2
ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUs
IGJvb2wgZmluZE9ubHkpOwogICAgICAgICBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gZmlu
ZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3Qs
IGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHkpOwogCiAgICAgICAgIC8vIFRyYWNrIHRoZSBl
dmVudCBzbyB0aGF0IHdlIGNhbiBkZXRhY2ggaXQgZnJvbSB0aGUgSlMgd3JhcHBlciB3aGVuIGEg
d29ya2VyCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNv
bnRleHRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250
ZXh0Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYmFiMmJl
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiV29ya2Vy
Q29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FDQ0VTU09SX0dFVFRFUihXb3Jr
ZXJDb250ZXh0U2VsZikgeworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJDb250ZXh0LnNlbGYu
X2dldCIpOworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOFByb3h5OjpUb05h
dGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGlu
Zm8uSG9sZGVyKCkpOworICAgIHJldHVybiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6Oldv
cmtlckNvbnRleHRUb1Y4T2JqZWN0KHdvcmtlckNvbnRleHQpOworfQorCitBQ0NFU1NPUl9HRVRU
RVIoV29ya2VyQ29udGV4dE9ubWVzc2FnZSkgeworICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29u
dGV4dC5vbm1lc3NhZ2UuX2dldCIpOworICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0g
VjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JL
RVJDT05URVhULCBpbmZvLkhvbGRlcigpKTsKKyAgaWYgKHdvcmtlckNvbnRleHQtPm9ubWVzc2Fn
ZSgpKSB7CisgICAgICBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0
YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIqPih3b3JrZXJDb250ZXh0LT5v
bm1lc3NhZ2UoKSk7CisgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxp
c3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Cisg
IH0KKyAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQUNDRVNTT1JfU0VUVEVSKFdvcmtl
ckNvbnRleHRPbm1lc3NhZ2UpIHsKKyAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5v
bm1lc3NhZ2UuX3NldCIpOworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOFBy
b3h5OjpUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNP
TlRFWFQsIGluZm8uSG9sZGVyKCkpOworICAgIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIq
IG9sZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcio+
KHdvcmtlckNvbnRleHQtPm9ubWVzc2FnZSgpKTsKKyAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7
CisgICAgICAgIGlmICh3b3JrZXJDb250ZXh0LT5vbm1lc3NhZ2UoKSkgeworICAgICAgICAgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IG9sZFY4TGlzdGVuZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlz
dGVuZXJPYmplY3QoKTsKKyAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5I
b2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhDdXN0b206OmtXb3JrZXJDb250ZXh0UmVxdWVzdENh
Y2hlSW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgor
ICAgICAgICB3b3JrZXJDb250ZXh0LT5zZXRPbm1lc3NhZ2UoMCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSB3b3JrZXJDb250ZXh0LT5z
Y3JpcHQoKS0+cHJveHkoKS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6
Ok9iamVjdD46OkNhc3QodmFsdWUpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBpZiAobGlzdGVu
ZXIpIHsKKyAgICAgICAgICAgIGlmIChvbGRMaXN0ZW5lcikgeworICAgICAgICAgICAgICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRWOExpc3RlbmVyID0gb2xkTGlzdGVuZXItPmdldExpc3Rl
bmVyT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZv
LkhvbGRlcigpLCBvbGRWOExpc3RlbmVyLCBWOEN1c3RvbTo6a1dvcmtlckNvbnRleHRSZXF1ZXN0
Q2FjaGVJbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdvcmtlckNvbnRleHQt
PnNldE9ubWVzc2FnZShsaXN0ZW5lcik7CisgICAgICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRl
bmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1dvcmtlckNvbnRleHRSZXF1ZXN0
Q2FjaGVJbmRleCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiBTZXRUaW1lb3V0T3JJbnRlcnZhbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29sIHNp
bmdsZVNob3QpIHsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhQcm94eTo6
VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JLRVJDT05URVhU
LCBhcmdzLkhvbGRlcigpKTsKKworICAgIGludCBkZWxheSA9IHRvSW50MzIoYXJnc1sxXSk7CisK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworCisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30K
Kwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IENsZWFyVGltZW91dE9ySW50ZXJ2YWwoY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykgeworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBW
OFByb3h5OjpUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktF
UkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOworCisgICAgYm9vbCBvayA9IGZhbHNlOworICAgIGlu
dCB0aWQgPSBUb0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAob2spCisgICAgICAgIHdvcmtl
ckNvbnRleHQtPnJlbW92ZVRpbWVvdXQodGlkKTsKKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb250ZXh0SW1wb3J0U2NyaXB0cykg
eworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJDb250ZXh0LmltcG9ydFNjcmlwdHMoKSIpOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwor
Q0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnRleHRTZXRUaW1lb3V0KSB7CisgICAgSU5DX1NU
QVRTKEwiRE9NLldvcmtlckNvbnRleHQuc2V0VGltZW91dCgpIik7CisgICAgcmV0dXJuIFNldFRp
bWVvdXRPckludGVydmFsKGFyZ3MsIHRydWUpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woV29y
a2VyQ29udGV4dENsZWFyVGltZW91dCkgeworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJDb250
ZXh0LmNsZWFyVGltZW91dCgpIik7CisgICAgcmV0dXJuIENsZWFyVGltZW91dE9ySW50ZXJ2YWwo
YXJncyk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb250ZXh0U2V0SW50ZXJ2YWwp
IHsKKyAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5zZXRJbnRlcnZhbCgpIik7Cisg
ICAgcmV0dXJuIFNldFRpbWVvdXRPckludGVydmFsKGFyZ3MsIGZhbHNlKTsKK30KKworQ0FMTEJB
Q0tfRlVOQ19ERUNMKFdvcmtlckNvbnRleHRDbGVhckludGVydmFsKSB7CisgICAgSU5DX1NUQVRT
KEwiRE9NLldvcmtlckNvbnRleHQuY2xlYXJJbnRlcnZhbCgpIik7CisgICAgcmV0dXJuIENsZWFy
VGltZW91dE9ySW50ZXJ2YWwoYXJncyk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJD
b250ZXh0QWRkRXZlbnRMaXN0ZW5lcikgeworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJDb250
ZXh0LmFkZEV2ZW50TGlzdGVuZXIoKSIpOworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRl
eHQgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6
OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOworCisgICAgUmVmUHRyPFY4RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+cHJveHkoKS0+ZmluZE9y
Q3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSks
IGZhbHNlLCBmYWxzZSk7CisKKyAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgU3RyaW5nIHR5
cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9
IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOworICAgICAgICB3b3JrZXJDb250ZXh0LT5hZGRFdmVu
dExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKworICAgICAgICBjcmVhdGVI
aWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprV29ya2Vy
Q29udGV4dFJlcXVlc3RDYWNoZUluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnRleHRSZW1vdmVFdmVudExp
c3RlbmVyKSB7CisgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigpIik7CisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4UHJveHk6
OlRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVY
VCwgYXJncy5Ib2xkZXIoKSk7CisgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94
eSA9IHdvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5wcm94eSgpOworCisgICAgUmVmUHRyPFY4RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2
ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSksIGZhbHNlLCB0cnVlKTsKKworICAg
IGlmIChsaXN0ZW5lcikgeworICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhh
cmdzWzBdKTsKKyAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVl
KCk7CisgICAgICAgIHdvcmtlckNvbnRleHQtPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlz
dGVuZXIuZ2V0KCksIHVzZUNhcHR1cmUpOworCisgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVu
Y3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtXb3JrZXJDb250ZXh0UmVxdWVz
dENhY2hlSW5kZXgpOworICAgIH0KKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE0OWY5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTAsMCArMSwyMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUg
Ildvcmtlci5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgi
CisjaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhQcm94eS5o
IgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgor
I2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb25zdHJ1Y3RvcikgeworICAgIElO
Q19TVEFUUyhMIkRPTS5Xb3JrZXIuQ29uc3RydWN0b3IiKTsKKworICAgIGlmICghV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5Ojppc1dlYldvcmtlcnNFbmFibGVkKCkpIHsKKyAgICAgICAgVjhQ
cm94eTo6VGhyb3dFcnJvcihWOFByb3h5OjpTWU5UQVhfRVJST1IsICJXb3JrZXIgaXMgbm90IGVu
YWJsZWQuIik7CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgfQorCisgICAg
aWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKSB7CisgICAgICAgIFY4UHJveHk6OlRocm93RXJy
b3IoVjhQcm94eTo6VFlQRV9FUlJPUiwgIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJl
IGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworICAgIH0KKworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDApIHsKKyAgICAgICAgVjhQcm94
eTo6VGhyb3dFcnJvcihWOFByb3h5OjpTWU5UQVhfRVJST1IsICJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKworICAgIHY4OjpU
cnlDYXRjaCB0cnlDYXRjaDsKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHNjcmlwdFVybCA9
IGFyZ3NbMF0tPlRvU3RyaW5nKCk7CisgICAgaWYgKHRyeUNhdGNoLkhhc0NhdWdodCgpKSB7Cisg
ICAgICAgIHY4OjpUaHJvd0V4Y2VwdGlvbih0cnlDYXRjaC5FeGNlcHRpb24oKSk7CisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgfQorICAgIGlmIChzY3JpcHRVcmwuSXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgLy8gR2V0IHRoZSBz
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IDA7CisgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IFdvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKKyAgICBpZiAocHJveHkpCisgICAg
ICAgIGNvbnRleHQgPSBwcm94eS0+d29ya2VyQ29udGV4dCgpOworICAgIGVsc2UgeworICAgICAg
ICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKCk7CisgICAgICAgIGlmICgh
ZnJhbWUpCisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAgICBjb250
ZXh0ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIHRoZSB3b3Jr
ZXIgb2JqZWN0LgorICAgIC8vIE5vdGU6IGl0J3MgT0sgdG8gbGV0IHRoaXMgUmVmUHRyIGdvIG91
dCBvZiBzY29wZSBiZWNhdXNlIHdlIGFsc28gY2FsbCBTZXRET01XcmFwcGVyKCksIHdoaWNoIGVm
ZmVjdGl2ZWx5IGhvbGRzIGEgcmVmZXJlbmNlIHRvIG9iai4KKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBSZWZQdHI8V29ya2VyPiBvYmogPSBXb3JrZXI6OmNyZWF0ZSh0b1dlYkNvcmVT
dHJpbmcoc2NyaXB0VXJsKSwgY29udGV4dCwgZWMpOworCisgICAgLy8gU2V0dXAgdGhlIHN0YW5k
YXJkIHdyYXBwZXIgb2JqZWN0IGludGVybmFsIGZpZWxkcy4KKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXJPYmplY3QgPSBhcmdzLkhvbGRlcigpOworICAgIFY4UHJveHk6OlNldERP
TVdyYXBwZXIod3JhcHBlck9iamVjdCwgVjhDbGFzc0luZGV4OjpXT1JLRVIsIG9iai5nZXQoKSk7
CisKKyAgICBvYmotPnJlZigpOworICAgIFY4UHJveHk6OlNldEpTV3JhcHBlckZvckFjdGl2ZURP
TU9iamVjdChvYmouZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBl
ck9iamVjdCkpOworCisgICAgcmV0dXJuIHdyYXBwZXJPYmplY3Q7Cit9CisKK0FDQ0VTU09SX0dF
VFRFUihXb3JrZXJPbm1lc3NhZ2UpIHsKKyAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLm9ubWVz
c2FnZS5fZ2V0Iik7CisgICAgV29ya2VyKiB3b3JrZXIgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVj
dDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBpbmZvLkhvbGRlcigpKTsKKyAgICBpZiAo
d29ya2VyLT5vbm1lc3NhZ2UoKSkgeworICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxp
c3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4od29ya2VyLT5vbm1l
c3NhZ2UoKSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlz
dGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAgICAgIHJldHVybiB2OExpc3RlbmVyOwor
ICAgIH0KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitBQ0NFU1NPUl9TRVRURVIo
V29ya2VyT25tZXNzYWdlKSB7CisgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5vbm1lc3NhZ2Uu
X3NldCIpOworICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8V29y
a2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7CisgICAgVjhPYmplY3RF
dmVudExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0
ZW5lcio+KHdvcmtlci0+b25tZXNzYWdlKCkpOworICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsK
KyAgICAgICAgaWYgKG9sZExpc3RlbmVyKSB7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwor
ICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExp
c3RlbmVyLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KKyAgICAgICAgd29ya2VyLT5zZXRPbm1l
c3NhZ2UoMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5
OjpyZXRyaWV2ZSh3b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgICAgIGlm
ICghcHJveHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIo
dmFsdWUsIGZhbHNlKTsKKyAgICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICBpZiAo
b2xkTGlzdGVuZXIpIHsKKyAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xk
VjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICAg
ICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5l
ciwgVjhDdXN0b206OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHdvcmtlci0+c2V0T25tZXNzYWdlKGxpc3RlbmVyKTsKKyAgICAgICAgICAg
IGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjpr
V29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCitBQ0NFU1NP
Ul9HRVRURVIoV29ya2VyT25lcnJvcikgeworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXIub25l
cnJvci5fZ2V0Iik7CisgICAgV29ya2VyKiB3b3JrZXIgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVj
dDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBpbmZvLkhvbGRlcigpKTsKKyAgICBpZiAo
d29ya2VyLT5vbmVycm9yKCkpIHsKKyAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0
ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+b25lcnJv
cigpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5l
ci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7CisgICAg
fQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0FDQ0VTU09SX1NFVFRFUihXb3Jr
ZXJPbmVycm9yKSB7CisgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5vbmVycm9yLl9zZXQiKTsK
KyAgICBXb3JrZXIqIHdvcmtlciA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhD
bGFzc0luZGV4OjpXT1JLRVIsIGluZm8uSG9sZGVyKCkpOworICAgIFY4T2JqZWN0RXZlbnRMaXN0
ZW5lciogb2xkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih3
b3JrZXItPm9uZXJyb3IoKSk7CisgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgeworICAgICAgICBp
ZiAob2xkTGlzdGVuZXIpIHsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRW
OExpc3RlbmVyID0gb2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAgICAgICAg
ICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4
Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gQ2xlYXIgdGhlIGxpc3RlbmVyLgorICAgICAgICB3b3JrZXItPnNldE9uZXJyb3IoMCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh3
b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgICAgIGlmICghcHJveHkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNl
KTsKKyAgICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICBpZiAob2xkTGlzdGVuZXIp
IHsKKyAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9
IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICAgICAgICAgIHJlbW92
ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhDdXN0b206
OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHdvcmtlci0+c2V0T25lcnJvcihsaXN0ZW5lcik7CisgICAgICAgICAgICBjcmVhdGVIaWRkZW5E
ZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RD
YWNoZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKFdv
cmtlckFkZEV2ZW50TGlzdGVuZXIpIHsKKyAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLmFkZEV2
ZW50TGlzdGVuZXIoKSIpOworICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6VG9OYXRpdmVP
YmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgYXJncy5Ib2xkZXIoKSk7CisKKyAg
ICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHdvcmtlci0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKKyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZp
bmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UpOworICAgIGlmIChs
aXN0ZW5lcikgeworICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKKyAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7Cisg
ICAgICAgIHdvcmtlci0+YWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVy
ZSk7CisKKyAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdz
WzFdLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKKyAgICB9CisgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlclJlbW92
ZUV2ZW50TGlzdGVuZXIpIHsKKyAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLnJlbW92ZUV2ZW50
TGlzdGVuZXIoKSIpOworICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6VG9OYXRpdmVPYmpl
Y3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBW
OFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKKyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOyAvLyBQcm9iYWJseSBsZWFrZWQuCisKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIgPSBwcm94eS0+RmluZE9iamVjdEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UpOwor
CisgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3Ry
aW5nKGFyZ3NbMF0pOworICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFu
VmFsdWUoKTsKKyAgICAgICAgd29ya2VyLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3Rl
bmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKKworICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5
KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5k
ZXgpOworICAgIH0KKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQo=
</data>
<flag name="review"
          id="14663"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29583</attachid>
            <date>2009-04-17 11:04:32 -0700</date>
            <delta_ts>2009-04-17 14:34:58 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>25170_2</filename>
            <type>text/plain</type>
            <size>19091</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2IyZDRjOS4uNjc3OWFjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0wNC0xMyAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MTcw
CisgICAgICAgIFVwc3RyZWFtIFY4V29ya2VyQ3VzdG9tLmNwcCBhbmQgVjhXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcCBmb3IgVjggYmluZGluZ3MuCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcDogQWRkZWQuCisKIDIw
MDktMDQtMTMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5kZXggNDVlMzYyZC4uNGI5YzhkOSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNw
cApAQCAtNDA2LDcgKzQwNiw3IEBAIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHk6OmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuCiAgICAgcmV0dXJu
IG5ld0xpc3RlbmVyLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2
ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHkp
CitQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
OjpmaW5kT3JDcmVhdGVFdmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwg
Ym9vbCBpc0lubGluZSwgYm9vbCBmaW5kT25seSkKIHsKICAgICByZXR1cm4gZmluZE9yQ3JlYXRl
RXZlbnRMaXN0ZW5lckhlbHBlcihvYmplY3QsIGlzSW5saW5lLCBmaW5kT25seSwgZmFsc2UpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmgKaW5kZXggZTU3MzEyYS4uZGFkMTkxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oCkBAIC01Niw3ICs1Niw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgLy8gRklYTUU6IGZvbGxvd2luZyBmdW5jdGlvbiBzc2hvdWxk
IGhhdmUgY2FtZWxDYXNlZCBuYW1lcyBvbmNlIFY4IGNvZGUtZ2VuZXJhdGluZyBzY3JpcHQgaXMg
bWlncmF0ZWQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gR2V0Q29udGV4dCgpIHsg
cmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOyB9CiAgICAgICAg
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IEdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBGaW5kT3JD
cmVhdGVFdmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IGxpc3RlbmVyLCBib29sIGlz
SW5saW5lLCBib29sIGZpbmRPbmx5KTsKICAgICAgICAgdm9pZCBSZW1vdmVFdmVudExpc3RlbmVy
KFY4RXZlbnRMaXN0ZW5lciopOwogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogaW1w
bCk7CkBAIC02NSw2ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0VG9WOE9iamVjdChXb3JrZXJDb250
ZXh0KiB3Yyk7CiAKICAgICAgICAgLy8gRmluZHMvY3JlYXRlcyBldmVudCBsaXN0ZW5lciB3cmFw
cGVycy4KKyAgICAgICAgUGFzc1JlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUV2
ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUs
IGJvb2wgZmluZE9ubHkpOwogICAgICAgICBQYXNzUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gZmlu
ZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3Qs
IGJvb2wgaXNJbmxpbmUsIGJvb2wgZmluZE9ubHkpOwogCiAgICAgICAgIC8vIFRyYWNrIHRoZSBl
dmVudCBzbyB0aGF0IHdlIGNhbiBkZXRhY2ggaXQgZnJvbSB0aGUgSlMgd3JhcHBlciB3aGVuIGEg
d29ya2VyCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNv
bnRleHRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250
ZXh0Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNDRmOGZi
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcApAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiV29ya2Vy
Q29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FDQ0VTU09SX0dFVFRFUihXb3Jr
ZXJDb250ZXh0U2VsZikKK3sKKyAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5zZWxm
Ll9nZXQiKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhQcm94eTo6VG9O
YXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JLRVJDT05URVhULCBp
bmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpX
b3JrZXJDb250ZXh0VG9WOE9iamVjdCh3b3JrZXJDb250ZXh0KTsKK30KKworQUNDRVNTT1JfR0VU
VEVSKFdvcmtlckNvbnRleHRPbm1lc3NhZ2UpCit7CisgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtl
ckNvbnRleHQub25tZXNzYWdlLl9nZXQiKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250
ZXh0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4
OjpXT1JLRVJDT05URVhULCBpbmZvLkhvbGRlcigpKTsKKyAgICBpZiAod29ya2VyQ29udGV4dC0+
b25tZXNzYWdlKCkpIHsKKyAgICAgICAgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKj4od29ya2Vy
Q29udGV4dC0+b25tZXNzYWdlKCkpOworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhM
aXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICByZXR1cm4g
djhMaXN0ZW5lcjsKKyAgICB9CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQUND
RVNTT1JfU0VUVEVSKFdvcmtlckNvbnRleHRPbm1lc3NhZ2UpCit7CisgICAgSU5DX1NUQVRTKEwi
RE9NLldvcmtlckNvbnRleHQub25tZXNzYWdlLl9zZXQiKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3
b3JrZXJDb250ZXh0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhD
bGFzc0luZGV4OjpXT1JLRVJDT05URVhULCBpbmZvLkhvbGRlcigpKTsKKyAgICBWOFdvcmtlckNv
bnRleHRFdmVudExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4V29ya2VyQ29u
dGV4dEV2ZW50TGlzdGVuZXIqPih3b3JrZXJDb250ZXh0LT5vbm1lc3NhZ2UoKSk7CisgICAgaWYg
KHZhbHVlLT5Jc051bGwoKSkgeworICAgICAgICBpZiAod29ya2VyQ29udGV4dC0+b25tZXNzYWdl
KCkpIHsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRWOExpc3RlbmVyID0g
b2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAgICAgICAgICByZW1vdmVIaWRk
ZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprV29y
a2VyQ29udGV4dFJlcXVlc3RDYWNoZUluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENs
ZWFyIHRoZSBsaXN0ZW5lci4KKyAgICAgICAgd29ya2VyQ29udGV4dC0+c2V0T25tZXNzYWdlKDAp
OworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gd29ya2VyQ29udGV4dC0+c2NyaXB0KCktPnByb3h5KCktPmZpbmRPckNyZWF0ZUV2ZW50TGlz
dGVuZXIodjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSwgZmFsc2UsIGZhbHNlKTsK
KyAgICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICBpZiAob2xkTGlzdGVuZXIpIHsK
KyAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2xkVjhMaXN0ZW5lciA9IG9s
ZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICAgICAgICAgIHJlbW92ZUhp
ZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgb2xkVjhMaXN0ZW5lciwgVjhDdXN0b206OmtX
b3JrZXJDb250ZXh0UmVxdWVzdENhY2hlSW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB3b3JrZXJDb250ZXh0LT5zZXRPbm1lc3NhZ2UobGlzdGVuZXIpOworICAgICAgICAgICAg
Y3JlYXRlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtX
b3JrZXJDb250ZXh0UmVxdWVzdENhY2hlSW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gU2V0VGltZW91dE9ySW50ZXJ2YWwoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncywgYm9vbCBzaW5nbGVTaG90KQoreworICAgIFdvcmtlckNvbnRleHQqIHdvcmtl
ckNvbnRleHQgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNz
SW5kZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOworCisgICAgaW50IGRlbGF5ID0g
dG9JbnQzMihhcmdzWzFdKTsKKworICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gQ2xlYXJUaW1lb3V0
T3JJbnRlcnZhbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0
PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOworCisgICAgaW50
IHRpbWVySWQgPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIHdvcmtlckNvbnRleHQtPnJlbW92ZVRp
bWVvdXQodGltZXJJZCk7CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxM
QkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dEltcG9ydFNjcmlwdHMpCit7CisgICAgSU5DX1NU
QVRTKEwiRE9NLldvcmtlckNvbnRleHQuaW1wb3J0U2NyaXB0cygpIik7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5D
X0RFQ0woV29ya2VyQ29udGV4dFNldFRpbWVvdXQpCit7CisgICAgSU5DX1NUQVRTKEwiRE9NLldv
cmtlckNvbnRleHQuc2V0VGltZW91dCgpIik7CisgICAgcmV0dXJuIFNldFRpbWVvdXRPckludGVy
dmFsKGFyZ3MsIHRydWUpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dENs
ZWFyVGltZW91dCkgeworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJDb250ZXh0LmNsZWFyVGlt
ZW91dCgpIik7CisgICAgcmV0dXJuIENsZWFyVGltZW91dE9ySW50ZXJ2YWwoYXJncyk7Cit9CisK
K0NBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb250ZXh0U2V0SW50ZXJ2YWwpIHsKKyAgICBJTkNf
U1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5zZXRJbnRlcnZhbCgpIik7CisgICAgcmV0dXJuIFNl
dFRpbWVvdXRPckludGVydmFsKGFyZ3MsIGZhbHNlKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNM
KFdvcmtlckNvbnRleHRDbGVhckludGVydmFsKQoreworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3Jr
ZXJDb250ZXh0LmNsZWFySW50ZXJ2YWwoKSIpOworICAgIHJldHVybiBDbGVhclRpbWVvdXRPcklu
dGVydmFsKGFyZ3MpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dEFkZEV2
ZW50TGlzdGVuZXIpCit7CisgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQuYWRkRXZl
bnRMaXN0ZW5lcigpIik7CisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4UHJv
eHk6OlRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09O
VEVYVCwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBSZWZQdHI8VjhFdmVudExpc3RlbmVyPiBsaXN0
ZW5lciA9IHdvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5wcm94eSgpLT5maW5kT3JDcmVhdGVFdmVu
dExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSwgZmFsc2UsIGZh
bHNlKTsKKworICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2Vi
Q29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+
Qm9vbGVhblZhbHVlKCk7CisgICAgICAgIHdvcmtlckNvbnRleHQtPmFkZEV2ZW50TGlzdGVuZXIo
dHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOworCisgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVu
ZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtXb3JrZXJDb250ZXh0UmVx
dWVzdENhY2hlSW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQor
CitDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dFJlbW92ZUV2ZW50TGlzdGVuZXIpCit7
CisgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigp
Iik7CisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4UHJveHk6OlRvTmF0aXZl
T2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgYXJncy5I
b2xkZXIoKSk7CisgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IHdvcmtl
ckNvbnRleHQtPnNjcmlwdCgpLT5wcm94eSgpOworCisgICAgUmVmUHRyPFY4RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBwcm94eS0+ZmluZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8
djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSksIGZhbHNlLCB0cnVlKTsKKworICAgIGlmIChsaXN0
ZW5lcikgeworICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsK
KyAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CisgICAg
ICAgIHdvcmtlckNvbnRleHQtPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0
KCksIHVzZUNhcHR1cmUpOworCisgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5I
b2xkZXIoKSwgYXJnc1sxXSwgVjhDdXN0b206OmtXb3JrZXJDb250ZXh0UmVxdWVzdENhY2hlSW5k
ZXgpOworICAgIH0KKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAuLmZhY2E5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlci5o
IgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1
ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUg
IldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0NBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb25zdHJ1Y3RvcikKK3sKKyAgICBJTkNfU1RBVFMo
TCJET00uV29ya2VyLkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIVdvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6aXNXZWJXb3JrZXJzRW5hYmxlZCgpKSB7CisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJXb3JrZXIgaXMgbm90IGVuYWJsZWQuIiwgVjhQcm94eTo6U1lOVEFYX0VSUk9SKTsK
KyAgICB9CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpIHsKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBh
cyBhIGZ1bmN0aW9uLiIpOworICAgIH0KKworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDApIHsK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94
eTo6U1lOVEFYX0VSUk9SKTsKKyAgICB9CisKKyAgICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2g7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBzY3JpcHRVcmwgPSBhcmdzWzBdLT5Ub1N0cmluZygp
OworICAgIGlmICh0cnlDYXRjaC5IYXNDYXVnaHQoKSkgeworICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcih0cnlDYXRjaC5FeGNlcHRpb24oKSk7CisgICAgfQorICAgIGlmIChzY3JpcHRVcmwuSXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgLy8gR2V0IHRo
ZSBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCA9IDA7CisgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSA9IFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsKKyAgICBpZiAocHJveHkpCisg
ICAgICAgIGNvbnRleHQgPSBwcm94eS0+d29ya2VyQ29udGV4dCgpOworICAgIGVsc2UgeworICAg
ICAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKCk7CisgICAgICAgIGlm
ICghZnJhbWUpCisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAgICBj
b250ZXh0ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIHRoZSB3
b3JrZXIgb2JqZWN0LgorICAgIC8vIE5vdGU6IGl0J3MgT0sgdG8gbGV0IHRoaXMgUmVmUHRyIGdv
IG91dCBvZiBzY29wZSBiZWNhdXNlIHdlIGFsc28gY2FsbCBTZXRET01XcmFwcGVyKCksIHdoaWNo
IGVmZmVjdGl2ZWx5IGhvbGRzIGEgcmVmZXJlbmNlIHRvIG9iai4KKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBSZWZQdHI8V29ya2VyPiBvYmogPSBXb3JrZXI6OmNyZWF0ZSh0b1dlYkNv
cmVTdHJpbmcoc2NyaXB0VXJsKSwgY29udGV4dCwgZWMpOworCisgICAgLy8gU2V0dXAgdGhlIHN0
YW5kYXJkIHdyYXBwZXIgb2JqZWN0IGludGVybmFsIGZpZWxkcy4KKyAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXJPYmplY3QgPSBhcmdzLkhvbGRlcigpOworICAgIFY4UHJveHk6OlNl
dERPTVdyYXBwZXIod3JhcHBlck9iamVjdCwgVjhDbGFzc0luZGV4OjpXT1JLRVIsIG9iai5nZXQo
KSk7CisKKyAgICBvYmotPnJlZigpOworICAgIFY4UHJveHk6OlNldEpTV3JhcHBlckZvckFjdGl2
ZURPTU9iamVjdChvYmouZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3Jh
cHBlck9iamVjdCkpOworCisgICAgcmV0dXJuIHdyYXBwZXJPYmplY3Q7Cit9CisKK0FDQ0VTU09S
X0dFVFRFUihXb3JrZXJPbm1lc3NhZ2UpCit7CisgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5v
bm1lc3NhZ2UuX2dldCIpOworICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6VG9OYXRpdmVP
YmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7CisgICAg
aWYgKHdvcmtlci0+b25tZXNzYWdlKCkpIHsKKyAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+
b25tZXNzYWdlKCkpOworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9
IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICByZXR1cm4gdjhMaXN0ZW5l
cjsKKyAgICB9CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQUNDRVNTT1JfU0VU
VEVSKFdvcmtlck9ubWVzc2FnZSkKK3sKKyAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLm9ubWVz
c2FnZS5fc2V0Iik7CisgICAgV29ya2VyKiB3b3JrZXIgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVj
dDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBpbmZvLkhvbGRlcigpKTsKKyAgICBWOE9i
amVjdEV2ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVu
dExpc3RlbmVyKj4od29ya2VyLT5vbm1lc3NhZ2UoKSk7CisgICAgaWYgKHZhbHVlLT5Jc051bGwo
KSkgeworICAgICAgICBpZiAob2xkTGlzdGVuZXIpIHsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBvbGRWOExpc3RlbmVyID0gb2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0
KCk7CisgICAgICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9s
ZFY4TGlzdGVuZXIsIFY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgorICAgICAgICB3b3JrZXItPnNl
dE9ubWVzc2FnZSgwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4
UHJveHk6OnJldHJpZXZlKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAg
ICAgaWYgKCFwcm94eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0
ZW5lcih2YWx1ZSwgZmFsc2UpOworICAgICAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAg
IGlmIChvbGRMaXN0ZW5lcikgeworICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiBvbGRWOExpc3RlbmVyID0gb2xkTGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAg
ICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExp
c3RlbmVyLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgd29ya2VyLT5zZXRPbm1lc3NhZ2UobGlzdGVuZXIpOworICAgICAg
ICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0
b206OmtXb3JrZXJSZXF1ZXN0Q2FjaGVJbmRleCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0FD
Q0VTU09SX0dFVFRFUihXb3JrZXJPbmVycm9yKQoreworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3Jr
ZXIub25lcnJvci5fZ2V0Iik7CisgICAgV29ya2VyKiB3b3JrZXIgPSBWOFByb3h5OjpUb05hdGl2
ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBpbmZvLkhvbGRlcigpKTsKKyAg
ICBpZiAod29ya2VyLT5vbmVycm9yKCkpIHsKKyAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+
b25lcnJvcigpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBs
aXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7
CisgICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0FDQ0VTU09SX1NFVFRF
UihXb3JrZXJPbmVycm9yKQoreworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXIub25lcnJvci5f
c2V0Iik7CisgICAgV29ya2VyKiB3b3JrZXIgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxXb3Jr
ZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBpbmZvLkhvbGRlcigpKTsKKyAgICBWOE9iamVjdEV2
ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3Rl
bmVyKj4od29ya2VyLT5vbmVycm9yKCkpOworICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKKyAg
ICAgICAgaWYgKG9sZExpc3RlbmVyKSB7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gb2xkVjhMaXN0ZW5lciA9IG9sZExpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAg
ICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCBvbGRWOExpc3Rl
bmVyLCBWOEN1c3RvbTo6a1dvcmtlclJlcXVlc3RDYWNoZUluZGV4KTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KKyAgICAgICAgd29ya2VyLT5zZXRPbmVycm9y
KDApOworICAgIH0gZWxzZSB7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0
cmlldmUod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICBpZiAoIXBy
b3h5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVy
PiBsaXN0ZW5lciA9IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVl
LCBmYWxzZSk7CisgICAgICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICAgICAgaWYgKG9sZExp
c3RlbmVyKSB7CisgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9sZFY4TGlz
dGVuZXIgPSBvbGRMaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgICAgICAg
ICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIG9sZFY4TGlzdGVuZXIsIFY4
Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB3b3JrZXItPnNldE9uZXJyb3IobGlzdGVuZXIpOworICAgICAgICAgICAgY3JlYXRl
SGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtXb3JrZXJS
ZXF1ZXN0Q2FjaGVJbmRleCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NBTExCQUNLX0ZVTkNf
REVDTChXb3JrZXJBZGRFdmVudExpc3RlbmVyKQoreworICAgIElOQ19TVEFUUyhMIkRPTS5Xb3Jr
ZXIuYWRkRXZlbnRMaXN0ZW5lcigpIik7CisgICAgV29ya2VyKiB3b3JrZXIgPSBWOFByb3h5OjpU
b05hdGl2ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBhcmdzLkhvbGRlcigp
KTsKKworICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUod29ya2VyLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBw
cm94eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcihhcmdzWzFdLCBmYWxzZSk7Cisg
ICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOworICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT5Cb29sZWFuVmFs
dWUoKTsKKyAgICAgICAgd29ya2VyLT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1
c2VDYXB0dXJlKTsKKworICAgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVy
KCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprV29ya2VyUmVxdWVzdENhY2hlSW5kZXgpOworICAgIH0K
KyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woV29y
a2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcikKK3sKKyAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLnJl
bW92ZUV2ZW50TGlzdGVuZXIoKSIpOworICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6VG9O
YXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgYXJncy5Ib2xkZXIoKSk7
CisKKyAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHdvcmtlci0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOyAvLyBQcm9iYWJseSBsZWFrZWQuCisKKyAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+RmluZE9iamVjdEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwg
ZmFsc2UpOworCisgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgIFN0cmluZyB0eXBlID0gdG9X
ZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgICAgICBib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJd
LT5Cb29sZWFuVmFsdWUoKTsKKyAgICAgICAgd29ya2VyLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5
cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKKworICAgICAgICByZW1vdmVIaWRkZW5E
ZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprV29ya2VyUmVxdWVz
dENhY2hlSW5kZXgpOworICAgIH0KKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQo=
</data>
<flag name="review"
          id="14767"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>