<?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>122561</bug_id>
          
          <creation_ts>2013-10-09 10:54:23 -0700</creation_ts>
          <short_desc>Objective-C API: blocks aren&apos;t callable via &apos;new&apos;</short_desc>
          <delta_ts>2013-10-10 11:18:45 -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>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>commit-queue</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>937988</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-09 10:54:23 -0700</bug_when>
    <thetext>Currently the only way for clients to vend new native objects to JavaScript code is via factory methods in the form of exported class methods or blocks. Blocks can be called like normal functions from JavaScript code, but they cannot be invoked with &apos;new&apos;. This would give a simple way for clients to expose constructor-like behavior to their JavaScript code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937995</commentid>
    <comment_count>1</comment_count>
      <attachid>213795</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-09 11:02:49 -0700</bug_when>
    <thetext>Created attachment 213795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937996</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-09 11:03:06 -0700</bug_when>
    <thetext>&lt;rdar://problem/14130717&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938016</commentid>
    <comment_count>3</comment_count>
      <attachid>213795</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-09 12:17:11 -0700</bug_when>
    <thetext>Comment on attachment 213795
Patch

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

r=me

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:496
&gt; +    JSGlobalContextRef contextRef = [context JSGlobalContextRef];
&gt; +    if (*exception) {
&gt; +        ::JSValue *bogusObject = [::JSValue valueWithNewObjectInContext:context];
&gt; +        return JSValueToObject(contextRef, [bogusObject JSValueRef], NULL);
&gt; +    }
&gt; +
&gt; +    if (!JSValueIsObject(contextRef, result)) {
&gt; +        *exception = toRef(JSC::createTypeError(toJS(contextRef), &quot;Objective-C blocks called as constructors must return an object.&quot;));
&gt; +        ::JSValue *bogusObject = [::JSValue valueWithNewObjectInContext:context];
&gt; +        return JSValueToObject(contextRef, [bogusObject JSValueRef], NULL);
&gt; +    }

Can we get away with just returning NULL here? In general, the C API allows a client to return NULL when throwing an exception. I think that would be nicer than making a bogus object.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:497
&gt; +    return JSValueToObject(contextRef, result, exception);

This can just be a cast, since you&apos;ve checked JSValueIsObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938055</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-09 13:38:54 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 213795 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=213795&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:496
&gt; &gt; +    JSGlobalContextRef contextRef = [context JSGlobalContextRef];
&gt; &gt; +    if (*exception) {
&gt; &gt; +        ::JSValue *bogusObject = [::JSValue valueWithNewObjectInContext:context];
&gt; &gt; +        return JSValueToObject(contextRef, [bogusObject JSValueRef], NULL);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    if (!JSValueIsObject(contextRef, result)) {
&gt; &gt; +        *exception = toRef(JSC::createTypeError(toJS(contextRef), &quot;Objective-C blocks called as constructors must return an object.&quot;));
&gt; &gt; +        ::JSValue *bogusObject = [::JSValue valueWithNewObjectInContext:context];
&gt; &gt; +        return JSValueToObject(contextRef, [bogusObject JSValueRef], NULL);
&gt; &gt; +    }
&gt; 
&gt; Can we get away with just returning NULL here? In general, the C API allows a client to return NULL when throwing an exception. I think that would be nicer than making a bogus object.

I ran into an issue where if I returned NULL, the caller (APICallbackFunction::construct) would see the null and throw a *different* TypeError than the one I wanted to throw. Maybe we could just change APICallbackFunction::construct to allow NULL?

&gt; 
&gt; &gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:497
&gt; &gt; +    return JSValueToObject(contextRef, result, exception);
&gt; 
&gt; This can just be a cast, since you&apos;ve checked JSValueIsObject.

Okiedokie.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938111</commentid>
    <comment_count>5</comment_count>
      <attachid>213826</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-09 15:44:02 -0700</bug_when>
    <thetext>Created attachment 213826
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938112</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-09 15:45:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=213826) [details]
&gt; Patch

I uploaded another patch for review because I changed the part where we create the block automatically add a new, empty object as the .prototype property of the block and to set the .constructor property on that prototype object properly rather than forcing the client to do it themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938113</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-09 15:49:24 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Created an attachment (id=213826) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; I uploaded another patch for review because I changed the part where we create the block automatically add a new, empty object as the .prototype property of the block and to set the .constructor property on that prototype object properly rather than forcing the client to do all of that themselves.

...I changed the part where we create the block automatically TO add a new, empty...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938118</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-09 15:57:48 -0700</bug_when>
    <thetext>&gt; &gt; Can we get away with just returning NULL here? In general, the C API allows a client to return NULL when throwing an exception. I think that would be nicer than making a bogus object.
&gt; 
&gt; I ran into an issue where if I returned NULL, the caller (APICallbackFunction::construct) would see the null and throw a *different* TypeError than the one I wanted to throw. Maybe we could just change APICallbackFunction::construct to allow NULL?

I think it&apos;s appropriate for APICallbackFunction::construct to allow NULL if and only if an exception has been thrown. So, you just have to change the &quot;if (exception)&quot; block to return explicitly, to avoid throwing a new exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938119</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-09 16:00:51 -0700</bug_when>
    <thetext>&gt; I think it&apos;s appropriate for APICallbackFunction::construct to allow NULL if and only if an exception has been thrown. So, you just have to change the &quot;if (exception)&quot; block to return explicitly, to avoid throwing a new exception.

... which is a good thing to do anyway, since returning an exception is supposed to mean &quot;don&apos;t use the value I returned -- it&apos;s bogus&quot;. We want to return some value other than result, since result is bogus. Looks like we return the exception object when we throw a type error, so we should probably return the exception object in this case as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938121</commentid>
    <comment_count>10</comment_count>
      <attachid>213828</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-10-09 16:07:04 -0700</bug_when>
    <thetext>Created attachment 213828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938431</commentid>
    <comment_count>11</comment_count>
      <attachid>213828</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-10 11:18:43 -0700</bug_when>
    <thetext>Comment on attachment 213828
Patch

Clearing flags on attachment: 213828

Committed r157234: &lt;http://trac.webkit.org/changeset/157234&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938432</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-10 11:18:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213795</attachid>
            <date>2013-10-09 11:02:49 -0700</date>
            <delta_ts>2013-10-09 15:44:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122561-20131009110250.patch</filename>
            <type>text/plain</type>
            <size>18060</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDEzLTEwLTA5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBibG9ja3MgYXJlbid0IGNhbGxhYmxlIHZpYSAnbmV3
JworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNTYx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVu
dGx5IHRoZSBvbmx5IHdheSBmb3IgY2xpZW50cyB0byB2ZW5kIG5ldyBuYXRpdmUgb2JqZWN0cyB0
byBKYXZhU2NyaXB0IGNvZGUgCisgICAgICAgIGlzIHZpYSBmYWN0b3J5IG1ldGhvZHMgaW4gdGhl
IGZvcm0gb2YgZXhwb3J0ZWQgY2xhc3MgbWV0aG9kcyBvciBibG9ja3MuIEJsb2NrcyBjYW4gCisg
ICAgICAgIGJlIGNhbGxlZCBsaWtlIG5vcm1hbCBmdW5jdGlvbnMgZnJvbSBKYXZhU2NyaXB0IGNv
ZGUsIGJ1dCB0aGV5IGNhbm5vdCBiZSBpbnZva2VkIAorICAgICAgICB3aXRoICduZXcnLiBUaGlz
IHdvdWxkIGdpdmUgYSBzaW1wbGUgd2F5IGZvciBjbGllbnRzIHRvIGV4cG9zZSBjb25zdHJ1Y3Rv
ci1saWtlIAorICAgICAgICBiZWhhdmlvciB0byB0aGVpciBKYXZhU2NyaXB0IGNvZGUuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHRoZSBhYmlsaXR5IGZvciBibG9ja3MgdG8gYmUgaW52b2tl
ZCBhcyBpZiB0aGV5IHdlcmUgYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgQmxvY2tzIGludm9rZWQg
YXMgY29uc3RydWN0b3JzIGFyZSByZXF1aXJlZCB0byByZXR1cm4gYW4gb2JqZWN0LiBJZiB0aGUg
YmxvY2sgZG9lc24ndAorICAgICAgICByZXR1cm4gYW4gb2JqZWN0IHRoZW4gYW4gZXJyb3IgaXMg
dGhyb3duLiBUaGUgJ3RoaXMnIG9iamVjdCBpcyBub3QgcHJvdmlkZWQgdG8gdGhlIAorICAgICAg
ICBibG9jayBhbmQgbXVzdCBiZSBjcmVhdGVkIHdpdGhpbiB0aGUgYmxvY2sgaXRzZWxmLiBUaGUg
YmxvY2sncyBwcm90b3R5cGUgaXMgbm90IAorICAgICAgICBpbml0aWFsbHkgc2V0IGNvcnJlY3Rs
eSB0byBhbGxvdyBmb3IgaW5zdGFuY2VvZiB0ZXN0aW5nLiBUaGUgY2xpZW50IG11c3Qgc2V0IAor
ICAgICAgICB0aGUgJ3Byb3RvdHlwZScgZmllbGQgb24gdGhlIGJsb2NrIG1hbnVhbGx5IHRoZW1z
ZWx2ZXMgKHNlZSB0aGUgYWRkZWQgdGVzdCBjYXNlIGZvciAKKyAgICAgICAgYW4gZXhhbXBsZSBv
ZiB0aGlzKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gdW5pZmllcyB0aGUgbmF0aXZlICdj
b25zdHJ1Y3QnIGNhbGxiYWNrIHVzZWQgaW4gYm90aCB0aGUgQyBhbmQgT2JqLUMKKyAgICAgICAg
QVBJcyB1bmRlciB0aGUgQVBJQ2FsbGJhY2tGdW5jdGlvbiBzdHJ1Y3QsIHNpbWlsYXIgdG8gaG93
IHdlIHVuaWZpZWQgdGhlICdjYWxsJyBjYWxsYmFjaworICAgICAgICBiZXR3ZWVuIE9iakNDYWxs
YmFja0Z1bmN0aW9uIGFuZCBKU0NhbGxiYWNrRnVuY3Rpb24gYmVmb3JlLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBhZGRzIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGF0IGRpZmZlcmVudCBibG9j
a3MgZ2VuZXJhdGUgb2JqZWN0cyB0aGF0CisgICAgICAgIGNvcnJlY3RseSBiZWhhdmUgd2hlbiBx
dWVyaWVkIHdpdGggaW5zdGFuY2VvZi4gSXQgYWxzbyBtYWtlcyBzdXJlIHRoYXQgdGhlIGNvcnJl
Y3QgCisgICAgICAgIEpTIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhIGJsb2NrIGZhaWxzIHRv
IHJldHVybiBhbiBvYmplY3QuCisKKyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5o
OgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKToKKyAgICAgICAgKEpT
Qzo6QVBJQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBBUEkvSlNDYWxs
YmFja0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVjdG9y
OjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9y
Lmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0Q2FsbGJh
Y2spOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6
SlNDYWxsYmFja0Z1bmN0aW9uOjpmdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBBUEkvT2Jq
Q0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246
OmZ1bmN0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6
Y29uc3RydWN0Q2FsbGJhY2spOgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5t
bToKKyAgICAgICAgKEpTQzo6b2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpPYmpDQ2FsbGJhY2tGdW5jdGlv
bik6CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisKIDIwMTMtMTAtMDkgIEp1bGllbiBCcmlhbmNlYXUg
IDxqYnJpYW5jZUBjaXNjby5jb20+CiAKICAgICAgICAgW2FybV0gSW52ZXJ0ZWQgc3JjIGFuZCBk
ZXN0IEZQIHJlZ2lzdGVycyBpbiBERkcgc3BlY3VsYXRpdmUgSklUIHdoZW4gdXNpbmcgaGFyZGZw
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYWxsYmFja0Z1bmN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYWxsYmFja0Z1bmN0
aW9uLmgJKHJldmlzaW9uIDE1NzE1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJ
Q2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkFQSVNoaW1zLmgiCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKKyNpbmNsdWRlICJKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzYsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIHN0cnVjdCBBUElDYWxsYmFja0Z1bmN0aW9uIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKik7Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0KEV4ZWNTdGF0ZSopOwogCiB9OwogCkBAIC01Niw3ICs1OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2sKICAgICBKU1ZhbHVlUmVmIHJlc3VsdDsK
ICAgICB7CiAgICAgICAgIEFQSUNhbGxiYWNrU2hpbSBjYWxsYmFja1NoaW0oZXhlYyk7Ci0gICAg
ICAgIHJlc3VsdCA9IGpzQ2FzdDxUKj4odG9KUyhmdW5jdGlvblJlZikpLT5tX2NhbGxiYWNrKGV4
ZWNSZWYsIGZ1bmN0aW9uUmVmLCB0aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMu
ZGF0YSgpLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0ganNDYXN0PFQqPih0b0pTKGZ1
bmN0aW9uUmVmKSktPmZ1bmN0aW9uQ2FsbGJhY2soKShleGVjUmVmLCBmdW5jdGlvblJlZiwgdGhp
c09ialJlZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CiAg
ICAgfQogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKQEAgLTY3LDYgKzY5LDM5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgQVBJQ2FsbGJhY2sKIAogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUyhleGVjLCByZXN1bHQpKTsKIH0KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNvbnN0
cnVjdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gZXhl
Yy0+Y2FsbGVlKCk7CisgICAgSlNDb250ZXh0UmVmIGN0eCA9IHRvUmVmKGV4ZWMpOworICAgIEpT
T2JqZWN0UmVmIGNvbnN0cnVjdG9yUmVmID0gdG9SZWYoY29uc3RydWN0b3IpOworCisgICAgSlNP
YmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrID0ganNDYXN0PFQqPihjb25z
dHJ1Y3RvciktPmNvbnN0cnVjdENhbGxiYWNrKCk7CisgICAgaWYgKGNhbGxiYWNrKSB7CisgICAg
ICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgICAg
ICBWZWN0b3I8SlNWYWx1ZVJlZiwgMTY+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoYXJndW1lbnRDb3VudCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRzLnVu
Y2hlY2tlZEFwcGVuZCh0b1JlZihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSkpOwor
CisgICAgICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgSlNPYmplY3RSZWYg
cmVzdWx0OworICAgICAgICB7CisgICAgICAgICAgICBBUElDYWxsYmFja1NoaW0gY2FsbGJhY2tT
aGltKGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soY3R4LCBjb25zdHJ1Y3Rv
clJlZiwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKKyAgICAgICAgLy8gcmVz
dWx0IG11c3QgYmUgYSB2YWxpZCBKU1ZhbHVlLgorICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlMocmVzdWx0KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodG9KUyhKU09iamVjdE1ha2UoY3R4LCBqc0Nhc3Q8SlNDYWxsYmFja0NvbnN0
cnVjdG9yKj4oY29uc3RydWN0b3IpLT5jbGFzc1JlZigpLCAwKSkpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEFQSUNhbGxiYWNrRnVuY3Rpb25faApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMTU3MTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgiCiAKLSNpbmNs
dWRlICJBUElTaGltcy5oIgorI2luY2x1ZGUgIkFQSUNhbGxiYWNrRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiQVBJU2hpbXMuaCIKICNpbmNsdWRlICJFcnJvci5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC02
NSw0MCArNjYsOSBAQCB2b2lkIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0NlCiAg
ICAgc3RhdGljX2Nhc3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4oY2VsbCktPkpTQ2FsbGJhY2tD
b25zdHJ1Y3Rvcjo6fkpTQ2FsbGJhY2tDb25zdHJ1Y3RvcigpOwogfQogCi1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0NhbGxiYWNrKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBKU09iamVjdCogY29uc3RydWN0b3IgPSBleGVjLT5jYWxsZWUoKTsKLSAgICBK
U0NvbnRleHRSZWYgY3R4ID0gdG9SZWYoZXhlYyk7Ci0gICAgSlNPYmplY3RSZWYgY29uc3RydWN0
b3JSZWYgPSB0b1JlZihjb25zdHJ1Y3Rvcik7Ci0KLSAgICBKU09iamVjdENhbGxBc0NvbnN0cnVj
dG9yQ2FsbGJhY2sgY2FsbGJhY2sgPSBqc0Nhc3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4oY29u
c3RydWN0b3IpLT5jYWxsYmFjaygpOwotICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBzaXpl
X3QgYXJndW1lbnRDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAgVmVjdG9y
PEpTVmFsdWVSZWYsIDE2PiBhcmd1bWVudHM7Ci0gICAgICAgIGFyZ3VtZW50cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGFyZ3VtZW50Q291bnQpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50cy51bmNoZWNrZWRB
cHBlbmQodG9SZWYoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkpKTsKLQotICAgICAg
ICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgICAgIEpTT2JqZWN0UmVmIHJlc3VsdDsK
LSAgICAgICAgewotICAgICAgICAgICAgQVBJQ2FsbGJhY2tTaGltIGNhbGxiYWNrU2hpbShleGVj
KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGN0eCwgY29uc3RydWN0b3JSZWYsIGFy
Z3VtZW50Q291bnQsIGFyZ3VtZW50cy5kYXRhKCksICZleGNlcHRpb24pOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIHRvSlMoZXhlYywgZXhjZXB0aW9uKSk7Ci0gICAgICAgIC8vIHJlc3VsdCBtdXN0
IGJlIGEgdmFsaWQgSlNWYWx1ZS4KLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTKHJlc3VsdCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRvSlMoSlNPYmplY3RNYWtlKGN0eCwganNDYXN0PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcio+
KGNvbnN0cnVjdG9yKS0+Y2xhc3NSZWYoKSwgMCkpKTsKLX0KLQogQ29uc3RydWN0VHlwZSBKU0Nh
bGxiYWNrQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSkKIHsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9
IGNvbnN0cnVjdEpTQ2FsbGJhY2s7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24g
PSBBUElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yPjsK
ICAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTU3
MTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksMTIgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0
IEFQSUNhbGxiYWNrRnVuY3Rpb247CisKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKIAorICAgIEpTT2JqZWN0Q2FsbEFz
Q29uc3RydWN0b3JDYWxsYmFjayBjb25zdHJ1Y3RDYWxsYmFjaygpIHsgcmV0dXJuIG1fY2FsbGJh
Y2s7IH0KKwogICAgIEpTQ2xhc3NSZWYgbV9jbGFzczsKICAgICBKU09iamVjdENhbGxBc0NvbnN0
cnVjdG9yQ2FsbGJhY2sgbV9jYWxsYmFjazsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE1NzE1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDYgKzUzLDggQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOwogCisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlv
bkNhbGxiYWNrIGZ1bmN0aW9uQ2FsbGJhY2soKSB7IHJldHVybiBtX2NhbGxiYWNrOyB9CisKICAg
ICBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJ
KHJldmlzaW9uIDE1NzE1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxi
YWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTIgKzYxLDE3IEBAIHB1YmxpYzoK
ICAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwqIGltcGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0
KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2ssIFBhc3NPd25QdHI8T2Jq
Q0NhbGxiYWNrRnVuY3Rpb25JbXBsPik7CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjaywgSlNPYmplY3RD
YWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrLCBQYXNzT3duUHRyPE9iakNDYWxsYmFja0Z1bmN0aW9u
SW1wbD4pOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0Nl
bGwqLCBDYWxsRGF0YSYpOworICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERh
dGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogCi0gICAgSlNPYmplY3RDYWxsQXNGdW5jdGlv
bkNhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNr
IGZ1bmN0aW9uQ2FsbGJhY2soKSB7IHJldHVybiBtX2Z1bmN0aW9uQ2FsbGJhY2s7IH0KKyAgICBK
U09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY29uc3RydWN0Q2FsbGJhY2soKSB7IHJl
dHVybiBtX2NvbnN0cnVjdENhbGxiYWNrOyB9CisKKyAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9u
Q2FsbGJhY2sgbV9mdW5jdGlvbkNhbGxiYWNrOworICAgIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0
b3JDYWxsYmFjayBtX2NvbnN0cnVjdENhbGxiYWNrOwogICAgIE93blB0cjxPYmpDQ2FsbGJhY2tG
dW5jdGlvbkltcGw+IG1faW1wbDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkocmV2aXNpb24gMTU3MTU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDY1LDE4ICs0NjUsNTEgQEAgc3RhdGljIEpTVmFsdWVSZWYgb2JqQ0NhbGxi
YWNrRnVuY3Rpb25DYQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBKU09iamVjdFJl
ZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0NvbnN0cnVjdG9yKEpTQ29udGV4dFJlZiBjYWxs
ZXJDb250ZXh0LCBKU09iamVjdFJlZiBjb25zdHJ1Y3Rvciwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICBKU0M6OkFQSUVudHJ5U2hpbSBlbnRyeVNoaW0odG9KUyhjYWxsZXJDb250ZXh0KSk7CisK
KyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxPYmpDQ2Fs
bGJhY2tGdW5jdGlvbio+KHRvSlMoY29uc3RydWN0b3IpKTsKKyAgICBPYmpDQ2FsbGJhY2tGdW5j
dGlvbkltcGwqIGltcGwgPSBjYWxsYmFjay0+aW1wbCgpOworICAgIEpTQ29udGV4dCAqY29udGV4
dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYo
dG9KUyhjYWxsZXJDb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkp
XTsKKworICAgIENhbGxiYWNrRGF0YSBjYWxsYmFja0RhdGE7CisgICAgSlNWYWx1ZVJlZiByZXN1
bHQ7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFtjb250ZXh0IGJlZ2luQ2FsbGJh
Y2tXaXRoRGF0YTomY2FsbGJhY2tEYXRhIHRoaXNWYWx1ZTpuaWwgYXJndW1lbnRDb3VudDphcmd1
bWVudENvdW50IGFyZ3VtZW50czphcmd1bWVudHNdOworICAgICAgICByZXN1bHQgPSBpbXBsLT5j
YWxsKGNvbnRleHQsIE5VTEwsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsK
KyAgICAgICAgaWYgKGNvbnRleHQuZXhjZXB0aW9uKQorICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHZhbHVlSW50ZXJuYWxWYWx1ZShjb250ZXh0LmV4Y2VwdGlvbik7CisgICAgICAgIFtjb250ZXh0
IGVuZENhbGxiYWNrV2l0aERhdGE6JmNhbGxiYWNrRGF0YV07CisgICAgfQorCisgICAgSlNHbG9i
YWxDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdOwor
ICAgIGlmICgqZXhjZXB0aW9uKSB7CisgICAgICAgIDo6SlNWYWx1ZSAqYm9ndXNPYmplY3QgPSBb
OjpKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVUb09iamVjdChjb250ZXh0UmVmLCBbYm9ndXNPYmplY3QgSlNWYWx1ZVJl
Zl0sIE5VTEwpOworICAgIH0KKworICAgIGlmICghSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHRSZWYs
IHJlc3VsdCkpIHsKKyAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVy
cm9yKHRvSlMoY29udGV4dFJlZiksICJPYmplY3RpdmUtQyBibG9ja3MgY2FsbGVkIGFzIGNvbnN0
cnVjdG9ycyBtdXN0IHJldHVybiBhbiBvYmplY3QuIikpOworICAgICAgICA6OkpTVmFsdWUgKmJv
Z3VzT2JqZWN0ID0gWzo6SlNWYWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4
dF07CisgICAgICAgIHJldHVybiBKU1ZhbHVlVG9PYmplY3QoY29udGV4dFJlZiwgW2JvZ3VzT2Jq
ZWN0IEpTVmFsdWVSZWZdLCBOVUxMKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWVUb09iamVj
dChjb250ZXh0UmVmLCByZXN1bHQsIGV4Y2VwdGlvbik7Cit9CisKIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpzX2luZm8gPSB7ICJDYWxsYmFja0Z1bmN0aW9uIiwg
JkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShPYmpDQ2FsbGJhY2tGdW5j
dGlvbikgfTsKIAotT2JqQ0NhbGxiYWNrRnVuY3Rpb246Ok9iakNDYWxsYmFja0Z1bmN0aW9uKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2Fs
bEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgUGFzc093blB0cjxPYmpDQ2FsbGJhY2tGdW5j
dGlvbkltcGw+IGltcGwpCitPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6T2JqQ0NhbGxiYWNrRnVuY3Rp
b24oSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGZ1bmN0aW9uQ2FsbGJhY2ssIEpTT2JqZWN0Q2FsbEFz
Q29uc3RydWN0b3JDYWxsYmFjayBjb25zdHJ1Y3RDYWxsYmFjaywgUGFzc093blB0cjxPYmpDQ2Fs
bGJhY2tGdW5jdGlvbkltcGw+IGltcGwpCiAgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QtPm9i
amNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkpCi0gICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNr
KQorICAgICwgbV9mdW5jdGlvbkNhbGxiYWNrKGZ1bmN0aW9uQ2FsbGJhY2spCisgICAgLCBtX2Nv
bnN0cnVjdENhbGxiYWNrKGNvbnN0cnVjdENhbGxiYWNrKQogICAgICwgbV9pbXBsKGltcGwpCiB7
CiB9CiAKIE9iakNDYWxsYmFja0Z1bmN0aW9uKiBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc093blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+IGltcGwpCiB7
Ci0gICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8T2JqQ0NhbGxiYWNrRnVuY3Rpb24+KHZtLmhlYXApKSBPYmpDQ2FsbGJhY2tGdW5j
dGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9u
LCBpbXBsKTsKKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxPYmpDQ2FsbGJhY2tGdW5jdGlvbj4odm0uaGVhcCkpIE9iakNDYWxs
YmFja0Z1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2FsbEFz
RnVuY3Rpb24sIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2FsbEFzQ29uc3RydWN0b3IsIGltcGwpOwog
ICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7CiAgICAgcmV0dXJuIGZ1bmN0
aW9uOwogfQpAQCAtNDkyLDYgKzUyNSwxNSBAQCBDYWxsVHlwZSBPYmpDQ2FsbGJhY2tGdW5jdGlv
bjo6Z2V0Q2FsbERhCiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKIH0KIAorQ29uc3RydWN0VHlw
ZSBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqIGNlbGwsIENv
bnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24q
IGNhbGxiYWNrID0ganNDYXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4oY2VsbCk7CisgICAgaWYg
KCFjYWxsYmFjay0+aW1wbCgpLT53cmFwcGVkQmxvY2soKSkKKyAgICAgICAgcmV0dXJuIEJhc2U6
OmdldENvbnN0cnVjdERhdGEoY2VsbCwgY29uc3RydWN0RGF0YSk7CisgICAgY29uc3RydWN0RGF0
YS5uYXRpdmUuZnVuY3Rpb24gPSBBUElDYWxsYmFja0Z1bmN0aW9uOjpjb25zdHJ1Y3Q8T2JqQ0Nh
bGxiYWNrRnVuY3Rpb24+OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwogSlNW
YWx1ZVJlZiBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw6OmNhbGwoSlNDb250ZXh0ICpjb250ZXh0
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEpTR2xv
YmFsQ29udGV4dFJlZiBjb250ZXh0UmVmID0gW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlz
aW9uIDE1NzE1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5t
bQkod29ya2luZyBjb3B5KQpAQCAtOTA2LDYgKzkwNiw2MCBAQCB2b2lkIHRlc3RPYmplY3RpdmVD
QVBJKCkKICAgICAgICAgICAgIFtjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZl
cmVuY2U6bWFuYWdlZFRlc3RPYmplY3Qgd2l0aE93bmVyOnRlc3RPYmplY3RdOwogICAgICAgICB9
CiAgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29u
dGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgY29udGV4dFtAIk15Q2xh
c3MiXSA9IF57CisgICAgICAgICAgICBKU1ZhbHVlICpuZXdUaGlzID0gW0pTVmFsdWUgdmFsdWVX
aXRoTmV3T2JqZWN0SW5Db250ZXh0OltKU0NvbnRleHQgY3VycmVudENvbnRleHRdXTsKKyAgICAg
ICAgICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0UmVmID0gW1tKU0NvbnRleHQgY3VycmVu
dENvbnRleHRdIEpTR2xvYmFsQ29udGV4dFJlZl07CisgICAgICAgICAgICBKU09iamVjdFJlZiBu
ZXdUaGlzUmVmID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRSZWYsIFtuZXdUaGlzIEpTVmFsdWVS
ZWZdLCBOVUxMKTsKKyAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHRSZWYs
IG5ld1RoaXNSZWYsIFtbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XVtAIk15Q2xhc3MiXVtAInBy
b3RvdHlwZSJdIEpTVmFsdWVSZWZdKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdUaGlzOworICAg
ICAgICB9OworICAgICAgICBjb250ZXh0W0AiTXlDbGFzcyJdW0AicHJvdG90eXBlIl0gPSBbSlNW
YWx1ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNvbnRl
eHRbQCJNeUNsYXNzIl1bQCJwcm90b3R5cGUiXVtAImNvbnN0cnVjdG9yIl0gPSBjb250ZXh0W0Ai
TXlDbGFzcyJdOworCisgICAgICAgIGNvbnRleHRbQCJNeU90aGVyQ2xhc3MiXSA9IF57CisgICAg
ICAgICAgICBKU1ZhbHVlICpuZXdUaGlzID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5D
b250ZXh0OltKU0NvbnRleHQgY3VycmVudENvbnRleHRdXTsKKyAgICAgICAgICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjb250ZXh0UmVmID0gW1tKU0NvbnRleHQgY3VycmVudENvbnRleHRdIEpTR2xv
YmFsQ29udGV4dFJlZl07CisgICAgICAgICAgICBKU09iamVjdFJlZiBuZXdUaGlzUmVmID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHRSZWYsIFtuZXdUaGlzIEpTVmFsdWVSZWZdLCBOVUxMKTsKKyAg
ICAgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKGNvbnRleHRSZWYsIG5ld1RoaXNSZWYsIFtb
SlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XVtAIk15T3RoZXJDbGFzcyJdW0AicHJvdG90eXBlIl0g
SlNWYWx1ZVJlZl0pOworICAgICAgICAgICAgcmV0dXJuIG5ld1RoaXM7CisgICAgICAgIH07Cisg
ICAgICAgIGNvbnRleHRbQCJNeU90aGVyQ2xhc3MiXVtAInByb3RvdHlwZSJdID0gW0pTVmFsdWUg
dmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjb250ZXh0W0Ai
TXlPdGhlckNsYXNzIl1bQCJwcm90b3R5cGUiXVtAImNvbnN0cnVjdG9yIl0gPSBjb250ZXh0W0Ai
TXlPdGhlckNsYXNzIl07CisKKyAgICAgICAgY29udGV4dC5leGNlcHRpb25IYW5kbGVyID0gXihK
U0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvbikgeworICAgICAgICAgICAgTlNM
b2coQCJFWENFUFRJT046ICVAIiwgW2V4Y2VwdGlvbiB0b1N0cmluZ10pOworICAgICAgICAgICAg
Y29udGV4dC5leGNlcHRpb24gPSBuaWw7CisgICAgICAgIH07CisKKyAgICAgICAgSlNWYWx1ZSAq
Y29uc3RydWN0b3IxID0gY29udGV4dFtAIk15Q2xhc3MiXTsKKyAgICAgICAgSlNWYWx1ZSAqY29u
c3RydWN0b3IyID0gY29udGV4dFtAIk15T3RoZXJDbGFzcyJdOworCisgICAgICAgIEpTVmFsdWUg
KnZhbHVlMSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAibmV3IE15Q2xhc3MoKSJdOworICAg
ICAgICBjaGVja1Jlc3VsdChAInZhbHVlMSBpbnN0YW5jZW9mIE15Q2xhc3MiLCBbdmFsdWUxIGlz
SW5zdGFuY2VPZjpjb25zdHJ1Y3RvcjFdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCIhKHZhbHVl
MSBpbnN0YW5jZW9mIE15T3RoZXJDbGFzcykiLCAhW3ZhbHVlMSBpc0luc3RhbmNlT2Y6Y29uc3Ry
dWN0b3IyXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiTXlDbGFzcy5wcm90b3R5cGUuY29uc3Ry
dWN0b3IgPT09IE15Q2xhc3MiLCBbW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJNeUNsYXNzLnBy
b3RvdHlwZS5jb25zdHJ1Y3RvciA9PT0gTXlDbGFzcyJdIHRvQm9vbF0pOworICAgICAgICBjaGVj
a1Jlc3VsdChAIk15Q2xhc3MgaW5zdGFuY2VvZiBGdW5jdGlvbiIsIFtbY29udGV4dCBldmFsdWF0
ZVNjcmlwdDpAIk15Q2xhc3MgaW5zdGFuY2VvZiBGdW5jdGlvbiJdIHRvQm9vbF0pOworCisgICAg
ICAgIEpTVmFsdWUgKnZhbHVlMiA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAibmV3IE15T3Ro
ZXJDbGFzcygpIl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAidmFsdWUyIGluc3RhbmNlb2YgTXlP
dGhlckNsYXNzIiwgW3ZhbHVlMiBpc0luc3RhbmNlT2Y6Y29uc3RydWN0b3IyXSk7CisgICAgICAg
IGNoZWNrUmVzdWx0KEAiISh2YWx1ZTIgaW5zdGFuY2VvZiBNeUNsYXNzKSIsICFbdmFsdWUyIGlz
SW5zdGFuY2VPZjpjb25zdHJ1Y3RvcjFdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJNeU90aGVy
Q2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID09PSBNeU90aGVyQ2xhc3MiLCBbW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJNeU90aGVyQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID09PSBN
eU90aGVyQ2xhc3MiXSB0b0Jvb2xdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJNeU90aGVyQ2xh
c3MgaW5zdGFuY2VvZiBGdW5jdGlvbiIsIFtbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIk15T3Ro
ZXJDbGFzcyBpbnN0YW5jZW9mIEZ1bmN0aW9uIl0gdG9Cb29sXSk7CisgICAgfQorCisgICAgQGF1
dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgY29udGV4dFtAIk15Q2xhc3MiXSA9IF57CisgICAgICAg
ICAgICBOU0xvZyhAIkknbSBpbnRlbnRpb25hbGx5IG5vdCByZXR1cm5pbmcgYW55dGhpbmcuIik7
CisgICAgICAgIH07CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAibmV3IE15Q2xhc3MoKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInJlc3VsdCA9
PT0gdW5kZWZpbmVkIiwgW3Jlc3VsdCBpc1VuZGVmaW5lZF0pOworICAgICAgICBjaGVja1Jlc3Vs
dChAImV4Y2VwdGlvbi5tZXNzYWdlIGlzIGNvcnJlY3QnIiwgY29udGV4dC5leGNlcHRpb24gCisg
ICAgICAgICAgICAmJiBbQCJPYmplY3RpdmUtQyBibG9ja3MgY2FsbGVkIGFzIGNvbnN0cnVjdG9y
cyBtdXN0IHJldHVybiBhbiBvYmplY3QuIiBpc0VxdWFsVG9TdHJpbmc6W2NvbnRleHQuZXhjZXB0
aW9uW0AibWVzc2FnZSJdIHRvU3RyaW5nXV0pOworICAgIH0KIH0KIAogI2Vsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213826</attachid>
            <date>2013-10-09 15:44:02 -0700</date>
            <delta_ts>2013-10-09 16:07:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122561-20131009154402.patch</filename>
            <type>text/plain</type>
            <size>18460</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBA
