<?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>167708</bug_id>
          
          <creation_ts>2017-02-01 13:52:54 -0800</creation_ts>
          <short_desc>[Cocoa] An exported Objective C class’s prototype and constructor don&apos;t persist across JSContext deallocation</short_desc>
          <delta_ts>2017-06-08 14:22:02 -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>Other</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1272263</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2017-02-01 13:52:54 -0800</bug_when>
    <thetext>If a class A with an initializer is exported to JavaScriptCore, and its constructor is referenced by a global object in some context, but the JSContext wrapping that context get deallocated, then a new, different constructor is created the next time it’s needed.

To see the problem, build and run this program:

@import JavaScriptCore;
@import Foundation;

@protocol AJSExport &lt;JSExport&gt;
- (instancetype)init;
@end

@interface A : NSObject &lt;AJSExport&gt;
@end

@implementation A
@end

int main(int argc, const char * argv[]) {
    JSGlobalContextRef contextRef;
    @autoreleasepool {
        JSContext *context = [[JSContext alloc] init];
        contextRef = JSGlobalContextRetain(context.JSGlobalContextRef);
        context[@&quot;A&quot;] = A.class;
        NSLog(@&quot;%@&quot;, [context evaluateScript:@&quot;new A().constructor === A&quot;]);
    }

    @autoreleasepool {
        JSContext *context = [JSContext contextWithJSGlobalContextRef:contextRef];
        NSLog(@&quot;%@&quot;, [context evaluateScript:@&quot;new A().constructor === A&quot;]);
    }

    JSGlobalContextRelease(contextRef);

    return 0;
}

The first NSLog statement logs true, and the second one logs false. It’s expected to log true as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273766</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-02-06 16:36:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/30387376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273990</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-02-07 07:56:37 -0800</bug_when>
    <thetext>Note that this problem would reproduce with any methodology for passing an ObjC object to JS -- it is incidental in this example that we allocate the ObjC object using an ObjC constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273991</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-02-07 07:58:30 -0800</bug_when>
    <thetext>The cause of this bug is that we tie the lifetime of JSWrapperMap to the lifetime of JSContext. Instead, we need to tie the lifetime of JSWrapperMap to the GC lifetime of a given JSGlobalObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308995</commentid>
    <comment_count>4</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-15 22:59:51 -0700</bug_when>
    <thetext>I would propose a different solution to fix this. I think we should just set the .prototype property on A and make it read-only and non-configurable. Then we can run the same code for constructing ObjC classes as we do for host constructors. This also has the nice property that it does what people would expect from JS.

There are a couple of behavior changes to consider with this proposal, however: 

1) If you set the .prototype property on A, right now it will work but do nothing. This change will make code that relies on changing the .prototype property 

2) If you make two constructors for your class both share the same .prototype. This change would make them have different prototypes, which seems closer to what one would expect from JS.

3) If you extend (in JS) your constructor, any super() calls don&apos;t respect new.target. This change would make it respect new.target. (I didn&apos;t test this but the API code doesn&apos;t call createSubclassStructure so I assume it doesn&apos;t)

The only thing I would worry about causing incompatible changes is 2. I could totally imagine someone making two constructors, say A and B, for their class and only setting properties on A&apos;s .prototype. Currently instances of B will still see A&apos;s .prototype properties since both constructors will share the same .prototype object.

I&apos;m not sure if that&apos;s something we should worry about. I would guess most users only put their constructors on the global object. Geoff, do you have any insight here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309152</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-05-16 09:55:20 -0700</bug_when>
    <thetext>I&apos;m not too worried about the compatibility risk to these changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310679</commentid>
    <comment_count>6</comment_count>
      <attachid>310677</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-19 11:32:19 -0700</bug_when>
    <thetext>Created attachment 310677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310731</commentid>
    <comment_count>7</comment_count>
      <attachid>310677</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-19 13:01:38 -0700</bug_when>
    <thetext>Comment on attachment 310677
Patch

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

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:52
&gt; +OBJC_CLASS JSWrapperMap;

Need to wrap with #if JSC_OBJC_API_ENABLED.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:831
&gt; +    JSWrapperMap* wrapperMap() const { return m_wrapperMap.get(); }
&gt; +    void setWrapperMap(JSWrapperMap* map) { m_wrapperMap = map; }

Ditto.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:862
&gt; +    RetainPtr&lt;JSWrapperMap&gt; m_wrapperMap;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310780</commentid>
    <comment_count>8</comment_count>
      <attachid>310677</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-05-19 14:46:09 -0700</bug_when>
    <thetext>Comment on attachment 310677
Patch

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

Mark is right about JSC_OBJC_API_ENABLED -- that&apos;s the GTK build failure.

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        Also, this patch fixes a &quot;bug&quot; where we would not just used the object constructor/prototype for NSObject.

NSObject doesn&apos;t export anything to JavaScript. Is this change observable? If so, we should add a test for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310784</commentid>
    <comment_count>9</comment_count>
      <attachid>310677</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-05-19 14:53:12 -0700</bug_when>
    <thetext>Comment on attachment 310677
Patch

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

&gt; Source/JavaScriptCore/API/JSWrapperMap.mm:476
&gt; -        if (!jsPrototype) {
&gt; -            JSValue *prototype = constructor[@&quot;prototype&quot;];
&gt; -            jsPrototype = toJS(JSValueToObject(cContext, valueInternalValue(prototype), 0));
&gt; -        }
&gt; +        if (!jsPrototype)
&gt; +            jsPrototype = globalObject-&gt;objectPrototype();

A better way to describe this, rather than saying &quot;we would not just used the object constructor/prototype for NSObject&quot;, is to fully describe the edge case, where we would do the wrong thing if and only if the user had overwritten the window.Object property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1311477</commentid>
    <comment_count>10</comment_count>
      <attachid>310895</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-22 12:04:30 -0700</bug_when>
    <thetext>Created attachment 310895
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1311503</commentid>
    <comment_count>11</comment_count>
      <attachid>310895</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-22 12:48:41 -0700</bug_when>
    <thetext>Comment on attachment 310895
Patch for landing

Clearing flags on attachment: 310895

Committed r217240: &lt;http://trac.webkit.org/changeset/217240&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1311504</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-22 12:48:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317046</commentid>
    <comment_count>13</comment_count>
      <attachid>310895</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-08 14:10:16 -0700</bug_when>
    <thetext>Comment on attachment 310895
Patch for landing

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

&gt; Source/JavaScriptCore/API/JSContext.mm:57
&gt; +        [[JSWrapperMap alloc] initWithGlobalContextRef:[self JSGlobalContextRef]];

This looks like it will leak the JSWrapperMap.

- This alloc produces a +1 instance
- Inside the initializer, the JSGlobalObject is made to retain the wrapper via a RetainPtr&lt;JSWrapperMap&gt;
- However nobody ends up releasing this +1. It seems this code should release or autorelease this new instance and probably include a healthy comment about the non-obvious lifetime

I&apos;ll look into cleaning this up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317049</commentid>
    <comment_count>14</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-08 14:22:02 -0700</bug_when>
    <thetext>&gt; I&apos;ll look into cleaning this up.

Bug 173110.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310677</attachid>
            <date>2017-05-19 11:32:19 -0700</date>
            <delta_ts>2017-05-22 12:03:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167708-20170519113218.patch</filename>
            <type>text/plain</type>
            <size>21708</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDcyZWVhOGJiODc4NzUzMmU1NGMyODRhYzA4OWNmZjIwYzdhM2EyLi43MzViZTBjY2U0OGYyMmRi
