<?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>123380</bug_id>
          
          <creation_ts>2013-10-25 18:25:36 -0700</creation_ts>
          <short_desc>JSExport doesn&apos;t support constructors</short_desc>
          <delta_ts>2013-11-06 11:19:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>943843</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-25 18:25:36 -0700</bug_when>
    <thetext>Support for constructor-style callbacks for the Objective-C API to JSC is currently limited to Objective-C blocks. Any clients who try to call the constructor of a JSExport-ed Objective-C class are met with a type error stating that it cannot be called as a constructor.

It would be nice to expand JSExport&apos;s functionality to support this idiom. It is a natural extension to JSExport and would increase the expressiveness and simplicity in both Objective-C and JavaScript client code.

The way we&apos;ll do this is to expand the capabilities of ObjCCallbackFunction and associated classes. Instead of constructing a normal C API object for the constructor, we&apos;ll instead allocate a full-blown ObjCCallbackFunction object which can already properly handle being invoked as a constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943845</commentid>
    <comment_count>1</comment_count>
      <attachid>215235</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-25 18:34:30 -0700</bug_when>
    <thetext>Created attachment 215235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943925</commentid>
    <comment_count>2</comment_count>
      <attachid>215235</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-26 16:19:27 -0700</bug_when>
    <thetext>Comment on attachment 215235
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=215235&amp;action=review

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:167
&gt; +        // Don&apos;t copy over init* methods because we handle those specially 

Let&apos;s say &quot;init family&quot; instead of &quot;init*&quot;, since there&apos;s a term of art for it.

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:341
&gt; +    __block HashMap&lt;String, Protocol *&gt; initTable;

This is a dangerous use of __block with C++. If any of our blocks are copied, they will copy initTable, instead of sharing it:

-----
&lt;https://developer.apple.com/library/ios/documentation/cocoa/conceptual/Blocks/Articles/bxVariables.html&gt;

C++ Objects
In general you can use C++ objects within a block. Within a member function, references to member variables and functions are via an implicitly imported this pointer and thus appear mutable. There are two considerations that apply if a block is copied:

If you have a __block storage class for what would have been a stack-based C++ object, then the usual copy constructor is used.
If you use any other C++ stack-based object from within a block, it must have a const copy constructor. The C++ object is then copied using that constructor.
-----