CisyMDEzLTEwLTA5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBibG9ja3MgYXJlbid0IGNhbGxhYmxlIHZpYSAnbmV3
JworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNTYx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVu
dGx5IHRoZSBvbmx5IHdheSBmb3IgY2xpZW50cyB0byB2ZW5kIG5ldyBuYXRpdmUgb2JqZWN0cyB0
byBKYXZhU2NyaXB0IGNvZGUgCisgICAgICAgIGlzIHZpYSBmYWN0b3J5IG1ldGhvZHMgaW4gdGhl
IGZvcm0gb2YgZXhwb3J0ZWQgY2xhc3MgbWV0aG9kcyBvciBibG9ja3MuIEJsb2NrcyBjYW4gCisg
ICAgICAgIGJlIGNhbGxlZCBsaWtlIG5vcm1hbCBmdW5jdGlvbnMgZnJvbSBKYXZhU2NyaXB0IGNv
ZGUsIGJ1dCB0aGV5IGNhbm5vdCBiZSBpbnZva2VkIAorICAgICAgICB3aXRoICduZXcnLiBUaGlz
IHdvdWxkIGdpdmUgYSBzaW1wbGUgd2F5IGZvciBjbGllbnRzIHRvIGV4cG9zZSBjb25zdHJ1Y3Rv
ci1saWtlIAorICAgICAgICBiZWhhdmlvciB0byB0aGVpciBKYXZhU2NyaXB0IGNvZGUuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHRoZSBhYmlsaXR5IGZvciBibG9ja3MgdG8gYmUgaW52b2tl
ZCBhcyBpZiB0aGV5IHdlcmUgYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgQmxvY2tzIGludm9rZWQg
YXMgY29uc3RydWN0b3JzIGFyZSByZXF1aXJlZCB0byByZXR1cm4gYW4gb2JqZWN0LiBJZiB0aGUg
YmxvY2sgZG9lc24ndAorICAgICAgICByZXR1cm4gYW4gb2JqZWN0IHRoZW4gYW4gZXJyb3IgaXMg
dGhyb3duLiBUaGUgJ3RoaXMnIG9iamVjdCBpcyBub3QgcHJvdmlkZWQgdG8gdGhlIAorICAgICAg
ICBibG9jayBhbmQgbXVzdCBiZSBjcmVhdGVkIHdpdGhpbiB0aGUgYmxvY2sgaXRzZWxmLiAKKwor
ICAgICAgICBUaGlzIHBhdGNoIGFsc28gdW5pZmllcyB0aGUgbmF0aXZlICdjb25zdHJ1Y3QnIGNh
bGxiYWNrIHVzZWQgaW4gYm90aCB0aGUgQyBhbmQgT2JqLUMKKyAgICAgICAgQVBJcyB1bmRlciB0
aGUgQVBJQ2FsbGJhY2tGdW5jdGlvbiBzdHJ1Y3QsIHNpbWlsYXIgdG8gaG93IHdlIHVuaWZpZWQg
dGhlICdjYWxsJyBjYWxsYmFjaworICAgICAgICBiZXR3ZWVuIE9iakNDYWxsYmFja0Z1bmN0aW9u
IGFuZCBKU0NhbGxiYWNrRnVuY3Rpb24gYmVmb3JlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byBhZGRzIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGF0IGRpZmZlcmVudCBibG9ja3MgZ2VuZXJhdGUg
b2JqZWN0cyB0aGF0CisgICAgICAgIGNvcnJlY3RseSBiZWhhdmUgd2hlbiBxdWVyaWVkIHdpdGgg
aW5zdGFuY2VvZi4gSXQgYWxzbyBtYWtlcyBzdXJlIHRoYXQgdGhlIGNvcnJlY3QgCisgICAgICAg
IEpTIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhIGJsb2NrIGZhaWxzIHRvIHJldHVybiBhbiBv
YmplY3QuCisKKyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAo
SlNDOjpBUElDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJh
Y2tGdW5jdGlvbjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1
Y3REYXRhKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAg
IChKU0M6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0Q2FsbGJhY2spOgorICAgICAg
ICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1
bmN0aW9uOjpmdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVu
Y3Rpb24uaDoKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmZ1bmN0aW9uQ2Fs
bGJhY2spOgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0Q2Fs
bGJhY2spOgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbToKKyAgICAgICAg
KEpTQzo6b2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChK
U0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbik6CisgICAgICAg
IChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpPYmpD
Q2FsbGJhY2tGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgICogQVBJL3Rlc3Rz
L3Rlc3RhcGkubW06CisKIDIwMTMtMTAtMDkgIEp1bGllbiBCcmlhbmNlYXUgIDxqYnJpYW5jZUBj
aXNjby5jb20+CiAKICAgICAgICAgW2FybV0gSW52ZXJ0ZWQgc3JjIGFuZCBkZXN0IEZQIHJlZ2lz
dGVycyBpbiBERkcgc3BlY3VsYXRpdmUgSklUIHdoZW4gdXNpbmcgaGFyZGZwLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlz
aW9uIDE1NzE1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FsbGJhY2tGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQ2Fz
dC5oIgogI2luY2x1ZGUgIkFQSVNoaW1zLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRl
ICJKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtMzYsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0cnVjdCBB
UElDYWxsYmFja0Z1bmN0aW9uIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKik7Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEV4
ZWNTdGF0ZSopOwogCiB9OwogCkBAIC01Niw3ICs1OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgQVBJQ2FsbGJhY2sKICAgICBKU1ZhbHVlUmVmIHJlc3VsdDsKICAgICB7CiAgICAg
ICAgIEFQSUNhbGxiYWNrU2hpbSBjYWxsYmFja1NoaW0oZXhlYyk7Ci0gICAgICAgIHJlc3VsdCA9
IGpzQ2FzdDxUKj4odG9KUyhmdW5jdGlvblJlZikpLT5tX2NhbGxiYWNrKGV4ZWNSZWYsIGZ1bmN0
aW9uUmVmLCB0aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCAmZXhj
ZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0ganNDYXN0PFQqPih0b0pTKGZ1bmN0aW9uUmVmKSkt
PmZ1bmN0aW9uQ2FsbGJhY2soKShleGVjUmVmLCBmdW5jdGlvblJlZiwgdGhpc09ialJlZiwgYXJn
dW1lbnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CiAgICAgfQogICAgIGlm
IChleGNlcHRpb24pCiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgdG9K
UyhleGVjLCBleGNlcHRpb24pKTsKQEAgLTY3LDYgKzY5LDM5IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgQVBJQ2FsbGJhY2sKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UyhleGVjLCByZXN1bHQpKTsKIH0KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNvbnN0cnVjdChFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gZXhlYy0+Y2FsbGVlKCk7
CisgICAgSlNDb250ZXh0UmVmIGN0eCA9IHRvUmVmKGV4ZWMpOworICAgIEpTT2JqZWN0UmVmIGNv
bnN0cnVjdG9yUmVmID0gdG9SZWYoY29uc3RydWN0b3IpOworCisgICAgSlNPYmplY3RDYWxsQXND
b25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrID0ganNDYXN0PFQqPihjb25zdHJ1Y3RvciktPmNv
bnN0cnVjdENhbGxiYWNrKCk7CisgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgIHNpemVfdCBh
cmd1bWVudENvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgICAgICBWZWN0b3I8SlNW
YWx1ZVJlZiwgMTY+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoYXJndW1lbnRDb3VudCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJndW1lbnRDb3VudDsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRzLnVuY2hlY2tlZEFwcGVu
ZCh0b1JlZihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSkpOworCisgICAgICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgSlNPYmplY3RSZWYgcmVzdWx0OworICAg
ICAgICB7CisgICAgICAgICAgICBBUElDYWxsYmFja1NoaW0gY2FsbGJhY2tTaGltKGV4ZWMpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soY3R4LCBjb25zdHJ1Y3RvclJlZiwgYXJndW1l
bnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKKyAgICAgICAgLy8gcmVzdWx0IG11c3QgYmUg
YSB2YWxpZCBKU1ZhbHVlLgorICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlMocmVzdWx0KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUyhKU09iamVjdE1ha2UoY3R4LCBqc0Nhc3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4oY29u
c3RydWN0b3IpLT5jbGFzc1JlZigpLCAwKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEFQSUNhbGxiYWNrRnVuY3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTU3
MTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJBUElTaGlt
cy5oIgorI2luY2x1ZGUgIkFQSUNhbGxiYWNrRnVuY3Rpb24uaCIKICNpbmNsdWRlICJBUElDYXN0
LmgiCisjaW5jbHVkZSAiQVBJU2hpbXMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC02NSw0MCArNjYsOSBA
QCB2b2lkIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0NlCiAgICAgc3RhdGljX2Nh
c3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4oY2VsbCktPkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6
fkpTQ2FsbGJhY2tDb25zdHJ1Y3RvcigpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU0NhbGxiYWNrKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBK
U09iamVjdCogY29uc3RydWN0b3IgPSBleGVjLT5jYWxsZWUoKTsKLSAgICBKU0NvbnRleHRSZWYg
Y3R4ID0gdG9SZWYoZXhlYyk7Ci0gICAgSlNPYmplY3RSZWYgY29uc3RydWN0b3JSZWYgPSB0b1Jl
Zihjb25zdHJ1Y3Rvcik7Ci0KLSAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sg
Y2FsbGJhY2sgPSBqc0Nhc3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpLT5j
YWxsYmFjaygpOwotICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICBzaXplX3QgYXJndW1lbnRD
b3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAgVmVjdG9yPEpTVmFsdWVSZWYs
IDE2PiBhcmd1bWVudHM7Ci0gICAgICAgIGFyZ3VtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGFyZ3VtZW50Q291bnQpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50
Q291bnQ7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50cy51bmNoZWNrZWRBcHBlbmQodG9SZWYo
ZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkpKTsKLQotICAgICAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7Ci0gICAgICAgIEpTT2JqZWN0UmVmIHJlc3VsdDsKLSAgICAgICAgewot
ICAgICAgICAgICAgQVBJQ2FsbGJhY2tTaGltIGNhbGxiYWNrU2hpbShleGVjKTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGNhbGxiYWNrKGN0eCwgY29uc3RydWN0b3JSZWYsIGFyZ3VtZW50Q291bnQs
IGFyZ3VtZW50cy5kYXRhKCksICZleGNlcHRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGlmIChl
eGNlcHRpb24pCi0gICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIHRv
SlMoZXhlYywgZXhjZXB0aW9uKSk7Ci0gICAgICAgIC8vIHJlc3VsdCBtdXN0IGJlIGEgdmFsaWQg
SlNWYWx1ZS4KLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKHJl
c3VsdCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoSlNP
YmplY3RNYWtlKGN0eCwganNDYXN0PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9y
KS0+Y2xhc3NSZWYoKSwgMCkpKTsKLX0KLQogQ29uc3RydWN0VHlwZSBKU0NhbGxiYWNrQ29uc3Ry
dWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0
RGF0YSkKIHsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEpT
Q2FsbGJhY2s7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBBUElDYWxsYmFj
a0Z1bmN0aW9uOjpjb25zdHJ1Y3Q8SlNDYWxsYmFja0NvbnN0cnVjdG9yPjsKICAgICByZXR1cm4g
Q29uc3RydWN0VHlwZUhvc3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMTU3MTU2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNTksOCArNTksMTIgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEpTT2JqZWN0OjpT
dHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IEFQSUNhbGxiYWNr
RnVuY3Rpb247CisKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpT
Q2VsbCosIENvbnN0cnVjdERhdGEmKTsKIAorICAgIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JD
YWxsYmFjayBjb25zdHJ1Y3RDYWxsYmFjaygpIHsgcmV0dXJuIG1fY2FsbGJhY2s7IH0KKwogICAg
IEpTQ2xhc3NSZWYgbV9jbGFzczsKICAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJh
Y2sgbV9jYWxsYmFjazsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE1NzE1NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYg
KzUzLDggQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0Nl
bGwqLCBDYWxsRGF0YSYpOwogCisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGZ1
bmN0aW9uQ2FsbGJhY2soKSB7IHJldHVybiBtX2NhbGxiYWNrOyB9CisKICAgICBKU09iamVjdENh
bGxBc0Z1bmN0aW9uQ2FsbGJhY2sgbV9jYWxsYmFjazsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCShyZXZpc2lvbiAxNTcxNTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAt
Mzg3LDggKzM4NywxMyBAQCAtIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0
CiAgICAgQVNTRVJUKFtvYmplY3QgaXNLaW5kT2ZDbGFzczptX2NsYXNzXSk7CiAgICAgQVNTRVJU
KG1fYmxvY2sgPT0gW29iamVjdCBpc0tpbmRPZkNsYXNzOmdldE5TQmxvY2tDbGFzcygpXSk7CiAg
ICAgaWYgKG1fYmxvY2spIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0UmVmIG1ldGhvZCA9IG9iakND
YWxsYmFja0Z1bmN0aW9uRm9yQmxvY2sobV9jb250ZXh0LCBvYmplY3QpKQotICAgICAgICAgICAg
cmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6bWV0aG9kIGluQ29udGV4dDptX2Nv
bnRleHRdOworICAgICAgICBpZiAoSlNPYmplY3RSZWYgbWV0aG9kID0gb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25Gb3JCbG9jayhtX2NvbnRleHQsIG9iamVjdCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
KmNvbnN0cnVjdG9yID0gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjptZXRob2QgaW5Db250
ZXh0Om1fY29udGV4dF07CisgICAgICAgICAgICBKU1ZhbHVlICpwcm90b3R5cGUgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhOZXdPYmplY3RJbkNvbnRleHQ6bV9jb250ZXh0XTsKKyAgICAgICAgICAgIHB1
dE5vbkVudW1lcmFibGUoY29uc3RydWN0b3IsIEAicHJvdG90eXBlIiwgcHJvdG90eXBlKTsKKyAg
ICAgICAgICAgIHB1dE5vbkVudW1lcmFibGUocHJvdG90eXBlLCBAImNvbnN0cnVjdG9yIiwgY29u
c3RydWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgaWYgKCFtX3Byb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE1NzE1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsMTIgKzYxLDE3IEBAIHB1YmxpYzoKICAgICBPYmpDQ2FsbGJhY2tGdW5j
dGlvbkltcGwqIGltcGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgot
ICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdENh
bGxBc0Z1bmN0aW9uQ2FsbGJhY2ssIFBhc3NPd25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBs
Pik7CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjaywgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxi
YWNrLCBQYXNzT3duUHRyPE9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbD4pOwogCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOworICAg
IHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0
RGF0YSYpOwogCi0gICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIG1fY2FsbGJhY2s7
CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGZ1bmN0aW9uQ2FsbGJhY2soKSB7
IHJldHVybiBtX2Z1bmN0aW9uQ2FsbGJhY2s7IH0KKyAgICBKU09iamVjdENhbGxBc0NvbnN0cnVj
dG9yQ2FsbGJhY2sgY29uc3RydWN0Q2FsbGJhY2soKSB7IHJldHVybiBtX2NvbnN0cnVjdENhbGxi
YWNrOyB9CisKKyAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgbV9mdW5jdGlvbkNh
bGxiYWNrOworICAgIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBtX2NvbnN0cnVj
dENhbGxiYWNrOwogICAgIE93blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+IG1faW1wbDsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rp
b24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJh
Y2tGdW5jdGlvbi5tbQkocmV2aXNpb24gMTU3MTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDY1LDE4ICs0
NjUsNTEgQEAgc3RhdGljIEpTVmFsdWVSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25DYQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlv
bkNhbGxBc0NvbnN0cnVjdG9yKEpTQ29udGV4dFJlZiBjYWxsZXJDb250ZXh0LCBKU09iamVjdFJl
ZiBjb25zdHJ1Y3Rvciwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU0M6OkFQSUVudHJ5U2hp
bSBlbnRyeVNoaW0odG9KUyhjYWxsZXJDb250ZXh0KSk7CisKKyAgICBPYmpDQ2FsbGJhY2tGdW5j
dGlvbiogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KHRvSlMo
Y29uc3RydWN0b3IpKTsKKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGwqIGltcGwgPSBjYWxs
YmFjay0+aW1wbCgpOworICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4
dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYodG9KUyhjYWxsZXJDb250ZXh0KS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpXTsKKworICAgIENhbGxiYWNrRGF0
YSBjYWxsYmFja0RhdGE7CisgICAgSlNWYWx1ZVJlZiByZXN1bHQ7CisgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisgICAgICAgIFtjb250ZXh0IGJlZ2luQ2FsbGJhY2tXaXRoRGF0YTomY2FsbGJhY2tE
YXRhIHRoaXNWYWx1ZTpuaWwgYXJndW1lbnRDb3VudDphcmd1bWVudENvdW50IGFyZ3VtZW50czph
cmd1bWVudHNdOworICAgICAgICByZXN1bHQgPSBpbXBsLT5jYWxsKGNvbnRleHQsIE5VTEwsIGFy
Z3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGNvbnRleHQu
ZXhjZXB0aW9uKQorICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHZhbHVlSW50ZXJuYWxWYWx1ZShj
b250ZXh0LmV4Y2VwdGlvbik7CisgICAgICAgIFtjb250ZXh0IGVuZENhbGxiYWNrV2l0aERhdGE6
JmNhbGxiYWNrRGF0YV07CisgICAgfQorCisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRS
ZWYgPSBbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdOworICAgIGlmICgqZXhjZXB0aW9uKSB7
CisgICAgICAgIDo6SlNWYWx1ZSAqYm9ndXNPYmplY3QgPSBbOjpKU1ZhbHVlIHZhbHVlV2l0aE5l
d09iamVjdEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgcmV0dXJuIChKU09iamVjdFJlZilb
Ym9ndXNPYmplY3QgSlNWYWx1ZVJlZl07CisgICAgfQorCisgICAgaWYgKCFKU1ZhbHVlSXNPYmpl
Y3QoY29udGV4dFJlZiwgcmVzdWx0KSkgeworICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlND
OjpjcmVhdGVUeXBlRXJyb3IodG9KUyhjb250ZXh0UmVmKSwgIk9iamVjdGl2ZS1DIGJsb2NrcyBj
YWxsZWQgYXMgY29uc3RydWN0b3JzIG11c3QgcmV0dXJuIGFuIG9iamVjdC4iKSk7CisgICAgICAg
IDo6SlNWYWx1ZSAqYm9ndXNPYmplY3QgPSBbOjpKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdElu
Q29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgcmV0dXJuIChKU09iamVjdFJlZilbYm9ndXNPYmpl
Y3QgSlNWYWx1ZVJlZl07CisgICAgfQorICAgIHJldHVybiAoSlNPYmplY3RSZWYpcmVzdWx0Owor
fQorCiBjb25zdCBKU0M6OkNsYXNzSW5mbyBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6c19pbmZvID0g
eyAiQ2FsbGJhY2tGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoT2JqQ0NhbGxiYWNrRnVuY3Rpb24pIH07CiAKLU9iakNDYWxsYmFja0Z1bmN0aW9uOjpP
YmpDQ2FsbGJhY2tGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIFBhc3NP
d25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBpbXBsKQorT2JqQ0NhbGxiYWNrRnVuY3Rp
b246Ok9iakNDYWxsYmFja0Z1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBmdW5jdGlvbkNh
bGxiYWNrLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY29uc3RydWN0Q2FsbGJh
Y2ssIFBhc3NPd25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBpbXBsKQogICAgIDogQmFz
ZSh2bSwgZ2xvYmFsT2JqZWN0LT5vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpKQotICAg
ICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAsIG1fZnVuY3Rpb25DYWxsYmFjayhmdW5jdGlv
bkNhbGxiYWNrKQorICAgICwgbV9jb25zdHJ1Y3RDYWxsYmFjayhjb25zdHJ1Y3RDYWxsYmFjaykK
ICAgICAsIG1faW1wbChpbXBsKQogewogfQogCiBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogT2JqQ0Nh
bGxiYWNrRnVuY3Rpb246OmNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8T2JqQ0NhbGxiYWNr
RnVuY3Rpb25JbXBsPiBpbXBsKQogewotICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKiBmdW5jdGlv
biA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE9iakNDYWxsYmFja0Z1bmN0aW9uPih2bS5o
ZWFwKSkgT2JqQ0NhbGxiYWNrRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgb2JqQ0NhbGxiYWNr
RnVuY3Rpb25DYWxsQXNGdW5jdGlvbiwgaW1wbCk7CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24q
IGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8T2JqQ0NhbGxiYWNrRnVuY3Rp
b24+KHZtLmhlYXApKSBPYmpDQ2FsbGJhY2tGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uLCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxB
c0NvbnN0cnVjdG9yLCBpbXBsKTsKICAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIG5h
bWUpOwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KQEAgLTQ5Miw2ICs1MjUsMTUgQEAgQ2FsbFR5
cGUgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmdldENhbGxEYQogICAgIHJldHVybiBDYWxsVHlwZUhv
c3Q7CiB9CiAKK0NvbnN0cnVjdFR5cGUgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiBjZWxsLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAg
IE9iakNDYWxsYmFja0Z1bmN0aW9uKiBjYWxsYmFjayA9IGpzQ2FzdDxPYmpDQ2FsbGJhY2tGdW5j
dGlvbio+KGNlbGwpOworICAgIGlmICghY2FsbGJhY2stPmltcGwoKS0+d3JhcHBlZEJsb2NrKCkp
CisgICAgICAgIHJldHVybiBCYXNlOjpnZXRDb25zdHJ1Y3REYXRhKGNlbGwsIGNvbnN0cnVjdERh
dGEpOworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gQVBJQ2FsbGJhY2tGdW5j
dGlvbjo6Y29uc3RydWN0PE9iakNDYWxsYmFja0Z1bmN0aW9uPjsKKyAgICByZXR1cm4gQ29uc3Ry
dWN0VHlwZUhvc3Q7Cit9CisKIEpTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpj
YWxsKEpTQ29udGV4dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtjb250ZXh0
IEpTR2xvYmFsQ29udGV4dFJlZl07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rl
c3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAxNTcxNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTkwNiw2ICs5MDYsNTYg
QEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAgICAgICBbY29udGV4dC52aXJ0dWFs
TWFjaGluZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOm1hbmFnZWRUZXN0T2JqZWN0IHdpdGhPd25lcjp0
ZXN0T2JqZWN0XTsKICAgICAgICAgfQogICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07Cisg
ICAgICAgIGNvbnRleHRbQCJNeUNsYXNzIl0gPSBeeworICAgICAgICAgICAgSlNWYWx1ZSAqbmV3
VGhpcyA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpbSlNDb250ZXh0IGN1
cnJlbnRDb250ZXh0XV07CisgICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJl
ZiA9IFtbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBKU0dsb2JhbENvbnRleHRSZWZdOworICAg
ICAgICAgICAgSlNPYmplY3RSZWYgbmV3VGhpc1JlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0
UmVmLCBbbmV3VGhpcyBKU1ZhbHVlUmVmXSwgTlVMTCk7CisgICAgICAgICAgICBKU09iamVjdFNl
dFByb3RvdHlwZShjb250ZXh0UmVmLCBuZXdUaGlzUmVmLCBbW0pTQ29udGV4dCBjdXJyZW50Q29u
dGV4dF1bQCJNeUNsYXNzIl1bQCJwcm90b3R5cGUiXSBKU1ZhbHVlUmVmXSk7CisgICAgICAgICAg
ICByZXR1cm4gbmV3VGhpczsKKyAgICAgICAgfTsKKworICAgICAgICBjb250ZXh0W0AiTXlPdGhl
ckNsYXNzIl0gPSBeeworICAgICAgICAgICAgSlNWYWx1ZSAqbmV3VGhpcyA9IFtKU1ZhbHVlIHZh
bHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XV07Cisg
ICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtbSlNDb250ZXh0IGN1
cnJlbnRDb250ZXh0XSBKU0dsb2JhbENvbnRleHRSZWZdOworICAgICAgICAgICAgSlNPYmplY3RS
ZWYgbmV3VGhpc1JlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0UmVmLCBbbmV3VGhpcyBKU1Zh
bHVlUmVmXSwgTlVMTCk7CisgICAgICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0
UmVmLCBuZXdUaGlzUmVmLCBbW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF1bQCJNeU90aGVyQ2xh
c3MiXVtAInByb3RvdHlwZSJdIEpTVmFsdWVSZWZdKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdU
aGlzOworICAgICAgICB9OworCisgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uSGFuZGxlciA9IF4o
SlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpleGNlcHRpb24pIHsKKyAgICAgICAgICAgIE5T
TG9nKEAiRVhDRVBUSU9OOiAlQCIsIFtleGNlcHRpb24gdG9TdHJpbmddKTsKKyAgICAgICAgICAg
IGNvbnRleHQuZXhjZXB0aW9uID0gbmlsOworICAgICAgICB9OworCisgICAgICAgIEpTVmFsdWUg
KmNvbnN0cnVjdG9yMSA9IGNvbnRleHRbQCJNeUNsYXNzIl07CisgICAgICAgIEpTVmFsdWUgKmNv
bnN0cnVjdG9yMiA9IGNvbnRleHRbQCJNeU90aGVyQ2xhc3MiXTsKKworICAgICAgICBKU1ZhbHVl
ICp2YWx1ZTEgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBNeUNsYXNzKCkiXTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJ2YWx1ZTEgaW5zdGFuY2VvZiBNeUNsYXNzIiwgW3ZhbHVlMSBp
c0luc3RhbmNlT2Y6Y29uc3RydWN0b3IxXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiISh2YWx1
ZTEgaW5zdGFuY2VvZiBNeU90aGVyQ2xhc3MpIiwgIVt2YWx1ZTEgaXNJbnN0YW5jZU9mOmNvbnN0
cnVjdG9yMl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIk15Q2xhc3MucHJvdG90eXBlLmNvbnN0
cnVjdG9yID09PSBNeUNsYXNzIiwgW1tjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiTXlDbGFzcy5w
cm90b3R5cGUuY29uc3RydWN0b3IgPT09IE15Q2xhc3MiXSB0b0Jvb2xdKTsKKyAgICAgICAgY2hl
Y2tSZXN1bHQoQCJNeUNsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iLCBbW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJNeUNsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iXSB0b0Jvb2xdKTsKKworICAg
ICAgICBKU1ZhbHVlICp2YWx1ZTIgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBNeU90
aGVyQ2xhc3MoKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInZhbHVlMiBpbnN0YW5jZW9mIE15
T3RoZXJDbGFzcyIsIFt2YWx1ZTIgaXNJbnN0YW5jZU9mOmNvbnN0cnVjdG9yMl0pOworICAgICAg
ICBjaGVja1Jlc3VsdChAIiEodmFsdWUyIGluc3RhbmNlb2YgTXlDbGFzcykiLCAhW3ZhbHVlMiBp
c0luc3RhbmNlT2Y6Y29uc3RydWN0b3IxXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiTXlPdGhl
ckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9PT0gTXlPdGhlckNsYXNzIiwgW1tjb250ZXh0
IGV2YWx1YXRlU2NyaXB0OkAiTXlPdGhlckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9PT0g
TXlPdGhlckNsYXNzIl0gdG9Cb29sXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiTXlPdGhlckNs
YXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iLCBbW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJNeU90
aGVyQ2xhc3MgaW5zdGFuY2VvZiBGdW5jdGlvbiJdIHRvQm9vbF0pOworICAgIH0KKworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF07CisgICAgICAgIGNvbnRleHRbQCJNeUNsYXNzIl0gPSBeeworICAgICAg
ICAgICAgTlNMb2coQCJJJ20gaW50ZW50aW9uYWxseSBub3QgcmV0dXJuaW5nIGFueXRoaW5nLiIp
OworICAgICAgICB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0
ZVNjcmlwdDpAIm5ldyBNeUNsYXNzKCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJyZXN1bHQg
PT09IHVuZGVmaW5lZCIsIFtyZXN1bHQgaXNVbmRlZmluZWRdKTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJleGNlcHRpb24ubWVzc2FnZSBpcyBjb3JyZWN0JyIsIGNvbnRleHQuZXhjZXB0aW9uIAor
ICAgICAgICAgICAgJiYgW0AiT2JqZWN0aXZlLUMgYmxvY2tzIGNhbGxlZCBhcyBjb25zdHJ1Y3Rv
cnMgbXVzdCByZXR1cm4gYW4gb2JqZWN0LiIgaXNFcXVhbFRvU3RyaW5nOltjb250ZXh0LmV4Y2Vw
dGlvbltAIm1lc3NhZ2UiXSB0b1N0cmluZ11dKTsKKyAgICB9CiB9CiAKICNlbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213828</attachid>
            <date>2013-10-09 16:07:04 -0700</date>
            <delta_ts>2013-10-10 11:18:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122561-20131009160703.patch</filename>
            <type>text/plain</type>
            <size>18286</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBA
CisyMDEzLTEwLTA5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBibG9ja3MgYXJlbid0IGNhbGxhYmxlIHZpYSAnbmV3
JworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNTYx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVu
dGx5IHRoZSBvbmx5IHdheSBmb3IgY2xpZW50cyB0byB2ZW5kIG5ldyBuYXRpdmUgb2JqZWN0cyB0
byBKYXZhU2NyaXB0IGNvZGUgCisgICAgICAgIGlzIHZpYSBmYWN0b3J5IG1ldGhvZHMgaW4gdGhl
IGZvcm0gb2YgZXhwb3J0ZWQgY2xhc3MgbWV0aG9kcyBvciBibG9ja3MuIEJsb2NrcyBjYW4gCisg
ICAgICAgIGJlIGNhbGxlZCBsaWtlIG5vcm1hbCBmdW5jdGlvbnMgZnJvbSBKYXZhU2NyaXB0IGNv
ZGUsIGJ1dCB0aGV5IGNhbm5vdCBiZSBpbnZva2VkIAorICAgICAgICB3aXRoICduZXcnLiBUaGlz
IHdvdWxkIGdpdmUgYSBzaW1wbGUgd2F5IGZvciBjbGllbnRzIHRvIGV4cG9zZSBjb25zdHJ1Y3Rv
ci1saWtlIAorICAgICAgICBiZWhhdmlvciB0byB0aGVpciBKYXZhU2NyaXB0IGNvZGUuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHRoZSBhYmlsaXR5IGZvciBibG9ja3MgdG8gYmUgaW52b2tl
ZCBhcyBpZiB0aGV5IHdlcmUgYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgQmxvY2tzIGludm9rZWQg
YXMgY29uc3RydWN0b3JzIGFyZSByZXF1aXJlZCB0byByZXR1cm4gYW4gb2JqZWN0LiBJZiB0aGUg
YmxvY2sgZG9lc24ndAorICAgICAgICByZXR1cm4gYW4gb2JqZWN0IHRoZW4gYW4gZXJyb3IgaXMg
dGhyb3duLiBUaGUgJ3RoaXMnIG9iamVjdCBpcyBub3QgcHJvdmlkZWQgdG8gdGhlIAorICAgICAg
ICBibG9jayBhbmQgbXVzdCBiZSBjcmVhdGVkIHdpdGhpbiB0aGUgYmxvY2sgaXRzZWxmLiAKKwor
ICAgICAgICBUaGlzIHBhdGNoIGFsc28gdW5pZmllcyB0aGUgbmF0aXZlICdjb25zdHJ1Y3QnIGNh
bGxiYWNrIHVzZWQgaW4gYm90aCB0aGUgQyBhbmQgT2JqLUMKKyAgICAgICAgQVBJcyB1bmRlciB0
aGUgQVBJQ2FsbGJhY2tGdW5jdGlvbiBzdHJ1Y3QsIHNpbWlsYXIgdG8gaG93IHdlIHVuaWZpZWQg
dGhlICdjYWxsJyBjYWxsYmFjaworICAgICAgICBiZXR3ZWVuIE9iakNDYWxsYmFja0Z1bmN0aW9u
IGFuZCBKU0NhbGxiYWNrRnVuY3Rpb24gYmVmb3JlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byBhZGRzIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGF0IGRpZmZlcmVudCBibG9ja3MgZ2VuZXJhdGUg
b2JqZWN0cyB0aGF0CisgICAgICAgIGNvcnJlY3RseSBiZWhhdmUgd2hlbiBxdWVyaWVkIHdpdGgg
aW5zdGFuY2VvZi4gSXQgYWxzbyBtYWtlcyBzdXJlIHRoYXQgdGhlIGNvcnJlY3QgCisgICAgICAg
IEpTIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhIGJsb2NrIGZhaWxzIHRvIHJldHVybiBhbiBv
YmplY3QuCisKKyAgICAgICAgKiBBUEkvQVBJQ2FsbGJhY2tGdW5jdGlvbi5oOgorICAgICAgICAo
SlNDOjpBUElDYWxsYmFja0Z1bmN0aW9uOjpjYWxsKToKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJh
Y2tGdW5jdGlvbjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1
Y3REYXRhKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAg
IChKU0M6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0Q2FsbGJhY2spOgorICAgICAg
ICAqIEFQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0Z1
bmN0aW9uOjpmdW5jdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVu
Y3Rpb24uaDoKKyAgICAgICAgKEpTQzo6T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmZ1bmN0aW9uQ2Fs
bGJhY2spOgorICAgICAgICAoSlNDOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0Q2Fs
bGJhY2spOgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbToKKyAgICAgICAg
KEpTQzo6b2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNDb25zdHJ1Y3Rvcik6CisgICAgICAgIChK
U0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbik6CisgICAgICAg
IChKU0M6Ok9iakNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpPYmpD
Q2FsbGJhY2tGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgICogQVBJL3Rlc3Rz
L3Rlc3RhcGkubW06CisKIDIwMTMtMTAtMDkgIEp1bGllbiBCcmlhbmNlYXUgIDxqYnJpYW5jZUBj
aXNjby5jb20+CiAKICAgICAgICAgW2FybV0gSW52ZXJ0ZWQgc3JjIGFuZCBkZXN0IEZQIHJlZ2lz
dGVycyBpbiBERkcgc3BlY3VsYXRpdmUgSklUIHdoZW4gdXNpbmcgaGFyZGZwLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlz
aW9uIDE1NzE1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FsbGJhY2tGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJQ2Fz
dC5oIgogI2luY2x1ZGUgIkFQSVNoaW1zLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRl
ICJKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewpAQCAtMzYsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0cnVjdCBB
UElDYWxsYmFja0Z1bmN0aW9uIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKik7Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEV4
ZWNTdGF0ZSopOwogCiB9OwogCkBAIC01Niw3ICs1OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgQVBJQ2FsbGJhY2sKICAgICBKU1ZhbHVlUmVmIHJlc3VsdDsKICAgICB7CiAgICAg
ICAgIEFQSUNhbGxiYWNrU2hpbSBjYWxsYmFja1NoaW0oZXhlYyk7Ci0gICAgICAgIHJlc3VsdCA9
IGpzQ2FzdDxUKj4odG9KUyhmdW5jdGlvblJlZikpLT5tX2NhbGxiYWNrKGV4ZWNSZWYsIGZ1bmN0
aW9uUmVmLCB0aGlzT2JqUmVmLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCAmZXhj
ZXB0aW9uKTsKKyAgICAgICAgcmVzdWx0ID0ganNDYXN0PFQqPih0b0pTKGZ1bmN0aW9uUmVmKSkt
PmZ1bmN0aW9uQ2FsbGJhY2soKShleGVjUmVmLCBmdW5jdGlvblJlZiwgdGhpc09ialJlZiwgYXJn
dW1lbnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CiAgICAgfQogICAgIGlm
IChleGNlcHRpb24pCiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgdG9K
UyhleGVjLCBleGNlcHRpb24pKTsKQEAgLTY3LDYgKzY5LDQxIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgQVBJQ2FsbGJhY2sKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9K
UyhleGVjLCByZXN1bHQpKTsKIH0KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEFQSUNhbGxiYWNrRnVuY3Rpb246OmNvbnN0cnVjdChFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gZXhlYy0+Y2FsbGVlKCk7
CisgICAgSlNDb250ZXh0UmVmIGN0eCA9IHRvUmVmKGV4ZWMpOworICAgIEpTT2JqZWN0UmVmIGNv
bnN0cnVjdG9yUmVmID0gdG9SZWYoY29uc3RydWN0b3IpOworCisgICAgSlNPYmplY3RDYWxsQXND
b25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrID0ganNDYXN0PFQqPihjb25zdHJ1Y3RvciktPmNv
bnN0cnVjdENhbGxiYWNrKCk7CisgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgIHNpemVfdCBh
cmd1bWVudENvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgICAgICBWZWN0b3I8SlNW
YWx1ZVJlZiwgMTY+IGFyZ3VtZW50czsKKyAgICAgICAgYXJndW1lbnRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoYXJndW1lbnRDb3VudCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJndW1lbnRDb3VudDsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRzLnVuY2hlY2tlZEFwcGVu
ZCh0b1JlZihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKSkpOworCisgICAgICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKKyAgICAgICAgSlNPYmplY3RSZWYgcmVzdWx0OworICAg
ICAgICB7CisgICAgICAgICAgICBBUElDYWxsYmFja1NoaW0gY2FsbGJhY2tTaGltKGV4ZWMpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soY3R4LCBjb25zdHJ1Y3RvclJlZiwgYXJndW1l
bnRDb3VudCwgYXJndW1lbnRzLmRhdGEoKSwgJmV4Y2VwdGlvbik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCB0b0pTKGV4ZWMsIGV4Y2VwdGlvbikpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTKGV4ZWMsIGV4Y2VwdGlvbikpOworICAgICAgICB9CisgICAgICAgIC8v
IHJlc3VsdCBtdXN0IGJlIGEgdmFsaWQgSlNWYWx1ZS4KKyAgICAgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0b0pTKHJlc3VsdCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRvSlMoSlNPYmplY3RNYWtlKGN0eCwganNDYXN0PEpTQ2FsbGJhY2tD
b25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+Y2xhc3NSZWYoKSwgMCkpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBBUElDYWxsYmFja0Z1bmN0aW9uX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDE1NzE1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oIgogCi0j
aW5jbHVkZSAiQVBJU2hpbXMuaCIKKyNpbmNsdWRlICJBUElDYWxsYmFja0Z1bmN0aW9uLmgiCiAj
aW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkFQSVNoaW1zLmgiCiAjaW5jbHVkZSAiRXJy
b3IuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgpA
QCAtNjUsNDAgKzY2LDkgQEAgdm9pZCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmRlc3Ryb3koSlND
ZQogICAgIHN0YXRpY19jYXN0PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcio+KGNlbGwpLT5KU0NhbGxi
YWNrQ29uc3RydWN0b3I6On5KU0NhbGxiYWNrQ29uc3RydWN0b3IoKTsKIH0KIAotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNDYWxsYmFjayhFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yID0gZXhlYy0+Y2FsbGVlKCk7Ci0g
ICAgSlNDb250ZXh0UmVmIGN0eCA9IHRvUmVmKGV4ZWMpOwotICAgIEpTT2JqZWN0UmVmIGNvbnN0
cnVjdG9yUmVmID0gdG9SZWYoY29uc3RydWN0b3IpOwotCi0gICAgSlNPYmplY3RDYWxsQXNDb25z
dHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrID0ganNDYXN0PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcio+
KGNvbnN0cnVjdG9yKS0+Y2FsbGJhY2soKTsKLSAgICBpZiAoY2FsbGJhY2spIHsKLSAgICAgICAg
c2l6ZV90IGFyZ3VtZW50Q291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7Ci0gICAgICAgIFZl
Y3RvcjxKU1ZhbHVlUmVmLCAxNj4gYXJndW1lbnRzOwotICAgICAgICBhcmd1bWVudHMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENvdW50KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCi0gICAgICAgICAgICBhcmd1bWVudHMudW5jaGVj
a2VkQXBwZW5kKHRvUmVmKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKSk7Ci0KLSAg
ICAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgICAgICBKU09iamVjdFJlZiByZXN1
bHQ7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFQSUNhbGxiYWNrU2hpbSBjYWxsYmFja1NoaW0o
ZXhlYyk7Ci0gICAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhjdHgsIGNvbnN0cnVjdG9yUmVm
LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMuZGF0YSgpLCAmZXhjZXB0aW9uKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCB0b0pTKGV4ZWMsIGV4Y2VwdGlvbikpOwotICAgICAgICAvLyByZXN1bHQg
bXVzdCBiZSBhIHZhbGlkIEpTVmFsdWUuCi0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUyhyZXN1bHQpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTKEpTT2JqZWN0TWFrZShjdHgsIGpzQ2FzdDxKU0NhbGxiYWNrQ29uc3RydWN0
b3IqPihjb25zdHJ1Y3RvciktPmNsYXNzUmVmKCksIDApKSk7Ci19Ci0KIENvbnN0cnVjdFR5cGUg
SlNDYWxsYmFja0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVj
dERhdGEmIGNvbnN0cnVjdERhdGEpCiB7Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24gPSBjb25zdHJ1Y3RKU0NhbGxiYWNrOworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gQVBJQ2FsbGJhY2tGdW5jdGlvbjo6Y29uc3RydWN0PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rv
cj47CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDE1NzE1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDEyIEBAIHByb3RlY3RlZDoKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBJbXBsZW1lbnRzSGFzSW5zdGFu
Y2UgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIHN0
cnVjdCBBUElDYWxsYmFja0Z1bmN0aW9uOworCiAgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0
Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CiAKKyAgICBKU09iamVjdENh
bGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY29uc3RydWN0Q2FsbGJhY2soKSB7IHJldHVybiBtX2Nh
bGxiYWNrOyB9CisKICAgICBKU0NsYXNzUmVmIG1fY2xhc3M7CiAgICAgSlNPYmplY3RDYWxsQXND
b25zdHJ1Y3RvckNhbGxiYWNrIG1fY2FsbGJhY2s7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZpc2lvbiAxNTcxNTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgQ2FsbFR5cGUg
Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKIAorICAgIEpTT2JqZWN0Q2FsbEFzRnVu
Y3Rpb25DYWxsYmFjayBmdW5jdGlvbkNhbGxiYWNrKCkgeyByZXR1cm4gbV9jYWxsYmFjazsgfQor
CiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIG1fY2FsbGJhY2s7CiB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkocmV2aXNpb24g
MTU3MTU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM4Nyw4ICszODcsMTMgQEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JP
YmplY3Q6KGlkKW9iamVjdAogICAgIEFTU0VSVChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6bV9jbGFz
c10pOwogICAgIEFTU0VSVChtX2Jsb2NrID09IFtvYmplY3QgaXNLaW5kT2ZDbGFzczpnZXROU0Js
b2NrQ2xhc3MoKV0pOwogICAgIGlmIChtX2Jsb2NrKSB7Ci0gICAgICAgIGlmIChKU09iamVjdFJl
ZiBtZXRob2QgPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKG1fY29udGV4dCwgb2JqZWN0
KSkKLSAgICAgICAgICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOm1ldGhv
ZCBpbkNvbnRleHQ6bV9jb250ZXh0XTsKKyAgICAgICAgaWYgKEpTT2JqZWN0UmVmIG1ldGhvZCA9
IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yQmxvY2sobV9jb250ZXh0LCBvYmplY3QpKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlICpjb25zdHJ1Y3RvciA9IFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVS
ZWY6bWV0aG9kIGluQ29udGV4dDptX2NvbnRleHRdOworICAgICAgICAgICAgSlNWYWx1ZSAqcHJv
dG90eXBlID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0Om1fY29udGV4dF07
CisgICAgICAgICAgICBwdXROb25FbnVtZXJhYmxlKGNvbnN0cnVjdG9yLCBAInByb3RvdHlwZSIs
IHByb3RvdHlwZSk7CisgICAgICAgICAgICBwdXROb25FbnVtZXJhYmxlKHByb3RvdHlwZSwgQCJj
b25zdHJ1Y3RvciIsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rv
cjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghbV9wcm90b3R5cGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCShyZXZp
c2lvbiAxNTcxNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEyICs2MSwxNyBAQCBwdWJsaWM6CiAgICAg
T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKiBpbXBsKCkgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9
CiAKIHByb3RlY3RlZDoKLSAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrLCBQYXNzT3duUHRyPE9iakNDYWxs
YmFja0Z1bmN0aW9uSW1wbD4pOworICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2ssIEpTT2JqZWN0Q2FsbEFz
Q29uc3RydWN0b3JDYWxsYmFjaywgUGFzc093blB0cjxPYmpDQ2FsbGJhY2tGdW5jdGlvbkltcGw+
KTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmKTsKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpT
Q2VsbCosIENvbnN0cnVjdERhdGEmKTsKIAotICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxs
YmFjayBtX2NhbGxiYWNrOworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBmdW5j
dGlvbkNhbGxiYWNrKCkgeyByZXR1cm4gbV9mdW5jdGlvbkNhbGxiYWNrOyB9CisgICAgSlNPYmpl
Y3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNvbnN0cnVjdENhbGxiYWNrKCkgeyByZXR1cm4g
bV9jb25zdHJ1Y3RDYWxsYmFjazsgfQorCisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxi
YWNrIG1fZnVuY3Rpb25DYWxsYmFjazsKKyAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2Fs
bGJhY2sgbV9jb25zdHJ1Y3RDYWxsYmFjazsKICAgICBPd25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rp
b25JbXBsPiBtX2ltcGw7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09i
akNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDE1NzE1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ2NSwxOCArNDY1LDQ4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG9iakNDYWxsYmFja0Z1
bmN0aW9uQ2EKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgSlNPYmplY3RSZWYgb2Jq
Q0NhbGxiYWNrRnVuY3Rpb25DYWxsQXNDb25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY2FsbGVyQ29u
dGV4dCwgSlNPYmplY3RSZWYgY29uc3RydWN0b3IsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
SlNDOjpBUElFbnRyeVNoaW0gZW50cnlTaGltKHRvSlMoY2FsbGVyQ29udGV4dCkpOworCisgICAg
T2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8T2JqQ0NhbGxiYWNr
RnVuY3Rpb24qPih0b0pTKGNvbnN0cnVjdG9yKSk7CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb25J
bXBsKiBpbXBsID0gY2FsbGJhY2stPmltcGwoKTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBb
SlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKHRvSlMo
Y2FsbGVyQ29udGV4dCktPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKV07CisK
KyAgICBDYWxsYmFja0RhdGEgY2FsbGJhY2tEYXRhOworICAgIEpTVmFsdWVSZWYgcmVzdWx0Owor
ICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBbY29udGV4dCBiZWdpbkNhbGxiYWNrV2l0
aERhdGE6JmNhbGxiYWNrRGF0YSB0aGlzVmFsdWU6bmlsIGFyZ3VtZW50Q291bnQ6YXJndW1lbnRD
b3VudCBhcmd1bWVudHM6YXJndW1lbnRzXTsKKyAgICAgICAgcmVzdWx0ID0gaW1wbC0+Y2FsbChj
b250ZXh0LCBOVUxMLCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4Y2VwdGlvbik7CisgICAg
ICAgIGlmIChjb250ZXh0LmV4Y2VwdGlvbikKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB2YWx1
ZUludGVybmFsVmFsdWUoY29udGV4dC5leGNlcHRpb24pOworICAgICAgICBbY29udGV4dCBlbmRD
YWxsYmFja1dpdGhEYXRhOiZjYWxsYmFja0RhdGFdOworICAgIH0KKworICAgIEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0UmVmID0gW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXTsKKyAgICBp
ZiAoKmV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIUpTVmFsdWVJc09i
amVjdChjb250ZXh0UmVmLCByZXN1bHQpKSB7CisgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihK
U0M6OmNyZWF0ZVR5cGVFcnJvcih0b0pTKGNvbnRleHRSZWYpLCAiT2JqZWN0aXZlLUMgYmxvY2tz
IGNhbGxlZCBhcyBjb25zdHJ1Y3RvcnMgbXVzdCByZXR1cm4gYW4gb2JqZWN0LiIpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAoSlNPYmplY3RSZWYpcmVzdWx0OworfQor
CiBjb25zdCBKU0M6OkNsYXNzSW5mbyBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6c19pbmZvID0geyAi
Q2FsbGJhY2tGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoT2JqQ0NhbGxiYWNrRnVuY3Rpb24pIH07CiAKLU9iakNDYWxsYmFja0Z1bmN0aW9uOjpPYmpD
Q2FsbGJhY2tGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIFBhc3NPd25Q
dHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBpbXBsKQorT2JqQ0NhbGxiYWNrRnVuY3Rpb246
Ok9iakNDYWxsYmFja0Z1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBmdW5jdGlvbkNhbGxi
YWNrLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY29uc3RydWN0Q2FsbGJhY2ss
IFBhc3NPd25QdHI8T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsPiBpbXBsKQogICAgIDogQmFzZSh2
bSwgZ2xvYmFsT2JqZWN0LT5vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpKQotICAgICwg
bV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAsIG1fZnVuY3Rpb25DYWxsYmFjayhmdW5jdGlvbkNh
bGxiYWNrKQorICAgICwgbV9jb25zdHJ1Y3RDYWxsYmFjayhjb25zdHJ1Y3RDYWxsYmFjaykKICAg
ICAsIG1faW1wbChpbXBsKQogewogfQogCiBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogT2JqQ0NhbGxi
YWNrRnVuY3Rpb246OmNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdHI8T2JqQ0NhbGxiYWNrRnVu
Y3Rpb25JbXBsPiBpbXBsKQogewotICAgIE9iakNDYWxsYmFja0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE9iakNDYWxsYmFja0Z1bmN0aW9uPih2bS5oZWFw
KSkgT2JqQ0NhbGxiYWNrRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgb2JqQ0NhbGxiYWNrRnVu
Y3Rpb25DYWxsQXNGdW5jdGlvbiwgaW1wbCk7CisgICAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIGZ1
bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8T2JqQ0NhbGxiYWNrRnVuY3Rpb24+
KHZtLmhlYXApKSBPYmpDQ2FsbGJhY2tGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBvYmpDQ2Fs
bGJhY2tGdW5jdGlvbkNhbGxBc0Z1bmN0aW9uLCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhbGxBc0Nv
bnN0cnVjdG9yLCBpbXBsKTsKICAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUp
OwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KQEAgLTQ5Miw2ICs1MjIsMTUgQEAgQ2FsbFR5cGUg
T2JqQ0NhbGxiYWNrRnVuY3Rpb246OmdldENhbGxEYQogICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7
CiB9CiAKK0NvbnN0cnVjdFR5cGUgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmdldENvbnN0cnVjdERh
dGEoSlNDZWxsKiBjZWxsLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIE9i
akNDYWxsYmFja0Z1bmN0aW9uKiBjYWxsYmFjayA9IGpzQ2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlv
bio+KGNlbGwpOworICAgIGlmICghY2FsbGJhY2stPmltcGwoKS0+d3JhcHBlZEJsb2NrKCkpCisg
ICAgICAgIHJldHVybiBCYXNlOjpnZXRDb25zdHJ1Y3REYXRhKGNlbGwsIGNvbnN0cnVjdERhdGEp
OworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gQVBJQ2FsbGJhY2tGdW5jdGlv
bjo6Y29uc3RydWN0PE9iakNDYWxsYmFja0Z1bmN0aW9uPjsKKyAgICByZXR1cm4gQ29uc3RydWN0
VHlwZUhvc3Q7Cit9CisKIEpTVmFsdWVSZWYgT2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsOjpjYWxs
KEpTQ29udGV4dCAqY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKIHsKICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtjb250ZXh0IEpT
R2xvYmFsQ29udGV4dFJlZl07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAxNTcxNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTkwNiw2ICs5MDYsNTYgQEAg
dm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAgICAgICAgICAgICBbY29udGV4dC52aXJ0dWFsTWFj
aGluZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOm1hbmFnZWRUZXN0T2JqZWN0IHdpdGhPd25lcjp0ZXN0
T2JqZWN0XTsKICAgICAgICAgfQogICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAg
ICAgIGNvbnRleHRbQCJNeUNsYXNzIl0gPSBeeworICAgICAgICAgICAgSlNWYWx1ZSAqbmV3VGhp
cyA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpbSlNDb250ZXh0IGN1cnJl
bnRDb250ZXh0XV07CisgICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9
IFtbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBKU0dsb2JhbENvbnRleHRSZWZdOworICAgICAg
ICAgICAgSlNPYmplY3RSZWYgbmV3VGhpc1JlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0UmVm
LCBbbmV3VGhpcyBKU1ZhbHVlUmVmXSwgTlVMTCk7CisgICAgICAgICAgICBKU09iamVjdFNldFBy
b3RvdHlwZShjb250ZXh0UmVmLCBuZXdUaGlzUmVmLCBbW0pTQ29udGV4dCBjdXJyZW50Q29udGV4
dF1bQCJNeUNsYXNzIl1bQCJwcm90b3R5cGUiXSBKU1ZhbHVlUmVmXSk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3VGhpczsKKyAgICAgICAgfTsKKworICAgICAgICBjb250ZXh0W0AiTXlPdGhlckNs
YXNzIl0gPSBeeworICAgICAgICAgICAgSlNWYWx1ZSAqbmV3VGhpcyA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE5ld09iamVjdEluQ29udGV4dDpbSlNDb250ZXh0IGN1cnJlbnRDb250ZXh0XV07CisgICAg
ICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dFJlZiA9IFtbSlNDb250ZXh0IGN1cnJl
bnRDb250ZXh0XSBKU0dsb2JhbENvbnRleHRSZWZdOworICAgICAgICAgICAgSlNPYmplY3RSZWYg
bmV3VGhpc1JlZiA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0UmVmLCBbbmV3VGhpcyBKU1ZhbHVl
UmVmXSwgTlVMTCk7CisgICAgICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0UmVm
LCBuZXdUaGlzUmVmLCBbW0pTQ29udGV4dCBjdXJyZW50Q29udGV4dF1bQCJNeU90aGVyQ2xhc3Mi
XVtAInByb3RvdHlwZSJdIEpTVmFsdWVSZWZdKTsKKyAgICAgICAgICAgIHJldHVybiBuZXdUaGlz
OworICAgICAgICB9OworCisgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uSGFuZGxlciA9IF4oSlND
b250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpleGNlcHRpb24pIHsKKyAgICAgICAgICAgIE5TTG9n
KEAiRVhDRVBUSU9OOiAlQCIsIFtleGNlcHRpb24gdG9TdHJpbmddKTsKKyAgICAgICAgICAgIGNv
bnRleHQuZXhjZXB0aW9uID0gbmlsOworICAgICAgICB9OworCisgICAgICAgIEpTVmFsdWUgKmNv
bnN0cnVjdG9yMSA9IGNvbnRleHRbQCJNeUNsYXNzIl07CisgICAgICAgIEpTVmFsdWUgKmNvbnN0
cnVjdG9yMiA9IGNvbnRleHRbQCJNeU90aGVyQ2xhc3MiXTsKKworICAgICAgICBKU1ZhbHVlICp2
YWx1ZTEgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBNeUNsYXNzKCkiXTsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJ2YWx1ZTEgaW5zdGFuY2VvZiBNeUNsYXNzIiwgW3ZhbHVlMSBpc0lu
c3RhbmNlT2Y6Y29uc3RydWN0b3IxXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiISh2YWx1ZTEg
aW5zdGFuY2VvZiBNeU90aGVyQ2xhc3MpIiwgIVt2YWx1ZTEgaXNJbnN0YW5jZU9mOmNvbnN0cnVj
dG9yMl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIk15Q2xhc3MucHJvdG90eXBlLmNvbnN0cnVj
dG9yID09PSBNeUNsYXNzIiwgW1tjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiTXlDbGFzcy5wcm90
b3R5cGUuY29uc3RydWN0b3IgPT09IE15Q2xhc3MiXSB0b0Jvb2xdKTsKKyAgICAgICAgY2hlY2tS
ZXN1bHQoQCJNeUNsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iLCBbW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCJNeUNsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24iXSB0b0Jvb2xdKTsKKworICAgICAg
ICBKU1ZhbHVlICp2YWx1ZTIgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBNeU90aGVy
Q2xhc3MoKSJdOworICAgICAgICBjaGVja1Jlc3VsdChAInZhbHVlMiBpbnN0YW5jZW9mIE15T3Ro
ZXJDbGFzcyIsIFt2YWx1ZTIgaXNJbnN0YW5jZU9mOmNvbnN0cnVjdG9yMl0pOworICAgICAgICBj
aGVja1Jlc3VsdChAIiEodmFsdWUyIGluc3RhbmNlb2YgTXlDbGFzcykiLCAhW3ZhbHVlMiBpc0lu
c3RhbmNlT2Y6Y29uc3RydWN0b3IxXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiTXlPdGhlckNs
YXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9PT0gTXlPdGhlckNsYXNzIiwgW1tjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiTXlPdGhlckNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9PT0gTXlP
dGhlckNsYXNzIl0gdG9Cb29sXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiTXlPdGhlckNsYXNz
IGluc3RhbmNlb2YgRnVuY3Rpb24iLCBbW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJNeU90aGVy
Q2xhc3MgaW5zdGFuY2VvZiBGdW5jdGlvbiJdIHRvQm9vbF0pOworICAgIH0KKworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBh
bGxvY10gaW5pdF07CisgICAgICAgIGNvbnRleHRbQCJNeUNsYXNzIl0gPSBeeworICAgICAgICAg
ICAgTlNMb2coQCJJJ20gaW50ZW50aW9uYWxseSBub3QgcmV0dXJuaW5nIGFueXRoaW5nLiIpOwor
ICAgICAgICB9OworICAgICAgICBKU1ZhbHVlICpyZXN1bHQgPSBbY29udGV4dCBldmFsdWF0ZVNj
cmlwdDpAIm5ldyBNeUNsYXNzKCkiXTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJyZXN1bHQgPT09
IHVuZGVmaW5lZCIsIFtyZXN1bHQgaXNVbmRlZmluZWRdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJleGNlcHRpb24ubWVzc2FnZSBpcyBjb3JyZWN0JyIsIGNvbnRleHQuZXhjZXB0aW9uIAorICAg
ICAgICAgICAgJiYgW0AiT2JqZWN0aXZlLUMgYmxvY2tzIGNhbGxlZCBhcyBjb25zdHJ1Y3RvcnMg
bXVzdCByZXR1cm4gYW4gb2JqZWN0LiIgaXNFcXVhbFRvU3RyaW5nOltjb250ZXh0LmV4Y2VwdGlv
bltAIm1lc3NhZ2UiXSB0b1N0cmluZ11dKTsKKyAgICB9CiB9CiAKICNlbHNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>