NjZhY2NhZWFmZjEyNzhmNTYxMDhiNmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxNy0wNS0xOSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBbQ29jb2FdIEFuIGV4cG9ydGVkIE9iamVjdGl2ZSBDIGNsYXNz4oCZ
cyBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIGRvbid0IHBlcnNpc3QgYWNyb3NzIEpTQ29udGV4
dCBkZWFsbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NzcwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgdGhlIE9iamVjdGl2ZSBDIHdyYXBwZXIgbWFwIHRvIHRo
ZSBnbG9iYWwgb2JqZWN0LiBJbiBvcmRlciB0byBtYWtlIHRoaXMgd29yayB0aGUgSlNXcmFwcGVy
TWFwCisgICAgICAgIGNsYXNzIG5vIGxvbmdlciBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgSlND
b250ZXh0LiBJbnN0ZWFkLCB0aGUgY29udGV4dCBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gZ2V0dGlu
ZyBhIHdyYXBwZXIuCisKKyAgICAgICAgQWxzbywgdGhpcyBwYXRjaCBmaXhlcyBhICJidWciIHdo
ZXJlIHdlIHdvdWxkIG5vdCBqdXN0IHVzZWQgdGhlIG9iamVjdCBjb25zdHJ1Y3Rvci9wcm90b3R5
cGUgZm9yIE5TT2JqZWN0LgorCisgICAgICAgICogQVBJL0FQSUNhc3QuaDoKKyAgICAgICAgKHRv
SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAgICgt
W0pTQ29udGV4dCBlbnN1cmVXcmFwcGVyTWFwXSk6CisgICAgICAgICgtW0pTQ29udGV4dCBpbml0
V2l0aFZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAoLVtKU0NvbnRleHQgZGVhbGxvY10pOgor
ICAgICAgICAoLVtKU0NvbnRleHQgd3JhcHBlck1hcF0pOgorICAgICAgICAoLVtKU0NvbnRleHQg
aW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmOl0pOgorICAgICAgICAoLVtKU0NvbnRleHQgd3JhcHBl
ckZvck9iakNPYmplY3Q6XSk6CisgICAgICAgICgtW0pTQ29udGV4dCB3cmFwcGVyRm9ySlNPYmpl
Y3Q6XSk6CisgICAgICAgICogQVBJL0pTV3JhcHBlck1hcC5oOgorICAgICAgICAqIEFQSS9KU1dy
YXBwZXJNYXAubW06CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBpbml0Rm9yQ2xhc3M6XSk6
CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJvdG90
eXBlSW5Db250ZXh0Ol0pOgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gd3JhcHBlckZvck9i
amVjdDppbkNvbnRleHQ6XSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBjb25zdHJ1Y3Rv
ckluQ29udGV4dDpdKToKKyAgICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIHByb3RvdHlwZUluQ29u
dGV4dDpdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGluaXRXaXRoR2xvYmFsQ29udGV4dFJl
ZjpdKToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNsYXNzOl0pOgorICAg
ICAgICAoLVtKU1dyYXBwZXJNYXAganNXcmFwcGVyRm9yT2JqZWN0OmluQ29udGV4dDpdKToKKyAg
ICAgICAgKC1bSlNXcmFwcGVyTWFwIG9iamNXcmFwcGVyRm9ySlNWYWx1ZVJlZjppbkNvbnRleHQ6
XSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBpbml0V2l0aENvbnRleHQ6Zm9yQ2xhc3M6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY2F0ZUNvbnN0cnVj
dG9yQW5kUHJvdG90eXBlXSk6IERlbGV0ZWQuCisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyB3
cmFwcGVyRm9yT2JqZWN0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8g
Y29uc3RydWN0b3JdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIHByb3Rv
dHlwZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU1dyYXBwZXJNYXAgaW5pdFdpdGhDb250ZXh0
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU1dyYXBwZXJNYXAganNXcmFwcGVyRm9yT2JqZWN0
Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU1dyYXBwZXJNYXAgb2JqY1dyYXBwZXJGb3JKU1Zh
bHVlUmVmOl0pOiBEZWxldGVkLgorICAgICAgICAqIEFQSS90ZXN0cy9KU0V4cG9ydFRlc3RzLm1t
OgorICAgICAgICAod3JhcHBlckxpZmV0aW1lSXNUaWVkVG9HbG9iYWxPYmplY3QpOgorICAgICAg
ICAocnVuSlNFeHBvcnRUZXN0cyk6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6d3JhcHBlck1hcCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpzZXRX
cmFwcGVyTWFwKToKKwogMjAxNy0wNS0wMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBBcnJheS5wcm90b3R5cGUuc29ydCBzaG91bGQgYWxzbyBhbGxv
dyBhIG51bGwgY29tcGFyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAppbmRleCA4
ZmU4ZDYwMzQ5YWY4MmRlMjYzMmVhNzZiYmY3NzRmMDM1NzZmZWI2Li4yMWYzYTdkZTk0NjA5NmYw
MDUwYzcyMzBhNGM2NjE0ZWE5NGQzNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0FQSUNhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3Qu
aApAQCAtNjAsNiArNjAsMTEgQEAgaW5saW5lIEpTQzo6RXhlY1N0YXRlKiB0b0pTKEpTR2xvYmFs
Q29udGV4dFJlZiBjKQogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6RXhlY1N0YXRl
Kj4oYyk7CiB9CiAKK2lubGluZSBKU0M6OkpTR2xvYmFsT2JqZWN0KiB0b0pTR2xvYmFsT2JqZWN0
KEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIHJldHVybiB0b0pTKGNvbnRleHQp
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Cit9CisKIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiB2KQogewogICAgIEFTU0VSVF9VTlVTRUQo
ZXhlYywgZXhlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCmluZGV4IGZk
OTMyZDQyNWI0NTFhNDQzZWQ5OWIwNjgzODVhMGEzYjRhMTgyMGUuLmE5ZTM2NjY1OWM1YTg3NTBh
MGRhMmU1MDk0ZDE4YTE1YTgzMGMyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0Lm1tCkBAIC00Myw3ICs0Myw2IEBACiBAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0IHsKICAg
ICBKU1ZpcnR1YWxNYWNoaW5lICptX3ZpcnR1YWxNYWNoaW5lOwogICAgIEpTR2xvYmFsQ29udGV4
dFJlZiBtX2NvbnRleHQ7Ci0gICAgSlNXcmFwcGVyTWFwICptX3dyYXBwZXJNYXA7CiAgICAgSlND
OjpTdHJvbmc8SlNDOjpKU09iamVjdD4gbV9leGNlcHRpb247CiB9CiAKQEAgLTUyLDYgKzUxLDEy
IEBACiAgICAgcmV0dXJuIG1fY29udGV4dDsKIH0KIAorLSAodm9pZCllbnN1cmVXcmFwcGVyTWFw
Cit7CisgICAgaWYgKCF0b0pTKFtzZWxmIEpTR2xvYmFsQ29udGV4dFJlZl0pLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPndyYXBwZXJNYXAoKSkKKyAgICAgICAgW1tKU1dyYXBwZXJNYXAgYWxsb2Nd
IGluaXRXaXRoR2xvYmFsQ29udGV4dFJlZjpbc2VsZiBKU0dsb2JhbENvbnRleHRSZWZdXTsKK30K
KwogLSAoaW5zdGFuY2V0eXBlKWluaXQKIHsKICAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWaXJ0
dWFsTWFjaGluZTpbW1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1d
OwpAQCAtNjUsMTIgKzcwLDEyIEBACiAKICAgICBtX3ZpcnR1YWxNYWNoaW5lID0gW3ZpcnR1YWxN
YWNoaW5lIHJldGFpbl07CiAgICAgbV9jb250ZXh0ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlSW5H
cm91cChnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZSh2aXJ0dWFsTWFjaGluZSksIDApOwotICAg
IG1fd3JhcHBlck1hcCA9IFtbSlNXcmFwcGVyTWFwIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6c2Vs
Zl07CiAKICAgICBzZWxmLmV4Y2VwdGlvbkhhbmRsZXIgPSBeKEpTQ29udGV4dCAqY29udGV4dCwg
SlNWYWx1ZSAqZXhjZXB0aW9uVmFsdWUpIHsKICAgICAgICAgY29udGV4dC5leGNlcHRpb24gPSBl
eGNlcHRpb25WYWx1ZTsKICAgICB9OwogCisgICAgW3NlbGYgZW5zdXJlV3JhcHBlck1hcF07CiAg
ICAgW21fdmlydHVhbE1hY2hpbmUgYWRkQ29udGV4dDpzZWxmIGZvckdsb2JhbENvbnRleHRSZWY6
bV9jb250ZXh0XTsKIAogICAgIHJldHVybiBzZWxmOwpAQCAtNzksNyArODQsNiBAQAogLSAodm9p
ZClkZWFsbG9jCiB7CiAgICAgbV9leGNlcHRpb24uY2xlYXIoKTsKLSAgICBbbV93cmFwcGVyTWFw
IHJlbGVhc2VdOwogICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UobV9jb250ZXh0KTsKICAgICBb
bV92aXJ0dWFsTWFjaGluZSByZWxlYXNlXTsKICAgICBbX2V4Y2VwdGlvbkhhbmRsZXIgcmVsZWFz
ZV07CkBAIC0xMjUsNyArMTI5LDcgQEAKIAogLSAoSlNXcmFwcGVyTWFwICopd3JhcHBlck1hcAog
ewotICAgIHJldHVybiBtX3dyYXBwZXJNYXA7CisgICAgcmV0dXJuIHRvSlMobV9jb250ZXh0KS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT53cmFwcGVyTWFwKCk7CiB9CiAKIC0gKEpTVmFsdWUgKiln
bG9iYWxPYmplY3QKQEAgLTI1OCw3ICsyNjIsNyBAQAogICAgIG1fdmlydHVhbE1hY2hpbmUgPSBb
W0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRvUmVm
KCZnbG9iYWxPYmplY3QtPnZtKCkpXSByZXRhaW5dOwogICAgIEFTU0VSVChtX3ZpcnR1YWxNYWNo
aW5lKTsKICAgICBtX2NvbnRleHQgPSBKU0dsb2JhbENvbnRleHRSZXRhaW4oY29udGV4dCk7Ci0g
ICAgbV93cmFwcGVyTWFwID0gW1tKU1dyYXBwZXJNYXAgYWxsb2NdIGluaXRXaXRoQ29udGV4dDpz
ZWxmXTsKKyAgICBbc2VsZiBlbnN1cmVXcmFwcGVyTWFwXTsKIAogICAgIHNlbGYuZXhjZXB0aW9u
SGFuZGxlciA9IF4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpleGNlcHRpb25WYWx1ZSkg
ewogICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbiA9IGV4Y2VwdGlvblZhbHVlOwpAQCAtMzA5LDEz
ICszMTMsMTMgQEAKIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9yT2JqQ09iamVjdDooaWQpb2JqZWN0
CiB7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHRvSlMobV9jb250ZXh0KSk7Ci0gICAg
cmV0dXJuIFttX3dyYXBwZXJNYXAganNXcmFwcGVyRm9yT2JqZWN0Om9iamVjdF07CisgICAgcmV0
dXJuIFtbc2VsZiB3cmFwcGVyTWFwXSBqc1dyYXBwZXJGb3JPYmplY3Q6b2JqZWN0IGluQ29udGV4
dDpzZWxmXTsKIH0KIAogLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JKU09iamVjdDooSlNWYWx1ZVJl
Zil2YWx1ZQogewogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKG1fY29udGV4dCkp
OwotICAgIHJldHVybiBbbV93cmFwcGVyTWFwIG9iamNXcmFwcGVyRm9ySlNWYWx1ZVJlZjp2YWx1
ZV07CisgICAgcmV0dXJuIFtbc2VsZiB3cmFwcGVyTWFwXSBvYmpjV3JhcHBlckZvckpTVmFsdWVS
ZWY6dmFsdWUgaW5Db250ZXh0OnNlbGZdOwogfQogCiArIChKU0NvbnRleHQgKiljb250ZXh0V2l0
aEpTR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5oCmluZGV4IGM2YWExYWYxMzg3OGIz
YTk2YmQyYzQ1MjYyZTM5YTE0NTE0MTc5ZjQuLjA0NmNjNDI4ZDA1MzNiZGNmM2M1NTk0Y2FkYzZl
OWU4ZjIzMjUwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFw
cGVyTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAuaApA
QCAtMzEsMTEgKzMxLDExIEBACiAKIEBpbnRlcmZhY2UgSlNXcmFwcGVyTWFwIDogTlNPYmplY3QK
IAotLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLSAoaWQpaW5p
dFdpdGhHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpY29udGV4dDsKIAotLSAo
SlNWYWx1ZSAqKWpzV3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0OworLSAoSlNWYWx1ZSAqKWpz
V3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4
dDsKIAotLSAoSlNWYWx1ZSAqKW9iamNXcmFwcGVyRm9ySlNWYWx1ZVJlZjooSlNWYWx1ZVJlZil2
YWx1ZTsKKy0gKEpTVmFsdWUgKilvYmpjV3JhcHBlckZvckpTVmFsdWVSZWY6KEpTVmFsdWVSZWYp
dmFsdWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OwogCiBAZW5kCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KaW5kZXggZTdiODQzYTYwZmNmYjViZTEy
NGQzYWM2NWQzODA4NWIxZmNjNjIwMC4uN2Q4YjZmOGYxODY2OWFmYTdmYzVjMTUyZDU5M2ZjMDkx
NWIwNmViZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJN
YXAubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0KQEAg
LTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgogI2ltcG9ydCAiT2JqQ0Nh
bGxiYWNrRnVuY3Rpb24uaCIKICNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCisjaW1wb3J0
ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2ltcG9ydCAiV2Vha0dDTWFwLmgiCiAjaW1wb3J0ICJX
ZWFrR0NNYXBJbmxpbmVzLmgiCiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CkBAIC0zNjMsNyArMzY0
LDYgQEAgc3RhdGljIHZvaWQgY29weVByb3RvdHlwZVByb3BlcnRpZXMoSlNDb250ZXh0ICpjb250
ZXh0LCBDbGFzcyBvYmpjQ2xhc3MsIFByb3RvY28KIH0KIAogQGludGVyZmFjZSBKU09iakNDbGFz
c0luZm8gOiBOU09iamVjdCB7Ci0gICAgSlNDb250ZXh0ICptX2NvbnRleHQ7CiAgICAgQ2xhc3Mg
bV9jbGFzczsKICAgICBib29sIG1fYmxvY2s7CiAgICAgSlNDbGFzc1JlZiBtX2NsYXNzUmVmOwpA
QCAtMzcxLDIzICszNzEsMjIgQEAgc3RhdGljIHZvaWQgY29weVByb3RvdHlwZVByb3BlcnRpZXMo
SlNDb250ZXh0ICpjb250ZXh0LCBDbGFzcyBvYmpjQ2xhc3MsIFByb3RvY28KICAgICBKU0M6Oldl
YWs8SlNDOjpKU09iamVjdD4gbV9jb25zdHJ1Y3RvcjsKIH0KIAotLSAoaWQpaW5pdFdpdGhDb250
ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckNsYXNzOihDbGFzcyljbHM7Ci0tIChKU0M6OkpT
T2JqZWN0ICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0OwotLSAoSlNDOjpKU09iamVjdCAq
KWNvbnN0cnVjdG9yOwotLSAoSlNDOjpKU09iamVjdCAqKXByb3RvdHlwZTsKKy0gKGlkKWluaXRG
b3JDbGFzczooQ2xhc3MpY2xzOworLSAoSlNDOjpKU09iamVjdCAqKXdyYXBwZXJGb3JPYmplY3Q6
KGlkKW9iamVjdCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CistIChKU0M6OkpTT2Jq
ZWN0ICopY29uc3RydWN0b3JJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CistIChKU0M6
OkpTT2JqZWN0ICopcHJvdG90eXBlSW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OwogCiBA
ZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBKU09iakNDbGFzc0luZm8KIAotLSAoaWQpaW5pdFdpdGhD
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckNsYXNzOihDbGFzcyljbHMKKy0gKGlkKWlu
aXRGb3JDbGFzczooQ2xhc3MpY2xzCiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBp
ZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBjb25zdCBjaGFyKiBjbGFzc05h
bWUgPSBjbGFzc19nZXROYW1lKGNscyk7Ci0gICAgbV9jb250ZXh0ID0gY29udGV4dDsKICAgICBt
X2NsYXNzID0gY2xzOwogICAgIG1fYmxvY2sgPSBbY2xzIGlzU3ViY2xhc3NPZkNsYXNzOmdldE5T
QmxvY2tDbGFzcygpXTsKICAgICBKU0NsYXNzRGVmaW5pdGlvbiBkZWZpbml0aW9uOwpAQCAtNDU4
LDkgKzQ1Nyw5IEBAIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBhbGxvY2F0ZUNvbnN0cnVjdG9yRm9y
Q3VzdG9tQ2xhc3MoSlNDb250ZXh0ICpjb250ZXh0LCBjb25zCiAKIHR5cGVkZWYgc3RkOjpwYWly
PEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTT2JqZWN0Kj4gQ29uc3RydWN0b3JQcm90b3R5cGVQYWly
OwogCi0tIChDb25zdHJ1Y3RvclByb3RvdHlwZVBhaXIpYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFBy
b3RvdHlwZQorLSAoQ29uc3RydWN0b3JQcm90b3R5cGVQYWlyKWFsbG9jYXRlQ29uc3RydWN0b3JB
bmRQcm90b3R5cGVJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsKLSAgICBKU09iakND
bGFzc0luZm8qIHN1cGVyQ2xhc3NJbmZvID0gW21fY29udGV4dC53cmFwcGVyTWFwIGNsYXNzSW5m
b0ZvckNsYXNzOmNsYXNzX2dldFN1cGVyY2xhc3MobV9jbGFzcyldOworICAgIEpTT2JqQ0NsYXNz
SW5mbyogc3VwZXJDbGFzc0luZm8gPSBbY29udGV4dC53cmFwcGVyTWFwIGNsYXNzSW5mb0ZvckNs
YXNzOmNsYXNzX2dldFN1cGVyY2xhc3MobV9jbGFzcyldOwogCiAgICAgQVNTRVJUKCFtX2NvbnN0
cnVjdG9yIHx8ICFtX3Byb3RvdHlwZSk7CiAgICAgQVNTRVJUKChtX2NsYXNzID09IFtOU09iamVj
dCBjbGFzc10pID09ICFzdXBlckNsYXNzSW5mbyk7CkBAIC00NjksMzkgKzQ2OCwzNiBAQCB0eXBl
ZGVmIHN0ZDo6cGFpcjxKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU09iamVjdCo+IENvbnN0cnVjdG9y
UHJvdG90eXBlUGFpcjsKICAgICBKU0M6OkpTT2JqZWN0KiBqc0NvbnN0cnVjdG9yID0gbV9jb25z
dHJ1Y3Rvci5nZXQoKTsKIAogICAgIGlmICghc3VwZXJDbGFzc0luZm8pIHsKLSAgICAgICAgSlND
b250ZXh0UmVmIGNDb250ZXh0ID0gW21fY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdOwotICAg
ICAgICBKU1ZhbHVlICpjb25zdHJ1Y3RvciA9IG1fY29udGV4dFtAIk9iamVjdCJdOworICAgICAg
ICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTR2xvYmFsT2JqZWN0KFtj
b250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOwogICAgICAgICBpZiAoIWpzQ29uc3RydWN0b3Ip
Ci0gICAgICAgICAgICBqc0NvbnN0cnVjdG9yID0gdG9KUyhKU1ZhbHVlVG9PYmplY3QoY0NvbnRl
eHQsIHZhbHVlSW50ZXJuYWxWYWx1ZShjb25zdHJ1Y3RvciksIDApKTsKKyAgICAgICAgICAgIGpz
Q29uc3RydWN0b3IgPSBnbG9iYWxPYmplY3QtPm9iamVjdENvbnN0cnVjdG9yKCk7CiAKLSAgICAg
ICAgaWYgKCFqc1Byb3RvdHlwZSkgewotICAgICAgICAgICAgSlNWYWx1ZSAqcHJvdG90eXBlID0g
Y29uc3RydWN0b3JbQCJwcm90b3R5cGUiXTsKLSAgICAgICAgICAgIGpzUHJvdG90eXBlID0gdG9K
UyhKU1ZhbHVlVG9PYmplY3QoY0NvbnRleHQsIHZhbHVlSW50ZXJuYWxWYWx1ZShwcm90b3R5cGUp
LCAwKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFqc1Byb3RvdHlwZSkKKyAgICAgICAgICAg
IGpzUHJvdG90eXBlID0gZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKTsKICAgICB9IGVs
c2UgewogICAgICAgICBjb25zdCBjaGFyKiBjbGFzc05hbWUgPSBjbGFzc19nZXROYW1lKG1fY2xh
c3MpOwogCiAgICAgICAgIC8vIENyZWF0ZSBvciBncmFiIHRoZSBwcm90b3R5cGUvY29uc3RydWN0
b3IgcGFpci4KICAgICAgICAgaWYgKCFqc1Byb3RvdHlwZSkKLSAgICAgICAgICAgIGpzUHJvdG90
eXBlID0gb2JqZWN0V2l0aEN1c3RvbUJyYW5kKG1fY29udGV4dCwgW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlc1Byb3RvdHlwZSIsIGNsYXNzTmFtZV0pOworICAgICAgICAgICAganNQcm90
b3R5cGUgPSBvYmplY3RXaXRoQ3VzdG9tQnJhbmQoY29udGV4dCwgW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlc1Byb3RvdHlwZSIsIGNsYXNzTmFtZV0pOwogCiAgICAgICAgIGlmICghanND
b25zdHJ1Y3RvcikKLSAgICAgICAgICAgIGpzQ29uc3RydWN0b3IgPSBhbGxvY2F0ZUNvbnN0cnVj
dG9yRm9yQ3VzdG9tQ2xhc3MobV9jb250ZXh0LCBjbGFzc05hbWUsIG1fY2xhc3MpOworICAgICAg
ICAgICAganNDb25zdHJ1Y3RvciA9IGFsbG9jYXRlQ29uc3RydWN0b3JGb3JDdXN0b21DbGFzcyhj
b250ZXh0LCBjbGFzc05hbWUsIG1fY2xhc3MpOwogCi0gICAgICAgIEpTVmFsdWUqIHByb3RvdHlw
ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoanNQcm90b3R5cGUpIGluQ29u
dGV4dDptX2NvbnRleHRdOwotICAgICAgICBKU1ZhbHVlKiBjb25zdHJ1Y3RvciA9IFtKU1ZhbHVl
IHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoanNDb25zdHJ1Y3RvcikgaW5Db250ZXh0Om1fY29u
dGV4dF07CisgICAgICAgIEpTVmFsdWUqIHByb3RvdHlwZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aEpT
VmFsdWVSZWY6dG9SZWYoanNQcm90b3R5cGUpIGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAg
SlNWYWx1ZSogY29uc3RydWN0b3IgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVm
KGpzQ29uc3RydWN0b3IpIGluQ29udGV4dDpjb250ZXh0XTsKICAgICAgICAgcHV0Tm9uRW51bWVy
YWJsZShwcm90b3R5cGUsIEAiY29uc3RydWN0b3IiLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIHB1
dE5vbkVudW1lcmFibGUoY29uc3RydWN0b3IsIEAicHJvdG90eXBlIiwgcHJvdG90eXBlKTsKIAog
ICAgICAgICBQcm90b2NvbCAqZXhwb3J0UHJvdG9jb2wgPSBnZXRKU0V4cG9ydFByb3RvY29sKCk7
CiAgICAgICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVudGluZ1Byb3RvY29sKG1fY2xhc3MsIGV4
cG9ydFByb3RvY29sLCBeKFByb3RvY29sICpwcm90b2NvbCl7Ci0gICAgICAgICAgICBjb3B5UHJv
dG90eXBlUHJvcGVydGllcyhtX2NvbnRleHQsIG1fY2xhc3MsIHByb3RvY29sLCBwcm90b3R5cGUp
OwotICAgICAgICAgICAgY29weU1ldGhvZHNUb09iamVjdChtX2NvbnRleHQsIG1fY2xhc3MsIHBy
b3RvY29sLCBOTywgY29uc3RydWN0b3IpOworICAgICAgICAgICAgY29weVByb3RvdHlwZVByb3Bl
cnRpZXMoY29udGV4dCwgbV9jbGFzcywgcHJvdG9jb2wsIHByb3RvdHlwZSk7CisgICAgICAgICAg
ICBjb3B5TWV0aG9kc1RvT2JqZWN0KGNvbnRleHQsIG1fY2xhc3MsIHByb3RvY29sLCBOTywgY29u
c3RydWN0b3IpOwogICAgICAgICB9KTsKIAogICAgICAgICAvLyBTZXQgW1Byb3RvdHlwZV0uCi0g
ICAgICAgIEpTQzo6SlNPYmplY3QqIHN1cGVyQ2xhc3NQcm90b3R5cGUgPSBbc3VwZXJDbGFzc0lu
Zm8gcHJvdG90eXBlXTsKLSAgICAgICAgSlNPYmplY3RTZXRQcm90b3R5cGUoW21fY29udGV4dCBK
U0dsb2JhbENvbnRleHRSZWZdLCB0b1JlZihqc1Byb3RvdHlwZSksIHRvUmVmKHN1cGVyQ2xhc3NQ
cm90b3R5cGUpKTsKKyAgICAgICAgSlNDOjpKU09iamVjdCogc3VwZXJDbGFzc1Byb3RvdHlwZSA9
IFtzdXBlckNsYXNzSW5mbyBwcm90b3R5cGVJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIEpT
T2JqZWN0U2V0UHJvdG90eXBlKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIHRvUmVmKGpz
UHJvdG90eXBlKSwgdG9SZWYoc3VwZXJDbGFzc1Byb3RvdHlwZSkpOwogICAgIH0KIAogICAgIG1f
cHJvdG90eXBlID0ganNQcm90b3R5cGU7CkBAIC01MDksNDEgKzUwNSw0MSBAQCB0eXBlZGVmIHN0
ZDo6cGFpcjxKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU09iamVjdCo+IENvbnN0cnVjdG9yUHJvdG90
eXBlUGFpcjsKICAgICByZXR1cm4gQ29uc3RydWN0b3JQcm90b3R5cGVQYWlyKGpzQ29uc3RydWN0
b3IsIGpzUHJvdG90eXBlKTsKIH0KIAotLSAoSlNDOjpKU09iamVjdCopd3JhcHBlckZvck9iamVj
dDooaWQpb2JqZWN0CistIChKU0M6OkpTT2JqZWN0Kil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmpl
Y3QgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CiB7CiAgICAgQVNTRVJUKFtvYmplY3Qg
aXNLaW5kT2ZDbGFzczptX2NsYXNzXSk7CiAgICAgQVNTRVJUKG1fYmxvY2sgPT0gW29iamVjdCBp
c0tpbmRPZkNsYXNzOmdldE5TQmxvY2tDbGFzcygpXSk7CiAgICAgaWYgKG1fYmxvY2spIHsKLSAg
ICAgICAgaWYgKEpTT2JqZWN0UmVmIG1ldGhvZCA9IG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yQmxv
Y2sobV9jb250ZXh0LCBvYmplY3QpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlICpjb25zdHJ1Y3Rv
ciA9IFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6bWV0aG9kIGluQ29udGV4dDptX2NvbnRl
eHRdOwotICAgICAgICAgICAgSlNWYWx1ZSAqcHJvdG90eXBlID0gW0pTVmFsdWUgdmFsdWVXaXRo
TmV3T2JqZWN0SW5Db250ZXh0Om1fY29udGV4dF07CisgICAgICAgIGlmIChKU09iamVjdFJlZiBt
ZXRob2QgPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKGNvbnRleHQsIG9iamVjdCkpIHsK
KyAgICAgICAgICAgIEpTVmFsdWUgKmNvbnN0cnVjdG9yID0gW0pTVmFsdWUgdmFsdWVXaXRoSlNW
YWx1ZVJlZjptZXRob2QgaW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICAgICAgSlNWYWx1ZSAq
cHJvdG90eXBlID0gW0pTVmFsdWUgdmFsdWVXaXRoTmV3T2JqZWN0SW5Db250ZXh0OmNvbnRleHRd
OwogICAgICAgICAgICAgcHV0Tm9uRW51bWVyYWJsZShjb25zdHJ1Y3RvciwgQCJwcm90b3R5cGUi
LCBwcm90b3R5cGUpOwogICAgICAgICAgICAgcHV0Tm9uRW51bWVyYWJsZShwcm90b3R5cGUsIEAi
Y29uc3RydWN0b3IiLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgICAgICByZXR1cm4gdG9KUyhtZXRo
b2QpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgSlNDOjpKU09iamVjdCogcHJvdG90eXBlID0g
W3NlbGYgcHJvdG90eXBlXTsKKyAgICBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUgPSBbc2VsZiBw
cm90b3R5cGVJbkNvbnRleHQ6Y29udGV4dF07CiAKLSAgICBKU0M6OkpTT2JqZWN0KiB3cmFwcGVy
ID0gbWFrZVdyYXBwZXIoW21fY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCBtX2NsYXNzUmVm
LCBvYmplY3QpOwotICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKFttX2NvbnRleHQgSlNHbG9iYWxD
b250ZXh0UmVmXSwgdG9SZWYod3JhcHBlciksIHRvUmVmKHByb3RvdHlwZSkpOworICAgIEpTQzo6
SlNPYmplY3QqIHdyYXBwZXIgPSBtYWtlV3JhcHBlcihbY29udGV4dCBKU0dsb2JhbENvbnRleHRS
ZWZdLCBtX2NsYXNzUmVmLCBvYmplY3QpOworICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKFtjb250
ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0sIHRvUmVmKHdyYXBwZXIpLCB0b1JlZihwcm90b3R5cGUp
KTsKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KIAotLSAoSlNDOjpKU09iamVjdCopY29uc3RydWN0
b3IKKy0gKEpTQzo6SlNPYmplY3QqKWNvbnN0cnVjdG9ySW5Db250ZXh0OihKU0NvbnRleHQgKilj
b250ZXh0CiB7CiAgICAgSlNDOjpKU09iamVjdCogY29uc3RydWN0b3IgPSBtX2NvbnN0cnVjdG9y
LmdldCgpOwogICAgIGlmICghY29uc3RydWN0b3IpCi0gICAgICAgIGNvbnN0cnVjdG9yID0gW3Nl
bGYgYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZV0uZmlyc3Q7CisgICAgICAgIGNvbnN0
cnVjdG9yID0gW3NlbGYgYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZUluQ29udGV4dDpj
b250ZXh0XS5maXJzdDsKICAgICBBU1NFUlQoISFjb25zdHJ1Y3Rvcik7CiAgICAgcmV0dXJuIGNv
bnN0cnVjdG9yOwogfQogCi0tIChKU0M6OkpTT2JqZWN0Kilwcm90b3R5cGUKKy0gKEpTQzo6SlNP
YmplY3QqKXByb3RvdHlwZUluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAogewogICAgIEpT
Qzo6SlNPYmplY3QqIHByb3RvdHlwZSA9IG1fcHJvdG90eXBlLmdldCgpOwogICAgIGlmICghcHJv
dG90eXBlKQotICAgICAgICBwcm90b3R5cGUgPSBbc2VsZiBhbGxvY2F0ZUNvbnN0cnVjdG9yQW5k
UHJvdG90eXBlXS5zZWNvbmQ7CisgICAgICAgIHByb3RvdHlwZSA9IFtzZWxmIGFsbG9jYXRlQ29u
c3RydWN0b3JBbmRQcm90b3R5cGVJbkNvbnRleHQ6Y29udGV4dF0uc2Vjb25kOwogICAgIEFTU0VS
VCghIXByb3RvdHlwZSk7CiAgICAgcmV0dXJuIHByb3RvdHlwZTsKIH0KQEAgLTU1MSwxMyArNTQ3
LDEyIEBAIHR5cGVkZWYgc3RkOjpwYWlyPEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTT2JqZWN0Kj4g
Q29uc3RydWN0b3JQcm90b3R5cGVQYWlyOwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gSlNXcmFw
cGVyTWFwIHsKLSAgICBKU0NvbnRleHQgKm1fY29udGV4dDsKICAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICptX2NsYXNzTWFwOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0M6OldlYWtHQ01hcDxpZCwg
SlNDOjpKU09iamVjdD4+IG1fY2FjaGVkSlNXcmFwcGVyczsKICAgICBOU01hcFRhYmxlICptX2Nh
Y2hlZE9iakNXcmFwcGVyczsKIH0KIAotLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0CistIChpZClpbml0V2l0aEdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4
dFJlZiljb250ZXh0CiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBpZiAoIXNlbGYp
CkBAIC01NjcsOSArNTYyLDEwIEBAIHR5cGVkZWYgc3RkOjpwYWlyPEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTT2JqZWN0Kj4gQ29uc3RydWN0b3JQcm90b3R5cGVQYWlyOwogICAgIE5TUG9pbnRlckZ1
bmN0aW9uc09wdGlvbnMgdmFsdWVPcHRpb25zID0gTlNQb2ludGVyRnVuY3Rpb25zV2Vha01lbW9y
eSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVjdFBlcnNvbmFsaXR5OwogICAgIG1fY2FjaGVkT2Jq
Q1dyYXBwZXJzID0gW1tOU01hcFRhYmxlIGFsbG9jXSBpbml0V2l0aEtleU9wdGlvbnM6a2V5T3B0
aW9ucyB2YWx1ZU9wdGlvbnM6dmFsdWVPcHRpb25zIGNhcGFjaXR5OjBdOwogCi0gICAgbV9jYWNo
ZWRKU1dyYXBwZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxKU0M6OldlYWtHQ01hcDxpZCwgSlNDOjpK
U09iamVjdD4+KHRvSlMoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSktPnZtKCkpOworICAg
IG1fY2FjaGVkSlNXcmFwcGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDOjpXZWFrR0NNYXA8aWQs
IEpTQzo6SlNPYmplY3Q+Pih0b0pTKGNvbnRleHQpLT52bSgpKTsKIAotICAgIG1fY29udGV4dCA9
IGNvbnRleHQ7CisgICAgQVNTRVJUKCF0b0pTR2xvYmFsT2JqZWN0KGNvbnRleHQpLT53cmFwcGVy
TWFwKCkpOworICAgIHRvSlNHbG9iYWxPYmplY3QoY29udGV4dCktPnNldFdyYXBwZXJNYXAoc2Vs
Zik7CiAgICAgbV9jbGFzc01hcCA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07
CiAgICAgcmV0dXJuIHNlbGY7CiB9CkBAIC01OTQsMjAgKzU5MCwyMSBAQCB0eXBlZGVmIHN0ZDo6
cGFpcjxKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU09iamVjdCo+IENvbnN0cnVjdG9yUHJvdG90eXBl
UGFpcjsKICAgICBpZiAoJ18nID09ICpjbGFzc19nZXROYW1lKGNscykpCiAgICAgICAgIHJldHVy
biBtX2NsYXNzTWFwW2Nsc10gPSBbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczpjbGFzc19nZXRTdXBl
cmNsYXNzKGNscyldOwogCi0gICAgcmV0dXJuIG1fY2xhc3NNYXBbY2xzXSA9IFtbW0pTT2JqQ0Ns
YXNzSW5mbyBhbGxvY10gaW5pdFdpdGhDb250ZXh0Om1fY29udGV4dCBmb3JDbGFzczpjbHNdIGF1
dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gbV9jbGFzc01hcFtjbHNdID0gW1tbSlNPYmpDQ2xhc3NJ
bmZvIGFsbG9jXSBpbml0Rm9yQ2xhc3M6Y2xzXSBhdXRvcmVsZWFzZV07CiB9CiAKLS0gKEpTVmFs
dWUgKilqc1dyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdAorLSAoSlNWYWx1ZSAqKWpzV3JhcHBl
ckZvck9iamVjdDooaWQpb2JqZWN0IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAogewor
ICAgIEFTU0VSVCh0b0pTR2xvYmFsT2JqZWN0KFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0p
LT53cmFwcGVyTWFwKCkgPT0gc2VsZik7CiAgICAgSlNDOjpKU09iamVjdCoganNXcmFwcGVyID0g
bV9jYWNoZWRKU1dyYXBwZXJzLT5nZXQob2JqZWN0KTsKICAgICBpZiAoanNXcmFwcGVyKQotICAg
ICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihqc1dyYXBwZXIp
IGluQ29udGV4dDptX2NvbnRleHRdOworICAgICAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRo
SlNWYWx1ZVJlZjp0b1JlZihqc1dyYXBwZXIpIGluQ29udGV4dDpjb250ZXh0XTsKIAogICAgIGlm
IChjbGFzc19pc01ldGFDbGFzcyhvYmplY3RfZ2V0Q2xhc3Mob2JqZWN0KSkpCi0gICAgICAgIGpz
V3JhcHBlciA9IFtbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczooQ2xhc3Mpb2JqZWN0XSBjb25zdHJ1
Y3Rvcl07CisgICAgICAgIGpzV3JhcHBlciA9IFtbc2VsZiBjbGFzc0luZm9Gb3JDbGFzczooQ2xh
c3Mpb2JqZWN0XSBjb25zdHJ1Y3RvckluQ29udGV4dDpjb250ZXh0XTsKICAgICBlbHNlIHsKICAg
ICAgICAgSlNPYmpDQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBbc2VsZiBjbGFzc0luZm9Gb3JDbGFz
czpbb2JqZWN0IGNsYXNzXV07Ci0gICAgICAgIGpzV3JhcHBlciA9IFtjbGFzc0luZm8gd3JhcHBl
ckZvck9iamVjdDpvYmplY3RdOworICAgICAgICBqc1dyYXBwZXIgPSBbY2xhc3NJbmZvIHdyYXBw
ZXJGb3JPYmplY3Q6b2JqZWN0IGluQ29udGV4dDpjb250ZXh0XTsKICAgICB9CiAKICAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5MQpAQCAt
NjE2LDE0ICs2MTMsMTUgQEAgdHlwZWRlZiBzdGQ6OnBhaXI8SlNDOjpKU09iamVjdCosIEpTQzo6
SlNPYmplY3QqPiBDb25zdHJ1Y3RvclByb3RvdHlwZVBhaXI7CiAgICAgLy8gKDIpIEEgbG9uZyBs
aXZlZCBvYmplY3QgbWF5IHJhY2sgdXAgbWFueSBKU1ZhbHVlcy4gV2hlbiB0aGUgY29udGV4dHMg
YXJlIHJlbGVhc2VkIHRoZXNlIHdpbGwgdW5wcm90ZWN0IHRoZSBhc3NvY2lhdGVkIEphdmFTY3Jp
cHQgb2JqZWN0cywKICAgICAvLyAgICAgYnV0IHN0aWxsLCB3b3VsZCBwcm9iYWJseSBuaWNlciBp
ZiB3ZSBtYWRlIGl0IHNvIHRoYXQgb25seSBvbmUgYXNzb2NpYXRlZCBvYmplY3Qgd2FzIHJlcXVp
cmVkLCBicm9hZGNhc3Rpbmcgb2JqZWN0IGRlYWxsb2MuCiAgICAgbV9jYWNoZWRKU1dyYXBwZXJz
LT5zZXQob2JqZWN0LCBqc1dyYXBwZXIpOwotICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhK
U1ZhbHVlUmVmOnRvUmVmKGpzV3JhcHBlcikgaW5Db250ZXh0Om1fY29udGV4dF07CisgICAgcmV0
dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoanNXcmFwcGVyKSBpbkNvbnRl
eHQ6Y29udGV4dF07CiB9CiAKLS0gKEpTVmFsdWUgKilvYmpjV3JhcHBlckZvckpTVmFsdWVSZWY6
KEpTVmFsdWVSZWYpdmFsdWUKKy0gKEpTVmFsdWUgKilvYmpjV3JhcHBlckZvckpTVmFsdWVSZWY6
KEpTVmFsdWVSZWYpdmFsdWUgaW5Db250ZXh0OmNvbnRleHQKIHsKKyAgICBBU1NFUlQodG9KU0ds
b2JhbE9iamVjdChbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKS0+d3JhcHBlck1hcCgpID09
IHNlbGYpOwogICAgIEpTVmFsdWUgKndyYXBwZXIgPSBzdGF0aWNfY2FzdDxKU1ZhbHVlICo+KE5T
TWFwR2V0KG1fY2FjaGVkT2JqQ1dyYXBwZXJzLCB2YWx1ZSkpOwogICAgIGlmICghd3JhcHBlcikg
ewotICAgICAgICB3cmFwcGVyID0gW1tbSlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1
ZSBpbkNvbnRleHQ6bV9jb250ZXh0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIHdyYXBwZXIgPSBb
W1tKU1ZhbHVlIGFsbG9jXSBpbml0V2l0aFZhbHVlOnZhbHVlIGluQ29udGV4dDpjb250ZXh0XSBh
dXRvcmVsZWFzZV07CiAgICAgICAgIE5TTWFwSW5zZXJ0KG1fY2FjaGVkT2JqQ1dyYXBwZXJzLCB2
YWx1ZSwgd3JhcHBlcik7CiAgICAgfQogICAgIHJldHVybiB3cmFwcGVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9KU0V4cG9ydFRlc3RzLm1tIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9KU0V4cG9ydFRlc3RzLm1tCmluZGV4IDlkMjJlM2Yw
ZTRjZDg2Zjc5MDNiZDNmNWJhZjE5YjE2MmFlYzM2MWIuLmM2OTExMDExZWRiZjA1NWVkMmE1Zjgy
Nzg4ZWFlZmU1NDYxOGRkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvSlNFeHBvcnRUZXN0cy5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rl
c3RzL0pTRXhwb3J0VGVzdHMubW0KQEAgLTEyNSw2ICsxMjUsMzQgQEAgZXh0ZXJuICJDIiB2b2lk
IGNoZWNrUmVzdWx0KE5TU3RyaW5nICpkZXNjcmlwdGlvbiwgYm9vbCBwYXNzZWQpOwogfQogQGVu
ZAogCitAcHJvdG9jb2wgQUpTRXhwb3J0IDxKU0V4cG9ydD4KKy0gKGluc3RhbmNldHlwZSlpbml0
OworQGVuZAorCitAaW50ZXJmYWNlIEEgOiBOU09iamVjdCA8QUpTRXhwb3J0PgorQGVuZAorCitA
aW1wbGVtZW50YXRpb24gQQorQGVuZAorCitzdGF0aWMgdm9pZCB3cmFwcGVyTGlmZXRpbWVJc1Rp
ZWRUb0dsb2JhbE9iamVjdCgpCit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRSZWY7
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtb
SlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAgY29udGV4dFJlZiA9IEpTR2xvYmFsQ29u
dGV4dFJldGFpbihjb250ZXh0LkpTR2xvYmFsQ29udGV4dFJlZik7CisgICAgICAgIGNvbnRleHRb
QCJBIl0gPSBBLmNsYXNzOworICAgICAgICBjaGVja1Jlc3VsdChAIkluaXRpYWwgd3JhcHBlcidz
IGNvbnN0cnVjdG9yIGlzIGl0c2VsZiIsIFtbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAIm5ldyBB
KCkuY29uc3RydWN0b3IgPT09IEEiXSB0b0Jvb2xdKTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0
V2l0aEpTR2xvYmFsQ29udGV4dFJlZjpjb250ZXh0UmVmXTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJOZXcgY29udGV4dCdzIHdyYXBwZXIncyBjb25zdHJ1Y3RvciBpcyBpdHNlbGYiLCBbW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJuZXcgQSgpLmNvbnN0cnVjdG9yID09PSBBIl0gdG9Cb29sXSk7
CisgICAgfQorCisgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0UmVmKTsKK30KKwog
dm9pZCBydW5KU0V4cG9ydFRlc3RzKCkKIHsKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKQEAgLTEz
Miw2ICsxNjAsNyBAQCB2b2lkIHJ1bkpTRXhwb3J0VGVzdHMoKQogICAgICAgICBbSlNFeHBvcnRU
ZXN0cyBleHBvcnRJbnN0YW5jZU1ldGhvZFdpdGhDbGFzc1Byb3RvY29sVGVzdF07CiAgICAgICAg
IFtKU0V4cG9ydFRlc3RzIGV4cG9ydER5bmFtaWNhbGx5R2VuZXJhdGVkUHJvdG9jb2xUZXN0XTsK
ICAgICB9CisgICAgd3JhcHBlckxpZmV0aW1lSXNUaWVkVG9HbG9iYWxPYmplY3QoKTsKIH0KIAog
I2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkubW0KaW5kZXggYmI2OWFkMGZhNzlhODYyYTNlZWViMTFjN2FjOWIwYmVk
OTBkNTkzMi4uZWViZWNiNmY1M2IxYWQwYjBlNzFlZjRiNzM1OTYxNzU4MTU5ZmYzOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpAQCAtMTUwNyw2ICsxNTA3
LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKQogICAgIGNoZWNrUmVz
dWx0KEAiTmVnYXRpdmUgbnVtYmVyIG1haW50YWluZWQgaXRzIG9yaWdpbmFsIHZhbHVlIiwgW1ty
ZXN1bHQgdG9TdHJpbmddIGlzRXF1YWxUb1N0cmluZzpAIi0xIl0pOwogfQogCisKIHZvaWQgdGVz
dE9iamVjdGl2ZUNBUEkoKQogewogICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEki
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmlu
ZGV4IDdlOWZlY2I3MWFiMTNhMGViMThmNDI3ZGUzODgwNTgxMDNlYmU1OGUuLmZhODg3ZDMxODdi
M2ViZmVhZjU2ZTc0NGYwMmI2YjRhODUxN2VhYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtNDUsOSArNDUsMTEgQEAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogc3RydWN0IE9wYXF1
ZUpTQ2xhc3M7CiBzdHJ1Y3QgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhOworT0JKQ19DTEFTUyBK
U1dyYXBwZXJNYXA7CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3MgSlNHbG9iYWxPYmpl
Y3RJbnNwZWN0b3JDb250cm9sbGVyOwpAQCAtODI1LDYgKzgyNyw5IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzOyB9CiAKKyAgICBKU1dyYXBwZXJNYXAqIHdyYXBwZXJNYXAoKSBjb25z
dCB7IHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFdyYXBwZXJNYXAo
SlNXcmFwcGVyTWFwKiBtYXApIHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CisKIHByb3RlY3RlZDoK
ICAgICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKGNvbnN0IElkZW50aWZpZXImIGksIEpTVmFsdWUgdiwgdW5zaWduZWQgYSkKQEAgLTg1NCw2
ICs4NTksNyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNs
ZWFyUmFyZURhdGEoSlNDZWxsKik7CiAKICAgICBib29sIG1fbmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MgeyBmYWxzZSB9OworICAgIFJldGFpblB0cjxKU1dyYXBwZXJNYXA+IG1fd3JhcHBlck1hcDsK
IH07CiAKIEpTR2xvYmFsT2JqZWN0KiBhc0dsb2JhbE9iamVjdChKU1ZhbHVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310895</attachid>
            <date>2017-05-22 12:04:30 -0700</date>
            <delta_ts>2017-05-22 12:48:41 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-167708-20170522120414.patch</filename>
            <type>text/plain</type>
            <size>22708</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDcyZWVhOGJiODc4NzUzMmU1NGMyODRhYzA4OWNmZjIwYzdhM2EyLi5iMGYyZmQwOTgxNTY2OGM4
