<?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>112608</bug_id>
          
          <creation_ts>2013-03-18 12:39:08 -0700</creation_ts>
          <short_desc>Objective-C API: Need a good way to preserve custom properties on JS wrappers</short_desc>
          <delta_ts>2013-03-22 08:24:48 -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>
          
          <blocked>113054</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>buildbot</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>levin+threading</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>857428</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-18 12:39:08 -0700</bug_when>
    <thetext>Currently, we just use a weak map, which means that garbage collection can cause a wrapper to disappear if it isn&apos;t directly referenced from JavaScript.

The most straightforward and safe way (with respect to garbage collection and concurrency) is to have clients add and remove their external references along with their owners. Effectively, the client is recording the structure of the external object graph so that the garbage collector can make sure to mark any wrappers that are reachable through either the JS object graph of the external Obj-C object graph. By keeping these wrappers alive, this has the effect that custom properties on these wrappers will also remain alive.

The rule for if an object needs to be tracked by the runtime (and therefore whether the client should report it) is as follows:
For a particular object, its references to its children should be added if:
(1) The child is referenced from JavaScript.
(2) The child contains references to other objects for which (1) or (2) are true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857429</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-18 12:39:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/12991582&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857587</commentid>
    <comment_count>2</comment_count>
      <attachid>193659</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-18 14:50:43 -0700</bug_when>
    <thetext>Created attachment 193659
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857598</commentid>
    <comment_count>3</comment_count>
      <attachid>193659</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-18 15:00:03 -0700</bug_when>
    <thetext>Comment on attachment 193659
Patch

Attachment 193659 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17245005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857603</commentid>
    <comment_count>4</comment_count>
      <attachid>193659</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-18 15:03:40 -0700</bug_when>
    <thetext>Comment on attachment 193659
Patch

Attachment 193659 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17236142</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857616</commentid>
    <comment_count>5</comment_count>
      <attachid>193667</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-18 15:09:41 -0700</bug_when>
    <thetext>Created attachment 193667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857625</commentid>
    <comment_count>6</comment_count>
      <attachid>193667</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-18 15:21:07 -0700</bug_when>
    <thetext>Comment on attachment 193667
Patch

Attachment 193667 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17210523</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857635</commentid>
    <comment_count>7</comment_count>
      <attachid>193667</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-18 15:28:39 -0700</bug_when>
    <thetext>Comment on attachment 193667
Patch

Attachment 193667 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17202356</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857638</commentid>
    <comment_count>8</comment_count>
      <attachid>193674</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-18 15:31:26 -0700</bug_when>
    <thetext>Created attachment 193674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857834</commentid>
    <comment_count>9</comment_count>
      <attachid>193674</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-18 18:21:34 -0700</bug_when>
    <thetext>Comment on attachment 193674
Patch

Attachment 193674 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17238211</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857840</commentid>
    <comment_count>10</comment_count>
      <attachid>193712</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-18 18:35:55 -0700</bug_when>
    <thetext>Created attachment 193712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858736</commentid>
    <comment_count>11</comment_count>
      <attachid>193712</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-19 14:30:32 -0700</bug_when>
    <thetext>Comment on attachment 193712
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +        1. The child is referenced from JavaScript.

Let&apos;s say, &quot;The child is exported to JavaScript&quot;.

&gt; Source/JavaScriptCore/API/JSManagedReference.h:39
&gt; ++ (void)addManagedReference:(id)object withOwner:(id)owner toVirtualMachine:(JSVirtualMachine *)virtualMachine;
&gt; ++ (void)removeManagedReference:(id)object withOwner:(id)owner fromVirtualMachine:(JSVirtualMachine *)virtualMachine;

Let&apos;s put these methods on JSVirtualMachine. Since we never create a JSManagedReference object, it&apos;s probably clearer that way.

&gt; Source/JavaScriptCore/API/JSManagedReference.mm:93
&gt; +void scanExternalObjectGraph(JSC::JSGlobalData&amp; globalData, JSC::SlotVisitor&amp; visitor, void* root)

Let&apos;s use a WTF data structure for the stack here, since it&apos;s so much more efficient.

Let&apos;s use a weak NSMapTable for the ownedObjects set to avoid retaining things longer than necessary if the client forgets to call removeManagedReference.

Let&apos;s put counting in the set, so you can call this in a multiple owner style.

&gt; Source/JavaScriptCore/heap/SlotVisitorInlines.h:124
&gt; +inline bool SlotVisitor::threadSafeContainsOpaqueRoot(void* root)

&quot;Thread safe&quot; doesn&apos;t fully describe the requirements here. How about containsOpaqueRootTriState(), returning either TrueTriStae or MixedTriState, but never FalseTriState, since we can never say for sure that other threads haven&apos;t locally added this thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860893</commentid>
    <comment_count>12</comment_count>
      <attachid>194389</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-21 17:01:27 -0700</bug_when>
    <thetext>Created attachment 194389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860940</commentid>
    <comment_count>13</comment_count>
      <attachid>194389</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-21 17:45:52 -0700</bug_when>
    <thetext>Comment on attachment 194389
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861033</commentid>
    <comment_count>14</comment_count>
      <attachid>194389</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 20:15:14 -0700</bug_when>
    <thetext>Comment on attachment 194389
Patch

Clearing flags on attachment: 194389

Committed r146558: &lt;http://trac.webkit.org/changeset/146558&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861034</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 20:15:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861403</commentid>
    <comment_count>16</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-03-22 06:37:37 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 194389 [details])
&gt; Clearing flags on attachment: 194389
&gt; 
&gt; Committed r146558: &lt;http://trac.webkit.org/changeset/146558&gt;

Follow-up build fix in r146599:  &lt;http://trac.webkit.org/r146599&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861413</commentid>
    <comment_count>17</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-03-22 06:56:50 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 194389 [details] [details])
&gt; &gt; Clearing flags on attachment: 194389
&gt; &gt; 
&gt; &gt; Committed r146558: &lt;http://trac.webkit.org/changeset/146558&gt;
&gt; 
&gt; Follow-up build fix in r146599:  &lt;http://trac.webkit.org/r146599&gt;

Reverted r146599 in r146603:  &lt;http://trac.webkit.org/r146603&gt;

Not sure why this didn&apos;t fail locally on my Mac Pro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861421</commentid>
    <comment_count>18</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-03-22 07:08:10 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (From update of attachment 194389 [details] [details] [details])
&gt; &gt; &gt; Clearing flags on attachment: 194389
&gt; &gt; &gt; 
&gt; &gt; &gt; Committed r146558: &lt;http://trac.webkit.org/changeset/146558&gt;
&gt; &gt; 
&gt; &gt; Follow-up build fix in r146599:  &lt;http://trac.webkit.org/r146599&gt;
&gt; 
&gt; Reverted r146599 in r146603:  &lt;http://trac.webkit.org/r146603&gt;
&gt; 
&gt; Not sure why this didn&apos;t fail locally on my Mac Pro.

