<?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>16545</bug_id>
          
          <creation_ts>2007-12-20 17:19:49 -0800</creation_ts>
          <short_desc>KJS::Bindings::Instance type conversions are not safe if multiple language bindings are used</short_desc>
          <delta_ts>2010-06-11 17:02:32 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>35394</dup_id>
          
          <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="Michael Goddard">michael.goddard</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>64896</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Goddard">michael.goddard</who>
    <bug_when>2007-12-20 17:19:49 -0800</bug_when>
    <thetext>If multiple language bindings (Qt, ObjC, JNI etc) are used at the same time, then there will be RuntimeObjectImps with KJS::Bindings::Instance * that are of multiple types (e.g. CInstance, QtInstance, JavaInstance).  

The type conversion code (JSObject to native object) always assumes that any RuntimeObjectImp objects are of the same language binding as the conversion code and can downcast the Instance* to the wrong type, possibly causing crashes and memory corruption.  For example, binding a Qt object to &quot;foo&quot;, a Java object to &quot;bar&quot;, and calling a method like &quot;bar.method(foo)&quot; would cast the QtInstance* for foo to a JavaInstance*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64897</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Goddard">michael.goddard</who>
    <bug_when>2007-12-20 17:23:18 -0800</bug_when>
    <thetext>I&apos;ve not actually tested this, however, but it is apparent from code inspection...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64898</commentid>
    <comment_count>2</comment_count>
      <attachid>18021</attachid>
    <who name="Michael Goddard">michael.goddard</who>
    <bug_when>2007-12-20 17:26:00 -0800</bug_when>
    <thetext>Created attachment 18021
Concept patch

Concept patch for this issue.  Qt changes are missing, because I&apos;m in the process of updating them separately.  I don&apos;t believe the original Qt code had the conversion code, however.

I&apos;ve not compiled the JNI or ObjC changes either - I lack the platform :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65973</commentid>
    <comment_count>3</comment_count>
      <attachid>18231</attachid>
    <who name="Michael Goddard">michael.goddard</who>
    <bug_when>2008-01-01 21:09:39 -0800</bug_when>
    <thetext>Created attachment 18231
Slightly different patch - don&apos;t bother returning Instance* 

For simpler code, don&apos;t return the Instance* when all anyone ever does with it is to return the native void* that it wrapped.  This does add a void* member to Instance, but this is useful for more than just this purpose (I have a patch for caching JSObject/Instance * for the same native object*, for example).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65976</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-01-01 21:56:14 -0800</bug_when>
    <thetext>This patch is challenging to review because it doesn&apos;t include a test to verify its correctness. The bindings code is fairly brittle -- should we really be making changes like this without a measurable benefit? Does the Qt port need this for something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65991</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Goddard">michael.goddard</who>
    <bug_when>2008-01-01 22:17:37 -0800</bug_when>
    <thetext>Mostly this patch is for theoretical safety (in the case where somebody adds both JNI/C objects and Qt objects to a page, and calls one with the other).  I do have some testcases for the Qt bindings, but they aren&apos;t really changed by this patch.

We can leave this issue for now, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66050</commentid>
    <comment_count>6</comment_count>
      <attachid>18231</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-02 10:57:36 -0800</bug_when>
    <thetext>Comment on attachment 18231
Slightly different patch - don&apos;t bother returning Instance* 

Looks good. Thanks for tackling this.

We really need a way to test this! We require tests that demonstrate bugs when we fix them. Let figure out a way to come up with a test case.

The additional void* pointer is unnecessary. I agree that we need to check the binding language, but this particular idiom, moving the pointers up into the shared base class, doesn&apos;t seem good to me. I don&apos;t think it really makes things all that much simpler. Here&apos;s what I suggest:

+        NPObject* instance = static_cast&lt;NPObject *&gt;(Instance::extractNativeInstanceFromObject(object, Instance::CLanguage));

Lines of code like the above, should be simply:

    NPObject* instance = getNPObject(object);

We can write the function getNPObject like this:

    static Instance* getInstance(JSObject* object, BindingLanguage language)
    {
        if (!object)
            return 0;
        if (!object-&gt;inherits(&amp;RuntimeObjectImp::info))
            return 0;
        Instance* instance = static_cast&lt;RuntimeObjectImp*&gt;(object);
        if (instance-&gt;bindingLanguage() != language)
            return 0;
        return instance;
    }

    static CInstance getCInstance(JSObject* object)
    {
        return static_cast&lt;CInstance&gt;(getInstance(object, CLanguage));
    }

    static NPObject* getNPObject(JSObject* object)
    {
        CInstance* instance = getCInstance(object);
        if (!instance)
            return 0;
        return instance-&gt;getObject();
    }

We can put these functions wherever we think is appropriate. They can be static member functions or free functions or whatever. The functions that have to be written per-language are very simple -- boilerplate that&apos;s only a couple lines long. If we really thought it necessary we could even make them use templates so we don&apos;t have to write them multiple times. But I see no real benefit to adding an additional field storing a redundant copy of the binding object pointer.

Smaller comments that may be obviated by the above:

-    : Instance(rootObject)
+    : Instance((void*) o, rootObject)

-    : Instance(rootObject)
+    : Instance((void*) instance, rootObject)

-    : Instance(rootObject),
+    : Instance((void*) o, rootObject),

The type void* is a sort of &quot;universal recipient&quot;, so there&apos;s no need to typecast at sites like these.

+/*!
+   If the supplied \a object is a runtime object for a native object of the specified
+   \a instanceLanguage, return the corresponding native object pointer as a void*.  If the \a object is not
+   a runtime object, or is not of the specified \a instanceLanguage, returns 0.
+*/

We don&apos;t use this syntax for comments. I assume it&apos;s Doxygen or something like that. It doesn&apos;t make sense to have this one comment with a different formatting and the \a characters in it in a project where none of the other comments do. Unless we have a plan of doing this sort of thing going forward across the project.

+    static void* extractNativeInstanceFromObject(JSObject* object, BindingLanguage instanceLanguage);

In declarations like this, we omit the argument names if their types make them unambiguous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237159</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-11 17:02:32 -0700</bug_when>
    <thetext>This was rediscovered later, and fixed in a different way.

*** This bug has been marked as a duplicate of bug 35394 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18021</attachid>
            <date>2007-12-20 17:26:00 -0800</date>
            <delta_ts>2008-01-01 21:09:39 -0800</delta_ts>
            <desc>Concept patch</desc>
            <filename>safe_extraction_of_instances.diff</filename>
            <type>text/plain</type>
            <size>12359</size>
            <attacher name="Michael Goddard">michael.goddard</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0YW5jZS5oIGIvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX2luc3RhbmNlLmgKaW5kZXggYzAxMTkxMS4uOTllYTY2
MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX2luc3RhbmNlLmgKKysr
IGIvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX2luc3RhbmNlLmgKQEAgLTYzLDggKzYzLDEw
IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlICpib29sZWFuVmFsdWUoKSBjb25zdDsKICAgICAKICAg
ICBOUE9iamVjdCAqZ2V0T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gX29iamVjdDsgfQogCisgICAg
dmlydHVhbCBCaW5kaW5nTGFuZ3VhZ2UgYmluZGluZ0xhbmd1YWdlKCkgY29uc3Qge3JldHVybiBD
TGFuZ3VhZ2U7fQorCiBwcml2YXRlOgogICAgIG11dGFibGUgQ0NsYXNzICpfY2xhc3M7CiAgICAg
TlBPYmplY3QgKl9vYmplY3Q7CiB9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvYy9jX3V0aWxpdHkuY3BwIGIvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHku
Y3BwCmluZGV4IGMyNjg3MTMuLjBhMTZjMTIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL2MvY191dGlsaXR5LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2Nf
dXRpbGl0eS5jcHAKQEAgLTExNSwxNiArMTE1LDEzIEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZh
cmlhbnQoRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVlICp2YWx1ZSwgTlBWYXJpYW50ICpyZXN1bHQp
CiAgICAgfSBlbHNlIGlmICh0eXBlID09IE51bGxUeXBlKSB7CiAgICAgICAgIE5VTExfVE9fTlBW
QVJJQU5UKCpyZXN1bHQpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBPYmplY3RUeXBlKSB7CiAg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZhbHVlKTsK
LSAgICAgICAgaWYgKG9iamVjdC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmplY3RJbXA6Omlu
Zm8pIHsKLSAgICAgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9IHN0YXRpY19jYXN0PFJ1
bnRpbWVPYmplY3RJbXAgKj4odmFsdWUpOwotICAgICAgICAgICAgQ0luc3RhbmNlKiBpbnN0YW5j
ZSA9IHN0YXRpY19jYXN0PENJbnN0YW5jZSo+KGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsK
LSAgICAgICAgICAgIGlmIChpbnN0YW5jZSkgewotICAgICAgICAgICAgICAgIE5QT2JqZWN0KiBv
YmogPSBpbnN0YW5jZS0+Z2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgX05QTl9SZXRhaW5P
YmplY3Qob2JqKTsKLSAgICAgICAgICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJQU5UKG9iaiwgKnJl
c3VsdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIENJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0
aWNfY2FzdDxDSW5zdGFuY2UgKj4oSW5zdGFuY2U6OmV4dHJhY3RJbnN0YW5jZUZyb21PYmplY3Qo
b2JqZWN0LCBJbnN0YW5jZTo6Q0xhbmd1YWdlKSk7CisgICAgICAgIGlmIChpbnN0YW5jZSkgewor
ICAgICAgICAgICAgTlBPYmplY3QqIG9iaiA9IGluc3RhbmNlLT5nZXRPYmplY3QoKTsKKyAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KG9iaik7CisgICAgICAgICAgICBPQkpFQ1RfVE9fTlBW
QVJJQU5UKG9iaiwgKnJlc3VsdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRl
cnByZXRlciogb3JpZ2luSW50ZXJwcmV0ZXIgPSBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKTsK
ICAgICAgICAgICAgIFJvb3RPYmplY3QqIG9yaWdpblJvb3RPYmplY3QgPSBmaW5kUm9vdE9iamVj
dChvcmlnaW5JbnRlcnByZXRlcik7CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL2puaS9qbmlfaW5zdGFuY2UuaCBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlf
aW5zdGFuY2UuaAppbmRleCA2YzBhM2IwLi5jODY5MDI4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5oCkBAIC04NSw4ICs4NSwxMCBAQCBwdWJsaWM6CiAgICAg
SlNWYWx1ZSAqc3RyaW5nVmFsdWUoKSBjb25zdDsKICAgICBKU1ZhbHVlICpudW1iZXJWYWx1ZSgp
IGNvbnN0OwogICAgIEpTVmFsdWUgKmJvb2xlYW5WYWx1ZSgpIGNvbnN0OwogICAgICAgICAKKyAg
ICB2aXJ0dWFsIEJpbmRpbmdMYW5ndWFnZSBiaW5kaW5nTGFuZ3VhZ2UoKSBjb25zdCB7cmV0dXJu
IEphdmFMYW5ndWFnZTt9CisKIHByaXZhdGU6CiAgICAgUmVmUHRyPEpPYmplY3RXcmFwcGVyPiBf
aW5zdGFuY2U7CiAgICAgbXV0YWJsZSBKYXZhQ2xhc3MgKl9jbGFzczsKIH07CmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2pzb2JqZWN0LmNwcCBiL0phdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfanNvYmplY3QuY3BwCmluZGV4IDg4MTgwYzkuLmNmYjYy
ZmQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfanNvYmplY3Qu
Y3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfanNvYmplY3QuY3BwCkBA
IC0zOTgsMTYgKzM5OCwxMSBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Y29udmVydFZhbHVlVG9K
T2JqZWN0IChKU1ZhbHVlICp2YWx1ZSkgY29uc3QKICAgICAgICAgICAgIC8vIFdlIGVpdGhlciBo
YXZlIGEgd3JhcHBlciBhcm91bmQgYSBKYXZhIGluc3RhbmNlIG9yIGEgSmF2YVNjcmlwdAogICAg
ICAgICAgICAgLy8gb2JqZWN0LiAgSWYgd2UgaGF2ZSBhIHdyYXBwZXIgYXJvdW5kIGEgSmF2YSBp
bnN0YW5jZSwgcmV0dXJuIHRoYXQKICAgICAgICAgICAgIC8vIGluc3RhbmNlLCBvdGhlcndpc2Ug
Y3JlYXRlIGEgbmV3IEphdmEgSmF2YUpTT2JqZWN0IHdpdGggdGhlIEpTT2JqZWN0KgogICAgICAg
ICAgICAgLy8gYXMgaXQncyBuYXRpdmVIYW5kbGUuCi0gICAgICAgICAgICBpZiAoaW1wLT5jbGFz
c0luZm8oKSAmJiBzdHJjbXAoaW1wLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lLCAiUnVudGltZU9i
amVjdCIpID09IDApIHsKLSAgICAgICAgICAgICAgICBSdW50aW1lT2JqZWN0SW1wICpydW50aW1l
SW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBKYXZhSW5zdGFuY2UgKnJ1bnRpbWVJbnN0YW5jZSA9IHN0YXRpY19jYXN0PEphdmFJbnN0
YW5jZSAqPihydW50aW1lSW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOwotICAgICAgICAgICAg
ICAgIGlmICghcnVudGltZUluc3RhbmNlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIEphdmFJbnN0YW5jZSAqcnVudGltZUluc3Rh
bmNlID0gc3RhdGljX2Nhc3Q8SmF2YUluc3RhbmNlKj4oSW5zdGFuY2U6OmV4dHJhY3RJbnN0YW5j
ZUZyb21PYmplY3QoaW1wLCBJbnN0YW5jZTo6SmF2YUxhbmd1YWdlKSk7CisgICAgICAgICAgICBp
ZiAocnVudGltZUluc3RhbmNlKQogICAgICAgICAgICAgICAgIHJldHVybiBydW50aW1lSW5zdGFu
Y2UtPmphdmFJbnN0YW5jZSgpOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgbmF0aXZlSGFuZGxlID0gcHRyX3RvX2psb25nKGltcCk7CiAgICAgICAg
ICAgICAgICAgcm9vdE9iamVjdC0+Z2NQcm90ZWN0KGltcCk7CiAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3V0aWxpdHkuY3BwIGIvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV91dGlsaXR5LmNwcAppbmRleCAyZTQ5MWRhLi5i
ZjA5NTcxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3V0aWxp
dHkuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfdXRpbGl0eS5jcHAK
QEAgLTg4NywxMyArODg3LDExIEBAIGp2YWx1ZSBjb252ZXJ0VmFsdWVUb0pWYWx1ZSAoRXhlY1N0
YXRlICpleGVjLCBKU1ZhbHVlICp2YWx1ZSwgSk5JVHlwZSBfSk5JVHlwZSwKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gRmlyc3Qgc2VlIGlmIHdlIGhhdmUgYSBKYXZhIGluc3RhbmNlLgog
ICAgICAgICAgICAgaWYgKHZhbHVlLT5pc09iamVjdCgpKXsKICAgICAgICAgICAgICAgICBKU09i
amVjdCAqb2JqZWN0SW1wID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmplY3RJbXA6
OmluZm8pIHsKLSAgICAgICAgICAgICAgICAgICAgUnVudGltZU9iamVjdEltcCAqaW1wID0gc3Rh
dGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCAqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IEphdmFJbnN0YW5jZSAqaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxKYXZhSW5zdGFuY2UqPihpbXAt
PmdldEludGVybmFsSW5zdGFuY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5j
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gaW5zdGFuY2UtPmphdmFJbnN0
YW5jZSgpOworICAgICAgICAgICAgICAgIEphdmFJbnN0YW5jZSAqaW5zdGFuY2UgPSBzdGF0aWNf
Y2FzdDxKYXZhSW5zdGFuY2UqPihJbnN0YW5jZTo6ZXh0cmFjdEluc3RhbmNlRnJvbU9iamVjdChv
YmplY3RJbXAsIEluc3RhbmNlOjpKYXZhTGFuZ3VhZ2UpKTsKKyAgICAgICAgICAgICAgICBpZiAo
aW5zdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBpbnN0YW5jZS0+amF2
YUluc3RhbmNlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVBcnJheTo6aW5mbykgewogICAgICAg
ICAgICAgICAgIC8vIElucHV0IGlzIGEgSmF2YVNjcmlwdCBBcnJheSB0aGF0IHdhcyBvcmlnaW5h
bGx5IGNyZWF0ZWQgZnJvbSBhIEphdmEgQXJyYXkKICAgICAgICAgICAgICAgICAgICAgUnVudGlt
ZUFycmF5ICppbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkgKj4odmFsdWUpOwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2luc3RhbmNlLmggYi9KYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5zdGFuY2UuaAppbmRleCAxZWVmZmQ3Li5m
OTIxNTYwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5z
dGFuY2UuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5zdGFuY2Uu
aApAQCAtNjQsOCArNjQsMTAgQEAgcHVibGljOgogICAgIEpTVmFsdWUgKnN0cmluZ1ZhbHVlKCkg
Y29uc3Q7CiAgICAgSlNWYWx1ZSAqbnVtYmVyVmFsdWUoKSBjb25zdDsKICAgICBKU1ZhbHVlICpi
b29sZWFuVmFsdWUoKSBjb25zdDsKICAgICAKKyAgICB2aXJ0dWFsIEJpbmRpbmdMYW5ndWFnZSBi
aW5kaW5nTGFuZ3VhZ2UoKSBjb25zdCB7cmV0dXJuIE9iakNMYW5ndWFnZTt9CisKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPE9iamVjdFN0cnVjdFB0cj4gX2luc3RhbmNlOwogICAgIG11dGFibGUg
T2JqY0NsYXNzICpfY2xhc3M7CiAgICAgT2JqZWN0U3RydWN0UHRyIF9wb29sOwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcXQvcXRfaW5zdGFuY2UuaCBiL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL3F0L3F0X2luc3RhbmNlLmgKaW5kZXggYWE4Zjg2MC4uZjUxZGY4MSAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcXQvcXRfaW5zdGFuY2UuaAorKysgYi9K
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9xdC9xdF9pbnN0YW5jZS5oCkBAIC01OCwxNiArNTgsMTcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgSlNWYWx1ZSogaW52b2tlRGVmYXVsdE1ldGhvZCAoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRQ
cm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAKKyAgICB2aXJ0
dWFsIEJpbmRpbmdMYW5ndWFnZSBiaW5kaW5nTGFuZ3VhZ2UoKSBjb25zdCB7cmV0dXJuIFF0TGFu
Z3VhZ2U7fQorCiAgICAgSlNWYWx1ZSogc3RyaW5nVmFsdWUoKSBjb25zdDsKICAgICBKU1ZhbHVl
KiBudW1iZXJWYWx1ZSgpIGNvbnN0OwogICAgIEpTVmFsdWUqIGJvb2xlYW5WYWx1ZSgpIGNvbnN0
OwogCiAgICAgUU9iamVjdCogZ2V0T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0K
IApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5jcHAgYi9KYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmNwcAppbmRleCAyYTJmYTQ4Li5kNWIzM2MyIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmNwcApAQCAtMTIzLDggKzEyMywyNCBAQCBKU09i
amVjdCogSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoQmluZGluZ0xhbmd1YWdlIGxhbmd1
YWdlLCB2b2lkKiBuYXRpdmVJbgogICAgIEpTTG9jayBsb2NrOwogICAgIHJldHVybiBuZXcgUnVu
dGltZU9iamVjdEltcChpbnN0YW5jZSk7CiB9CiAKKy8qIQorICAgSWYgdGhlIHN1cHBsaWVkIFxh
IG9iamVjdCBpcyBhIHJ1bnRpbWUgb2JqZWN0IGZvciBhIG5hdGl2ZSBvYmplY3Qgb2YgdGhlIHNw
ZWNpZmllZAorICAgXGEgaW5zdGFuY2VMYW5ndWFnZSwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5n
IEluc3RhbmNlKi4gIElmIHRoZSBcYSBvYmplY3QgaXMgbm90CisgICBhIHJ1bnRpbWUgb2JqZWN0
LCBvciBpcyBub3Qgb2YgdGhlIHNwZWNpZmllZCBcYSBpbnN0YW5jZUxhbmd1YWdlLCByZXR1cm5z
IDAuCisqLworSW5zdGFuY2UqIEluc3RhbmNlOjpleHRyYWN0SW5zdGFuY2VGcm9tT2JqZWN0KEpT
T2JqZWN0KiBvYmplY3QsIEJpbmRpbmdMYW5ndWFnZSBpbnN0YW5jZUxhbmd1YWdlKQoreworICAg
IGlmIChvYmplY3QgJiYgb2JqZWN0LT5jbGFzc0luZm8oKSA9PSAmUnVudGltZU9iamVjdEltcDo6
aW5mbykgeworICAgICAgICBSdW50aW1lT2JqZWN0SW1wKiBpbXAgPSBzdGF0aWNfY2FzdDxSdW50
aW1lT2JqZWN0SW1wICo+KG9iamVjdCk7CisgICAgICAgIEluc3RhbmNlKiBpbnN0YW5jZSA9IGlt
cC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpOworICAgICAgICBpZiAoaW5zdGFuY2UtPmJpbmRpbmdM
YW5ndWFnZSgpID09IGluc3RhbmNlTGFuZ3VhZ2UpCisgICAgICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBSb290T2JqZWN0KiBJbnN0YW5jZTo6cm9v
dE9iamVjdCgpIGNvbnN0IAogeyAKICAgICByZXR1cm4gX3Jvb3RPYmplY3QgJiYgX3Jvb3RPYmpl
Y3QtPmlzVmFsaWQoKSA/IF9yb290T2JqZWN0LmdldCgpIDogMDsKIH0KZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWUuaCBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWUuaAppbmRleCA2ZTUyYzllLi40MzY3ZTU4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVu
dGltZS5oCkBAIC0xMDEsOCArMTAxLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgSW5z
dGFuY2UqIGNyZWF0ZUJpbmRpbmdGb3JMYW5ndWFnZUluc3RhbmNlKEJpbmRpbmdMYW5ndWFnZSwg
dm9pZCogbmF0aXZlSW5zdGFuY2UsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOwogICAgIHN0YXRp
YyBKU09iamVjdCogY3JlYXRlUnVudGltZU9iamVjdChCaW5kaW5nTGFuZ3VhZ2UsIHZvaWQqIG5h
dGl2ZUluc3RhbmNlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKIAorICAgIHN0YXRpYyBJbnN0
YW5jZSogZXh0cmFjdEluc3RhbmNlRnJvbU9iamVjdChKU09iamVjdCogb2JqZWN0LCBCaW5kaW5n
TGFuZ3VhZ2UgaW5zdGFuY2VMYW5ndWFnZSk7CisKICAgICB2b2lkIHJlZigpIHsgX3JlZkNvdW50
Kys7IH0KICAgICB2b2lkIGRlcmVmKCkgCiAgICAgeyAKICAgICAgICAgaWYgKC0tX3JlZkNvdW50
ID09IDApIApAQCAtMTM3LDggKzEzOSw5IEBAIHB1YmxpYzoKICAgICBSb290T2JqZWN0KiByb290
T2JqZWN0KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB+SW5zdGFuY2UoKTsKIAorICAgIHZp
cnR1YWwgQmluZGluZ0xhbmd1YWdlIGJpbmRpbmdMYW5ndWFnZSgpIGNvbnN0ID0gMDsKIHByb3Rl
Y3RlZDoKICAgICBSZWZQdHI8Um9vdE9iamVjdD4gX3Jvb3RPYmplY3Q7CiAgICAgdW5zaWduZWQg
X3JlZkNvdW50OwogfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3Jp
cHRPYmplY3QubW0gYi9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCmlu
ZGV4IGZmZTU1NTAuLjk2MmNiYzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9X
ZWJTY3JpcHRPYmplY3QubW0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9i
amVjdC5tbQpAQCAtNTIzLDIwICs1MjMsMTUgQEAgc3RhdGljIExpc3QgbGlzdEZyb21OU0FycmF5
KEV4ZWNTdGF0ZSAqZXhlYywgTlNBcnJheSAqYXJyYXksIFJvb3RPYmplY3QqIHJvb3RPYmoKICAg
ICAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gcm9vdE9iamVjdC0+aW50ZXJwcmV0ZXIo
KTsKICAgICAgICAgRXhlY1N0YXRlICpleGVjID0gaW50ZXJwcmV0ZXItPmdsb2JhbEV4ZWMoKTsK
ICAgICAgICAgSlNMb2NrIGxvY2s7CiAgICAgICAgIAotICAgICAgICBpZiAob2JqZWN0LT5jbGFz
c0luZm8oKSAhPSAmUnVudGltZU9iamVjdEltcDo6aW5mbykgeworICAgICAgICBPYmpDSW5zdGFu
Y2UgKmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8T2JqQ2luc3RhbmNlKj4oSW5zdGFuY2U6OmV4dHJh
Y3RJbnN0YW5jZUZyb21PYmplY3Qob2JqZWN0LCBJbnN0YW5jZTo6T2JqQ0xhbmd1YWdlKSk7Cisg
ICAgICAgIGlmICghaW5zdGFuY2UpIHsKICAgICAgICAgICAgIEpTVmFsdWUqIHJ1bnRpbWVPYmpl
Y3QgPSBvYmplY3QtPmdldChleGVjLCAiX19hcHBsZV9ydW50aW1lX29iamVjdCIpOwogICAgICAg
ICAgICAgaWYgKHJ1bnRpbWVPYmplY3QgJiYgcnVudGltZU9iamVjdC0+aXNPYmplY3QoKSkKLSAg
ICAgICAgICAgICAgICBvYmplY3QgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1wKj4ocnVu
dGltZU9iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob2JqZWN0LT5jbGFzc0luZm8o
KSA9PSAmUnVudGltZU9iamVjdEltcDo6aW5mbykgewotICAgICAgICAgICAgUnVudGltZU9iamVj
dEltcCogaW1wID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCo+KG9iamVjdCk7Ci0gICAg
ICAgICAgICBPYmpjSW5zdGFuY2UgKmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8T2JqY0luc3RhbmNl
Kj4oaW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOwotICAgICAgICAgICAgaWYgKGluc3RhbmNl
KQotICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS0+Z2V0T2JqZWN0KCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgICAgIG9iamVjdCA9IHJ1bnRpbWVPYmplY3Q7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UtPmdldE9iamVj
dCgpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0
T2JqZWN0Rm9ySlNPYmplY3Q6dG9SZWYob2JqZWN0KSBvcmlnaW5Sb290T2JqZWN0Om9yaWdpblJv
b3RPYmplY3Qgcm9vdE9iamVjdDpyb290T2JqZWN0XTsKICAgICB9CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZmEz
OWNkNi4uNDY4YmZmMiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBi
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDA3LTEyLTIwICBN
aWNoYWVsIEdvZGRhcmQgIDxtaWNoYWVsLmdvZGRhcmRAdHJvbGx0ZWNoLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgY29kZSB0byAic2Fm
ZWx5IiBleHRyYWN0IGFuIEluc3RhbmNlIGZvciBhIHNwZWNpZmljIGxhbmd1YWdlLgorICAgICAg
ICBBZGRzIGEgaGVscGVyIGZ1bmN0aW9uIEJpbmRpbmdzOjpJbnN0YW5jZSB0aGF0IGFjY2VwdHMg
YQorICAgICAgICBKU09iamVjdCogYW5kIGEgbGFuZ3VhZ2UsIGFuZCByZXR1cm4gdGhlIGhvc3Qg
aW5zdGFuY2UKKyAgICAgICAgcG9pbnRlciBpZiB0aGVyZSBpcyBvbmUuICBQcmV2aW91c2x5IHRo
ZSBjb2RlIHVzZWQgdG8gYXNzdW1lCisgICAgICAgIHRoYXQgYW55IGhvc3QgSlMgb2JqZWN0IGhh
ZCB0aGUgc2FtZSBsYW5ndWFnZSBiaW5kaW5nIGFzIHRoZQorICAgICAgICBtYW5pcHVsYXRpbmcg
Y29kZSwgd2hpY2ggY291bGQgY2F1c2UgYSBjcmFzaCBpZiB0d28gbGFuZ3VhZ2UKKyAgICAgICAg
YmluZGluZ3Mgd2VyZSB1c2VkIHNpbXVsdGFuZW91c2x5LiAgQXMgYSBzaWRlIGVmZmVjdCwKKyAg
ICAgICAgY2VudHJhbGl6ZXMgdGhlIGV4dHJhY3Rpb24gb2YgaW5zdGFuY2VzIHNvIHdlIGNhbiB1
c2UKKyAgICAgICAgZGlmZmVyZW50IEpTT2JqZWN0cyBpZiB3ZSB3YW50LgorCisgICAgICAgICog
YmluZGluZ3MvYy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAoS0pTOjpCaW5kaW5nczo6Y29udmVy
dFZhbHVlVG9OUFZhcmlhbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2puaS9qbmlfanNvYmplY3Qu
Y3BwOgorICAgICAgICAoSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QpOgorICAg
ICAgICAqIGJpbmRpbmdzL2puaS9qbmlfdXRpbGl0eS5jcHA6CisgICAgICAgIChLSlM6OkJpbmRp
bmdzOjpjb252ZXJ0VmFsdWVUb0pWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvcnVudGltZS5j
cHA6CisgICAgICAgIChLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6ZXh0cmFjdEluc3RhbmNlRnJv
bU9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvcnVudGltZS5oOgorCiAyMDA3LTEwLTE4ICBN
YWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggYmU0ZDU0ZS4uZjFiZmI3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAwNy0xMi0yMCAgTWljaGFl
bCBHb2RkYXJkICA8bWljaGFlbC5nb2RkYXJkQHRyb2xsdGVjaC5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNvZGUgdG8gInNhZmVseSIg
ZXh0cmFjdCBhbiBJbnN0YW5jZSBmb3IgYSBzcGVjaWZpYyBsYW5ndWFnZS4KKyAgICAgICAgQWRk
cyBhIGhlbHBlciBmdW5jdGlvbiBCaW5kaW5nczo6SW5zdGFuY2UgdGhhdCBhY2NlcHRzIGEKKyAg
ICAgICAgSlNPYmplY3QqIGFuZCBhIGxhbmd1YWdlLCBhbmQgcmV0dXJuIHRoZSBob3N0IGluc3Rh
bmNlCisgICAgICAgIHBvaW50ZXIgaWYgdGhlcmUgaXMgb25lLiAgUHJldmlvdXNseSB0aGUgY29k
ZSB1c2VkIHRvIGFzc3VtZQorICAgICAgICB0aGF0IGFueSBob3N0IEpTIG9iamVjdCBoYWQgdGhl
IHNhbWUgbGFuZ3VhZ2UgYmluZGluZyBhcyB0aGUKKyAgICAgICAgbWFuaXB1bGF0aW5nIGNvZGUs
IHdoaWNoIGNvdWxkIGNhdXNlIGEgY3Jhc2ggaWYgdHdvIGxhbmd1YWdlCisgICAgICAgIGJpbmRp
bmdzIHdlcmUgdXNlZCBzaW11bHRhbmVvdXNseS4gIEFzIGEgc2lkZSBlZmZlY3QsCisgICAgICAg
IGNlbnRyYWxpemVzIHRoZSBleHRyYWN0aW9uIG9mIGluc3RhbmNlcyBzbyB3ZSBjYW4gdXNlCisg
ICAgICAgIGRpZmZlcmVudCBKU09iamVjdHMgaWYgd2Ugd2FudC4KKworICAgICAgICBXQVJOSU5H
OiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICAqIGJpbmRpbmdzL29i
amMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAgICAgICAoK1tXZWJTY3JpcHRPYmplY3QgX2NvbnZl
cnRWYWx1ZVRvT2JqY1ZhbHVlOm9yaWdpblJvb3RPYmplY3Q6cm9vdE9iamVjdDpdKToKKwogMjAw
Ny0xMi0wMiAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDxob2xnZXIuZnJleXRoZXJAdHJv
bGx0ZWNoLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18231</attachid>
            <date>2008-01-01 21:09:39 -0800</date>
            <delta_ts>2010-06-10 15:22:30 -0700</delta_ts>
            <desc>Slightly different patch - don&apos;t bother returning Instance* </desc>
            <filename>extract_mark_three.patch</filename>
            <type>text/plain</type>
            <size>14391</size>
            <attacher name="Michael Goddard">michael.goddard</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBmYTM5Y2Q2Li5lMTFmYjM1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMDgtMDEtMDEgIE1pY2hhZWwgR29kZGFyZCAgPG1pY2hhZWwuZ29kZGFyZEB0cm9sbHRl