I guess this usage ends up succeeding because forEachProtocolImplementingProtocol doesn&apos;t copy the passed-in block. I wonder what the best practice is in a case like this.

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:344
&gt; +    forEachProtocolImplementingProtocol(cls, exportProtocol, ^(Protocol *protocol){
&gt; +        forEachMethodInProtocol(protocol, YES, YES, ^(SEL selector, const char*){

Need spaces before &quot;{&quot;.

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:377
&gt; +            // FIXME: Do we need to log here?
&gt; +            NSLog(@&quot;Too many inits found, abandoning ship.&quot;);

Let&apos;s log, but try to write something that will be meaningful to an app developer: &quot;ERROR: Class @{class} exported more than one init family method through JSExport. Class @{class} will not have a callable constructor function.&quot;

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:589
&gt;      [m_invocation invoke];

This is a bug in the init case because it doesn&apos;t account for init releasing the allocated object and returning a different object in its place (or nil). You should fix this and add a test for it. c.f. &lt;https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html&gt;.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:591
&gt; +    // After calling init we need to autorelease.

This comment could say more: &quot;Balance our call to -alloc with a call to -autorelease. We have to do this after calling -init because init family methods are allowed to release the allocated object and return something else in its place.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943933</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-26 16:56:21 -0700</bug_when>
    <thetext>&gt; This is a dangerous use of __block with C++. If any of our blocks are copied, they will copy initTable, instead of sharing it:

Actually, that&apos;s only half true: block copy will copy initTable, but all blocks will point to the copy, so I guess we&apos;re cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944255</commentid>
    <comment_count>4</comment_count>
      <attachid>215345</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-28 16:45:10 -0700</bug_when>
    <thetext>Created attachment 215345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944506</commentid>
    <comment_count>5</comment_count>
      <attachid>215345</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-29 11:38:57 -0700</bug_when>
    <thetext>Comment on attachment 215345
Patch

Should we add some linked-on-or-after action here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944527</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-29 12:04:50 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 215345 [details])
&gt; Should we add some linked-on-or-after action here?

Sure. Right now it seems like the shared VM stuff uses the webkit version to decide when it was linked. I&apos;m not sure which WebKit version to use...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945014</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-30 10:56:30 -0700</bug_when>
    <thetext>Committed r158286: &lt;http://trac.webkit.org/changeset/158286&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945022</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-30 10:59:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/15147348&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945055</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-30 11:20:46 -0700</bug_when>
    <thetext>Reopening because I forgot part of the linked-on-or-after stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945061</commentid>
    <comment_count>10</comment_count>
      <attachid>215536</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-30 11:25:00 -0700</bug_when>
    <thetext>Created attachment 215536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945677</commentid>
    <comment_count>11</comment_count>
      <attachid>215536</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-10-31 13:59:41 -0700</bug_when>
    <thetext>Comment on attachment 215536
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=215536&amp;action=review

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:162
&gt; +static bool shouldSkipMethodWithName(NSString *name)

inline?

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:169
&gt; +#if OS(DARWIN)
&gt; +    if (NSVersionOfLinkTimeLibrary(&quot;JavaScriptCore&quot;) &lt; webkitFirstVersionWithInitConstructorSupport)
&gt; +        return false;
&gt; +#endif

Is this fast enough to re-evaluate every time, or should we cache it in a global?

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:173
&gt; +    // Skip over init family methods because we handle those specially 
&gt; +    // for the purposes of hooking up the constructor correctly.
&gt; +    return [name hasPrefix:@&quot;init&quot;];

Is this the correct definition for “init family”? It would return true for a property named “initials” or “initialCharacter” or “initialSize”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947785</commentid>
    <comment_count>12</comment_count>
      <attachid>216193</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-06 10:52:37 -0800</bug_when>
    <thetext>Created attachment 216193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947786</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-06 10:53:01 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=216193) [details]
&gt; Patch

I changed the patch significantly enough to warrant another review I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947796</commentid>
    <comment_count>14</comment_count>
      <attachid>216193</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-06 11:13:08 -0800</bug_when>
    <thetext>Comment on attachment 216193
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=216193&amp;action=review

r=me

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:623
&gt; +#if OS(DARWIN)

I think it&apos;s fair to assume that all ObjC OS&apos;s are DARWIN. So, you can remove this #ifdef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947798</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-06 11:19:53 -0800</bug_when>
    <thetext>Committed r158762: &lt;http://trac.webkit.org/changeset/158762&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215235</attachid>
            <date>2013-10-25 18:34:30 -0700</date>
            <delta_ts>2013-10-28 16:45:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123380-20131025183429.patch</filename>
            <type>text/plain</type>
            <size>18297</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4MDc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDEzLTEwLTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNFeHBvcnQgZG9lc24ndCBzdXBwb3J0IGNvbnN0cnVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzgwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBmb3IgY29uc3Ry
dWN0b3Itc3R5bGUgY2FsbGJhY2tzIGZvciB0aGUgT2JqZWN0aXZlLUMgQVBJIHRvIEpTQyBpcyBj
dXJyZW50bHkgbGltaXRlZCB0byAKKyAgICAgICAgT2JqZWN0aXZlLUMgYmxvY2tzLiBBbnkgY2xp
ZW50cyB3aG8gdHJ5IHRvIGNhbGwgdGhlIGNvbnN0cnVjdG9yIG9mIGEgSlNFeHBvcnQtZWQgT2Jq
ZWN0aXZlLUMgY2xhc3MgCisgICAgICAgIGFyZSBtZXQgd2l0aCBhIHR5cGUgZXJyb3Igc3RhdGlu
ZyB0aGF0IGl0IGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBjb25zdHJ1Y3Rvci4KKworICAgICAgICBJ
dCB3b3VsZCBiZSBuaWNlIHRvIGV4cGFuZCBKU0V4cG9ydCdzIGZ1bmN0aW9uYWxpdHkgdG8gc3Vw
cG9ydCB0aGlzIGlkaW9tLiBJdCBpcyBhIG5hdHVyYWwgCisgICAgICAgIGV4dGVuc2lvbiB0byBK
U0V4cG9ydCBhbmQgd291bGQgaW5jcmVhc2UgdGhlIGV4cHJlc3NpdmVuZXNzIGFuZCBzaW1wbGlj
aXR5IGluIGJvdGggT2JqZWN0aXZlLUMgYW5kIAorICAgICAgICBKYXZhU2NyaXB0IGNsaWVudCBj
b2RlLgorCisgICAgICAgIFRoZSB3YXkgd2UnbGwgZG8gdGhpcyBpcyB0byBleHBhbmQgdGhlIGNh
cGFiaWxpdGllcyBvZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBhbmQgYXNzb2NpYXRlZCBjbGFzc2Vz
LiAKKyAgICAgICAgSW5zdGVhZCBvZiBjb25zdHJ1Y3RpbmcgYSBub3JtYWwgQyBBUEkgb2JqZWN0
IGZvciB0aGUgY29uc3RydWN0b3IsIHdlJ2xsIGluc3RlYWQgYWxsb2NhdGUgYSBmdWxsLWJsb3du
IAorICAgICAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBvYmplY3Qgd2hpY2ggY2FuIGFscmVhZHkg
cHJvcGVybHkgaGFuZGxlIGJlaW5nIGludm9rZWQgYXMgYSBjb25zdHJ1Y3Rvci4KKworICAgICAg
ICAqIEFQSS9KU1dyYXBwZXJNYXAubW06CisgICAgICAgIChjb3B5TWV0aG9kc1RvT2JqZWN0KToK
KyAgICAgICAgKGFsbG9jYXRlQ29uc3RydWN0b3JGb3JDdXN0b21DbGFzcyk6CisgICAgICAgICgt
W0pTT2JqQ0NsYXNzSW5mbyBhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJvdG90eXBlV2l0aFN1cGVy
Q2xhc3NJbmZvOl0pOgorICAgICAgICAodHJ5VW53cmFwT2JqY09iamVjdCk6CisgICAgICAgICog
QVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1
bmN0aW9uOjppbXBsKToKKyAgICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW06Cisg
ICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbDo6T2JqQ0NhbGxiYWNrRnVuY3Rp
b25JbXBsKToKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjp3cmFwcGVk
Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6Omlz
Q29uc3RydWN0aWJsZSk6CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpnZXRD
b25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpu
YW1lKToKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxsKToKKyAg
ICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbik6CisgICAgICAgIChvYmpD
Q2FsbGJhY2tGdW5jdGlvbkZvckluaXQpOgorICAgICAgICAodHJ5VW53cmFwQ29uc3RydWN0b3Ip
OgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAoLVtUZXh0WFlaIGlu
aXRXaXRoU3RyaW5nOl0pOgorICAgICAgICAoLVtDbGFzc0EgaW5pdFdpdGhBOl0pOgorICAgICAg
ICAoLVtDbGFzc0IgaW5pdFdpdGhBOmI6XSk6CisgICAgICAgICgtW0NsYXNzQyBpbml0V2l0aEE6
XSk6CisgICAgICAgICgtW0NsYXNzQyBpbml0V2l0aEE6YjpdKToKKwogMjAxMy0xMC0yNSAgT2xp
dmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIHBhcnNlciBy
b2xsYmFjayBsb2dpYwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0JKHJldmlzaW9uIDE1ODAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNX
cmFwcGVyTWFwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0ICJX
ZWFrR0NNYXAuaCIKICNpbXBvcnQgPHd0Zi9UQ1NwaW5Mb2NrLmg+CiAjaW1wb3J0IDx3dGYvVmVj
dG9yLmg+CisjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgogCiBAY2xhc3MgSlNPYmpDQ2xhc3NJbmZv
OwogCkBAIC0xNjMsNiArMTY0LDExIEBAIHN0YXRpYyB2b2lkIGNvcHlNZXRob2RzVG9PYmplY3Qo
SlNDb250ZXgKICAgICBmb3JFYWNoTWV0aG9kSW5Qcm90b2NvbChwcm90b2NvbCwgWUVTLCBpc0lu
c3RhbmNlTWV0aG9kLCBeKFNFTCBzZWwsIGNvbnN0IGNoYXIqIHR5cGVzKXsKICAgICAgICAgY29u
c3QgY2hhciogbmFtZUNTdHIgPSBzZWxfZ2V0TmFtZShzZWwpOwogICAgICAgICBOU1N0cmluZyAq
bmFtZSA9IEAobmFtZUNTdHIpOworICAgICAgICAvLyBEb24ndCBjb3B5IG92ZXIgaW5pdCogbWV0
aG9kcyBiZWNhdXNlIHdlIGhhbmRsZSB0aG9zZSBzcGVjaWFsbHkgCisgICAgICAgIC8vIGZvciB0
aGUgcHVycG9zZXMgb2YgaG9va2luZyB1cCB0aGUgY29uc3RydWN0b3IgY29ycmVjdGx5LgorICAg
ICAgICBpZiAoW25hbWUgaGFzUHJlZml4OkAiaW5pdCJdKQorICAgICAgICAgICAgcmV0dXJuOwor
CiAgICAgICAgIGlmIChhY2Nlc3Nvck1ldGhvZHMgJiYgYWNjZXNzb3JNZXRob2RzW25hbWVdKSB7
CiAgICAgICAgICAgICBKU09iamVjdFJlZiBtZXRob2QgPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZv
ck1ldGhvZChjb250ZXh0LCBvYmpjQ2xhc3MsIHByb3RvY29sLCBpc0luc3RhbmNlTWV0aG9kLCBz
ZWwsIHR5cGVzKTsKICAgICAgICAgICAgIGlmICghbWV0aG9kKQpAQCAtMzI5LDYgKzMzNSw1NSBA
QCAtICh2b2lkKWRlYWxsb2MKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKK3N0YXRpYyBKU1Zh
bHVlICphbGxvY2F0ZUNvbnN0cnVjdG9yRm9yQ3VzdG9tQ2xhc3MoSlNDb250ZXh0ICpjb250ZXh0
LCBjb25zdCBjaGFyKiBjbGFzc05hbWUsIENsYXNzIGNscykKK3sKKyAgICAvLyBGb3IgZWFjaCBw
cm90b2NvbCB0aGF0IHRoZSBjbGFzcyBpbXBsZW1lbnRzLCBnYXRoZXIgYWxsIG9mIHRoZSBpbml0
IGZhbWlseSBtZXRob2RzIGludG8gYSBoYXNoIHRhYmxlLgorICAgIF9fYmxvY2sgSGFzaE1hcDxT
dHJpbmcsIFByb3RvY29sICo+IGluaXRUYWJsZTsKKyAgICBQcm90b2NvbCAqZXhwb3J0UHJvdG9j
b2wgPSBnZXRKU0V4cG9ydFByb3RvY29sKCk7CisgICAgZm9yRWFjaFByb3RvY29sSW1wbGVtZW50
aW5nUHJvdG9jb2woY2xzLCBleHBvcnRQcm90b2NvbCwgXihQcm90b2NvbCAqcHJvdG9jb2wpewor
ICAgICAgICBmb3JFYWNoTWV0aG9kSW5Qcm90b2NvbChwcm90b2NvbCwgWUVTLCBZRVMsIF4oU0VM
IHNlbGVjdG9yLCBjb25zdCBjaGFyKil7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0g
c2VsX2dldE5hbWUoc2VsZWN0b3IpOworICAgICAgICAgICAgaWYgKCFbQChuYW1lKSBoYXNQcmVm
aXg6QCJpbml0Il0pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaW5pdFRh
YmxlLnNldChuYW1lLCBwcm90b2NvbCk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgLy8g
RnJvbSBtb3N0LWRlcml2ZWQgdG8gbGVhc3QtZGVyaXZlZCBjbGFzczoKKyAgICBmb3IgKENsYXNz
IGN1cnJlbnRDbGFzcyA9IGNsczsgY3VycmVudENsYXNzOyBjdXJyZW50Q2xhc3MgPSBjbGFzc19n
ZXRTdXBlcmNsYXNzKGN1cnJlbnRDbGFzcykpIHsKKyAgICAgICAgX19ibG9jayB1bnNpZ25lZCBu
dW1iZXJPZkluaXRzRm91bmQgPSAwOworICAgICAgICBfX2Jsb2NrIFNFTCBpbml0TWV0aG9kID0g
MDsKKyAgICAgICAgX19ibG9jayBQcm90b2NvbCAqaW5pdFByb3RvY29sID0gMDsKKyAgICAgICAg
X19ibG9jayBjb25zdCBjaGFyKiB0eXBlcyA9IDA7CisgICAgICAgIGZvckVhY2hNZXRob2RJbkNs
YXNzKGN1cnJlbnRDbGFzcywgXihNZXRob2QgbWV0aG9kKXsKKyAgICAgICAgICAgIFNFTCBzZWxl
Y3RvciA9IG1ldGhvZF9nZXROYW1lKG1ldGhvZCk7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBu
YW1lID0gc2VsX2dldE5hbWUoc2VsZWN0b3IpOworICAgICAgICAgICAgYXV0byBpdGVyID0gaW5p
dFRhYmxlLmZpbmQobmFtZSk7CisKKyAgICAgICAgICAgIGlmIChpdGVyID09IGluaXRUYWJsZS5l
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIG51bWJlck9mSW5p
dHNGb3VuZCsrOworICAgICAgICAgICAgaW5pdE1ldGhvZCA9IHNlbGVjdG9yOworICAgICAgICAg
ICAgaW5pdFByb3RvY29sID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICB0eXBlcyA9IG1ldGhv
ZF9nZXRUeXBlRW5jb2RpbmcobWV0aG9kKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKCFu
dW1iZXJPZkluaXRzRm91bmQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAo
bnVtYmVyT2ZJbml0c0ZvdW5kID4gMSkgeworICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5l
ZWQgdG8gbG9nIGhlcmU/CisgICAgICAgICAgICBOU0xvZyhAIlRvbyBtYW55IGluaXRzIGZvdW5k
LCBhYmFuZG9uaW5nIHNoaXAuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIEpTT2JqZWN0UmVmIG1ldGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW5pdChj
b250ZXh0LCBjbHMsIGluaXRQcm90b2NvbCwgaW5pdE1ldGhvZCwgdHlwZXMpOworICAgICAgICBy
ZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjptZXRob2QgaW5Db250ZXh0OmNvbnRl
eHRdOworICAgIH0KKyAgICByZXR1cm4gb2JqZWN0V2l0aEN1c3RvbUJyYW5kKGNvbnRleHQsIFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXNDb25zdHJ1Y3RvciIsIGNsYXNzTmFtZV0sIGNs
cyk7Cit9CisKIC0gKHZvaWQpYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZVdpdGhTdXBl
ckNsYXNzSW5mbzooSlNPYmpDQ2xhc3NJbmZvKilzdXBlckNsYXNzSW5mbwogewogICAgIEFTU0VS
VCghbV9jb25zdHJ1Y3RvciB8fCAhbV9wcm90b3R5cGUpOwpAQCAtMzU3LDcgKzQxMiw3IEBAIC0g
KHZvaWQpYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZVcKICAgICAgICAgaWYgKG1fY29u
c3RydWN0b3IpCiAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IFtKU1ZhbHVlIHZhbHVlV2l0aEpT
VmFsdWVSZWY6dG9SZWYobV9jb25zdHJ1Y3Rvci5nZXQoKSkgaW5Db250ZXh0Om1fY29udGV4dF07
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gb2JqZWN0V2l0aEN1c3Rv
bUJyYW5kKG1fY29udGV4dCwgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlc0NvbnN0cnVj
dG9yIiwgY2xhc3NOYW1lXSwgbV9jbGFzcyk7CisgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGFs
bG9jYXRlQ29uc3RydWN0b3JGb3JDdXN0b21DbGFzcyhtX2NvbnRleHQsIGNsYXNzTmFtZSwgbV9j
bGFzcyk7CiAKICAgICAgICAgSlNDb250ZXh0UmVmIGNDb250ZXh0ID0gW21fY29udGV4dCBKU0ds
b2JhbENvbnRleHRSZWZdOwogICAgICAgICBtX3Byb3RvdHlwZSA9IHRvSlMoSlNWYWx1ZVRvT2Jq
ZWN0KGNDb250ZXh0LCB2YWx1ZUludGVybmFsVmFsdWUocHJvdG90eXBlKSwgMCkpOwpAQCAtNTA2
LDcgKzU2MSw3IEBAIGlkIHRyeVVud3JhcE9iamNPYmplY3QoSlNHbG9iYWxDb250ZXh0UmUKICAg
ICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAgICAgaWYgKHRvSlMob2JqZWN0KS0+aW5oZXJpdHMoSlND
OjpKU0NhbGxiYWNrT2JqZWN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Pjo6aW5mbygpKSkKICAg
ICAgICAgcmV0dXJuIChpZClKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KHRv
SlMob2JqZWN0KSktPndyYXBwZWRPYmplY3QoKTsKLSAgICBpZiAoaWQgdGFyZ2V0ID0gdHJ5VW53
cmFwQmxvY2sob2JqZWN0KSkKKyAgICBpZiAoaWQgdGFyZ2V0ID0gdHJ5VW53cmFwQ29uc3RydWN0
b3Iob2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgICByZXR1cm4gbmlsOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rp
b24uaAkocmV2aXNpb24gMTU4MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpD
Q2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw5IEBACiAjaWYg
ZGVmaW5lZChfX09CSkNfXykKIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0
aG9kKEpTQ29udGV4dCAqLCBDbGFzcywgUHJvdG9jb2wgKiwgQk9PTCBpc0luc3RhbmNlTWV0aG9k
LCBTRUwsIGNvbnN0IGNoYXIqIHR5cGVzKTsKIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0
aW9uRm9yQmxvY2soSlNDb250ZXh0ICosIGlkKTsKK0pTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1
bmN0aW9uRm9ySW5pdChKU0NvbnRleHQgKiwgQ2xhc3MsIFByb3RvY29sICosIFNFTCwgY29uc3Qg
Y2hhciogdHlwZXMpOwogCi1pZCB0cnlVbndyYXBCbG9jayhKU09iamVjdFJlZik7CitpZCB0cnlV
bndyYXBDb25zdHJ1Y3RvcihKU09iamVjdFJlZik7CiAjZW5kaWYKIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC01OCw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
LSAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwqIGltcGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0
KCk7IH0KKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwqIGltcGwoKSBjb25zdCB7IHJldHVy
biBtX2ltcGwuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIE9iakNDYWxsYmFja0Z1bmN0aW9u
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2ssIEpT
T2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjaywgUGFzc093blB0cjxPYmpDQ2FsbGJhY2tG
dW5jdGlvbkltcGw+KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxi
YWNrRnVuY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9P
YmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkocmV2aXNpb24gMTU4MDExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAt
Mzg1LDYgKzM4NSw3IEBAIHB1YmxpYzoKIH07CiAKIGVudW0gQ2FsbGJhY2tUeXBlIHsKKyAgICBD
YWxsYmFja0luaXRNZXRob2QsCiAgICAgQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZCwKICAgICBDYWxs
YmFja0NsYXNzTWV0aG9kLAogICAgIENhbGxiYWNrQmxvY2sKQEAgLTQwMSw3ICs0MDIsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9hcmd1bWVudHMoYXJndW1lbnRzKQogICAgICAgICAsIG1fcmVz
dWx0KHJlc3VsdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlICE9IENhbGxiYWNrSW5zdGFu
Y2VNZXRob2QgfHwgaW5zdGFuY2VDbGFzcyk7CisgICAgICAgIEFTU0VSVCgodHlwZSAhPSBDYWxs
YmFja0luc3RhbmNlTWV0aG9kICYmIHR5cGUgIT0gQ2FsbGJhY2tJbml0TWV0aG9kKSB8fCBpbnN0
YW5jZUNsYXNzKTsKICAgICB9CiAKICAgICB+T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKCkKQEAg
LTQxNiw2ICs0MTcsMjUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV90eXBlID09IENhbGxi
YWNrQmxvY2sgPyBbbV9pbnZvY2F0aW9uIHRhcmdldF0gOiBuaWw7CiAgICAgfQogCisgICAgaWQg
d3JhcHBlZENvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV90eXBlKSB7Cisg
ICAgICAgIGNhc2UgQ2FsbGJhY2tCbG9jazoKKyAgICAgICAgICAgIHJldHVybiBbbV9pbnZvY2F0
aW9uIHRhcmdldF07CisgICAgICAgIGNhc2UgQ2FsbGJhY2tJbml0TWV0aG9kOgorICAgICAgICAg
ICAgcmV0dXJuIG1faW5zdGFuY2VDbGFzczsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBuaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzQ29uc3RydWN0aWJs
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gISF3cmFwcGVkQmxvY2soKSB8fCBtX3R5cGUgPT0g
Q2FsbGJhY2tJbml0TWV0aG9kOworICAgIH0KKworICAgIFN0cmluZyBuYW1lKCk7CisKIHByaXZh
dGU6CiAgICAgQ2FsbGJhY2tUeXBlIG1fdHlwZTsKICAgICBDbGFzcyBtX2luc3RhbmNlQ2xhc3M7
CkBAIC00OTksNiArNTE5LDcgQEAgdm9pZCBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6ZGVzdHJveShK
U0NlbAogICAgIHN0YXRpY19jYXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4oY2VsbCktPk9iakND
YWxsYmFja0Z1bmN0aW9uOjp+T2JqQ0NhbGxiYWNrRnVuY3Rpb24oKTsKIH0KIAorCiBDYWxsVHlw
ZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNh
bGxEYXRhKQogewogICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IEFQSUNhbGxiYWNrRnVu
Y3Rpb246OmNhbGw8T2JqQ0NhbGxiYWNrRnVuY3Rpb24+OwpAQCAtNTA4LDI3ICs1MjksNDcgQEAg
Q2FsbFR5cGUgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmdldENhbGxEYQogQ29uc3RydWN0VHlwZSBP
YmpDQ2FsbGJhY2tGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqIGNlbGwsIENvbnN0
cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7CiAgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGNh
bGxiYWNrID0ganNDYXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4oY2VsbCk7Ci0gICAgaWYgKCFj
YWxsYmFjay0+aW1wbCgpLT53cmFwcGVkQmxvY2soKSkKKyAgICBpZiAoIWNhbGxiYWNrLT5pbXBs
KCktPmlzQ29uc3RydWN0aWJsZSgpKQogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0Q29uc3RydWN0
RGF0YShjZWxsLCBjb25zdHJ1Y3REYXRhKTsKICAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5j
dGlvbiA9IEFQSUNhbGxiYWNrRnVuY3Rpb246OmNvbnN0cnVjdDxPYmpDQ2FsbGJhY2tGdW5jdGlv
bj47CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCitTdHJpbmcgT2JqQ0NhbGxi
YWNrRnVuY3Rpb25JbXBsOjpuYW1lKCkKK3sKKyAgICBpZiAobV90eXBlID09IENhbGxiYWNrSW5p
dE1ldGhvZCkKKyAgICAgICAgcmV0dXJuIGNsYXNzX2dldE5hbWUobV9pbnN0YW5jZUNsYXNzKTsK
KyAgICByZXR1cm4gIiI7Cit9CisKIEpTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBs
OjpjYWxsKEpTQ29udGV4dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKIHsKICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtjb250
ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl07CiAKKyAgICBpZCB0YXJnZXQ7CiAgICAgc2l6ZV90IGZp
cnN0QXJndW1lbnQ7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIENhbGxiYWNrSW5p
dE1ldGhvZDogeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdCk7CisgICAgICAg
IHRhcmdldCA9IFttX2luc3RhbmNlQ2xhc3MgYWxsb2NdOworICAgICAgICBpZiAoIXRhcmdldCB8
fCAhW3RhcmdldCBpc0tpbmRPZkNsYXNzOm1faW5zdGFuY2VDbGFzc10pIHsKKyAgICAgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHRSZWYp
LCAic2VsZiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgT2JqZWN0aXZlLUMgaW5zdGFuY2UgbWV0aG9k
IikpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHRSZWYp
OworICAgICAgICB9CisgICAgICAgIFttX2ludm9jYXRpb24gc2V0VGFyZ2V0OnRhcmdldF07Cisg
ICAgICAgIGZpcnN0QXJndW1lbnQgPSAyOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2Fz
ZSBDYWxsYmFja0luc3RhbmNlTWV0aG9kOiB7Ci0gICAgICAgIGlkIHRhcmdldCA9IHRyeVVud3Jh
cE9iamNPYmplY3QoY29udGV4dFJlZiwgdGhpc09iamVjdCk7CisgICAgICAgIHRhcmdldCA9IHRy
eVVud3JhcE9iamNPYmplY3QoY29udGV4dFJlZiwgdGhpc09iamVjdCk7CiAgICAgICAgIGlmICgh
dGFyZ2V0IHx8ICFbdGFyZ2V0IGlzS2luZE9mQ2xhc3M6bV9pbnN0YW5jZUNsYXNzXSkgewogICAg
ICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29u
dGV4dFJlZiksICJzZWxmIHR5cGUgY2hlY2sgZmFpbGVkIGZvciBPYmplY3RpdmUtQyBpbnN0YW5j
ZSBtZXRob2QiKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dFJlZik7CiAgICAgICAgIH0KICAgICAgICAgW21faW52b2NhdGlvbiBzZXRUYXJnZXQ6dGFy
Z2V0XTsKKyAgICAgICAgZmlyc3RBcmd1bWVudCA9IDI7CisgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICAvLyBmYWxsdGhyb3VnaCAtIGZpcnN0QXJndW1lbnQgZm9yIENhbGxiYWNrSW5zdGFuY2VN
ZXRob2QgaXMgYWxzbyAyIQogICAgIGNhc2UgQ2FsbGJhY2tDbGFzc01ldGhvZDoKICAgICAgICAg
Zmlyc3RBcmd1bWVudCA9IDI7CiAgICAgICAgIGJyZWFrOwpAQCAtNTQ3LDYgKzU4OCwxMCBAQCBK
U1ZhbHVlUmVmIE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbDo6Y2FsCiAKICAgICBbbV9pbnZvY2F0
aW9uIGludm9rZV07CiAKKyAgICAvLyBBZnRlciBjYWxsaW5nIGluaXQgd2UgbmVlZCB0byBhdXRv
cmVsZWFzZS4KKyAgICBpZiAobV90eXBlID09IENhbGxiYWNrSW5pdE1ldGhvZCkKKyAgICAgICAg
W3RhcmdldCBhdXRvcmVsZWFzZV07CisKICAgICByZXR1cm4gbV9yZXN1bHQtPmdldChtX2ludm9j
YXRpb24uZ2V0KCksIGNvbnRleHQsIGV4Y2VwdGlvbik7CiB9CiAKQEAgLTU3OCw2ICs2MjMsNyBA
QCBzdGF0aWMgSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25GCiAgICAgICAgIHJldHVy
biBuaWw7CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENhbGxiYWNrSW5pdE1ldGhv
ZDoKICAgICBjYXNlIENhbGxiYWNrSW5zdGFuY2VNZXRob2Q6CiAgICAgY2FzZSBDYWxsYmFja0Ns
YXNzTWV0aG9kOgogICAgICAgICAvLyBNZXRob2RzIGFyZSBwYXNzZWQgdHdvIGltcGxpY2l0IGFy
Z3VtZW50cyAtIChpZClzZWxmLCBhbmQgdGhlIHNlbGVjdG9yLgpAQCAtNjExLDcgKzY1NywxNCBA
QCBzdGF0aWMgSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25GCiAgICAgSlNDOjpBUElF
bnRyeVNoaW0gc2hpbShleGVjKTsKICAgICBPd25QdHI8SlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlv
bkltcGw+IGltcGwgPSBhZG9wdFB0cihuZXcgSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwo
aW52b2NhdGlvbiwgdHlwZSwgaW5zdGFuY2VDbGFzcywgYXJndW1lbnRzLnJlbGVhc2UoKSwgcmVz
dWx0LnJlbGVhc2UoKSkpOwogICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBjb3VsZCBzdXBwb3J0IGhh
dmluZyB0aGUgc2VsZWN0b3IgYXMgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIG1ha2UgaXQg
YSBiaXQgbW9yZSB1c2VyLWZyaWVuZGx5IGZyb20gdGhlIEpTIHNpZGU/Ci0gICAgcmV0dXJuIHRv
UmVmKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksICIiLCBpbXBsLnJlbGVhc2UoKSkpOworICAgIHJldHVybiB0
b1JlZihKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBpbXBsLT5uYW1lKCksIGltcGwucmVsZWFzZSgpKSk7Cit9
CisKK0pTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW5pdChKU0NvbnRleHQgKmNv
bnRleHQsIENsYXNzIGNscywgUHJvdG9jb2wgKnByb3RvY29sLCBTRUwgc2VsLCBjb25zdCBjaGFy
KiB0eXBlcykKK3sKKyAgICBOU0ludm9jYXRpb24gKmludm9jYXRpb24gPSBbTlNJbnZvY2F0aW9u
IGludm9jYXRpb25XaXRoTWV0aG9kU2lnbmF0dXJlOltOU01ldGhvZFNpZ25hdHVyZSBzaWduYXR1
cmVXaXRoT2JqQ1R5cGVzOnR5cGVzXV07CisgICAgW2ludm9jYXRpb24gc2V0U2VsZWN0b3I6c2Vs
XTsKKyAgICByZXR1cm4gb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JJbnZvY2F0aW9uKGNvbnRleHQs
IGludm9jYXRpb24sIENhbGxiYWNrSW5pdE1ldGhvZCwgY2xzLCBfcHJvdG9jb2xfZ2V0TWV0aG9k
VHlwZUVuY29kaW5nKHByb3RvY29sLCBzZWwsIFlFUywgWUVTKSk7CiB9CiAKIEpTT2JqZWN0UmVm
IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yTWV0aG9kKEpTQ29udGV4dCAqY29udGV4dCwgQ2xhc3Mg
Y2xzLCBQcm90b2NvbCAqcHJvdG9jb2wsIEJPT0wgaXNJbnN0YW5jZU1ldGhvZCwgU0VMIHNlbCwg
Y29uc3QgY2hhciogdHlwZXMpCkBAIC02MzYsMTEgKzY4OSwxNCBAQCBKU09iamVjdFJlZiBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrCiAgICAgcmV0dXJuIG9iakNDYWxsYmFja0Z1bmN0aW9u
Rm9ySW52b2NhdGlvbihjb250ZXh0LCBpbnZvY2F0aW9uLCBDYWxsYmFja0Jsb2NrLCBuaWwsIHNp
Z25hdHVyZSk7CiB9CiAKLWlkIHRyeVVud3JhcEJsb2NrKEpTT2JqZWN0UmVmIG9iamVjdCkKK2lk
IHRyeVVud3JhcENvbnN0cnVjdG9yKEpTT2JqZWN0UmVmIG9iamVjdCkKIHsKICAgICBpZiAoIXRv
SlMob2JqZWN0KS0+aW5oZXJpdHMoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6aW5mbygpKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNDOjpPYmpDQ2Fs
bGJhY2tGdW5jdGlvbio+KHRvSlMob2JqZWN0KSktPmltcGwoKS0+d3JhcHBlZEJsb2NrKCk7Cisg
ICAgSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwqIGltcGwgPSBzdGF0aWNfY2FzdDxKU0M6
Ok9iakNDYWxsYmFja0Z1bmN0aW9uKj4odG9KUyhvYmplY3QpKS0+aW1wbCgpOworICAgIGlmICgh
aW1wbC0+aXNDb25zdHJ1Y3RpYmxlKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJu
IGltcGwtPndyYXBwZWRDb25zdHJ1Y3RvcigpOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlzaW9uIDE1ODAxMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNTIsNiArNTIsNyBAQCArIChOU1N0cmluZyAqKXBhcmVudFRlc3QKIEBlbmQKIAogQHBy
b3RvY29sIFRlc3RPYmplY3QgPEpTRXhwb3J0PgorLSAoaWQpaW5pdDsKIEBwcm9wZXJ0eSBpbnQg
dmFyaWFibGU7CiBAcHJvcGVydHkgKHJlYWRvbmx5KSBpbnQgc2l4OwogQHByb3BlcnR5IENHUG9p
bnQgcG9pbnQ7CkBAIC0xMDMsNiArMTA0LDcgQEAgLSAodm9pZClib2d1c0NhbGxiYWNrOih2b2lk
KF4pKGludCkpZnVuYwogYm9vbCB0ZXN0WFlaVGVzdGVkID0gZmFsc2U7CiAKIEBwcm90b2NvbCBU
ZXh0WFlaIDxKU0V4cG9ydD4KKy0gKGlkKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyopc3RyaW5n
OwogQHByb3BlcnR5IGludCB4OwogQHByb3BlcnR5IChyZWFkb25seSkgaW50IHk7CiBAcHJvcGVy
dHkgKGFzc2lnbikgSlNWYWx1ZSAqb25jbGljazsKQEAgLTEyNCw2ICsxMjYsMTYgQEAgLSAodm9p
ZCljbGljazsKIEBzeW50aGVzaXplIHg7CiBAc3ludGhlc2l6ZSB5OwogQHN5bnRoZXNpemUgejsK
Ky0gKGlkKWluaXRXaXRoU3RyaW5nOihOU1N0cmluZyopc3RyaW5nCit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBO
U0xvZyhAIiVAIiwgc3RyaW5nKTsKKworICAgIHJldHVybiBzZWxmOworfQogLSAodm9pZCl0ZXN0
OihOU1N0cmluZyAqKW1lc3NhZ2UKIHsKICAgICB0ZXN0WFlaVGVzdGVkID0gW21lc3NhZ2UgaXNF
cXVhbDpAInRlc3QiXSAmJiB4ID09IDEzICYgeSA9PSA0ICYmIHogPT0gNTsKQEAgLTI4NCw2ICsy
OTYsNzEgQEAgLSAoSlNWYWx1ZSAqKXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleQogfQogQGVu
ZAogCitAcHJvdG9jb2wgSW5pdEEgPEpTRXhwb3J0PgorLSAoaWQpaW5pdFdpdGhBOihpbnQpYTsK
K0BlbmQKKworQHByb3RvY29sIEluaXRCIDxKU0V4cG9ydD4KKy0gKGlkKWluaXRXaXRoQTooaW50
KWEgYjooaW50KWI7CitAZW5kCisKK0BpbnRlcmZhY2UgQ2xhc3NBIDogTlNPYmplY3Q8SW5pdEE+
CitAZW5kCisKK0BpbnRlcmZhY2UgQ2xhc3NCIDogQ2xhc3NBPEluaXRCPgorQGVuZAorCitAaW50
ZXJmYWNlIENsYXNzQyA6IENsYXNzQjxJbml0QSwgSW5pdEI+CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBDbGFzc0EgeworICAgIGludCBfYTsKK30KKy0gKGlkKWluaXRXaXRoQTooaW50KWEKK3sK
KyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIF9hID0gYTsKKworICAgIHJldHVybiBzZWxmOworfQorQGVuZAorCitAaW1w
bGVtZW50YXRpb24gQ2xhc3NCIHsKKyAgICBpbnQgX2I7Cit9CistIChpZClpbml0V2l0aEE6KGlu
dClhIGI6KGludCliCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEE6YV07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2IgPSBiOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBDbGFzc0MgeworICAgIGludCBfYzsK
K30KKy0gKGlkKWluaXRXaXRoQTooaW50KWEKK3sKKyAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhB
OmEgYjowXTsKK30KKy0gKGlkKWluaXRXaXRoQTooaW50KWEgYjooaW50KWIKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRXaXRoQTphIGI6Yl07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgX2MgPSBhICsgYjsKKworICAgIHJldHVybiBzZWxmOworfQorQGVuZAog
c3RhdGljIHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKmRlc2NyaXB0aW9uLCBib29sIHBhc3Nl
ZCkKIHsKICAgICBOU0xvZyhAIlRFU1Q6IFwiJUBcIjogJUAiLCBkZXNjcmlwdGlvbiwgcGFzc2Vk
ID8gQCJQQVNTRUQiIDogQCJGQUlMRUQiKTsKQEAgLTU3Niw3ICs2NTMsNyBAQCB2b2lkIHRlc3RP
YmplY3RpdmVDQVBJKCkKICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdOwogICAgICAgICBjb250ZXh0W0AiVGVzdE9iamVjdCJdID0gW1Rlc3RPYmpl
Y3QgY2xhc3NdOwogICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNj
cmlwdDpAIlN0cmluZyhUZXN0T2JqZWN0KSJdOwotICAgICAgICBjaGVja1Jlc3VsdChAIlN0cmlu
ZyhUZXN0T2JqZWN0KSIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiW29iamVjdCBUZXN0T2Jq
ZWN0Q29uc3RydWN0b3JdIl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIlN0cmluZyhUZXN0T2Jq
ZWN0KSIsIFtyZXN1bHQgaXNFcXVhbFRvT2JqZWN0OkAiZnVuY3Rpb24gVGVzdE9iamVjdCgpIHtc
biAgICBbbmF0aXZlIGNvZGVdXG59Il0pOwogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wg
ewpAQCAtOTY3LDYgKzEwNDQsNDAgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAg
IGNoZWNrUmVzdWx0KEAiW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRzXSA9PSBuaWwgb3V0c2lk
ZSBvZiBjYWxsYmFjayIsICFbSlNDb250ZXh0IGN1cnJlbnRBcmd1bWVudHNdKTsKICAgICB9CiAK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tK
U0NvbnRleHQgYWxsb2NdIGluaXRdOworICAgICAgICBjb250ZXh0W0AiVGVzdE9iamVjdCJdID0g
W1Rlc3RPYmplY3QgY2xhc3NdOworICAgICAgICBKU1ZhbHVlICp0ZXN0T2JqZWN0ID0gW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCIobmV3IFRlc3RPYmplY3QoKSkiXTsKKyAgICAgICAgY2hlY2tS
ZXN1bHQoQCJ0ZXN0T2JqZWN0IGluc3RhbmNlb2YgVGVzdE9iamVjdCIsIFt0ZXN0T2JqZWN0IGlz
SW5zdGFuY2VPZjpjb250ZXh0W0AiVGVzdE9iamVjdCJdXSk7CisKKyAgICAgICAgY29udGV4dFtA
IlRleHRYWVoiXSA9IFtUZXh0WFlaIGNsYXNzXTsKKyAgICAgICAgSlNWYWx1ZSAqdGV4dE9iamVj
dCA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKG5ldyBUZXh0WFlaKFwiQ2FsbGVkIFRleHRY
WVogY29uc3RydWN0b3IhXCIpKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInRleHRPYmplY3Qg
aW5zdGFuY2VvZiBUZXh0WFlaIiwgW3RleHRPYmplY3QgaXNJbnN0YW5jZU9mOmNvbnRleHRbQCJU
ZXh0WFlaIl1dKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlND
b250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworICAgICAgICBjb250
ZXh0W0AiQ2xhc3NBIl0gPSBbQ2xhc3NBIGNsYXNzXTsKKyAgICAgICAgY29udGV4dFtAIkNsYXNz
QiJdID0gW0NsYXNzQiBjbGFzc107CisgICAgICAgIGNvbnRleHRbQCJDbGFzc0MiXSA9IFtDbGFz
c0MgY2xhc3NdOyAvLyBTaG91bGQgcHJpbnQgZXJyb3IgbWVzc2FnZSBhYm91dCB0b28gbWFueSBp
bml0cyBmb3VuZC4KKworICAgICAgICBKU1ZhbHVlICphID0gW2NvbnRleHQgZXZhbHVhdGVTY3Jp
cHQ6QCIobmV3IENsYXNzQSg0MikpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiYSBpbnN0YW5j
ZW9mIENsYXNzQSIsIFthIGlzSW5zdGFuY2VPZjpjb250ZXh0W0AiQ2xhc3NBIl1dKTsKKworICAg
ICAgICBKU1ZhbHVlICpiID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIobmV3IENsYXNzQig0
MiwgNTMpKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAImIgaW5zdGFuY2VvZiBDbGFzc0IiLCBb
YiBpc0luc3RhbmNlT2Y6Y29udGV4dFtAIkNsYXNzQiJdXSk7CisKKyAgICAgICAgSlNWYWx1ZSAq
Y2FuQ29uc3RydWN0Q2xhc3NDID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIoZnVuY3Rpb24o
KSB7IFwKKyAgICAgICAgICAgIHRyeSB7IFwKKyAgICAgICAgICAgICAgICAobmV3IENsYXNzQygx
LCAyKSk7IFwKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgXAorICAgICAgICAgICAgfSBj
YXRjaChlKSB7IFwKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKKyAgICAgICAgICAg
IH0gXAorICAgICAgICB9KSgpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAic2hvdWxkbid0IGJl
IGFibGUgdG8gY29uc3RydWN0IENsYXNzQyIsICFbY2FuQ29uc3RydWN0Q2xhc3NDIHRvQm9vbF0p
OworICAgIH0KKwogICAgIGN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0KCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215345</attachid>
            <date>2013-10-28 16:45:10 -0700</date>
            <delta_ts>2013-10-30 11:24:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123380-20131028164509.patch</filename>
            <type>text/plain</type>
            <size>19712</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4MTEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDEzLTEwLTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNFeHBvcnQgZG9lc24ndCBzdXBwb3J0IGNvbnN0cnVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzgwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBmb3IgY29uc3Ry
dWN0b3Itc3R5bGUgY2FsbGJhY2tzIGZvciB0aGUgT2JqZWN0aXZlLUMgQVBJIHRvIEpTQyBpcyBj
dXJyZW50bHkgbGltaXRlZCB0byAKKyAgICAgICAgT2JqZWN0aXZlLUMgYmxvY2tzLiBBbnkgY2xp
ZW50cyB3aG8gdHJ5IHRvIGNhbGwgdGhlIGNvbnN0cnVjdG9yIG9mIGEgSlNFeHBvcnQtZWQgT2Jq
ZWN0aXZlLUMgY2xhc3MgCisgICAgICAgIGFyZSBtZXQgd2l0aCBhIHR5cGUgZXJyb3Igc3RhdGlu
ZyB0aGF0IGl0IGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBjb25zdHJ1Y3Rvci4KKworICAgICAgICBJ
dCB3b3VsZCBiZSBuaWNlIHRvIGV4cGFuZCBKU0V4cG9ydCdzIGZ1bmN0aW9uYWxpdHkgdG8gc3Vw
cG9ydCB0aGlzIGlkaW9tLiBJdCBpcyBhIG5hdHVyYWwgCisgICAgICAgIGV4dGVuc2lvbiB0byBK
U0V4cG9ydCBhbmQgd291bGQgaW5jcmVhc2UgdGhlIGV4cHJlc3NpdmVuZXNzIGFuZCBzaW1wbGlj
aXR5IGluIGJvdGggT2JqZWN0aXZlLUMgYW5kIAorICAgICAgICBKYXZhU2NyaXB0IGNsaWVudCBj
b2RlLgorCisgICAgICAgIFRoZSB3YXkgd2UnbGwgZG8gdGhpcyBpcyB0byBleHBhbmQgdGhlIGNh
cGFiaWxpdGllcyBvZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBhbmQgYXNzb2NpYXRlZCBjbGFzc2Vz
LiAKKyAgICAgICAgSW5zdGVhZCBvZiBjb25zdHJ1Y3RpbmcgYSBub3JtYWwgQyBBUEkgb2JqZWN0
IGZvciB0aGUgY29uc3RydWN0b3IsIHdlJ2xsIGluc3RlYWQgYWxsb2NhdGUgYSBmdWxsLWJsb3du
IAorICAgICAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiBvYmplY3Qgd2hpY2ggY2FuIGFscmVhZHkg
cHJvcGVybHkgaGFuZGxlIGJlaW5nIGludm9rZWQgYXMgYSBjb25zdHJ1Y3Rvci4KKworICAgICAg
ICAqIEFQSS9KU1dyYXBwZXJNYXAubW06CisgICAgICAgIChjb3B5TWV0aG9kc1RvT2JqZWN0KToK
KyAgICAgICAgKGFsbG9jYXRlQ29uc3RydWN0b3JGb3JDdXN0b21DbGFzcyk6CisgICAgICAgICgt
W0pTT2JqQ0NsYXNzSW5mbyBhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJvdG90eXBlV2l0aFN1cGVy
Q2xhc3NJbmZvOl0pOgorICAgICAgICAodHJ5VW53cmFwT2JqY09iamVjdCk6CisgICAgICAgICog
QVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1
bmN0aW9uOjppbXBsKToKKyAgICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW06Cisg
ICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbDo6T2JqQ0NhbGxiYWNrRnVuY3Rp
b25JbXBsKToKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjp3cmFwcGVk
Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6Omlz
Q29uc3RydWN0aWJsZSk6CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpnZXRD
b25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpu
YW1lKToKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxsKToKKyAg
ICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbik6CisgICAgICAgIChvYmpD
Q2FsbGJhY2tGdW5jdGlvbkZvckluaXQpOgorICAgICAgICAodHJ5VW53cmFwQ29uc3RydWN0b3Ip
OgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAoLVtUZXh0WFlaIGlu
aXRXaXRoU3RyaW5nOl0pOgorICAgICAgICAoLVtDbGFzc0EgaW5pdFdpdGhBOl0pOgorICAgICAg
ICAoLVtDbGFzc0IgaW5pdFdpdGhBOmI6XSk6CisgICAgICAgICgtW0NsYXNzQyBpbml0V2l0aEE6
XSk6CisgICAgICAgICgtW0NsYXNzQyBpbml0V2l0aEE6YjpdKToKKwogMjAxMy0xMC0yOCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZC4gRml4IG1ha2UgZGlzdGNoZWNrLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1dyYXBwZXJNYXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1dyYXBwZXJNYXAubW0JKHJldmlzaW9uIDE1ODExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
CiAjaW1wb3J0ICJXZWFrR0NNYXAuaCIKICNpbXBvcnQgPHd0Zi9UQ1NwaW5Mb2NrLmg+CiAjaW1w
b3J0IDx3dGYvVmVjdG9yLmg+CisjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgogCiBAY2xhc3MgSlNP
YmpDQ2xhc3NJbmZvOwogCkBAIC0xNjMsNiArMTY0LDExIEBAIHN0YXRpYyB2b2lkIGNvcHlNZXRo
b2RzVG9PYmplY3QoSlNDb250ZXgKICAgICBmb3JFYWNoTWV0aG9kSW5Qcm90b2NvbChwcm90b2Nv
bCwgWUVTLCBpc0luc3RhbmNlTWV0aG9kLCBeKFNFTCBzZWwsIGNvbnN0IGNoYXIqIHR5cGVzKXsK
ICAgICAgICAgY29uc3QgY2hhciogbmFtZUNTdHIgPSBzZWxfZ2V0TmFtZShzZWwpOwogICAgICAg
ICBOU1N0cmluZyAqbmFtZSA9IEAobmFtZUNTdHIpOworICAgICAgICAvLyBEb24ndCBjb3B5IG92
ZXIgaW5pdCBmYW1pbHkgbWV0aG9kcyBiZWNhdXNlIHdlIGhhbmRsZSB0aG9zZSBzcGVjaWFsbHkg
CisgICAgICAgIC8vIGZvciB0aGUgcHVycG9zZXMgb2YgaG9va2luZyB1cCB0aGUgY29uc3RydWN0
b3IgY29ycmVjdGx5LgorICAgICAgICBpZiAoW25hbWUgaGFzUHJlZml4OkAiaW5pdCJdKQorICAg
ICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChhY2Nlc3Nvck1ldGhvZHMgJiYgYWNjZXNz
b3JNZXRob2RzW25hbWVdKSB7CiAgICAgICAgICAgICBKU09iamVjdFJlZiBtZXRob2QgPSBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChjb250ZXh0LCBvYmpjQ2xhc3MsIHByb3RvY29sLCBp
c0luc3RhbmNlTWV0aG9kLCBzZWwsIHR5cGVzKTsKICAgICAgICAgICAgIGlmICghbWV0aG9kKQpA
QCAtMzI5LDYgKzMzNSw1NSBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CiAKK3N0YXRpYyBKU1ZhbHVlICphbGxvY2F0ZUNvbnN0cnVjdG9yRm9yQ3VzdG9tQ2xhc3Mo
SlNDb250ZXh0ICpjb250ZXh0LCBjb25zdCBjaGFyKiBjbGFzc05hbWUsIENsYXNzIGNscykKK3sK
KyAgICAvLyBGb3IgZWFjaCBwcm90b2NvbCB0aGF0IHRoZSBjbGFzcyBpbXBsZW1lbnRzLCBnYXRo
ZXIgYWxsIG9mIHRoZSBpbml0IGZhbWlseSBtZXRob2RzIGludG8gYSBoYXNoIHRhYmxlLgorICAg
IF9fYmxvY2sgSGFzaE1hcDxTdHJpbmcsIFByb3RvY29sICo+IGluaXRUYWJsZTsKKyAgICBQcm90
b2NvbCAqZXhwb3J0UHJvdG9jb2wgPSBnZXRKU0V4cG9ydFByb3RvY29sKCk7CisgICAgZm9yIChD
bGFzcyBjdXJyZW50Q2xhc3MgPSBjbHM7IGN1cnJlbnRDbGFzczsgY3VycmVudENsYXNzID0gY2xh
c3NfZ2V0U3VwZXJjbGFzcyhjdXJyZW50Q2xhc3MpKSB7CisgICAgICAgIGZvckVhY2hQcm90b2Nv
bEltcGxlbWVudGluZ1Byb3RvY29sKGN1cnJlbnRDbGFzcywgZXhwb3J0UHJvdG9jb2wsIF4oUHJv
dG9jb2wgKnByb3RvY29sKSB7CisgICAgICAgICAgICBmb3JFYWNoTWV0aG9kSW5Qcm90b2NvbChw
cm90b2NvbCwgWUVTLCBZRVMsIF4oU0VMIHNlbGVjdG9yLCBjb25zdCBjaGFyKikgeworICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBzZWxfZ2V0TmFtZShzZWxlY3Rvcik7CisgICAg
ICAgICAgICAgICAgaWYgKCFbQChuYW1lKSBoYXNQcmVmaXg6QCJpbml0Il0pCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpbml0VGFibGUuc2V0KG5hbWUsIHBy
b3RvY29sKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBmb3Ig
KENsYXNzIGN1cnJlbnRDbGFzcyA9IGNsczsgY3VycmVudENsYXNzOyBjdXJyZW50Q2xhc3MgPSBj
bGFzc19nZXRTdXBlcmNsYXNzKGN1cnJlbnRDbGFzcykpIHsKKyAgICAgICAgX19ibG9jayB1bnNp
Z25lZCBudW1iZXJPZkluaXRzRm91bmQgPSAwOworICAgICAgICBfX2Jsb2NrIFNFTCBpbml0TWV0
aG9kID0gMDsKKyAgICAgICAgX19ibG9jayBQcm90b2NvbCAqaW5pdFByb3RvY29sID0gMDsKKyAg
ICAgICAgX19ibG9jayBjb25zdCBjaGFyKiB0eXBlcyA9IDA7CisgICAgICAgIGZvckVhY2hNZXRo
b2RJbkNsYXNzKGN1cnJlbnRDbGFzcywgXihNZXRob2QgbWV0aG9kKSB7CisgICAgICAgICAgICBT
RUwgc2VsZWN0b3IgPSBtZXRob2RfZ2V0TmFtZShtZXRob2QpOworICAgICAgICAgICAgY29uc3Qg
Y2hhciogbmFtZSA9IHNlbF9nZXROYW1lKHNlbGVjdG9yKTsKKyAgICAgICAgICAgIGF1dG8gaXRl
ciA9IGluaXRUYWJsZS5maW5kKG5hbWUpOworCisgICAgICAgICAgICBpZiAoaXRlciA9PSBpbml0
VGFibGUuZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBudW1i
ZXJPZkluaXRzRm91bmQrKzsKKyAgICAgICAgICAgIGluaXRNZXRob2QgPSBzZWxlY3RvcjsKKyAg
ICAgICAgICAgIGluaXRQcm90b2NvbCA9IGl0ZXItPnZhbHVlOworICAgICAgICAgICAgdHlwZXMg
PSBtZXRob2RfZ2V0VHlwZUVuY29kaW5nKG1ldGhvZCk7CisgICAgICAgIH0pOworCisgICAgICAg
IGlmICghbnVtYmVyT2ZJbml0c0ZvdW5kKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgaWYgKG51bWJlck9mSW5pdHNGb3VuZCA+IDEpIHsKKyAgICAgICAgICAgIE5TTG9nKEAiRVJS
T1I6IENsYXNzICVAIGV4cG9ydGVkIG1vcmUgdGhhbiBvbmUgaW5pdCBmYW1pbHkgbWV0aG9kIHZp
YSBKU0V4cG9ydC4gQ2xhc3MgJUAgd2lsbCBub3QgaGF2ZSBhIGNhbGxhYmxlIEphdmFTY3JpcHQg
Y29uc3RydWN0b3IgZnVuY3Rpb24uIiwgY2xzLCBjbHMpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBKU09iamVjdFJlZiBtZXRob2QgPSBvYmpDQ2FsbGJhY2tGdW5j
dGlvbkZvckluaXQoY29udGV4dCwgY2xzLCBpbml0UHJvdG9jb2wsIGluaXRNZXRob2QsIHR5cGVz
KTsKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6bWV0aG9kIGlu
Q29udGV4dDpjb250ZXh0XTsKKyAgICB9CisgICAgcmV0dXJuIG9iamVjdFdpdGhDdXN0b21CcmFu
ZChjb250ZXh0LCBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzQ29uc3RydWN0b3IiLCBj
bGFzc05hbWVdLCBjbHMpOworfQorCiAtICh2b2lkKWFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90
b3R5cGVXaXRoU3VwZXJDbGFzc0luZm86KEpTT2JqQ0NsYXNzSW5mbyopc3VwZXJDbGFzc0luZm8K
IHsKICAgICBBU1NFUlQoIW1fY29uc3RydWN0b3IgfHwgIW1fcHJvdG90eXBlKTsKQEAgLTM1Nyw3
ICs0MTIsNyBAQCAtICh2b2lkKWFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVXCiAgICAg
ICAgIGlmIChtX2NvbnN0cnVjdG9yKQogICAgICAgICAgICAgY29uc3RydWN0b3IgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKG1fY29uc3RydWN0b3IuZ2V0KCkpIGluQ29udGV4
dDptX2NvbnRleHRdOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG9i
amVjdFdpdGhDdXN0b21CcmFuZChtX2NvbnRleHQsIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJXNDb25zdHJ1Y3RvciIsIGNsYXNzTmFtZV0sIG1fY2xhc3MpOworICAgICAgICAgICAgY29u
c3RydWN0b3IgPSBhbGxvY2F0ZUNvbnN0cnVjdG9yRm9yQ3VzdG9tQ2xhc3MobV9jb250ZXh0LCBj
bGFzc05hbWUsIG1fY2xhc3MpOwogCiAgICAgICAgIEpTQ29udGV4dFJlZiBjQ29udGV4dCA9IFtt
X2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXTsKICAgICAgICAgbV9wcm90b3R5cGUgPSB0b0pT
KEpTVmFsdWVUb09iamVjdChjQ29udGV4dCwgdmFsdWVJbnRlcm5hbFZhbHVlKHByb3RvdHlwZSks
IDApKTsKQEAgLTUwNiw3ICs1NjEsNyBAQCBpZCB0cnlVbndyYXBPYmpjT2JqZWN0KEpTR2xvYmFs
Q29udGV4dFJlCiAgICAgQVNTRVJUKCFleGNlcHRpb24pOwogICAgIGlmICh0b0pTKG9iamVjdCkt
PmluaGVyaXRzKEpTQzo6SlNDYWxsYmFja09iamVjdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdD46
OmluZm8oKSkpCiAgICAgICAgIHJldHVybiAoaWQpSlNDOjpqc0Nhc3Q8SlNDOjpKU0FQSVdyYXBw
ZXJPYmplY3QqPih0b0pTKG9iamVjdCkpLT53cmFwcGVkT2JqZWN0KCk7Ci0gICAgaWYgKGlkIHRh
cmdldCA9IHRyeVVud3JhcEJsb2NrKG9iamVjdCkpCisgICAgaWYgKGlkIHRhcmdldCA9IHRyeVVu
d3JhcENvbnN0cnVjdG9yKG9iamVjdCkpCiAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgcmV0
dXJuIG5pbDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNr
RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakND
YWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE1ODExMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCAr
MzQsOSBAQAogI2lmIGRlZmluZWQoX19PQkpDX18pCiBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tG
dW5jdGlvbkZvck1ldGhvZChKU0NvbnRleHQgKiwgQ2xhc3MsIFByb3RvY29sICosIEJPT0wgaXNJ
bnN0YW5jZU1ldGhvZCwgU0VMLCBjb25zdCBjaGFyKiB0eXBlcyk7CiBKU09iamVjdFJlZiBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKEpTQ29udGV4dCAqLCBpZCk7CitKU09iamVjdFJlZiBv
YmpDQ2FsbGJhY2tGdW5jdGlvbkZvckluaXQoSlNDb250ZXh0ICosIENsYXNzLCBQcm90b2NvbCAq
LCBTRUwsIGNvbnN0IGNoYXIqIHR5cGVzKTsKIAotaWQgdHJ5VW53cmFwQmxvY2soSlNPYmplY3RS
ZWYpOworaWQgdHJ5VW53cmFwQ29uc3RydWN0b3IoSlNPYmplY3RSZWYpOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtNTgsNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCi0gICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKiBpbXBsKCkgeyByZXR1
cm4gbV9pbXBsLmdldCgpOyB9CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKiBpbXBsKCkg
Y29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBPYmpDQ2Fs
bGJhY2tGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlv
bkNhbGxiYWNrLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2ssIFBhc3NPd25QdHI8
T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDE1ODExMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM4NSw2ICszODUsNyBAQCBwdWJsaWM6CiB9OwogCiBlbnVtIENhbGxiYWNr
VHlwZSB7CisgICAgQ2FsbGJhY2tJbml0TWV0aG9kLAogICAgIENhbGxiYWNrSW5zdGFuY2VNZXRo
b2QsCiAgICAgQ2FsbGJhY2tDbGFzc01ldGhvZCwKICAgICBDYWxsYmFja0Jsb2NrCkBAIC00MDEs
NyArNDAyLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fYXJndW1lbnRzKGFyZ3VtZW50cykKICAg
ICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCiAgICAgewotICAgICAgICBBU1NFUlQodHlwZSAhPSBD
YWxsYmFja0luc3RhbmNlTWV0aG9kIHx8IGluc3RhbmNlQ2xhc3MpOworICAgICAgICBBU1NFUlQo
KHR5cGUgIT0gQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZCAmJiB0eXBlICE9IENhbGxiYWNrSW5pdE1l
dGhvZCkgfHwgaW5zdGFuY2VDbGFzcyk7CiAgICAgfQogCiAgICAgfk9iakNDYWxsYmFja0Z1bmN0
aW9uSW1wbCgpCkBAIC00MTYsNiArNDE3LDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
dHlwZSA9PSBDYWxsYmFja0Jsb2NrID8gW21faW52b2NhdGlvbiB0YXJnZXRdIDogbmlsOwogICAg
IH0KIAorICAgIGlkIHdyYXBwZWRDb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG1fdHlwZSkgeworICAgICAgICBjYXNlIENhbGxiYWNrQmxvY2s6CisgICAgICAgICAgICByZXR1
cm4gW21faW52b2NhdGlvbiB0YXJnZXRdOworICAgICAgICBjYXNlIENhbGxiYWNrSW5pdE1ldGhv
ZDoKKyAgICAgICAgICAgIHJldHVybiBtX2luc3RhbmNlQ2xhc3M7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBp
c0NvbnN0cnVjdGlibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhd3JhcHBlZEJsb2NrKCkg
fHwgbV90eXBlID09IENhbGxiYWNrSW5pdE1ldGhvZDsKKyAgICB9CisKKyAgICBTdHJpbmcgbmFt
ZSgpOworCiBwcml2YXRlOgogICAgIENhbGxiYWNrVHlwZSBtX3R5cGU7CiAgICAgQ2xhc3MgbV9p
bnN0YW5jZUNsYXNzOwpAQCAtNDk5LDYgKzUxOSw3IEBAIHZvaWQgT2JqQ0NhbGxiYWNrRnVuY3Rp
b246OmRlc3Ryb3koSlNDZWwKICAgICBzdGF0aWNfY2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+
KGNlbGwpLT5PYmpDQ2FsbGJhY2tGdW5jdGlvbjo6fk9iakNDYWxsYmFja0Z1bmN0aW9uKCk7CiB9
CiAKKwogQ2FsbFR5cGUgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmdldENhbGxEYXRhKEpTQ2VsbCos
IENhbGxEYXRhJiBjYWxsRGF0YSkKIHsKICAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBB
UElDYWxsYmFja0Z1bmN0aW9uOjpjYWxsPE9iakNDYWxsYmFja0Z1bmN0aW9uPjsKQEAgLTUwOCwy
NyArNTI5LDQ3IEBAIENhbGxUeXBlIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpnZXRDYWxsRGEKIENv
bnN0cnVjdFR5cGUgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmdldENvbnN0cnVjdERhdGEoSlNDZWxs
KiBjZWxsLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQogewogICAgIE9iakNDYWxsYmFj
a0Z1bmN0aW9uKiBjYWxsYmFjayA9IGpzQ2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KGNlbGwp
OwotICAgIGlmICghY2FsbGJhY2stPmltcGwoKS0+d3JhcHBlZEJsb2NrKCkpCisgICAgaWYgKCFj
YWxsYmFjay0+aW1wbCgpLT5pc0NvbnN0cnVjdGlibGUoKSkKICAgICAgICAgcmV0dXJuIEJhc2U6
OmdldENvbnN0cnVjdERhdGEoY2VsbCwgY29uc3RydWN0RGF0YSk7CiAgICAgY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24gPSBBUElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3Q8T2JqQ0Nh
bGxiYWNrRnVuY3Rpb24+OwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0KIAorU3Ry
aW5nIE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbDo6bmFtZSgpCit7CisgICAgaWYgKG1fdHlwZSA9
PSBDYWxsYmFja0luaXRNZXRob2QpCisgICAgICAgIHJldHVybiBjbGFzc19nZXROYW1lKG1faW5z
dGFuY2VDbGFzcyk7CisgICAgcmV0dXJuICIiOworfQorCiBKU1ZhbHVlUmVmIE9iakNDYWxsYmFj
a0Z1bmN0aW9uSW1wbDo6Y2FsbChKU0NvbnRleHQgKmNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRl
eHRSZWYgPSBbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdOwogCisgICAgaWQgdGFyZ2V0Owog
ICAgIHNpemVfdCBmaXJzdEFyZ3VtZW50OwogICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgY2Fz
ZSBDYWxsYmFja0luaXRNZXRob2Q6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmpl
Y3QpOworICAgICAgICB0YXJnZXQgPSBbbV9pbnN0YW5jZUNsYXNzIGFsbG9jXTsKKyAgICAgICAg
aWYgKCF0YXJnZXQgfHwgIVt0YXJnZXQgaXNLaW5kT2ZDbGFzczptX2luc3RhbmNlQ2xhc3NdKSB7
CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBlRXJyb3IodG9K
Uyhjb250ZXh0UmVmKSwgInNlbGYgdHlwZSBjaGVjayBmYWlsZWQgZm9yIE9iamVjdGl2ZS1DIGlu
c3RhbmNlIG1ldGhvZCIpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0UmVmKTsKKyAgICAgICAgfQorICAgICAgICBbbV9pbnZvY2F0aW9uIHNldFRhcmdl
dDp0YXJnZXRdOworICAgICAgICBmaXJzdEFyZ3VtZW50ID0gMjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQogICAgIGNhc2UgQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZDogewotICAgICAgICBpZCB0YXJn
ZXQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHRSZWYsIHRoaXNPYmplY3QpOworICAgICAg
ICB0YXJnZXQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRleHRSZWYsIHRoaXNPYmplY3QpOwog
ICAgICAgICBpZiAoIXRhcmdldCB8fCAhW3RhcmdldCBpc0tpbmRPZkNsYXNzOm1faW5zdGFuY2VD
bGFzc10pIHsKICAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihKU0M6OmNyZWF0ZVR5cGVF
cnJvcih0b0pTKGNvbnRleHRSZWYpLCAic2VsZiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgT2JqZWN0
aXZlLUMgaW5zdGFuY2UgbWV0aG9kIikpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHRSZWYpOwogICAgICAgICB9CiAgICAgICAgIFttX2ludm9jYXRpb24g
c2V0VGFyZ2V0OnRhcmdldF07CisgICAgICAgIGZpcnN0QXJndW1lbnQgPSAyOworICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgLy8gZmFsbHRocm91Z2ggLSBmaXJzdEFyZ3VtZW50IGZvciBDYWxs
YmFja0luc3RhbmNlTWV0aG9kIGlzIGFsc28gMiEKICAgICBjYXNlIENhbGxiYWNrQ2xhc3NNZXRo
b2Q6CiAgICAgICAgIGZpcnN0QXJndW1lbnQgPSAyOwogICAgICAgICBicmVhazsKQEAgLTU0Nyw3
ICs1ODgsMTggQEAgSlNWYWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6OmNhbAogCiAg
ICAgW21faW52b2NhdGlvbiBpbnZva2VdOwogCi0gICAgcmV0dXJuIG1fcmVzdWx0LT5nZXQobV9p
bnZvY2F0aW9uLmdldCgpLCBjb250ZXh0LCBleGNlcHRpb24pOworICAgIEpTVmFsdWVSZWYgcmVz
dWx0ID0gbV9yZXN1bHQtPmdldChtX2ludm9jYXRpb24uZ2V0KCksIGNvbnRleHQsIGV4Y2VwdGlv
bik7CisKKyAgICAvLyBCYWxhbmNlIG91ciBjYWxsIHRvIC1hbGxvYyB3aXRoIGEgY2FsbCB0byAt
YXV0b3JlbGVhc2UuIFdlIGhhdmUgdG8gZG8gdGhpcyBhZnRlciBjYWxsaW5nIC1pbml0CisgICAg
Ly8gYmVjYXVzZSBpbml0IGZhbWlseSBtZXRob2RzIGFyZSBhbGxvd2VkIHRvIHJlbGVhc2UgdGhl
IGFsbG9jYXRlZCBvYmplY3QgYW5kIHJldHVybiBzb21ldGhpbmcgCisgICAgLy8gZWxzZSBpbiBp
dHMgcGxhY2UuCisgICAgaWYgKG1fdHlwZSA9PSBDYWxsYmFja0luaXRNZXRob2QpIHsKKyAgICAg
ICAgaWQgb2JqY1Jlc3VsdCA9IHRyeVVud3JhcE9iamNPYmplY3QoY29udGV4dFJlZiwgcmVzdWx0
KTsKKyAgICAgICAgaWYgKG9iamNSZXN1bHQpCisgICAgICAgICAgICBbb2JqY1Jlc3VsdCBhdXRv
cmVsZWFzZV07CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkBAIC01NzgsNiArNjMwLDcgQEAgc3RhdGljIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFj
a0Z1bmN0aW9uRgogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBDYWxsYmFja0luaXRNZXRob2Q6CiAgICAgY2FzZSBDYWxsYmFja0luc3RhbmNlTWV0
aG9kOgogICAgIGNhc2UgQ2FsbGJhY2tDbGFzc01ldGhvZDoKICAgICAgICAgLy8gTWV0aG9kcyBh
cmUgcGFzc2VkIHR3byBpbXBsaWNpdCBhcmd1bWVudHMgLSAoaWQpc2VsZiwgYW5kIHRoZSBzZWxl
Y3Rvci4KQEAgLTYxMSw3ICs2NjQsMTQgQEAgc3RhdGljIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFj
a0Z1bmN0aW9uRgogICAgIEpTQzo6QVBJRW50cnlTaGltIHNoaW0oZXhlYyk7CiAgICAgT3duUHRy
PEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBpbXBsID0gYWRvcHRQdHIobmV3IEpTQzo6
T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKGludm9jYXRpb24sIHR5cGUsIGluc3RhbmNlQ2xhc3Ms
IGFyZ3VtZW50cy5yZWxlYXNlKCksIHJlc3VsdC5yZWxlYXNlKCkpKTsKICAgICAvLyBGSVhNRTog
TWF5YmUgd2UgY291bGQgc3VwcG9ydCBoYXZpbmcgdGhlIHNlbGVjdG9yIGFzIHRoZSBuYW1lIG9m
IHRoZSBmdW5jdGlvbiB0byBtYWtlIGl0IGEgYml0IG1vcmUgdXNlci1mcmllbmRseSBmcm9tIHRo
ZSBKUyBzaWRlPwotICAgIHJldHVybiB0b1JlZihKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAiIiwgaW1wbC5y
ZWxlYXNlKCkpKTsKKyAgICByZXR1cm4gdG9SZWYoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaW1wbC0+bmFt
ZSgpLCBpbXBsLnJlbGVhc2UoKSkpOworfQorCitKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5j
dGlvbkZvckluaXQoSlNDb250ZXh0ICpjb250ZXh0LCBDbGFzcyBjbHMsIFByb3RvY29sICpwcm90
b2NvbCwgU0VMIHNlbCwgY29uc3QgY2hhciogdHlwZXMpCit7CisgICAgTlNJbnZvY2F0aW9uICpp
bnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpb
TlNNZXRob2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczp0eXBlc11dOworICAgIFtp
bnZvY2F0aW9uIHNldFNlbGVjdG9yOnNlbF07CisgICAgcmV0dXJuIG9iakNDYWxsYmFja0Z1bmN0
aW9uRm9ySW52b2NhdGlvbihjb250ZXh0LCBpbnZvY2F0aW9uLCBDYWxsYmFja0luaXRNZXRob2Qs
IGNscywgX3Byb3RvY29sX2dldE1ldGhvZFR5cGVFbmNvZGluZyhwcm90b2NvbCwgc2VsLCBZRVMs
IFlFUykpOwogfQogCiBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvck1ldGhvZChK
U0NvbnRleHQgKmNvbnRleHQsIENsYXNzIGNscywgUHJvdG9jb2wgKnByb3RvY29sLCBCT09MIGlz
SW5zdGFuY2VNZXRob2QsIFNFTCBzZWwsIGNvbnN0IGNoYXIqIHR5cGVzKQpAQCAtNjM2LDExICs2
OTYsMTQgQEAgSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jawogICAgIHJl
dHVybiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oY29udGV4dCwgaW52b2NhdGlv
biwgQ2FsbGJhY2tCbG9jaywgbmlsLCBzaWduYXR1cmUpOwogfQogCi1pZCB0cnlVbndyYXBCbG9j
ayhKU09iamVjdFJlZiBvYmplY3QpCitpZCB0cnlVbndyYXBDb25zdHJ1Y3RvcihKU09iamVjdFJl
ZiBvYmplY3QpCiB7CiAgICAgaWYgKCF0b0pTKG9iamVjdCktPmluaGVyaXRzKEpTQzo6T2JqQ0Nh
bGxiYWNrRnVuY3Rpb246OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb24qPih0b0pTKG9iamVjdCkpLT5p
bXBsKCktPndyYXBwZWRCbG9jaygpOworICAgIEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBs
KiBpbXBsID0gc3RhdGljX2Nhc3Q8SlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KHRvSlMob2Jq
ZWN0KSktPmltcGwoKTsKKyAgICBpZiAoIWltcGwtPmlzQ29uc3RydWN0aWJsZSgpKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIHJldHVybiBpbXBsLT53cmFwcGVkQ29uc3RydWN0b3IoKTsKIH0K
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
Lm1tCShyZXZpc2lvbiAxNTgxMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgKyAoTlNTdHJpbmcg
KilwYXJlbnRUZXN0CiBAZW5kCiAKIEBwcm90b2NvbCBUZXN0T2JqZWN0IDxKU0V4cG9ydD4KKy0g
KGlkKWluaXQ7CiBAcHJvcGVydHkgaW50IHZhcmlhYmxlOwogQHByb3BlcnR5IChyZWFkb25seSkg
aW50IHNpeDsKIEBwcm9wZXJ0eSBDR1BvaW50IHBvaW50OwpAQCAtMTAzLDYgKzEwNCw3IEBAIC0g
KHZvaWQpYm9ndXNDYWxsYmFjazoodm9pZCheKShpbnQpKWZ1bmMKIGJvb2wgdGVzdFhZWlRlc3Rl
ZCA9IGZhbHNlOwogCiBAcHJvdG9jb2wgVGV4dFhZWiA8SlNFeHBvcnQ+CistIChpZClpbml0V2l0
aFN0cmluZzooTlNTdHJpbmcqKXN0cmluZzsKIEBwcm9wZXJ0eSBpbnQgeDsKIEBwcm9wZXJ0eSAo
cmVhZG9ubHkpIGludCB5OwogQHByb3BlcnR5IChhc3NpZ24pIEpTVmFsdWUgKm9uY2xpY2s7CkBA
IC0xMjQsNiArMTI2LDE2IEBAIC0gKHZvaWQpY2xpY2s7CiBAc3ludGhlc2l6ZSB4OwogQHN5bnRo
ZXNpemUgeTsKIEBzeW50aGVzaXplIHo7CistIChpZClpbml0V2l0aFN0cmluZzooTlNTdHJpbmcq
KXN0cmluZworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgTlNMb2coQCIlQCIsIHN0cmluZyk7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KIC0gKHZvaWQpdGVzdDooTlNTdHJpbmcgKiltZXNzYWdlCiB7CiAgICAgdGVz
dFhZWlRlc3RlZCA9IFttZXNzYWdlIGlzRXF1YWw6QCJ0ZXN0Il0gJiYgeCA9PSAxMyAmIHkgPT0g
NCAmJiB6ID09IDU7CkBAIC0yODQsNiArMjk2LDEwNCBAQCAtIChKU1ZhbHVlICopdmFsdWVGb3JL
ZXk6KE5TU3RyaW5nICopa2V5CiB9CiBAZW5kCiAKK0Bwcm90b2NvbCBJbml0QSA8SlNFeHBvcnQ+
CistIChpZClpbml0V2l0aEE6KGludClhOworQGVuZAorCitAcHJvdG9jb2wgSW5pdEIgPEpTRXhw
b3J0PgorLSAoaWQpaW5pdFdpdGhBOihpbnQpYSBiOihpbnQpYjsKK0BlbmQKKworQGludGVyZmFj
ZSBDbGFzc0EgOiBOU09iamVjdDxJbml0QT4KK0BlbmQKKworQGludGVyZmFjZSBDbGFzc0IgOiBD
bGFzc0E8SW5pdEI+CitAZW5kCisKK0BpbnRlcmZhY2UgQ2xhc3NDIDogQ2xhc3NCPEluaXRBLCBJ
bml0Qj4KK0BlbmQKKworQGludGVyZmFjZSBDbGFzc0QgOiBOU09iamVjdDxJbml0QT4KKy0gKGlk
KWluaXRXaXRoQTooaW50KWE7CitAZW5kCisKK0BpbnRlcmZhY2UgQ2xhc3NFIDogQ2xhc3NECist
IChpZClpbml0V2l0aEE6KGludClhOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gQ2xhc3NBIHsK
KyAgICBpbnQgX2E7Cit9CistIChpZClpbml0V2l0aEE6KGludClhCit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBf
YSA9IGE7CisKKyAgICByZXR1cm4gc2VsZjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIENs
YXNzQiB7CisgICAgaW50IF9iOworfQorLSAoaWQpaW5pdFdpdGhBOihpbnQpYSBiOihpbnQpYgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhBOmFdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIF9iID0gYjsKKworICAgIHJldHVybiBzZWxmOworfQorQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gQ2xhc3NDIHsKKyAgICBpbnQgX2M7Cit9CistIChpZClpbml0
V2l0aEE6KGludClhCit7CisgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoQTphIGI6MF07Cit9Cist
IChpZClpbml0V2l0aEE6KGludClhIGI6KGludCliCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
V2l0aEE6YSBiOmJdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IF9jID0gYSArIGI7CisKKyAgICByZXR1cm4gc2VsZjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIENsYXNzRAorCistIChpZClpbml0V2l0aEE6KGludClhCit7CisgICAgc2VsZiA9IG5pbDsK
KyAgICByZXR1cm4gW1tDbGFzc0UgYWxsb2NdIGluaXRXaXRoQTphXTsKK30KK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIENsYXNzRSB7CisgICAgaW50IF9hOworfQorCistIChpZClpbml0V2l0aEE6
KGludClhCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBfYSA9IGE7CisKKyAgICByZXR1cm4gc2VsZjsKK30KK0Bl
bmQKIHN0YXRpYyB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICpkZXNjcmlwdGlvbiwgYm9vbCBw
YXNzZWQpCiB7CiAgICAgTlNMb2coQCJURVNUOiBcIiVAXCI6ICVAIiwgZGVzY3JpcHRpb24sIHBh
c3NlZCA/IEAiUEFTU0VEIiA6IEAiRkFJTEVEIik7CkBAIC01NzYsNyArNjg2LDcgQEAgdm9pZCB0
ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250
ZXh0IGFsbG9jXSBpbml0XTsKICAgICAgICAgY29udGV4dFtAIlRlc3RPYmplY3QiXSA9IFtUZXN0
T2JqZWN0IGNsYXNzXTsKICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJTdHJpbmcoVGVzdE9iamVjdCkiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJT
dHJpbmcoVGVzdE9iamVjdCkiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAIltvYmplY3QgVGVz
dE9iamVjdENvbnN0cnVjdG9yXSJdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTdHJpbmcoVGVz
dE9iamVjdCkiLCBbcmVzdWx0IGlzRXF1YWxUb09iamVjdDpAImZ1bmN0aW9uIFRlc3RPYmplY3Qo
KSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSJdKTsKICAgICB9CiAKICAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKQEAgLTk2Nyw2ICsxMDc3LDQ5IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAg
ICAgICBjaGVja1Jlc3VsdChAIltKU0NvbnRleHQgY3VycmVudEFyZ3VtZW50c10gPT0gbmlsIG91
dHNpZGUgb2YgY2FsbGJhY2siLCAhW0pTQ29udGV4dCBjdXJyZW50QXJndW1lbnRzXSk7CiAgICAg
fQogCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgY29udGV4dFtAIlRlc3RPYmplY3Qi
XSA9IFtUZXN0T2JqZWN0IGNsYXNzXTsKKyAgICAgICAgSlNWYWx1ZSAqdGVzdE9iamVjdCA9IFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKG5ldyBUZXN0T2JqZWN0KCkpIl07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAidGVzdE9iamVjdCBpbnN0YW5jZW9mIFRlc3RPYmplY3QiLCBbdGVzdE9iamVj
dCBpc0luc3RhbmNlT2Y6Y29udGV4dFtAIlRlc3RPYmplY3QiXV0pOworCisgICAgICAgIGNvbnRl
eHRbQCJUZXh0WFlaIl0gPSBbVGV4dFhZWiBjbGFzc107CisgICAgICAgIEpTVmFsdWUgKnRleHRP
YmplY3QgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIihuZXcgVGV4dFhZWihcIkNhbGxlZCBU
ZXh0WFlaIGNvbnN0cnVjdG9yIVwiKSkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJ0ZXh0T2Jq
ZWN0IGluc3RhbmNlb2YgVGV4dFhZWiIsIFt0ZXh0T2JqZWN0IGlzSW5zdGFuY2VPZjpjb250ZXh0
W0AiVGV4dFhZWiJdXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAg
Y29udGV4dFtAIkNsYXNzQSJdID0gW0NsYXNzQSBjbGFzc107CisgICAgICAgIGNvbnRleHRbQCJD
bGFzc0IiXSA9IFtDbGFzc0IgY2xhc3NdOworICAgICAgICBjb250ZXh0W0AiQ2xhc3NDIl0gPSBb
Q2xhc3NDIGNsYXNzXTsgLy8gU2hvdWxkIHByaW50IGVycm9yIG1lc3NhZ2UgYWJvdXQgdG9vIG1h
bnkgaW5pdHMgZm91bmQuCisKKyAgICAgICAgSlNWYWx1ZSAqYSA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiKG5ldyBDbGFzc0EoNDIpKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAImEgaW5z
dGFuY2VvZiBDbGFzc0EiLCBbYSBpc0luc3RhbmNlT2Y6Y29udGV4dFtAIkNsYXNzQSJdXSk7CisK
KyAgICAgICAgSlNWYWx1ZSAqYiA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKG5ldyBDbGFz
c0IoNDIsIDUzKSkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJiIGluc3RhbmNlb2YgQ2xhc3NC
IiwgW2IgaXNJbnN0YW5jZU9mOmNvbnRleHRbQCJDbGFzc0IiXV0pOworCisgICAgICAgIEpTVmFs
dWUgKmNhbkNvbnN0cnVjdENsYXNzQyA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKGZ1bmN0
aW9uKCkgeyBcCisgICAgICAgICAgICB0cnkgeyBcCisgICAgICAgICAgICAgICAgKG5ldyBDbGFz
c0MoMSwgMikpOyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IFwKKyAgICAgICAgICAg
IH0gY2F0Y2goZSkgeyBcCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgICAg
ICAgICB9IFwKKyAgICAgICAgfSkoKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInNob3VsZG4n
dCBiZSBhYmxlIHRvIGNvbnN0cnVjdCBDbGFzc0MiLCAhW2NhbkNvbnN0cnVjdENsYXNzQyB0b0Jv
b2xdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworICAgICAgICBjb250ZXh0W0Ai
Q2xhc3NEIl0gPSBbQ2xhc3NEIGNsYXNzXTsKKyAgICAgICAgY29udGV4dFtAIkNsYXNzRSJdID0g
W0NsYXNzRSBjbGFzc107CisgICAgICAgCisgICAgICAgIEpTVmFsdWUgKmQgPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAIihuZXcgQ2xhc3NEKCkpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
UmV0dXJuaW5nIGluc3RhbmNlIG9mIENsYXNzRSBmcm9tIENsYXNzRCdzIGluaXQgaGFzIGNvcnJl
Y3QgY2xhc3MiLCBbZCBpc0luc3RhbmNlT2Y6Y29udGV4dFtAIkNsYXNzRSJdXSk7CisgICAgfQor
CiAgICAgY3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215536</attachid>
            <date>2013-10-30 11:25:00 -0700</date>
            <delta_ts>2013-11-06 10:52:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123380-20131030112500.patch</filename>
            <type>text/plain</type>
            <size>2466</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4MjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDEzLTEwLTMwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNFeHBvcnQgZG9lc24ndCBzdXBwb3J0IGNvbnN0cnVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzgwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZGVkIGFub3RoZXIgbGlu
a2VkLW9uLW9yLWFmdGVyIGNoZWNrIGZvciB3aGVuIHdlJ3JlIGRlY2lkaW5nIHdoZXRoZXIKKyAg
ICAgICAgd2Ugc2hvdWxkIGNvcHkgb3ZlciBpbml0IGZhbWlseSBtZXRob2RzLgorCisgICAgICAg
ICogQVBJL0pTV3JhcHBlck1hcC5tbToKKyAgICAgICAgKHNob3VsZFNraXBNZXRob2RXaXRoTmFt
ZSk6CisgICAgICAgIChjb3B5TWV0aG9kc1RvT2JqZWN0KToKKwogMjAxMy0xMC0yNSAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIEpTRXhwb3J0IGRv
ZXNuJ3Qgc3VwcG9ydCBjb25zdHJ1Y3RvcnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNXcmFwcGVyTWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNXcmFwcGVyTWFwLm1tCShyZXZpc2lvbiAxNTgyOTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSwy
MCBAQCBpbmxpbmUgdm9pZCBwdXROb25FbnVtZXJhYmxlKEpTVmFsdWUgKmJhCiAgICAgfV07CiB9
CiAKK3N0YXRpYyBib29sIHNob3VsZFNraXBNZXRob2RXaXRoTmFtZShOU1N0cmluZyAqbmFtZSkK
K3sKKyAgICAvLyBGb3IgY2xpZW50cyBsaW5rZWQgYWdhaW5zdCB2ZXJzaW9ucyBvZiBKYXZhU2Ny
aXB0Q29yZSBwcmlvciB0byBzdXBwb3J0IGZvcgorICAgIC8vIGluaXQtYmFzZWQgY29uc3RydWN0
b3JzLCBqdXN0IGNvcHkgb3ZlciB0aGUgaW5pdCBtZXRob2QgYXMgd2Ugd291bGQgaGF2ZSBiZWZv
cmUuCisjaWYgT1MoREFSV0lOKQorICAgIGlmIChOU1ZlcnNpb25PZkxpbmtUaW1lTGlicmFyeSgi
SmF2YVNjcmlwdENvcmUiKSA8IHdlYmtpdEZpcnN0VmVyc2lvbldpdGhJbml0Q29uc3RydWN0b3JT
dXBwb3J0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIC8vIFNraXAgb3Zl
ciBpbml0IGZhbWlseSBtZXRob2RzIGJlY2F1c2Ugd2UgaGFuZGxlIHRob3NlIHNwZWNpYWxseSAK
KyAgICAvLyBmb3IgdGhlIHB1cnBvc2VzIG9mIGhvb2tpbmcgdXAgdGhlIGNvbnN0cnVjdG9yIGNv
cnJlY3RseS4KKyAgICByZXR1cm4gW25hbWUgaGFzUHJlZml4OkAiaW5pdCJdOworfQorCiAvLyBU
aGlzIG1ldGhvZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgc2V0IG9mIHJlcXVpcmVkIG1ldGhvZHMg
aW4gdGhlIHByb3RvY29sLCBhbmQ6CiAvLyAgKiBEZXRlcm1pbmUgYSBwcm9wZXJ0eSBuYW1lIChl
aXRoZXIgdmlhIGEgcmVuYW1lTWFwIG9yIGRlZmF1bHQgY29udmVyc2lvbikuCiAvLyAgKiBJZiBh
biBhY2Nlc3Nvck1hcCBpcyBwcm92aWRlZCwgYW5kIGNvbnRhaW5zIHRoaXMgbmFtZSwgc3RvcmUg
dGhlIG1ldGhvZCBpbiB0aGUgbWFwLgpAQCAtMTcwLDkgKzE4NCw4IEBAIHN0YXRpYyB2b2lkIGNv
cHlNZXRob2RzVG9PYmplY3QoSlNDb250ZXgKICAgICBmb3JFYWNoTWV0aG9kSW5Qcm90b2NvbChw
cm90b2NvbCwgWUVTLCBpc0luc3RhbmNlTWV0aG9kLCBeKFNFTCBzZWwsIGNvbnN0IGNoYXIqIHR5
cGVzKXsKICAgICAgICAgY29uc3QgY2hhciogbmFtZUNTdHIgPSBzZWxfZ2V0TmFtZShzZWwpOwog
ICAgICAgICBOU1N0cmluZyAqbmFtZSA9IEAobmFtZUNTdHIpOwotICAgICAgICAvLyBEb24ndCBj
b3B5IG92ZXIgaW5pdCBmYW1pbHkgbWV0aG9kcyBiZWNhdXNlIHdlIGhhbmRsZSB0aG9zZSBzcGVj
aWFsbHkgCi0gICAgICAgIC8vIGZvciB0aGUgcHVycG9zZXMgb2YgaG9va2luZyB1cCB0aGUgY29u
c3RydWN0b3IgY29ycmVjdGx5LgotICAgICAgICBpZiAoW25hbWUgaGFzUHJlZml4OkAiaW5pdCJd
KQorCisgICAgICAgIGlmIChzaG91bGRTa2lwTWV0aG9kV2l0aE5hbWUobmFtZSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKGFjY2Vzc29yTWV0aG9kcyAmJiBhY2Nlc3Nvck1l
dGhvZHNbbmFtZV0pIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216193</attachid>
            <date>2013-11-06 10:52:37 -0800</date>
            <delta_ts>2013-11-06 11:13:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123380-20131106105236.patch</filename>
            <type>text/plain</type>
            <size>8862</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4NzU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDEzLTExLTA2ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNFeHBvcnQgZG9lc24ndCBzdXBwb3J0IGNvbnN0cnVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzMzgwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZGVkIGFub3RoZXIgbGlu
a2VkLW9uLW9yLWFmdGVyIGNoZWNrIGZvciB3aGVuIHdlJ3JlIGRlY2lkaW5nIHdoZXRoZXIKKyAg
ICAgICAgd2Ugc2hvdWxkIGNvcHkgb3ZlciBpbml0IGZhbWlseSBtZXRob2RzLgorCisgICAgICAg
IEZhY3RvcmVkIG91dCB0aGUgbGluayB0aW1lIGNoZWNrcyBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rp
b24gc28gdGhhdCB0aGV5IGNhbiBiZSBjYWNoZWQuCisKKyAgICAgICAgRmFjdG9yZWQgb3V0IHRo
ZSBjaGVjayBmb3IgaW5pdC1mYW1pbHkgbWV0aG9kIHNlbGVjdG9ycyBpbnRvIGhlbHBlciBmdW5j
dGlvbiBhbmQgY2hhbmdlZCBpdCB0bworICAgICAgICBtYXRjaCB0aGUgZGVzY3JpcHRpb24gaW4g
dGhlIGNsYW5nIGRvY3MsIG5hbWVseSB0aGF0IHRoZXJlIGNhbiBiZSB1bmRlcnNjb3JlcyBhdCB0
aGUgYmVnaW5uaW5nCisgICAgICAgIGFuZCB0aGUgZmlyc3QgbGV0dGVyIGFmdGVyICdpbml0JyBw
YXJ0IG9mIHRoZSBzZWxlY3RvciAoaWYgdGhlcmUgaXMgb25lKSBtdXN0IGJlIGEgY2FwaXRhbCBs
ZXR0ZXIuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0cyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdHJl
YXQgImluaXRpYWxpemUiIGFzIGFuIGluaXQtZmFtaWx5IG1ldGhvZCBhbmQgdGhhdCB3ZSBkbwor
ICAgICAgICB0cmVhdCAiX2luaXQiIGFzIGFuIGluaXQtZmFtaWx5IG1ldGhvZC4KKworICAgICAg
ICAqIEFQSS9KU1dyYXBwZXJNYXAuaDoKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1tOgor
ICAgICAgICAoaXNJbml0RmFtaWx5TWV0aG9kKToKKyAgICAgICAgKHNob3VsZFNraXBNZXRob2RX
aXRoTmFtZSk6CisgICAgICAgIChjb3B5TWV0aG9kc1RvT2JqZWN0KToKKyAgICAgICAgKGFsbG9j
YXRlQ29uc3RydWN0b3JGb3JDdXN0b21DbGFzcyk6CisgICAgICAgIChzdXBwb3J0c0luaXRNZXRo
b2RDb25zdHJ1Y3RvcnMpOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAg
ICAoLVtDbGFzc0EgaW5pdGlhbGl6ZV0pOgorICAgICAgICAoLVtDbGFzc0QgaW5pdGlhbGl6ZV0p
OgorCiAyMDEzLTExLTA2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAg
ICAgICAgIENoYW5nZSBjdGlUcmFtcG9saW5lIGludG8gYSB0aHVuawpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5oCShyZXZpc2lvbiAxNTg3NTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw3IEBACiAKIGlkIHRyeVVud3JhcE9iamNPYmplY3QoSlNHbG9iYWxDb250ZXh0UmVm
LCBKU1ZhbHVlUmVmKTsKIAorYm9vbCBzdXBwb3J0c0luaXRNZXRob2RDb25zdHJ1Y3RvcnMoKTsK
IFByb3RvY29sICpnZXRKU0V4cG9ydFByb3RvY29sKCk7CiBDbGFzcyBnZXROU0Jsb2NrQ2xhc3Mo
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHJl
dmlzaW9uIDE1ODc1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFw
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDQ0IEBAIGlubGluZSB2b2lkIHB1dE5v
bkVudW1lcmFibGUoSlNWYWx1ZSAqYmEKICAgICB9XTsKIH0KIAorc3RhdGljIGJvb2wgaXNJbml0
RmFtaWx5TWV0aG9kKE5TU3RyaW5nICpuYW1lKQoreworICAgIE5TVUludGVnZXIgaSA9IDA7CisK
KyAgICAvLyBTa2lwIG92ZXIgaW5pdGlhbCB1bmRlcnNjb3Jlcy4KKyAgICBmb3IgKDsgaSA8IFtu
YW1lIGxlbmd0aF07ICsraSkgeworICAgICAgICBpZiAoW25hbWUgY2hhcmFjdGVyQXRJbmRleDpp
XSAhPSAnXycpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBNYXRjaCAnaW5p
dCcuCisgICAgTlNVSW50ZWdlciBpbml0SW5kZXggPSAwOworICAgIE5TU3RyaW5nKiBpbml0ID0g
QCJpbml0IjsKKyAgICBmb3IgKDsgaSA8IFtuYW1lIGxlbmd0aF0gJiYgaW5pdEluZGV4IDwgW2lu
aXQgbGVuZ3RoXTsgKytpLCArK2luaXRJbmRleCkgeworICAgICAgICBpZiAoW25hbWUgY2hhcmFj
dGVyQXRJbmRleDppXSAhPSBbaW5pdCBjaGFyYWN0ZXJBdEluZGV4OmluaXRJbmRleF0pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2UgZGlkbid0IG1hdGNoIGFs
bCBvZiAnaW5pdCcuCisgICAgaWYgKGluaXRJbmRleCA8IFtpbml0IGxlbmd0aF0pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIElmIHdlJ3JlIGF0IHRoZSBlbmQgb3IgdGhlIG5leHQg
Y2hhcmFjdGVyIGlzIGEgY2FwaXRhbCBsZXR0ZXIgdGhlbiB0aGlzIGlzIGFuIGluaXQtZmFtaWx5
IHNlbGVjdG9yLgorICAgIHJldHVybiBpID09IFtuYW1lIGxlbmd0aF0gfHwgW1tOU0NoYXJhY3Rl
clNldCB1cHBlcmNhc2VMZXR0ZXJDaGFyYWN0ZXJTZXRdIGNoYXJhY3RlcklzTWVtYmVyOltuYW1l
IGNoYXJhY3RlckF0SW5kZXg6aV1dOyAKK30KKworc3RhdGljIGJvb2wgc2hvdWxkU2tpcE1ldGhv
ZFdpdGhOYW1lKE5TU3RyaW5nICpuYW1lKQoreworICAgIC8vIEZvciBjbGllbnRzIHRoYXQgZG9u
J3Qgc3VwcG9ydCBpbml0LWJhc2VkIGNvbnN0cnVjdG9ycyBqdXN0IGNvcHkgCisgICAgLy8gb3Zl
ciB0aGUgaW5pdCBtZXRob2QgYXMgd2Ugd291bGQgaGF2ZSBiZWZvcmUuCisgICAgaWYgKCFzdXBw
b3J0c0luaXRNZXRob2RDb25zdHJ1Y3RvcnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gU2tpcCBvdmVyIGluaXQgZmFtaWx5IG1ldGhvZHMgYmVjYXVzZSB3ZSBoYW5kbGUgdGhv
c2Ugc3BlY2lhbGx5IAorICAgIC8vIGZvciB0aGUgcHVycG9zZXMgb2YgaG9va2luZyB1cCB0aGUg
Y29uc3RydWN0b3IgY29ycmVjdGx5LgorICAgIHJldHVybiBpc0luaXRGYW1pbHlNZXRob2QobmFt
ZSk7Cit9CisKIC8vIFRoaXMgbWV0aG9kIHdpbGwgaXRlcmF0ZSBvdmVyIHRoZSBzZXQgb2YgcmVx
dWlyZWQgbWV0aG9kcyBpbiB0aGUgcHJvdG9jb2wsIGFuZDoKIC8vICAqIERldGVybWluZSBhIHBy
b3BlcnR5IG5hbWUgKGVpdGhlciB2aWEgYSByZW5hbWVNYXAgb3IgZGVmYXVsdCBjb252ZXJzaW9u
KS4KIC8vICAqIElmIGFuIGFjY2Vzc29yTWFwIGlzIHByb3ZpZGVkLCBhbmQgY29udGFpbnMgdGhp
cyBuYW1lLCBzdG9yZSB0aGUgbWV0aG9kIGluIHRoZSBtYXAuCkBAIC0xNzAsOSArMjA4LDggQEAg
c3RhdGljIHZvaWQgY29weU1ldGhvZHNUb09iamVjdChKU0NvbnRleAogICAgIGZvckVhY2hNZXRo
b2RJblByb3RvY29sKHByb3RvY29sLCBZRVMsIGlzSW5zdGFuY2VNZXRob2QsIF4oU0VMIHNlbCwg
Y29uc3QgY2hhciogdHlwZXMpewogICAgICAgICBjb25zdCBjaGFyKiBuYW1lQ1N0ciA9IHNlbF9n
ZXROYW1lKHNlbCk7CiAgICAgICAgIE5TU3RyaW5nICpuYW1lID0gQChuYW1lQ1N0cik7Ci0gICAg
ICAgIC8vIERvbid0IGNvcHkgb3ZlciBpbml0IGZhbWlseSBtZXRob2RzIGJlY2F1c2Ugd2UgaGFu
ZGxlIHRob3NlIHNwZWNpYWxseSAKLSAgICAgICAgLy8gZm9yIHRoZSBwdXJwb3NlcyBvZiBob29r
aW5nIHVwIHRoZSBjb25zdHJ1Y3RvciBjb3JyZWN0bHkuCi0gICAgICAgIGlmIChbbmFtZSBoYXNQ
cmVmaXg6QCJpbml0Il0pCisKKyAgICAgICAgaWYgKHNob3VsZFNraXBNZXRob2RXaXRoTmFtZShu
YW1lKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoYWNjZXNzb3JNZXRob2Rz
ICYmIGFjY2Vzc29yTWV0aG9kc1tuYW1lXSkgewpAQCAtMzQzLDEwICszODAsOSBAQCAtICh2b2lk
KWRlYWxsb2MKIAogc3RhdGljIEpTVmFsdWUgKmFsbG9jYXRlQ29uc3RydWN0b3JGb3JDdXN0b21D
bGFzcyhKU0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSwgQ2xhc3MgY2xz
KQogewotI2lmIE9TKERBUldJTikKLSAgICBpZiAoTlNWZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnko
IkphdmFTY3JpcHRDb3JlIikgPCB3ZWJraXRGaXJzdFZlcnNpb25XaXRoSW5pdENvbnN0cnVjdG9y
U3VwcG9ydCkKKyAgICBpZiAoIXN1cHBvcnRzSW5pdE1ldGhvZENvbnN0cnVjdG9ycygpKQogICAg
ICAgICByZXR1cm4gb2JqZWN0V2l0aEN1c3RvbUJyYW5kKGNvbnRleHQsIFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiJXNDb25zdHJ1Y3RvciIsIGNsYXNzTmFtZV0sIGNscyk7Ci0jZW5kaWYK
KwogICAgIC8vIEZvciBlYWNoIHByb3RvY29sIHRoYXQgdGhlIGNsYXNzIGltcGxlbWVudHMsIGdh
dGhlciBhbGwgb2YgdGhlIGluaXQgZmFtaWx5IG1ldGhvZHMgaW50byBhIGhhc2ggdGFibGUuCiAg
ICAgX19ibG9jayBIYXNoTWFwPFN0cmluZywgUHJvdG9jb2wgKj4gaW5pdFRhYmxlOwogICAgIFBy
b3RvY29sICpleHBvcnRQcm90b2NvbCA9IGdldEpTRXhwb3J0UHJvdG9jb2woKTsKQEAgLTM1NCw3
ICszOTAsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqYWxsb2NhdGVDb25zdHJ1Y3RvckZvckN1CiAgICAg
ICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKGN1cnJlbnRDbGFzcywgZXhw
b3J0UHJvdG9jb2wsIF4oUHJvdG9jb2wgKnByb3RvY29sKSB7CiAgICAgICAgICAgICBmb3JFYWNo
TWV0aG9kSW5Qcm90b2NvbChwcm90b2NvbCwgWUVTLCBZRVMsIF4oU0VMIHNlbGVjdG9yLCBjb25z
dCBjaGFyKikgewogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBzZWxfZ2V0TmFt
ZShzZWxlY3Rvcik7Ci0gICAgICAgICAgICAgICAgaWYgKCFbQChuYW1lKSBoYXNQcmVmaXg6QCJp
bml0Il0pCisgICAgICAgICAgICAgICAgaWYgKCFpc0luaXRGYW1pbHlNZXRob2QoQChuYW1lKSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBpbml0VGFibGUu
c2V0KG5hbWUsIHByb3RvY29sKTsKICAgICAgICAgICAgIH0pOwpAQCAtNTgyLDYgKzYxOCwxNyBA
QCBOU19ST09UX0NMQVNTIEBpbnRlcmZhY2UgSlNFeHBvcnQgPEpTRXhwCiBAaW1wbGVtZW50YXRp
b24gSlNFeHBvcnQKIEBlbmQKIAorYm9vbCBzdXBwb3J0c0luaXRNZXRob2RDb25zdHJ1Y3RvcnMo
KQoreworI2lmIE9TKERBUldJTikKKyAgICBzdGF0aWMgaW50MzJfdCB2ZXJzaW9uT2ZMaW5rVGlt
ZUxpYnJhcnkgPSAwOworICAgIGlmICghdmVyc2lvbk9mTGlua1RpbWVMaWJyYXJ5KQorICAgICAg
ICB2ZXJzaW9uT2ZMaW5rVGltZUxpYnJhcnkgPSBOU1ZlcnNpb25PZkxpbmtUaW1lTGlicmFyeSgi
SmF2YVNjcmlwdENvcmUiKTsKKyAgICByZXR1cm4gdmVyc2lvbk9mTGlua1RpbWVMaWJyYXJ5ID49
IHdlYmtpdEZpcnN0VmVyc2lvbldpdGhJbml0Q29uc3RydWN0b3JTdXBwb3J0OworI2VuZGlmCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKIFByb3RvY29sICpnZXRKU0V4cG9ydFByb3RvY29sKCkKIHsK
ICAgICBzdGF0aWMgUHJvdG9jb2wgKnByb3RvY29sID0gb2JqY19nZXRQcm90b2NvbCgiSlNFeHBv
cnQiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0J
KHJldmlzaW9uIDE1ODc1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVz
dGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjk4LDEyICsyOTgsMTcgQEAgLSAoSlNWYWx1ZSAq
KXZhbHVlRm9yS2V5OihOU1N0cmluZyAqKWtleQogCiBAcHJvdG9jb2wgSW5pdEEgPEpTRXhwb3J0
PgogLSAoaWQpaW5pdFdpdGhBOihpbnQpYTsKKy0gKGludClpbml0aWFsaXplOwogQGVuZAogCiBA
cHJvdG9jb2wgSW5pdEIgPEpTRXhwb3J0PgogLSAoaWQpaW5pdFdpdGhBOihpbnQpYSBiOihpbnQp
YjsKIEBlbmQKIAorQHByb3RvY29sIEluaXRDIDxKU0V4cG9ydD4KKy0gKGlkKV9pbml0OworQGVu
ZAorCiBAaW50ZXJmYWNlIENsYXNzQSA6IE5TT2JqZWN0PEluaXRBPgogQGVuZAogCkBAIC0zMTMs
NiArMzE4LDkgQEAgQGludGVyZmFjZSBDbGFzc0IgOiBDbGFzc0E8SW5pdEI+CiBAaW50ZXJmYWNl
IENsYXNzQyA6IENsYXNzQjxJbml0QSwgSW5pdEI+CiBAZW5kCiAKK0BpbnRlcmZhY2UgQ2xhc3ND
UHJpbWUgOiBDbGFzc0I8SW5pdEEsIEluaXRDPgorQGVuZAorCiBAaW50ZXJmYWNlIENsYXNzRCA6
IE5TT2JqZWN0PEluaXRBPgogLSAoaWQpaW5pdFdpdGhBOihpbnQpYTsKIEBlbmQKQEAgLTMzNCw2
ICszNDIsMTAgQEAgLSAoaWQpaW5pdFdpdGhBOihpbnQpYQogCiAgICAgcmV0dXJuIHNlbGY7CiB9
CistIChpbnQpaW5pdGlhbGl6ZQoreworICAgIHJldHVybiA0MjsKK30KIEBlbmQKIAogQGltcGxl
bWVudGF0aW9uIENsYXNzQiB7CkBAIC0zNzAsNiArMzgyLDIwIEBAIC0gKGlkKWluaXRXaXRoQToo
aW50KWEgYjooaW50KWIKIH0KIEBlbmQKIAorQGltcGxlbWVudGF0aW9uIENsYXNzQ1ByaW1lCist
IChpZClpbml0V2l0aEE6KGludClhCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEE6YSBi
OjBdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKy0gKGlkKV9pbml0Cit7CisgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoQTo0Ml07Cit9
CitAZW5kCisKIEBpbXBsZW1lbnRhdGlvbiBDbGFzc0QKIAogLSAoaWQpaW5pdFdpdGhBOihpbnQp
YQpAQCAtMzc3LDYgKzQwMywxMCBAQCAtIChpZClpbml0V2l0aEE6KGludClhCiAgICAgc2VsZiA9
IG5pbDsKICAgICByZXR1cm4gW1tDbGFzc0UgYWxsb2NdIGluaXRXaXRoQTphXTsKIH0KKy0gKGlu
dClpbml0aWFsaXplCit7CisgICAgcmV0dXJuIDA7Cit9CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlv
biBDbGFzc0UgewpAQCAtMTA5Myw5ICsxMTIzLDExIEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEko
KQogICAgICAgICBjb250ZXh0W0AiQ2xhc3NBIl0gPSBbQ2xhc3NBIGNsYXNzXTsKICAgICAgICAg
Y29udGV4dFtAIkNsYXNzQiJdID0gW0NsYXNzQiBjbGFzc107CiAgICAgICAgIGNvbnRleHRbQCJD
bGFzc0MiXSA9IFtDbGFzc0MgY2xhc3NdOyAvLyBTaG91bGQgcHJpbnQgZXJyb3IgbWVzc2FnZSBh
Ym91dCB0b28gbWFueSBpbml0cyBmb3VuZC4KKyAgICAgICAgY29udGV4dFtAIkNsYXNzQ1ByaW1l
Il0gPSBbQ2xhc3NDUHJpbWUgY2xhc3NdOyAvLyBEaXR0by4KIAogICAgICAgICBKU1ZhbHVlICph
ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCIobmV3IENsYXNzQSg0MikpIl07CiAgICAgICAg
IGNoZWNrUmVzdWx0KEAiYSBpbnN0YW5jZW9mIENsYXNzQSIsIFthIGlzSW5zdGFuY2VPZjpjb250
ZXh0W0AiQ2xhc3NBIl1dKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJhLmluaXRpYWxpemUoKSBp
cyBjYWxsYWJsZSIsIFtbYSBpbnZva2VNZXRob2Q6QCJpbml0aWFsaXplIiB3aXRoQXJndW1lbnRz
OkBbXV0gdG9JbnQzMl0gPT0gNDIpOwogCiAgICAgICAgIEpTVmFsdWUgKmIgPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAIihuZXcgQ2xhc3NCKDQyLCA1MykpIl07CiAgICAgICAgIGNoZWNrUmVz
dWx0KEAiYiBpbnN0YW5jZW9mIENsYXNzQiIsIFtiIGlzSW5zdGFuY2VPZjpjb250ZXh0W0AiQ2xh
c3NCIl1dKTsKQEAgLTExMDksNiArMTE0MSwxNSBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkK
ICAgICAgICAgICAgIH0gXAogICAgICAgICB9KSgpIl07CiAgICAgICAgIGNoZWNrUmVzdWx0KEAi
c2hvdWxkbid0IGJlIGFibGUgdG8gY29uc3RydWN0IENsYXNzQyIsICFbY2FuQ29uc3RydWN0Q2xh
c3NDIHRvQm9vbF0pOworICAgICAgICBKU1ZhbHVlICpjYW5Db25zdHJ1Y3RDbGFzc0NQcmltZSA9
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiKGZ1bmN0aW9uKCkgeyBcCisgICAgICAgICAgICB0
cnkgeyBcCisgICAgICAgICAgICAgICAgKG5ldyBDbGFzc0NQcmltZSgxKSk7IFwKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsgXAorICAgICAgICAgICAgfSBjYXRjaChlKSB7IFwKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9KSgp
Il07CisgICAgICAgIGNoZWNrUmVzdWx0KEAic2hvdWxkbid0IGJlIGFibGUgdG8gY29uc3RydWN0
IENsYXNzQ1ByaW1lIiwgIVtjYW5Db25zdHJ1Y3RDbGFzc0NQcmltZSB0b0Jvb2xdKTsKICAgICB9
CiAKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
</data>
<flag name="review"
          id="239115"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>