So what&apos;s happening is that -[TinyDOMNode dealloc] probably leaks on Lion since it still uses gcc to build, and gcc doesn&apos;t have a warning about not calling [super dealloc].  On other OS X versions, -[TinyDOMNode dealloc] doesn&apos;t leak because we&apos;re using clang with ARC enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861425</commentid>
    <comment_count>19</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-03-22 07:12:45 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; &gt; (From update of attachment 194389 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; Clearing flags on attachment: 194389
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Committed r146558: &lt;http://trac.webkit.org/changeset/146558&gt;
&gt; &gt; &gt; 
&gt; &gt; &gt; Follow-up build fix in r146599:  &lt;http://trac.webkit.org/r146599&gt;
&gt; &gt; 
&gt; &gt; Reverted r146599 in r146603:  &lt;http://trac.webkit.org/r146603&gt;
&gt; &gt; 
&gt; &gt; Not sure why this didn&apos;t fail locally on my Mac Pro.
&gt; 
&gt; So what&apos;s happening is that -[TinyDOMNode dealloc] probably leaks on Lion since it still uses gcc to build, and gcc doesn&apos;t have a warning about not calling [super dealloc].  On other OS X versions, -[TinyDOMNode dealloc] doesn&apos;t leak because we&apos;re using clang with ARC enabled.

Filed Bug 113054 about this (relatively minor) issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861431</commentid>
    <comment_count>20</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-03-22 07:25:09 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (From update of attachment 194389 [details] [details] [details])
&gt; &gt; &gt; Clearing flags on attachment: 194389
&gt; &gt; &gt; 
&gt; &gt; &gt; Committed r146558: &lt;http://trac.webkit.org/changeset/146558&gt;
&gt; &gt; 
&gt; &gt; Follow-up build fix in r146599:  &lt;http://trac.webkit.org/r146599&gt;
&gt; 
&gt; Reverted r146599 in r146603:  &lt;http://trac.webkit.org/r146603&gt;
&gt; 
&gt; Not sure why this didn&apos;t fail locally on my Mac Pro.

Better iOS build fix in r146604:  &lt;http://trac.webkit.org/r146604&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>861491</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-22 08:24:48 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; &gt; (From update of attachment 194389 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; Clearing flags on attachment: 194389
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Committed r146558: &lt;http://trac.webkit.org/changeset/146558&gt;
&gt; &gt; &gt; 
&gt; &gt; &gt; Follow-up build fix in r146599:  &lt;http://trac.webkit.org/r146599&gt;
&gt; &gt; 
&gt; &gt; Reverted r146599 in r146603:  &lt;http://trac.webkit.org/r146603&gt;
&gt; &gt; 
&gt; &gt; Not sure why this didn&apos;t fail locally on my Mac Pro.
&gt; 
&gt; Better iOS build fix in r146604:  &lt;http://trac.webkit.org/r146604&gt;

Thanks for tracking this down!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193659</attachid>
            <date>2013-03-18 14:50:43 -0700</date>
            <delta_ts>2013-03-18 15:09:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112608-20130318144634.patch</filename>
            <type>text/plain</type>
            <size>30975</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ2MTIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDEzLTAzLTE4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgZ29vZCB3YXkgdG8gcHJlc2VydmUgY3Vz
dG9tIHByb3BlcnRpZXMgb24gSlMgd3JhcHBlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgd2UganVzdCB1c2UgYSB3ZWFrIG1hcCwg
d2hpY2ggbWVhbnMgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gY2FuIGNhdXNlIGEgd3JhcHBlciB0
byAKKyAgICAgICAgZGlzYXBwZWFyIGlmIGl0IGlzbid0IGRpcmVjdGx5IHJlZmVyZW5jZWQgZnJv
bSBKYXZhU2NyaXB0LgorCisgICAgICAgIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2Fm
ZSB3YXkgKHdpdGggcmVzcGVjdCB0byBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIGNvbmN1cnJlbmN5
KSBpcyB0byBoYXZlIAorICAgICAgICBjbGllbnRzIGFkZCBhbmQgcmVtb3ZlIHRoZWlyIGV4dGVy
bmFsIHJlZmVyZW5jZXMgYWxvbmcgd2l0aCB0aGVpciBvd25lcnMuIEVmZmVjdGl2ZWx5LCB0aGUg
Y2xpZW50IGlzIAorICAgICAgICByZWNvcmRpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXh0ZXJu
YWwgb2JqZWN0IGdyYXBoIHNvIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGNhbiBtYWtlIHN1
cmUgdG8gCisgICAgICAgIG1hcmsgYW55IHdyYXBwZXJzIHRoYXQgYXJlIHJlYWNoYWJsZSB0aHJv
dWdoIGVpdGhlciB0aGUgSlMgb2JqZWN0IGdyYXBoIG9mIHRoZSBleHRlcm5hbCBPYmotQyBvYmpl
Y3QgCisgICAgICAgIGdyYXBoLiBCeSBrZWVwaW5nIHRoZXNlIHdyYXBwZXJzIGFsaXZlLCB0aGlz
IGhhcyB0aGUgZWZmZWN0IHRoYXQgY3VzdG9tIHByb3BlcnRpZXMgb24gdGhlc2Ugd3JhcHBlcnMg
CisgICAgICAgIHdpbGwgYWxzbyByZW1haW4gYWxpdmUuCisKKyAgICAgICAgVGhlIHJ1bGUgZm9y
IGlmIGFuIG9iamVjdCBuZWVkcyB0byBiZSB0cmFja2VkIGJ5IHRoZSBydW50aW1lIChhbmQgdGhl
cmVmb3JlIHdoZXRoZXIgdGhlIGNsaWVudCBzaG91bGQgcmVwb3J0IGl0KSBpcyBhcyBmb2xsb3dz
OgorICAgICAgICBGb3IgYSBwYXJ0aWN1bGFyIG9iamVjdCwgaXRzIHJlZmVyZW5jZXMgdG8gaXRz
IGNoaWxkcmVuIHNob3VsZCBiZSBhZGRlZCBpZjoKKyAgICAgICAgMS4gVGhlIGNoaWxkIGlzIHJl
ZmVyZW5jZWQgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICAyLiBUaGUgY2hpbGQgY29udGFpbnMg
cmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGZvciB3aGljaCAoMSkgb3IgKDIpIGFyZSB0cnVl
LgorCisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5jcHA6CisgICAgICAgIChKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcik6IE5ldyBjbGFzcyB0aGF0IGFjdHMgYXMgdGhlIFdl
YWtIYW5kbGVPd25lciBmb3IgSlNBUElXcmFwcGVyT2JqZWN0cy4KKyAgICAgICAgKGpzQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKToKKyAgICAgICAgKEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hbGl6ZSk6IERlYWxsb2NhdGVzIHRoZSBXZWFrSW1wbCB0aGF0IHdhcyBhbGxv
Y2F0ZWQgaW4gSlNBUElXcmFwcGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbi4KKyAgICAgICAgKEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
IEEgd3JhcHBlciBvYmplY3QgaXMga2VwdCBhbGl2ZSBvbmx5IGlmIGl0cyBKU0dsb2JhbE9iamVj
dAorICAgICAgICBpcyBtYXJrZWQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9i
amVjdCB3YXMgYWRkZWQgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgIChKU0M6
OkpTQVBJV3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOiBBbGxvY2F0ZXMgYSBuZXcgV2Vh
a0ltcGwgZm9yIEpTQVBJV3JhcHBlck9iamVjdHMuCisgICAgICAgIChKU0M6OkpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbik6IFdlIG5vdyBjYWxsIG91dCB0byBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaCwgd2hpY2ggaGFuZGxlcyBhZGRpbmcgYWxsIE9iamVjdGl2ZS1DCisgICAgICAg
IG9iamVjdHMgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgICogQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5oOgorICAgICAgICAoSlNBUElXcmFwcGVyT2JqZWN0KToKKyAgICAgICAg
KiBBUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9KU01hbmFn
ZWRSZWZlcmVuY2UubW06IEFkZGVkLgorICAgICAgICAoZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KTog
SGVscGVyIGZ1bmNpdG9uIHRvIGdldCB0aGUgT2JqZWN0aXZlLUMgb2JqZWN0IG91dCBvZiBKU01h
bmFnZWRWYWx1ZXMgb3IgSlNWYWx1ZXMgaWYgdGhlcmUgaXMgb25lLgorICAgICAgICAoK1tKU01h
bmFnZWRSZWZlcmVuY2UgYWRkTWFuYWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6dG9WaXJ0dWFsTWFj
aGluZTpdKTogQWRkcyB0aGUgT2JqZWN0aXZlLUMgb2JqZWN0IHRvIHRoZSBzZXQgb2Ygb2JqZWN0
cyAKKyAgICAgICAgb3duZWQgYnkgdGhlIG93bmVyIG9iamVjdCBpbiB0aGF0IHBhcnRpY3VsYXIg
dmlydHVhbCBtYWNoaW5lLgorICAgICAgICAoK1tKU01hbmFnZWRSZWZlcmVuY2UgcmVtb3ZlTWFu
YWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6ZnJvbVZpcnR1YWxNYWNoaW5lOl0pOiBSZW1vdmVzIHRo
ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuCisgICAgICAgIChzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaCk6IERvZXMgYSBkZXB0aC1maXJzdCBzZWFyY2ggb2YgdGhlIGV4dGVy
bmFsIG9iamVjdCBncmFwaCBpbiBhIHBhcnRpY3VsYXIgdmlydHVhbCBtYWNoaW5lIHN0YXJ0aW5n
IGF0CisgICAgICAgIHRoZSBzcGVjaWZpZWQgcm9vdC4gRWFjaCBuZXcgb2JqZWN0IGl0IGVuY291
bnRlcnMgaXQgYWRkcyB0byB0aGUgc2V0IG9mIG9wYXF1ZSByb290cy4gVGhlc2Ugb3BhcXVlIHJv
b3RzIHdpbGwga2VlcCB0aGVpciAKKyAgICAgICAgY29ycmVzcG9uZGluZyB3cmFwcGVyIG9iamVj
dHMgYWxpdmUgaWYgdGhleSBoYXZlIHRoZW0uIAorICAgICAgICAqIEFQSS9KU01hbmFnZWRSZWZl
cmVuY2VJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bTogQWRkZWQgdGhlIHBlci1KU1ZpcnR1YWxNYWNoaW5lIG1hcCBiZXR3ZWVuIG9iamVjdHMgYW5k
IHRoZSBvYmplY3RzIHRoZXkgb3duLCB3aGljaCBpcyBtb3JlIGZvcm1hbGx5CisgICAgICAgIGtu
b3duIGFzIHRoYXQgdmlydHVhbCBtYWNoaW5lJ3MgZXh0ZXJuYWwgb2JqZWN0IGdyYXBoLgorICAg
ICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGluaXRXaXRoQ29udGV4dEdyb3VwUmVmOl0pOgorICAg
ICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNWaXJ0dWFs
TWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXSk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOiBBZGRlZCB0
d28gbmV3IHRlc3RzIHVzaW5nIHRoZSBUaW55RE9NTm9kZSBjbGFzcy4gVGhlIGZpcnN0IHRlc3Rz
IHRoYXQgYSBjdXN0b20gcHJvcGVydHkgYWRkZWQgdG8gYSB3cmFwcGVyIAorICAgICAgICBkb2Vz
bid0IHZhbmlzaCBhZnRlciBHQywgZXZlbiB0aG91Z2ggdGhhdCB3cmFwcGVyIGlzbid0IGRpcmVj
dGx5IGFjY2Vzc2libGUgdG8gdGhlIEpTIGdhcmJhZ2UgY29sbGVjdG9yIGJ1dCBpcyBhY2Nlc3Np
YmxlIHRocm91Z2ggCisgICAgICAgIHRoZSBleHRlcm5hbCBPYmplY3RpdmUtQyBvYmplY3QgZ3Jh
cGguIFRoZSBzZWNvbmQgdGVzdCBtYWtlcyBzdXJlIHRoYXQgcmV1c2luZyB0aGUgc2FtZSBPYmpl
Y3RpdmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgSlNDb250ZXh0cyAKKyAgICAgICAgZG9lc24ndCBj
YXVzZSB0aG9zZSBKU0NvbnRleHRzIHRvIGxlYWsgdGhlaXIgSlNHbG9iYWxPYmplY3RzLgorICAg
ICAgICAoK1tUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV0pOgorICAgICAgICAoLVtU
aW55RE9NTm9kZSBpbml0XSk6CisgICAgICAgICgtW1RpbnlET01Ob2RlIGRlYWxsb2NdKToKKyAg
ICAgICAgKC1bVGlueURPTU5vZGUgYXBwZW5kQ2hpbGQ6XSk6CisgICAgICAgICgtW1RpbnlET01O
b2RlIG51bWJlck9mQ2hpbGRyZW5dKToKKyAgICAgICAgKC1bVGlueURPTU5vZGUgY2hpbGRBdElu
ZGV4Ol0pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoU2xvdFZpc2l0b3Ip
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjp0aHJlYWRTYWZlQ29udGFpbnNPcGFxdWVSb290KTogQWRkZWQgYSBuZXcgbWV0
aG9kIHRvIFNsb3RWaXNpdG9yIHRvIGFsbG93IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoIHRvIGhh
dmUgYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgdmlldyBvZiBvcGFxdWUgcm9vdHMgZHVyaW5nIHBh
cmFsbGVsIG1hcmtpbmcuIFRoZSBzZXQgb2Ygb3BhcXVlIHJvb3RzIGF2YWlsYWJsZSB0byBhbnkg
b25lIFNsb3RWaXNpdG9yIGlzbid0IGd1YXJhbnRlZWQKKyAgICAgICAgdG8gYmUgMTAwJSBjb3Jy
ZWN0LCBidXQgdGhhdCBqdXN0IHJlc3VsdHMgaW4gYSBzbWFsbCBkdXBsaWNhdGlvbiBvZiB3b3Jr
IGluIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoLgorCiAyMDEzLTAzLTE4ICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFBvdGVudGlhbGx5IHVuc2FmZSByZWdp
c3RlciBhbGxvY2F0aW9ucyBpbiBERkcgY29kZSBnZW5lcmF0aW9uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAx
NDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwzOCBAQAogI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAorY2xhc3MgSlNBUElXcmFwcGVyT2JqZWN0
SGFuZGxlT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKik7
CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKK307CisK
K3N0YXRpYyBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcioganNBUElXcmFwcGVyT2JqZWN0
SGFuZGxlT3duZXIoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSlNBUElXcmFwcGVyT2Jq
ZWN0SGFuZGxlT3duZXIsIGpzV3JhcHBlck9iamVjdEhhbmRsZU93bmVyLCAoKSk7CisgICAgcmV0
dXJuICZqc1dyYXBwZXJPYmplY3RIYW5kbGVPd25lcjsKK30KKwordm9pZCBKU0FQSVdyYXBwZXJP
YmplY3RIYW5kbGVPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqKQoreworICAgIEpTQzo6V2Vha1NldDo6ZGVhbGxvY2F0ZShKU0M6OldlYWtJbXBs
Ojphc1dlYWtJbXBsKGhhbmRsZS5zbG90KCkpKTsKK30KKworYm9vbCBKU0FQSVdyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8
SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIC8v
IFdlIHVzZSB0aGUgSlNHbG9iYWxPYmplY3Qgd2hlbiBwcm9jZXNzaW5nIHdlYWsgaGFuZGxlcyB0
byBwcmV2ZW50IHRoZSBzaXR1YXRpb24gd2hlcmUgdXNpbmcKKyAgICAvLyB0aGUgc2FtZSBPYmpl
Y3RpdmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgZ2xvYmFsIG9iamVjdHMga2VlcHMgYWxsIG9mIHRo
ZSBnbG9iYWwgb2JqZWN0cyBhbGl2ZS4KKyAgICBpZiAoIXdyYXBwZXJPYmplY3QtPndyYXBwZWRP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBKU0M6OkhlYXA6Omlz
TWFya2VkKHdyYXBwZXJPYmplY3QtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSkgJiYgdmlz
aXRvci5jb250YWluc09wYXF1ZVJvb3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsK
K30KKwogbmFtZXNwYWNlIEpTQyB7CiAgICAgCiB0ZW1wbGF0ZSA8PiBjb25zdCBDbGFzc0luZm8g
SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8gPSB7ICJFbnVtZXJh
YmxlQ2FsbGJhY2tPYmplY3QiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTQ2FsbGJhY2tPYmplY3QpIH07CkBAIC01MSw2ICs3OSwxMiBAQCBKU0FQSVdyYXBwZXJP
YmplY3Q6OkpTQVBJV3JhcHBlck9iamVjdChKCiB7CiB9CiAKK3ZvaWQgSlNBUElXcmFwcGVyT2Jq
ZWN0OjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgV2Vha1NldDo6YWxsb2NhdGUodGhp
cywganNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIoKSwgMCk7IC8vIEJhbGFuY2VkIGluIEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5hbGl6ZS4KK30KKwogdm9pZCBKU0FQSVdy
YXBwZXJPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEpTQVBJV3JhcHBlck9iamVjdCogdGhpc09iamVjdCA9IEpTQzo6
anNDYXN0PEpTQVBJV3JhcHBlck9iamVjdCo+KGNlbGwpOwpAQCAtNTgsNyArOTIsNyBAQCB2b2lk
IEpTQVBJV3JhcHBlck9iamVjdDo6dmlzaXRDaGlsZHJlbihKCiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT53cmFwcGVkT2JqZWN0
KCkpCi0gICAgICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCh0aGlzT2JqZWN0LT53cmFwcGVkT2Jq
ZWN0KCkpOworICAgICAgICBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChjZWxsLT5zdHJ1Y3R1cmUo
KS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKSwgdmlzaXRvciwgdGhpc09iamVjdC0+d3Jh
cHBlZE9iamVjdCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDE0NjEw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDggQEAgcHVibGljOgogICAgIHZvaWQqIHdyYXBwZWRP
YmplY3QoKSB7IHJldHVybiBtX3dyYXBwZWRPYmplY3Q7IH0KICAgICB2b2lkIHNldFdyYXBwZWRP
YmplY3Qodm9pZCogd3JhcHBlZE9iamVjdCkgeyBtX3dyYXBwZWRPYmplY3QgPSB3cmFwcGVkT2Jq
ZWN0OyB9CiAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYpOworCiBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFJlZmVyZW5jZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU01h
bmFnZWRSZWZlcmVuY2VfaAorI2RlZmluZSBKU01hbmFnZWRSZWZlcmVuY2VfaAorCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisK
K0BjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lOworCitOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEp
CitAaW50ZXJmYWNlIEpTTWFuYWdlZFJlZmVyZW5jZSA6IE5TT2JqZWN0CisKKysgKHZvaWQpYWRk
TWFuYWdlZFJlZmVyZW5jZTooaWQpb2JqZWN0IHdpdGhPd25lcjooaWQpb3duZXIgdG9WaXJ0dWFs
TWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZpcnR1YWxNYWNoaW5lOworKyAodm9pZClyZW1v
dmVNYW5hZ2VkUmVmZXJlbmNlOihpZClvYmplY3Qgd2l0aE93bmVyOihpZClvd25lciBmcm9tVmly
dHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZTsKKworQGVuZAor
CisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKKworI2VuZGlmIC8vIEpTTWFuYWdlZFJl
ZmVyZW5jZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFJlZmVy
ZW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdl
ZFJlZmVyZW5jZS5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNNYW5hZ2VkUmVmZXJlbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJKU01hbmFnZWRSZWZlcmVu
Y2UuaCIKKyNpbXBvcnQgIkpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsLmgiCisKKyNpbXBvcnQg
IkFQSUNhc3QuaCIKKyNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0ICJKU1ZhbHVlLmgiCisj
aW1wb3J0ICJKU01hbmFnZWRWYWx1ZS5oIgorI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgiCisjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKKyNpbXBvcnQgIlNsb3RWaXNpdG9yLmgi
CisKK0BpbXBsZW1lbnRhdGlvbiBKU01hbmFnZWRSZWZlcmVuY2UKKworc3RhdGljIGlkIGdldElu
dGVybmFsT2JqY09iamVjdChpZCBvYmplY3QpCit7CisgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZD
bGFzczpbSlNNYW5hZ2VkVmFsdWUgY2xhc3NdXSkKKyAgICAgICAgb2JqZWN0ID0gW3N0YXRpY19j
YXN0PEpTTWFuYWdlZFZhbHVlICo+KG9iamVjdCkgdmFsdWVdOworICAgIAorICAgIGlmIChbb2Jq
ZWN0IGlzS2luZE9mQ2xhc3M6W0pTVmFsdWUgY2xhc3NdXSkgeworICAgICAgICBKU1ZhbHVlICp2
YWx1ZSA9IHN0YXRpY19jYXN0PEpTVmFsdWUgKj4ob2JqZWN0KTsKKyAgICAgICAgb2JqZWN0ID0g
dHJ5VW53cmFwT2JqY09iamVjdChbdmFsdWUuY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSwgW3Zh
bHVlIEpTVmFsdWVSZWZdKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwor
KyAodm9pZClhZGRNYW5hZ2VkUmVmZXJlbmNlOihpZClvYmplY3Qgd2l0aE93bmVyOihpZClvd25l
ciB0b1ZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdmlydHVhbE1hY2hpbmUKK3sg
ICAgCisgICAgb2JqZWN0ID0gZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KG9iamVjdCk7CisgICAgb3du
ZXIgPSBnZXRJbnRlcm5hbE9iamNPYmplY3Qob3duZXIpOworICAgIAorICAgIGlmICghb2JqZWN0
IHx8ICFvd25lciB8fCAhdmlydHVhbE1hY2hpbmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBKU0M6OkFQSUVudHJ5U2hpbSBzaGltKHRvSlMoZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUo
dmlydHVhbE1hY2hpbmUpKSk7CisgICAgCisgICAgTlNNYXBUYWJsZSAqZXh0ZXJuYWxPYmplY3RH
cmFwaCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXTsKKyAgICBOU011dGFi
bGVTZXQgKm93bmVkT2JqZWN0cyA9IFtleHRlcm5hbE9iamVjdEdyYXBoIG9iamVjdEZvcktleTpv
d25lcl07CisgICAgaWYgKCFvd25lZE9iamVjdHMpIHsKKyAgICAgICAgb3duZWRPYmplY3RzID0g
W1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MV07CisgICAgICAgIFtleHRl
cm5hbE9iamVjdEdyYXBoIHNldE9iamVjdDpvd25lZE9iamVjdHMgZm9yS2V5Om93bmVyXTsKKyAg
ICAgICAgW293bmVkT2JqZWN0cyByZWxlYXNlXTsKKyAgICB9CisgICAgW293bmVkT2JqZWN0cyBh
ZGRPYmplY3Q6b2JqZWN0XTsKK30KKworKyAodm9pZClyZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOihp
ZClvYmplY3Qgd2l0aE93bmVyOihpZClvd25lciBmcm9tVmlydHVhbE1hY2hpbmU6KEpTVmlydHVh
bE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZQoreworICAgIG9iamVjdCA9IGdldEludGVybmFsT2Jq
Y09iamVjdChvYmplY3QpOworICAgIG93bmVyID0gZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KG93bmVy
KTsKKyAgICAKKyAgICBpZiAoIW9iamVjdCB8fCAhb3duZXIgfHwgIXZpcnR1YWxNYWNoaW5lKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNDOjpBUElFbnRyeVNoaW0gc2hpbSh0b0pTKGdl
dEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKHZpcnR1YWxNYWNoaW5lKSkpOworICAgIAorICAgIE5T
TWFwVGFibGUgKmV4dGVybmFsT2JqZWN0R3JhcGggPSBbdmlydHVhbE1hY2hpbmUgZXh0ZXJuYWxP
YmplY3RHcmFwaF07CisgICAgTlNNdXRhYmxlU2V0ICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxP
YmplY3RHcmFwaCBvYmplY3RGb3JLZXk6b3duZXJdOworICAgIGlmICghb3duZWRPYmplY3RzKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgW293bmVkT2JqZWN0cyByZW1vdmVPYmplY3Q6b2Jq
ZWN0XTsKK30KKwordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OkpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCogcm9vdCkKK3sK
KyAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZpcnR1YWxNYWNoaW5l
IHZpcnR1YWxNYWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmZ2xvYmFsRGF0YSldOwor
ICAgIE5TTWFwVGFibGUgKmV4dGVybmFsT2JqZWN0R3JhcGggPSBbdmlydHVhbE1hY2hpbmUgZXh0
ZXJuYWxPYmplY3RHcmFwaF07CisgICAgTlNNdXRhYmxlQXJyYXkgKnN0YWNrID0gW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eToxXTsKKyAgICBbc3RhY2sgYWRkT2JqZWN0
OnN0YXRpY19jYXN0PGlkPihyb290KV07CisgICAgd2hpbGUgKFtzdGFjayBjb3VudF0gPiAwKSB7
CisgICAgICAgIGlkIG5leHRSb290ID0gW3N0YWNrIGxhc3RPYmplY3RdOworICAgICAgICBbc3Rh
Y2sgcmVtb3ZlTGFzdE9iamVjdF07CisgICAgICAgIGlmICh2aXNpdG9yLnRocmVhZFNhZmVDb250
YWluc09wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8dm9pZCo+KG5leHRSb290KSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRpY19jYXN0PHZv
aWQqPihuZXh0Um9vdCkpOworICAgICAgICAKKyAgICAgICAgTlNTZXQgKm93bmVkT2JqZWN0cyA9
IFtleHRlcm5hbE9iamVjdEdyYXBoIG9iamVjdEZvcktleTpuZXh0Um9vdF07CisgICAgICAgIGlk
IG93bmVkT2JqZWN0OworICAgICAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbb3duZWRP
YmplY3RzIG9iamVjdEVudW1lcmF0b3JdOworICAgICAgICB3aGlsZSAoKG93bmVkT2JqZWN0ID0g
W2VudW1lcmF0b3IgbmV4dE9iamVjdF0pKQorICAgICAgICAgICAgW3N0YWNrIGFkZE9iamVjdDpv
d25lZE9iamVjdF07CisgICAgfQorICAgIFtzdGFjayByZWxlYXNlXTsKK30KKworQGVuZApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJl
bmNlSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNNYW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbF9oCisj
ZGVmaW5lIEpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsX2gKKworbmFtZXNwYWNlIEpTQyB7Citj
bGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKK30KKyAgICAKK3ZvaWQgc2Nh
bkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpKU0dsb2JhbERhdGEmLCBKU0M6OlNsb3RWaXNpdG9y
Jiwgdm9pZCogcm9vdCk7CisKKyNlbmRpZiAvLyBKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbF9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1t
CShyZXZpc2lvbiAxNDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAgKyAoSlNWaXJ0dWFs
TWFjaGluZSAqKXdyYXBwZXJGb3JKU0NvbnRleAogQGltcGxlbWVudGF0aW9uIEpTVmlydHVhbE1h
Y2hpbmUgewogICAgIEpTQ29udGV4dEdyb3VwUmVmIG1fZ3JvdXA7CiAgICAgTlNNYXBUYWJsZSAq
bV9jb250ZXh0Q2FjaGU7CisgICAgTlNNYXBUYWJsZSAqbV9leHRlcm5hbE9iamVjdEdyYXBoOwog
fQogCiAtIChpZClpbml0CkBAIC0xMDEsMjIgKzEwMiwyOCBAQCAtIChpZClpbml0V2l0aENvbnRl
eHRHcm91cFJlZjooSlNDb250ZXh0CiAgICAgTlNQb2ludGVyRnVuY3Rpb25zT3B0aW9ucyBrZXlP
cHRpb25zID0gTlNQb2ludGVyRnVuY3Rpb25zT3BhcXVlTWVtb3J5IHwgTlNQb2ludGVyRnVuY3Rp
b25zT3BhcXVlUGVyc29uYWxpdHk7CiAgICAgTlNQb2ludGVyRnVuY3Rpb25zT3B0aW9ucyB2YWx1
ZU9wdGlvbnMgPSBOU1BvaW50ZXJGdW5jdGlvbnNXZWFrTWVtb3J5IHwgTlNQb2ludGVyRnVuY3Rp
b25zT2JqZWN0UGVyc29uYWxpdHk7CiAgICAgbV9jb250ZXh0Q2FjaGUgPSBbW05TTWFwVGFibGUg
YWxsb2NdIGluaXRXaXRoS2V5T3B0aW9uczprZXlPcHRpb25zIHZhbHVlT3B0aW9uczp2YWx1ZU9w
dGlvbnMgY2FwYWNpdHk6MF07CisgICAgCisgICAgTlNQb2ludGVyRnVuY3Rpb25zT3B0aW9ucyB3
ZWFrSURPcHRpb25zID0gTlNQb2ludGVyRnVuY3Rpb25zV2Vha01lbW9yeSB8IE5TUG9pbnRlckZ1
bmN0aW9uc09iamVjdFBlcnNvbmFsaXR5OworICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMg
c3Ryb25nSURPcHRpb25zID0gTlNQb2ludGVyRnVuY3Rpb25zU3Ryb25nTWVtb3J5IHwgTlNQb2lu
dGVyRnVuY3Rpb25zT2JqZWN0UGVyc29uYWxpdHk7CisgICAgbV9leHRlcm5hbE9iamVjdEdyYXBo
ID0gW1tOU01hcFRhYmxlIGFsbG9jXSBpbml0V2l0aEtleU9wdGlvbnM6d2Vha0lET3B0aW9ucyB2
YWx1ZU9wdGlvbnM6c3Ryb25nSURPcHRpb25zIGNhcGFjaXR5OjBdOwogICAgCiAgICAgW0pTVk1X
cmFwcGVyQ2FjaGUgYWRkV3JhcHBlcjpzZWxmIGZvckpTQ29udGV4dEdyb3VwUmVmOmdyb3VwXTsK
ICAKICAgICByZXR1cm4gc2VsZjsKIH0KIAotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gSlNWaXJ0
dWFsTWFjaGluZShJbnRlcm5hbCkKLQogLSAodm9pZClkZWFsbG9jCiB7CiAgICAgSlNDb250ZXh0
R3JvdXBSZWxlYXNlKG1fZ3JvdXApOworICAgIFttX2NvbnRleHRDYWNoZSByZWxlYXNlXTsKKyAg
ICBbbV9leHRlcm5hbE9iamVjdEdyYXBoIHJlbGVhc2VdOwogICAgIFtzdXBlciBkZWFsbG9jXTsK
IH0KIAorQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZShJbnRlcm5hbCkK
KwogSlNDb250ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFs
TWFjaGluZSAqdmlydHVhbE1hY2hpbmUpCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxNYWNoaW5lLT5t
X2dyb3VwOwpAQCAtMTQwLDYgKzE0NywxMSBAQCAtICh2b2lkKWFkZENvbnRleHQ6KEpTQ29udGV4
dCAqKXdyYXBwZXIgCiAgICAgTlNNYXBJbnNlcnQobV9jb250ZXh0Q2FjaGUsIGdsb2JhbENvbnRl
eHQsIHdyYXBwZXIpOwogfQogCistIChOU01hcFRhYmxlICopZXh0ZXJuYWxPYmplY3RHcmFwaAor
eworICAgIHJldHVybiBtX2V4dGVybmFsT2JqZWN0R3JhcGg7Cit9CisKIEBlbmQKIAogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmgJKHJldmlzaW9uIDE0NjEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDgg
QEAgSlNDb250ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hYwogLSAoSlNDb250ZXh0
ICopY29udGV4dEZvckdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxD
b250ZXh0OwogLSAodm9pZClhZGRDb250ZXh0OihKU0NvbnRleHQgKil3cmFwcGVyIGZvckdsb2Jh
bENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0OwogCistIChOU01h
cFRhYmxlICopZXh0ZXJuYWxPYmplY3RHcmFwaDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlzaW9uIDE0NjEw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU01hbmFnZWRSZWZl
cmVuY2UuaD4KIAogdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmco
SlNDb250ZXh0UmVmKTsKIApAQCAtMTUzLDYgKzE1NCw2NiBAQCAtICh2b2lkKWNsaWNrCiB9CiBA
ZW5kCiAKK0BjbGFzcyBUaW55RE9NTm9kZTsKKworQHByb3RvY29sIFRpbnlET01Ob2RlIDxKU0V4
cG9ydD4KKy0gKHZvaWQpYXBwZW5kQ2hpbGQ6KFRpbnlET01Ob2RlICopY2hpbGQ7CistIChOU1VJ
bnRlZ2VyKW51bWJlck9mQ2hpbGRyZW47CistIChUaW55RE9NTm9kZSAqKWNoaWxkQXRJbmRleDoo
TlNVSW50ZWdlcilpbmRleDsKK0BlbmQKKworQGludGVyZmFjZSBUaW55RE9NTm9kZSA6IE5TT2Jq
ZWN0PFRpbnlET01Ob2RlPgorKyAoSlNWaXJ0dWFsTWFjaGluZSAqKXNoYXJlZFZpcnR1YWxNYWNo
aW5lOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGlueURPTU5vZGUgeworICAgIE5TTXV0YWJs
ZUFycmF5ICptX2NoaWxkcmVuOworfQorCisrIChKU1ZpcnR1YWxNYWNoaW5lICopc2hhcmVkVmly
dHVhbE1hY2hpbmUKK3sKKyAgICBzdGF0aWMgSlNWaXJ0dWFsTWFjaGluZSAqc2hhcmVkSW5zdGFu
Y2UgPSBbW0pTVmlydHVhbE1hY2hpbmUgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBzaGFyZWRJ
bnN0YW5jZTsKK30KKworLSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgbV9jaGlsZHJlbiA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MF07CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgTlNFbnVtZXJhdG9yICplbnVtZXJh
dG9yID0gW21fY2hpbGRyZW4gb2JqZWN0RW51bWVyYXRvcl07CisgICAgaWQgbmV4dENoaWxkOwor
ICAgIHdoaWxlICgobmV4dENoaWxkID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pKQorICAgICAg
ICBbSlNNYW5hZ2VkUmVmZXJlbmNlIHJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6bmV4dENoaWxkIHdp
dGhPd25lcjpzZWxmIGZyb21WaXJ0dWFsTWFjaGluZTpbVGlueURPTU5vZGUgc2hhcmVkVmlydHVh
bE1hY2hpbmVdXTsKK30KKworLSAodm9pZClhcHBlbmRDaGlsZDooVGlueURPTU5vZGUgKiljaGls
ZAoreworICAgIFtKU01hbmFnZWRSZWZlcmVuY2UgYWRkTWFuYWdlZFJlZmVyZW5jZTpjaGlsZCB3
aXRoT3duZXI6c2VsZiB0b1ZpcnR1YWxNYWNoaW5lOltUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFs
TWFjaGluZV1dOworICAgIFttX2NoaWxkcmVuIGFkZE9iamVjdDpjaGlsZF07Cit9CisKKy0gKE5T
VUludGVnZXIpbnVtYmVyT2ZDaGlsZHJlbgoreworICAgIHJldHVybiBbbV9jaGlsZHJlbiBjb3Vu
dF07Cit9CisKKy0gKFRpbnlET01Ob2RlICopY2hpbGRBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4
Cit7CisgICAgaWYgKGluZGV4ID49IFttX2NoaWxkcmVuIGNvdW50XSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICByZXR1cm4gW21fY2hpbGRyZW4gb2JqZWN0QXRJbmRleDppbmRleF07Cit9CitA
ZW5kCisKIHN0YXRpYyB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICpkZXNjcmlwdGlvbiwgYm9v
bCBwYXNzZWQpCiB7CiAgICAgTlNMb2coQCJURVNUOiBcIiVAXCI6ICVAIiwgZGVzY3JpcHRpb24s
IHBhc3NlZCA/IEAiUEFTU0VEIiA6IEAiRkFJTEVEIik7CkBAIC02MTMsNiArNjc0LDU0IEBAIHZv
aWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJFdmVudCBo
YW5kbGVyIG9uY2xpY2sgZG9lc24ndCBmaXJlIiwgIVtyZXN1bHQgdG9Cb29sXSk7CiAgICAgICAg
IH0KICAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNWaXJ0dWFsTWFj
aGluZSAqdm0gPSBbVGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdOworICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFj
aGluZTp2bV07CisgICAgICAgIFRpbnlET01Ob2RlICpyb290ID0gW1tUaW55RE9NTm9kZSBhbGxv
Y10gaW5pdF07CisgICAgICAgIFRpbnlET01Ob2RlICpsYXN0Tm9kZSA9IHJvb3Q7CisgICAgICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgVGlueURP
TU5vZGUgKm5ld05vZGUgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAg
IFtsYXN0Tm9kZSBhcHBlbmRDaGlsZDpuZXdOb2RlXTsKKyAgICAgICAgICAgIGxhc3ROb2RlID0g
bmV3Tm9kZTsKKyAgICAgICAgfQorICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAg
ICAgIGNvbnRleHRbQCJyb290Il0gPSByb290OworICAgICAgICAgICAgY29udGV4dFtAImdldExh
c3ROb2RlSW5DaGFpbiJdID0gXihUaW55RE9NTm9kZSAqaGVhZCl7CisgICAgICAgICAgICAgICAg
VGlueURPTU5vZGUgKmxhc3ROb2RlID0gbmlsOworICAgICAgICAgICAgICAgIHdoaWxlIChoZWFk
KSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gaGVhZDsKKyAgICAgICAgICAgICAg
ICAgICAgaGVhZCA9IFtsYXN0Tm9kZSBjaGlsZEF0SW5kZXg6MF07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBsYXN0Tm9kZTsKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImdldExhc3ROb2RlSW5DaGFpbihyb290
KS5teUN1c3RvbVByb3BlcnR5ID0gNDI7Il07CisgICAgICAgIH0KKworICAgICAgICBKU1N5bmNo
cm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJl
Zl0pOworCisgICAgICAgIEpTVmFsdWUgKm15Q3VzdG9tUHJvcGVydHkgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAImdldExhc3ROb2RlSW5DaGFpbihyb290KS5teUN1c3RvbVByb3BlcnR5Il07
CisgICAgICAgIGNoZWNrUmVzdWx0KEAiTXkgY3VzdG9tIHByb3BlcnR5ID09IDQyIiwgW215Q3Vz
dG9tUHJvcGVydHkgaXNOdW1iZXJdICYmIFtteUN1c3RvbVByb3BlcnR5IHRvSW50MzJdID09IDQy
KTsKKyAgICB9CisKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNWaXJ0dWFsTWFj
aGluZSAqdm0gPSBbVGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdOworICAgICAgICBU
aW55RE9NTm9kZSAqcm9vdCA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGluaXRdOworICAgICAgICBK
U01hbmFnZWRWYWx1ZSAqd2Vha1ZhbHVlOworICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAg
ICAgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0
aFZpcnR1YWxNYWNoaW5lOnZtXTsKKyAgICAgICAgICAgIGNvbnRleHRbQCJyb290Il0gPSByb290
OworICAgICAgICAgICAgd2Vha1ZhbHVlID0gW0pTTWFuYWdlZFZhbHVlIG1hbmFnZWRWYWx1ZVdp
dGhWYWx1ZTpjb250ZXh0W0Aicm9vdCJdXTsKKyAgICAgICAgfQorCisgICAgICAgIEBhdXRvcmVs
ZWFzZXBvb2wgeworICAgICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6dm1dOworICAgICAgICAgICAgY29udGV4dFtA
InJvb3QiXSA9IHJvb3Q7CisgICAgICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RG
b3JEZWJ1Z2dpbmcoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0pOworICAgICAgICAgICAgY2hl
Y2tSZXN1bHQoQCJ3ZWFrIHZhbHVlID09IG5pbCIsICFbd2Vha1ZhbHVlIHZhbHVlXSk7CisgICAg
ICAgICAgICBjaGVja1Jlc3VsdChAInJvb3QgaXMgc3RpbGwgYWxpdmUiLCAhW2NvbnRleHRbQCJy
b290Il0gaXNVbmRlZmluZWRdKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogI2Vsc2UKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDYxMDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtODUxLDYgKzg1MSw5IEBACiAJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZD
RTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzJFQUEzRjgxNDlBODMwODAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJFQUQyRkMx
NEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJFQUQyRkIxNEYwMjQ5ODAwQTRCMTU5IC8qIENv
cGllZEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkYwRjJE
MDE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovOyB9OworCQlDMkY2
RkNBMjE2RjY3NDI1MDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGNkZDQTAxNkY2NzQyNTAwQzNF
MUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZS5tbSAqLzsgfTsKKwkJQzJGNkZDQTMxNkY2NzQyNTAw
QzNFMUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGNkZDQTExNkY2NzQyNTAwQzNFMUYyIC8qIEpTTWFuYWdl
ZFJlZmVyZW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsg
fTsKKwkJQzJGNkZDQTUxNkY2OTYxMjAwQzNFMUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkY2
RkNBNDE2RjY5NjEyMDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQzlCRDIxNjY0
NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAv
KiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzJGRTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRh
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRERG
N0FCRDQxMUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRERGN0FCRDIxMUY2MEVEMjAwMTA4
RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xNzUzLDYgKzE3NTYsOSBAQAogCQlDMkVBQTNGODE0OUE4
MzA4MDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29waWVkU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJFQUQy
RkIxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3BpZWRBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzJGMEYyRDAxNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJGNkZDQTAxNkY2NzQyNTAwQzNF
MUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEpTTWFuYWdlZFJlZmVyZW5jZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzJGNkZDQTExNkY2NzQyNTAwQzNFMUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01hbmFnZWRSZWZlcmVuY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJGNkZDQTQxNkY2OTYxMjAwQzNFMUYyIC8q
IEpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyRkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQmxvY2tJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkUxOEEzMTZCQUVDNDAwMEFGMzA2MSAv
KiBTdHJ1Y3R1cmVSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dHJ1Y3R1cmVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIy
ODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIyMjQsNiArMjIzMCw5IEBACiAJCQkJQzI1RDcwOUExNkRFOTlGNDAw
RkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggKi8sCiAJCQkJQzJDRjM5QkYxNkUxNUE4MTAwREQ2
OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5jcHAgKi8sCiAJCQkJQzJDRjM5QzAxNkUxNUE4MTAw
REQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oICovLAorCQkJCUMyRjZGQ0EwMTZGNjc0MjUw
MEMzRTFGMiAvKiBKU01hbmFnZWRSZWZlcmVuY2UubW0gKi8sCisJCQkJQzJGNkZDQTExNkY2NzQy
NTAwQzNFMUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZS5oICovLAorCQkJCUMyRjZGQ0E0MTZGNjk2
MTIwMEMzRTFGMiAvKiBKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oICovLAogCQkJKTsKIAkJ
CXBhdGggPSBBUEk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjk0Myw2ICsyOTUy
LDcgQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJ
CQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUMyRjZGQ0EzMTZGNjc0MjUwMEMzRTFGMiAvKiBKU01hbmFnZWRSZWZlcmVuY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBB
Qzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVD
RDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzA4Myw2ICszMDkzLDcg
QEAKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0MjczMTE1OEVCRDU0MDA0Q0I5
RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNDYwNzBFMUY0OTdG
MDAzMjMyQ0YgLyogRXJyb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyRjZGQ0E1MTZGNjk2MTIw
MEMzRTFGMiAvKiBKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMwMkU5MEQwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMDJFOThEMEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3RhbmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkwRjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzg0MCw2ICszODUxLDcgQEAKIAkJCQkwRkREQkZC
NTE2NjZFRUQ4MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCREM1MTE1MjI4RkZEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM0QTE1MjI4MDlBMDBDRDg5MTAgLyogREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMkY2RkNBMjE2RjY3
NDI1MDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGRkM5NUYxNEVGOTBCQjAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM3MDE2NURCQjkwMDA1QUQzODcgLyog
RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQy
N0E0OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMTQ2MTAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBi
b29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKik7CisgICAgYm9vbCB0aHJlYWRTYWZlQ29udGFp
bnNPcGFxdWVSb290KHZvaWQqKTsKICAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKICAgICBH
Q1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERhdGEoKSB7IHJldHVybiBtX3NoYXJlZDsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJ
KHJldmlzaW9uIDE0NjEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDE0IEBAIGlubGluZSBi
b29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVIKICNlbmRpZgogfQogCitpbmxpbmUgYm9v
bCBTbG90VmlzaXRvcjo6dGhyZWFkU2FmZUNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KQor
eworICAgIGlmIChtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaGFyZWQubV9vcGFxdWVSb290c0xvY2sp
OworICAgIHJldHVybiBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOworfQor
CiBpbmxpbmUgaW50IFNsb3RWaXNpdG9yOjpvcGFxdWVSb290Q291bnQoKQogewogICAgIEFTU0VS
VCghbV9pc0luUGFyYWxsZWxNb2RlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193667</attachid>
            <date>2013-03-18 15:09:41 -0700</date>
            <delta_ts>2013-03-18 15:31:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112608-20130318150533.patch</filename>
            <type>text/plain</type>
            <size>34140</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ2MTIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDEzLTAzLTE4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgZ29vZCB3YXkgdG8gcHJlc2VydmUgY3Vz
dG9tIHByb3BlcnRpZXMgb24gSlMgd3JhcHBlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgd2UganVzdCB1c2UgYSB3ZWFrIG1hcCwg
d2hpY2ggbWVhbnMgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gY2FuIGNhdXNlIGEgd3JhcHBlciB0
byAKKyAgICAgICAgZGlzYXBwZWFyIGlmIGl0IGlzbid0IGRpcmVjdGx5IHJlZmVyZW5jZWQgZnJv
bSBKYXZhU2NyaXB0LgorCisgICAgICAgIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2Fm
ZSB3YXkgKHdpdGggcmVzcGVjdCB0byBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIGNvbmN1cnJlbmN5
KSBpcyB0byBoYXZlIAorICAgICAgICBjbGllbnRzIGFkZCBhbmQgcmVtb3ZlIHRoZWlyIGV4dGVy
bmFsIHJlZmVyZW5jZXMgYWxvbmcgd2l0aCB0aGVpciBvd25lcnMuIEVmZmVjdGl2ZWx5LCB0aGUg
Y2xpZW50IGlzIAorICAgICAgICByZWNvcmRpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXh0ZXJu
YWwgb2JqZWN0IGdyYXBoIHNvIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGNhbiBtYWtlIHN1
cmUgdG8gCisgICAgICAgIG1hcmsgYW55IHdyYXBwZXJzIHRoYXQgYXJlIHJlYWNoYWJsZSB0aHJv
dWdoIGVpdGhlciB0aGUgSlMgb2JqZWN0IGdyYXBoIG9mIHRoZSBleHRlcm5hbCBPYmotQyBvYmpl
Y3QgCisgICAgICAgIGdyYXBoLiBCeSBrZWVwaW5nIHRoZXNlIHdyYXBwZXJzIGFsaXZlLCB0aGlz
IGhhcyB0aGUgZWZmZWN0IHRoYXQgY3VzdG9tIHByb3BlcnRpZXMgb24gdGhlc2Ugd3JhcHBlcnMg
CisgICAgICAgIHdpbGwgYWxzbyByZW1haW4gYWxpdmUuCisKKyAgICAgICAgVGhlIHJ1bGUgZm9y
IGlmIGFuIG9iamVjdCBuZWVkcyB0byBiZSB0cmFja2VkIGJ5IHRoZSBydW50aW1lIChhbmQgdGhl
cmVmb3JlIHdoZXRoZXIgdGhlIGNsaWVudCBzaG91bGQgcmVwb3J0IGl0KSBpcyBhcyBmb2xsb3dz
OgorICAgICAgICBGb3IgYSBwYXJ0aWN1bGFyIG9iamVjdCwgaXRzIHJlZmVyZW5jZXMgdG8gaXRz
IGNoaWxkcmVuIHNob3VsZCBiZSBhZGRlZCBpZjoKKyAgICAgICAgMS4gVGhlIGNoaWxkIGlzIHJl
ZmVyZW5jZWQgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICAyLiBUaGUgY2hpbGQgY29udGFpbnMg
cmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGZvciB3aGljaCAoMSkgb3IgKDIpIGFyZSB0cnVl
LgorCisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5jcHA6CisgICAgICAgIChKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcik6IE5ldyBjbGFzcyB0aGF0IGFjdHMgYXMgdGhlIFdl
YWtIYW5kbGVPd25lciBmb3IgSlNBUElXcmFwcGVyT2JqZWN0cy4KKyAgICAgICAgKGpzQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKToKKyAgICAgICAgKEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hbGl6ZSk6IERlYWxsb2NhdGVzIHRoZSBXZWFrSW1wbCB0aGF0IHdhcyBhbGxv
Y2F0ZWQgaW4gSlNBUElXcmFwcGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbi4KKyAgICAgICAgKEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
IEEgd3JhcHBlciBvYmplY3QgaXMga2VwdCBhbGl2ZSBvbmx5IGlmIGl0cyBKU0dsb2JhbE9iamVj
dAorICAgICAgICBpcyBtYXJrZWQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9i
amVjdCB3YXMgYWRkZWQgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgIChKU0M6
OkpTQVBJV3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOiBBbGxvY2F0ZXMgYSBuZXcgV2Vh
a0ltcGwgZm9yIEpTQVBJV3JhcHBlck9iamVjdHMuCisgICAgICAgIChKU0M6OkpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbik6IFdlIG5vdyBjYWxsIG91dCB0byBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaCwgd2hpY2ggaGFuZGxlcyBhZGRpbmcgYWxsIE9iamVjdGl2ZS1DCisgICAgICAg
IG9iamVjdHMgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgICogQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5oOgorICAgICAgICAoSlNBUElXcmFwcGVyT2JqZWN0KToKKyAgICAgICAg
KiBBUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9KU01hbmFn
ZWRSZWZlcmVuY2UubW06IEFkZGVkLgorICAgICAgICAoZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KTog
SGVscGVyIGZ1bmNpdG9uIHRvIGdldCB0aGUgT2JqZWN0aXZlLUMgb2JqZWN0IG91dCBvZiBKU01h
bmFnZWRWYWx1ZXMgb3IgSlNWYWx1ZXMgaWYgdGhlcmUgaXMgb25lLgorICAgICAgICAoK1tKU01h
bmFnZWRSZWZlcmVuY2UgYWRkTWFuYWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6dG9WaXJ0dWFsTWFj
aGluZTpdKTogQWRkcyB0aGUgT2JqZWN0aXZlLUMgb2JqZWN0IHRvIHRoZSBzZXQgb2Ygb2JqZWN0
cyAKKyAgICAgICAgb3duZWQgYnkgdGhlIG93bmVyIG9iamVjdCBpbiB0aGF0IHBhcnRpY3VsYXIg
dmlydHVhbCBtYWNoaW5lLgorICAgICAgICAoK1tKU01hbmFnZWRSZWZlcmVuY2UgcmVtb3ZlTWFu
YWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6ZnJvbVZpcnR1YWxNYWNoaW5lOl0pOiBSZW1vdmVzIHRo
ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuCisgICAgICAgIChzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaCk6IERvZXMgYSBkZXB0aC1maXJzdCBzZWFyY2ggb2YgdGhlIGV4dGVy
bmFsIG9iamVjdCBncmFwaCBpbiBhIHBhcnRpY3VsYXIgdmlydHVhbCBtYWNoaW5lIHN0YXJ0aW5n
IGF0CisgICAgICAgIHRoZSBzcGVjaWZpZWQgcm9vdC4gRWFjaCBuZXcgb2JqZWN0IGl0IGVuY291
bnRlcnMgaXQgYWRkcyB0byB0aGUgc2V0IG9mIG9wYXF1ZSByb290cy4gVGhlc2Ugb3BhcXVlIHJv
b3RzIHdpbGwga2VlcCB0aGVpciAKKyAgICAgICAgY29ycmVzcG9uZGluZyB3cmFwcGVyIG9iamVj
dHMgYWxpdmUgaWYgdGhleSBoYXZlIHRoZW0uIAorICAgICAgICAqIEFQSS9KU01hbmFnZWRSZWZl
cmVuY2VJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bTogQWRkZWQgdGhlIHBlci1KU1ZpcnR1YWxNYWNoaW5lIG1hcCBiZXR3ZWVuIG9iamVjdHMgYW5k
IHRoZSBvYmplY3RzIHRoZXkgb3duLCB3aGljaCBpcyBtb3JlIGZvcm1hbGx5CisgICAgICAgIGtu
b3duIGFzIHRoYXQgdmlydHVhbCBtYWNoaW5lJ3MgZXh0ZXJuYWwgb2JqZWN0IGdyYXBoLgorICAg
ICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGluaXRXaXRoQ29udGV4dEdyb3VwUmVmOl0pOgorICAg
ICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNWaXJ0dWFs
TWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXSk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOiBBZGRlZCB0
d28gbmV3IHRlc3RzIHVzaW5nIHRoZSBUaW55RE9NTm9kZSBjbGFzcy4gVGhlIGZpcnN0IHRlc3Rz
IHRoYXQgYSBjdXN0b20gcHJvcGVydHkgYWRkZWQgdG8gYSB3cmFwcGVyIAorICAgICAgICBkb2Vz
bid0IHZhbmlzaCBhZnRlciBHQywgZXZlbiB0aG91Z2ggdGhhdCB3cmFwcGVyIGlzbid0IGRpcmVj
dGx5IGFjY2Vzc2libGUgdG8gdGhlIEpTIGdhcmJhZ2UgY29sbGVjdG9yIGJ1dCBpcyBhY2Nlc3Np
YmxlIHRocm91Z2ggCisgICAgICAgIHRoZSBleHRlcm5hbCBPYmplY3RpdmUtQyBvYmplY3QgZ3Jh
cGguIFRoZSBzZWNvbmQgdGVzdCBtYWtlcyBzdXJlIHRoYXQgcmV1c2luZyB0aGUgc2FtZSBPYmpl
Y3RpdmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgSlNDb250ZXh0cyAKKyAgICAgICAgZG9lc24ndCBj
YXVzZSB0aG9zZSBKU0NvbnRleHRzIHRvIGxlYWsgdGhlaXIgSlNHbG9iYWxPYmplY3RzLgorICAg
ICAgICAoK1tUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV0pOgorICAgICAgICAoLVtU
aW55RE9NTm9kZSBpbml0XSk6CisgICAgICAgICgtW1RpbnlET01Ob2RlIGRlYWxsb2NdKToKKyAg
ICAgICAgKC1bVGlueURPTU5vZGUgYXBwZW5kQ2hpbGQ6XSk6CisgICAgICAgICgtW1RpbnlET01O
b2RlIG51bWJlck9mQ2hpbGRyZW5dKToKKyAgICAgICAgKC1bVGlueURPTU5vZGUgY2hpbGRBdElu
ZGV4Ol0pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoU2xvdFZpc2l0b3Ip
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjp0aHJlYWRTYWZlQ29udGFpbnNPcGFxdWVSb290KTogQWRkZWQgYSBuZXcgbWV0
aG9kIHRvIFNsb3RWaXNpdG9yIHRvIGFsbG93IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoIHRvIGhh
dmUgYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgdmlldyBvZiBvcGFxdWUgcm9vdHMgZHVyaW5nIHBh
cmFsbGVsIG1hcmtpbmcuIFRoZSBzZXQgb2Ygb3BhcXVlIHJvb3RzIGF2YWlsYWJsZSB0byBhbnkg
b25lIFNsb3RWaXNpdG9yIGlzbid0IGd1YXJhbnRlZWQKKyAgICAgICAgdG8gYmUgMTAwJSBjb3Jy
ZWN0LCBidXQgdGhhdCBqdXN0IHJlc3VsdHMgaW4gYSBzbWFsbCBkdXBsaWNhdGlvbiBvZiB3b3Jr
IGluIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoLgorCiAyMDEzLTAzLTE4ICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFBvdGVudGlhbGx5IHVuc2FmZSByZWdp
c3RlciBhbGxvY2F0aW9ucyBpbiBERkcgY29kZSBnZW5lcmF0aW9uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAx
NDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw0MCBAQAogI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CisKK2NsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCopOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJik7Cit9OworCitzdGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIqIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyLCBqc1dyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lciwgKCkpOworICAgIHJldHVybiAmanNXcmFwcGVyT2JqZWN0SGFuZGxlT3du
ZXI7Cit9CisKK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKikKK3sKKyAgICBKU0M6OldlYWtT
ZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgpKSk7
Cit9CisKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVjdCog
d3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFu
ZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0IHdo
ZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdoZXJl
IHVzaW5nCisgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRpcGxlIGds
b2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUuCisgICAg
aWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gSlNDOjpIZWFwOjppc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBw
ZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7Cit9CisKIG5hbWVzcGFjZSBKU0MgewogICAgIAog
dGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVy
T2JqZWN0Pjo6c19pbmZvID0geyAiRW51bWVyYWJsZUNhbGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwpAQCAt
NTEsNiArODEsMTIgQEAgSlNBUElXcmFwcGVyT2JqZWN0OjpKU0FQSVdyYXBwZXJPYmplY3QoSgog
ewogfQogCit2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgIFdlYWtTZXQ6OmFsbG9jYXRlKHRoaXMsIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyKCksIDApOyAvLyBCYWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6
ZmluYWxpemUuCit9CisKIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FQSVdyYXBw
ZXJPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0FQSVdyYXBwZXJPYmplY3QqPihj
ZWxsKTsKQEAgLTU4LDcgKzk0LDkgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKICAgICBp
ZiAodGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKQotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QodGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICAgICAgc2NhbkV4dGVybmFs
T2JqZWN0R3JhcGgoY2VsbC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCksIHZpc2l0b3IsIHRoaXNPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAkocmV2aXNpb24g
MTQ2MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogCisjaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKKwogbmFtZXNwYWNlIEpTQyB7CiAgICAgCiBjbGFzcyBKU0FQ
SVdyYXBwZXJPYmplY3QgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewpAQCAtNDEsNiAr
NDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCogd3JhcHBlZE9iamVjdCgpIHsgcmV0dXJuIG1fd3Jh
cHBlZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdCh2b2lkKiB3cmFwcGVkT2Jq
ZWN0KSB7IG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7IH0KIAorICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7CisKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgCkBAIC01Miw0ICs1Niw2IEBAIHByaXZhdGU6CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKKwogI2Vu
ZGlmIC8vIEpTQVBJV3JhcHBlck9iamVjdF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTTWFuYWdlZFJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTTWFuYWdlZFJlZmVyZW5jZV9oCisj
ZGVmaW5lIEpTTWFuYWdlZFJlZmVyZW5jZV9oCisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
QmFzZS5oPgorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKworQGNsYXNzIEpTVmlydHVhbE1h
Y2hpbmU7CisKK05TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKK0BpbnRlcmZhY2UgSlNNYW5h
Z2VkUmVmZXJlbmNlIDogTlNPYmplY3QKKworKyAodm9pZClhZGRNYW5hZ2VkUmVmZXJlbmNlOihp
ZClvYmplY3Qgd2l0aE93bmVyOihpZClvd25lciB0b1ZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxN
YWNoaW5lICopdmlydHVhbE1hY2hpbmU7CisrICh2b2lkKXJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6
KGlkKW9iamVjdCB3aXRoT3duZXI6KGlkKW93bmVyIGZyb21WaXJ0dWFsTWFjaGluZTooSlNWaXJ0
dWFsTWFjaGluZSAqKXZpcnR1YWxNYWNoaW5lOworCitAZW5kCisKKyNlbmRpZiAvLyBKU0NfT0JK
Q19BUElfRU5BQkxFRAorCisjZW5kaWYgLy8gSlNNYW5hZ2VkUmVmZXJlbmNlX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLm1tCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIkpTTWFuYWdlZFJlZmVyZW5jZS5oIgorI2ltcG9ydCAiSlNN
YW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9y
dCAiQVBJU2hpbXMuaCIKKyNpbXBvcnQgIkpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTTWFuYWdlZFZh
bHVlLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpT
V3JhcHBlck1hcC5oIgorI2ltcG9ydCAiU2xvdFZpc2l0b3IuaCIKKworQGltcGxlbWVudGF0aW9u
IEpTTWFuYWdlZFJlZmVyZW5jZQorCitzdGF0aWMgaWQgZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KGlk
IG9iamVjdCkKK3sKKyAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltKU01hbmFnZWRWYWx1
ZSBjbGFzc11dKQorICAgICAgICBvYmplY3QgPSBbc3RhdGljX2Nhc3Q8SlNNYW5hZ2VkVmFsdWUg
Kj4ob2JqZWN0KSB2YWx1ZV07CisgICAgCisgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpb
SlNWYWx1ZSBjbGFzc11dKSB7CisgICAgICAgIEpTVmFsdWUgKnZhbHVlID0gc3RhdGljX2Nhc3Q8
SlNWYWx1ZSAqPihvYmplY3QpOworICAgICAgICBvYmplY3QgPSB0cnlVbndyYXBPYmpjT2JqZWN0
KFt2YWx1ZS5jb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBbdmFsdWUgSlNWYWx1ZVJlZl0pOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gb2JqZWN0OworfQorCisrICh2b2lkKWFkZE1hbmFnZWRS
ZWZlcmVuY2U6KGlkKW9iamVjdCB3aXRoT3duZXI6KGlkKW93bmVyIHRvVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZQoreyAgICAKKyAgICBvYmplY3QgPSBn
ZXRJbnRlcm5hbE9iamNPYmplY3Qob2JqZWN0KTsKKyAgICBvd25lciA9IGdldEludGVybmFsT2Jq
Y09iamVjdChvd25lcik7CisgICAgCisgICAgaWYgKCFvYmplY3QgfHwgIW93bmVyIHx8ICF2aXJ0
dWFsTWFjaGluZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTQzo6QVBJRW50cnlTaGlt
IHNoaW0odG9KUyhnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZSh2aXJ0dWFsTWFjaGluZSkpKTsK
KyAgICAKKyAgICBOU01hcFRhYmxlICpleHRlcm5hbE9iamVjdEdyYXBoID0gW3ZpcnR1YWxNYWNo
aW5lIGV4dGVybmFsT2JqZWN0R3JhcGhdOworICAgIE5TTXV0YWJsZVNldCAqb3duZWRPYmplY3Rz
ID0gW2V4dGVybmFsT2JqZWN0R3JhcGggb2JqZWN0Rm9yS2V5Om93bmVyXTsKKyAgICBpZiAoIW93
bmVkT2JqZWN0cykgeworICAgICAgICBvd25lZE9iamVjdHMgPSBbW05TTXV0YWJsZVNldCBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eToxXTsKKyAgICAgICAgW2V4dGVybmFsT2JqZWN0R3JhcGggc2V0
T2JqZWN0Om93bmVkT2JqZWN0cyBmb3JLZXk6b3duZXJdOworICAgICAgICBbb3duZWRPYmplY3Rz
IHJlbGVhc2VdOworICAgIH0KKyAgICBbb3duZWRPYmplY3RzIGFkZE9iamVjdDpvYmplY3RdOwor
fQorCisrICh2b2lkKXJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6KGlkKW9iamVjdCB3aXRoT3duZXI6
KGlkKW93bmVyIGZyb21WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZpcnR1YWxN
YWNoaW5lCit7CisgICAgb2JqZWN0ID0gZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KG9iamVjdCk7Cisg
ICAgb3duZXIgPSBnZXRJbnRlcm5hbE9iamNPYmplY3Qob3duZXIpOworICAgIAorICAgIGlmICgh
b2JqZWN0IHx8ICFvd25lciB8fCAhdmlydHVhbE1hY2hpbmUpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBKU0M6OkFQSUVudHJ5U2hpbSBzaGltKHRvSlMoZ2V0R3JvdXBGcm9tVmlydHVhbE1h
Y2hpbmUodmlydHVhbE1hY2hpbmUpKSk7CisgICAgCisgICAgTlNNYXBUYWJsZSAqZXh0ZXJuYWxP
YmplY3RHcmFwaCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXTsKKyAgICBO
U011dGFibGVTZXQgKm93bmVkT2JqZWN0cyA9IFtleHRlcm5hbE9iamVjdEdyYXBoIG9iamVjdEZv
cktleTpvd25lcl07CisgICAgaWYgKCFvd25lZE9iamVjdHMpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBbb3duZWRPYmplY3RzIHJlbW92ZU9iamVjdDpvYmplY3RdOworfQorCit2b2lkIHNj
YW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQoreworICAgIEpTVmlydHVhbE1hY2hp
bmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRo
Q29udGV4dEdyb3VwUmVmOnRvUmVmKCZnbG9iYWxEYXRhKV07CisgICAgTlNNYXBUYWJsZSAqZXh0
ZXJuYWxPYmplY3RHcmFwaCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXTsK
KyAgICBOU011dGFibGVBcnJheSAqc3RhY2sgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5OjFdOworICAgIFtzdGFjayBhZGRPYmplY3Q6c3RhdGljX2Nhc3Q8aWQ+KHJv
b3QpXTsKKyAgICB3aGlsZSAoW3N0YWNrIGNvdW50XSA+IDApIHsKKyAgICAgICAgaWQgbmV4dFJv
b3QgPSBbc3RhY2sgbGFzdE9iamVjdF07CisgICAgICAgIFtzdGFjayByZW1vdmVMYXN0T2JqZWN0
XTsKKyAgICAgICAgaWYgKHZpc2l0b3IudGhyZWFkU2FmZUNvbnRhaW5zT3BhcXVlUm9vdChzdGF0
aWNfY2FzdDx2b2lkKj4obmV4dFJvb3QpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8dm9pZCo+KG5leHRSb290KSk7Cisg
ICAgICAgIAorICAgICAgICBOU1NldCAqb3duZWRPYmplY3RzID0gW2V4dGVybmFsT2JqZWN0R3Jh
cGggb2JqZWN0Rm9yS2V5Om5leHRSb290XTsKKyAgICAgICAgaWQgb3duZWRPYmplY3Q7CisgICAg
ICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtvd25lZE9iamVjdHMgb2JqZWN0RW51bWVy
YXRvcl07CisgICAgICAgIHdoaWxlICgob3duZWRPYmplY3QgPSBbZW51bWVyYXRvciBuZXh0T2Jq
ZWN0XSkpCisgICAgICAgICAgICBbc3RhY2sgYWRkT2JqZWN0Om93bmVkT2JqZWN0XTsKKyAgICB9
CisgICAgW3N0YWNrIHJlbGVhc2VdOworfQorCitAZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2VJ
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsX2gKKyNkZWZpbmUgSlNNYW5hZ2VkUmVm
ZXJlbmNlSW50ZXJuYWxfaAorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTR2xvYmFsRGF0YTsK
K2NsYXNzIFNsb3RWaXNpdG9yOworfQorICAgIAordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFw
aChKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKKwor
I2VuZGlmIC8vIEpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHJldmlzaW9uIDE0NjEwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCArIChKU1ZpcnR1YWxNYWNoaW5lICopd3JhcHBlckZv
ckpTQ29udGV4CiBAaW1wbGVtZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZSB7CiAgICAgSlNDb250
ZXh0R3JvdXBSZWYgbV9ncm91cDsKICAgICBOU01hcFRhYmxlICptX2NvbnRleHRDYWNoZTsKKyAg
ICBOU01hcFRhYmxlICptX2V4dGVybmFsT2JqZWN0R3JhcGg7CiB9CiAKIC0gKGlkKWluaXQKQEAg
LTEwMSwyMiArMTAyLDI4IEBAIC0gKGlkKWluaXRXaXRoQ29udGV4dEdyb3VwUmVmOihKU0NvbnRl
eHQKICAgICBOU1BvaW50ZXJGdW5jdGlvbnNPcHRpb25zIGtleU9wdGlvbnMgPSBOU1BvaW50ZXJG
dW5jdGlvbnNPcGFxdWVNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPcGFxdWVQZXJzb25hbGl0
eTsKICAgICBOU1BvaW50ZXJGdW5jdGlvbnNPcHRpb25zIHZhbHVlT3B0aW9ucyA9IE5TUG9pbnRl
ckZ1bmN0aW9uc1dlYWtNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0
eTsKICAgICBtX2NvbnRleHRDYWNoZSA9IFtbTlNNYXBUYWJsZSBhbGxvY10gaW5pdFdpdGhLZXlP
cHRpb25zOmtleU9wdGlvbnMgdmFsdWVPcHRpb25zOnZhbHVlT3B0aW9ucyBjYXBhY2l0eTowXTsK
KyAgICAKKyAgICBOU1BvaW50ZXJGdW5jdGlvbnNPcHRpb25zIHdlYWtJRE9wdGlvbnMgPSBOU1Bv
aW50ZXJGdW5jdGlvbnNXZWFrTWVtb3J5IHwgTlNQb2ludGVyRnVuY3Rpb25zT2JqZWN0UGVyc29u
YWxpdHk7CisgICAgTlNQb2ludGVyRnVuY3Rpb25zT3B0aW9ucyBzdHJvbmdJRE9wdGlvbnMgPSBO
U1BvaW50ZXJGdW5jdGlvbnNTdHJvbmdNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQ
ZXJzb25hbGl0eTsKKyAgICBtX2V4dGVybmFsT2JqZWN0R3JhcGggPSBbW05TTWFwVGFibGUgYWxs
b2NdIGluaXRXaXRoS2V5T3B0aW9uczp3ZWFrSURPcHRpb25zIHZhbHVlT3B0aW9uczpzdHJvbmdJ
RE9wdGlvbnMgY2FwYWNpdHk6MF07CiAgICAKICAgICBbSlNWTVdyYXBwZXJDYWNoZSBhZGRXcmFw
cGVyOnNlbGYgZm9ySlNDb250ZXh0R3JvdXBSZWY6Z3JvdXBdOwogIAogICAgIHJldHVybiBzZWxm
OwogfQogCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBKU1ZpcnR1YWxNYWNoaW5lKEludGVybmFs
KQotCiAtICh2b2lkKWRlYWxsb2MKIHsKICAgICBKU0NvbnRleHRHcm91cFJlbGVhc2UobV9ncm91
cCk7CisgICAgW21fY29udGV4dENhY2hlIHJlbGVhc2VdOworICAgIFttX2V4dGVybmFsT2JqZWN0
R3JhcGggcmVsZWFzZV07CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBKU1ZpcnR1YWxNYWNoaW5lKEludGVybmFsKQorCiBKU0NvbnRleHRHcm91cFJl
ZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFj
aGluZSkKIHsKICAgICByZXR1cm4gdmlydHVhbE1hY2hpbmUtPm1fZ3JvdXA7CkBAIC0xNDAsNiAr
MTQ3LDExIEBAIC0gKHZvaWQpYWRkQ29udGV4dDooSlNDb250ZXh0ICopd3JhcHBlciAKICAgICBO
U01hcEluc2VydChtX2NvbnRleHRDYWNoZSwgZ2xvYmFsQ29udGV4dCwgd3JhcHBlcik7CiB9CiAK
Ky0gKE5TTWFwVGFibGUgKilleHRlcm5hbE9iamVjdEdyYXBoCit7CisgICAgcmV0dXJuIG1fZXh0
ZXJuYWxPYmplY3RHcmFwaDsKK30KKwogQGVuZAogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24g
MTQ2MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50
ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCBKU0NvbnRleHRHcm91cFJl
ZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjCiAtIChKU0NvbnRleHQgKiljb250ZXh0Rm9yR2xvYmFs
Q29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CiAtICh2b2lkKWFk
ZENvbnRleHQ6KEpTQ29udGV4dCAqKXdyYXBwZXIgZm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9i
YWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CiAKKy0gKE5TTWFwVGFibGUgKilleHRlcm5hbE9i
amVjdEdyYXBoOworCiBAZW5kCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkocmV2aXNpb24gMTQ2MTAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsy
NCw3IEBACiAgKi8KIAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTTWFuYWdlZFJlZmVyZW5jZS5oPgogCiB2b2lkIEpT
U3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwogCkBA
IC0xNTMsNiArMTU0LDY2IEBAIC0gKHZvaWQpY2xpY2sKIH0KIEBlbmQKIAorQGNsYXNzIFRpbnlE
T01Ob2RlOworCitAcHJvdG9jb2wgVGlueURPTU5vZGUgPEpTRXhwb3J0PgorLSAodm9pZClhcHBl
bmRDaGlsZDooVGlueURPTU5vZGUgKiljaGlsZDsKKy0gKE5TVUludGVnZXIpbnVtYmVyT2ZDaGls
ZHJlbjsKKy0gKFRpbnlET01Ob2RlICopY2hpbGRBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4Owor
QGVuZAorCitAaW50ZXJmYWNlIFRpbnlET01Ob2RlIDogTlNPYmplY3Q8VGlueURPTU5vZGU+Cisr
IChKU1ZpcnR1YWxNYWNoaW5lICopc2hhcmVkVmlydHVhbE1hY2hpbmU7CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBUaW55RE9NTm9kZSB7CisgICAgTlNNdXRhYmxlQXJyYXkgKm1fY2hpbGRyZW47
Cit9CisKKysgKEpTVmlydHVhbE1hY2hpbmUgKilzaGFyZWRWaXJ0dWFsTWFjaGluZQoreworICAg
IHN0YXRpYyBKU1ZpcnR1YWxNYWNoaW5lICpzaGFyZWRJbnN0YW5jZSA9IFtbSlNWaXJ0dWFsTWFj
aGluZSBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOworfQorCistIChp
ZClpbml0Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBtX2NoaWxkcmVuID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTowXTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbbV9jaGlsZHJlbiBv
YmplY3RFbnVtZXJhdG9yXTsKKyAgICBpZCBuZXh0Q2hpbGQ7CisgICAgd2hpbGUgKChuZXh0Q2hp
bGQgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkpCisgICAgICAgIFtKU01hbmFnZWRSZWZlcmVu
Y2UgcmVtb3ZlTWFuYWdlZFJlZmVyZW5jZTpuZXh0Q2hpbGQgd2l0aE93bmVyOnNlbGYgZnJvbVZp
cnR1YWxNYWNoaW5lOltUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV1dOworfQorCist
ICh2b2lkKWFwcGVuZENoaWxkOihUaW55RE9NTm9kZSAqKWNoaWxkCit7CisgICAgW0pTTWFuYWdl
ZFJlZmVyZW5jZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOmNoaWxkIHdpdGhPd25lcjpzZWxmIHRvVmly
dHVhbE1hY2hpbmU6W1RpbnlET01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXV07CisgICAgW21f
Y2hpbGRyZW4gYWRkT2JqZWN0OmNoaWxkXTsKK30KKworLSAoTlNVSW50ZWdlciludW1iZXJPZkNo
aWxkcmVuCit7CisgICAgcmV0dXJuIFttX2NoaWxkcmVuIGNvdW50XTsKK30KKworLSAoVGlueURP
TU5vZGUgKiljaGlsZEF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBpZiAoaW5kZXgg
Pj0gW21fY2hpbGRyZW4gY291bnRdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBb
bV9jaGlsZHJlbiBvYmplY3RBdEluZGV4OmluZGV4XTsKK30KK0BlbmQKKwogc3RhdGljIHZvaWQg
Y2hlY2tSZXN1bHQoTlNTdHJpbmcgKmRlc2NyaXB0aW9uLCBib29sIHBhc3NlZCkKIHsKICAgICBO
U0xvZyhAIlRFU1Q6IFwiJUBcIjogJUAiLCBkZXNjcmlwdGlvbiwgcGFzc2VkID8gQCJQQVNTRUQi
IDogQCJGQUlMRUQiKTsKQEAgLTYxMyw2ICs2NzQsNTQgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQ
SSgpCiAgICAgICAgICAgICBjaGVja1Jlc3VsdChAIkV2ZW50IGhhbmRsZXIgb25jbGljayBkb2Vz
bid0IGZpcmUiLCAhW3Jlc3VsdCB0b0Jvb2xdKTsKICAgICAgICAgfQogICAgIH0KKworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2bSA9IFtUaW55RE9N
Tm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV07CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9
IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKKyAgICAgICAg
VGlueURPTU5vZGUgKnJvb3QgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAg
VGlueURPTU5vZGUgKmxhc3ROb2RlID0gcm9vdDsKKyAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICBUaW55RE9NTm9kZSAqbmV3Tm9kZSA9IFtb
VGlueURPTU5vZGUgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgW2xhc3ROb2RlIGFwcGVuZENo
aWxkOm5ld05vZGVdOworICAgICAgICAgICAgbGFzdE5vZGUgPSBuZXdOb2RlOworICAgICAgICB9
CisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAgICAgY29udGV4dFtAInJvb3Qi
XSA9IHJvb3Q7CisgICAgICAgICAgICBjb250ZXh0W0AiZ2V0TGFzdE5vZGVJbkNoYWluIl0gPSBe
KFRpbnlET01Ob2RlICpoZWFkKXsKKyAgICAgICAgICAgICAgICBUaW55RE9NTm9kZSAqbGFzdE5v
ZGUgPSBuaWw7CisgICAgICAgICAgICAgICAgd2hpbGUgKGhlYWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGFzdE5vZGUgPSBoZWFkOworICAgICAgICAgICAgICAgICAgICBoZWFkID0gW2xhc3RO
b2RlIGNoaWxkQXRJbmRleDowXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIGxhc3ROb2RlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiZ2V0TGFzdE5vZGVJbkNoYWluKHJvb3QpLm15Q3VzdG9tUHJvcGVydHkg
PSA0MjsiXTsKKyAgICAgICAgfQorCisgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVj
dEZvckRlYnVnZ2luZyhbY29udGV4dCBnbG9iYWxDb250ZXh0UmVmXSk7CisKKyAgICAgICAgSlNW
YWx1ZSAqbXlDdXN0b21Qcm9wZXJ0eSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiZ2V0TGFz
dE5vZGVJbkNoYWluKHJvb3QpLm15Q3VzdG9tUHJvcGVydHkiXTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJNeSBjdXN0b20gcHJvcGVydHkgPT0gNDIiLCBbbXlDdXN0b21Qcm9wZXJ0eSBpc051bWJl
cl0gJiYgW215Q3VzdG9tUHJvcGVydHkgdG9JbnQzMl0gPT0gNDIpOworICAgIH0KKworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2bSA9IFtUaW55RE9N
Tm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV07CisgICAgICAgIFRpbnlET01Ob2RlICpyb290ID0g
W1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdF07CisgICAgICAgIEpTTWFuYWdlZFZhbHVlICp3ZWFr
VmFsdWU7CisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6dm1d
OworICAgICAgICAgICAgY29udGV4dFtAInJvb3QiXSA9IHJvb3Q7CisgICAgICAgICAgICB3ZWFr
VmFsdWUgPSBbSlNNYW5hZ2VkVmFsdWUgbWFuYWdlZFZhbHVlV2l0aFZhbHVlOmNvbnRleHRbQCJy
b290Il1dOworICAgICAgICB9CisKKyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0
dWFsTWFjaGluZTp2bV07CisgICAgICAgICAgICBjb250ZXh0W0Aicm9vdCJdID0gcm9vdDsKKyAg
ICAgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhbY29udGV4
dCBnbG9iYWxDb250ZXh0UmVmXSk7CisgICAgICAgICAgICBjaGVja1Jlc3VsdChAIndlYWsgdmFs
dWUgPT0gbmlsIiwgIVt3ZWFrVmFsdWUgdmFsdWVdKTsKKyAgICAgICAgICAgIGNoZWNrUmVzdWx0
KEAicm9vdCBpcyBzdGlsbCBhbGl2ZSIsICFbY29udGV4dFtAInJvb3QiXSBpc1VuZGVmaW5lZF0p
OworICAgICAgICB9CisgICAgfQogfQogCiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE0NjEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04
NTEsNiArODUxLDkgQEAKIAkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVBQTNG
ODE0OUE4MzA4MDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkVBRDJGQzE0RjAyNDk4MDBBNEIxNTkgLyog
Q29waWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGMEYyRDEx
NkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjBGMkQwMTZCQUVFRTkwMDE4N0MxOSAv
KiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi87IH07CisJCUMyRjZGQ0EyMTZGNjc0MjUwMEMzRTFG
MiAvKiBKU01hbmFnZWRSZWZlcmVuY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMkY2RkNBMDE2RjY3NDI1MDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVm
ZXJlbmNlLm1tICovOyB9OworCQlDMkY2RkNBMzE2RjY3NDI1MDBDM0UxRjIgLyogSlNNYW5hZ2Vk
UmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMkY2RkNBMTE2RjY3NDI1MDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQlDMkY2RkNBNTE2RjY5
NjEyMDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjZGQ0E0MTZGNjk2MTIwMEMzRTFG
MiAvKiBKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oICovOyB9OwogCQlDMkZDOUJEMzE2NjQ0
REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDOUJEMjE2NjQ0REZCMDA4MTBEMzMgLyogQ29w
aWVkQmxvY2tJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZFMThB
MzE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEREY3QUJENDExRjYwRUQyMDAxMDhF
MzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNh
bGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE3NTMsNiArMTc1Niw5IEBACiAJCUMyRUFBM0Y4MTQ5QTgzMDgwMEZDRTExMiAvKiBDb3Bp
ZWRTcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3BpZWRTcGFjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkg
LyogQ29waWVkQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
cGllZEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkYwRjJEMDE2
QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMkY2RkNBMDE2RjY3NDI1MDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVm
ZXJlbmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNNYW5h
Z2VkUmVmZXJlbmNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkY2RkNBMTE2
RjY3NDI1MDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTTWFuYWdlZFJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMkY2RkNBNDE2RjY5NjEyMDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNl
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNYW5hZ2VkUmVm
ZXJlbmNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQzlCRDIx
NjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3BpZWRCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzJGRTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAv
KiBEYXRlQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGF0ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIy
NCw2ICsyMjMwLDkgQEAKIAkJCQlDMjVENzA5QTE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2Vk
VmFsdWUuaCAqLywKIAkJCQlDMkNGMzlCRjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVy
T2JqZWN0LmNwcCAqLywKIAkJCQlDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0LmggKi8sCisJCQkJQzJGNkZDQTAxNkY2NzQyNTAwQzNFMUYyIC8qIEpTTWFuYWdl
ZFJlZmVyZW5jZS5tbSAqLywKKwkJCQlDMkY2RkNBMTE2RjY3NDI1MDBDM0UxRjIgLyogSlNNYW5h
Z2VkUmVmZXJlbmNlLmggKi8sCisJCQkJQzJGNkZDQTQxNkY2OTYxMjAwQzNFMUYyIC8qIEpTTWFu
YWdlZFJlZmVyZW5jZUludGVybmFsLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IEFQSTsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yOTQzLDYgKzI5NTIsNyBAQAogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCUMyNUQ3MDlDMTZERTk5RjQw
MEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzJGNkZDQTMx
NkY2NzQyNTAwQzNFMUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBD
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2Fz
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDgzLDYgKzMwOTMsNyBAQAogCQkJCTBGRkZDOTYwMTRF
RjkwQkQwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjQyNzMxMTU4RUJENTQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA0NjA3MEUxRjQ5N0YwMDMyMzJDRiAvKiBFcnJvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQzJGNkZDQTUxNkY2OTYxMjAwQzNFMUYyIC8qIEpTTWFuYWdl
ZFJlZmVyZW5jZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkwRDBFMTgzOURC
MDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5
OEQwRTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDJFOTBGMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zODQwLDYgKzM4NTEsNyBAQAogCQkJCTBGRERCRkI1MTY2NkVFRDgwMEM1NUZFRiAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJE
QzUxMTUyMjhGRkQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkJEQzRBMTUyMjgwOUEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMyRjZGQ0EyMTZGNjc0MjUwMEMzRTFGMiAvKiBKU01h
bmFnZWRSZWZlcmVuY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RjE0RUY5MEJCMDBD
NzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOUQzMzcwMTY1REJCOTAwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzcxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCShyZXZpc2lvbiAxNDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOwogICAgIGJvb2wgY29udGFpbnNPcGFxdWVS
b290KHZvaWQqKTsKKyAgICBib29sIHRocmVhZFNhZmVDb250YWluc09wYXF1ZVJvb3Qodm9pZCop
OwogICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKIAogICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYg
c2hhcmVkRGF0YSgpIHsgcmV0dXJuIG1fc2hhcmVkOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMTQ2MTAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMSw2ICsxMjEsMTQgQEAgaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUgogI2VuZGlmCiB9CiAKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjp0aHJl
YWRTYWZlQ29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3QpCit7CisgICAgaWYgKG1fb3BhcXVl
Um9vdHMuY29udGFpbnMocm9vdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3NoYXJlZC5tX29wYXF1ZVJvb3RzTG9jayk7CisgICAgcmV0dXJuIG1fc2hh
cmVkLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7Cit9CisKIGlubGluZSBpbnQgU2xvdFZp
c2l0b3I6Om9wYXF1ZVJvb3RDb3VudCgpCiB7CiAgICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1v
ZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAkocmV2aXNpb24gMTQ2MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsOCArMjMzLDgg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fY2FsbGJh
Y2tPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFj
a09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAjaWYgSlNDX09CSkNf
QVBJX0VOQUJMRUQKICAgICBtX29iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7
Ci0jZW5kaWYKICAgICBtX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKTsKKyNlbmRpZgogCiAgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICAKQEAgLTUxOSw4ICs1MTksOCBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUpOwogI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fb2JqY0NhbGxiYWNrRnVuY3Rp
b25TdHJ1Y3R1cmUpOwotI2VuZGlmCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
b2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUpOworI2VuZGlmCiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fZGF0ZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fZXJyb3JTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNDYxMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsOCArMTQ0LDggQEAgcHJvdGVjdGVkOgogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmU7CiAjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamNDYWxsYmFja0Z1bmN0aW9u
U3RydWN0dXJlOwotI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmpjV3Jh
cHBlck9iamVjdFN0cnVjdHVyZTsKKyNlbmRpZgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fZGF0ZVN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX251bGxQcm90
b3R5cGVPYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9lcnJv
clN0cnVjdHVyZTsKQEAgLTMwNyw4ICszMDcsOCBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiBj
YWxsYmFja09iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCk7IH0KICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIFN0cnVjdHVy
ZSogb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamND
YWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlLmdldCgpOyB9Ci0jZW5kaWYKICAgICBTdHJ1Y3R1cmUq
IG9iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9vYmpjV3JhcHBl
ck9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorI2VuZGlmCiAgICAgU3RydWN0dXJlKiBkYXRlU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRlU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3Ry
dWN0dXJlKiBudWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9u
dWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBlcnJv
clN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JTdHJ1Y3R1cmUuZ2V0KCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193674</attachid>
            <date>2013-03-18 15:31:26 -0700</date>
            <delta_ts>2013-03-18 18:35:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112608-20130318152718.patch</filename>
            <type>text/plain</type>
            <size>37676</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ2MTIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDEzLTAzLTE4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgZ29vZCB3YXkgdG8gcHJlc2VydmUgY3Vz
dG9tIHByb3BlcnRpZXMgb24gSlMgd3JhcHBlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgd2UganVzdCB1c2UgYSB3ZWFrIG1hcCwg
d2hpY2ggbWVhbnMgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gY2FuIGNhdXNlIGEgd3JhcHBlciB0
byAKKyAgICAgICAgZGlzYXBwZWFyIGlmIGl0IGlzbid0IGRpcmVjdGx5IHJlZmVyZW5jZWQgZnJv
bSBKYXZhU2NyaXB0LgorCisgICAgICAgIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2Fm
ZSB3YXkgKHdpdGggcmVzcGVjdCB0byBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIGNvbmN1cnJlbmN5
KSBpcyB0byBoYXZlIAorICAgICAgICBjbGllbnRzIGFkZCBhbmQgcmVtb3ZlIHRoZWlyIGV4dGVy
bmFsIHJlZmVyZW5jZXMgYWxvbmcgd2l0aCB0aGVpciBvd25lcnMuIEVmZmVjdGl2ZWx5LCB0aGUg
Y2xpZW50IGlzIAorICAgICAgICByZWNvcmRpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXh0ZXJu
YWwgb2JqZWN0IGdyYXBoIHNvIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGNhbiBtYWtlIHN1
cmUgdG8gCisgICAgICAgIG1hcmsgYW55IHdyYXBwZXJzIHRoYXQgYXJlIHJlYWNoYWJsZSB0aHJv
dWdoIGVpdGhlciB0aGUgSlMgb2JqZWN0IGdyYXBoIG9mIHRoZSBleHRlcm5hbCBPYmotQyBvYmpl
Y3QgCisgICAgICAgIGdyYXBoLiBCeSBrZWVwaW5nIHRoZXNlIHdyYXBwZXJzIGFsaXZlLCB0aGlz
IGhhcyB0aGUgZWZmZWN0IHRoYXQgY3VzdG9tIHByb3BlcnRpZXMgb24gdGhlc2Ugd3JhcHBlcnMg
CisgICAgICAgIHdpbGwgYWxzbyByZW1haW4gYWxpdmUuCisKKyAgICAgICAgVGhlIHJ1bGUgZm9y
IGlmIGFuIG9iamVjdCBuZWVkcyB0byBiZSB0cmFja2VkIGJ5IHRoZSBydW50aW1lIChhbmQgdGhl
cmVmb3JlIHdoZXRoZXIgdGhlIGNsaWVudCBzaG91bGQgcmVwb3J0IGl0KSBpcyBhcyBmb2xsb3dz
OgorICAgICAgICBGb3IgYSBwYXJ0aWN1bGFyIG9iamVjdCwgaXRzIHJlZmVyZW5jZXMgdG8gaXRz
IGNoaWxkcmVuIHNob3VsZCBiZSBhZGRlZCBpZjoKKyAgICAgICAgMS4gVGhlIGNoaWxkIGlzIHJl
ZmVyZW5jZWQgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICAyLiBUaGUgY2hpbGQgY29udGFpbnMg
cmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGZvciB3aGljaCAoMSkgb3IgKDIpIGFyZSB0cnVl
LgorCisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5jcHA6CisgICAgICAgIChKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcik6IE5ldyBjbGFzcyB0aGF0IGFjdHMgYXMgdGhlIFdl
YWtIYW5kbGVPd25lciBmb3IgSlNBUElXcmFwcGVyT2JqZWN0cy4KKyAgICAgICAgKGpzQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKToKKyAgICAgICAgKEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hbGl6ZSk6IERlYWxsb2NhdGVzIHRoZSBXZWFrSW1wbCB0aGF0IHdhcyBhbGxv
Y2F0ZWQgaW4gSlNBUElXcmFwcGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbi4KKyAgICAgICAgKEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
IEEgd3JhcHBlciBvYmplY3QgaXMga2VwdCBhbGl2ZSBvbmx5IGlmIGl0cyBKU0dsb2JhbE9iamVj
dAorICAgICAgICBpcyBtYXJrZWQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9i
amVjdCB3YXMgYWRkZWQgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgIChKU0M6
OkpTQVBJV3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOiBBbGxvY2F0ZXMgYSBuZXcgV2Vh
a0ltcGwgZm9yIEpTQVBJV3JhcHBlck9iamVjdHMuCisgICAgICAgIChKU0M6OkpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbik6IFdlIG5vdyBjYWxsIG91dCB0byBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaCwgd2hpY2ggaGFuZGxlcyBhZGRpbmcgYWxsIE9iamVjdGl2ZS1DCisgICAgICAg
IG9iamVjdHMgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgICogQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5oOgorICAgICAgICAoSlNBUElXcmFwcGVyT2JqZWN0KToKKyAgICAgICAg
KiBBUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9KU01hbmFn
ZWRSZWZlcmVuY2UubW06IEFkZGVkLgorICAgICAgICAoZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KTog
SGVscGVyIGZ1bmNpdG9uIHRvIGdldCB0aGUgT2JqZWN0aXZlLUMgb2JqZWN0IG91dCBvZiBKU01h
bmFnZWRWYWx1ZXMgb3IgSlNWYWx1ZXMgaWYgdGhlcmUgaXMgb25lLgorICAgICAgICAoK1tKU01h
bmFnZWRSZWZlcmVuY2UgYWRkTWFuYWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6dG9WaXJ0dWFsTWFj
aGluZTpdKTogQWRkcyB0aGUgT2JqZWN0aXZlLUMgb2JqZWN0IHRvIHRoZSBzZXQgb2Ygb2JqZWN0
cyAKKyAgICAgICAgb3duZWQgYnkgdGhlIG93bmVyIG9iamVjdCBpbiB0aGF0IHBhcnRpY3VsYXIg
dmlydHVhbCBtYWNoaW5lLgorICAgICAgICAoK1tKU01hbmFnZWRSZWZlcmVuY2UgcmVtb3ZlTWFu
YWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6ZnJvbVZpcnR1YWxNYWNoaW5lOl0pOiBSZW1vdmVzIHRo
ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuCisgICAgICAgIChzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaCk6IERvZXMgYSBkZXB0aC1maXJzdCBzZWFyY2ggb2YgdGhlIGV4dGVy
bmFsIG9iamVjdCBncmFwaCBpbiBhIHBhcnRpY3VsYXIgdmlydHVhbCBtYWNoaW5lIHN0YXJ0aW5n
IGF0CisgICAgICAgIHRoZSBzcGVjaWZpZWQgcm9vdC4gRWFjaCBuZXcgb2JqZWN0IGl0IGVuY291
bnRlcnMgaXQgYWRkcyB0byB0aGUgc2V0IG9mIG9wYXF1ZSByb290cy4gVGhlc2Ugb3BhcXVlIHJv
b3RzIHdpbGwga2VlcCB0aGVpciAKKyAgICAgICAgY29ycmVzcG9uZGluZyB3cmFwcGVyIG9iamVj
dHMgYWxpdmUgaWYgdGhleSBoYXZlIHRoZW0uIAorICAgICAgICAqIEFQSS9KU01hbmFnZWRSZWZl
cmVuY2VJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bTogQWRkZWQgdGhlIHBlci1KU1ZpcnR1YWxNYWNoaW5lIG1hcCBiZXR3ZWVuIG9iamVjdHMgYW5k
IHRoZSBvYmplY3RzIHRoZXkgb3duLCB3aGljaCBpcyBtb3JlIGZvcm1hbGx5CisgICAgICAgIGtu
b3duIGFzIHRoYXQgdmlydHVhbCBtYWNoaW5lJ3MgZXh0ZXJuYWwgb2JqZWN0IGdyYXBoLgorICAg
ICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGluaXRXaXRoQ29udGV4dEdyb3VwUmVmOl0pOgorICAg
ICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNWaXJ0dWFs
TWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXSk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOiBBZGRlZCB0
d28gbmV3IHRlc3RzIHVzaW5nIHRoZSBUaW55RE9NTm9kZSBjbGFzcy4gVGhlIGZpcnN0IHRlc3Rz
IHRoYXQgYSBjdXN0b20gcHJvcGVydHkgYWRkZWQgdG8gYSB3cmFwcGVyIAorICAgICAgICBkb2Vz
bid0IHZhbmlzaCBhZnRlciBHQywgZXZlbiB0aG91Z2ggdGhhdCB3cmFwcGVyIGlzbid0IGRpcmVj
dGx5IGFjY2Vzc2libGUgdG8gdGhlIEpTIGdhcmJhZ2UgY29sbGVjdG9yIGJ1dCBpcyBhY2Nlc3Np
YmxlIHRocm91Z2ggCisgICAgICAgIHRoZSBleHRlcm5hbCBPYmplY3RpdmUtQyBvYmplY3QgZ3Jh
cGguIFRoZSBzZWNvbmQgdGVzdCBtYWtlcyBzdXJlIHRoYXQgcmV1c2luZyB0aGUgc2FtZSBPYmpl
Y3RpdmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgSlNDb250ZXh0cyAKKyAgICAgICAgZG9lc24ndCBj
YXVzZSB0aG9zZSBKU0NvbnRleHRzIHRvIGxlYWsgdGhlaXIgSlNHbG9iYWxPYmplY3RzLgorICAg
ICAgICAoK1tUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV0pOgorICAgICAgICAoLVtU
aW55RE9NTm9kZSBpbml0XSk6CisgICAgICAgICgtW1RpbnlET01Ob2RlIGRlYWxsb2NdKToKKyAg
ICAgICAgKC1bVGlueURPTU5vZGUgYXBwZW5kQ2hpbGQ6XSk6CisgICAgICAgICgtW1RpbnlET01O
b2RlIG51bWJlck9mQ2hpbGRyZW5dKToKKyAgICAgICAgKC1bVGlueURPTU5vZGUgY2hpbGRBdElu
ZGV4Ol0pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoU2xvdFZpc2l0b3Ip
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjp0aHJlYWRTYWZlQ29udGFpbnNPcGFxdWVSb290KTogQWRkZWQgYSBuZXcgbWV0
aG9kIHRvIFNsb3RWaXNpdG9yIHRvIGFsbG93IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoIHRvIGhh
dmUgYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgdmlldyBvZiBvcGFxdWUgcm9vdHMgZHVyaW5nIHBh
cmFsbGVsIG1hcmtpbmcuIFRoZSBzZXQgb2Ygb3BhcXVlIHJvb3RzIGF2YWlsYWJsZSB0byBhbnkg
b25lIFNsb3RWaXNpdG9yIGlzbid0IGd1YXJhbnRlZWQKKyAgICAgICAgdG8gYmUgMTAwJSBjb3Jy
ZWN0LCBidXQgdGhhdCBqdXN0IHJlc3VsdHMgaW4gYSBzbWFsbCBkdXBsaWNhdGlvbiBvZiB3b3Jr
IGluIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoLgorCiAyMDEzLTAzLTE4ICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFBvdGVudGlhbGx5IHVuc2FmZSByZWdp
c3RlciBhbGxvY2F0aW9ucyBpbiBERkcgY29kZSBnZW5lcmF0aW9uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAx
NDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw0MCBAQAogI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CisKK2NsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCopOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJik7Cit9OworCitzdGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIqIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyLCBqc1dyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lciwgKCkpOworICAgIHJldHVybiAmanNXcmFwcGVyT2JqZWN0SGFuZGxlT3du
ZXI7Cit9CisKK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKikKK3sKKyAgICBKU0M6OldlYWtT
ZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgpKSk7
Cit9CisKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVjdCog
d3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFu
ZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0IHdo
ZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdoZXJl
IHVzaW5nCisgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRpcGxlIGds
b2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUuCisgICAg
aWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gSlNDOjpIZWFwOjppc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBw
ZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7Cit9CisKIG5hbWVzcGFjZSBKU0MgewogICAgIAog
dGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVy
T2JqZWN0Pjo6c19pbmZvID0geyAiRW51bWVyYWJsZUNhbGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwpAQCAt
NTEsNiArODEsMTIgQEAgSlNBUElXcmFwcGVyT2JqZWN0OjpKU0FQSVdyYXBwZXJPYmplY3QoSgog
ewogfQogCit2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgIFdlYWtTZXQ6OmFsbG9jYXRlKHRoaXMsIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyKCksIDApOyAvLyBCYWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6
ZmluYWxpemUuCit9CisKIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FQSVdyYXBw
ZXJPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0FQSVdyYXBwZXJPYmplY3QqPihj
ZWxsKTsKQEAgLTU4LDcgKzk0LDkgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKICAgICBp
ZiAodGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKQotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QodGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICAgICAgc2NhbkV4dGVybmFs
T2JqZWN0R3JhcGgoY2VsbC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCksIHZpc2l0b3IsIHRoaXNPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAkocmV2aXNpb24g
MTQ2MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogCisjaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKKwogbmFtZXNwYWNlIEpTQyB7CiAgICAgCiBjbGFzcyBKU0FQ
SVdyYXBwZXJPYmplY3QgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewpAQCAtNDEsNiAr
NDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCogd3JhcHBlZE9iamVjdCgpIHsgcmV0dXJuIG1fd3Jh
cHBlZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdCh2b2lkKiB3cmFwcGVkT2Jq
ZWN0KSB7IG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7IH0KIAorICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7CisKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgCkBAIC01Miw0ICs1Niw2IEBAIHByaXZhdGU6CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKKwogI2Vu
ZGlmIC8vIEpTQVBJV3JhcHBlck9iamVjdF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTTWFuYWdlZFJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTTWFuYWdlZFJlZmVyZW5jZV9oCisj
ZGVmaW5lIEpTTWFuYWdlZFJlZmVyZW5jZV9oCisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
QmFzZS5oPgorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKworQGNsYXNzIEpTVmlydHVhbE1h
Y2hpbmU7CisKK05TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKK0BpbnRlcmZhY2UgSlNNYW5h
Z2VkUmVmZXJlbmNlIDogTlNPYmplY3QKKworKyAodm9pZClhZGRNYW5hZ2VkUmVmZXJlbmNlOihp
ZClvYmplY3Qgd2l0aE93bmVyOihpZClvd25lciB0b1ZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxN
YWNoaW5lICopdmlydHVhbE1hY2hpbmU7CisrICh2b2lkKXJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6
KGlkKW9iamVjdCB3aXRoT3duZXI6KGlkKW93bmVyIGZyb21WaXJ0dWFsTWFjaGluZTooSlNWaXJ0
dWFsTWFjaGluZSAqKXZpcnR1YWxNYWNoaW5lOworCitAZW5kCisKKyNlbmRpZiAvLyBKU0NfT0JK
Q19BUElfRU5BQkxFRAorCisjZW5kaWYgLy8gSlNNYW5hZ2VkUmVmZXJlbmNlX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLm1tCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIkpTTWFuYWdlZFJlZmVyZW5jZS5oIgorI2ltcG9ydCAiSlNN
YW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9y
dCAiQVBJU2hpbXMuaCIKKyNpbXBvcnQgIkpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTTWFuYWdlZFZh
bHVlLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpT
V3JhcHBlck1hcC5oIgorI2ltcG9ydCAiU2xvdFZpc2l0b3IuaCIKKworQGltcGxlbWVudGF0aW9u
IEpTTWFuYWdlZFJlZmVyZW5jZQorCitzdGF0aWMgaWQgZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KGlk
IG9iamVjdCkKK3sKKyAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltKU01hbmFnZWRWYWx1
ZSBjbGFzc11dKQorICAgICAgICBvYmplY3QgPSBbc3RhdGljX2Nhc3Q8SlNNYW5hZ2VkVmFsdWUg
Kj4ob2JqZWN0KSB2YWx1ZV07CisgICAgCisgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpb
SlNWYWx1ZSBjbGFzc11dKSB7CisgICAgICAgIEpTVmFsdWUgKnZhbHVlID0gc3RhdGljX2Nhc3Q8
SlNWYWx1ZSAqPihvYmplY3QpOworICAgICAgICBvYmplY3QgPSB0cnlVbndyYXBPYmpjT2JqZWN0
KFt2YWx1ZS5jb250ZXh0IGdsb2JhbENvbnRleHRSZWZdLCBbdmFsdWUgSlNWYWx1ZVJlZl0pOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gb2JqZWN0OworfQorCisrICh2b2lkKWFkZE1hbmFnZWRS
ZWZlcmVuY2U6KGlkKW9iamVjdCB3aXRoT3duZXI6KGlkKW93bmVyIHRvVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZQoreyAgICAKKyAgICBvYmplY3QgPSBn
ZXRJbnRlcm5hbE9iamNPYmplY3Qob2JqZWN0KTsKKyAgICBvd25lciA9IGdldEludGVybmFsT2Jq
Y09iamVjdChvd25lcik7CisgICAgCisgICAgaWYgKCFvYmplY3QgfHwgIW93bmVyIHx8ICF2aXJ0
dWFsTWFjaGluZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTQzo6QVBJRW50cnlTaGlt
IHNoaW0odG9KUyhnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZSh2aXJ0dWFsTWFjaGluZSkpKTsK
KyAgICAKKyAgICBOU01hcFRhYmxlICpleHRlcm5hbE9iamVjdEdyYXBoID0gW3ZpcnR1YWxNYWNo
aW5lIGV4dGVybmFsT2JqZWN0R3JhcGhdOworICAgIE5TTXV0YWJsZVNldCAqb3duZWRPYmplY3Rz
ID0gW2V4dGVybmFsT2JqZWN0R3JhcGggb2JqZWN0Rm9yS2V5Om93bmVyXTsKKyAgICBpZiAoIW93
bmVkT2JqZWN0cykgeworICAgICAgICBvd25lZE9iamVjdHMgPSBbW05TTXV0YWJsZVNldCBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eToxXTsKKyAgICAgICAgW2V4dGVybmFsT2JqZWN0R3JhcGggc2V0
T2JqZWN0Om93bmVkT2JqZWN0cyBmb3JLZXk6b3duZXJdOworICAgICAgICBbb3duZWRPYmplY3Rz
IHJlbGVhc2VdOworICAgIH0KKyAgICBbb3duZWRPYmplY3RzIGFkZE9iamVjdDpvYmplY3RdOwor
fQorCisrICh2b2lkKXJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6KGlkKW9iamVjdCB3aXRoT3duZXI6
KGlkKW93bmVyIGZyb21WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZpcnR1YWxN
YWNoaW5lCit7CisgICAgb2JqZWN0ID0gZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KG9iamVjdCk7Cisg
ICAgb3duZXIgPSBnZXRJbnRlcm5hbE9iamNPYmplY3Qob3duZXIpOworICAgIAorICAgIGlmICgh
b2JqZWN0IHx8ICFvd25lciB8fCAhdmlydHVhbE1hY2hpbmUpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBKU0M6OkFQSUVudHJ5U2hpbSBzaGltKHRvSlMoZ2V0R3JvdXBGcm9tVmlydHVhbE1h
Y2hpbmUodmlydHVhbE1hY2hpbmUpKSk7CisgICAgCisgICAgTlNNYXBUYWJsZSAqZXh0ZXJuYWxP
YmplY3RHcmFwaCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXTsKKyAgICBO
U011dGFibGVTZXQgKm93bmVkT2JqZWN0cyA9IFtleHRlcm5hbE9iamVjdEdyYXBoIG9iamVjdEZv
cktleTpvd25lcl07CisgICAgaWYgKCFvd25lZE9iamVjdHMpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBbb3duZWRPYmplY3RzIHJlbW92ZU9iamVjdDpvYmplY3RdOworfQorCit2b2lkIHNj
YW5FeHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yLCB2b2lkKiByb290KQoreworICAgIEpTVmlydHVhbE1hY2hp
bmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRo
Q29udGV4dEdyb3VwUmVmOnRvUmVmKCZnbG9iYWxEYXRhKV07CisgICAgTlNNYXBUYWJsZSAqZXh0
ZXJuYWxPYmplY3RHcmFwaCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXTsK
KyAgICBOU011dGFibGVBcnJheSAqc3RhY2sgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5OjFdOworICAgIFtzdGFjayBhZGRPYmplY3Q6c3RhdGljX2Nhc3Q8aWQ+KHJv
b3QpXTsKKyAgICB3aGlsZSAoW3N0YWNrIGNvdW50XSA+IDApIHsKKyAgICAgICAgaWQgbmV4dFJv
b3QgPSBbc3RhY2sgbGFzdE9iamVjdF07CisgICAgICAgIFtzdGFjayByZW1vdmVMYXN0T2JqZWN0
XTsKKyAgICAgICAgaWYgKHZpc2l0b3IudGhyZWFkU2FmZUNvbnRhaW5zT3BhcXVlUm9vdChzdGF0
aWNfY2FzdDx2b2lkKj4obmV4dFJvb3QpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8dm9pZCo+KG5leHRSb290KSk7Cisg
ICAgICAgIAorICAgICAgICBOU1NldCAqb3duZWRPYmplY3RzID0gW2V4dGVybmFsT2JqZWN0R3Jh
cGggb2JqZWN0Rm9yS2V5Om5leHRSb290XTsKKyAgICAgICAgaWQgb3duZWRPYmplY3Q7CisgICAg
ICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtvd25lZE9iamVjdHMgb2JqZWN0RW51bWVy
YXRvcl07CisgICAgICAgIHdoaWxlICgob3duZWRPYmplY3QgPSBbZW51bWVyYXRvciBuZXh0T2Jq
ZWN0XSkpCisgICAgICAgICAgICBbc3RhY2sgYWRkT2JqZWN0Om93bmVkT2JqZWN0XTsKKyAgICB9
CisgICAgW3N0YWNrIHJlbGVhc2VdOworfQorCitAZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2VJ
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsX2gKKyNkZWZpbmUgSlNNYW5hZ2VkUmVm
ZXJlbmNlSW50ZXJuYWxfaAorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTR2xvYmFsRGF0YTsK
K2NsYXNzIFNsb3RWaXNpdG9yOworfQorICAgIAordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFw
aChKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKKwor
I2VuZGlmIC8vIEpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAxNDYxMDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQ2LDggKzM0NiwxMCBAQCB2b2lkKiBKU09iamVjdEdldFByaXZhdGUoSlNPYmplY3RSZWYgb2Jq
CiAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4q
Pihqc09iamVjdCktPmdldFByaXZhdGUoKTsKICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZK
U0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6c19pbmZvKSkKICAgICAgICAg
cmV0dXJuIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpz
T2JqZWN0KS0+Z2V0UHJpdmF0ZSgpOworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgaWYg
KGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
OjpzX2luZm8pKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyT2JqZWN0Pio+KGpzT2JqZWN0KS0+Z2V0UHJpdmF0ZSgpOworI2VuZGlmCiAgICAgCiAg
ICAgcmV0dXJuIDA7CiB9CkBAIC0zNjQsMTAgKzM2NiwxMiBAQCBib29sIEpTT2JqZWN0U2V0UHJp
dmF0ZShKU09iamVjdFJlZiBvYmplCiAgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZShkYXRhKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgaWYg
KGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
OjpzX2luZm8pKSB7CiAgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBl
ck9iamVjdD4qPihqc09iamVjdCktPnNldFByaXZhdGUoZGF0YSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KKyNlbmRpZgogICAgICAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0z
ODMsOCArMzg3LDEwIEBAIEpTVmFsdWVSZWYgSlNPYmplY3RHZXRQcml2YXRlUHJvcGVydHkoSlMK
ICAgICAgICAgcmVzdWx0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+
Kj4oanNPYmplY3QpLT5nZXRQcml2YXRlUHJvcGVydHkobmFtZSk7CiAgICAgZWxzZSBpZiAoanNP
YmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6
c19pbmZvKSkKICAgICAgICAgcmVzdWx0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0
cnVjdGlibGVPYmplY3Q+Kj4oanNPYmplY3QpLT5nZXRQcml2YXRlUHJvcGVydHkobmFtZSk7Cisj
aWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBlbHNlIGlmIChqc09iamVjdC0+aW5oZXJpdHMo
JkpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pjo6c19pbmZvKSkKICAgICAgICAg
cmVzdWx0ID0ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pio+KGpz
T2JqZWN0KS0+Z2V0UHJpdmF0ZVByb3BlcnR5KG5hbWUpOworI2VuZGlmCiAgICAgcmV0dXJuIHRv
UmVmKGV4ZWMsIHJlc3VsdCk7CiB9CiAKQEAgLTQwMywxMCArNDA5LDEyIEBAIGJvb2wgSlNPYmpl
Y3RTZXRQcml2YXRlUHJvcGVydHkoSlNDb250ZXgKICAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tP
YmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRlUHJvcGVy
dHkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuYW1lLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgaWYgKGpzT2JqZWN0LT5p
bmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8pKSB7
CiAgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4qPihq
c09iamVjdCktPnNldFByaXZhdGVQcm9wZXJ0eShleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIGpz
VmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisjZW5kaWYKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTQyNCwxMCArNDMyLDEyIEBAIGJvb2wgSlNPYmplY3REZWxldGVQcml2
YXRlUHJvcGVydHkoSlNDb24KICAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0
cnVjdGlibGVPYmplY3Q+Kj4oanNPYmplY3QpLT5kZWxldGVQcml2YXRlUHJvcGVydHkobmFtZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAog
ICAgIGlmIChqc09iamVjdC0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVy
T2JqZWN0Pjo6c19pbmZvKSkgewogICAgICAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0FQ
SVdyYXBwZXJPYmplY3Q+Kj4oanNPYmplY3QpLT5kZWxldGVQcml2YXRlUHJvcGVydHkobmFtZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyNlbmRpZgogICAgIHJldHVybiBmYWxzZTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZp
c2lvbiAxNDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDksOCArMTQ5LDEwIEBAIGJvb2wgSlNWYWx1ZUlzT2JqZWN0
T2ZDbGFzcyhKU0NvbnRleHRSZWYKICAgICAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNDYWxsYmFj
a09iamVjdDxKU0dsb2JhbE9iamVjdD4qPihvKS0+aW5oZXJpdHMoanNDbGFzcyk7CiAgICAgICAg
IGlmIChvLT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD46
OnNfaW5mbykpCiAgICAgICAgICAgICByZXR1cm4ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNE
ZXN0cnVjdGlibGVPYmplY3Q+Kj4obyktPmluaGVyaXRzKGpzQ2xhc3MpOworI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECiAgICAgICAgIGlmIChvLT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxK
U0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8pKQogICAgICAgICAgICAgcmV0dXJuIGpzQ2FzdDxK
U0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD4qPihvKS0+aW5oZXJpdHMoanNDbGFz
cyk7CisjZW5kaWYKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMTQ2MTAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAICsgKEpTVmlydHVhbE1hY2hpbmUgKil3cmFwcGVy
Rm9ySlNDb250ZXgKIEBpbXBsZW1lbnRhdGlvbiBKU1ZpcnR1YWxNYWNoaW5lIHsKICAgICBKU0Nv
bnRleHRHcm91cFJlZiBtX2dyb3VwOwogICAgIE5TTWFwVGFibGUgKm1fY29udGV4dENhY2hlOwor
ICAgIE5TTWFwVGFibGUgKm1fZXh0ZXJuYWxPYmplY3RHcmFwaDsKIH0KIAogLSAoaWQpaW5pdApA
QCAtMTAxLDIyICsxMDIsMjggQEAgLSAoaWQpaW5pdFdpdGhDb250ZXh0R3JvdXBSZWY6KEpTQ29u
dGV4dAogICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMga2V5T3B0aW9ucyA9IE5TUG9pbnRl
ckZ1bmN0aW9uc09wYXF1ZU1lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09wYXF1ZVBlcnNvbmFs
aXR5OwogICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgdmFsdWVPcHRpb25zID0gTlNQb2lu
dGVyRnVuY3Rpb25zV2Vha01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVjdFBlcnNvbmFs
aXR5OwogICAgIG1fY29udGV4dENhY2hlID0gW1tOU01hcFRhYmxlIGFsbG9jXSBpbml0V2l0aEtl
eU9wdGlvbnM6a2V5T3B0aW9ucyB2YWx1ZU9wdGlvbnM6dmFsdWVPcHRpb25zIGNhcGFjaXR5OjBd
OworICAgIAorICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5T
UG9pbnRlckZ1bmN0aW9uc1dlYWtNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJz
b25hbGl0eTsKKyAgICBOU1BvaW50ZXJGdW5jdGlvbnNPcHRpb25zIHN0cm9uZ0lET3B0aW9ucyA9
IE5TUG9pbnRlckZ1bmN0aW9uc1N0cm9uZ01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVj
dFBlcnNvbmFsaXR5OworICAgIG1fZXh0ZXJuYWxPYmplY3RHcmFwaCA9IFtbTlNNYXBUYWJsZSBh
bGxvY10gaW5pdFdpdGhLZXlPcHRpb25zOndlYWtJRE9wdGlvbnMgdmFsdWVPcHRpb25zOnN0cm9u
Z0lET3B0aW9ucyBjYXBhY2l0eTowXTsKICAgIAogICAgIFtKU1ZNV3JhcHBlckNhY2hlIGFkZFdy
YXBwZXI6c2VsZiBmb3JKU0NvbnRleHRHcm91cFJlZjpncm91cF07CiAgCiAgICAgcmV0dXJuIHNl
bGY7CiB9CiAKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIEpTVmlydHVhbE1hY2hpbmUoSW50ZXJu
YWwpCi0KIC0gKHZvaWQpZGVhbGxvYwogewogICAgIEpTQ29udGV4dEdyb3VwUmVsZWFzZShtX2dy
b3VwKTsKKyAgICBbbV9jb250ZXh0Q2FjaGUgcmVsZWFzZV07CisgICAgW21fZXh0ZXJuYWxPYmpl
Y3RHcmFwaCByZWxlYXNlXTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIEpTVmlydHVhbE1hY2hpbmUoSW50ZXJuYWwpCisKIEpTQ29udGV4dEdyb3Vw
UmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxN
YWNoaW5lKQogewogICAgIHJldHVybiB2aXJ0dWFsTWFjaGluZS0+bV9ncm91cDsKQEAgLTE0MCw2
ICsxNDcsMTEgQEAgLSAodm9pZClhZGRDb250ZXh0OihKU0NvbnRleHQgKil3cmFwcGVyIAogICAg
IE5TTWFwSW5zZXJ0KG1fY29udGV4dENhY2hlLCBnbG9iYWxDb250ZXh0LCB3cmFwcGVyKTsKIH0K
IAorLSAoTlNNYXBUYWJsZSAqKWV4dGVybmFsT2JqZWN0R3JhcGgKK3sKKyAgICByZXR1cm4gbV9l
eHRlcm5hbE9iamVjdEdyYXBoOworfQorCiBAZW5kCiAKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lv
biAxNDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJ
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBAIEpTQ29udGV4dEdyb3Vw
UmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWMKIC0gKEpTQ29udGV4dCAqKWNvbnRleHRGb3JHbG9i
YWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKIC0gKHZvaWQp
YWRkQ29udGV4dDooSlNDb250ZXh0ICopd3JhcHBlciBmb3JHbG9iYWxDb250ZXh0UmVmOihKU0ds
b2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKIAorLSAoTlNNYXBUYWJsZSAqKWV4dGVybmFs
T2JqZWN0R3JhcGg7CisKIEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAxNDYxMDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDcgQEAKICAqLwogCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNNYW5hZ2VkUmVmZXJlbmNlLmg+CiAKIHZvaWQg
SlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CiAK
QEAgLTE1Myw2ICsxNTQsNjYgQEAgLSAodm9pZCljbGljawogfQogQGVuZAogCitAY2xhc3MgVGlu
eURPTU5vZGU7CisKK0Bwcm90b2NvbCBUaW55RE9NTm9kZSA8SlNFeHBvcnQ+CistICh2b2lkKWFw
cGVuZENoaWxkOihUaW55RE9NTm9kZSAqKWNoaWxkOworLSAoTlNVSW50ZWdlciludW1iZXJPZkNo
aWxkcmVuOworLSAoVGlueURPTU5vZGUgKiljaGlsZEF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXg7
CitAZW5kCisKK0BpbnRlcmZhY2UgVGlueURPTU5vZGUgOiBOU09iamVjdDxUaW55RE9NTm9kZT4K
KysgKEpTVmlydHVhbE1hY2hpbmUgKilzaGFyZWRWaXJ0dWFsTWFjaGluZTsKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRpbnlET01Ob2RlIHsKKyAgICBOU011dGFibGVBcnJheSAqbV9jaGlsZHJl
bjsKK30KKworKyAoSlNWaXJ0dWFsTWFjaGluZSAqKXNoYXJlZFZpcnR1YWxNYWNoaW5lCit7Cisg
ICAgc3RhdGljIEpTVmlydHVhbE1hY2hpbmUgKnNoYXJlZEluc3RhbmNlID0gW1tKU1ZpcnR1YWxN
YWNoaW5lIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7Cit9CisKKy0g
KGlkKWluaXQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIG1fY2hpbGRyZW4gPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OjBdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFttX2NoaWxkcmVu
IG9iamVjdEVudW1lcmF0b3JdOworICAgIGlkIG5leHRDaGlsZDsKKyAgICB3aGlsZSAoKG5leHRD
aGlsZCA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSkKKyAgICAgICAgW0pTTWFuYWdlZFJlZmVy
ZW5jZSByZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOm5leHRDaGlsZCB3aXRoT3duZXI6c2VsZiBmcm9t
VmlydHVhbE1hY2hpbmU6W1RpbnlET01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXV07Cit9CisK
Ky0gKHZvaWQpYXBwZW5kQ2hpbGQ6KFRpbnlET01Ob2RlICopY2hpbGQKK3sKKyAgICBbSlNNYW5h
Z2VkUmVmZXJlbmNlIGFkZE1hbmFnZWRSZWZlcmVuY2U6Y2hpbGQgd2l0aE93bmVyOnNlbGYgdG9W
aXJ0dWFsTWFjaGluZTpbVGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdXTsKKyAgICBb
bV9jaGlsZHJlbiBhZGRPYmplY3Q6Y2hpbGRdOworfQorCistIChOU1VJbnRlZ2VyKW51bWJlck9m
Q2hpbGRyZW4KK3sKKyAgICByZXR1cm4gW21fY2hpbGRyZW4gY291bnRdOworfQorCistIChUaW55
RE9NTm9kZSAqKWNoaWxkQXRJbmRleDooTlNVSW50ZWdlcilpbmRleAoreworICAgIGlmIChpbmRl
eCA+PSBbbV9jaGlsZHJlbiBjb3VudF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJu
IFttX2NoaWxkcmVuIG9iamVjdEF0SW5kZXg6aW5kZXhdOworfQorQGVuZAorCiBzdGF0aWMgdm9p
ZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFzc2VkKQogewogICAg
IE5TTG9nKEAiVEVTVDogXCIlQFwiOiAlQCIsIGRlc2NyaXB0aW9uLCBwYXNzZWQgPyBAIlBBU1NF
RCIgOiBAIkZBSUxFRCIpOwpAQCAtNjEzLDYgKzY3NCw1NCBAQCB2b2lkIHRlc3RPYmplY3RpdmVD
QVBJKCkKICAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAiRXZlbnQgaGFuZGxlciBvbmNsaWNrIGRv
ZXNuJ3QgZmlyZSIsICFbcmVzdWx0IHRvQm9vbF0pOwogICAgICAgICB9CiAgICAgfQorCisgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZtID0gW1RpbnlE
T01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXTsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6dm1dOworICAgICAg
ICBUaW55RE9NTm9kZSAqcm9vdCA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGluaXRdOworICAgICAg
ICBUaW55RE9NTm9kZSAqbGFzdE5vZGUgPSByb290OworICAgICAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgICAgIFRpbnlET01Ob2RlICpuZXdOb2RlID0g
W1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdF07CisgICAgICAgICAgICBbbGFzdE5vZGUgYXBwZW5k
Q2hpbGQ6bmV3Tm9kZV07CisgICAgICAgICAgICBsYXN0Tm9kZSA9IG5ld05vZGU7CisgICAgICAg
IH0KKyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBjb250ZXh0W0Aicm9v
dCJdID0gcm9vdDsKKyAgICAgICAgICAgIGNvbnRleHRbQCJnZXRMYXN0Tm9kZUluQ2hhaW4iXSA9
IF4oVGlueURPTU5vZGUgKmhlYWQpeworICAgICAgICAgICAgICAgIFRpbnlET01Ob2RlICpsYXN0
Tm9kZSA9IG5pbDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaGVhZCkgeworICAgICAgICAgICAg
ICAgICAgICBsYXN0Tm9kZSA9IGhlYWQ7CisgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBbbGFz
dE5vZGUgY2hpbGRBdEluZGV4OjBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gbGFzdE5vZGU7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJnZXRMYXN0Tm9kZUluQ2hhaW4ocm9vdCkubXlDdXN0b21Qcm9wZXJ0
eSA9IDQyOyJdOworICAgICAgICB9CisKKyAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xs
ZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IGdsb2JhbENvbnRleHRSZWZdKTsKKworICAgICAgICBK
U1ZhbHVlICpteUN1c3RvbVByb3BlcnR5ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJnZXRM
YXN0Tm9kZUluQ2hhaW4ocm9vdCkubXlDdXN0b21Qcm9wZXJ0eSJdOworICAgICAgICBjaGVja1Jl
c3VsdChAIk15IGN1c3RvbSBwcm9wZXJ0eSA9PSA0MiIsIFtteUN1c3RvbVByb3BlcnR5IGlzTnVt
YmVyXSAmJiBbbXlDdXN0b21Qcm9wZXJ0eSB0b0ludDMyXSA9PSA0Mik7CisgICAgfQorCisgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZtID0gW1RpbnlE
T01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXTsKKyAgICAgICAgVGlueURPTU5vZGUgKnJvb3Qg
PSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNNYW5hZ2VkVmFsdWUgKndl
YWtWYWx1ZTsKKyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBKU0NvbnRl
eHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTp2
bV07CisgICAgICAgICAgICBjb250ZXh0W0Aicm9vdCJdID0gcm9vdDsKKyAgICAgICAgICAgIHdl
YWtWYWx1ZSA9IFtKU01hbmFnZWRWYWx1ZSBtYW5hZ2VkVmFsdWVXaXRoVmFsdWU6Y29udGV4dFtA
InJvb3QiXV07CisgICAgICAgIH0KKworICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAg
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZp
cnR1YWxNYWNoaW5lOnZtXTsKKyAgICAgICAgICAgIGNvbnRleHRbQCJyb290Il0gPSByb290Owor
ICAgICAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250
ZXh0IGdsb2JhbENvbnRleHRSZWZdKTsKKyAgICAgICAgICAgIGNoZWNrUmVzdWx0KEAid2VhayB2
YWx1ZSA9PSBuaWwiLCAhW3dlYWtWYWx1ZSB2YWx1ZV0pOworICAgICAgICAgICAgY2hlY2tSZXN1
bHQoQCJyb290IGlzIHN0aWxsIGFsaXZlIiwgIVtjb250ZXh0W0Aicm9vdCJdIGlzVW5kZWZpbmVk
XSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTQ2MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTg1MSw2ICs4NTEsOSBAQAogCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3Bh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRUFB
M0Y4MTQ5QTgzMDgwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAv
KiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkYwRjJE
MTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGMEYyRDAxNkJBRUVFOTAwMTg3QzE5
IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCAqLzsgfTsKKwkJQzJGNkZDQTIxNkY2NzQyNTAwQzNF
MUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyRjZGQ0EwMTZGNjc0MjUwMEMzRTFGMiAvKiBKU01hbmFnZWRS
ZWZlcmVuY2UubW0gKi87IH07CisJCUMyRjZGQ0EzMTZGNjc0MjUwMEMzRTFGMiAvKiBKU01hbmFn
ZWRSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyRjZGQ0ExMTZGNjc0MjUwMEMzRTFGMiAvKiBKU01hbmFnZWRSZWZlcmVuY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCUMyRjZGQ0E1MTZG
Njk2MTIwMEMzRTFGMiAvKiBKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGNkZDQTQxNkY2OTYxMjAwQzNF
MUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsLmggKi87IH07CiAJCUMyRkM5QkQzMTY2
NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBD
b3BpZWRCbG9ja0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkUx
OEEzMTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURERjdBQkQ0MTFGNjBFRDIwMDEw
OEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IERERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5
Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTc1Myw2ICsxNzU2LDkgQEAKIAkJQzJFQUEzRjgxNDlBODMwODAwRkNFMTEyIC8qIENv
cGllZFNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZFNwYWNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1
OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29waWVkQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRjBGMkQw
MTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyRjZGQ0EwMTZGNjc0MjUwMEMzRTFGMiAvKiBKU01hbmFnZWRS
ZWZlcmVuY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU01h
bmFnZWRSZWZlcmVuY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRjZGQ0Ex
MTZGNjc0MjUwMEMzRTFGMiAvKiBKU01hbmFnZWRSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNNYW5hZ2VkUmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyRjZGQ0E0MTZGNjk2MTIwMEMzRTFGMiAvKiBKU01hbmFnZWRSZWZlcmVu
Y2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01hbmFnZWRS
ZWZlcmVuY2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZDOUJE
MjE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvcGllZEJsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2
IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MjI0LDYgKzIyMzAsOSBAQAogCQkJCUMyNUQ3MDlBMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5oICovLAogCQkJCUMyQ0YzOUJGMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBw
ZXJPYmplY3QuY3BwICovLAogCQkJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdy
YXBwZXJPYmplY3QuaCAqLywKKwkJCQlDMkY2RkNBMDE2RjY3NDI1MDBDM0UxRjIgLyogSlNNYW5h
Z2VkUmVmZXJlbmNlLm1tICovLAorCQkJCUMyRjZGQ0ExMTZGNjc0MjUwMEMzRTFGMiAvKiBKU01h
bmFnZWRSZWZlcmVuY2UuaCAqLywKKwkJCQlDMkY2RkNBNDE2RjY5NjEyMDBDM0UxRjIgLyogSlNN
YW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWwuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQVBJOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5NDMsNiArMjk1Miw3IEBACiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJQzI1RDcwOUMxNkRFOTlG
NDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMkY2RkNB
MzE2RjY3NDI1MDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYwRjUxNEQxMDYzQzAwQUM3NjQ5IC8qIEFic3RyYWN0
UEMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBUElD
YXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTMwODMsNiArMzA5Myw3IEBACiAJCQkJMEZGRkM5NjAx
NEVGOTBCRDAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8qIERpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzMDQ2MDcwRTFGNDk3RjAwMzIzMkNGIC8qIEVycm9y
LmggaW4gSGVhZGVycyAqLywKKwkJCQlDMkY2RkNBNTE2RjY5NjEyMDBDM0UxRjIgLyogSlNNYW5h
Z2VkUmVmZXJlbmNlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTBEMEUxODM5
REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAy
RTk4RDBFMTgzRTM4MDAwRjkyOTcgLyogRXJyb3JJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMwMkU5MEYwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM4NDAsNiArMzg1MSw3IEBACiAJCQkJMEZEREJGQjUxNjY2RUVEODAwQzU1RkVG
IC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
QkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyQkRDNEExNTIyODA5QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzJGNkZDQTIxNkY2NzQyNTAwQzNFMUYyIC8qIEpT
TWFuYWdlZFJlZmVyZW5jZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVGMTRFRjkwQkIw
MEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5RDMzNzAxNjVEQkI5MDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgJKHJldmlzaW9uIDE0NjEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgYm9vbCBjb250YWluc09wYXF1
ZVJvb3Qodm9pZCopOworICAgIGJvb2wgdGhyZWFkU2FmZUNvbnRhaW5zT3BhcXVlUm9vdCh2b2lk
Kik7CiAgICAgaW50IG9wYXF1ZVJvb3RDb3VudCgpOwogCiAgICAgR0NUaHJlYWRTaGFyZWREYXRh
JiBzaGFyZWREYXRhKCkgeyByZXR1cm4gbV9zaGFyZWQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAxNDYxMDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxNCBAQCBpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6
Y29udGFpbnNPcGFxdWVSCiAjZW5kaWYKIH0KIAoraW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OnRo
cmVhZFNhZmVDb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyAgICBpZiAobV9vcGFx
dWVSb290cy5jb250YWlucyhyb290KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fb3BhcXVlUm9vdHNMb2NrKTsKKyAgICByZXR1cm4gbV9z
aGFyZWQubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKK30KKwogaW5saW5lIGludCBTbG90
VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKIHsKICAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVs
TW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw4ICsyMzMs
OCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9jYWxs
YmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxi
YWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAogICAgIG1fb2JqY0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgT2JqQ0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
KTsKLSNlbmRpZgogICAgIG1fb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpOworI2VuZGlmCiAKICAgICBtX2FycmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAgIApAQCAtNTE5LDggKzUxOSw4IEBAIHZvaWQgSlNH
bG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9jYWxsYmFja09iamVjdFN0cnVjdHVyZSk7CiAjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9vYmpjQ2FsbGJhY2tGdW5j
dGlvblN0cnVjdHVyZSk7Ci0jZW5kaWYKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9vYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZSk7CisjZW5kaWYKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9kYXRlU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9lcnJvclN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE0NjEwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0NCw4ICsxNDQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZTsKICNpZiBKU0NfT0JKQ19BUElf
RU5BQkxFRAogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2JqY0NhbGxiYWNrRnVuY3Rp
b25TdHJ1Y3R1cmU7Ci0jZW5kaWYKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29iamNX
cmFwcGVyT2JqZWN0U3RydWN0dXJlOworI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9kYXRlU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbnVsbFBy
b3RvdHlwZU9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2Vy
cm9yU3RydWN0dXJlOwpAQCAtMzA3LDggKzMwNyw4IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUq
IGNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja09iamVj
dFN0cnVjdHVyZS5nZXQoKTsgfQogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgU3RydWN0
dXJlKiBvYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
Y0NhbGxiYWNrRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCk7IH0KLSNlbmRpZgogICAgIFN0cnVjdHVy
ZSogb2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29iamNXcmFw
cGVyT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CisjZW5kaWYKICAgICBTdHJ1Y3R1cmUqIGRhdGVT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2RhdGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBT
dHJ1Y3R1cmUqIG51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIGVy
cm9yU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvclN0cnVjdHVyZS5nZXQoKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193712</attachid>
            <date>2013-03-18 18:35:55 -0700</date>
            <delta_ts>2013-03-21 17:01:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112608-20130318183146.patch</filename>
            <type>text/plain</type>
            <size>37738</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ2MTIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBA
CisyMDEzLTAzLTE4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgZ29vZCB3YXkgdG8gcHJlc2VydmUgY3Vz
dG9tIHByb3BlcnRpZXMgb24gSlMgd3JhcHBlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgd2UganVzdCB1c2UgYSB3ZWFrIG1hcCwg
d2hpY2ggbWVhbnMgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gY2FuIGNhdXNlIGEgd3JhcHBlciB0
byAKKyAgICAgICAgZGlzYXBwZWFyIGlmIGl0IGlzbid0IGRpcmVjdGx5IHJlZmVyZW5jZWQgZnJv
bSBKYXZhU2NyaXB0LgorCisgICAgICAgIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgc2Fm
ZSB3YXkgKHdpdGggcmVzcGVjdCB0byBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIGNvbmN1cnJlbmN5
KSBpcyB0byBoYXZlIAorICAgICAgICBjbGllbnRzIGFkZCBhbmQgcmVtb3ZlIHRoZWlyIGV4dGVy
bmFsIHJlZmVyZW5jZXMgYWxvbmcgd2l0aCB0aGVpciBvd25lcnMuIEVmZmVjdGl2ZWx5LCB0aGUg
Y2xpZW50IGlzIAorICAgICAgICByZWNvcmRpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXh0ZXJu
YWwgb2JqZWN0IGdyYXBoIHNvIHRoYXQgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGNhbiBtYWtlIHN1
cmUgdG8gCisgICAgICAgIG1hcmsgYW55IHdyYXBwZXJzIHRoYXQgYXJlIHJlYWNoYWJsZSB0aHJv
dWdoIGVpdGhlciB0aGUgSlMgb2JqZWN0IGdyYXBoIG9mIHRoZSBleHRlcm5hbCBPYmotQyBvYmpl
Y3QgCisgICAgICAgIGdyYXBoLiBCeSBrZWVwaW5nIHRoZXNlIHdyYXBwZXJzIGFsaXZlLCB0aGlz
IGhhcyB0aGUgZWZmZWN0IHRoYXQgY3VzdG9tIHByb3BlcnRpZXMgb24gdGhlc2Ugd3JhcHBlcnMg
CisgICAgICAgIHdpbGwgYWxzbyByZW1haW4gYWxpdmUuCisKKyAgICAgICAgVGhlIHJ1bGUgZm9y
IGlmIGFuIG9iamVjdCBuZWVkcyB0byBiZSB0cmFja2VkIGJ5IHRoZSBydW50aW1lIChhbmQgdGhl
cmVmb3JlIHdoZXRoZXIgdGhlIGNsaWVudCBzaG91bGQgcmVwb3J0IGl0KSBpcyBhcyBmb2xsb3dz
OgorICAgICAgICBGb3IgYSBwYXJ0aWN1bGFyIG9iamVjdCwgaXRzIHJlZmVyZW5jZXMgdG8gaXRz
IGNoaWxkcmVuIHNob3VsZCBiZSBhZGRlZCBpZjoKKyAgICAgICAgMS4gVGhlIGNoaWxkIGlzIHJl
ZmVyZW5jZWQgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICAyLiBUaGUgY2hpbGQgY29udGFpbnMg
cmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzIGZvciB3aGljaCAoMSkgb3IgKDIpIGFyZSB0cnVl
LgorCisgICAgICAgICogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5jcHA6CisgICAgICAgIChKU0FQ
SVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcik6IE5ldyBjbGFzcyB0aGF0IGFjdHMgYXMgdGhlIFdl
YWtIYW5kbGVPd25lciBmb3IgSlNBUElXcmFwcGVyT2JqZWN0cy4KKyAgICAgICAgKGpzQVBJV3Jh
cHBlck9iamVjdEhhbmRsZU93bmVyKToKKyAgICAgICAgKEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjpmaW5hbGl6ZSk6IERlYWxsb2NhdGVzIHRoZSBXZWFrSW1wbCB0aGF0IHdhcyBhbGxv
Y2F0ZWQgaW4gSlNBUElXcmFwcGVyT2JqZWN0OjpmaW5pc2hDcmVhdGlvbi4KKyAgICAgICAgKEpT
QVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6
IEEgd3JhcHBlciBvYmplY3QgaXMga2VwdCBhbGl2ZSBvbmx5IGlmIGl0cyBKU0dsb2JhbE9iamVj
dAorICAgICAgICBpcyBtYXJrZWQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9i
amVjdCB3YXMgYWRkZWQgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgIChKU0M6
OkpTQVBJV3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOiBBbGxvY2F0ZXMgYSBuZXcgV2Vh
a0ltcGwgZm9yIEpTQVBJV3JhcHBlck9iamVjdHMuCisgICAgICAgIChKU0M6OkpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbik6IFdlIG5vdyBjYWxsIG91dCB0byBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaCwgd2hpY2ggaGFuZGxlcyBhZGRpbmcgYWxsIE9iamVjdGl2ZS1DCisgICAgICAg
IG9iamVjdHMgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgICogQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5oOgorICAgICAgICAoSlNBUElXcmFwcGVyT2JqZWN0KToKKyAgICAgICAg
KiBBUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9KU01hbmFn
ZWRSZWZlcmVuY2UubW06IEFkZGVkLgorICAgICAgICAoZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KTog
SGVscGVyIGZ1bmNpdG9uIHRvIGdldCB0aGUgT2JqZWN0aXZlLUMgb2JqZWN0IG91dCBvZiBKU01h
bmFnZWRWYWx1ZXMgb3IgSlNWYWx1ZXMgaWYgdGhlcmUgaXMgb25lLgorICAgICAgICAoK1tKU01h
bmFnZWRSZWZlcmVuY2UgYWRkTWFuYWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6dG9WaXJ0dWFsTWFj
aGluZTpdKTogQWRkcyB0aGUgT2JqZWN0aXZlLUMgb2JqZWN0IHRvIHRoZSBzZXQgb2Ygb2JqZWN0
cyAKKyAgICAgICAgb3duZWQgYnkgdGhlIG93bmVyIG9iamVjdCBpbiB0aGF0IHBhcnRpY3VsYXIg
dmlydHVhbCBtYWNoaW5lLgorICAgICAgICAoK1tKU01hbmFnZWRSZWZlcmVuY2UgcmVtb3ZlTWFu
YWdlZFJlZmVyZW5jZTp3aXRoT3duZXI6ZnJvbVZpcnR1YWxNYWNoaW5lOl0pOiBSZW1vdmVzIHRo
ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMuCisgICAgICAgIChzY2FuRXh0
ZXJuYWxPYmplY3RHcmFwaCk6IERvZXMgYSBkZXB0aC1maXJzdCBzZWFyY2ggb2YgdGhlIGV4dGVy
bmFsIG9iamVjdCBncmFwaCBpbiBhIHBhcnRpY3VsYXIgdmlydHVhbCBtYWNoaW5lIHN0YXJ0aW5n
IGF0CisgICAgICAgIHRoZSBzcGVjaWZpZWQgcm9vdC4gRWFjaCBuZXcgb2JqZWN0IGl0IGVuY291
bnRlcnMgaXQgYWRkcyB0byB0aGUgc2V0IG9mIG9wYXF1ZSByb290cy4gVGhlc2Ugb3BhcXVlIHJv
b3RzIHdpbGwga2VlcCB0aGVpciAKKyAgICAgICAgY29ycmVzcG9uZGluZyB3cmFwcGVyIG9iamVj
dHMgYWxpdmUgaWYgdGhleSBoYXZlIHRoZW0uIAorICAgICAgICAqIEFQSS9KU01hbmFnZWRSZWZl
cmVuY2VJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bTogQWRkZWQgdGhlIHBlci1KU1ZpcnR1YWxNYWNoaW5lIG1hcCBiZXR3ZWVuIG9iamVjdHMgYW5k
IHRoZSBvYmplY3RzIHRoZXkgb3duLCB3aGljaCBpcyBtb3JlIGZvcm1hbGx5CisgICAgICAgIGtu
b3duIGFzIHRoYXQgdmlydHVhbCBtYWNoaW5lJ3MgZXh0ZXJuYWwgb2JqZWN0IGdyYXBoLgorICAg
ICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGluaXRXaXRoQ29udGV4dEdyb3VwUmVmOl0pOgorICAg
ICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRlYWxsb2NdKToKKyAgICAgICAgKC1bSlNWaXJ0dWFs
TWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXSk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOiBBZGRlZCB0
d28gbmV3IHRlc3RzIHVzaW5nIHRoZSBUaW55RE9NTm9kZSBjbGFzcy4gVGhlIGZpcnN0IHRlc3Rz
IHRoYXQgYSBjdXN0b20gcHJvcGVydHkgYWRkZWQgdG8gYSB3cmFwcGVyIAorICAgICAgICBkb2Vz
bid0IHZhbmlzaCBhZnRlciBHQywgZXZlbiB0aG91Z2ggdGhhdCB3cmFwcGVyIGlzbid0IGRpcmVj
dGx5IGFjY2Vzc2libGUgdG8gdGhlIEpTIGdhcmJhZ2UgY29sbGVjdG9yIGJ1dCBpcyBhY2Nlc3Np
YmxlIHRocm91Z2ggCisgICAgICAgIHRoZSBleHRlcm5hbCBPYmplY3RpdmUtQyBvYmplY3QgZ3Jh
cGguIFRoZSBzZWNvbmQgdGVzdCBtYWtlcyBzdXJlIHRoYXQgcmV1c2luZyB0aGUgc2FtZSBPYmpl
Y3RpdmUtQyBvYmplY3QgaW4gbXVsdGlwbGUgSlNDb250ZXh0cyAKKyAgICAgICAgZG9lc24ndCBj
YXVzZSB0aG9zZSBKU0NvbnRleHRzIHRvIGxlYWsgdGhlaXIgSlNHbG9iYWxPYmplY3RzLgorICAg
ICAgICAoK1tUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV0pOgorICAgICAgICAoLVtU
aW55RE9NTm9kZSBpbml0XSk6CisgICAgICAgICgtW1RpbnlET01Ob2RlIGRlYWxsb2NdKToKKyAg
ICAgICAgKC1bVGlueURPTU5vZGUgYXBwZW5kQ2hpbGQ6XSk6CisgICAgICAgICgtW1RpbnlET01O
b2RlIG51bWJlck9mQ2hpbGRyZW5dKToKKyAgICAgICAgKC1bVGlueURPTU5vZGUgY2hpbGRBdElu
ZGV4Ol0pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAoU2xvdFZpc2l0b3Ip
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjp0aHJlYWRTYWZlQ29udGFpbnNPcGFxdWVSb290KTogQWRkZWQgYSBuZXcgbWV0
aG9kIHRvIFNsb3RWaXNpdG9yIHRvIGFsbG93IHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoIHRvIGhh
dmUgYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgdmlldyBvZiBvcGFxdWUgcm9vdHMgZHVyaW5nIHBh
cmFsbGVsIG1hcmtpbmcuIFRoZSBzZXQgb2Ygb3BhcXVlIHJvb3RzIGF2YWlsYWJsZSB0byBhbnkg
b25lIFNsb3RWaXNpdG9yIGlzbid0IGd1YXJhbnRlZWQKKyAgICAgICAgdG8gYmUgMTAwJSBjb3Jy
ZWN0LCBidXQgdGhhdCBqdXN0IHJlc3VsdHMgaW4gYSBzbWFsbCBkdXBsaWNhdGlvbiBvZiB3b3Jr
IGluIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoLgorCiAyMDEzLTAzLTE4ICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFBvdGVudGlhbGx5IHVuc2FmZSByZWdp
c3RlciBhbGxvY2F0aW9ucyBpbiBERkcgY29kZSBnZW5lcmF0aW9uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuY3BwCShyZXZpc2lvbiAx
NDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw0MCBAQAogI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CisKK2NsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyIDogcHVibGljIEpTQzo6V2Vh
a0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCopOworICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
LCBKU0M6OlNsb3RWaXNpdG9yJik7Cit9OworCitzdGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0SGFu
ZGxlT3duZXIqIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyLCBqc1dyYXBwZXJPYmpl
Y3RIYW5kbGVPd25lciwgKCkpOworICAgIHJldHVybiAmanNXcmFwcGVyT2JqZWN0SGFuZGxlT3du
ZXI7Cit9CisKK3ZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKikKK3sKKyAgICBKU0M6OldlYWtT
ZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgpKSk7
Cit9CisKK2Jvb2wgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgSlND
OjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0M6OkpTQVBJV3JhcHBlck9iamVjdCog
d3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0Kj4oaGFu
ZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICAvLyBXZSB1c2UgdGhlIEpTR2xvYmFsT2JqZWN0IHdo
ZW4gcHJvY2Vzc2luZyB3ZWFrIGhhbmRsZXMgdG8gcHJldmVudCB0aGUgc2l0dWF0aW9uIHdoZXJl
IHVzaW5nCisgICAgLy8gdGhlIHNhbWUgT2JqZWN0aXZlLUMgb2JqZWN0IGluIG11bHRpcGxlIGds
b2JhbCBvYmplY3RzIGtlZXBzIGFsbCBvZiB0aGUgZ2xvYmFsIG9iamVjdHMgYWxpdmUuCisgICAg
aWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gSlNDOjpIZWFwOjppc01hcmtlZCh3cmFwcGVyT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+Z2xvYmFsT2JqZWN0KCkpICYmIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHdyYXBw
ZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7Cit9CisKIG5hbWVzcGFjZSBKU0MgewogICAgIAog
dGVtcGxhdGUgPD4gY29uc3QgQ2xhc3NJbmZvIEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVy
T2JqZWN0Pjo6c19pbmZvID0geyAiRW51bWVyYWJsZUNhbGxiYWNrT2JqZWN0IiwgJkJhc2U6OnNf
aW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0NhbGxiYWNrT2JqZWN0KSB9OwpAQCAt
NTEsNiArODEsMTIgQEAgSlNBUElXcmFwcGVyT2JqZWN0OjpKU0FQSVdyYXBwZXJPYmplY3QoSgog
ewogfQogCit2b2lkIEpTQVBJV3JhcHBlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgIFdlYWtTZXQ6OmFsbG9jYXRlKHRoaXMsIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyKCksIDApOyAvLyBCYWxhbmNlZCBpbiBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVPd25lcjo6
ZmluYWxpemUuCit9CisKIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0FQSVdyYXBw
ZXJPYmplY3QqIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0FQSVdyYXBwZXJPYmplY3QqPihj
ZWxsKTsKQEAgLTU4LDcgKzk0LDkgQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSgogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiAKICAgICBp
ZiAodGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKQotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1
ZVJvb3QodGhpc09iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICAgICAgc2NhbkV4dGVybmFs
T2JqZWN0R3JhcGgoY2VsbC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCksIHZpc2l0b3IsIHRoaXNPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3QuaAkocmV2aXNpb24g
MTQ2MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdyYXBwZXJPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogCisjaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKKwogbmFtZXNwYWNlIEpTQyB7CiAgICAgCiBjbGFzcyBKU0FQ
SVdyYXBwZXJPYmplY3QgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewpAQCAtNDEsNiAr
NDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCogd3JhcHBlZE9iamVjdCgpIHsgcmV0dXJuIG1fd3Jh
cHBlZE9iamVjdDsgfQogICAgIHZvaWQgc2V0V3JhcHBlZE9iamVjdCh2b2lkKiB3cmFwcGVkT2Jq
ZWN0KSB7IG1fd3JhcHBlZE9iamVjdCA9IHdyYXBwZWRPYmplY3Q7IH0KIAorICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJik7CisKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgCkBAIC01Miw0ICs1Niw2IEBAIHByaXZhdGU6CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKKwogI2Vu
ZGlmIC8vIEpTQVBJV3JhcHBlck9iamVjdF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTTWFuYWdlZFJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTTWFuYWdlZFJlZmVyZW5jZV9oCisj
ZGVmaW5lIEpTTWFuYWdlZFJlZmVyZW5jZV9oCisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
QmFzZS5oPgorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKworQGNsYXNzIEpTVmlydHVhbE1h
Y2hpbmU7CisKK05TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKK0BpbnRlcmZhY2UgSlNNYW5h
Z2VkUmVmZXJlbmNlIDogTlNPYmplY3QKKworKyAodm9pZClhZGRNYW5hZ2VkUmVmZXJlbmNlOihp
ZClvYmplY3Qgd2l0aE93bmVyOihpZClvd25lciB0b1ZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxN
YWNoaW5lICopdmlydHVhbE1hY2hpbmU7CisrICh2b2lkKXJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6
KGlkKW9iamVjdCB3aXRoT3duZXI6KGlkKW93bmVyIGZyb21WaXJ0dWFsTWFjaGluZTooSlNWaXJ0
dWFsTWFjaGluZSAqKXZpcnR1YWxNYWNoaW5lOworCitAZW5kCisKKyNlbmRpZiAvLyBKU0NfT0JK
Q19BUElfRU5BQkxFRAorCisjZW5kaWYgLy8gSlNNYW5hZ2VkUmVmZXJlbmNlX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlLm1tCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU01hbmFnZWRSZWZlcmVuY2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIkpTTWFuYWdlZFJlZmVyZW5jZS5oIgorI2ltcG9ydCAiSlNN
YW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9y
dCAiQVBJU2hpbXMuaCIKKyNpbXBvcnQgIkpTVmFsdWUuaCIKKyNpbXBvcnQgIkpTTWFuYWdlZFZh
bHVlLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpT
V3JhcHBlck1hcC5oIgorI2ltcG9ydCAiU2xvdFZpc2l0b3IuaCIKKworI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECisKK0BpbXBsZW1lbnRhdGlvbiBKU01hbmFnZWRSZWZlcmVuY2UKKworc3RhdGlj
IGlkIGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplY3QpCit7CisgICAgaWYgKFtvYmplY3Qg
aXNLaW5kT2ZDbGFzczpbSlNNYW5hZ2VkVmFsdWUgY2xhc3NdXSkKKyAgICAgICAgb2JqZWN0ID0g
W3N0YXRpY19jYXN0PEpTTWFuYWdlZFZhbHVlICo+KG9iamVjdCkgdmFsdWVdOworICAgIAorICAg
IGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W0pTVmFsdWUgY2xhc3NdXSkgeworICAgICAgICBK
U1ZhbHVlICp2YWx1ZSA9IHN0YXRpY19jYXN0PEpTVmFsdWUgKj4ob2JqZWN0KTsKKyAgICAgICAg
b2JqZWN0ID0gdHJ5VW53cmFwT2JqY09iamVjdChbdmFsdWUuY29udGV4dCBnbG9iYWxDb250ZXh0
UmVmXSwgW3ZhbHVlIEpTVmFsdWVSZWZdKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworKyAodm9pZClhZGRNYW5hZ2VkUmVmZXJlbmNlOihpZClvYmplY3Qgd2l0aE93bmVy
OihpZClvd25lciB0b1ZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdmlydHVhbE1h
Y2hpbmUKK3sgICAgCisgICAgb2JqZWN0ID0gZ2V0SW50ZXJuYWxPYmpjT2JqZWN0KG9iamVjdCk7
CisgICAgb3duZXIgPSBnZXRJbnRlcm5hbE9iamNPYmplY3Qob3duZXIpOworICAgIAorICAgIGlm
ICghb2JqZWN0IHx8ICFvd25lciB8fCAhdmlydHVhbE1hY2hpbmUpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBKU0M6OkFQSUVudHJ5U2hpbSBzaGltKHRvSlMoZ2V0R3JvdXBGcm9tVmlydHVh
bE1hY2hpbmUodmlydHVhbE1hY2hpbmUpKSk7CisgICAgCisgICAgTlNNYXBUYWJsZSAqZXh0ZXJu
YWxPYmplY3RHcmFwaCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBoXTsKKyAg
ICBOU011dGFibGVTZXQgKm93bmVkT2JqZWN0cyA9IFtleHRlcm5hbE9iamVjdEdyYXBoIG9iamVj
dEZvcktleTpvd25lcl07CisgICAgaWYgKCFvd25lZE9iamVjdHMpIHsKKyAgICAgICAgb3duZWRP
YmplY3RzID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MV07CisgICAg
ICAgIFtleHRlcm5hbE9iamVjdEdyYXBoIHNldE9iamVjdDpvd25lZE9iamVjdHMgZm9yS2V5Om93
bmVyXTsKKyAgICAgICAgW293bmVkT2JqZWN0cyByZWxlYXNlXTsKKyAgICB9CisgICAgW293bmVk
T2JqZWN0cyBhZGRPYmplY3Q6b2JqZWN0XTsKK30KKworKyAodm9pZClyZW1vdmVNYW5hZ2VkUmVm
ZXJlbmNlOihpZClvYmplY3Qgd2l0aE93bmVyOihpZClvd25lciBmcm9tVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZQoreworICAgIG9iamVjdCA9IGdldElu
dGVybmFsT2JqY09iamVjdChvYmplY3QpOworICAgIG93bmVyID0gZ2V0SW50ZXJuYWxPYmpjT2Jq
ZWN0KG93bmVyKTsKKyAgICAKKyAgICBpZiAoIW9iamVjdCB8fCAhb3duZXIgfHwgIXZpcnR1YWxN
YWNoaW5lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSlNDOjpBUElFbnRyeVNoaW0gc2hp
bSh0b0pTKGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKHZpcnR1YWxNYWNoaW5lKSkpOworICAg
IAorICAgIE5TTWFwVGFibGUgKmV4dGVybmFsT2JqZWN0R3JhcGggPSBbdmlydHVhbE1hY2hpbmUg
ZXh0ZXJuYWxPYmplY3RHcmFwaF07CisgICAgTlNNdXRhYmxlU2V0ICpvd25lZE9iamVjdHMgPSBb
ZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6b3duZXJdOworICAgIGlmICghb3duZWRP
YmplY3RzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW293bmVkT2JqZWN0cyByZW1vdmVP
YmplY3Q6b2JqZWN0XTsKK30KKwordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OkpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvciwgdm9pZCog
cm9vdCkKK3sKKyAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZSA9IFtKU1ZpcnR1
YWxNYWNoaW5lIHZpcnR1YWxNYWNoaW5lV2l0aENvbnRleHRHcm91cFJlZjp0b1JlZigmZ2xvYmFs
RGF0YSldOworICAgIE5TTWFwVGFibGUgKmV4dGVybmFsT2JqZWN0R3JhcGggPSBbdmlydHVhbE1h
Y2hpbmUgZXh0ZXJuYWxPYmplY3RHcmFwaF07CisgICAgTlNNdXRhYmxlQXJyYXkgKnN0YWNrID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eToxXTsKKyAgICBbc3RhY2sg
YWRkT2JqZWN0OnN0YXRpY19jYXN0PGlkPihyb290KV07CisgICAgd2hpbGUgKFtzdGFjayBjb3Vu
dF0gPiAwKSB7CisgICAgICAgIGlkIG5leHRSb290ID0gW3N0YWNrIGxhc3RPYmplY3RdOworICAg
ICAgICBbc3RhY2sgcmVtb3ZlTGFzdE9iamVjdF07CisgICAgICAgIGlmICh2aXNpdG9yLnRocmVh
ZFNhZmVDb250YWluc09wYXF1ZVJvb3Qoc3RhdGljX2Nhc3Q8dm9pZCo+KG5leHRSb290KSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHN0YXRp
Y19jYXN0PHZvaWQqPihuZXh0Um9vdCkpOworICAgICAgICAKKyAgICAgICAgTlNTZXQgKm93bmVk
T2JqZWN0cyA9IFtleHRlcm5hbE9iamVjdEdyYXBoIG9iamVjdEZvcktleTpuZXh0Um9vdF07Cisg
ICAgICAgIGlkIG93bmVkT2JqZWN0OworICAgICAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3Ig
PSBbb3duZWRPYmplY3RzIG9iamVjdEVudW1lcmF0b3JdOworICAgICAgICB3aGlsZSAoKG93bmVk
T2JqZWN0ID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pKQorICAgICAgICAgICAgW3N0YWNrIGFk
ZE9iamVjdDpvd25lZE9iamVjdF07CisgICAgfQorICAgIFtzdGFjayByZWxlYXNlXTsKK30KKwor
QGVuZAorCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNNYW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTTWFuYWdlZFJlZmVy
ZW5jZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSlNNYW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWxfaAorI2RlZmluZSBKU01hbmFn
ZWRSZWZlcmVuY2VJbnRlcm5hbF9oCisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNHbG9iYWxE
YXRhOworY2xhc3MgU2xvdFZpc2l0b3I7Cit9CisgICAgCit2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpTbG90VmlzaXRvciYsIHZvaWQqIHJvb3Qp
OworCisjZW5kaWYgLy8gSlNNYW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWxfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDE0NjEwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDYsOCArMzQ2LDEwIEBAIHZvaWQqIEpTT2JqZWN0R2V0UHJpdmF0ZShKU09iamVjdFJl
ZiBvYmoKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2Jq
ZWN0Pio+KGpzT2JqZWN0KS0+Z2V0UHJpdmF0ZSgpOwogICAgIGlmIChqc09iamVjdC0+aW5oZXJp
dHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpzX2luZm8pKQogICAg
ICAgICByZXR1cm4ganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+
Kj4oanNPYmplY3QpLT5nZXRQcml2YXRlKCk7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAg
ICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxK
U0FQSVdyYXBwZXJPYmplY3Q+Kj4oanNPYmplY3QpLT5nZXRQcml2YXRlKCk7CisjZW5kaWYKICAg
ICAKICAgICByZXR1cm4gMDsKIH0KQEAgLTM2NCwxMCArMzY2LDEyIEBAIGJvb2wgSlNPYmplY3RT
ZXRQcml2YXRlKEpTT2JqZWN0UmVmIG9iamUKICAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmpl
Y3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+Kj4oanNPYmplY3QpLT5zZXRQcml2YXRlKGRhdGEpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAg
ICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9i
amVjdD46OnNfaW5mbykpIHsKICAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElX
cmFwcGVyT2JqZWN0Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZShkYXRhKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQorI2VuZGlmCiAgICAgICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0K
QEAgLTM4Myw4ICszODcsMTAgQEAgSlNWYWx1ZVJlZiBKU09iamVjdEdldFByaXZhdGVQcm9wZXJ0
eShKUwogICAgICAgICByZXN1bHQgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9i
amVjdD4qPihqc09iamVjdCktPmdldFByaXZhdGVQcm9wZXJ0eShuYW1lKTsKICAgICBlbHNlIGlm
IChqc09iamVjdC0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmpl
Y3Q+OjpzX2luZm8pKQogICAgICAgICByZXN1bHQgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxK
U0Rlc3RydWN0aWJsZU9iamVjdD4qPihqc09iamVjdCktPmdldFByaXZhdGVQcm9wZXJ0eShuYW1l
KTsKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogICAgIGVsc2UgaWYgKGpzT2JqZWN0LT5pbmhl
cml0cygmSlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+OjpzX2luZm8pKQogICAg
ICAgICByZXN1bHQgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxKU0FQSVdyYXBwZXJPYmplY3Q+
Kj4oanNPYmplY3QpLT5nZXRQcml2YXRlUHJvcGVydHkobmFtZSk7CisjZW5kaWYKICAgICByZXR1
cm4gdG9SZWYoZXhlYywgcmVzdWx0KTsKIH0KIApAQCAtNDAzLDEwICs0MDksMTIgQEAgYm9vbCBK
U09iamVjdFNldFByaXZhdGVQcm9wZXJ0eShKU0NvbnRleAogICAgICAgICBqc0Nhc3Q8SlNDYWxs
YmFja09iamVjdDxKU0Rlc3RydWN0aWJsZU9iamVjdD4qPihqc09iamVjdCktPnNldFByaXZhdGVQ
cm9wZXJ0eShleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUsIGpzVmFsdWUpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBpZiAoanNPYmpl
Y3QtPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5m
bykpIHsKICAgICAgICAganNDYXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0
Pio+KGpzT2JqZWN0KS0+c2V0UHJpdmF0ZVByb3BlcnR5KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmFt
ZSwganNWYWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyNlbmRpZgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIApAQCAtNDI0LDEwICs0MzIsMTIgQEAgYm9vbCBKU09iamVjdERlbGV0
ZVByaXZhdGVQcm9wZXJ0eShKU0NvbgogICAgICAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdDxK
U0Rlc3RydWN0aWJsZU9iamVjdD4qPihqc09iamVjdCktPmRlbGV0ZVByaXZhdGVQcm9wZXJ0eShu
YW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECiAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDxKU0FQSVdy
YXBwZXJPYmplY3Q+OjpzX2luZm8pKSB7CiAgICAgICAgIGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0
PEpTQVBJV3JhcHBlck9iamVjdD4qPihqc09iamVjdCktPmRlbGV0ZVByaXZhdGVQcm9wZXJ0eShu
YW1lKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAJ
KHJldmlzaW9uIDE0NjEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw4ICsxNDksMTAgQEAgYm9vbCBKU1ZhbHVlSXNP
YmplY3RPZkNsYXNzKEpTQ29udGV4dFJlZgogICAgICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Nh
bGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pio+KG8pLT5pbmhlcml0cyhqc0NsYXNzKTsKICAg
ICAgICAgaWYgKG8tPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0PEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0Pjo6c19pbmZvKSkKICAgICAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNDYWxsYmFja09iamVj
dDxKU0Rlc3RydWN0aWJsZU9iamVjdD4qPihvKS0+aW5oZXJpdHMoanNDbGFzcyk7CisjaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKICAgICAgICAgaWYgKG8tPmluaGVyaXRzKCZKU0NhbGxiYWNrT2Jq
ZWN0PEpTQVBJV3JhcHBlck9iamVjdD46OnNfaW5mbykpCiAgICAgICAgICAgICByZXR1cm4ganND
YXN0PEpTQ2FsbGJhY2tPYmplY3Q8SlNBUElXcmFwcGVyT2JqZWN0Pio+KG8pLT5pbmhlcml0cyhq
c0NsYXNzKTsKKyNlbmRpZgogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAx
NDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAgKyAoSlNWaXJ0dWFsTWFjaGluZSAqKXdy
YXBwZXJGb3JKU0NvbnRleAogQGltcGxlbWVudGF0aW9uIEpTVmlydHVhbE1hY2hpbmUgewogICAg
IEpTQ29udGV4dEdyb3VwUmVmIG1fZ3JvdXA7CiAgICAgTlNNYXBUYWJsZSAqbV9jb250ZXh0Q2Fj
aGU7CisgICAgTlNNYXBUYWJsZSAqbV9leHRlcm5hbE9iamVjdEdyYXBoOwogfQogCiAtIChpZClp
bml0CkBAIC0xMDEsMjIgKzEwMiwyOCBAQCAtIChpZClpbml0V2l0aENvbnRleHRHcm91cFJlZjoo
SlNDb250ZXh0CiAgICAgTlNQb2ludGVyRnVuY3Rpb25zT3B0aW9ucyBrZXlPcHRpb25zID0gTlNQ
b2ludGVyRnVuY3Rpb25zT3BhcXVlTWVtb3J5IHwgTlNQb2ludGVyRnVuY3Rpb25zT3BhcXVlUGVy
c29uYWxpdHk7CiAgICAgTlNQb2ludGVyRnVuY3Rpb25zT3B0aW9ucyB2YWx1ZU9wdGlvbnMgPSBO
U1BvaW50ZXJGdW5jdGlvbnNXZWFrTWVtb3J5IHwgTlNQb2ludGVyRnVuY3Rpb25zT2JqZWN0UGVy
c29uYWxpdHk7CiAgICAgbV9jb250ZXh0Q2FjaGUgPSBbW05TTWFwVGFibGUgYWxsb2NdIGluaXRX
aXRoS2V5T3B0aW9uczprZXlPcHRpb25zIHZhbHVlT3B0aW9uczp2YWx1ZU9wdGlvbnMgY2FwYWNp
dHk6MF07CisgICAgCisgICAgTlNQb2ludGVyRnVuY3Rpb25zT3B0aW9ucyB3ZWFrSURPcHRpb25z
ID0gTlNQb2ludGVyRnVuY3Rpb25zV2Vha01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVj
dFBlcnNvbmFsaXR5OworICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgc3Ryb25nSURPcHRp
b25zID0gTlNQb2ludGVyRnVuY3Rpb25zU3Ryb25nTWVtb3J5IHwgTlNQb2ludGVyRnVuY3Rpb25z
T2JqZWN0UGVyc29uYWxpdHk7CisgICAgbV9leHRlcm5hbE9iamVjdEdyYXBoID0gW1tOU01hcFRh
YmxlIGFsbG9jXSBpbml0V2l0aEtleU9wdGlvbnM6d2Vha0lET3B0aW9ucyB2YWx1ZU9wdGlvbnM6
c3Ryb25nSURPcHRpb25zIGNhcGFjaXR5OjBdOwogICAgCiAgICAgW0pTVk1XcmFwcGVyQ2FjaGUg
YWRkV3JhcHBlcjpzZWxmIGZvckpTQ29udGV4dEdyb3VwUmVmOmdyb3VwXTsKICAKICAgICByZXR1
cm4gc2VsZjsKIH0KIAotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZShJ
bnRlcm5hbCkKLQogLSAodm9pZClkZWFsbG9jCiB7CiAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNl
KG1fZ3JvdXApOworICAgIFttX2NvbnRleHRDYWNoZSByZWxlYXNlXTsKKyAgICBbbV9leHRlcm5h
bE9iamVjdEdyYXBoIHJlbGVhc2VdOwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAorQGVuZAor
CitAaW1wbGVtZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZShJbnRlcm5hbCkKKwogSlNDb250ZXh0
R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSAqdmly
dHVhbE1hY2hpbmUpCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxNYWNoaW5lLT5tX2dyb3VwOwpAQCAt
MTQwLDYgKzE0NywxMSBAQCAtICh2b2lkKWFkZENvbnRleHQ6KEpTQ29udGV4dCAqKXdyYXBwZXIg
CiAgICAgTlNNYXBJbnNlcnQobV9jb250ZXh0Q2FjaGUsIGdsb2JhbENvbnRleHQsIHdyYXBwZXIp
OwogfQogCistIChOU01hcFRhYmxlICopZXh0ZXJuYWxPYmplY3RHcmFwaAoreworICAgIHJldHVy
biBtX2V4dGVybmFsT2JqZWN0R3JhcGg7Cit9CisKIEBlbmQKIAogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJl
dmlzaW9uIDE0NjEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAgSlNDb250ZXh0
R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hYwogLSAoSlNDb250ZXh0ICopY29udGV4dEZv
ckdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0OwogLSAo
dm9pZClhZGRDb250ZXh0OihKU0NvbnRleHQgKil3cmFwcGVyIGZvckdsb2JhbENvbnRleHRSZWY6
KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0OwogCistIChOU01hcFRhYmxlICopZXh0
ZXJuYWxPYmplY3RHcmFwaDsKKwogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlzaW9uIDE0NjEwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjQsNiArMjQsNyBAQAogICovCiAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU01hbmFnZWRSZWZlcmVuY2UuaD4KIAog
dm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0UmVm
KTsKIApAQCAtMTUzLDYgKzE1NCw2NiBAQCAtICh2b2lkKWNsaWNrCiB9CiBAZW5kCiAKK0BjbGFz
cyBUaW55RE9NTm9kZTsKKworQHByb3RvY29sIFRpbnlET01Ob2RlIDxKU0V4cG9ydD4KKy0gKHZv
aWQpYXBwZW5kQ2hpbGQ6KFRpbnlET01Ob2RlICopY2hpbGQ7CistIChOU1VJbnRlZ2VyKW51bWJl
ck9mQ2hpbGRyZW47CistIChUaW55RE9NTm9kZSAqKWNoaWxkQXRJbmRleDooTlNVSW50ZWdlcilp
bmRleDsKK0BlbmQKKworQGludGVyZmFjZSBUaW55RE9NTm9kZSA6IE5TT2JqZWN0PFRpbnlET01O
b2RlPgorKyAoSlNWaXJ0dWFsTWFjaGluZSAqKXNoYXJlZFZpcnR1YWxNYWNoaW5lOworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gVGlueURPTU5vZGUgeworICAgIE5TTXV0YWJsZUFycmF5ICptX2No
aWxkcmVuOworfQorCisrIChKU1ZpcnR1YWxNYWNoaW5lICopc2hhcmVkVmlydHVhbE1hY2hpbmUK
K3sKKyAgICBzdGF0aWMgSlNWaXJ0dWFsTWFjaGluZSAqc2hhcmVkSW5zdGFuY2UgPSBbW0pTVmly
dHVhbE1hY2hpbmUgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZTsKK30K
KworLSAoaWQpaW5pdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgbV9jaGlsZHJlbiA9IFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MF07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClkZWFsbG9jCit7CisgICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW21fY2hp
bGRyZW4gb2JqZWN0RW51bWVyYXRvcl07CisgICAgaWQgbmV4dENoaWxkOworICAgIHdoaWxlICgo
bmV4dENoaWxkID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pKQorICAgICAgICBbSlNNYW5hZ2Vk
UmVmZXJlbmNlIHJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6bmV4dENoaWxkIHdpdGhPd25lcjpzZWxm
IGZyb21WaXJ0dWFsTWFjaGluZTpbVGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdXTsK
K30KKworLSAodm9pZClhcHBlbmRDaGlsZDooVGlueURPTU5vZGUgKiljaGlsZAoreworICAgIFtK
U01hbmFnZWRSZWZlcmVuY2UgYWRkTWFuYWdlZFJlZmVyZW5jZTpjaGlsZCB3aXRoT3duZXI6c2Vs
ZiB0b1ZpcnR1YWxNYWNoaW5lOltUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV1dOwor
ICAgIFttX2NoaWxkcmVuIGFkZE9iamVjdDpjaGlsZF07Cit9CisKKy0gKE5TVUludGVnZXIpbnVt
YmVyT2ZDaGlsZHJlbgoreworICAgIHJldHVybiBbbV9jaGlsZHJlbiBjb3VudF07Cit9CisKKy0g
KFRpbnlET01Ob2RlICopY2hpbGRBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4Cit7CisgICAgaWYg
KGluZGV4ID49IFttX2NoaWxkcmVuIGNvdW50XSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBy
ZXR1cm4gW21fY2hpbGRyZW4gb2JqZWN0QXRJbmRleDppbmRleF07Cit9CitAZW5kCisKIHN0YXRp
YyB2b2lkIGNoZWNrUmVzdWx0KE5TU3RyaW5nICpkZXNjcmlwdGlvbiwgYm9vbCBwYXNzZWQpCiB7
CiAgICAgTlNMb2coQCJURVNUOiBcIiVAXCI6ICVAIiwgZGVzY3JpcHRpb24sIHBhc3NlZCA/IEAi
UEFTU0VEIiA6IEAiRkFJTEVEIik7CkBAIC02MTMsNiArNjc0LDU0IEBAIHZvaWQgdGVzdE9iamVj
dGl2ZUNBUEkoKQogICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJFdmVudCBoYW5kbGVyIG9uY2xp
Y2sgZG9lc24ndCBmaXJlIiwgIVtyZXN1bHQgdG9Cb29sXSk7CiAgICAgICAgIH0KICAgICB9CisK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdm0gPSBb
VGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdOworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTp2bV07Cisg
ICAgICAgIFRpbnlET01Ob2RlICpyb290ID0gW1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdF07Cisg
ICAgICAgIFRpbnlET01Ob2RlICpsYXN0Tm9kZSA9IHJvb3Q7CisgICAgICAgIGZvciAoTlNVSW50
ZWdlciBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgVGlueURPTU5vZGUgKm5ld05v
ZGUgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgIFtsYXN0Tm9kZSBh
cHBlbmRDaGlsZDpuZXdOb2RlXTsKKyAgICAgICAgICAgIGxhc3ROb2RlID0gbmV3Tm9kZTsKKyAg
ICAgICAgfQorICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIGNvbnRleHRb
QCJyb290Il0gPSByb290OworICAgICAgICAgICAgY29udGV4dFtAImdldExhc3ROb2RlSW5DaGFp
biJdID0gXihUaW55RE9NTm9kZSAqaGVhZCl7CisgICAgICAgICAgICAgICAgVGlueURPTU5vZGUg
Kmxhc3ROb2RlID0gbmlsOworICAgICAgICAgICAgICAgIHdoaWxlIChoZWFkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGxhc3ROb2RlID0gaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgaGVhZCA9
IFtsYXN0Tm9kZSBjaGlsZEF0SW5kZXg6MF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBsYXN0Tm9kZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDpAImdldExhc3ROb2RlSW5DaGFpbihyb290KS5teUN1c3RvbVBy
b3BlcnR5ID0gNDI7Il07CisgICAgICAgIH0KKworICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFn
ZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0pOworCisgICAg
ICAgIEpTVmFsdWUgKm15Q3VzdG9tUHJvcGVydHkgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpA
ImdldExhc3ROb2RlSW5DaGFpbihyb290KS5teUN1c3RvbVByb3BlcnR5Il07CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAiTXkgY3VzdG9tIHByb3BlcnR5ID09IDQyIiwgW215Q3VzdG9tUHJvcGVydHkg
aXNOdW1iZXJdICYmIFtteUN1c3RvbVByb3BlcnR5IHRvSW50MzJdID09IDQyKTsKKyAgICB9CisK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdm0gPSBb
VGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdOworICAgICAgICBUaW55RE9NTm9kZSAq
cm9vdCA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGluaXRdOworICAgICAgICBKU01hbmFnZWRWYWx1
ZSAqd2Vha1ZhbHVlOworICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNo
aW5lOnZtXTsKKyAgICAgICAgICAgIGNvbnRleHRbQCJyb290Il0gPSByb290OworICAgICAgICAg
ICAgd2Vha1ZhbHVlID0gW0pTTWFuYWdlZFZhbHVlIG1hbmFnZWRWYWx1ZVdpdGhWYWx1ZTpjb250
ZXh0W0Aicm9vdCJdXTsKKyAgICAgICAgfQorCisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRX
aXRoVmlydHVhbE1hY2hpbmU6dm1dOworICAgICAgICAgICAgY29udGV4dFtAInJvb3QiXSA9IHJv
b3Q7CisgICAgICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmco
W2NvbnRleHQgZ2xvYmFsQ29udGV4dFJlZl0pOworICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJ3
ZWFrIHZhbHVlID09IG5pbCIsICFbd2Vha1ZhbHVlIHZhbHVlXSk7CisgICAgICAgICAgICBjaGVj
a1Jlc3VsdChAInJvb3QgaXMgc3RpbGwgYWxpdmUiLCAhW2NvbnRleHRbQCJyb290Il0gaXNVbmRl
ZmluZWRdKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDYxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODUxLDYgKzg1MSw5IEBACiAJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3Bp
ZWRTcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzJFQUEzRjgxNDlBODMwODAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRC
MTU5IC8qIENvcGllZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzJFQUQyRkIxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMy
RjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkYwRjJEMDE2QkFFRUU5MDAx
ODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwICovOyB9OworCQlDMkY2RkNBMjE2RjY3NDI1
MDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGNkZDQTAxNkY2NzQyNTAwQzNFMUYyIC8qIEpTTWFu
YWdlZFJlZmVyZW5jZS5tbSAqLzsgfTsKKwkJQzJGNkZDQTMxNkY2NzQyNTAwQzNFMUYyIC8qIEpT
TWFuYWdlZFJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzJGNkZDQTExNkY2NzQyNTAwQzNFMUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKKwkJQzJGNkZD
QTUxNkY2OTYxMjAwQzNFMUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZUludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkY2RkNBNDE2RjY5NjEy
MDBDM0UxRjIgLyogSlNNYW5hZ2VkUmVmZXJlbmNlSW50ZXJuYWwuaCAqLzsgfTsKIAkJQzJGQzlC
RDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQzlCRDIxNjY0NERGQjAwODEwRDMz
IC8qIENvcGllZEJsb2NrSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVS
YXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzJGRTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRERGN0FCRDQxMUY2MEVE
MjAwMTA4RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRERGN0FCRDIxMUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0
aXZpdHlDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xNzUzLDYgKzE3NTYsOSBAQAogCQlDMkVBQTNGODE0OUE4MzA4MDBGQ0UxMTIg
LyogQ29waWVkU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVk
U3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJFQUQyRkIxNEYwMjQ5ODAw
QTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb3BpZWRBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJG
MEYyRDAxNkJBRUVFOTAwMTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJGNkZDQTAxNkY2NzQyNTAwQzNFMUYyIC8qIEpTTWFu
YWdlZFJlZmVyZW5jZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEpTTWFuYWdlZFJlZmVyZW5jZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJG
NkZDQTExNkY2NzQyNTAwQzNFMUYyIC8qIEpTTWFuYWdlZFJlZmVyZW5jZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU01hbmFnZWRSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzJGNkZDQTQxNkY2OTYxMjAwQzNFMUYyIC8qIEpTTWFuYWdlZFJl
ZmVyZW5jZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWFu
YWdlZFJlZmVyZW5jZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
RkM5QkQyMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyRkUxOEEzMTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVS
YXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVSYXJl
RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBF
RDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMjQsNiArMjIzMCw5IEBACiAJCQkJQzI1RDcwOUExNkRFOTlGNDAwRkNBNkJDIC8qIEpT
TWFuYWdlZFZhbHVlLmggKi8sCiAJCQkJQzJDRjM5QkYxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJ
V3JhcHBlck9iamVjdC5jcHAgKi8sCiAJCQkJQzJDRjM5QzAxNkUxNUE4MTAwREQ2OUJFIC8qIEpT
QVBJV3JhcHBlck9iamVjdC5oICovLAorCQkJCUMyRjZGQ0EwMTZGNjc0MjUwMEMzRTFGMiAvKiBK
U01hbmFnZWRSZWZlcmVuY2UubW0gKi8sCisJCQkJQzJGNkZDQTExNkY2NzQyNTAwQzNFMUYyIC8q
IEpTTWFuYWdlZFJlZmVyZW5jZS5oICovLAorCQkJCUMyRjZGQ0E0MTZGNjk2MTIwMEMzRTFGMiAv
KiBKU01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBBUEk7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjk0Myw2ICsyOTUyLDcgQEAKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQlDMjVENzA5QzE2
REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUMy
RjZGQ0EzMTZGNjc0MjUwMEMzRTFGMiAvKiBKU01hbmFnZWRSZWZlcmVuY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJz
dHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8q
IEFQSUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzA4Myw2ICszMDkzLDcgQEAKIAkJCQkwRkZG
Qzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0MjczMTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNDYwNzBFMUY0OTdGMDAzMjMyQ0YgLyog
RXJyb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyRjZGQ0E1MTZGNjk2MTIwMEMzRTFGMiAvKiBK
U01hbmFnZWRSZWZlcmVuY2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MEQw
RTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDJFOThEMEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3RhbmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzAyRTkwRjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzg0MCw2ICszODUxLDcgQEAKIAkJCQkwRkREQkZCNTE2NjZFRUQ4MDBD
NTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjJCREM1MTE1MjI4RkZEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCREM0QTE1MjI4MDlBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMkY2RkNBMjE2RjY3NDI1MDBDM0UxRjIg
LyogSlNNYW5hZ2VkUmVmZXJlbmNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUYxNEVG
OTBCQjAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjlEMzM3MDE2NURCQjkwMDA1QUQzODcgLyogRGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJv
ci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAkocmV2aXNpb24gMTQ2MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBib29sIGNvbnRhaW5z
T3BhcXVlUm9vdCh2b2lkKik7CisgICAgYm9vbCB0aHJlYWRTYWZlQ29udGFpbnNPcGFxdWVSb290
KHZvaWQqKTsKICAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKICAgICBHQ1RocmVhZFNoYXJl
ZERhdGEmIHNoYXJlZERhdGEoKSB7IHJldHVybiBtX3NoYXJlZDsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE0
NjEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDE0IEBAIGlubGluZSBib29sIFNsb3RWaXNp
dG9yOjpjb250YWluc09wYXF1ZVIKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCBTbG90VmlzaXRv
cjo6dGhyZWFkU2FmZUNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KQoreworICAgIGlmICht
X29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9zaGFyZWQubV9vcGFxdWVSb290c0xvY2spOworICAgIHJldHVy
biBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOworfQorCiBpbmxpbmUgaW50
IFNsb3RWaXNpdG9yOjpvcGFxdWVSb290Q291bnQoKQogewogICAgIEFTU0VSVCghbV9pc0luUGFy
YWxsZWxNb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE0NjEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDgg
KzIzMyw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBt
X2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpT
Q2FsbGJhY2tPYmplY3Q8SlNEZXN0cnVjdGlibGVPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogI2lmIEpT
Q19PQkpDX0FQSV9FTkFCTEVECiAgICAgbV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSkpOwotI2VuZGlmCiAgICAgbV9vYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTQVBJV3JhcHBlck9iamVj
dD46OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKSk7CisjZW5kaWYKIAogICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBB
cnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgCkBAIC01MTksOCArNTE5LDggQEAgdm9p
ZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlKTsKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX29iamNDYWxsYmFj
a0Z1bmN0aW9uU3RydWN0dXJlKTsKLSNlbmRpZgogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX29iamNXcmFwcGVyT2JqZWN0U3RydWN0dXJlKTsKKyNlbmRpZgogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2RhdGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX251bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Vycm9yU3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTQ2
MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ0LDggKzE0NCw4IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlOwogI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9vYmpjQ2FsbGJhY2tG
dW5jdGlvblN0cnVjdHVyZTsKLSNlbmRpZgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
b2JqY1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmU7CisjZW5kaWYKICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX2RhdGVTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9u
dWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fZXJyb3JTdHJ1Y3R1cmU7CkBAIC0zMDcsOCArMzA3LDggQEAgcHVibGljOgogICAgIFN0cnVj
dHVyZSogY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNr
T2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICBT
dHJ1Y3R1cmUqIG9iamNDYWxsYmFja0Z1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9vYmpjQ2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZS5nZXQoKTsgfQotI2VuZGlmCiAgICAgU3Ry
dWN0dXJlKiBvYmpjV3JhcHBlck9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Jq
Y1dyYXBwZXJPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyNlbmRpZgogICAgIFN0cnVjdHVyZSog
ZGF0ZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0ZVN0cnVjdHVyZS5nZXQoKTsgfQog
ICAgIFN0cnVjdHVyZSogbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVy
ZSogZXJyb3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yU3RydWN0dXJlLmdldCgp
OyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194389</attachid>
            <date>2013-03-21 17:01:27 -0700</date>
            <delta_ts>2013-03-21 20:15:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112608-20130321165715.patch</filename>
            <type>text/plain</type>
            <size>22804</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ2NTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDEzLTAzLTE4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgZ29vZCB3YXkgdG8gcHJlc2VydmUgY3Vz
dG9tIHByb3BlcnRpZXMgb24gSlMgd3JhcHBlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwgd2UganVzdCB1c2UgYSB3ZWFrIG1hcCwg
d2hpY2ggbWVhbnMgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gY2FuIGNhdXNlIGEgd3JhcHBlciB0
byAKKyAgICAgICAgZGlzYXBwZWFyIGlmIGl0IGlzbid0IGRpcmVjdGx5IGV4cG9ydGVkIHRvIEph
dmFTY3JpcHQuCisKKyAgICAgICAgVGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFuZCBzYWZlIHdh
eSAod2l0aCByZXNwZWN0IHRvIGdhcmJhZ2UgY29sbGVjdGlvbiBhbmQgY29uY3VycmVuY3kpIGlz
IHRvIGhhdmUgCisgICAgICAgIGNsaWVudHMgYWRkIGFuZCByZW1vdmUgdGhlaXIgZXh0ZXJuYWwg
cmVmZXJlbmNlcyBhbG9uZyB3aXRoIHRoZWlyIG93bmVycy4gRWZmZWN0aXZlbHksIHRoZSBjbGll
bnQgaXMgCisgICAgICAgIHJlY29yZGluZyB0aGUgc3RydWN0dXJlIG9mIHRoZSBleHRlcm5hbCBv
YmplY3QgZ3JhcGggc28gdGhhdCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgY2FuIG1ha2Ugc3VyZSB0
byAKKyAgICAgICAgbWFyayBhbnkgd3JhcHBlcnMgdGhhdCBhcmUgcmVhY2hhYmxlIHRocm91Z2gg
ZWl0aGVyIHRoZSBKUyBvYmplY3QgZ3JhcGggb2YgdGhlIGV4dGVybmFsIE9iai1DIG9iamVjdCAK
KyAgICAgICAgZ3JhcGguIEJ5IGtlZXBpbmcgdGhlc2Ugd3JhcHBlcnMgYWxpdmUsIHRoaXMgaGFz
IHRoZSBlZmZlY3QgdGhhdCBjdXN0b20gcHJvcGVydGllcyBvbiB0aGVzZSB3cmFwcGVycyAKKyAg
ICAgICAgd2lsbCBhbHNvIHJlbWFpbiBhbGl2ZS4KKworICAgICAgICBUaGUgcnVsZSBmb3IgaWYg
YW4gb2JqZWN0IG5lZWRzIHRvIGJlIHRyYWNrZWQgYnkgdGhlIHJ1bnRpbWUgKGFuZCB0aGVyZWZv
cmUgd2hldGhlciB0aGUgY2xpZW50IHNob3VsZCByZXBvcnQgaXQpIGlzIGFzIGZvbGxvd3M6Cisg
ICAgICAgIEZvciBhIHBhcnRpY3VsYXIgb2JqZWN0LCBpdHMgcmVmZXJlbmNlcyB0byBpdHMgY2hp
bGRyZW4gc2hvdWxkIGJlIGFkZGVkIGlmOgorICAgICAgICAxLiBUaGUgY2hpbGQgaXMgcmVmZXJl
bmNlZCBmcm9tIEphdmFTY3JpcHQuCisgICAgICAgIDIuIFRoZSBjaGlsZCBjb250YWlucyByZWZl
cmVuY2VzIHRvIG90aGVyIG9iamVjdHMgZm9yIHdoaWNoICgxKSBvciAoMikgYXJlIHRydWUuCisK
KyAgICAgICAgKiBBUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tOgorICAgICAgICAoSlNBUElXcmFw
cGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQVBJV3JhcHBlck9i
amVjdEhhbmRsZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6IEEgd3JhcHBlciBv
YmplY3QgaXMga2VwdCBhbGl2ZSBvbmx5IGlmIGl0cyBKU0dsb2JhbE9iamVjdAorICAgICAgICBp
cyBtYXJrZWQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1DIG9iamVjdCB3YXMgYWRk
ZWQgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgIChKU0M6OkpTQVBJV3JhcHBl
ck9iamVjdDo6dmlzaXRDaGlsZHJlbik6IFdlIG5vdyBjYWxsIG91dCB0byBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaCwgd2hpY2ggaGFuZGxlcyBhZGRpbmcgYWxsIE9iamVjdGl2ZS1DCisgICAgICAg
IG9iamVjdHMgdG8gdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMuCisgICAgICAgICogQVBJL0pTQVBJ
V3JhcHBlck9iamVjdC5oOgorICAgICAgICAoSlNBUElXcmFwcGVyT2JqZWN0KToKKyAgICAgICAg
KiBBUEkvSlNDb250ZXh0Lm1tOiBNb3ZlZCBkZWFsbG9jIHRvIGl0cyBwcm9wZXIgcGxhY2UgaW4g
dGhlIG1haW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgICgtW0pTQ29udGV4dCBkZWFsbG9jXSk6
CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmUuaDoKKyAgICAgICAgKiBBUEkvSlNWaXJ0
dWFsTWFjaGluZS5tbToKKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGluZSBpbml0V2l0aENvbnRl
eHRHcm91cFJlZjpdKToKKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGluZSBkZWFsbG9jXSk6Cisg
ICAgICAgIChnZXRJbnRlcm5hbE9iamNPYmplY3QpOiBIZWxwZXIgZnVuY2l0b24gdG8gZ2V0IHRo
ZSBPYmplY3RpdmUtQyBvYmplY3Qgb3V0IG9mIEpTTWFuYWdlZFZhbHVlcyBvciBKU1ZhbHVlcyBp
ZiB0aGVyZSBpcyBvbmUuCisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgYWRkTWFuYWdlZFJl
ZmVyZW5jZTp3aXRoT3duZXI6XSk6IEFkZHMgdGhlIE9iamVjdGl2ZS1DIG9iamVjdCB0byB0aGUg
c2V0IG9mIG9iamVjdHMgCisgICAgICAgIG93bmVkIGJ5IHRoZSBvd25lciBvYmplY3QgaW4gdGhh
dCBwYXJ0aWN1bGFyIHZpcnR1YWwgbWFjaGluZS4KKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGlu
ZSByZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOndpdGhPd25lcjpdKTogUmVtb3ZlcyB0aGUgcmVsYXRp
b25zaGlwIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNo
aW5lIGV4dGVybmFsT2JqZWN0R3JhcGhdKToKKyAgICAgICAgKHNjYW5FeHRlcm5hbE9iamVjdEdy
YXBoKTogRG9lcyBhIGRlcHRoLWZpcnN0IHNlYXJjaCBvZiB0aGUgZXh0ZXJuYWwgb2JqZWN0IGdy
YXBoIGluIGEgcGFydGljdWxhciB2aXJ0dWFsIG1hY2hpbmUgc3RhcnRpbmcgYXQKKyAgICAgICAg
dGhlIHNwZWNpZmllZCByb290LiBFYWNoIG5ldyBvYmplY3QgaXQgZW5jb3VudGVycyBpdCBhZGRz
IHRvIHRoZSBzZXQgb2Ygb3BhcXVlIHJvb3RzLiBUaGVzZSBvcGFxdWUgcm9vdHMgd2lsbCBrZWVw
IHRoZWlyIAorICAgICAgICBjb3JyZXNwb25kaW5nIHdyYXBwZXIgb2JqZWN0cyBhbGl2ZSBpZiB0
aGV5IGhhdmUgdGhlbS4gCisgICAgICAgICogQVBJL0pTTWFuYWdlZFJlZmVyZW5jZUludGVybmFs
Lmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOiBBZGRlZCB0aGUg
cGVyLUpTVmlydHVhbE1hY2hpbmUgbWFwIGJldHdlZW4gb2JqZWN0cyBhbmQgdGhlIG9iamVjdHMg
dGhleSBvd24sIHdoaWNoIGlzIG1vcmUgZm9ybWFsbHkKKyAgICAgICAga25vd24gYXMgdGhhdCB2
aXJ0dWFsIG1hY2hpbmUncyBleHRlcm5hbCBvYmplY3QgZ3JhcGguCisgICAgICAgICogQVBJL0pT
V3JhcHBlck1hcC5tbToKKyAgICAgICAgKC1bSlNXcmFwcGVyTWFwIGRlYWxsb2NdKTogV2Ugd2Vy
ZSBsZWFraW5nIHRoaXMgYmVmb3JlIDotKAorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGlu
aXRXaXRoQ29udGV4dEdyb3VwUmVmOl0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGRl
YWxsb2NdKToKKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGluZSBleHRlcm5hbE9iamVjdEdyYXBo
XSk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oOgorICAgICAgICAq
IEFQSS90ZXN0cy90ZXN0YXBpLm1tOiBBZGRlZCB0d28gbmV3IHRlc3RzIHVzaW5nIHRoZSBUaW55
RE9NTm9kZSBjbGFzcy4gVGhlIGZpcnN0IHRlc3RzIHRoYXQgYSBjdXN0b20gcHJvcGVydHkgYWRk
ZWQgdG8gYSB3cmFwcGVyIAorICAgICAgICBkb2Vzbid0IHZhbmlzaCBhZnRlciBHQywgZXZlbiB0
aG91Z2ggdGhhdCB3cmFwcGVyIGlzbid0IGRpcmVjdGx5IGFjY2Vzc2libGUgdG8gdGhlIEpTIGdh
cmJhZ2UgY29sbGVjdG9yIGJ1dCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggCisgICAgICAgIHRoZSBl
eHRlcm5hbCBPYmplY3RpdmUtQyBvYmplY3QgZ3JhcGguIFRoZSBzZWNvbmQgdGVzdCBtYWtlcyBz
dXJlIHRoYXQgYWRkaW5nIGFuIG9iamVjdCB0byB0aGUgZXh0ZXJuYWwgb2JqZWN0IGdyYXBoIHdp
dGggdGhlIHNhbWUgCisgICAgICAgIG93bmVyIGRvZXNuJ3QgY2F1c2UgYW55IHNvcnQgb2YgcHJv
YmxlbXMuCisgICAgICAgICgrW1RpbnlET01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXSk6Cisg
ICAgICAgICgtW1RpbnlET01Ob2RlIGluaXRdKToKKyAgICAgICAgKC1bVGlueURPTU5vZGUgZGVh
bGxvY10pOgorICAgICAgICAoLVtUaW55RE9NTm9kZSBhcHBlbmRDaGlsZDpdKToKKyAgICAgICAg
KC1bVGlueURPTU5vZGUgbnVtYmVyT2ZDaGlsZHJlbl0pOgorICAgICAgICAoLVtUaW55RE9NTm9k
ZSBjaGlsZEF0SW5kZXg6XSk6CisgICAgICAgICgtW1RpbnlET01Ob2RlIHJlbW92ZUNoaWxkQXRJ
bmRleDpdKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKFNsb3RWaXNpdG9y
KToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUpOiBBZGRlZCBhIG5ldyBtZXRo
b2QgdG8gU2xvdFZpc2l0b3IgdG8gYWxsb3cgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGggdG8gaGF2
ZSBhIAorICAgICAgICB0aHJlYWQtc2FmZSB2aWV3IG9mIG9wYXF1ZSByb290cyBkdXJpbmcgcGFy
YWxsZWwgbWFya2luZy4gVGhlIHNldCBvZiBvcGFxdWUgcm9vdHMgYXZhaWxhYmxlIHRvIGFueSBv
bmUgU2xvdFZpc2l0b3IgaXNuJ3QgZ3VhcmFudGVlZAorICAgICAgICB0byBiZSAxMDAlIGNvcnJl
Y3QsIGJ1dCB0aGF0IGp1c3QgcmVzdWx0cyBpbiBhIHNtYWxsIGR1cGxpY2F0aW9uIG9mIHdvcmsg
aW4gc2NhbkV4dGVybmFsT2JqZWN0R3JhcGguIFRvIGluZGljYXRlIHRoaXMgY2hhbmdlIGZvcgor
ICAgICAgICBmYWxzZSBuZWdhdGl2ZXMgd2UgcmV0dXJuIGEgVHJpU3RhdGUgdGhhdCdzIGVpdGhl
ciB0cnVlIG9yIG1peGVkLCBidXQgbmV2ZXIgZmFsc2UuCisKIDIwMTMtMDMtMjEgIE1hcmsgTGFt
ICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBsZXhlciBjaGFyUG9zaXRpb24g
Y29tcHV0YXRpb24gd2hlbiAicmV3aW5kImluZyB0aGUgbGV4ZXIuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHJldmlzaW9uIDE0NjQ5
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKLSNlbmRpZgorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKICNlbmRpZiAv
LyBKU0FQSVdyYXBwZXJPYmplY3RfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSVdyYXBwZXJPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0FQSVdyYXBwZXJPYmplY3QubW0JKHJldmlzaW9uIDE0NjQ5NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRl
ICJKU0NhbGxiYWNrT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1
ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKQEAgLTM4LDYgKzM5LDcgQEAKIGNsYXNzIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCopOworICAgIHZp
cnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJik7CiB9OwogCiBzdGF0aWMg
SlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXIqIGpzQVBJV3JhcHBlck9iamVjdEhhbmRsZU93
bmVyKCkKQEAgLTQ4LDExICs1MCwyMSBAQCBzdGF0aWMgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxl
T3duZXIqIGpzCiAKIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXpl
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKikKIHsKLSAgICBKU0M6Oldl
YWtTZXQ6OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgp
KSk7CiAgICAgSlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6Ompz
Q2FzdDxKU0M6OkpTQVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAg
ICAgaWYgKCF3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBbc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSkgcmVs
ZWFzZV07CisgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFzV2Vh
a0ltcGwoaGFuZGxlLnNsb3QoKSkpOworfQorCitib29sIEpTQVBJV3JhcHBlck9iamVjdEhhbmRs
ZU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25v
d24+IGhhbmRsZSwgdm9pZCosIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlND
OjpKU0FQSVdyYXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpT
QVBJV3JhcHBlck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgLy8gV2UgdXNl
IHRoZSBKU0dsb2JhbE9iamVjdCB3aGVuIHByb2Nlc3Npbmcgd2VhayBoYW5kbGVzIHRvIHByZXZl
bnQgdGhlIHNpdHVhdGlvbiB3aGVyZSB1c2luZworICAgIC8vIHRoZSBzYW1lIE9iamVjdGl2ZS1D
IG9iamVjdCBpbiBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBrZWVwcyBhbGwgb2YgdGhlIGdsb2Jh
bCBvYmplY3RzIGFsaXZlLgorICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIEpTQzo6SGVhcDo6aXNNYXJrZWQo
d3JhcHBlck9iamVjdC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKSAmJiB2aXNpdG9yLmNv
bnRhaW5zT3BhcXVlUm9vdCh3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOwogfQogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTkyLDcgKzEwNCw3IEBAIHZvaWQgSlNBUElXcmFwcGVyT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEoKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3Ip
OwogCiAgICAgaWYgKHRoaXNPYmplY3QtPndyYXBwZWRPYmplY3QoKSkKLSAgICAgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3QtPndyYXBwZWRPYmplY3QoKSk7CisgICAgICAgIHNj
YW5FeHRlcm5hbE9iamVjdEdyYXBoKGNlbGwtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRGF0YSgpLCB2aXNpdG9yLCB0aGlzT2JqZWN0LT53cmFwcGVkT2JqZWN0KCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0Lm1tCShyZXZpc2lvbiAxNDY0OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTUgQEAgLSAoaWQpaW5pdFdp
dGhWaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTQogICAgIHJldHVybiBzZWxmOwogfQogCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbbV93cmFwcGVyTWFwIHJlbGVhc2VdOworICAgIEpTR2xvYmFs
Q29udGV4dFJlbGVhc2UobV9jb250ZXh0KTsKKyAgICBbbV92aXJ0dWFsTWFjaGluZSByZWxlYXNl
XTsKKyAgICBbc2VsZi5leGNlcHRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFs
bG9jXTsKK30KKwogLSAoSlNWYWx1ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKXNjcmlw
dAogewogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uVmFsdWUgPSAwOwpAQCAtMTk1LDE1ICsyMDQs
NiBAQCAtIChpZClpbml0V2l0aEdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsCiAgICAgcmV0dXJu
IHNlbGY7CiB9CiAKLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFttX3dyYXBwZXJNYXAgcmVsZWFz
ZV07Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShtX2NvbnRleHQpOwotICAgIFttX3ZpcnR1
YWxNYWNoaW5lIHJlbGVhc2VdOwotICAgIFtzZWxmLmV4Y2VwdGlvbkhhbmRsZXIgcmVsZWFzZV07
Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCiAtICh2b2lkKW5vdGlmeUV4Y2VwdGlvbjooSlNW
YWx1ZVJlZilleGNlcHRpb25WYWx1ZQogewogICAgIHNlbGYuZXhjZXB0aW9uSGFuZGxlcihzZWxm
LCBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpleGNlcHRpb25WYWx1ZSBpbkNvbnRleHQ6c2VsZl0p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgJ
KHJldmlzaW9uIDE0NjQ5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5IEBAIE5TX0NMQVNTX0FWQUlM
QUJMRSgxMF85LCBOQSkKIAogLSAoaWQpaW5pdDsKIAorLSAodm9pZClhZGRNYW5hZ2VkUmVmZXJl
bmNlOihpZClvYmplY3Qgd2l0aE93bmVyOihpZClvd25lcjsKKy0gKHZvaWQpcmVtb3ZlTWFuYWdl
ZFJlZmVyZW5jZTooaWQpb2JqZWN0IHdpdGhPd25lcjooaWQpb3duZXI7CisKIEBlbmQKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5l
Lm1tCShyZXZpc2lvbiAxNDY0OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmly
dHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDEwIEBACiAjaWYgSlND
X09CSkNfQVBJX0VOQUJMRUQKIAogI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiQVBJU2hp
bXMuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmUuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCiAKIHN0YXRpYyBOU01h
cFRhYmxlICpnbG9iYWxXcmFwcGVyQ2FjaGUgPSAwOwogCkBAIC03OSw2ICs4Miw3IEBAICsgKEpT
VmlydHVhbE1hY2hpbmUgKil3cmFwcGVyRm9ySlNDb250ZXgKIEBpbXBsZW1lbnRhdGlvbiBKU1Zp
cnR1YWxNYWNoaW5lIHsKICAgICBKU0NvbnRleHRHcm91cFJlZiBtX2dyb3VwOwogICAgIE5TTWFw
VGFibGUgKm1fY29udGV4dENhY2hlOworICAgIE5TTWFwVGFibGUgKm1fZXh0ZXJuYWxPYmplY3RH
cmFwaDsKIH0KIAogLSAoaWQpaW5pdApAQCAtMTAxLDIyICsxMDUsOTAgQEAgLSAoaWQpaW5pdFdp
dGhDb250ZXh0R3JvdXBSZWY6KEpTQ29udGV4dAogICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlv
bnMga2V5T3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc09wYXF1ZU1lbW9yeSB8IE5TUG9pbnRl
ckZ1bmN0aW9uc09wYXF1ZVBlcnNvbmFsaXR5OwogICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlv
bnMgdmFsdWVPcHRpb25zID0gTlNQb2ludGVyRnVuY3Rpb25zV2Vha01lbW9yeSB8IE5TUG9pbnRl
ckZ1bmN0aW9uc09iamVjdFBlcnNvbmFsaXR5OwogICAgIG1fY29udGV4dENhY2hlID0gW1tOU01h
cFRhYmxlIGFsbG9jXSBpbml0V2l0aEtleU9wdGlvbnM6a2V5T3B0aW9ucyB2YWx1ZU9wdGlvbnM6
dmFsdWVPcHRpb25zIGNhcGFjaXR5OjBdOworICAgIAorICAgIE5TUG9pbnRlckZ1bmN0aW9uc09w
dGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dlYWtNZW1vcnkgfCBOU1Bv
aW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKKyAgICBOU1BvaW50ZXJGdW5jdGlvbnNP
cHRpb25zIHN0cm9uZ0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1N0cm9uZ01lbW9yeSB8
IE5TUG9pbnRlckZ1bmN0aW9uc09iamVjdFBlcnNvbmFsaXR5OworICAgIG1fZXh0ZXJuYWxPYmpl
Y3RHcmFwaCA9IFtbTlNNYXBUYWJsZSBhbGxvY10gaW5pdFdpdGhLZXlPcHRpb25zOndlYWtJRE9w
dGlvbnMgdmFsdWVPcHRpb25zOnN0cm9uZ0lET3B0aW9ucyBjYXBhY2l0eTowXTsKICAgIAogICAg
IFtKU1ZNV3JhcHBlckNhY2hlIGFkZFdyYXBwZXI6c2VsZiBmb3JKU0NvbnRleHRHcm91cFJlZjpn
cm91cF07CiAgCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IEpTVmlydHVhbE1hY2hpbmUoSW50ZXJuYWwpCi0KIC0gKHZvaWQpZGVhbGxvYwogewogICAgIEpT
Q29udGV4dEdyb3VwUmVsZWFzZShtX2dyb3VwKTsKKyAgICBbbV9jb250ZXh0Q2FjaGUgcmVsZWFz
ZV07CisgICAgW21fZXh0ZXJuYWxPYmplY3RHcmFwaCByZWxlYXNlXTsKICAgICBbc3VwZXIgZGVh
bGxvY107CiB9CiAKK3N0YXRpYyBpZCBnZXRJbnRlcm5hbE9iamNPYmplY3QoaWQgb2JqZWN0KQor
eworICAgIGlmIChbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W0pTTWFuYWdlZFZhbHVlIGNsYXNzXV0p
CisgICAgICAgIG9iamVjdCA9IFtzdGF0aWNfY2FzdDxKU01hbmFnZWRWYWx1ZSAqPihvYmplY3Qp
IHZhbHVlXTsKKyAgICAKKyAgICBpZiAoW29iamVjdCBpc0tpbmRPZkNsYXNzOltKU1ZhbHVlIGNs
YXNzXV0pIHsKKyAgICAgICAgSlNWYWx1ZSAqdmFsdWUgPSBzdGF0aWNfY2FzdDxKU1ZhbHVlICo+
KG9iamVjdCk7CisgICAgICAgIG9iamVjdCA9IHRyeVVud3JhcE9iamNPYmplY3QoW3ZhbHVlLmNv
bnRleHQgZ2xvYmFsQ29udGV4dFJlZl0sIFt2YWx1ZSBKU1ZhbHVlUmVmXSk7CisgICAgfQorICAg
IAorICAgIHJldHVybiBvYmplY3Q7Cit9CisKKy0gKHZvaWQpYWRkTWFuYWdlZFJlZmVyZW5jZToo
aWQpb2JqZWN0IHdpdGhPd25lcjooaWQpb3duZXIKK3sgICAgCisgICAgb2JqZWN0ID0gZ2V0SW50
ZXJuYWxPYmpjT2JqZWN0KG9iamVjdCk7CisgICAgb3duZXIgPSBnZXRJbnRlcm5hbE9iamNPYmpl
Y3Qob3duZXIpOworICAgIAorICAgIGlmICghb2JqZWN0IHx8ICFvd25lcikKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIEpTQzo6QVBJRW50cnlTaGltIHNoaW0odG9KUyhtX2dyb3VwKSk7Cisg
ICAgCisgICAgTlNNYXBUYWJsZSAqb3duZWRPYmplY3RzID0gW21fZXh0ZXJuYWxPYmplY3RHcmFw
aCBvYmplY3RGb3JLZXk6b3duZXJdOworICAgIGlmICghb3duZWRPYmplY3RzKSB7CisgICAgICAg
IE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0
aW9uc1dlYWtNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKKyAg
ICAgICAgTlNQb2ludGVyRnVuY3Rpb25zT3B0aW9ucyBpbnRlZ2VyT3B0aW9ucyA9IE5TUG9pbnRl
ckZ1bmN0aW9uc09wYXF1ZU1lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc0ludGVnZXJQZXJzb25h
bGl0eTsKKyAgICAgICAgb3duZWRPYmplY3RzID0gW1tOU01hcFRhYmxlIGFsbG9jXSBpbml0V2l0
aEtleU9wdGlvbnM6d2Vha0lET3B0aW9ucyB2YWx1ZU9wdGlvbnM6aW50ZWdlck9wdGlvbnMgY2Fw
YWNpdHk6MV07CisKKyAgICAgICAgW21fZXh0ZXJuYWxPYmplY3RHcmFwaCBzZXRPYmplY3Q6b3du
ZWRPYmplY3RzIGZvcktleTpvd25lcl07CisgICAgICAgIFtvd25lZE9iamVjdHMgcmVsZWFzZV07
CisgICAgfQorICAgIE5TTWFwSW5zZXJ0KG93bmVkT2JqZWN0cywgb2JqZWN0LCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHNpemVfdD4oTlNNYXBHZXQob3duZWRPYmpl
Y3RzLCBvYmplY3QpKSArIDEpKTsKK30KKworLSAodm9pZClyZW1vdmVNYW5hZ2VkUmVmZXJlbmNl
OihpZClvYmplY3Qgd2l0aE93bmVyOihpZClvd25lcgoreworICAgIG9iamVjdCA9IGdldEludGVy
bmFsT2JqY09iamVjdChvYmplY3QpOworICAgIG93bmVyID0gZ2V0SW50ZXJuYWxPYmpjT2JqZWN0
KG93bmVyKTsKKyAgICAKKyAgICBpZiAoIW9iamVjdCB8fCAhb3duZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBKU0M6OkFQSUVudHJ5U2hpbSBzaGltKHRvSlMobV9ncm91cCkpOworICAg
IAorICAgIE5TTWFwVGFibGUgKm93bmVkT2JqZWN0cyA9IFttX2V4dGVybmFsT2JqZWN0R3JhcGgg
b2JqZWN0Rm9yS2V5Om93bmVyXTsKKyAgICBpZiAoIW93bmVkT2JqZWN0cykKKyAgICAgICAgcmV0
dXJuOworICAgCisgICAgc2l6ZV90IGNvdW50ID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KE5T
TWFwR2V0KG93bmVkT2JqZWN0cywgb2JqZWN0KSk7CisgICAgaWYgKGNvdW50ID4gMSkgeworICAg
ICAgICBOU01hcEluc2VydChvd25lZE9iamVjdHMsIG9iamVjdCwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY291bnQgLSAxKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KGNvdW50ID09IDEpCisgICAgICAgIE5TTWFwUmVtb3ZlKG93bmVkT2JqZWN0cywgb2JqZWN0KTsK
KworICAgIGlmICghW293bmVkT2JqZWN0cyBjb3VudF0pCisgICAgICAgIFttX2V4dGVybmFsT2Jq
ZWN0R3JhcGggcmVtb3ZlT2JqZWN0Rm9yS2V5Om93bmVyXTsKK30KKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gSlNWaXJ0dWFsTWFjaGluZShJbnRlcm5hbCkKKwogSlNDb250ZXh0R3JvdXBSZWYg
Z2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hp
bmUpCiB7CiAgICAgcmV0dXJuIHZpcnR1YWxNYWNoaW5lLT5tX2dyb3VwOwpAQCAtMTQwLDggKzIx
MiwzNyBAQCAtICh2b2lkKWFkZENvbnRleHQ6KEpTQ29udGV4dCAqKXdyYXBwZXIgCiAgICAgTlNN
YXBJbnNlcnQobV9jb250ZXh0Q2FjaGUsIGdsb2JhbENvbnRleHQsIHdyYXBwZXIpOwogfQogCist
IChOU01hcFRhYmxlICopZXh0ZXJuYWxPYmplY3RHcmFwaAoreworICAgIHJldHVybiBtX2V4dGVy
bmFsT2JqZWN0R3JhcGg7Cit9CisKIEBlbmQKIAordm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFw
aChKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
ciwgdm9pZCogcm9vdCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNWaXJ0
dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUgPSBbSlNWaXJ0dWFsTWFjaGluZSB2aXJ0dWFsTWFj
aGluZVdpdGhDb250ZXh0R3JvdXBSZWY6dG9SZWYoJmdsb2JhbERhdGEpXTsKKyAgICAgICAgTlNN
YXBUYWJsZSAqZXh0ZXJuYWxPYmplY3RHcmFwaCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbE9i
amVjdEdyYXBoXTsKKyAgICAgICAgVmVjdG9yPHZvaWQqPiBzdGFjazsKKyAgICAgICAgc3RhY2su
YXBwZW5kKHJvb3QpOworICAgICAgICB3aGlsZSAoIXN0YWNrLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgdm9pZCogbmV4dFJvb3QgPSBzdGFjay5sYXN0KCk7CisgICAgICAgICAgICBzdGFjay5y
ZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBpZiAodmlzaXRvci5jb250YWluc09wYXF1ZVJvb3RU
cmlTdGF0ZShuZXh0Um9vdCkgPT0gVHJ1ZVRyaVN0YXRlKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KG5leHRSb290KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTlNNYXBUYWJsZSAqb3duZWRPYmplY3RzID0gW2V4dGVybmFs
T2JqZWN0R3JhcGggb2JqZWN0Rm9yS2V5OnN0YXRpY19jYXN0PGlkPihuZXh0Um9vdCldOworICAg
ICAgICAgICAgaWQgb3duZWRPYmplY3Q7CisgICAgICAgICAgICBOU0VudW1lcmF0b3IgKmVudW1l
cmF0b3IgPSBbb3duZWRPYmplY3RzIGtleUVudW1lcmF0b3JdOworICAgICAgICAgICAgd2hpbGUg
KChvd25lZE9iamVjdCA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHNpemVfdD4oTlNNYXBHZXQob3duZWRPYmplY3Rz
LCBvd25lZE9iamVjdCkpID09IDEpOworICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZChzdGF0
aWNfY2FzdDx2b2lkKj4ob3duZWRPYmplY3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KIAogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkocmV2aXNpb24gMTQ2NDk1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDE2IEBACiAjaWZuZGVmIEpTVmlydHVhbE1hY2hpbmVJ
bnRlcm5hbF9oCiAjZGVmaW5lIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbF9oCiAKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTVmlydHVhbE1hY2hpbmUuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmg+CiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCituYW1l
c3BhY2UgSlNDIHsKK2NsYXNzIEpTR2xvYmFsRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworfQor
CisjaWYgZGVmaW5lZChfX09CSkNfXykKIEBpbnRlcmZhY2UgSlNWaXJ0dWFsTWFjaGluZShJbnRl
cm5hbCkKIAogSlNDb250ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUoSlNW
aXJ0dWFsTWFjaGluZSAqKTsKQEAgLTQwLDcgKzQ1LDEyIEBAIEpTQ29udGV4dEdyb3VwUmVmIGdl
dEdyb3VwRnJvbVZpcnR1YWxNYWMKIC0gKEpTQ29udGV4dCAqKWNvbnRleHRGb3JHbG9iYWxDb250
ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKIC0gKHZvaWQpYWRkQ29u
dGV4dDooSlNDb250ZXh0ICopd3JhcHBlciBmb3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENv
bnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKIAorLSAoTlNNYXBUYWJsZSAqKWV4dGVybmFsT2JqZWN0
R3JhcGg7CisKIEBlbmQKKyNlbmRpZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQorCit2b2lkIHNjYW5F
eHRlcm5hbE9iamVjdEdyYXBoKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpTbG90VmlzaXRvciYs
IHZvaWQqIHJvb3QpOwogCiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1dyYXBwZXJNYXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1dyYXBwZXJNYXAubW0JKHJldmlzaW9uIDE0NjQ5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNXcmFwcGVyTWFwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzQsNiArNDM0LDcg
QEAgLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZQogCiAtICh2b2lkKWRl
YWxsb2MKIHsKKyAgICBbbV9jYWNoZWRPYmpDV3JhcHBlcnMgcmVsZWFzZV07CiAgICAgW21fY2xh
c3NNYXAgcmVsZWFzZV07CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkocmV2aXNpb24gMTQ2NDk1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTMsNiArMTUzLDg1IEBAIC0gKHZvaWQpY2xpY2sKIH0KIEBlbmQKIAorQGNsYXNzIFRp
bnlET01Ob2RlOworCitAcHJvdG9jb2wgVGlueURPTU5vZGUgPEpTRXhwb3J0PgorLSAodm9pZClh
cHBlbmRDaGlsZDooVGlueURPTU5vZGUgKiljaGlsZDsKKy0gKE5TVUludGVnZXIpbnVtYmVyT2ZD
aGlsZHJlbjsKKy0gKFRpbnlET01Ob2RlICopY2hpbGRBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4
OworLSAodm9pZClyZW1vdmVDaGlsZEF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXg7CitAZW5kCisK
K0BpbnRlcmZhY2UgVGlueURPTU5vZGUgOiBOU09iamVjdDxUaW55RE9NTm9kZT4KKysgKEpTVmly
dHVhbE1hY2hpbmUgKilzaGFyZWRWaXJ0dWFsTWFjaGluZTsKKysgKHZvaWQpY2xlYXJTaGFyZWRW
aXJ0dWFsTWFjaGluZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRpbnlET01Ob2RlIHsKKyAg
ICBOU011dGFibGVBcnJheSAqbV9jaGlsZHJlbjsKK30KKworc3RhdGljIEpTVmlydHVhbE1hY2hp
bmUgKnNoYXJlZEluc3RhbmNlID0gbmlsOworCisrIChKU1ZpcnR1YWxNYWNoaW5lICopc2hhcmVk
VmlydHVhbE1hY2hpbmUKK3sKKyAgICBpZiAoIXNoYXJlZEluc3RhbmNlKQorICAgICAgICBzaGFy
ZWRJbnN0YW5jZSA9IFtbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF07CisgICAgcmV0dXJu
IHNoYXJlZEluc3RhbmNlOworfQorCisrICh2b2lkKWNsZWFyU2hhcmVkVmlydHVhbE1hY2hpbmUK
K3sKKyAgICBzaGFyZWRJbnN0YW5jZSA9IG5pbDsKK30KKworLSAoaWQpaW5pdAoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgbV9jaGlsZHJlbiA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6MF07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
TlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW21fY2hpbGRyZW4gb2JqZWN0RW51bWVyYXRvcl07
CisgICAgaWQgbmV4dENoaWxkOworICAgIHdoaWxlICgobmV4dENoaWxkID0gW2VudW1lcmF0b3Ig
bmV4dE9iamVjdF0pKQorICAgICAgICBbW1RpbnlET01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5l
XSByZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOm5leHRDaGlsZCB3aXRoT3duZXI6c2VsZl07Cit9CisK
Ky0gKHZvaWQpYXBwZW5kQ2hpbGQ6KFRpbnlET01Ob2RlICopY2hpbGQKK3sKKyAgICBbW1RpbnlE
T01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXSBhZGRNYW5hZ2VkUmVmZXJlbmNlOmNoaWxkIHdp
dGhPd25lcjpzZWxmXTsKKyAgICBbbV9jaGlsZHJlbiBhZGRPYmplY3Q6Y2hpbGRdOworfQorCist
IChOU1VJbnRlZ2VyKW51bWJlck9mQ2hpbGRyZW4KK3sKKyAgICByZXR1cm4gW21fY2hpbGRyZW4g
Y291bnRdOworfQorCistIChUaW55RE9NTm9kZSAqKWNoaWxkQXRJbmRleDooTlNVSW50ZWdlcilp
bmRleAoreworICAgIGlmIChpbmRleCA+PSBbbV9jaGlsZHJlbiBjb3VudF0pCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgcmV0dXJuIFttX2NoaWxkcmVuIG9iamVjdEF0SW5kZXg6aW5kZXhdOwor
fQorCistICh2b2lkKXJlbW92ZUNoaWxkQXRJbmRleDooTlNVSW50ZWdlcilpbmRleAoreworICAg
IGlmIChpbmRleCA+PSBbbV9jaGlsZHJlbiBjb3VudF0pCisgICAgICAgIHJldHVybjsKKyAgICBb
W1RpbnlET01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXSByZW1vdmVNYW5hZ2VkUmVmZXJlbmNl
OlttX2NoaWxkcmVuIG9iamVjdEF0SW5kZXg6aW5kZXhdIHdpdGhPd25lcjpzZWxmXTsKKyAgICBb
bV9jaGlsZHJlbiByZW1vdmVPYmplY3RBdEluZGV4OmluZGV4XTsKK30KKworQGVuZAorCiBzdGF0
aWMgdm9pZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFzc2VkKQog
ewogICAgIE5TTG9nKEAiVEVTVDogXCIlQFwiOiAlQCIsIGRlc2NyaXB0aW9uLCBwYXNzZWQgPyBA
IlBBU1NFRCIgOiBAIkZBSUxFRCIpOwpAQCAtNjQ4LDYgKzcyNyw3MiBAQCB2b2lkIHRlc3RPYmpl
Y3RpdmVDQVBJKCkKICAgICAgICAgfQogICAgIH0KIAorICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2bSA9IFtUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFs
TWFjaGluZV07CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9j
XSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKKyAgICAgICAgVGlueURPTU5vZGUgKnJvb3Qg
PSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAgVGlueURPTU5vZGUgKmxhc3RO
b2RlID0gcm9vdDsKKyAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgMzsgaSsrKSB7
CisgICAgICAgICAgICBUaW55RE9NTm9kZSAqbmV3Tm9kZSA9IFtbVGlueURPTU5vZGUgYWxsb2Nd
IGluaXRdOworICAgICAgICAgICAgW2xhc3ROb2RlIGFwcGVuZENoaWxkOm5ld05vZGVdOworICAg
ICAgICAgICAgbGFzdE5vZGUgPSBuZXdOb2RlOworICAgICAgICB9CisKKyAgICAgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBjb250ZXh0W0Aicm9vdCJdID0gcm9vdDsKKyAgICAg
ICAgICAgIGNvbnRleHRbQCJnZXRMYXN0Tm9kZUluQ2hhaW4iXSA9IF4oVGlueURPTU5vZGUgKmhl
YWQpeworICAgICAgICAgICAgICAgIFRpbnlET01Ob2RlICpsYXN0Tm9kZSA9IG5pbDsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoaGVhZCkgeworICAgICAgICAgICAgICAgICAgICBsYXN0Tm9kZSA9
IGhlYWQ7CisgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBbbGFzdE5vZGUgY2hpbGRBdEluZGV4
OjBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbGFzdE5vZGU7
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJn
ZXRMYXN0Tm9kZUluQ2hhaW4ocm9vdCkubXlDdXN0b21Qcm9wZXJ0eSA9IDQyOyJdOworICAgICAg
ICB9CisKKyAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtj
b250ZXh0IGdsb2JhbENvbnRleHRSZWZdKTsKKworICAgICAgICBKU1ZhbHVlICpteUN1c3RvbVBy
b3BlcnR5ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJnZXRMYXN0Tm9kZUluQ2hhaW4ocm9v
dCkubXlDdXN0b21Qcm9wZXJ0eSJdOworICAgICAgICBjaGVja1Jlc3VsdChAIk15IGN1c3RvbSBw
cm9wZXJ0eSA9PSA0MiIsIFtteUN1c3RvbVByb3BlcnR5IGlzTnVtYmVyXSAmJiBbbXlDdXN0b21Q
cm9wZXJ0eSB0b0ludDMyXSA9PSA0Mik7CisKKyAgICAgICAgW1RpbnlET01Ob2RlIGNsZWFyU2hh
cmVkVmlydHVhbE1hY2hpbmVdOworICAgIH0KKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAg
ICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2bSA9IFtUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFj
aGluZV07CisgICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBp
bml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKKyAgICAgICAgVGlueURPTU5vZGUgKnJvb3QgPSBb
W1RpbnlET01Ob2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAgVGlueURPTU5vZGUgKmxhc3ROb2Rl
ID0gcm9vdDsKKyAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgMzsgaSsrKSB7Cisg
ICAgICAgICAgICBUaW55RE9NTm9kZSAqbmV3Tm9kZSA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGlu
aXRdOworICAgICAgICAgICAgW2xhc3ROb2RlIGFwcGVuZENoaWxkOm5ld05vZGVdOworICAgICAg
ICAgICAgbGFzdE5vZGUgPSBuZXdOb2RlOworICAgICAgICB9CisKKyAgICAgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgICAgICBjb250ZXh0W0Aicm9vdCJdID0gcm9vdDsKKyAgICAgICAg
ICAgIGNvbnRleHRbQCJnZXRMYXN0Tm9kZUluQ2hhaW4iXSA9IF4oVGlueURPTU5vZGUgKmhlYWQp
eworICAgICAgICAgICAgICAgIFRpbnlET01Ob2RlICpsYXN0Tm9kZSA9IG5pbDsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoaGVhZCkgeworICAgICAgICAgICAgICAgICAgICBsYXN0Tm9kZSA9IGhl
YWQ7CisgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBbbGFzdE5vZGUgY2hpbGRBdEluZGV4OjBd
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbGFzdE5vZGU7Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJnZXRM
YXN0Tm9kZUluQ2hhaW4ocm9vdCkubXlDdXN0b21Qcm9wZXJ0eSA9IDQyOyJdOworCisgICAgICAg
ICAgICBbcm9vdCBhcHBlbmRDaGlsZDpbcm9vdCBjaGlsZEF0SW5kZXg6MF1dOworICAgICAgICAg
ICAgW3Jvb3QgcmVtb3ZlQ2hpbGRBdEluZGV4OjBdOworICAgICAgICB9CisKKyAgICAgICAgSlNT
eW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IGdsb2JhbENvbnRl
eHRSZWZdKTsKKworICAgICAgICBKU1ZhbHVlICpteUN1c3RvbVByb3BlcnR5ID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJnZXRMYXN0Tm9kZUluQ2hhaW4ocm9vdCkubXlDdXN0b21Qcm9wZXJ0
eSJdOworICAgICAgICBjaGVja1Jlc3VsdChAImR1cGxpY2F0ZSBjYWxscyB0byBhZGRNYW5hZ2Vk
UmVmZXJlbmNlIGRvbid0IGNhdXNlIHRoaW5ncyB0byBkaWUiLCBbbXlDdXN0b21Qcm9wZXJ0eSBp
c051bWJlcl0gJiYgW215Q3VzdG9tUHJvcGVydHkgdG9JbnQzMl0gPT0gNDIpOworCisgICAgICAg
IFtUaW55RE9NTm9kZSBjbGVhclNoYXJlZFZpcnR1YWxNYWNoaW5lXTsKKyAgICB9CiB9CiAKICNl
bHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlz
aW9uIDE0NjQ5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
YWRkT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCop
OworICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKTsKICAgICBp
bnQgb3BhcXVlUm9vdENvdW50KCk7CiAKICAgICBHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERh
dGEoKSB7IHJldHVybiBtX3NoYXJlZDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE0NjQ5NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjEsNiArMTIxLDE2IEBAIGlubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09w
YXF1ZVIKICNlbmRpZgogfQogCitpbmxpbmUgVHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5z
T3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqIHJvb3QpCit7CisgICAgaWYgKG1fb3BhcXVlUm9vdHMu
Y29udGFpbnMocm9vdCkpCisgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fb3BhcXVlUm9vdHNMb2NrKTsKKyAgICBpZiAobV9zaGFy
ZWQubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKKyAgICAgICAgcmV0dXJuIFRydWVUcmlT
dGF0ZTsKKyAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKK30KKwogaW5saW5lIGludCBTbG90Vmlz
aXRvcjo6b3BhcXVlUm9vdENvdW50KCkKIHsKICAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9k
ZSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>