Y2guY29tPgorCUFkZCBhIG1ldGhvZCB0byBleHRyYWN0IHRoZSBuYXRpdmUgaW5zdGFuY2UgKFFP
YmplY3QsIGpvYmplY3QgZXRjKQorCWZyb20gYSBnaXZlbiBKU09iamVjdCwgaWYgaXQgZG9lcyBh
Y3R1YWxseSB3cmFwIG9uZS4gIFRoZSBleHBlY3RlZAorCWJpbmRpbmcgbGFuZ3VhZ2UgaXMgc3Vw
cGxpZWQgdG8gdGhlIG1ldGhvZCwgYW5kIHNldmVyYWwgZXhpc3RpbmcKKwl1bnNhZmUgY2FzdHMg
d2VyZSBjaGFuZ2VkIHRvIHVzZSB0aGUgbmV3IG1ldGhvZC4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2MvY19pbnN0YW5jZS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvYy9jX2luc3RhbmNlLmg6CisgICAgICAgICogYmluZGluZ3Mv
Yy9jX3V0aWxpdHkuY3BwOgorICAgICAgICAoS0pTOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9O
UFZhcmlhbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2puaS9qbmlfaW5zdGFuY2UuY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL2puaS9qbmlfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
bmkvam5pX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydFZhbHVl
VG9KT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qbmkvam5pX3V0aWxpdHkuY3BwOgorICAg
ICAgICAoS0pTOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9KVmFsdWUpOgorICAgICAgICAqIGJp
bmRpbmdzL29iamMvb2JqY19pbnN0YW5jZS5oOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvb2Jq
Y19pbnN0YW5jZS5tbToKKyAgICAgICAgKiBiaW5kaW5ncy9xdC9xdF9pbnN0YW5jZS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvcXQvcXRfaW5zdGFuY2UuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9y
dW50aW1lLmNwcDoKKyAgICAgICAgKEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpJbnN0YW5jZSk6
CisgICAgICAgIChLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6ZXh0cmFjdE5hdGl2ZUluc3RhbmNl
RnJvbU9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvcnVudGltZS5oOgorCiAyMDA3LTEwLTE4
ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbS4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19pbnN0YW5j
ZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFuY2UuY3BwCmluZGV4IDdk
NWE5ZGYuLmIwN2YwNjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19p
bnN0YW5jZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX2luc3RhbmNlLmNw
cApAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIG5hbWVzcGFjZSBCaW5kaW5ncyB7
CiAKIENJbnN0YW5jZTo6Q0luc3RhbmNlKE5QT2JqZWN0KiBvLCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3RPYmplY3QpCi0gICAgOiBJbnN0YW5jZShyb290T2JqZWN0KQorICAgIDogSW5zdGFu
Y2UoKHZvaWQqKSBvLCByb290T2JqZWN0KQogewogICAgIF9vYmplY3QgPSBfTlBOX1JldGFpbk9i
amVjdChvKTsKICAgICBfY2xhc3MgPSAwOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3MvYy9jX2luc3RhbmNlLmggYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfaW5zdGFu
Y2UuaAppbmRleCBjMDExOTExLi45OWVhNjYzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9jL2NfaW5zdGFuY2UuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2Nf
aW5zdGFuY2UuaApAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgTlBPYmplY3Qg
KmdldE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIF9vYmplY3Q7IH0KIAorICAgIHZpcnR1YWwgQmlu
ZGluZ0xhbmd1YWdlIGJpbmRpbmdMYW5ndWFnZSgpIGNvbnN0IHtyZXR1cm4gQ0xhbmd1YWdlO30K
KwogcHJpdmF0ZToKICAgICBtdXRhYmxlIENDbGFzcyAqX2NsYXNzOwogICAgIE5QT2JqZWN0ICpf
b2JqZWN0OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHku
Y3BwIGIvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHkuY3BwCmluZGV4IGMyNjg3
MTMuLjVmNjg3Y2IgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGls
aXR5LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRpbGl0eS5jcHAKQEAg
LTExNiwxNCArMTE2LDEwIEBAIHZvaWQgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoRXhlY1N0YXRl
ICpleGVjLCBKU1ZhbHVlICp2YWx1ZSwgTlBWYXJpYW50ICpyZXN1bHQpCiAgICAgICAgIE5VTExf
VE9fTlBWQVJJQU5UKCpyZXN1bHQpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSBPYmplY3RUeXBl
KSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZh
bHVlKTsKLSAgICAgICAgaWYgKG9iamVjdC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmplY3RJ
bXA6OmluZm8pIHsKLSAgICAgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9IHN0YXRpY19j
YXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4odmFsdWUpOwotICAgICAgICAgICAgQ0luc3RhbmNlKiBp
bnN0YW5jZSA9IHN0YXRpY19jYXN0PENJbnN0YW5jZSo+KGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5j
ZSgpKTsKLSAgICAgICAgICAgIGlmIChpbnN0YW5jZSkgewotICAgICAgICAgICAgICAgIE5QT2Jq
ZWN0KiBvYmogPSBpbnN0YW5jZS0+Z2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgX05QTl9S
ZXRhaW5PYmplY3Qob2JqKTsKLSAgICAgICAgICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJQU5UKG9i
aiwgKnJlc3VsdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIE5QT2JqZWN0KiBpbnN0YW5jZSA9
IHN0YXRpY19jYXN0PE5QT2JqZWN0ICo+KEluc3RhbmNlOjpleHRyYWN0TmF0aXZlSW5zdGFuY2VG
cm9tT2JqZWN0KG9iamVjdCwgSW5zdGFuY2U6OkNMYW5ndWFnZSkpOworICAgICAgICBpZiAoaW5z
dGFuY2UpIHsKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KGluc3RhbmNlKTsKKyAgICAg
ICAgICAgIE9CSkVDVF9UT19OUFZBUklBTlQoaW5zdGFuY2UsICpyZXN1bHQpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgSW50ZXJwcmV0ZXIqIG9yaWdpbkludGVycHJldGVyID0gZXhl
Yy0+ZHluYW1pY0ludGVycHJldGVyKCk7CiAgICAgICAgICAgICBSb290T2JqZWN0KiBvcmlnaW5S
b290T2JqZWN0ID0gZmluZFJvb3RPYmplY3Qob3JpZ2luSW50ZXJwcmV0ZXIpOwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5jcHAgYi9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNlLmNwcAppbmRleCBkNWQ4OWFhLi40YTk0
Njc3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNl
LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2luc3RhbmNlLmNwcApA
QCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsKIHVzaW5nIG5h
bWVzcGFjZSBLSlM7CiAKIEphdmFJbnN0YW5jZTo6SmF2YUluc3RhbmNlIChqb2JqZWN0IGluc3Rh
bmNlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QpCi0gICAgOiBJbnN0YW5jZShy
b290T2JqZWN0KQorICAgIDogSW5zdGFuY2UoKHZvaWQqKSBpbnN0YW5jZSwgcm9vdE9iamVjdCkK
IHsKICAgICBfaW5zdGFuY2UgPSBuZXcgSk9iamVjdFdyYXBwZXIgKGluc3RhbmNlKTsKICAgICBf
Y2xhc3MgPSAwOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9p
bnN0YW5jZS5oIGIvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9pbnN0YW5jZS5oCmlu
ZGV4IDZjMGEzYjAuLmM4NjkwMjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L2puaS9qbmlfaW5zdGFuY2UuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5p
X2luc3RhbmNlLmgKQEAgLTg2LDYgKzg2LDggQEAgcHVibGljOgogICAgIEpTVmFsdWUgKm51bWJl
clZhbHVlKCkgY29uc3Q7CiAgICAgSlNWYWx1ZSAqYm9vbGVhblZhbHVlKCkgY29uc3Q7CiAgICAg
ICAgIAorICAgIHZpcnR1YWwgQmluZGluZ0xhbmd1YWdlIGJpbmRpbmdMYW5ndWFnZSgpIGNvbnN0
IHtyZXR1cm4gSmF2YUxhbmd1YWdlO30KKwogcHJpdmF0ZToKICAgICBSZWZQdHI8Sk9iamVjdFdy
YXBwZXI+IF9pbnN0YW5jZTsKICAgICBtdXRhYmxlIEphdmFDbGFzcyAqX2NsYXNzOwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV9qc29iamVjdC5jcHAgYi9KYXZh
U2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2pzb2JqZWN0LmNwcAppbmRleCA4ODE4MGM5Li42
ZmMxYWQxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2pzb2Jq
ZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX2pzb2JqZWN0LmNw
cApAQCAtMzk5LDE0ICszOTksOSBAQCBqb2JqZWN0IEphdmFKU09iamVjdDo6Y29udmVydFZhbHVl
VG9KT2JqZWN0IChKU1ZhbHVlICp2YWx1ZSkgY29uc3QKICAgICAgICAgICAgIC8vIG9iamVjdC4g
IElmIHdlIGhhdmUgYSB3cmFwcGVyIGFyb3VuZCBhIEphdmEgaW5zdGFuY2UsIHJldHVybiB0aGF0
CiAgICAgICAgICAgICAvLyBpbnN0YW5jZSwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBKYXZhIEph
dmFKU09iamVjdCB3aXRoIHRoZSBKU09iamVjdCoKICAgICAgICAgICAgIC8vIGFzIGl0J3MgbmF0
aXZlSGFuZGxlLgotICAgICAgICAgICAgaWYgKGltcC0+Y2xhc3NJbmZvKCkgJiYgc3RyY21wKGlt
cC0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSwgIlJ1bnRpbWVPYmplY3QiKSA9PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgUnVudGltZU9iamVjdEltcCAqcnVudGltZUltcCA9IHN0YXRpY19jYXN0PFJ1
bnRpbWVPYmplY3RJbXAqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgSmF2YUluc3RhbmNlICpy
dW50aW1lSW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxKYXZhSW5zdGFuY2UgKj4ocnVudGltZUltcC0+
Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJ1bnRpbWVJbnN0
YW5jZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJ1bnRpbWVJbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBqb2JqZWN0ICpydW50aW1lSW5zdGFuY2UgPSBzdGF0
aWNfY2FzdDxqb2JqZWN0Kj4oSW5zdGFuY2U6OmV4dHJhY3ROYXRpdmVJbnN0YW5jZUZyb21PYmpl
Y3QoaW1wLCBJbnN0YW5jZTo6SmF2YUxhbmd1YWdlKSk7CisgICAgICAgICAgICBpZiAocnVudGlt
ZUluc3RhbmNlKQorICAgICAgICAgICAgICAgIHJldHVybiBydW50aW1lSW5zdGFuY2U7CiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBuYXRpdmVIYW5kbGUgPSBwdHJfdG9famxv
bmcoaW1wKTsKICAgICAgICAgICAgICAgICByb290T2JqZWN0LT5nY1Byb3RlY3QoaW1wKTsKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfdXRpbGl0eS5jcHAgYi9K
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9qbmkvam5pX3V0aWxpdHkuY3BwCmluZGV4IDJlNDkxZGEu
LjZmNWIyZmEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2puaS9qbmlfdXRp
bGl0eS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvam5pL2puaV91dGlsaXR5LmNw
cApAQCAtODg4LDE4ICs4ODgsMTUgQEAganZhbHVlIGNvbnZlcnRWYWx1ZVRvSlZhbHVlIChFeGVj
U3RhdGUgKmV4ZWMsIEpTVmFsdWUgKnZhbHVlLCBKTklUeXBlIF9KTklUeXBlLAogICAgICAgICAg
ICAgLy8gRmlyc3Qgc2VlIGlmIHdlIGhhdmUgYSBKYXZhIGluc3RhbmNlLgogICAgICAgICAgICAg
aWYgKHZhbHVlLT5pc09iamVjdCgpKXsKICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqZWN0
SW1wID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KG9iamVjdEltcC0+Y2xhc3NJbmZvKCkgPT0gJlJ1bnRpbWVPYmplY3RJbXA6OmluZm8pIHsKLSAg
ICAgICAgICAgICAgICAgICAgUnVudGltZU9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8UnVu
dGltZU9iamVjdEltcCAqPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIEphdmFJbnN0YW5j
ZSAqaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxKYXZhSW5zdGFuY2UqPihpbXAtPmdldEludGVybmFs
SW5zdGFuY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqb2JqZWN0ICppbnN0YW5jZSA9IHN0YXRp
Y19jYXN0PGpvYmplY3QqPihJbnN0YW5jZTo6ZXh0cmFjdE5hdGl2ZUluc3RhbmNlRnJvbU9iamVj
dChvYmplY3RJbXAsIEluc3RhbmNlOjpKYXZhTGFuZ3VhZ2UpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaW5zdGFuY2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gaW5zdGFuY2U7CiAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAob2JqZWN0SW1wLT5jbGFzc0luZm8oKSA9PSAmUnVudGlt
ZUFycmF5OjppbmZvKSB7CiAgICAgICAgICAgICAgICAgLy8gSW5wdXQgaXMgYSBKYXZhU2NyaXB0
IEFycmF5IHRoYXQgd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCBmcm9tIGEgSmF2YSBBcnJheQogICAg
ICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkgKmltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVB
cnJheSAqPih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIEphdmFBcnJheSAqYXJyYXkgPSBz
dGF0aWNfY2FzdDxKYXZhQXJyYXkqPihpbXAtPmdldENvbmNyZXRlQXJyYXkoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5sID0gYXJyYXktPmphdmFBcnJheSgpOwotICAgICAgICAgICAg
ICAgIH0gCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVj
dEltcC0+Y2xhc3NJbmZvKCkgPT0gJkFycmF5SW5zdGFuY2U6OmluZm8pIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gSW5wdXQgaXMgYSBKYXZhc2NyaXB0IEFycmF5LiBXZSBuZWVkIHRvIGNyZWF0
ZSBpdCB0byBhIEphdmEgQXJyYXkuCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gY29u
dmVydEFycmF5SW5zdGFuY2VUb0phdmFBcnJheShleGVjLCB2YWx1ZSwgamF2YUNsYXNzTmFtZSk7
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5zdGFuY2Uu
aCBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19pbnN0YW5jZS5oCmluZGV4IDFl
ZWZmZDcuLmY5MjE1NjAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMv
b2JqY19pbnN0YW5jZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19p
bnN0YW5jZS5oCkBAIC02NSw2ICs2NSw4IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlICpudW1iZXJW
YWx1ZSgpIGNvbnN0OwogICAgIEpTVmFsdWUgKmJvb2xlYW5WYWx1ZSgpIGNvbnN0OwogICAgIAor
ICAgIHZpcnR1YWwgQmluZGluZ0xhbmd1YWdlIGJpbmRpbmdMYW5ndWFnZSgpIGNvbnN0IHtyZXR1
cm4gT2JqQ0xhbmd1YWdlO30KKwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8T2JqZWN0U3RydWN0
UHRyPiBfaW5zdGFuY2U7CiAgICAgbXV0YWJsZSBPYmpjQ2xhc3MgKl9jbGFzczsKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19pbnN0YW5jZS5tbSBiL0phdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19pbnN0YW5jZS5tbQppbmRleCAyNmQwMTQ3Li45
MTViYmRhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9vYmpjL29iamNfaW5z
dGFuY2UubW0KKysrIGIvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX2luc3RhbmNl
Lm1tCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwogdXNp
bmcgbmFtZXNwYWNlIEtKUzsKIAogT2JqY0luc3RhbmNlOjpPYmpjSW5zdGFuY2UoT2JqZWN0U3Ry
dWN0UHRyIGluc3RhbmNlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QpIAotICAg
IDogSW5zdGFuY2Uocm9vdE9iamVjdCkKKyAgICA6IEluc3RhbmNlKCh2b2lkKikgaW5zdGFuY2Us
IHJvb3RPYmplY3QpCiAgICAgLCBfaW5zdGFuY2UoaW5zdGFuY2UpCiAgICAgLCBfY2xhc3MoMCkK
ICAgICAsIF9wb29sKDApCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9xdC9x
dF9pbnN0YW5jZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9xdC9xdF9pbnN0YW5jZS5j
cHAKaW5kZXggYTdkZDFiYy4uMTQwZmI1OCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3MvcXQvcXRfaW5zdGFuY2UuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3F0
L3F0X2luc3RhbmNlLmNwcApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIG5hbWVz
cGFjZSBCaW5kaW5ncyB7CiAKIFF0SW5zdGFuY2U6OlF0SW5zdGFuY2UoUU9iamVjdCogbywgUGFz
c1JlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0KQotICAgIDogSW5zdGFuY2Uocm9vdE9iamVj
dCksCisgICAgOiBJbnN0YW5jZSgodm9pZCopIG8sIHJvb3RPYmplY3QpLAogICAgICAgX2NsYXNz
KDApLAogICAgICAgX29iamVjdChvKQogewpAQCAtNDIsNyArNDIsNyBAQCBRdEluc3RhbmNlOjp+
UXRJbnN0YW5jZSgpCiB9CiAKIFF0SW5zdGFuY2U6OlF0SW5zdGFuY2UoY29uc3QgUXRJbnN0YW5j
ZSYgb3RoZXIpCi0gICAgOiBJbnN0YW5jZShvdGhlci5yb290T2JqZWN0KCkpLCBfY2xhc3MoMCks
IF9vYmplY3Qob3RoZXIuX29iamVjdCkKKyAgICA6IEluc3RhbmNlKG90aGVyLl9vYmplY3QsIG90
aGVyLnJvb3RPYmplY3QoKSksIF9jbGFzcygwKSwgX29iamVjdChvdGhlci5fb2JqZWN0KQogewog
fQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9xdC9xdF9pbnN0YW5jZS5o
IGIvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcXQvcXRfaW5zdGFuY2UuaAppbmRleCBmNWJlOWRl
Li45YWE0MjM2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9xdC9xdF9pbnN0
YW5jZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3F0L3F0X2luc3RhbmNlLmgKQEAg
LTYyLDYgKzYyLDggQEAgcHVibGljOgogICAgIAogICAgIFFPYmplY3QqIGdldE9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIF9vYmplY3Q7IH0KIAorICAgIHZpcnR1YWwgQmluZGluZ0xhbmd1YWdlIGJp
bmRpbmdMYW5ndWFnZSgpIGNvbnN0IHtyZXR1cm4gUXRMYW5ndWFnZTt9CisKIHByaXZhdGU6CiAg
ICAgbXV0YWJsZSBRdENsYXNzKiBfY2xhc3M7CiAgICAgUVBvaW50ZXI8UU9iamVjdD4gX29iamVj
dDsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWUuY3BwIGIvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5jcHAKaW5kZXggMmEyZmE0OC4uN2Y4NGE1NyAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZS5jcHAKQEAgLTU0LDkgKzU0LDEwIEBAIEFycmF5
Ojp+QXJyYXkoKQogewogfQogCi1JbnN0YW5jZTo6SW5zdGFuY2UoUGFzc1JlZlB0cjxSb290T2Jq
ZWN0PiByb290T2JqZWN0KQorSW5zdGFuY2U6Okluc3RhbmNlKHZvaWQqIG5hdGl2ZUluc3RhbmNl
LCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QpCiAgICAgOiBfcm9vdE9iamVjdChy
b290T2JqZWN0KQogICAgICwgX3JlZkNvdW50KDApCisgICAgLCBfbmF0aXZlSW5zdGFuY2UobmF0
aXZlSW5zdGFuY2UpCiB7CiAgICAgQVNTRVJUKF9yb290T2JqZWN0KTsKIH0KQEAgLTEyNCw2ICsx
MjUsMjIgQEAgSlNPYmplY3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KEJpbmRpbmdM
YW5ndWFnZSBsYW5ndWFnZSwgdm9pZCogbmF0aXZlSW4KICAgICByZXR1cm4gbmV3IFJ1bnRpbWVP
YmplY3RJbXAoaW5zdGFuY2UpOwogfQogCisvKiEKKyAgIElmIHRoZSBzdXBwbGllZCBcYSBvYmpl
Y3QgaXMgYSBydW50aW1lIG9iamVjdCBmb3IgYSBuYXRpdmUgb2JqZWN0IG9mIHRoZSBzcGVjaWZp
ZWQKKyAgIFxhIGluc3RhbmNlTGFuZ3VhZ2UsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBuYXRp
dmUgb2JqZWN0IHBvaW50ZXIgYXMgYSB2b2lkKi4gIElmIHRoZSBcYSBvYmplY3QgaXMgbm90Cisg
ICBhIHJ1bnRpbWUgb2JqZWN0LCBvciBpcyBub3Qgb2YgdGhlIHNwZWNpZmllZCBcYSBpbnN0YW5j
ZUxhbmd1YWdlLCByZXR1cm5zIDAuCisqLwordm9pZCogSW5zdGFuY2U6OmV4dHJhY3ROYXRpdmVJ
bnN0YW5jZUZyb21PYmplY3QoSlNPYmplY3QqIG9iamVjdCwgQmluZGluZ0xhbmd1YWdlIGluc3Rh
bmNlTGFuZ3VhZ2UpCit7CisgICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmNsYXNzSW5mbygpID09
ICZSdW50aW1lT2JqZWN0SW1wOjppbmZvKSB7CisgICAgICAgIFJ1bnRpbWVPYmplY3RJbXAqIGlt
cCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4ob2JqZWN0KTsKKyAgICAgICAgSW5z
dGFuY2UqIGluc3RhbmNlID0gaW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCk7CisgICAgICAgIGlm
IChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+YmluZGluZ0xhbmd1YWdlKCkgPT0gaW5zdGFuY2VMYW5n
dWFnZSkKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS0+X25hdGl2ZUluc3RhbmNlOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKwogUm9vdE9iamVjdCogSW5zdGFuY2U6OnJvb3RPYmplY3Qo
KSBjb25zdCAKIHsgCiAgICAgcmV0dXJuIF9yb290T2JqZWN0ICYmIF9yb290T2JqZWN0LT5pc1Zh
bGlkKCkgPyBfcm9vdE9iamVjdC5nZXQoKSA6IDA7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9ydW50aW1lLmggYi9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lLmgK
aW5kZXggNmU1MmM5ZS4uYzdmN2E5MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWUuaApAQCAt
OTQsNyArOTQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9IEJpbmRpbmdMYW5ndWFnZTsKIAot
ICAgIEluc3RhbmNlKFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOworICAgIEluc3RhbmNlKHZvaWQq
IG5hdGl2ZUluc3RhbmNlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKIAogICAgIHN0YXRpYyB2
b2lkIHNldERpZEV4ZWN1dGVGdW5jdGlvbihLSlNEaWRFeGVjdXRlRnVuY3Rpb25QdHIgZnVuYyk7
CiAgICAgc3RhdGljIEtKU0RpZEV4ZWN1dGVGdW5jdGlvblB0ciBkaWRFeGVjdXRlRnVuY3Rpb24o
KTsKQEAgLTEwMiw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEluc3RhbmNlKiBjcmVh
dGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShCaW5kaW5nTGFuZ3VhZ2UsIHZvaWQqIG5hdGl2
ZUluc3RhbmNlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKICAgICBzdGF0aWMgSlNPYmplY3Qq
IGNyZWF0ZVJ1bnRpbWVPYmplY3QoQmluZGluZ0xhbmd1YWdlLCB2b2lkKiBuYXRpdmVJbnN0YW5j
ZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0Pik7CiAKKyAgICBzdGF0aWMgdm9pZCogZXh0cmFjdE5h
dGl2ZUluc3RhbmNlRnJvbU9iamVjdChKU09iamVjdCogb2JqZWN0LCBCaW5kaW5nTGFuZ3VhZ2Ug
aW5zdGFuY2VMYW5ndWFnZSk7CisKICAgICB2b2lkIHJlZigpIHsgX3JlZkNvdW50Kys7IH0KICAg
ICB2b2lkIGRlcmVmKCkgCiAgICAgeyAKQEAgLTEzOCw5ICsxNDAsMTMgQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgfkluc3RhbmNlKCk7CiAKKyAgICB2aXJ0dWFsIEJpbmRpbmdMYW5ndWFn
ZSBiaW5kaW5nTGFuZ3VhZ2UoKSBjb25zdCA9IDA7CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisK
IHByb3RlY3RlZDoKICAgICBSZWZQdHI8Um9vdE9iamVjdD4gX3Jvb3RPYmplY3Q7CiAgICAgdW5z
aWduZWQgX3JlZkNvdW50OworICAgIHZvaWQqIF9uYXRpdmVJbnN0YW5jZTsKIH07CiAKIGNsYXNz
IEFycmF5IDogTm9uY29weWFibGUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggZGFlNjdkNy4uZWU2ODQyMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAw
OC0wMS0wMSAgTWljaGFlbCBHb2RkYXJkICA8bWljaGFlbC5nb2RkYXJkQHRyb2xsdGVjaC5jb20+
CisJQWRkIGEgbWV0aG9kIHRvIGV4dHJhY3QgdGhlIG5hdGl2ZSBpbnN0YW5jZSAoUU9iamVjdCwg
am9iamVjdCBldGMpCisJZnJvbSBhIGdpdmVuIEpTT2JqZWN0LCBpZiBpdCBkb2VzIGFjdHVhbGx5
IHdyYXAgb25lLiAgVGhlIGV4cGVjdGVkCisJYmluZGluZyBsYW5ndWFnZSBpcyBzdXBwbGllZCB0
byB0aGUgbWV0aG9kLCBhbmQgc2V2ZXJhbCBleGlzdGluZworCXVuc2FmZSBjYXN0cyB3ZXJlIGNo
YW5nZWQgdG8gdXNlIHRoZSBuZXcgbWV0aG9kLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hB
TkdFRAorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06CisgICAg
ICAgICgrW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6b3JpZ2luUm9v
dE9iamVjdDpyb290T2JqZWN0Ol0pOgorCiAyMDA3LTEwLTI1ICBKb24gSG9uZXljdXR0ICA8amhv
bmV5Y3V0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tIGIvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQppbmRleCBmZmU1NTUwLi4zMmYxYWE2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KQEAgLTUzMSwxMSArNTMx
LDkgQEAgc3RhdGljIExpc3QgbGlzdEZyb21OU0FycmF5KEV4ZWNTdGF0ZSAqZXhlYywgTlNBcnJh
eSAqYXJyYXksIFJvb3RPYmplY3QqIHJvb3RPYmoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChv
YmplY3QtPmNsYXNzSW5mbygpID09ICZSdW50aW1lT2JqZWN0SW1wOjppbmZvKSB7Ci0gICAgICAg
ICAgICBSdW50aW1lT2JqZWN0SW1wKiBpbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0SW1w
Kj4ob2JqZWN0KTsKLSAgICAgICAgICAgIE9iamNJbnN0YW5jZSAqaW5zdGFuY2UgPSBzdGF0aWNf
Y2FzdDxPYmpjSW5zdGFuY2UqPihpbXAtPmdldEludGVybmFsSW5zdGFuY2UoKSk7Ci0gICAgICAg
ICAgICBpZiAoaW5zdGFuY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLT5nZXRP
YmplY3QoKTsKLSAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBPYmplY3RTdHJ1
Y3RQdHIgKm9iaiA9IHN0YXRpY19jYXN0PE9iamVjdFN0cnVjdFB0cio+KEluc3RhbmNlOjpleHRy
YWN0TmF0aXZlSW5zdGFuY2VGcm9tT2JqZWN0KG9iamVjdCwgSW5zdGFuY2U6Ok9iakNMYW5ndWFn
ZSkpOworICAgICAgICAgICAgaWYgKG9iaikKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqOwog
ICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0
Rm9ySlNPYmplY3Q6dG9SZWYob2JqZWN0KSBvcmlnaW5Sb290T2JqZWN0Om9yaWdpblJvb3RPYmpl
Y3Qgcm9vdE9iamVjdDpyb290T2JqZWN0XTsK
</data>
<flag name="review"
          id="7935"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>