MGE5NzIxZmYxMTgwYmI0MWRmNzM2MTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxNy0wNS0xOSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBbQ29jb2FdIEFuIGV4cG9ydGVkIE9iamVjdGl2ZSBDIGNsYXNz4oCZ
cyBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIGRvbid0IHBlcnNpc3QgYWNyb3NzIEpTQ29udGV4
dCBkZWFsbG9jYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NzcwOAorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgdGhlIE9iamVjdGl2ZSBDIHdyYXBwZXIgbWFwIHRvIHRo
ZSBnbG9iYWwgb2JqZWN0LiBJbiBvcmRlciB0byBtYWtlIHRoaXMgd29yayB0aGUgSlNXcmFwcGVy
TWFwCisgICAgICAgIGNsYXNzIG5vIGxvbmdlciBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgSlND
b250ZXh0LiBJbnN0ZWFkLCB0aGUgY29udGV4dCBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gZ2V0dGlu
ZyBhIHdyYXBwZXIuCisKKyAgICAgICAgQWxzbywgdGhpcyBwYXRjaCBmaXhlcyBhICJidWciIHdo
ZXJlIHdlIHdvdWxkIG9ic2VydmUgY2hhbmdlcyB0byB0aGUgT2JqZWN0IHByb3BlcnR5IG9uIHRo
ZSBnbG9iYWwgb2JqZWN0IHdoZW4KKyAgICAgICAgY3JlYXRpbmcgYSB3cmFwcGVyIGZvciBOU09i
amVjdC4KKworICAgICAgICAqIEFQSS9BUElDYXN0Lmg6CisgICAgICAgICh0b0pTR2xvYmFsT2Jq
ZWN0KToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQg
ZW5zdXJlV3JhcHBlck1hcF0pOgorICAgICAgICAoLVtKU0NvbnRleHQgaW5pdFdpdGhWaXJ0dWFs
TWFjaGluZTpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IGRlYWxsb2NdKToKKyAgICAgICAgKC1b
SlNDb250ZXh0IHdyYXBwZXJNYXBdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IGluaXRXaXRoR2xv
YmFsQ29udGV4dFJlZjpdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHdyYXBwZXJGb3JPYmpDT2Jq
ZWN0Ol0pOgorICAgICAgICAoLVtKU0NvbnRleHQgd3JhcHBlckZvckpTT2JqZWN0Ol0pOgorICAg
ICAgICAqIEFQSS9KU1dyYXBwZXJNYXAuaDoKKyAgICAgICAgKiBBUEkvSlNXcmFwcGVyTWFwLm1t
OgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gaW5pdEZvckNsYXNzOl0pOgorICAgICAgICAo
LVtKU09iakNDbGFzc0luZm8gYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZUluQ29udGV4
dDpdKToKKyAgICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIHdyYXBwZXJGb3JPYmplY3Q6aW5Db250
ZXh0Ol0pOgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gY29uc3RydWN0b3JJbkNvbnRleHQ6
XSk6CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBwcm90b3R5cGVJbkNvbnRleHQ6XSk6Cisg
ICAgICAgICgtW0pTV3JhcHBlck1hcCBpbml0V2l0aEdsb2JhbENvbnRleHRSZWY6XSk6CisgICAg
ICAgICgtW0pTV3JhcHBlck1hcCBjbGFzc0luZm9Gb3JDbGFzczpdKToKKyAgICAgICAgKC1bSlNX
cmFwcGVyTWFwIGpzV3JhcHBlckZvck9iamVjdDppbkNvbnRleHQ6XSk6CisgICAgICAgICgtW0pT
V3JhcHBlck1hcCBvYmpjV3JhcHBlckZvckpTVmFsdWVSZWY6aW5Db250ZXh0Ol0pOgorICAgICAg
ICAoLVtKU09iakNDbGFzc0luZm8gaW5pdFdpdGhDb250ZXh0OmZvckNsYXNzOl0pOiBEZWxldGVk
LgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3Rv
dHlwZV0pOiBEZWxldGVkLgorICAgICAgICAoLVtKU09iakNDbGFzc0luZm8gd3JhcHBlckZvck9i
amVjdDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGNvbnN0cnVjdG9y
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBwcm90b3R5cGVdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGluaXRXaXRoQ29udGV4dDpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGpzV3JhcHBlckZvck9iamVjdDpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIG9iamNXcmFwcGVyRm9ySlNWYWx1ZVJlZjpdKTog
RGVsZXRlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5tbToKKyAgICAgICAg
KHdyYXBwZXJMaWZldGltZUlzVGllZFRvR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKHJ1bkpTRXhw
b3J0VGVzdHMpOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Ondy
YXBwZXJNYXApOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6c2V0V3JhcHBlck1hcCk6
CisKIDIwMTctMDUtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNvcnQgc2hvdWxkIGFsc28gYWxsb3cgYSBudWxsIGNv
bXBhcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKaW5kZXggOGZlOGQ2MDM0OWFm
ODJkZTI2MzJlYTc2YmJmNzc0ZjAzNTc2ZmViNi4uMjFmM2E3ZGU5NDYwOTZmMDA1MGM3MjMwYTRj
NjYxNGVhOTRkMzQ3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElD
YXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKQEAgLTYwLDYg
KzYwLDExIEBAIGlubGluZSBKU0M6OkV4ZWNTdGF0ZSogdG9KUyhKU0dsb2JhbENvbnRleHRSZWYg
YykKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OkV4ZWNTdGF0ZSo+KGMpOwogfQog
CitpbmxpbmUgSlNDOjpKU0dsb2JhbE9iamVjdCogdG9KU0dsb2JhbE9iamVjdChKU0dsb2JhbENv
bnRleHRSZWYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gdG9KUyhjb250ZXh0KS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOworfQorCiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWVSZWYgdikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGV4ZWMsIGV4ZWMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQppbmRleCBmZDkzMmQ0MjViNDUx
YTQ0M2VkOTliMDY4Mzg1YTBhM2I0YTE4MjBlLi5hOWUzNjY2NTljNWE4NzUwYTBkYTJlNTA5NGQx
OGExNWE4MzBjMjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQpAQCAt
NDMsNyArNDMsNiBAQAogQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dCB7CiAgICAgSlNWaXJ0dWFs
TWFjaGluZSAqbV92aXJ0dWFsTWFjaGluZTsKICAgICBKU0dsb2JhbENvbnRleHRSZWYgbV9jb250
ZXh0OwotICAgIEpTV3JhcHBlck1hcCAqbV93cmFwcGVyTWFwOwogICAgIEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+IG1fZXhjZXB0aW9uOwogfQogCkBAIC01Miw2ICs1MSwxMiBAQAogICAgIHJl
dHVybiBtX2NvbnRleHQ7CiB9CiAKKy0gKHZvaWQpZW5zdXJlV3JhcHBlck1hcAoreworICAgIGlm
ICghdG9KUyhbc2VsZiBKU0dsb2JhbENvbnRleHRSZWZdKS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT53cmFwcGVyTWFwKCkpCisgICAgICAgIFtbSlNXcmFwcGVyTWFwIGFsbG9jXSBpbml0V2l0aEds
b2JhbENvbnRleHRSZWY6W3NlbGYgSlNHbG9iYWxDb250ZXh0UmVmXV07Cit9CisKIC0gKGluc3Rh
bmNldHlwZSlpbml0CiB7CiAgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6
W1tbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdXTsKQEAgLTY1LDEy
ICs3MCwxMiBAQAogCiAgICAgbV92aXJ0dWFsTWFjaGluZSA9IFt2aXJ0dWFsTWFjaGluZSByZXRh
aW5dOwogICAgIG1fY29udGV4dCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoZ2V0R3Jv
dXBGcm9tVmlydHVhbE1hY2hpbmUodmlydHVhbE1hY2hpbmUpLCAwKTsKLSAgICBtX3dyYXBwZXJN
YXAgPSBbW0pTV3JhcHBlck1hcCBhbGxvY10gaW5pdFdpdGhDb250ZXh0OnNlbGZdOwogCiAgICAg
c2VsZi5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmV4
Y2VwdGlvblZhbHVlKSB7CiAgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFs
dWU7CiAgICAgfTsKIAorICAgIFtzZWxmIGVuc3VyZVdyYXBwZXJNYXBdOwogICAgIFttX3ZpcnR1
YWxNYWNoaW5lIGFkZENvbnRleHQ6c2VsZiBmb3JHbG9iYWxDb250ZXh0UmVmOm1fY29udGV4dF07
CiAKICAgICByZXR1cm4gc2VsZjsKQEAgLTc5LDcgKzg0LDYgQEAKIC0gKHZvaWQpZGVhbGxvYwog
ewogICAgIG1fZXhjZXB0aW9uLmNsZWFyKCk7Ci0gICAgW21fd3JhcHBlck1hcCByZWxlYXNlXTsK
ICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKG1fY29udGV4dCk7CiAgICAgW21fdmlydHVhbE1h
Y2hpbmUgcmVsZWFzZV07CiAgICAgW19leGNlcHRpb25IYW5kbGVyIHJlbGVhc2VdOwpAQCAtMTI1
LDcgKzEyOSw3IEBACiAKIC0gKEpTV3JhcHBlck1hcCAqKXdyYXBwZXJNYXAKIHsKLSAgICByZXR1
cm4gbV93cmFwcGVyTWFwOworICAgIHJldHVybiB0b0pTKG1fY29udGV4dCktPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+d3JhcHBlck1hcCgpOwogfQogCiAtIChKU1ZhbHVlICopZ2xvYmFsT2JqZWN0
CkBAIC0yNTgsNyArMjYyLDcgQEAKICAgICBtX3ZpcnR1YWxNYWNoaW5lID0gW1tKU1ZpcnR1YWxN
YWNoaW5lIHZpcnR1YWxNYWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmZ2xvYmFsT2Jq
ZWN0LT52bSgpKV0gcmV0YWluXTsKICAgICBBU1NFUlQobV92aXJ0dWFsTWFjaGluZSk7CiAgICAg
bV9jb250ZXh0ID0gSlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHQpOwotICAgIG1fd3JhcHBl
ck1hcCA9IFtbSlNXcmFwcGVyTWFwIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6c2VsZl07CisgICAg
W3NlbGYgZW5zdXJlV3JhcHBlck1hcF07CiAKICAgICBzZWxmLmV4Y2VwdGlvbkhhbmRsZXIgPSBe
KEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqZXhjZXB0aW9uVmFsdWUpIHsKICAgICAgICAg
Y29udGV4dC5leGNlcHRpb24gPSBleGNlcHRpb25WYWx1ZTsKQEAgLTMwOSwxMyArMzEzLDEzIEBA
CiAtIChKU1ZhbHVlICopd3JhcHBlckZvck9iakNPYmplY3Q6KGlkKW9iamVjdAogewogICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2tlcih0b0pTKG1fY29udGV4dCkpOwotICAgIHJldHVybiBbbV93
cmFwcGVyTWFwIGpzV3JhcHBlckZvck9iamVjdDpvYmplY3RdOworICAgIHJldHVybiBbW3NlbGYg
d3JhcHBlck1hcF0ganNXcmFwcGVyRm9yT2JqZWN0Om9iamVjdCBpbkNvbnRleHQ6c2VsZl07CiB9
CiAKIC0gKEpTVmFsdWUgKil3cmFwcGVyRm9ySlNPYmplY3Q6KEpTVmFsdWVSZWYpdmFsdWUKIHsK
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodG9KUyhtX2NvbnRleHQpKTsKLSAgICByZXR1
cm4gW21fd3JhcHBlck1hcCBvYmpjV3JhcHBlckZvckpTVmFsdWVSZWY6dmFsdWVdOworICAgIHJl
dHVybiBbW3NlbGYgd3JhcHBlck1hcF0gb2JqY1dyYXBwZXJGb3JKU1ZhbHVlUmVmOnZhbHVlIGlu
Q29udGV4dDpzZWxmXTsKIH0KIAogKyAoSlNDb250ZXh0ICopY29udGV4dFdpdGhKU0dsb2JhbENv
bnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAuaAppbmRleCBjNmFhMWFmMTM4NzhiM2E5NmJkMmM0NTI2
MmUzOWExNDUxNDE3OWY0Li4wNDZjYzQyOGQwNTMzYmRjZjNjNTU5NGNhZGM2ZTllOGYyMzI1MGYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgKQEAgLTMxLDExICsz
MSwxMSBAQAogCiBAaW50ZXJmYWNlIEpTV3JhcHBlck1hcCA6IE5TT2JqZWN0CiAKLS0gKGlkKWlu
aXRXaXRoQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKKy0gKGlkKWluaXRXaXRoR2xvYmFs
Q29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWNvbnRleHQ7CiAKLS0gKEpTVmFsdWUgKilq
c1dyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdDsKKy0gKEpTVmFsdWUgKilqc1dyYXBwZXJGb3JP
YmplY3Q6KGlkKW9iamVjdCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CiAKLS0gKEpT
VmFsdWUgKilvYmpjV3JhcHBlckZvckpTVmFsdWVSZWY6KEpTVmFsdWVSZWYpdmFsdWU7CistIChK
U1ZhbHVlICopb2JqY1dyYXBwZXJGb3JKU1ZhbHVlUmVmOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKIAogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNXcmFwcGVyTWFwLm1tCmluZGV4IGU3Yjg0M2E2MGZjZmI1YmUxMjRkM2FjNjVkMzgw
ODViMWZjYzYyMDAuLjdkOGI2ZjhmMTg2NjlhZmE3ZmM1YzE1MmQ1OTNmYzA5MTViMDZlYmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCkBAIC0zNSw2ICszNSw3
IEBACiAjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKICNpbXBvcnQgIk9iakNDYWxsYmFja0Z1bmN0
aW9uLmgiCiAjaW1wb3J0ICJPYmpjUnVudGltZUV4dHJhcy5oIgorI2ltcG9ydCAiT2JqZWN0Q29u
c3RydWN0b3IuaCIKICNpbXBvcnQgIldlYWtHQ01hcC5oIgogI2ltcG9ydCAiV2Vha0dDTWFwSW5s
aW5lcy5oIgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtMzYzLDcgKzM2NCw2IEBAIHN0YXRp
YyB2b2lkIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKEpTQ29udGV4dCAqY29udGV4dCwgQ2xhc3Mg
b2JqY0NsYXNzLCBQcm90b2NvCiB9CiAKIEBpbnRlcmZhY2UgSlNPYmpDQ2xhc3NJbmZvIDogTlNP
YmplY3QgewotICAgIEpTQ29udGV4dCAqbV9jb250ZXh0OwogICAgIENsYXNzIG1fY2xhc3M7CiAg
ICAgYm9vbCBtX2Jsb2NrOwogICAgIEpTQ2xhc3NSZWYgbV9jbGFzc1JlZjsKQEAgLTM3MSwyMyAr
MzcxLDIyIEBAIHN0YXRpYyB2b2lkIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKEpTQ29udGV4dCAq
Y29udGV4dCwgQ2xhc3Mgb2JqY0NsYXNzLCBQcm90b2NvCiAgICAgSlNDOjpXZWFrPEpTQzo6SlNP
YmplY3Q+IG1fY29uc3RydWN0b3I7CiB9CiAKLS0gKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250
ZXh0ICopY29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzOwotLSAoSlNDOjpKU09iamVjdCAqKXdy
YXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdDsKLS0gKEpTQzo6SlNPYmplY3QgKiljb25zdHJ1Y3Rv
cjsKLS0gKEpTQzo6SlNPYmplY3QgKilwcm90b3R5cGU7CistIChpZClpbml0Rm9yQ2xhc3M6KENs
YXNzKWNsczsKKy0gKEpTQzo6SlNPYmplY3QgKil3cmFwcGVyRm9yT2JqZWN0OihpZClvYmplY3Qg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLSAoSlNDOjpKU09iamVjdCAqKWNvbnN0
cnVjdG9ySW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworLSAoSlNDOjpKU09iamVjdCAq
KXByb3RvdHlwZUluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKIAogQGVuZAogCiBAaW1w
bGVtZW50YXRpb24gSlNPYmpDQ2xhc3NJbmZvCiAKLS0gKGlkKWluaXRXaXRoQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dCBmb3JDbGFzczooQ2xhc3MpY2xzCistIChpZClpbml0Rm9yQ2xhc3M6
KENsYXNzKWNscwogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgaWYgKCFzZWxmKQog
ICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gY2xhc3Nf
Z2V0TmFtZShjbHMpOwotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CiAgICAgbV9jbGFzcyA9IGNs
czsKICAgICBtX2Jsb2NrID0gW2NscyBpc1N1YmNsYXNzT2ZDbGFzczpnZXROU0Jsb2NrQ2xhc3Mo
KV07CiAgICAgSlNDbGFzc0RlZmluaXRpb24gZGVmaW5pdGlvbjsKQEAgLTQ1OCw5ICs0NTcsOSBA
QCBzdGF0aWMgSlNDOjpKU09iamVjdCogYWxsb2NhdGVDb25zdHJ1Y3RvckZvckN1c3RvbUNsYXNz
KEpTQ29udGV4dCAqY29udGV4dCwgY29ucwogCiB0eXBlZGVmIHN0ZDo6cGFpcjxKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU09iamVjdCo+IENvbnN0cnVjdG9yUHJvdG90eXBlUGFpcjsKIAotLSAoQ29u
c3RydWN0b3JQcm90b3R5cGVQYWlyKWFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGUKKy0g
KENvbnN0cnVjdG9yUHJvdG90eXBlUGFpcilhbGxvY2F0ZUNvbnN0cnVjdG9yQW5kUHJvdG90eXBl
SW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CiB7Ci0gICAgSlNPYmpDQ2xhc3NJbmZvKiBz
dXBlckNsYXNzSW5mbyA9IFttX2NvbnRleHQud3JhcHBlck1hcCBjbGFzc0luZm9Gb3JDbGFzczpj
bGFzc19nZXRTdXBlcmNsYXNzKG1fY2xhc3MpXTsKKyAgICBKU09iakNDbGFzc0luZm8qIHN1cGVy
Q2xhc3NJbmZvID0gW2NvbnRleHQud3JhcHBlck1hcCBjbGFzc0luZm9Gb3JDbGFzczpjbGFzc19n
ZXRTdXBlcmNsYXNzKG1fY2xhc3MpXTsKIAogICAgIEFTU0VSVCghbV9jb25zdHJ1Y3RvciB8fCAh
bV9wcm90b3R5cGUpOwogICAgIEFTU0VSVCgobV9jbGFzcyA9PSBbTlNPYmplY3QgY2xhc3NdKSA9
PSAhc3VwZXJDbGFzc0luZm8pOwpAQCAtNDY5LDM5ICs0NjgsMzYgQEAgdHlwZWRlZiBzdGQ6OnBh
aXI8SlNDOjpKU09iamVjdCosIEpTQzo6SlNPYmplY3QqPiBDb25zdHJ1Y3RvclByb3RvdHlwZVBh
aXI7CiAgICAgSlNDOjpKU09iamVjdCoganNDb25zdHJ1Y3RvciA9IG1fY29uc3RydWN0b3IuZ2V0
KCk7CiAKICAgICBpZiAoIXN1cGVyQ2xhc3NJbmZvKSB7Ci0gICAgICAgIEpTQ29udGV4dFJlZiBj
Q29udGV4dCA9IFttX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXTsKLSAgICAgICAgSlNWYWx1
ZSAqY29uc3RydWN0b3IgPSBtX2NvbnRleHRbQCJPYmplY3QiXTsKKyAgICAgICAgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0dsb2JhbE9iamVjdChbY29udGV4dCBKU0ds
b2JhbENvbnRleHRSZWZdKTsKICAgICAgICAgaWYgKCFqc0NvbnN0cnVjdG9yKQotICAgICAgICAg
ICAganNDb25zdHJ1Y3RvciA9IHRvSlMoSlNWYWx1ZVRvT2JqZWN0KGNDb250ZXh0LCB2YWx1ZUlu
dGVybmFsVmFsdWUoY29uc3RydWN0b3IpLCAwKSk7CisgICAgICAgICAgICBqc0NvbnN0cnVjdG9y
ID0gZ2xvYmFsT2JqZWN0LT5vYmplY3RDb25zdHJ1Y3RvcigpOwogCi0gICAgICAgIGlmICghanNQ
cm90b3R5cGUpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgKnByb3RvdHlwZSA9IGNvbnN0cnVjdG9y
W0AicHJvdG90eXBlIl07Ci0gICAgICAgICAgICBqc1Byb3RvdHlwZSA9IHRvSlMoSlNWYWx1ZVRv
T2JqZWN0KGNDb250ZXh0LCB2YWx1ZUludGVybmFsVmFsdWUocHJvdG90eXBlKSwgMCkpOwotICAg
ICAgICB9CisgICAgICAgIGlmICghanNQcm90b3R5cGUpCisgICAgICAgICAgICBqc1Byb3RvdHlw
ZSA9IGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gY2xhc3NfZ2V0TmFtZShtX2NsYXNzKTsKIAogICAg
ICAgICAvLyBDcmVhdGUgb3IgZ3JhYiB0aGUgcHJvdG90eXBlL2NvbnN0cnVjdG9yIHBhaXIuCiAg
ICAgICAgIGlmICghanNQcm90b3R5cGUpCi0gICAgICAgICAgICBqc1Byb3RvdHlwZSA9IG9iamVj
dFdpdGhDdXN0b21CcmFuZChtX2NvbnRleHQsIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JXNQcm90b3R5cGUiLCBjbGFzc05hbWVdKTsKKyAgICAgICAgICAgIGpzUHJvdG90eXBlID0gb2Jq
ZWN0V2l0aEN1c3RvbUJyYW5kKGNvbnRleHQsIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JXNQcm90b3R5cGUiLCBjbGFzc05hbWVdKTsKIAogICAgICAgICBpZiAoIWpzQ29uc3RydWN0b3Ip
Ci0gICAgICAgICAgICBqc0NvbnN0cnVjdG9yID0gYWxsb2NhdGVDb25zdHJ1Y3RvckZvckN1c3Rv
bUNsYXNzKG1fY29udGV4dCwgY2xhc3NOYW1lLCBtX2NsYXNzKTsKKyAgICAgICAgICAgIGpzQ29u
c3RydWN0b3IgPSBhbGxvY2F0ZUNvbnN0cnVjdG9yRm9yQ3VzdG9tQ2xhc3MoY29udGV4dCwgY2xh
c3NOYW1lLCBtX2NsYXNzKTsKIAotICAgICAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGpzUHJvdG90eXBlKSBpbkNvbnRleHQ6bV9jb250
ZXh0XTsKLSAgICAgICAgSlNWYWx1ZSogY29uc3RydWN0b3IgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhK
U1ZhbHVlUmVmOnRvUmVmKGpzQ29uc3RydWN0b3IpIGluQ29udGV4dDptX2NvbnRleHRdOworICAg
ICAgICBKU1ZhbHVlKiBwcm90b3R5cGUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRv
UmVmKGpzUHJvdG90eXBlKSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIEpTVmFsdWUqIGNv
bnN0cnVjdG9yID0gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihqc0NvbnN0cnVj
dG9yKSBpbkNvbnRleHQ6Y29udGV4dF07CiAgICAgICAgIHB1dE5vbkVudW1lcmFibGUocHJvdG90
eXBlLCBAImNvbnN0cnVjdG9yIiwgY29uc3RydWN0b3IpOwogICAgICAgICBwdXROb25FbnVtZXJh
YmxlKGNvbnN0cnVjdG9yLCBAInByb3RvdHlwZSIsIHByb3RvdHlwZSk7CiAKICAgICAgICAgUHJv
dG9jb2wgKmV4cG9ydFByb3RvY29sID0gZ2V0SlNFeHBvcnRQcm90b2NvbCgpOwogICAgICAgICBm
b3JFYWNoUHJvdG9jb2xJbXBsZW1lbnRpbmdQcm90b2NvbChtX2NsYXNzLCBleHBvcnRQcm90b2Nv
bCwgXihQcm90b2NvbCAqcHJvdG9jb2wpewotICAgICAgICAgICAgY29weVByb3RvdHlwZVByb3Bl
cnRpZXMobV9jb250ZXh0LCBtX2NsYXNzLCBwcm90b2NvbCwgcHJvdG90eXBlKTsKLSAgICAgICAg
ICAgIGNvcHlNZXRob2RzVG9PYmplY3QobV9jb250ZXh0LCBtX2NsYXNzLCBwcm90b2NvbCwgTk8s
IGNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgIGNvcHlQcm90b3R5cGVQcm9wZXJ0aWVzKGNvbnRl
eHQsIG1fY2xhc3MsIHByb3RvY29sLCBwcm90b3R5cGUpOworICAgICAgICAgICAgY29weU1ldGhv
ZHNUb09iamVjdChjb250ZXh0LCBtX2NsYXNzLCBwcm90b2NvbCwgTk8sIGNvbnN0cnVjdG9yKTsK
ICAgICAgICAgfSk7CiAKICAgICAgICAgLy8gU2V0IFtQcm90b3R5cGVdLgotICAgICAgICBKU0M6
OkpTT2JqZWN0KiBzdXBlckNsYXNzUHJvdG90eXBlID0gW3N1cGVyQ2xhc3NJbmZvIHByb3RvdHlw
ZV07Ci0gICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBlKFttX2NvbnRleHQgSlNHbG9iYWxDb250
ZXh0UmVmXSwgdG9SZWYoanNQcm90b3R5cGUpLCB0b1JlZihzdXBlckNsYXNzUHJvdG90eXBlKSk7
CisgICAgICAgIEpTQzo6SlNPYmplY3QqIHN1cGVyQ2xhc3NQcm90b3R5cGUgPSBbc3VwZXJDbGFz
c0luZm8gcHJvdG90eXBlSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBKU09iamVjdFNldFBy
b3RvdHlwZShbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdLCB0b1JlZihqc1Byb3RvdHlwZSks
IHRvUmVmKHN1cGVyQ2xhc3NQcm90b3R5cGUpKTsKICAgICB9CiAKICAgICBtX3Byb3RvdHlwZSA9
IGpzUHJvdG90eXBlOwpAQCAtNTA5LDQxICs1MDUsNDEgQEAgdHlwZWRlZiBzdGQ6OnBhaXI8SlND
OjpKU09iamVjdCosIEpTQzo6SlNPYmplY3QqPiBDb25zdHJ1Y3RvclByb3RvdHlwZVBhaXI7CiAg
ICAgcmV0dXJuIENvbnN0cnVjdG9yUHJvdG90eXBlUGFpcihqc0NvbnN0cnVjdG9yLCBqc1Byb3Rv
dHlwZSk7CiB9CiAKLS0gKEpTQzo6SlNPYmplY3QqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVj
dAorLSAoSlNDOjpKU09iamVjdCopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0IGluQ29udGV4
dDooSlNDb250ZXh0ICopY29udGV4dAogewogICAgIEFTU0VSVChbb2JqZWN0IGlzS2luZE9mQ2xh
c3M6bV9jbGFzc10pOwogICAgIEFTU0VSVChtX2Jsb2NrID09IFtvYmplY3QgaXNLaW5kT2ZDbGFz
czpnZXROU0Jsb2NrQ2xhc3MoKV0pOwogICAgIGlmIChtX2Jsb2NrKSB7Ci0gICAgICAgIGlmIChK
U09iamVjdFJlZiBtZXRob2QgPSBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKG1fY29udGV4
dCwgb2JqZWN0KSkgewotICAgICAgICAgICAgSlNWYWx1ZSAqY29uc3RydWN0b3IgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOm1ldGhvZCBpbkNvbnRleHQ6bV9jb250ZXh0XTsKLSAgICAg
ICAgICAgIEpTVmFsdWUgKnByb3RvdHlwZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdElu
Q29udGV4dDptX2NvbnRleHRdOworICAgICAgICBpZiAoSlNPYmplY3RSZWYgbWV0aG9kID0gb2Jq
Q0NhbGxiYWNrRnVuY3Rpb25Gb3JCbG9jayhjb250ZXh0LCBvYmplY3QpKSB7CisgICAgICAgICAg
ICBKU1ZhbHVlICpjb25zdHJ1Y3RvciA9IFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6bWV0
aG9kIGluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgICAgIEpTVmFsdWUgKnByb3RvdHlwZSA9
IFtKU1ZhbHVlIHZhbHVlV2l0aE5ld09iamVjdEluQ29udGV4dDpjb250ZXh0XTsKICAgICAgICAg
ICAgIHB1dE5vbkVudW1lcmFibGUoY29uc3RydWN0b3IsIEAicHJvdG90eXBlIiwgcHJvdG90eXBl
KTsKICAgICAgICAgICAgIHB1dE5vbkVudW1lcmFibGUocHJvdG90eXBlLCBAImNvbnN0cnVjdG9y
IiwgY29uc3RydWN0b3IpOwogICAgICAgICAgICAgcmV0dXJuIHRvSlMobWV0aG9kKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZSA9IFtzZWxmIHByb3Rv
dHlwZV07CisgICAgSlNDOjpKU09iamVjdCogcHJvdG90eXBlID0gW3NlbGYgcHJvdG90eXBlSW5D
b250ZXh0OmNvbnRleHRdOwogCi0gICAgSlNDOjpKU09iamVjdCogd3JhcHBlciA9IG1ha2VXcmFw
cGVyKFttX2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgbV9jbGFzc1JlZiwgb2JqZWN0KTsK
LSAgICBKU09iamVjdFNldFByb3RvdHlwZShbbV9jb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0s
IHRvUmVmKHdyYXBwZXIpLCB0b1JlZihwcm90b3R5cGUpKTsKKyAgICBKU0M6OkpTT2JqZWN0KiB3
cmFwcGVyID0gbWFrZVdyYXBwZXIoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSwgbV9jbGFz
c1JlZiwgb2JqZWN0KTsKKyAgICBKU09iamVjdFNldFByb3RvdHlwZShbY29udGV4dCBKU0dsb2Jh
bENvbnRleHRSZWZdLCB0b1JlZih3cmFwcGVyKSwgdG9SZWYocHJvdG90eXBlKSk7CiAgICAgcmV0
dXJuIHdyYXBwZXI7CiB9CiAKLS0gKEpTQzo6SlNPYmplY3QqKWNvbnN0cnVjdG9yCistIChKU0M6
OkpTT2JqZWN0Kiljb25zdHJ1Y3RvckluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAogewog
ICAgIEpTQzo6SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gbV9jb25zdHJ1Y3Rvci5nZXQoKTsKICAg
ICBpZiAoIWNvbnN0cnVjdG9yKQotICAgICAgICBjb25zdHJ1Y3RvciA9IFtzZWxmIGFsbG9jYXRl
Q29uc3RydWN0b3JBbmRQcm90b3R5cGVdLmZpcnN0OworICAgICAgICBjb25zdHJ1Y3RvciA9IFtz
ZWxmIGFsbG9jYXRlQ29uc3RydWN0b3JBbmRQcm90b3R5cGVJbkNvbnRleHQ6Y29udGV4dF0uZmly
c3Q7CiAgICAgQVNTRVJUKCEhY29uc3RydWN0b3IpOwogICAgIHJldHVybiBjb25zdHJ1Y3RvcjsK
IH0KIAotLSAoSlNDOjpKU09iamVjdCopcHJvdG90eXBlCistIChKU0M6OkpTT2JqZWN0Kilwcm90
b3R5cGVJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsKICAgICBKU0M6OkpTT2JqZWN0
KiBwcm90b3R5cGUgPSBtX3Byb3RvdHlwZS5nZXQoKTsKICAgICBpZiAoIXByb3RvdHlwZSkKLSAg
ICAgICAgcHJvdG90eXBlID0gW3NlbGYgYWxsb2NhdGVDb25zdHJ1Y3RvckFuZFByb3RvdHlwZV0u
c2Vjb25kOworICAgICAgICBwcm90b3R5cGUgPSBbc2VsZiBhbGxvY2F0ZUNvbnN0cnVjdG9yQW5k
UHJvdG90eXBlSW5Db250ZXh0OmNvbnRleHRdLnNlY29uZDsKICAgICBBU1NFUlQoISFwcm90b3R5
cGUpOwogICAgIHJldHVybiBwcm90b3R5cGU7CiB9CkBAIC01NTEsMTMgKzU0NywxMiBAQCB0eXBl
ZGVmIHN0ZDo6cGFpcjxKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU09iamVjdCo+IENvbnN0cnVjdG9y
UHJvdG90eXBlUGFpcjsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIEpTV3JhcHBlck1hcCB7Ci0g
ICAgSlNDb250ZXh0ICptX2NvbnRleHQ7CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqbV9jbGFz
c01hcDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNDOjpXZWFrR0NNYXA8aWQsIEpTQzo6SlNPYmpl
Y3Q+PiBtX2NhY2hlZEpTV3JhcHBlcnM7CiAgICAgTlNNYXBUYWJsZSAqbV9jYWNoZWRPYmpDV3Jh
cHBlcnM7CiB9CiAKLS0gKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAor
LSAoaWQpaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpY29udGV4
dAogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgaWYgKCFzZWxmKQpAQCAtNTY3LDkg
KzU2MiwxMCBAQCB0eXBlZGVmIHN0ZDo6cGFpcjxKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU09iamVj
dCo+IENvbnN0cnVjdG9yUHJvdG90eXBlUGFpcjsKICAgICBOU1BvaW50ZXJGdW5jdGlvbnNPcHRp
b25zIHZhbHVlT3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dlYWtNZW1vcnkgfCBOU1BvaW50
ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKICAgICBtX2NhY2hlZE9iakNXcmFwcGVycyA9
IFtbTlNNYXBUYWJsZSBhbGxvY10gaW5pdFdpdGhLZXlPcHRpb25zOmtleU9wdGlvbnMgdmFsdWVP
cHRpb25zOnZhbHVlT3B0aW9ucyBjYXBhY2l0eTowXTsKIAotICAgIG1fY2FjaGVkSlNXcmFwcGVy
cyA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDOjpXZWFrR0NNYXA8aWQsIEpTQzo6SlNPYmplY3Q+Pih0
b0pTKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pLT52bSgpKTsKKyAgICBtX2NhY2hlZEpT
V3JhcHBlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEpTQzo6V2Vha0dDTWFwPGlkLCBKU0M6OkpTT2Jq
ZWN0Pj4odG9KUyhjb250ZXh0KS0+dm0oKSk7CiAKLSAgICBtX2NvbnRleHQgPSBjb250ZXh0Owor
ICAgIEFTU0VSVCghdG9KU0dsb2JhbE9iamVjdChjb250ZXh0KS0+d3JhcHBlck1hcCgpKTsKKyAg
ICB0b0pTR2xvYmFsT2JqZWN0KGNvbnRleHQpLT5zZXRXcmFwcGVyTWFwKHNlbGYpOwogICAgIG1f
Y2xhc3NNYXAgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwogICAgIHJldHVy
biBzZWxmOwogfQpAQCAtNTk0LDIwICs1OTAsMjEgQEAgdHlwZWRlZiBzdGQ6OnBhaXI8SlNDOjpK
U09iamVjdCosIEpTQzo6SlNPYmplY3QqPiBDb25zdHJ1Y3RvclByb3RvdHlwZVBhaXI7CiAgICAg
aWYgKCdfJyA9PSAqY2xhc3NfZ2V0TmFtZShjbHMpKQogICAgICAgICByZXR1cm4gbV9jbGFzc01h
cFtjbHNdID0gW3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6Y2xhc3NfZ2V0U3VwZXJjbGFzcyhjbHMp
XTsKIAotICAgIHJldHVybiBtX2NsYXNzTWFwW2Nsc10gPSBbW1tKU09iakNDbGFzc0luZm8gYWxs
b2NdIGluaXRXaXRoQ29udGV4dDptX2NvbnRleHQgZm9yQ2xhc3M6Y2xzXSBhdXRvcmVsZWFzZV07
CisgICAgcmV0dXJuIG1fY2xhc3NNYXBbY2xzXSA9IFtbW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY10g
aW5pdEZvckNsYXNzOmNsc10gYXV0b3JlbGVhc2VdOwogfQogCi0tIChKU1ZhbHVlICopanNXcmFw
cGVyRm9yT2JqZWN0OihpZClvYmplY3QKKy0gKEpTVmFsdWUgKilqc1dyYXBwZXJGb3JPYmplY3Q6
KGlkKW9iamVjdCBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsKKyAgICBBU1NFUlQo
dG9KU0dsb2JhbE9iamVjdChbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKS0+d3JhcHBlck1h
cCgpID09IHNlbGYpOwogICAgIEpTQzo6SlNPYmplY3QqIGpzV3JhcHBlciA9IG1fY2FjaGVkSlNX
cmFwcGVycy0+Z2V0KG9iamVjdCk7CiAgICAgaWYgKGpzV3JhcHBlcikKLSAgICAgICAgcmV0dXJu
IFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoanNXcmFwcGVyKSBpbkNvbnRleHQ6
bV9jb250ZXh0XTsKKyAgICAgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6
dG9SZWYoanNXcmFwcGVyKSBpbkNvbnRleHQ6Y29udGV4dF07CiAKICAgICBpZiAoY2xhc3NfaXNN
ZXRhQ2xhc3Mob2JqZWN0X2dldENsYXNzKG9iamVjdCkpKQotICAgICAgICBqc1dyYXBwZXIgPSBb
W3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6KENsYXNzKW9iamVjdF0gY29uc3RydWN0b3JdOworICAg
ICAgICBqc1dyYXBwZXIgPSBbW3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6KENsYXNzKW9iamVjdF0g
Y29uc3RydWN0b3JJbkNvbnRleHQ6Y29udGV4dF07CiAgICAgZWxzZSB7CiAgICAgICAgIEpTT2Jq
Q0NsYXNzSW5mbyogY2xhc3NJbmZvID0gW3NlbGYgY2xhc3NJbmZvRm9yQ2xhc3M6W29iamVjdCBj
bGFzc11dOwotICAgICAgICBqc1dyYXBwZXIgPSBbY2xhc3NJbmZvIHdyYXBwZXJGb3JPYmplY3Q6
b2JqZWN0XTsKKyAgICAgICAganNXcmFwcGVyID0gW2NsYXNzSW5mbyB3cmFwcGVyRm9yT2JqZWN0
Om9iamVjdCBpbkNvbnRleHQ6Y29udGV4dF07CiAgICAgfQogCiAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU4OTEKQEAgLTYxNiwxNCArNjEz
LDE1IEBAIHR5cGVkZWYgc3RkOjpwYWlyPEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTT2JqZWN0Kj4g
Q29uc3RydWN0b3JQcm90b3R5cGVQYWlyOwogICAgIC8vICgyKSBBIGxvbmcgbGl2ZWQgb2JqZWN0
IG1heSByYWNrIHVwIG1hbnkgSlNWYWx1ZXMuIFdoZW4gdGhlIGNvbnRleHRzIGFyZSByZWxlYXNl
ZCB0aGVzZSB3aWxsIHVucHJvdGVjdCB0aGUgYXNzb2NpYXRlZCBKYXZhU2NyaXB0IG9iamVjdHMs
CiAgICAgLy8gICAgIGJ1dCBzdGlsbCwgd291bGQgcHJvYmFibHkgbmljZXIgaWYgd2UgbWFkZSBp
dCBzbyB0aGF0IG9ubHkgb25lIGFzc29jaWF0ZWQgb2JqZWN0IHdhcyByZXF1aXJlZCwgYnJvYWRj
YXN0aW5nIG9iamVjdCBkZWFsbG9jLgogICAgIG1fY2FjaGVkSlNXcmFwcGVycy0+c2V0KG9iamVj
dCwganNXcmFwcGVyKTsKLSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0
b1JlZihqc1dyYXBwZXIpIGluQ29udGV4dDptX2NvbnRleHRdOworICAgIHJldHVybiBbSlNWYWx1
ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGpzV3JhcHBlcikgaW5Db250ZXh0OmNvbnRleHRd
OwogfQogCi0tIChKU1ZhbHVlICopb2JqY1dyYXBwZXJGb3JKU1ZhbHVlUmVmOihKU1ZhbHVlUmVm
KXZhbHVlCistIChKU1ZhbHVlICopb2JqY1dyYXBwZXJGb3JKU1ZhbHVlUmVmOihKU1ZhbHVlUmVm
KXZhbHVlIGluQ29udGV4dDpjb250ZXh0CiB7CisgICAgQVNTRVJUKHRvSlNHbG9iYWxPYmplY3Qo
W2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSktPndyYXBwZXJNYXAoKSA9PSBzZWxmKTsKICAg
ICBKU1ZhbHVlICp3cmFwcGVyID0gc3RhdGljX2Nhc3Q8SlNWYWx1ZSAqPihOU01hcEdldChtX2Nh
Y2hlZE9iakNXcmFwcGVycywgdmFsdWUpKTsKICAgICBpZiAoIXdyYXBwZXIpIHsKLSAgICAgICAg
d3JhcHBlciA9IFtbW0pTVmFsdWUgYWxsb2NdIGluaXRXaXRoVmFsdWU6dmFsdWUgaW5Db250ZXh0
Om1fY29udGV4dF0gYXV0b3JlbGVhc2VdOworICAgICAgICB3cmFwcGVyID0gW1tbSlNWYWx1ZSBh
bGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBpbkNvbnRleHQ6Y29udGV4dF0gYXV0b3JlbGVhc2Vd
OwogICAgICAgICBOU01hcEluc2VydChtX2NhY2hlZE9iakNXcmFwcGVycywgdmFsdWUsIHdyYXBw
ZXIpOwogICAgIH0KICAgICByZXR1cm4gd3JhcHBlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5tbQppbmRleCA5ZDIyZTNmMGU0Y2Q4NmY3OTAz
YmQzZjViYWYxOWIxNjJhZWMzNjFiLi44OTFjNzljZjU4M2IwZmQ0MmIxMWU4YTI3YWRmOWQxNmI1
NGY5YzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0pTRXhw
b3J0VGVzdHMubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9KU0V4cG9y
dFRlc3RzLm1tCkBAIC0xMjUsNiArMTI1LDQ2IEBAIGV4dGVybiAiQyIgdm9pZCBjaGVja1Jlc3Vs
dChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFzc2VkKTsKIH0KIEBlbmQKIAorQHByb3Rv
Y29sIEFKU0V4cG9ydCA8SlNFeHBvcnQ+CistIChpbnN0YW5jZXR5cGUpaW5pdDsKK0BlbmQKKwor
QGludGVyZmFjZSBBIDogTlNPYmplY3QgPEFKU0V4cG9ydD4KK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIEEKK0BlbmQKKworc3RhdGljIHZvaWQgd3JhcHBlckxpZmV0aW1lSXNUaWVkVG9HbG9iYWxP
YmplY3QoKQoreworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0UmVmOworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBh
bGxvY10gaW5pdF07CisgICAgICAgIGNvbnRleHRSZWYgPSBKU0dsb2JhbENvbnRleHRSZXRhaW4o
Y29udGV4dC5KU0dsb2JhbENvbnRleHRSZWYpOworICAgICAgICBjb250ZXh0W0AiQSJdID0gQS5j
bGFzczsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJJbml0aWFsIHdyYXBwZXIncyBjb25zdHJ1Y3Rv
ciBpcyBpdHNlbGYiLCBbW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJuZXcgQSgpLmNvbnN0cnVj
dG9yID09PSBBIl0gdG9Cb29sXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisg
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2Jh
bENvbnRleHRSZWY6Y29udGV4dFJlZl07CisgICAgICAgIGNoZWNrUmVzdWx0KEAiTmV3IGNvbnRl
eHQncyB3cmFwcGVyJ3MgY29uc3RydWN0b3IgaXMgaXRzZWxmIiwgW1tjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAibmV3IEEoKS5jb25zdHJ1Y3RvciA9PT0gQSJdIHRvQm9vbF0pOworICAgIH0KKwor
ICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dFJlZik7Cit9CisKK3N0YXRpYyB2b2lk
IHdyYXBwZXJGb3JOU09iamVjdGlzT2JqZWN0KCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOwor
ICAgICAgICBjb250ZXh0W0AiT2JqZWN0Il0gPSBbW05TTnVsbCBhbGxvY10gaW5pdF07CisgICAg
ICAgIGNvbnRleHQuZXhjZXB0aW9uID0gbmlsOworCisgICAgICAgIGNvbnRleHRbQCJBIl0gPSBO
U09iamVjdC5jbGFzczsKKyAgICAgICAgTlNMb2coQCJoZXJlOiAlQCIsIFtjb250ZXh0IGV4Y2Vw
dGlvbl0pOworICAgIH0KK30KKwogdm9pZCBydW5KU0V4cG9ydFRlc3RzKCkKIHsKICAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKQEAgLTEzMiw2ICsxNzIsOCBAQCB2b2lkIHJ1bkpTRXhwb3J0VGVzdHMo
KQogICAgICAgICBbSlNFeHBvcnRUZXN0cyBleHBvcnRJbnN0YW5jZU1ldGhvZFdpdGhDbGFzc1By
b3RvY29sVGVzdF07CiAgICAgICAgIFtKU0V4cG9ydFRlc3RzIGV4cG9ydER5bmFtaWNhbGx5R2Vu
ZXJhdGVkUHJvdG9jb2xUZXN0XTsKICAgICB9CisgICAgd3JhcHBlckxpZmV0aW1lSXNUaWVkVG9H
bG9iYWxPYmplY3QoKTsKKyAgICB3cmFwcGVyRm9yTlNPYmplY3Rpc09iamVjdCgpOwogfQogCiAj
ZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdGFwaS5tbQppbmRleCBiYjY5YWQwZmE3OWE4NjJhM2VlZWIxMWM3YWM5YjBiZWQ5
MGQ1OTMyLi41YTY2ODE3NjQ5NjU2NTdiOTE1NzMzMzAxMjUzZDY4YmE5YTJlODBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBAIC01MTIsNiArNTEyLDgg
QEAgc3RhdGljIHZvaWQqIG11bHRpVk1UaHJlYWRNYWluKHZvaWQqIG9rUHRyKQogCiBzdGF0aWMg
dm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKQogeworICAgIHJ1bkpTRXhwb3J0VGVzdHMoKTsK
KwogICAgIEBhdXRvcmVsZWFzZXBvb2wgewogICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lKiB2bSA9
IFtbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF07CiAgICAgICAgIEpTQ29udGV4dCogY29u
dGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKQEAg
LTE0NjgsNyArMTQ3MCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RPYmplY3RpdmVDQVBJTWFpbigpCiAK
ICAgICAgICAgY2hlY2tSZXN1bHQoQCJSYW4gY29kZSBpbiBmaXZlIGNvbmN1cnJlbnQgVk1zIHRo
YXQgR0MnZCIsIG9rKTsKICAgICB9Ci0gICAgCisKICAgICBjdXJyZW50VGhpc0luc2lkZUJsb2Nr
R2V0dGVyVGVzdCgpOwogICAgIHJ1bkRhdGVUZXN0cygpOwogICAgIHJ1bkpTRXhwb3J0VGVzdHMo
KTsKQEAgLTE1MDcsNiArMTUwOSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrTmVnYXRpdmVOU0ludGVn
ZXJzKCkKICAgICBjaGVja1Jlc3VsdChAIk5lZ2F0aXZlIG51bWJlciBtYWludGFpbmVkIGl0cyBv
cmlnaW5hbCB2YWx1ZSIsIFtbcmVzdWx0IHRvU3RyaW5nXSBpc0VxdWFsVG9TdHJpbmc6QCItMSJd
KTsKIH0KIAorCiB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKIHsKICAgICBOU0xvZyhAIlRlc3Rp
bmcgT2JqZWN0aXZlLUMgQVBJIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAppbmRleCA3ZTlmZWNiNzFhYjEzYTBlYjE4ZjQyN2RlMzg4MDU4MTAz
ZWJlNThlLi41ZDU1Yjc2YWM2NzUzYTg4NjRmMzZkZGNkZWM4ODE2MzA5ZjhlZWFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQ1LDkg
KzQ1LDExIEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8
YXJyYXk+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CiAKIHN0cnVjdCBPcGFxdWVKU0NsYXNzOwogc3RydWN0IE9wYXF1ZUpTQ2xhc3NDb250ZXh0
RGF0YTsKK09CSkNfQ0xBU1MgSlNXcmFwcGVyTWFwOwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IGNsYXNzIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjsKQEAgLTgyNSw2ICs4Mjcs
MTEgQEAgcHVibGljOgogCiAgICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0
IHsgcmV0dXJuIG1fbmVlZHNTaXRlU3BlY2lmaWNRdWlya3M7IH0KIAorI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECisgICAgSlNXcmFwcGVyTWFwKiB3cmFwcGVyTWFwKCkgY29uc3QgeyByZXR1cm4g
bV93cmFwcGVyTWFwLmdldCgpOyB9CisgICAgdm9pZCBzZXRXcmFwcGVyTWFwKEpTV3JhcHBlck1h
cCogbWFwKSB7IG1fd3JhcHBlck1hcCA9IG1hcDsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAg
ICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KGNvbnN0IElkZW50aWZpZXImIGksIEpTVmFsdWUgdiwgdW5zaWduZWQgYSkKQEAgLTg1NCw2ICs4
NjEsOSBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNsZWFy
UmFyZURhdGEoSlNDZWxsKik7CiAKICAgICBib29sIG1fbmVlZHNTaXRlU3BlY2lmaWNRdWlya3Mg
eyBmYWxzZSB9OworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgUmV0YWluUHRyPEpTV3Jh
cHBlck1hcD4gbV93cmFwcGVyTWFwOworI2VuZGlmCiB9OwogCiBKU0dsb2JhbE9iamVjdCogYXNH
bG9iYWxPYmplY3QoSlNWYWx1ZSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>