<?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>147050</bug_id>
          
          <creation_ts>2015-07-17 14:32:14 -0700</creation_ts>
          <short_desc>[Content Extensions] Cache actions with domains that match everything</short_desc>
          <delta_ts>2015-07-20 19:29:46 -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>WebCore Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>chris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1110217</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-17 14:32:14 -0700</bug_when>
    <thetext>If you have lots of rules with triggers like {&quot;url-filter&quot;:&quot;.*&quot;,&quot;if-domain&quot;:[&quot;*webkit.org&quot;]} we will spend a lot of time adding unnecessary actions to HashSets when you are not on webkit.org.  Caching all the rules and only adding them to a collection once when the domain changes saves a lot of URL interpreting time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110219</commentid>
    <comment_count>1</comment_count>
      <attachid>256991</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-17 14:39:13 -0700</bug_when>
    <thetext>Created attachment 256991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110235</commentid>
    <comment_count>2</comment_count>
      <attachid>256996</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-17 15:14:44 -0700</bug_when>
    <thetext>Created attachment 256996
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110237</commentid>
    <comment_count>3</comment_count>
      <attachid>256998</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-17 15:16:26 -0700</bug_when>
    <thetext>Created attachment 256998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110290</commentid>
    <comment_count>4</comment_count>
      <attachid>256998</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-17 18:25:43 -0700</bug_when>
    <thetext>Comment on attachment 256998
Patch

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

I really like your approach in this patch.

I want to double-check the results on device. I am surprised it does not help the runtime more.

&gt; Source/WebCore/contentextensions/ContentExtension.cpp:88
&gt; +            css.append(action.stringArgument());

While not strictly equivalent, it would be better to merge all the selectors and let the style subsystem split them as needed.

&gt; Source/WebCore/contentextensions/ContentExtension.cpp:98
&gt; +    // These actions don&apos;t need to be applied individually any more. They will all be applied to every page as a precompiled style sheet.
&gt; +    m_universalActionsWithoutDomains.removeAllMatching(inGlobalDisplayNoneStyleSheet);

All of the computation above should be done when populating m_universalActionsWithoutDomains. Otherwise there is a window between the constructor and ContentExtension::globalDisplayNoneStyleSheet() during which m_universalActionsWithoutDomains has the CSS rules.

After removing all the CSS, you should do m_universalActionsWithoutDomains.shrinkToFit(). That vector will never need to grow again so we can get back as much memory as possible.

&gt; Source/WebCore/contentextensions/ContentExtension.cpp:127
&gt;      }

Could be worth shrinkToFit() both vectors after this.

&gt; Source/WebCore/contentextensions/ContentExtension.cpp:133
&gt; +    ASSERT_WITH_MESSAGE_UNUSED(domain, domain == m_cachedDomain, &quot;universalWithDomains should only be called right after cachedDomainActions with the same domain, so the cache should aways be correct&quot;);

This is a bit fragile for the interface.

What about having a new populateCacheIfNeeded(domain) as the first call of universalActionsWithDomains() and cachedDomainActions()?

&gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:-270
&gt; -                if (!ignorePreviousRulesSeen

You can completely remove &quot;ignorePreviousRulesSeen&quot; without this condition.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:184
&gt; +                if (instruction == DFABytecodeInstruction::AppendAction)
&gt; +                    programCounter += instructionSizeWithArguments(DFABytecodeInstruction::AppendAction);
&gt; +                else if (instruction == DFABytecodeInstruction::AppendActionWithIfDomain)
&gt; +                    programCounter += instructionSizeWithArguments(DFABytecodeInstruction::AppendActionWithIfDomain);

It is unfortunate we still need to touch all this memory. The load-store unit is out next bottleneck.

Can you find out how much memory load and skip at the beginning of machines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110366</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-18 08:40:19 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; All of the computation above should be done when populating
&gt; m_universalActionsWithoutDomains. Otherwise there is a window between the
&gt; constructor and ContentExtension::globalDisplayNoneStyleSheet() during which
&gt; m_universalActionsWithoutDomains has the CSS rules.
This was intentional to keep the load time low, but we have to do it anyway before loading a page.  I think I&apos;ll change this.
&gt; What about having a new populateCacheIfNeeded(domain) as the first call of
&gt; universalActionsWithDomains() and cachedDomainActions()?
This would make an unnecessary string copy of a short string, but I think the stability would be worth it.
&gt; You can completely remove &quot;ignorePreviousRulesSeen&quot; without this condition.
Right.
&gt; Can you find out how much memory load and skip at the beginning of machines?
We could move all these actions into separate &quot;vectors&quot; in the file and never touch it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110414</commentid>
    <comment_count>6</comment_count>
      <attachid>256998</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-18 18:47:37 -0700</bug_when>
    <thetext>Comment on attachment 256998
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtension.cpp:50
&gt; +    copyToVector(withoutDomains.actionsMatchingEverything(), m_universalActionsWithoutDomains);

iOS doesn&apos;t like this because it&apos;s implicitly casting uint64_t&apos;s to uint32_t&apos;s.  I need to make this into a for loop with an assertion that the casting doesn&apos;t lose any information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110792</commentid>
    <comment_count>7</comment_count>
      <attachid>257136</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-20 15:41:16 -0700</bug_when>
    <thetext>Created attachment 257136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110793</commentid>
    <comment_count>8</comment_count>
      <attachid>257137</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-20 15:42:36 -0700</bug_when>
    <thetext>Created attachment 257137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110811</commentid>
    <comment_count>9</comment_count>
      <attachid>257137</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-20 16:32:42 -0700</bug_when>
    <thetext>Comment on attachment 257137
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtension.cpp:107
&gt; +    css.append(ContentExtensionsBackend::displayNoneCSSRule());

What a waste of CPU cycles :(

&gt; Source/WebCore/contentextensions/ContentExtension.cpp:136
&gt; +        

shrinkToFit() both vectors?

&gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:136
&gt; -    WTFLogAlways(&quot;Time added: %f microseconds %s&quot;, (addedTimeEnd - addedTimeStart) * 1.0e6, resourceLoadInfo.resourceURL.string().utf8().data());
&gt; +    dataLogF(&quot;Time added: %f microseconds %s \n&quot;, (addedTimeEnd - addedTimeStart) * 1.0e6, resourceLoadInfo.resourceURL.string().utf8().data());

Am I the only one having trouble with dataLog on device?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110834</commentid>
    <comment_count>10</comment_count>
      <attachid>257137</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-20 17:11:17 -0700</bug_when>
    <thetext>Comment on attachment 257137
Patch

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

&gt;&gt; Source/WebCore/contentextensions/ContentExtension.cpp:136
&gt;&gt; +        
&gt; 
&gt; shrinkToFit() both vectors?

good idea!

&gt;&gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:136
&gt;&gt; +    dataLogF(&quot;Time added: %f microseconds %s \n&quot;, (addedTimeEnd - addedTimeStart) * 1.0e6, resourceLoadInfo.resourceURL.string().utf8().data());
&gt; 
&gt; Am I the only one having trouble with dataLog on device?

no.  I just reroute dataLogF to WTFLogAlways when debugging on device.  There&apos;s probably a better way to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110837</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-20 17:13:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/187049</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110843</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-20 17:29:42 -0700</bug_when>
    <thetext>Got a little too ambitious with that shrinking and committed build fix to http://trac.webkit.org/changeset/187051</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110871</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-07-20 19:29:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/21913164&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256991</attachid>
            <date>2015-07-17 14:39:13 -0700</date>
            <delta_ts>2015-07-17 15:14:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147050-20150717143803.patch</filename>
            <type>text/plain</type>
            <size>34102</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Njk2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE1LTA3LTE3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ2FjaGUgYWN0aW9ucyB3aXRoIGRvbWFpbnMgdGhhdCBtYXRjaCBldmVyeXRo
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcw
NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB5
b3UgaGF2ZSBsb3RzIG9mIHJ1bGVzIHdpdGggdHJpZ2dlcnMgbGlrZSB7InVybC1maWx0ZXIiOiIu
KiIsImlmLWRvbWFpbiI6WyIqd2Via2l0Lm9yZyJdfQorICAgICAgICB3ZSB3aWxsIHNwZW5kIGEg
bG90IG9mIHRpbWUgYWRkaW5nIHVubmVjZXNzYXJ5IGFjdGlvbnMgdG8gSGFzaFNldHMgd2hlbiB5
b3UgYXJlIG5vdCBvbiB3ZWJraXQub3JnLgorICAgICAgICBDYWNoaW5nIGFsbCB0aGUgcnVsZXMg
YW5kIG9ubHkgYWRkaW5nIHRoZW0gdG8gYSBjb2xsZWN0aW9uIG9uY2Ugd2hlbiB0aGUgZG9tYWlu
IGNoYW5nZXMgc2F2ZXMgYSBsb3Qgb2YgVVJMIGludGVycHJldGluZyB0aW1lLgorCisgICAgICAg
IFdlIGFscmVhZHkgaGFkIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIGNzcy1kaXNwbGF5LW5vbmUg
YWN0aW9ucyB3aXRoIHRyaWdnZXJzIHRoYXQgbWF0Y2hlZCBldmVyeXRoaW5nIHVzaW5nIGEgc3Bl
Y2lhbCBieXRlY29kZSBvcGVyYXRpb24uCisgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCBm
b3IgYSBzcGVjaWFsIGJ5dGVjb2RlIG9wZXJhdGlvbiBieSBjYWNoaW5nIHRoZSB0cmlnZ2VycyB0
aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgd2l0aCBhbmQgd2l0aG91dCBkb21haW5zLAorICAgICAgICB0
aGVuIGZyb20gdGhvc2UgY2FjaGVkIGFjdGlvbnMgd2UgY29tcGlsZSBhIHN0eWxlc2hlZXQsIGFu
ZCBjcmVhdGUgY2FjaGVkIGFjdGlvbnMgZm9yIGV2ZXJ5IG5ldyBkb21haW4gd2UgdmlzaXQuCisK
KyAgICAgICAgQWxsIGZ1bmN0aW9uYWxpdHkgaXMgY292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6fkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxE
aXNwbGF5Tm9uZVNlbGVjdG9ycyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6ZmluZEZpcnN0SWdub3Jl
UHJldmlvdXNSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpjYWNoZWREb21haW5B
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0
ZW5zaW9uOjp1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMpOgorICAgICAgICAqIGNvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpjb21waWxlZEV4dGVuc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6dW5pdmVyc2Fs
QWN0aW9uc1dpdGhvdXREb21haW5zKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25SdWxlOjpDb250ZW50RXh0ZW5zaW9uUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2VyaWFsaXpl
ZExlbmd0aCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2V0
RXh0ZW5zaW9uSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uOjpleHRlbnNpb25JZGVudGlmaWVyKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclJlc291
cmNlTG9hZCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRoQXJn
dW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNv
bXBpbGVyOjplbWl0QXBwZW5kQWN0aW9uKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc01hdGNo
aW5nRXZlcnl0aGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVmYXVsdFN0
eWxlc2hlZXRGcm9tREZBUm9vdCk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRJbmZvLmg6CisKIDIwMTUtMDctMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4K
IAogICAgICAgICBXZWJDb3JlIHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzIxODAzNzgxPiBUaGUg
ZXh0ZXJuYWwgVVJMIHBvbGljeSBpcyBub3QgcmVwb3J0ZWQgY29ycmVjdGx5IGluIG5hdmlnYXRp
b24gYWN0aW9ucyB0aGF0IGNyZWF0ZSBuZXcgd2luZG93cwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRl
bnNpb24uY3BwCShyZXZpc2lvbiAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwyNCArMzUsNiBAQCBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjp+Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCkKIHsKIH0KLQotVmVjdG9y
PFN0cmluZz4gQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxEaXNwbGF5Tm9uZVNlbGVj
dG9ycygpCi17Ci0gICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihmaWx0ZXJz
V2l0aG91dERvbWFpbnNCeXRlY29kZSgpLCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZUxl
bmd0aCgpKTsKLSAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIGFjdGlvbkxvY2F0
aW9ucyA9IGludGVycHJldGVyLmFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290
KCk7Ci0gICAgCi0gICAgVmVjdG9yPEFjdGlvbj4gZ2xvYmFsQWN0aW9uczsKLSAgICBmb3IgKHVp
bnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogYWN0aW9uTG9jYXRpb25zKQotICAgICAgICBnbG9iYWxB
Y3Rpb25zLmFwcGVuZChBY3Rpb246OmRlc2VyaWFsaXplKGFjdGlvbnMoKSwgYWN0aW9uc0xlbmd0
aCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uTG9jYXRpb24pKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFN0cmluZz4gc2VsZWN0b3JzOwotICAgIGZvciAoQWN0aW9uJiBhY3Rpb24gOiBnbG9i
YWxBY3Rpb25zKSB7Ci0gICAgICAgIGlmIChhY3Rpb24udHlwZSgpID09IEFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IpCi0gICAgICAgICAgICBzZWxlY3RvcnMuYXBwZW5kKGFjdGlv
bi5zdHJpbmdBcmd1bWVudCgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNlbGVjdG9yczsK
LX0KICAgICAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxl
ZENvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uaAkocmV2aXNpb24gMTg2OTEzKQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdW5zaWduZWQgZG9tYWluRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgY29uc3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIFZl
Y3RvcjxTdHJpbmc+IGdsb2JhbERpc3BsYXlOb25lU2VsZWN0b3JzKCk7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDE4Njkx
MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyOCArNDQsNTggQEAgUmVmUHRyPENvbnRlbnRFeHRl
bnNpb24+IENvbnRlbnRFeHRlbnNpbwogQ29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+
JiYgY29tcGlsZWRFeHRlbnNpb24pCiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAg
ICAsIG1fY29tcGlsZWRFeHRlbnNpb24oV1RGOjptb3ZlKGNvbXBpbGVkRXh0ZW5zaW9uKSkKLSAg
ICAsIG1fcGFyc2VkR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KGZhbHNlKQogeworICAgIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIgd2l0aG91dERvbWFpbnMobV9jb21waWxlZEV4dGVuc2lvbi0+
ZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwgbV9jb21waWxlZEV4dGVuc2lvbi0+Zmls
dGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7CisgICAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlciB3aXRoRG9tYWlucyhtX2NvbXBpbGVkRXh0ZW5zaW9uLT5maWx0ZXJzV2l0aERvbWFp
bnNCeXRlY29kZSgpLCBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5maWx0ZXJzV2l0aERvbWFpbnNCeXRl
Y29kZUxlbmd0aCgpKTsKKyAgICBjb3B5VG9WZWN0b3Iod2l0aG91dERvbWFpbnMuYWN0aW9uc01h
dGNoaW5nRXZlcnl0aGluZygpLCBtX3VuaXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucyk7Cisg
ICAgY29weVRvVmVjdG9yKHdpdGhEb21haW5zLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKSwg
bV91bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMpOwogfQogCit1aW50MzJfdCBDb250ZW50RXh0
ZW5zaW9uOjpmaW5kRmlyc3RJZ25vcmVQcmV2aW91c1J1bGVzKCkgY29uc3QKK3sKKyAgICBhdXRv
KiBhY3Rpb25zID0gbV9jb21waWxlZEV4dGVuc2lvbi0+YWN0aW9ucygpOworICAgIHVpbnQzMl90
IGFjdGlvbnNMZW5ndGggPSBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5hY3Rpb25zTGVuZ3RoKCk7Cisg
ICAgdWludDMyX3QgY3VycmVudEFjdGlvbkluZGV4ID0gMDsKKyAgICB3aGlsZSAoY3VycmVudEFj
dGlvbkluZGV4IDwgYWN0aW9uc0xlbmd0aCkgeworICAgICAgICBpZiAoQWN0aW9uOjpkZXNlcmlh
bGl6ZVR5cGUoYWN0aW9ucywgYWN0aW9uc0xlbmd0aCwgY3VycmVudEFjdGlvbkluZGV4KSA9PSBB
Y3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRBY3Rpb25JbmRleDsKKyAgICAgICAgY3VycmVudEFjdGlvbkluZGV4ICs9IEFjdGlvbjo6c2Vy
aWFsaXplZExlbmd0aChhY3Rpb25zLCBhY3Rpb25zTGVuZ3RoLCBjdXJyZW50QWN0aW9uSW5kZXgp
OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
OworfQorICAgIAogU3R5bGVTaGVldENvbnRlbnRzKiBDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxE
aXNwbGF5Tm9uZVN0eWxlU2hlZXQoKQogewogICAgIGlmIChtX3BhcnNlZEdsb2JhbERpc3BsYXlO
b25lU3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIG1fZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNo
ZWV0LmdldCgpOwotCiAgICAgbV9wYXJzZWRHbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQgPSB0
cnVlOwogCi0gICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0b3JzID0gbV9jb21waWxlZEV4dGVuc2lv
bi0+Z2xvYmFsRGlzcGxheU5vbmVTZWxlY3RvcnMoKTsKLSAgICBpZiAoc2VsZWN0b3JzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgdWludDMyX3QgZmlyc3RJZ25vcmVQ
cmV2aW91c1J1bGVzID0gZmluZEZpcnN0SWdub3JlUHJldmlvdXNSdWxlcygpOworICAgIAorICAg
IGF1dG8qIGFjdGlvbnMgPSBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5hY3Rpb25zKCk7CisgICAgdWlu
dDMyX3QgYWN0aW9uc0xlbmd0aCA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmFjdGlvbnNMZW5ndGgo
KTsKIAorICAgIGF1dG8gaW5HbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQgPSBbJl0oY29uc3Qg
dWludDMyX3QgbG9jYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gbG9jYXRpb24gPCBmaXJz
dElnbm9yZVByZXZpb3VzUnVsZXMgJiYgQWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUoYWN0aW9ucywg
YWN0aW9uc0xlbmd0aCwgbG9jYXRpb24pID09IEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3I7CisgICAgfTsKKyAgICAKICAgICBTdHJpbmdCdWlsZGVyIGNzczsKLSAgICBmb3IgKGF1
dG8mIHNlbGVjdG9yIDogc2VsZWN0b3JzKSB7Ci0gICAgICAgIGNzcy5hcHBlbmQoc2VsZWN0b3Ip
OwotICAgICAgICBjc3MuYXBwZW5kKCJ7Iik7Ci0gICAgICAgIGNzcy5hcHBlbmQoQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjpkaXNwbGF5Tm9uZUNTU1J1bGUoKSk7Ci0gICAgICAgIGNzcy5hcHBl
bmQoIn0iKTsKKyAgICBmb3IgKHVpbnQzMl90IHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9uIDogbV91
bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMpIHsKKyAgICAgICAgaWYgKGluR2xvYmFsRGlz
cGxheU5vbmVTdHlsZVNoZWV0KHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9uKSkgeworICAgICAgICAg
ICAgQWN0aW9uIGFjdGlvbiA9IEFjdGlvbjo6ZGVzZXJpYWxpemUoYWN0aW9ucywgYWN0aW9uc0xl
bmd0aCwgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb24pOworICAgICAgICAgICAgQVNTRVJUKGFjdGlv
bi50eXBlKCkgPT0gQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvcik7CisgICAgICAg
ICAgICBjc3MuYXBwZW5kKGFjdGlvbi5zdHJpbmdBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGNz
cy5hcHBlbmQoInsiKTsKKyAgICAgICAgICAgIGNzcy5hcHBlbmQoQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kOjpkaXNwbGF5Tm9uZUNTU1J1bGUoKSk7CisgICAgICAgICAgICBjc3MuYXBwZW5kKCJ9
Iik7CisgICAgICAgIH0KICAgICB9CisgICAgaWYgKGNzcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgIC8vIFRoZXNlIGFjdGlvbnMgZG9uJ3QgbmVlZCB0byBi
ZSBhcHBsaWVkIGluZGl2aWR1YWxseSBhbnkgbW9yZS4gVGhleSB3aWxsIGFsbCBiZSBhcHBsaWVk
IHRvIGV2ZXJ5IHBhZ2UgYXMgYSBwcmVjb21waWxlZCBzdHlsZSBzaGVldC4KKyAgICBtX3VuaXZl
cnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucy5yZW1vdmVBbGxNYXRjaGluZyhpbkdsb2JhbERpc3Bs
YXlOb25lU3R5bGVTaGVldCk7CiAKICAgICBtX2dsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCA9
IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCk7CiAgICAgbV9nbG9iYWxEaXNwbGF5Tm9uZVN0
eWxlU2hlZXQtPnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7CkBAIC04NSwxMCArMTE1LDIzIEBA
IGNvbnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIEMKICAgICAgICAgbV9jYWNo
ZWREb21haW5BY3Rpb25zLmNsZWFyKCk7CiAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uIDog
ZG9tYWluQWN0aW9ucykKICAgICAgICAgICAgIG1fY2FjaGVkRG9tYWluQWN0aW9ucy5hZGQoYWN0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fY2FjaGVkVW5pdmVyc2FsRG9tYWluQWN0aW9ucy5j
bGVhcigpOworICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG1fdW5pdmVyc2FsQWN0aW9u
c1dpdGhEb21haW5zKSB7CisgICAgICAgICAgICBpZiAoISEoYWN0aW9uICYgSWZEb21haW5GbGFn
KSA9PSBtX2NhY2hlZERvbWFpbkFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkKKyAgICAgICAgICAg
ICAgICBtX2NhY2hlZFVuaXZlcnNhbERvbWFpbkFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1fY2FjaGVkRG9tYWluID0gZG9tYWluOwogICAgIH0K
ICAgICByZXR1cm4gbV9jYWNoZWREb21haW5BY3Rpb25zOwogfQorCitjb25zdCBWZWN0b3I8dWlu
dDMyX3Q+JiBDb250ZW50RXh0ZW5zaW9uOjp1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMoY29u
c3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRV9VTlVTRUQoZG9t
YWluLCBkb21haW4gPT0gbV9jYWNoZWREb21haW4sICJ1bml2ZXJzYWxXaXRoRG9tYWlucyBzaG91
bGQgb25seSBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgY2FjaGVkRG9tYWluQWN0aW9ucyB3aXRoIHRo
ZSBzYW1lIGRvbWFpbiwgc28gdGhlIGNhY2hlIHNob3VsZCBhd2F5cyBiZSBjb3JyZWN0Iik7Cisg
ICAgcmV0dXJuIG1fY2FjaGVkVW5pdmVyc2FsRG9tYWluQWN0aW9uczsKK30KICAgICAKIH0gLy8g
bmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbi5oCShyZXZpc2lvbiAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE3ICs0OSwyNCBA
QCBwdWJsaWM6CiAgICAgY29uc3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4
dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7IH0KICAg
ICBTdHlsZVNoZWV0Q29udGVudHMqIGdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpOwogICAg
IGNvbnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIGNhY2hlZERvbWFpbkFjdGlv
bnMoY29uc3QgU3RyaW5nJiBkb21haW4pOworICAgIGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIHVu
aXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucygpIHsgcmV0dXJuIG1fdW5pdmVyc2FsQWN0aW9u
c1dpdGhvdXREb21haW5zOyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgdW5pdmVyc2Fs
QWN0aW9uc1dpdGhEb21haW5zKGNvbnN0IFN0cmluZyYgZG9tYWluKTsKIAogcHJpdmF0ZToKICAg
ICBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmVmPENvbXBpbGVk
Q29udGVudEV4dGVuc2lvbj4mJik7Ci0KKyAgICB1aW50MzJfdCBmaW5kRmlyc3RJZ25vcmVQcmV2
aW91c1J1bGVzKCkgY29uc3Q7CisgICAgCiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBS
ZWY8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBtX2NvbXBpbGVkRXh0ZW5zaW9uOwogICAgIFJl
ZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IG1fZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0Owot
ICAgIGJvb2wgbV9wYXJzZWRHbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ7CisgICAgYm9vbCBt
X3BhcnNlZEdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCB7IGZhbHNlIH07CiAgICAgCiAgICAg
U3RyaW5nIG1fY2FjaGVkRG9tYWluOwogICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlv
bnMgbV9jYWNoZWREb21haW5BY3Rpb25zOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9jYWNoZWRV
bml2ZXJzYWxEb21haW5BY3Rpb25zOworCisgICAgVmVjdG9yPHVpbnQzMl90PiBtX3VuaXZlcnNh
bEFjdGlvbnNXaXRob3V0RG9tYWluczsKKyAgICBWZWN0b3I8dWludDY0X3Q+IG1fdW5pdmVyc2Fs
QWN0aW9uc1dpdGhEb21haW5zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25Db21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTg2OTEzKQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDExICsyNjcsNiBAQCBzdGQ6OmVycm9yX2NvZGUg
Y29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgICAgICAgICBBU1NFUlQodHJpZ2dlci5kb21h
aW5Db25kaXRpb24gPT0gVHJpZ2dlcjo6RG9tYWluQ29uZGl0aW9uOjpOb25lKTsKICAgICAgICAg
ICAgIHN0YXR1cyA9IGZpbHRlcnNXaXRob3V0RG9tYWluUGFyc2VyLmFkZFBhdHRlcm4odHJpZ2dl
ci51cmxGaWx0ZXIsIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlLCBhY3Rpb25Mb2Nh
dGlvbkFuZEZsYWdzKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gVVJMRmlsdGVyUGFyc2Vy
OjpNYXRjaGVzRXZlcnl0aGluZykgewotICAgICAgICAgICAgICAgIGlmICghaWdub3JlUHJldmlv
dXNSdWxlc1NlZW4KLSAgICAgICAgICAgICAgICAgICAgJiYgdHJpZ2dlci5kb21haW5Db25kaXRp
b24gPT0gVHJpZ2dlcjo6RG9tYWluQ29uZGl0aW9uOjpOb25lCi0gICAgICAgICAgICAgICAgICAg
ICYmIGFjdGlvbi50eXBlKCkgPT0gQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvcgot
ICAgICAgICAgICAgICAgICAgICAmJiAhdHJpZ2dlci5mbGFncykKLSAgICAgICAgICAgICAgICAg
ICAgYWN0aW9uTG9jYXRpb25BbmRGbGFncyB8PSBEaXNwbGF5Tm9uZVN0eWxlU2hlZXRGbGFnOwog
ICAgICAgICAgICAgICAgIHVuaXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucy5hZGQoYWN0aW9u
TG9jYXRpb25BbmRGbGFncyk7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gVVJMRmlsdGVyUGFy
c2VyOjpPazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHAJKHJldmlzaW9u
IDE4NjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25SdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOSBAQCBDb250ZW50RXh0
ZW5zaW9uUnVsZTo6Q29udGVudEV4dGVuc2lvblJ1CiAgICAgQVNTRVJUKCFtX3RyaWdnZXIudXJs
RmlsdGVyLmlzRW1wdHkoKSk7CiB9CiAKLUFjdGlvbiBBY3Rpb246OmRlc2VyaWFsaXplKGNvbnN0
IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1bnNpZ25lZCBhY3Rpb25zTGVu
Z3RoLCB1bnNpZ25lZCBsb2NhdGlvbikKK0FjdGlvbiBBY3Rpb246OmRlc2VyaWFsaXplKGNvbnN0
IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1aW50MzJfdCBhY3Rpb25zTGVu
Z3RoLCB1aW50MzJfdCBsb2NhdGlvbikKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbiA8
IGFjdGlvbnNMZW5ndGgpOwogICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8QWN0aW9uVHlwZT4oYWN0
aW9uc1tsb2NhdGlvbl0pKSB7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CiAg
ICAgICAgIHJldHVybiBBY3Rpb24oQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzLCBsb2NhdGlvbik7
CkBAIC00OSwxMCArNTAsMTEgQEAgQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29uc3QgU2Vy
aWFsaQogICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczoKICAgICAgICAg
cmV0dXJuIEFjdGlvbihBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzLCBsb2NhdGlvbik7
CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOiB7Ci0gICAgICAg
IHVuc2lnbmVkIHN0cmluZ1N0YXJ0SW5kZXggPSBsb2NhdGlvbiArIHNpemVvZihBY3Rpb25UeXBl
KSArIHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoYm9vbCk7CisgICAgICAgIHVpbnQzMl90IGhl
YWRlckxlbmd0aCA9IHNpemVvZihBY3Rpb25UeXBlKSArIHNpemVvZih1aW50MzJfdCkgKyBzaXpl
b2YoYm9vbCk7CisgICAgICAgIHVpbnQzMl90IHN0cmluZ1N0YXJ0SW5kZXggPSBsb2NhdGlvbiAr
IGhlYWRlckxlbmd0aDsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWN0aW9uc0xlbmd0aCA+PSBz
dHJpbmdTdGFydEluZGV4KTsKLSAgICAgICAgdW5zaWduZWQgc2VsZWN0b3JMZW5ndGggPSAqcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KCZhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9m
KEFjdGlvblR5cGUpXSk7Ci0gICAgICAgIGJvb2wgd2lkZUNoYXJhY3RlcnMgPSBhY3Rpb25zW2xv
Y2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVuc2lnbmVkKV07CisgICAgICAg
IHVpbnQzMl90IHNlbGVjdG9yTGVuZ3RoID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQqPigmYWN0aW9uc1tsb2NhdGlvbiArIHNpemVvZihBY3Rpb25UeXBlKV0pOworICAgICAgICBi
b29sIHdpZGVDaGFyYWN0ZXJzID0gYWN0aW9uc1tsb2NhdGlvbiArIHNpemVvZihBY3Rpb25UeXBl
KSArIHNpemVvZih1aW50MzJfdCldOwogICAgICAgICAKICAgICAgICAgaWYgKHdpZGVDaGFyYWN0
ZXJzKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhY3Rpb25zTGVuZ3RoID49IHN0cmlu
Z1N0YXJ0SW5kZXggKyBzZWxlY3Rvckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwpAQCAtNjMsMTIg
KzY1LDU1IEBAIEFjdGlvbiBBY3Rpb246OmRlc2VyaWFsaXplKGNvbnN0IFNlcmlhbGkKICAgICB9
CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ6CiAgICAgY2Fz
ZSBBY3Rpb25UeXBlOjpJbnZhbGlkQWN0aW9uOgorICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQotCisgICAgCitBY3Rpb25UeXBlIEFj
dGlvbjo6ZGVzZXJpYWxpemVUeXBlKGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25z
LCBjb25zdCB1aW50MzJfdCBhY3Rpb25zTGVuZ3RoLCB1aW50MzJfdCBsb2NhdGlvbikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbiA8IGFjdGlvbnNMZW5ndGgpOworICAgIEFjdGlvblR5
cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFjdGlvblR5cGU+KGFjdGlvbnNbbG9jYXRpb25dKTsKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2llczoKKyAg
ICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKKyAgICBjYXNlIEFjdGlvblR5cGU6Oklnbm9y
ZVByZXZpb3VzUnVsZXM6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVj
dG9yOgorICAgICAgICByZXR1cm4gdHlwZTsKKyAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU3R5bGVTaGVldDoKKyAgICBjYXNlIEFjdGlvblR5cGU6OkludmFsaWRBY3Rpb246Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisgICAgCit1aW50MzJfdCBBY3Rpb246OnNlcmlhbGl6ZWRMZW5ndGgoY29uc3QgU2VyaWFs
aXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVpbnQzMl90IGFjdGlvbnNMZW5ndGgsIHVp
bnQzMl90IGxvY2F0aW9uKQoreworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8QWN0aW9uVHlwZT4o
YWN0aW9uc1tsb2NhdGlvbl0pKSB7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6
CisgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0xvYWQ6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpJ
Z25vcmVQcmV2aW91c1J1bGVzOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEFjdGlvblR5cGUpOwor
ICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjogeworICAgICAgICB1
aW50MzJfdCBoZWFkZXJMZW5ndGggPSBzaXplb2YoQWN0aW9uVHlwZSkgKyBzaXplb2YodWludDMy
X3QpICsgc2l6ZW9mKGJvb2wpOworICAgICAgICB1aW50MzJfdCBzdHJpbmdTdGFydEluZGV4ID0g
bG9jYXRpb24gKyBoZWFkZXJMZW5ndGg7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjdGlvbnNM
ZW5ndGggPj0gc3RyaW5nU3RhcnRJbmRleCk7CisgICAgICAgIHVpbnQzMl90IHNlbGVjdG9yTGVu
Z3RoID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPigmYWN0aW9uc1tsb2NhdGlv
biArIHNpemVvZihBY3Rpb25UeXBlKV0pOworICAgICAgICBib29sIHdpZGVDaGFyYWN0ZXJzID0g
YWN0aW9uc1tsb2NhdGlvbiArIHNpemVvZihBY3Rpb25UeXBlKSArIHNpemVvZih1aW50MzJfdCld
OworICAgICAgICAKKyAgICAgICAgaWYgKHdpZGVDaGFyYWN0ZXJzKQorICAgICAgICAgICAgcmV0
dXJuIGhlYWRlckxlbmd0aCArIHNlbGVjdG9yTGVuZ3RoICogc2l6ZW9mKFVDaGFyKTsKKyAgICAg
ICAgcmV0dXJuIGhlYWRlckxlbmd0aCArIHNlbGVjdG9yTGVuZ3RoICogc2l6ZW9mKExDaGFyKTsK
KyAgICB9CisgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ6Cisg
ICAgY2FzZSBBY3Rpb25UeXBlOjpJbnZhbGlkQWN0aW9uOgorICAgIGRlZmF1bHQ6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCit9IC8vIG5hbWVzcGFj
ZSBDb250ZW50RXh0ZW5zaW9ucworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lv
biAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw5IEBAIHN0cnVjdCBBY3Rp
b24gewogICAgICAgICAgICAgJiYgbV9zdHJpbmdBcmd1bWVudCA9PSBvdGhlci5tX3N0cmluZ0Fy
Z3VtZW50OwogICAgIH0KIAotICAgIHN0YXRpYyBBY3Rpb24gZGVzZXJpYWxpemUoY29uc3QgU2Vy
aWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVuc2lnbmVkIGFjdGlvbnNMZW5ndGgs
IHVpbnQzMl90IGxvY2F0aW9uKTsKKyAgICBzdGF0aWMgQWN0aW9uIGRlc2VyaWFsaXplKGNvbnN0
IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1aW50MzJfdCBhY3Rpb25zTGVu
Z3RoLCB1aW50MzJfdCBsb2NhdGlvbik7CisgICAgc3RhdGljIEFjdGlvblR5cGUgZGVzZXJpYWxp
emVUeXBlKGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1aW50MzJf
dCBhY3Rpb25zTGVuZ3RoLCB1aW50MzJfdCBsb2NhdGlvbik7CisgICAgc3RhdGljIHVpbnQzMl90
IHNlcmlhbGl6ZWRMZW5ndGgoY29uc3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNv
bnN0IHVpbnQzMl90IGFjdGlvbnNMZW5ndGgsIHVpbnQzMl90IGxvY2F0aW9uKTsKIAogICAgIHZv
aWQgc2V0RXh0ZW5zaW9uSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbklkZW50aWZp
ZXIpIHsgbV9leHRlbnNpb25JZGVudGlmaWVyID0gZXh0ZW5zaW9uSWRlbnRpZmllcjsgfQogICAg
IGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZXh0
ZW5zaW9uSWRlbnRpZmllcjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZp
c2lvbiAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwyMCArOTIsMjcgQEAg
VmVjdG9yPEFjdGlvbj4gQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOgogICAgICAgICBERkFCeXRl
Y29kZUludGVycHJldGVyIHdpdGhvdXREb21haW5zSW50ZXJwcmV0ZXIoY29tcGlsZWRFeHRlbnNp
b24uZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwgY29tcGlsZWRFeHRlbnNpb24uZmls
dGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7CiAgICAgICAgIERGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OkFjdGlvbnMgd2l0aG91dERvbWFpbnNBY3Rpb25zID0gd2l0aG91dERvbWFp
bnNJbnRlcnByZXRlci5pbnRlcnByZXQodXJsQ1N0cmluZywgZmxhZ3MpOwogICAgICAgICAKKyAg
ICAgICAgU3RyaW5nIGRvbWFpbiA9IHJlc291cmNlTG9hZEluZm8ubWFpbkRvY3VtZW50VVJMLmhv
c3QoKTsKICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciB3aXRoRG9tYWluc0ludGVycHJl
dGVyKGNvbXBpbGVkRXh0ZW5zaW9uLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlKCksIGNvbXBp
bGVkRXh0ZW5zaW9uLmZpbHRlcnNXaXRoRG9tYWluc0J5dGVjb2RlTGVuZ3RoKCkpOwotICAgICAg
ICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIHdpdGhEb21haW5zQWN0aW9ucyA9IHdp
dGhEb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0V2l0aERvbWFpbnModXJsQ1N0cmluZywgZmxh
Z3MsIGNvbnRlbnRFeHRlbnNpb24tPmNhY2hlZERvbWFpbkFjdGlvbnMocmVzb3VyY2VMb2FkSW5m
by5tYWluRG9jdW1lbnRVUkwuaG9zdCgpKSk7CisgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OkFjdGlvbnMgd2l0aERvbWFpbnNBY3Rpb25zID0gd2l0aERvbWFpbnNJbnRlcnByZXRlci5p
bnRlcnByZXRXaXRoRG9tYWlucyh1cmxDU3RyaW5nLCBmbGFncywgY29udGVudEV4dGVuc2lvbi0+
Y2FjaGVkRG9tYWluQWN0aW9ucyhkb21haW4pKTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IFNl
cmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zID0gY29tcGlsZWRFeHRlbnNpb24uYWN0aW9ucygp
OwogICAgICAgICBjb25zdCB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoID0gY29tcGlsZWRFeHRlbnNp
b24uYWN0aW9uc0xlbmd0aCgpOwogICAgICAgICAKICAgICAgICAgYm9vbCBzYXdJZ25vcmVQcmV2
aW91c1J1bGVzID0gZmFsc2U7Ci0gICAgICAgIGlmICghd2l0aG91dERvbWFpbnNBY3Rpb25zLmlz
RW1wdHkoKSB8fCAhd2l0aERvbWFpbnNBY3Rpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBjb25z
dCBWZWN0b3I8dWludDMyX3Q+JiB1bml2ZXJzYWxXaXRoRG9tYWlucyA9IGNvbnRlbnRFeHRlbnNp
b24tPnVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucyhkb21haW4pOworICAgICAgICBjb25zdCBW
ZWN0b3I8dWludDMyX3Q+JiB1bml2ZXJzYWxXaXRob3V0RG9tYWlucyA9IGNvbnRlbnRFeHRlbnNp
b24tPnVuaXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucygpOworICAgICAgICBpZiAoIXdpdGhv
dXREb21haW5zQWN0aW9ucy5pc0VtcHR5KCkgfHwgIXdpdGhEb21haW5zQWN0aW9ucy5pc0VtcHR5
KCkgfHwgIXVuaXZlcnNhbFdpdGhEb21haW5zLmlzRW1wdHkoKSB8fCAhdW5pdmVyc2FsV2l0aG91
dERvbWFpbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGFjdGlv
bkxvY2F0aW9uczsKLSAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHdpdGhvdXREb21haW5zQWN0aW9ucy5zaXplKCkgKyB3aXRoRG9tYWluc0FjdGlvbnMu
c2l6ZSgpKTsKKyAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHdpdGhvdXREb21haW5zQWN0aW9ucy5zaXplKCkgKyB3aXRoRG9tYWluc0FjdGlvbnMuc2l6
ZSgpICsgdW5pdmVyc2FsV2l0aG91dERvbWFpbnMuc2l6ZSgpICsgdW5pdmVyc2FsV2l0aERvbWFp
bnMuc2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uTG9jYXRpb24gOiB3
aXRob3V0RG9tYWluc0FjdGlvbnMpCiAgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnVu
Y2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uTG9jYXRpb24pKTsKICAg
ICAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uTG9jYXRpb24gOiB3aXRoRG9tYWluc0FjdGlv
bnMpCiAgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnVuY2hlY2tlZEFwcGVuZChzdGF0
aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uTG9jYXRpb24pKTsKKyAgICAgICAgICAgIGZvciAodWlu
dDMyX3QgYWN0aW9uTG9jYXRpb24gOiB1bml2ZXJzYWxXaXRob3V0RG9tYWlucykKKyAgICAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbnMudW5jaGVja2VkQXBwZW5kKGFjdGlvbkxvY2F0aW9uKTsK
KyAgICAgICAgICAgIGZvciAodWludDMyX3QgYWN0aW9uTG9jYXRpb24gOiB1bml2ZXJzYWxXaXRo
RG9tYWlucykKKyAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMudW5jaGVja2VkQXBwZW5k
KGFjdGlvbkxvY2F0aW9uKTsKICAgICAgICAgICAgIHN0ZDo6c29ydChhY3Rpb25Mb2NhdGlvbnMu
YmVnaW4oKSwgYWN0aW9uTG9jYXRpb25zLmVuZCgpKTsKIAogICAgICAgICAgICAgLy8gQWRkIGFj
dGlvbnMgaW4gcmV2ZXJzZSBvcmRlciB0byBwcm9wZXJseSBkZWFsIHdpdGggSWdub3JlUHJldmlv
dXNSdWxlcy4KQEAgLTEyNiw3ICsxMzMsNyBAQCBWZWN0b3I8QWN0aW9uPiBDb250ZW50RXh0ZW5z
aW9uc0JhY2tlbmQ6CiAgICAgfQogI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9S
RVBPUlRJTkcKICAgICBkb3VibGUgYWRkZWRUaW1lRW5kID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCk7Ci0gICAgV1RGTG9nQWx3YXlzKCJUaW1lIGFkZGVkOiAlZiBtaWNyb3NlY29uZHMg
JXMiLCAoYWRkZWRUaW1lRW5kIC0gYWRkZWRUaW1lU3RhcnQpICogMS4wZTYsIHJlc291cmNlTG9h
ZEluZm8ucmVzb3VyY2VVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZGF0YUxvZ0Yo
IlRpbWUgYWRkZWQ6ICVmIG1pY3Jvc2Vjb25kcyAlcyBcbiIsIChhZGRlZFRpbWVFbmQgLSBhZGRl
ZFRpbWVTdGFydCkgKiAxLjBlNiwgcmVzb3VyY2VMb2FkSW5mby5yZXNvdXJjZVVSTC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgIHJldHVybiBmaW5hbEFjdGlvbnM7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJ
KHJldmlzaW9uIDE4NjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDIxICs1NSwyMCBAQCBlbnVtIGNsYXNz
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gOiB1aW50CiAgICAgLy8gQXBwZW5kQWN0aW9uIGhhcyBv
bmUgYXJndW1lbnQ6CiAgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0ZXMpLgogICAg
IEFwcGVuZEFjdGlvbiA9IDB4NCwKLSAgICBBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCA9
IDB4NSwKLSAgICBBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4gPSAweDYsCisgICAgQXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluID0gMHg1LAogICAgIAogICAgIC8vIFRlc3RGbGFnc0FuZEFwcGVuZEFj
dGlvbiBoYXMgdHdvIGFyZ3VtZW50czoKICAgICAvLyBUaGUgZmxhZ3MgdG8gY2hlY2sgYmVmb3Jl
IGFwcGVuZGluZyAoMiBieXRlcykuCiAgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0
ZXMpLgotICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiA9IDB4NywKLSAgICBUZXN0RmxhZ3NB
bmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4gPSAweDgsCisgICAgVGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uID0gMHg2LAorICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbiA9
IDB4NywKIAogICAgIC8vIFRlcm1pbmF0ZSBoYXMgbm8gYXJndW1lbnRzLgotICAgIFRlcm1pbmF0
ZSA9IDB4OSwKKyAgICBUZXJtaW5hdGUgPSAweDgsCiAKICAgICAvLyBKdW1wIGhhcyBvbmUgYXJn
dW1lbnQ6CiAgICAgLy8gVGhlIGRpc3RhbmNlIHRvIGp1bXAgKDEtNCBieXRlcywgc2lnbmVkKS4K
LSAgICBKdW1wID0gMHhBLAorICAgIEp1bXAgPSAweDksCiB9OwogCiAvLyBUaGUgbGFzdCBmb3Vy
IGJpdHMgY29udGFpbiB0aGUgaW5zdHJ1Y3Rpb24gdHlwZS4KQEAgLTExMCw3ICsxMDksNiBAQCBz
dGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNpemVXaXRoCiAgICAgY2FzZSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpKdW1wOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBWYXJpYWJsZSBpbnN0cnVjdGlvbiBzaXplLgogICAgIGNhc2UgREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uOgotICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQ6CiAgICAgY2FzZSBERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW46CiAgICAgICAgIHJldHVybiBzaXpl
b2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodWludDMyX3QpOwogICAgIGNhc2Ug
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uOgpJbmRleDog
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGVDb21waWxlci5jcHAJKHJldmlzaW9uIDE4NjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw2IEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGkKIHsK
ICAgICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQgdG8gc3RvcmUgZmxhZ3MuIFNlZSBjb21waWxlUnVs
ZUxpc3QuCiAgICAgaWYgKGFjdGlvbiAmIEFjdGlvbkZsYWdNYXNrKSB7Ci0gICAgICAgIEFTU0VS
VCghKGFjdGlvbiAmIERpc3BsYXlOb25lU3R5bGVTaGVldEZsYWcpKTsKICAgICAgICAgaWYgKGFj
dGlvbiAmIElmRG9tYWluRmxhZykKICAgICAgICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3Ry
dWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRB
cHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOwogICAgICAgICBlbHNlCkBAIC04OSwxMCArODgsNyBA
QCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3RpCiAgICAgICAgIGFwcGVu
ZDx1aW50MTZfdD4obV9ieXRlY29kZSwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGFjdGlvbiA+PiAz
MikpOwogICAgICAgICBhcHBlbmQ8dWludDMyX3Q+KG1fYnl0ZWNvZGUsIHN0YXRpY19jYXN0PHVp
bnQzMl90PihhY3Rpb24pKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYWN0aW9uICYgRGlz
cGxheU5vbmVTdHlsZVNoZWV0RmxhZykgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShh
Y3Rpb24gJiBJZkRvbWFpbkZsYWcpKTsKLSAgICAgICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUlu
c3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rp
b25EZWZhdWx0U3R5bGVzaGVldCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uICYgSWZEb21h
aW5GbGFnKQorICAgICAgICBpZiAoYWN0aW9uICYgSWZEb21haW5GbGFnKQogICAgICAgICAgICAg
YXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5j
cHAJKHJldmlzaW9uIDE4NjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxNSArOTYs
MTMgQEAgc3RhdGljIGlubGluZSBib29sIG1hdGNoZXNEb21haW4odWludDY0Xwogdm9pZCBERkFC
eXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24odWludDMyX3QmIHByb2dy
YW1Db3VudGVyLCBBY3Rpb25zJiBhY3Rpb25zLCBib29sIGlmRG9tYWluKQogewogICAgIEFTU0VS
VChnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291
bnRlcikgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uCi0gICAgICAgIHx8
IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3Vu
dGVyKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4K
LSAgICAgICAgfHwgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwg
cHJvZ3JhbUNvdW50ZXIpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRl
ZmF1bHRTdHlsZXNoZWV0KTsKKyAgICAgICAgfHwgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwg
bV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CiAgICAgdWludDY0X3QgYWN0aW9uID0gKGlm
RG9tYWluID8gSWZEb21haW5GbGFnIDogMCkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0
czx1aW50MzJfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIg
KyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikpKTsKICAgICBpZiAoIW1fZG9tYWluQWN0
aW9ucyB8fCBtYXRjaGVzRG9tYWluKGFjdGlvbiwgKm1fZG9tYWluQWN0aW9ucykpCiAgICAgICAg
IGFjdGlvbnMuYWRkKGFjdGlvbik7CiAgICAgCiAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1
Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rp
b24pOwogICAgIEFTU0VSVChpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50
cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pKTsKLSAg
ICBBU1NFUlQoaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpKTsKIH0KIAog
dm9pZCBERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBlbmRB
Y3Rpb24odWludDMyX3QmIHByb2dyYW1Db3VudGVyLCB1aW50MTZfdCBmbGFncywgQWN0aW9ucyYg
YWN0aW9ucywgYm9vbCBpZkRvbWFpbikKQEAgLTEyOCw3ICsxMjYsNyBAQCB2b2lkIERGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlCiAgICAgQVNTRVJUKGluc3RydWN0aW9uU2l6ZVdp
dGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uKSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikpOwogfQogCi1ERkFCeXRl
Y29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmFjdGlvbnNG
b3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290KCkKK0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6
OkFjdGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc01hdGNoaW5nRXZlcnl0aGlu
ZygpCiB7CiAgICAgQWN0aW9ucyBhY3Rpb25zOwogCkBAIC0xMzgsMTkgKzEzNiwxNiBAQCBERkFC
eXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAKICAgICB3aGlsZSAocHJvZ3Jh
bUNvdW50ZXIgPCBkZmFCeXRlY29kZUxlbmd0aCkgewogICAgICAgICBERkFCeXRlY29kZUluc3Ry
dWN0aW9uIGluc3RydWN0aW9uID0gZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29k
ZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpOwotICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpCisgICAg
ICAgIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rp
b24pCiAgICAgICAgICAgICBpbnRlcnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFj
dGlvbnMsIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKQotICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIg
Kz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpB
cHBlbmRBY3Rpb24pOworICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pCisgICAgICAgICAgICBpbnRl
cnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFjdGlvbnMsIHRydWUpOwogICAgICAg
ICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0Rmxh
Z3NBbmRBcHBlbmRBY3Rpb24pCiAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVj
dGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0Fu
ZEFwcGVuZEFjdGlvbik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gYWN0aW9uc0Zv
ckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRo
ZSBERkEgd2l0aG91dCBkb21haW5zLAotICAgICAgICAgICAgLy8gd2hpY2ggc2hvdWxkIG5ldmVy
IGhhdmUgYW55IGFjdGlvbnMgd2l0aCBpZi1kb21haW4uCi0gICAgICAgICAgICBBU1NFUlQoaW5z
dHJ1Y3Rpb24gIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluKTsKLSAgICAgICAgICAgIEFTU0VSVChpbnN0cnVjdGlvbiAhPSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOworICAgICAgICBl
bHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NB
bmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pCisgICAgICAgICAgICBwcm9ncmFtQ291bnRlciAr
PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRl
c3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CisgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBhY3Rpb25zOwogfQpA
QCAtMTc5LDE2ICsxNzQsMTggQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFC
eXRlYwogICAgICAgICB1aW50MzJfdCBkZmFCeXRlY29kZUxlbmd0aCA9IGdldEJpdHM8dWludDMy
X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyKTsKICAgICAg
ICAgcHJvZ3JhbUNvdW50ZXIgKz0gc2l6ZW9mKHVpbnQzMl90KTsKIAotICAgICAgICAvLyBTa2lw
IHRoZSBkZWZhdWx0IHN0eWxlc2hlZXQgYWN0aW9ucyBvbiB0aGUgREZBIHJvb3QuIFRoZXNlIGFy
ZSBhY2Nlc3NlZCB2aWEgYWN0aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3QuCisg
ICAgICAgIC8vIFNraXAgdGhlIGFjdGlvbnMgd2l0aG91dCBmbGFncyBvbiB0aGUgREZBIHJvb3Qu
IFRoZXNlIGFyZSBhY2Nlc3NlZCB2aWEgYWN0aW9uc01hdGNoaW5nRXZlcnl0aGluZy4KICAgICAg
ICAgaWYgKCFkZmFTdGFydCkgewogICAgICAgICAgICAgd2hpbGUgKHByb2dyYW1Db3VudGVyIDwg
ZGZhQnl0ZWNvZGVMZW5ndGgpIHsKICAgICAgICAgICAgICAgICBERkFCeXRlY29kZUluc3RydWN0
aW9uIGluc3RydWN0aW9uID0gZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxl
bmd0aCwgcHJvZ3JhbUNvdW50ZXIpOwotICAgICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbiA9
PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCkK
LSAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0
aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5
bGVzaGVldCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKQotICAgICAgICAgICAgICAgICAgICBpbnRl
cnByZXRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGFjdGlvbnMsIGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uKQorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVj
dGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlv
bik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKQorICAgICAgICAgICAgICAgICAg
ICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CiAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZs
YWdzQW5kQXBwZW5kQWN0aW9uKQogICAgICAgICAgICAgICAgICAgICBpbnRlcnByZXRUZXN0Rmxh
Z3NBbmRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50ZXIsIGZsYWdzLCBhY3Rpb25zLCBmYWxzZSk7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKQorICAgICAgICAg
ICAgICAgICAgICBpbnRlcnByZXRUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24ocHJvZ3JhbUNvdW50
ZXIsIGZsYWdzLCBhY3Rpb25zLCB0cnVlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTk2LDcgKzE5Myw5IEBAIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAgICAgICAgICAgICAgICBy
ZXR1cm4gYWN0aW9uczsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJv
Z3JhbUNvdW50ZXIpICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbgotICAg
ICAgICAgICAgICAgICYmIGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5n
dGgsIHByb2dyYW1Db3VudGVyKSAhPSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NB
bmRBcHBlbmRBY3Rpb24sCisgICAgICAgICAgICAgICAgJiYgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRl
Y29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpICE9IERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbgorICAgICAgICAgICAgICAgICYmIGdl
dEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVy
KSAhPSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24KKyAg
ICAgICAgICAgICAgICAmJiBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVu
Z3RoLCBwcm9ncmFtQ291bnRlcikgIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdz
QW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluLAogICAgICAgICAgICAgICAgICJUcmlnZ2VycyB0
aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgc2hvdWxkIG9ubHkgYmUgaW4gdGhlIGZpcnN0IERGQS4iKTsK
ICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmgJKHJldmlzaW9uIDE4
NjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgQWN0aW9ucyBpbnRlcnByZXQoY29uc3QgQ1N0cmluZyYsIHVpbnQxNl90IGZsYWdzKTsK
ICAgICBBY3Rpb25zIGludGVycHJldFdpdGhEb21haW5zKGNvbnN0IENTdHJpbmcmLCB1aW50MTZf
dCBmbGFncywgY29uc3QgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyYgZG9tYWluQWN0
aW9ucyk7Ci0gICAgQWN0aW9ucyBhY3Rpb25zRm9yRGVmYXVsdFN0eWxlc2hlZXRGcm9tREZBUm9v
dCgpOworICAgIEFjdGlvbnMgYWN0aW9uc01hdGNoaW5nRXZlcnl0aGluZygpOwogCiBwcml2YXRl
OgogICAgIHZvaWQgaW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVuc2lnbmVkJiBwcm9ncmFtQ291bnRl
ciwgQWN0aW9ucyYsIGJvb2wgaWZEb21haW4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkSW5mby5oCShyZXZpc2lvbiAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw2IEBA
IHR5cGVkZWYgdWludDE2X3QgUmVzb3VyY2VGbGFnczsKIC8vIFRoZSB2YWx1ZXMgLTEgYW5kIC0y
IGFyZSB1c2VkIGZvciByZW1vdmVkIGFuZCBlbXB0eSB2YWx1ZXMgaW4gSGFzaFRhYmxlcy4KIGNv
bnN0IHVpbnQ2NF90IEFjdGlvbkZsYWdNYXNrID0gMHgwMDAwRkZGRjAwMDAwMDAwOwogY29uc3Qg
dWludDY0X3QgSWZEb21haW5GbGFnID0gMHgwMDAxMDAwMDAwMDAwMDAwOwotY29uc3QgdWludDY0
X3QgRGlzcGxheU5vbmVTdHlsZVNoZWV0RmxhZyA9IDB4MDAwMjAwMDAwMDAwMDAwMDsKIAogUmVz
b3VyY2VUeXBlIHRvUmVzb3VyY2VUeXBlKENhY2hlZFJlc291cmNlOjpUeXBlKTsKIHVpbnQxNl90
IHJlYWRSZXNvdXJjZVR5cGUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxODY5NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMiBAQAorMjAxNS0wNy0xNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIENhY2hlIGFjdGlv
bnMgd2l0aCBkb21haW5zIHRoYXQgbWF0Y2ggZXZlcnl0aGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MDUwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUuaDoKKwogMjAxNS0wNy0xNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdDIgcGFydCBvZiA8cmRhcjovL3Byb2JsZW0vMjE4
MDM3ODE+IFRoZSBleHRlcm5hbCBVUkwgcG9saWN5IGlzIG5vdCByZXBvcnRlZCBjb3JyZWN0bHkg
aW4gbmF2aWdhdGlvbiBhY3Rpb25zIHRoYXQgY3JlYXRlIG5ldyB3aW5kb3dzCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUuaAkocmV2aXNpb24gMTg2OTEzKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoaXMgc2hvdWxkIGJlIGlu
Y3JlbWVudGVkIGV2ZXJ5IHRpbWUgYSBmdW5jdGlvbmFsIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBi
eXRlY29kZSwgZmlsZSBmb3JtYXQsIGV0Yy4KICAgICAvLyB0byBwcmV2ZW50IGNyYXNoaW5nIHdo
aWxlIGxvYWRpbmcgb2xkIGRhdGEuCi0gICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IEN1cnJlbnRD
b250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gPSA1OworICAgIGNvbnN0IHN0YXRpYyB1aW50MzJf
dCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVWZXJzaW9uID0gNjsKIAogICAgIHN0YXRpYyBV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlJiBkZWZhdWx0U3RvcmUoKTsKICAgICBzdGF0aWMgUmVm
PFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU+IHN0b3JlV2l0aFBhdGgoY29uc3QgV1RGOjpTdHJp
bmcmIHN0b3JlUGF0aCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256996</attachid>
            <date>2015-07-17 15:14:44 -0700</date>
            <delta_ts>2015-07-17 15:16:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147050-20150717151334.patch</filename>
            <type>text/plain</type>
            <size>34275</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Njk2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE1LTA3LTE3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ2FjaGUgYWN0aW9ucyB3aXRoIGRvbWFpbnMgdGhhdCBtYXRjaCBldmVyeXRo
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcw
NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB5
b3UgaGF2ZSBsb3RzIG9mIHJ1bGVzIHdpdGggdHJpZ2dlcnMgbGlrZSB7InVybC1maWx0ZXIiOiIu
KiIsImlmLWRvbWFpbiI6WyIqd2Via2l0Lm9yZyJdfQorICAgICAgICB3ZSB3aWxsIHNwZW5kIGEg
bG90IG9mIHRpbWUgYWRkaW5nIHVubmVjZXNzYXJ5IGFjdGlvbnMgdG8gSGFzaFNldHMgd2hlbiB5
b3UgYXJlIG5vdCBvbiB3ZWJraXQub3JnLgorICAgICAgICBDYWNoaW5nIGFsbCB0aGUgcnVsZXMg
YW5kIG9ubHkgYWRkaW5nIHRoZW0gdG8gYSBjb2xsZWN0aW9uIG9uY2Ugd2hlbiB0aGUgZG9tYWlu
IGNoYW5nZXMgc2F2ZXMgYSBsb3Qgb2YgVVJMIGludGVycHJldGluZyB0aW1lLgorCisgICAgICAg
IFdlIGFscmVhZHkgaGFkIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIGNzcy1kaXNwbGF5LW5vbmUg
YWN0aW9ucyB3aXRoIHRyaWdnZXJzIHRoYXQgbWF0Y2hlZCBldmVyeXRoaW5nIHVzaW5nIGEgc3Bl
Y2lhbCBieXRlY29kZSBvcGVyYXRpb24uCisgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCBm
b3IgYSBzcGVjaWFsIGJ5dGVjb2RlIG9wZXJhdGlvbiBieSBjYWNoaW5nIHRoZSB0cmlnZ2VycyB0
aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgd2l0aCBhbmQgd2l0aG91dCBkb21haW5zLAorICAgICAgICB0
aGVuIGZyb20gdGhvc2UgY2FjaGVkIGFjdGlvbnMgd2UgY29tcGlsZSBhIHN0eWxlc2hlZXQsIGFu
ZCBjcmVhdGUgY2FjaGVkIGFjdGlvbnMgZm9yIGV2ZXJ5IG5ldyBkb21haW4gd2UgdmlzaXQuCisK
KyAgICAgICAgQWxsIGZ1bmN0aW9uYWxpdHkgaXMgY292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6fkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxE
aXNwbGF5Tm9uZVNlbGVjdG9ycyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6ZmluZEZpcnN0SWdub3Jl
UHJldmlvdXNSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpjYWNoZWREb21haW5B
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0
ZW5zaW9uOjp1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMpOgorICAgICAgICAqIGNvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpjb21waWxlZEV4dGVuc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6dW5pdmVyc2Fs
QWN0aW9uc1dpdGhvdXREb21haW5zKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25SdWxlOjpDb250ZW50RXh0ZW5zaW9uUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2VyaWFsaXpl
ZExlbmd0aCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2V0
RXh0ZW5zaW9uSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uOjpleHRlbnNpb25JZGVudGlmaWVyKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclJlc291
cmNlTG9hZCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRoQXJn
dW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNv
bXBpbGVyOjplbWl0QXBwZW5kQWN0aW9uKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc01hdGNo
aW5nRXZlcnl0aGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVmYXVsdFN0
eWxlc2hlZXRGcm9tREZBUm9vdCk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRJbmZvLmg6CisKIDIwMTUtMDctMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4K
IAogICAgICAgICBXZWJDb3JlIHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzIxODAzNzgxPiBUaGUg
ZXh0ZXJuYWwgVVJMIHBvbGljeSBpcyBub3QgcmVwb3J0ZWQgY29ycmVjdGx5IGluIG5hdmlnYXRp
b24gYWN0aW9ucyB0aGF0IGNyZWF0ZSBuZXcgd2luZG93cwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRl
bnNpb24uY3BwCShyZXZpc2lvbiAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwyNCArMzUsNiBAQCBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjp+Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCkKIHsKIH0KLQotVmVjdG9y
PFN0cmluZz4gQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxEaXNwbGF5Tm9uZVNlbGVj
dG9ycygpCi17Ci0gICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihmaWx0ZXJz
V2l0aG91dERvbWFpbnNCeXRlY29kZSgpLCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZUxl
bmd0aCgpKTsKLSAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIGFjdGlvbkxvY2F0
aW9ucyA9IGludGVycHJldGVyLmFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290
KCk7Ci0gICAgCi0gICAgVmVjdG9yPEFjdGlvbj4gZ2xvYmFsQWN0aW9uczsKLSAgICBmb3IgKHVp
bnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogYWN0aW9uTG9jYXRpb25zKQotICAgICAgICBnbG9iYWxB
Y3Rpb25zLmFwcGVuZChBY3Rpb246OmRlc2VyaWFsaXplKGFjdGlvbnMoKSwgYWN0aW9uc0xlbmd0
aCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uTG9jYXRpb24pKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFN0cmluZz4gc2VsZWN0b3JzOwotICAgIGZvciAoQWN0aW9uJiBhY3Rpb24gOiBnbG9i
YWxBY3Rpb25zKSB7Ci0gICAgICAgIGlmIChhY3Rpb24udHlwZSgpID09IEFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IpCi0gICAgICAgICAgICBzZWxlY3RvcnMuYXBwZW5kKGFjdGlv
bi5zdHJpbmdBcmd1bWVudCgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNlbGVjdG9yczsK
LX0KICAgICAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxl
ZENvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uaAkocmV2aXNpb24gMTg2OTEzKQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdW5zaWduZWQgZG9tYWluRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgY29uc3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIFZl
Y3RvcjxTdHJpbmc+IGdsb2JhbERpc3BsYXlOb25lU2VsZWN0b3JzKCk7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDE4Njkx
MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyOCArNDQsNTggQEAgUmVmUHRyPENvbnRlbnRFeHRl
bnNpb24+IENvbnRlbnRFeHRlbnNpbwogQ29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+
JiYgY29tcGlsZWRFeHRlbnNpb24pCiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAg
ICAsIG1fY29tcGlsZWRFeHRlbnNpb24oV1RGOjptb3ZlKGNvbXBpbGVkRXh0ZW5zaW9uKSkKLSAg
ICAsIG1fcGFyc2VkR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KGZhbHNlKQogeworICAgIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIgd2l0aG91dERvbWFpbnMobV9jb21waWxlZEV4dGVuc2lvbi0+
ZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwgbV9jb21waWxlZEV4dGVuc2lvbi0+Zmls
dGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7CisgICAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlciB3aXRoRG9tYWlucyhtX2NvbXBpbGVkRXh0ZW5zaW9uLT5maWx0ZXJzV2l0aERvbWFp
bnNCeXRlY29kZSgpLCBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5maWx0ZXJzV2l0aERvbWFpbnNCeXRl
Y29kZUxlbmd0aCgpKTsKKyAgICBjb3B5VG9WZWN0b3Iod2l0aG91dERvbWFpbnMuYWN0aW9uc01h
dGNoaW5nRXZlcnl0aGluZygpLCBtX3VuaXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucyk7Cisg
ICAgY29weVRvVmVjdG9yKHdpdGhEb21haW5zLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKSwg
bV91bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMpOwogfQogCit1aW50MzJfdCBDb250ZW50RXh0
ZW5zaW9uOjpmaW5kRmlyc3RJZ25vcmVQcmV2aW91c1J1bGVzKCkgY29uc3QKK3sKKyAgICBhdXRv
KiBhY3Rpb25zID0gbV9jb21waWxlZEV4dGVuc2lvbi0+YWN0aW9ucygpOworICAgIHVpbnQzMl90
IGFjdGlvbnNMZW5ndGggPSBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5hY3Rpb25zTGVuZ3RoKCk7Cisg
ICAgdWludDMyX3QgY3VycmVudEFjdGlvbkluZGV4ID0gMDsKKyAgICB3aGlsZSAoY3VycmVudEFj
dGlvbkluZGV4IDwgYWN0aW9uc0xlbmd0aCkgeworICAgICAgICBpZiAoQWN0aW9uOjpkZXNlcmlh
bGl6ZVR5cGUoYWN0aW9ucywgYWN0aW9uc0xlbmd0aCwgY3VycmVudEFjdGlvbkluZGV4KSA9PSBB
Y3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRBY3Rpb25JbmRleDsKKyAgICAgICAgY3VycmVudEFjdGlvbkluZGV4ICs9IEFjdGlvbjo6c2Vy
aWFsaXplZExlbmd0aChhY3Rpb25zLCBhY3Rpb25zTGVuZ3RoLCBjdXJyZW50QWN0aW9uSW5kZXgp
OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
OworfQorICAgIAogU3R5bGVTaGVldENvbnRlbnRzKiBDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxE
aXNwbGF5Tm9uZVN0eWxlU2hlZXQoKQogewogICAgIGlmIChtX3BhcnNlZEdsb2JhbERpc3BsYXlO
b25lU3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIG1fZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNo
ZWV0LmdldCgpOwotCiAgICAgbV9wYXJzZWRHbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQgPSB0
cnVlOwogCi0gICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0b3JzID0gbV9jb21waWxlZEV4dGVuc2lv
bi0+Z2xvYmFsRGlzcGxheU5vbmVTZWxlY3RvcnMoKTsKLSAgICBpZiAoc2VsZWN0b3JzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgdWludDMyX3QgZmlyc3RJZ25vcmVQ
cmV2aW91c1J1bGVzID0gZmluZEZpcnN0SWdub3JlUHJldmlvdXNSdWxlcygpOworICAgIAorICAg
IGF1dG8qIGFjdGlvbnMgPSBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5hY3Rpb25zKCk7CisgICAgdWlu
dDMyX3QgYWN0aW9uc0xlbmd0aCA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmFjdGlvbnNMZW5ndGgo
KTsKIAorICAgIGF1dG8gaW5HbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQgPSBbJl0oY29uc3Qg
dWludDMyX3QgbG9jYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gbG9jYXRpb24gPCBmaXJz
dElnbm9yZVByZXZpb3VzUnVsZXMgJiYgQWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUoYWN0aW9ucywg
YWN0aW9uc0xlbmd0aCwgbG9jYXRpb24pID09IEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3I7CisgICAgfTsKKyAgICAKICAgICBTdHJpbmdCdWlsZGVyIGNzczsKLSAgICBmb3IgKGF1
dG8mIHNlbGVjdG9yIDogc2VsZWN0b3JzKSB7Ci0gICAgICAgIGNzcy5hcHBlbmQoc2VsZWN0b3Ip
OwotICAgICAgICBjc3MuYXBwZW5kKCJ7Iik7Ci0gICAgICAgIGNzcy5hcHBlbmQoQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjpkaXNwbGF5Tm9uZUNTU1J1bGUoKSk7Ci0gICAgICAgIGNzcy5hcHBl
bmQoIn0iKTsKKyAgICBmb3IgKHVpbnQzMl90IHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9uIDogbV91
bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMpIHsKKyAgICAgICAgaWYgKGluR2xvYmFsRGlz
cGxheU5vbmVTdHlsZVNoZWV0KHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9uKSkgeworICAgICAgICAg
ICAgQWN0aW9uIGFjdGlvbiA9IEFjdGlvbjo6ZGVzZXJpYWxpemUoYWN0aW9ucywgYWN0aW9uc0xl
bmd0aCwgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb24pOworICAgICAgICAgICAgQVNTRVJUKGFjdGlv
bi50eXBlKCkgPT0gQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvcik7CisgICAgICAg
ICAgICBjc3MuYXBwZW5kKGFjdGlvbi5zdHJpbmdBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGNz
cy5hcHBlbmQoInsiKTsKKyAgICAgICAgICAgIGNzcy5hcHBlbmQoQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kOjpkaXNwbGF5Tm9uZUNTU1J1bGUoKSk7CisgICAgICAgICAgICBjc3MuYXBwZW5kKCJ9
Iik7CisgICAgICAgIH0KICAgICB9CisgICAgaWYgKGNzcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgIC8vIFRoZXNlIGFjdGlvbnMgZG9uJ3QgbmVlZCB0byBi
ZSBhcHBsaWVkIGluZGl2aWR1YWxseSBhbnkgbW9yZS4gVGhleSB3aWxsIGFsbCBiZSBhcHBsaWVk
IHRvIGV2ZXJ5IHBhZ2UgYXMgYSBwcmVjb21waWxlZCBzdHlsZSBzaGVldC4KKyAgICBtX3VuaXZl
cnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucy5yZW1vdmVBbGxNYXRjaGluZyhpbkdsb2JhbERpc3Bs
YXlOb25lU3R5bGVTaGVldCk7CiAKICAgICBtX2dsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCA9
IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCk7CiAgICAgbV9nbG9iYWxEaXNwbGF5Tm9uZVN0
eWxlU2hlZXQtPnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7CkBAIC04NSwxMCArMTE1LDI0IEBA
IGNvbnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIEMKICAgICAgICAgbV9jYWNo
ZWREb21haW5BY3Rpb25zLmNsZWFyKCk7CiAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uIDog
ZG9tYWluQWN0aW9ucykKICAgICAgICAgICAgIG1fY2FjaGVkRG9tYWluQWN0aW9ucy5hZGQoYWN0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fY2FjaGVkVW5pdmVyc2FsRG9tYWluQWN0aW9ucy5j
bGVhcigpOworICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG1fdW5pdmVyc2FsQWN0aW9u
c1dpdGhEb21haW5zKSB7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKChhY3Rpb24g
JiB+SWZEb21haW5GbGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uKSwgIlVuaXZl
cnNhbCBhY3Rpb25zIHdpdGggZG9tYWlucyBzaG91bGQgbm90IGhhdmUgZmxhZ3MuIik7CisgICAg
ICAgICAgICBpZiAoISEoYWN0aW9uICYgSWZEb21haW5GbGFnKSA9PSBtX2NhY2hlZERvbWFpbkFj
dGlvbnMuY29udGFpbnMoYWN0aW9uKSkKKyAgICAgICAgICAgICAgICBtX2NhY2hlZFVuaXZlcnNh
bERvbWFpbkFjdGlvbnMuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb24pKTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9jYWNoZWREb21haW4gPSBkb21haW47CiAgICAg
fQogICAgIHJldHVybiBtX2NhY2hlZERvbWFpbkFjdGlvbnM7CiB9CisKK2NvbnN0IFZlY3Rvcjx1
aW50MzJfdD4mIENvbnRlbnRFeHRlbnNpb246OnVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucyhj
b25zdCBTdHJpbmcmIGRvbWFpbikKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChk
b21haW4sIGRvbWFpbiA9PSBtX2NhY2hlZERvbWFpbiwgInVuaXZlcnNhbFdpdGhEb21haW5zIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCByaWdodCBhZnRlciBjYWNoZWREb21haW5BY3Rpb25zIHdpdGgg
dGhlIHNhbWUgZG9tYWluLCBzbyB0aGUgY2FjaGUgc2hvdWxkIGF3YXlzIGJlIGNvcnJlY3QiKTsK
KyAgICByZXR1cm4gbV9jYWNoZWRVbml2ZXJzYWxEb21haW5BY3Rpb25zOworfQogICAgIAogfSAv
LyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uLmgJKHJldmlzaW9uIDE4NjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTcgKzQ5LDI0
IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBpbGVk
RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxlZEV4dGVuc2lvbi5nZXQoKTsgfQog
ICAgIFN0eWxlU2hlZXRDb250ZW50cyogZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KCk7CiAg
ICAgY29uc3QgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyYgY2FjaGVkRG9tYWluQWN0
aW9ucyhjb25zdCBTdHJpbmcmIGRvbWFpbik7CisgICAgY29uc3QgVmVjdG9yPHVpbnQzMl90PiYg
dW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zKCkgeyByZXR1cm4gbV91bml2ZXJzYWxBY3Rp
b25zV2l0aG91dERvbWFpbnM7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB1bml2ZXJz
YWxBY3Rpb25zV2l0aERvbWFpbnMoY29uc3QgU3RyaW5nJiBkb21haW4pOwogCiBwcml2YXRlOgog
ICAgIENvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZWY8Q29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKLQorICAgIHVpbnQzMl90IGZpbmRGaXJzdElnbm9yZVBy
ZXZpb3VzUnVsZXMoKSBjb25zdDsKKyAgICAKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAg
IFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IG1fY29tcGlsZWRFeHRlbnNpb247CiAgICAg
UmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gbV9nbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ7
Ci0gICAgYm9vbCBtX3BhcnNlZEdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldDsKKyAgICBib29s
IG1fcGFyc2VkR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0IHsgZmFsc2UgfTsKICAgICAKICAg
ICBTdHJpbmcgbV9jYWNoZWREb21haW47CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0
aW9ucyBtX2NhY2hlZERvbWFpbkFjdGlvbnM7CisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2NhY2hl
ZFVuaXZlcnNhbERvbWFpbkFjdGlvbnM7CisKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fdW5pdmVy
c2FsQWN0aW9uc1dpdGhvdXREb21haW5zOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbV91bml2ZXJz
YWxBY3Rpb25zV2l0aERvbWFpbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODY5MTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsMTEgKzI2Nyw2IEBAIHN0ZDo6ZXJyb3JfY29k
ZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAgICAgICAgIEFTU0VSVCh0cmlnZ2VyLmRv
bWFpbkNvbmRpdGlvbiA9PSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246Ok5vbmUpOwogICAgICAg
ICAgICAgc3RhdHVzID0gZmlsdGVyc1dpdGhvdXREb21haW5QYXJzZXIuYWRkUGF0dGVybih0cmln
Z2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxv
Y2F0aW9uQW5kRmxhZ3MpOwogICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJz
ZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpZ25vcmVQcmV2
aW91c1J1bGVzU2VlbgotICAgICAgICAgICAgICAgICAgICAmJiB0cmlnZ2VyLmRvbWFpbkNvbmRp
dGlvbiA9PSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246Ok5vbmUKLSAgICAgICAgICAgICAgICAg
ICAgJiYgYWN0aW9uLnR5cGUoKSA9PSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
Ci0gICAgICAgICAgICAgICAgICAgICYmICF0cmlnZ2VyLmZsYWdzKQotICAgICAgICAgICAgICAg
ICAgICBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzIHw9IERpc3BsYXlOb25lU3R5bGVTaGVldEZsYWc7
CiAgICAgICAgICAgICAgICAgdW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zLmFkZChhY3Rp
b25Mb2NhdGlvbkFuZEZsYWdzKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBVUkxGaWx0ZXJQ
YXJzZXI6Ok9rOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmNwcAkocmV2aXNp
b24gMTg2OTEzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvblJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw5IEBAIENvbnRlbnRF
eHRlbnNpb25SdWxlOjpDb250ZW50RXh0ZW5zaW9uUnUKICAgICBBU1NFUlQoIW1fdHJpZ2dlci51
cmxGaWx0ZXIuaXNFbXB0eSgpKTsKIH0KIAotQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29u
c3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVuc2lnbmVkIGFjdGlvbnNM
ZW5ndGgsIHVuc2lnbmVkIGxvY2F0aW9uKQorQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29u
c3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVpbnQzMl90IGFjdGlvbnNM
ZW5ndGgsIHVpbnQzMl90IGxvY2F0aW9uKQogeworICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9u
IDwgYWN0aW9uc0xlbmd0aCk7CiAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxBY3Rpb25UeXBlPihh
Y3Rpb25zW2xvY2F0aW9uXSkpIHsKICAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2llczoK
ICAgICAgICAgcmV0dXJuIEFjdGlvbihBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIGxvY2F0aW9u
KTsKQEAgLTQ5LDEwICs1MCwxMSBAQCBBY3Rpb24gQWN0aW9uOjpkZXNlcmlhbGl6ZShjb25zdCBT
ZXJpYWxpCiAgICAgY2FzZSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzOgogICAgICAg
ICByZXR1cm4gQWN0aW9uKEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXMsIGxvY2F0aW9u
KTsKICAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3I6IHsKLSAgICAg
ICAgdW5zaWduZWQgc3RyaW5nU3RhcnRJbmRleCA9IGxvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5
cGUpICsgc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihib29sKTsKKyAgICAgICAgdWludDMyX3Qg
aGVhZGVyTGVuZ3RoID0gc2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVpbnQzMl90KSArIHNp
emVvZihib29sKTsKKyAgICAgICAgdWludDMyX3Qgc3RyaW5nU3RhcnRJbmRleCA9IGxvY2F0aW9u
ICsgaGVhZGVyTGVuZ3RoOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhY3Rpb25zTGVuZ3RoID49
IHN0cmluZ1N0YXJ0SW5kZXgpOwotICAgICAgICB1bnNpZ25lZCBzZWxlY3Rvckxlbmd0aCA9ICpy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oJmFjdGlvbnNbbG9jYXRpb24gKyBzaXpl
b2YoQWN0aW9uVHlwZSldKTsKLSAgICAgICAgYm9vbCB3aWRlQ2hhcmFjdGVycyA9IGFjdGlvbnNb
bG9jYXRpb24gKyBzaXplb2YoQWN0aW9uVHlwZSkgKyBzaXplb2YodW5zaWduZWQpXTsKKyAgICAg
ICAgdWludDMyX3Qgc2VsZWN0b3JMZW5ndGggPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCo+KCZhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpXSk7CisgICAgICAg
IGJvb2wgd2lkZUNoYXJhY3RlcnMgPSBhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5
cGUpICsgc2l6ZW9mKHVpbnQzMl90KV07CiAgICAgICAgIAogICAgICAgICBpZiAod2lkZUNoYXJh
Y3RlcnMpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjdGlvbnNMZW5ndGggPj0gc3Ry
aW5nU3RhcnRJbmRleCArIHNlbGVjdG9yTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CkBAIC02Mywx
MiArNjUsNTUgQEAgQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29uc3QgU2VyaWFsaQogICAg
IH0KICAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU3R5bGVTaGVldDoKICAgICBj
YXNlIEFjdGlvblR5cGU6OkludmFsaWRBY3Rpb246CisgICAgZGVmYXVsdDoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiB9Ci0KKyAgICAKK0FjdGlvblR5cGUg
QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUoY29uc3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlv
bnMsIGNvbnN0IHVpbnQzMl90IGFjdGlvbnNMZW5ndGgsIHVpbnQzMl90IGxvY2F0aW9uKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uIDwgYWN0aW9uc0xlbmd0aCk7CisgICAgQWN0aW9u
VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QWN0aW9uVHlwZT4oYWN0aW9uc1tsb2NhdGlvbl0pOwor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzOgor
ICAgIGNhc2UgQWN0aW9uVHlwZTo6QmxvY2tMb2FkOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdu
b3JlUHJldmlvdXNSdWxlczoKKyAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3I6CisgICAgICAgIHJldHVybiB0eXBlOworICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTdHlsZVNoZWV0OgorICAgIGNhc2UgQWN0aW9uVHlwZTo6SW52YWxpZEFjdGlvbjoK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKyAgICAKK3VpbnQzMl90IEFjdGlvbjo6c2VyaWFsaXplZExlbmd0aChjb25zdCBTZXJp
YWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdWludDMyX3QgYWN0aW9uc0xlbmd0aCwg
dWludDMyX3QgbG9jYXRpb24pCit7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxBY3Rpb25UeXBl
PihhY3Rpb25zW2xvY2F0aW9uXSkpIHsKKyAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2ll
czoKKyAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKKyAgICBjYXNlIEFjdGlvblR5cGU6
Oklnbm9yZVByZXZpb3VzUnVsZXM6CisgICAgICAgIHJldHVybiBzaXplb2YoQWN0aW9uVHlwZSk7
CisgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOiB7CisgICAgICAg
IHVpbnQzMl90IGhlYWRlckxlbmd0aCA9IHNpemVvZihBY3Rpb25UeXBlKSArIHNpemVvZih1aW50
MzJfdCkgKyBzaXplb2YoYm9vbCk7CisgICAgICAgIHVpbnQzMl90IHN0cmluZ1N0YXJ0SW5kZXgg
PSBsb2NhdGlvbiArIGhlYWRlckxlbmd0aDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWN0aW9u
c0xlbmd0aCA+PSBzdHJpbmdTdGFydEluZGV4KTsKKyAgICAgICAgdWludDMyX3Qgc2VsZWN0b3JM
ZW5ndGggPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KCZhY3Rpb25zW2xvY2F0
aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpXSk7CisgICAgICAgIGJvb2wgd2lkZUNoYXJhY3RlcnMg
PSBhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVpbnQzMl90
KV07CisgICAgICAgIAorICAgICAgICBpZiAod2lkZUNoYXJhY3RlcnMpCisgICAgICAgICAgICBy
ZXR1cm4gaGVhZGVyTGVuZ3RoICsgc2VsZWN0b3JMZW5ndGggKiBzaXplb2YoVUNoYXIpOworICAg
ICAgICByZXR1cm4gaGVhZGVyTGVuZ3RoICsgc2VsZWN0b3JMZW5ndGggKiBzaXplb2YoTENoYXIp
OworICAgIH0KKyAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU3R5bGVTaGVldDoK
KyAgICBjYXNlIEFjdGlvblR5cGU6OkludmFsaWRBY3Rpb246CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKK30gLy8gbmFtZXNw
YWNlIENvbnRlbnRFeHRlbnNpb25zCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJKHJldmlz
aW9uIDE4NjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25SdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDkgQEAgc3RydWN0IEFj
dGlvbiB7CiAgICAgICAgICAgICAmJiBtX3N0cmluZ0FyZ3VtZW50ID09IG90aGVyLm1fc3RyaW5n
QXJndW1lbnQ7CiAgICAgfQogCi0gICAgc3RhdGljIEFjdGlvbiBkZXNlcmlhbGl6ZShjb25zdCBT
ZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0
aCwgdWludDMyX3QgbG9jYXRpb24pOworICAgIHN0YXRpYyBBY3Rpb24gZGVzZXJpYWxpemUoY29u
c3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVpbnQzMl90IGFjdGlvbnNM
ZW5ndGgsIHVpbnQzMl90IGxvY2F0aW9uKTsKKyAgICBzdGF0aWMgQWN0aW9uVHlwZSBkZXNlcmlh
bGl6ZVR5cGUoY29uc3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVpbnQz
Ml90IGFjdGlvbnNMZW5ndGgsIHVpbnQzMl90IGxvY2F0aW9uKTsKKyAgICBzdGF0aWMgdWludDMy
X3Qgc2VyaWFsaXplZExlbmd0aChjb25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywg
Y29uc3QgdWludDMyX3QgYWN0aW9uc0xlbmd0aCwgdWludDMyX3QgbG9jYXRpb24pOwogCiAgICAg
dm9pZCBzZXRFeHRlbnNpb25JZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uSWRlbnRp
ZmllcikgeyBtX2V4dGVuc2lvbklkZW50aWZpZXIgPSBleHRlbnNpb25JZGVudGlmaWVyOyB9CiAg
ICAgY29uc3QgU3RyaW5nJiBleHRlbnNpb25JZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9l
eHRlbnNpb25JZGVudGlmaWVyOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHJl
dmlzaW9uIDE4NjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDIwICs5MiwyNyBA
QCBWZWN0b3I8QWN0aW9uPiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6CiAgICAgICAgIERGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXIgd2l0aG91dERvbWFpbnNJbnRlcnByZXRlcihjb21waWxlZEV4dGVu
c2lvbi5maWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVuc2lvbi5m
aWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZUxlbmd0aCgpKTsKICAgICAgICAgREZBQnl0ZWNv
ZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB3aXRob3V0RG9tYWluc0FjdGlvbnMgPSB3aXRob3V0RG9t
YWluc0ludGVycHJldGVyLmludGVycHJldCh1cmxDU3RyaW5nLCBmbGFncyk7CiAgICAgICAgIAor
ICAgICAgICBTdHJpbmcgZG9tYWluID0gcmVzb3VyY2VMb2FkSW5mby5tYWluRG9jdW1lbnRVUkwu
aG9zdCgpOwogICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIHdpdGhEb21haW5zSW50ZXJw
cmV0ZXIoY29tcGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoKSwgY29t
cGlsZWRFeHRlbnNpb24uZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7Ci0gICAg
ICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgd2l0aERvbWFpbnNBY3Rpb25zID0g
d2l0aERvbWFpbnNJbnRlcnByZXRlci5pbnRlcnByZXRXaXRoRG9tYWlucyh1cmxDU3RyaW5nLCBm
bGFncywgY29udGVudEV4dGVuc2lvbi0+Y2FjaGVkRG9tYWluQWN0aW9ucyhyZXNvdXJjZUxvYWRJ
bmZvLm1haW5Eb2N1bWVudFVSTC5ob3N0KCkpKTsKKyAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlcjo6QWN0aW9ucyB3aXRoRG9tYWluc0FjdGlvbnMgPSB3aXRoRG9tYWluc0ludGVycHJldGVy
LmludGVycHJldFdpdGhEb21haW5zKHVybENTdHJpbmcsIGZsYWdzLCBjb250ZW50RXh0ZW5zaW9u
LT5jYWNoZWREb21haW5BY3Rpb25zKGRvbWFpbikpOwogICAgICAgICAKICAgICAgICAgY29uc3Qg
U2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMgPSBjb21waWxlZEV4dGVuc2lvbi5hY3Rpb25z
KCk7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGFjdGlvbnNMZW5ndGggPSBjb21waWxlZEV4dGVu
c2lvbi5hY3Rpb25zTGVuZ3RoKCk7CiAgICAgICAgIAogICAgICAgICBib29sIHNhd0lnbm9yZVBy
ZXZpb3VzUnVsZXMgPSBmYWxzZTsKLSAgICAgICAgaWYgKCF3aXRob3V0RG9tYWluc0FjdGlvbnMu
aXNFbXB0eSgpIHx8ICF3aXRoRG9tYWluc0FjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNv
bnN0IFZlY3Rvcjx1aW50MzJfdD4mIHVuaXZlcnNhbFdpdGhEb21haW5zID0gY29udGVudEV4dGVu
c2lvbi0+dW5pdmVyc2FsQWN0aW9uc1dpdGhEb21haW5zKGRvbWFpbik7CisgICAgICAgIGNvbnN0
IFZlY3Rvcjx1aW50MzJfdD4mIHVuaXZlcnNhbFdpdGhvdXREb21haW5zID0gY29udGVudEV4dGVu
c2lvbi0+dW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zKCk7CisgICAgICAgIGlmICghd2l0
aG91dERvbWFpbnNBY3Rpb25zLmlzRW1wdHkoKSB8fCAhd2l0aERvbWFpbnNBY3Rpb25zLmlzRW1w
dHkoKSB8fCAhdW5pdmVyc2FsV2l0aERvbWFpbnMuaXNFbXB0eSgpIHx8ICF1bml2ZXJzYWxXaXRo
b3V0RG9tYWlucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50MzJfdD4gYWN0
aW9uTG9jYXRpb25zOwotICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkod2l0aG91dERvbWFpbnNBY3Rpb25zLnNpemUoKSArIHdpdGhEb21haW5zQWN0aW9u
cy5zaXplKCkpOworICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkod2l0aG91dERvbWFpbnNBY3Rpb25zLnNpemUoKSArIHdpdGhEb21haW5zQWN0aW9ucy5z
aXplKCkgKyB1bml2ZXJzYWxXaXRob3V0RG9tYWlucy5zaXplKCkgKyB1bml2ZXJzYWxXaXRoRG9t
YWlucy5zaXplKCkpOwogICAgICAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbiA6
IHdpdGhvdXREb21haW5zQWN0aW9ucykKICAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMu
dW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb25Mb2NhdGlvbikpOwog
ICAgICAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbiA6IHdpdGhEb21haW5zQWN0
aW9ucykKICAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMudW5jaGVja2VkQXBwZW5kKHN0
YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb25Mb2NhdGlvbikpOworICAgICAgICAgICAgZm9yICh1
aW50MzJfdCBhY3Rpb25Mb2NhdGlvbiA6IHVuaXZlcnNhbFdpdGhvdXREb21haW5zKQorICAgICAg
ICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy51bmNoZWNrZWRBcHBlbmQoYWN0aW9uTG9jYXRpb24p
OworICAgICAgICAgICAgZm9yICh1aW50MzJfdCBhY3Rpb25Mb2NhdGlvbiA6IHVuaXZlcnNhbFdp
dGhEb21haW5zKQorICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy51bmNoZWNrZWRBcHBl
bmQoYWN0aW9uTG9jYXRpb24pOwogICAgICAgICAgICAgc3RkOjpzb3J0KGFjdGlvbkxvY2F0aW9u
cy5iZWdpbigpLCBhY3Rpb25Mb2NhdGlvbnMuZW5kKCkpOwogCiAgICAgICAgICAgICAvLyBBZGQg
YWN0aW9ucyBpbiByZXZlcnNlIG9yZGVyIHRvIHByb3Blcmx5IGRlYWwgd2l0aCBJZ25vcmVQcmV2
aW91c1J1bGVzLgpAQCAtMTI2LDcgKzEzMyw3IEBAIFZlY3RvcjxBY3Rpb24+IENvbnRlbnRFeHRl
bnNpb25zQmFja2VuZDoKICAgICB9CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNF
X1JFUE9SVElORwogICAgIGRvdWJsZSBhZGRlZFRpbWVFbmQgPSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKTsKLSAgICBXVEZMb2dBbHdheXMoIlRpbWUgYWRkZWQ6ICVmIG1pY3Jvc2Vjb25k
cyAlcyIsIChhZGRlZFRpbWVFbmQgLSBhZGRlZFRpbWVTdGFydCkgKiAxLjBlNiwgcmVzb3VyY2VM
b2FkSW5mby5yZXNvdXJjZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBkYXRhTG9n
RigiVGltZSBhZGRlZDogJWYgbWljcm9zZWNvbmRzICVzIFxuIiwgKGFkZGVkVGltZUVuZCAtIGFk
ZGVkVGltZVN0YXJ0KSAqIDEuMGU2LCByZXNvdXJjZUxvYWRJbmZvLnJlc291cmNlVVJMLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZpbmFsQWN0aW9uczsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUu
aAkocmV2aXNpb24gMTg2OTEzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBQnl0ZWNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjEgKzU1LDIwIEBAIGVudW0gY2xh
c3MgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiA6IHVpbnQKICAgICAvLyBBcHBlbmRBY3Rpb24gaGFz
IG9uZSBhcmd1bWVudDoKICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCiAg
ICAgQXBwZW5kQWN0aW9uID0gMHg0LAotICAgIEFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0
ID0gMHg1LAotICAgIEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbiA9IDB4NiwKKyAgICBBcHBlbmRB
Y3Rpb25XaXRoSWZEb21haW4gPSAweDUsCiAgICAgCiAgICAgLy8gVGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uIGhhcyB0d28gYXJndW1lbnRzOgogICAgIC8vIFRoZSBmbGFncyB0byBjaGVjayBiZWZv
cmUgYXBwZW5kaW5nICgyIGJ5dGVzKS4KICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBi
eXRlcykuCi0gICAgVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uID0gMHg3LAotICAgIFRlc3RGbGFn
c0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbiA9IDB4OCwKKyAgICBUZXN0RmxhZ3NBbmRBcHBl
bmRBY3Rpb24gPSAweDYsCisgICAgVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWlu
ID0gMHg3LAogCiAgICAgLy8gVGVybWluYXRlIGhhcyBubyBhcmd1bWVudHMuCi0gICAgVGVybWlu
YXRlID0gMHg5LAorICAgIFRlcm1pbmF0ZSA9IDB4OCwKIAogICAgIC8vIEp1bXAgaGFzIG9uZSBh
cmd1bWVudDoKICAgICAvLyBUaGUgZGlzdGFuY2UgdG8ganVtcCAoMS00IGJ5dGVzLCBzaWduZWQp
LgotICAgIEp1bXAgPSAweEEsCisgICAgSnVtcCA9IDB4OSwKIH07CiAKIC8vIFRoZSBsYXN0IGZv
dXIgYml0cyBjb250YWluIHRoZSBpbnN0cnVjdGlvbiB0eXBlLgpAQCAtMTEwLDcgKzEwOSw2IEBA
IHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluc3RydWN0aW9uU2l6ZVdpdGgKICAgICBjYXNlIERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXA6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIFZhcmlhYmxlIGluc3RydWN0aW9uIHNpemUuCiAgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb246Ci0gICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldDoKICAgICBjYXNlIERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbjoKICAgICAgICAgcmV0dXJuIHNp
emVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MzJfdCk7CiAgICAgY2Fz
ZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb246CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTg2OTEzKQorKysgU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDcgKzgxLDYgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aQog
ewogICAgIC8vIEhpZ2ggYml0cyBhcmUgdXNlZCB0byBzdG9yZSBmbGFncy4gU2VlIGNvbXBpbGVS
dWxlTGlzdC4KICAgICBpZiAoYWN0aW9uICYgQWN0aW9uRmxhZ01hc2spIHsKLSAgICAgICAgQVNT
RVJUKCEoYWN0aW9uICYgRGlzcGxheU5vbmVTdHlsZVNoZWV0RmxhZykpOwogICAgICAgICBpZiAo
YWN0aW9uICYgSWZEb21haW5GbGFnKQogICAgICAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0Fu
ZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CiAgICAgICAgIGVsc2UKQEAgLTg5LDEwICs4OCw3
IEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGkKICAgICAgICAgYXBw
ZW5kPHVpbnQxNl90PihtX2J5dGVjb2RlLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oYWN0aW9uID4+
IDMyKSk7CiAgICAgICAgIGFwcGVuZDx1aW50MzJfdD4obV9ieXRlY29kZSwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGFjdGlvbikpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChhY3Rpb24gJiBE
aXNwbGF5Tm9uZVN0eWxlU2hlZXRGbGFnKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
KGFjdGlvbiAmIElmRG9tYWluRmxhZykpOwotICAgICAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFj
dGlvbkRlZmF1bHRTdHlsZXNoZWV0KTsKLSAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gJiBJZkRv
bWFpbkZsYWcpCisgICAgICAgIGlmIChhY3Rpb24gJiBJZkRvbWFpbkZsYWcpCiAgICAgICAgICAg
ICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVy
LmNwcAkocmV2aXNpb24gMTg2OTEzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDE1ICs5
NiwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hlc0RvbWFpbih1aW50NjRfCiB2b2lkIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldEFwcGVuZEFjdGlvbih1aW50MzJfdCYgcHJv
Z3JhbUNvdW50ZXIsIEFjdGlvbnMmIGFjdGlvbnMsIGJvb2wgaWZEb21haW4pCiB7CiAgICAgQVNT
RVJUKGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24KLSAgICAgICAg
fHwgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNv
dW50ZXIpID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFp
bgotICAgICAgICB8fCBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3Ro
LCBwcm9ncmFtQ291bnRlcikgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9u
RGVmYXVsdFN0eWxlc2hlZXQpOworICAgICAgICB8fCBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2Rl
LCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgPT0gREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKICAgICB1aW50NjRfdCBhY3Rpb24gPSAo
aWZEb21haW4gPyBJZkRvbWFpbkZsYWcgOiAwKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRC
aXRzPHVpbnQzMl90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRl
ciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSkpOwogICAgIGlmICghbV9kb21haW5B
Y3Rpb25zIHx8IG1hdGNoZXNEb21haW4oYWN0aW9uLCAqbV9kb21haW5BY3Rpb25zKSkKICAgICAg
ICAgYWN0aW9ucy5hZGQoYWN0aW9uKTsKICAgICAKICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0
cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFj
dGlvbik7CiAgICAgQVNTRVJUKGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1l
bnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikpOwot
ICAgIEFTU0VSVChpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkFwcGVuZEFjdGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFC
eXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCkpOwogfQog
CiB2b2lkIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVu
ZEFjdGlvbih1aW50MzJfdCYgcHJvZ3JhbUNvdW50ZXIsIHVpbnQxNl90IGZsYWdzLCBBY3Rpb25z
JiBhY3Rpb25zLCBib29sIGlmRG9tYWluKQpAQCAtMTI4LDcgKzEyNiw3IEBAIHZvaWQgREZBQnl0
ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGUKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25TaXpl
V2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRB
Y3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKSk7CiB9CiAKLURGQUJ5
dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9u
c0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3QoKQorREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6QWN0aW9ucyBERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zTWF0Y2hpbmdFdmVyeXRo
aW5nKCkKIHsKICAgICBBY3Rpb25zIGFjdGlvbnM7CiAKQEAgLTEzOCwxOSArMTM2LDE2IEBAIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKIAogICAgIHdoaWxlIChwcm9n
cmFtQ291bnRlciA8IGRmYUJ5dGVjb2RlTGVuZ3RoKSB7CiAgICAgICAgIERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVj
b2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcik7Ci0gICAgICAgIGlmIChpbnN0cnVjdGlvbiA9PSBE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCkKKyAg
ICAgICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFj
dGlvbikKICAgICAgICAgICAgIGludGVycHJldEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwg
YWN0aW9ucywgZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pCi0gICAgICAgICAgICBwcm9ncmFtQ291bnRl
ciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OkFwcGVuZEFjdGlvbik7CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikKKyAgICAgICAgICAgIGlu
dGVycHJldEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwgYWN0aW9ucywgdHJ1ZSk7CiAgICAg
ICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RG
bGFnc0FuZEFwcGVuZEFjdGlvbikKICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3Ry
dWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdz
QW5kQXBwZW5kQWN0aW9uKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBhY3Rpb25z
Rm9yRGVmYXVsdFN0eWxlc2hlZXRGcm9tREZBUm9vdCBzaG91bGQgb25seSBiZSBjYWxsZWQgb24g
dGhlIERGQSB3aXRob3V0IGRvbWFpbnMsCi0gICAgICAgICAgICAvLyB3aGljaCBzaG91bGQgbmV2
ZXIgaGF2ZSBhbnkgYWN0aW9ucyB3aXRoIGlmLWRvbWFpbi4KLSAgICAgICAgICAgIEFTU0VSVChp
bnN0cnVjdGlvbiAhPSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRB
Y3Rpb25XaXRoSWZEb21haW4pOwotICAgICAgICAgICAgQVNTRVJUKGluc3RydWN0aW9uICE9IERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CisgICAgICAg
IGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFn
c0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikKKyAgICAgICAgICAgIHByb2dyYW1Db3VudGVy
ICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKKyAgICAgICAgZWxzZQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGFjdGlvbnM7CiB9
CkBAIC0xNzksMTYgKzE3NCwxOCBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERG
QUJ5dGVjCiAgICAgICAgIHVpbnQzMl90IGRmYUJ5dGVjb2RlTGVuZ3RoID0gZ2V0Qml0czx1aW50
MzJfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpOwogICAg
ICAgICBwcm9ncmFtQ291bnRlciArPSBzaXplb2YodWludDMyX3QpOwogCi0gICAgICAgIC8vIFNr
aXAgdGhlIGRlZmF1bHQgc3R5bGVzaGVldCBhY3Rpb25zIG9uIHRoZSBERkEgcm9vdC4gVGhlc2Ug
YXJlIGFjY2Vzc2VkIHZpYSBhY3Rpb25zRm9yRGVmYXVsdFN0eWxlc2hlZXRGcm9tREZBUm9vdC4K
KyAgICAgICAgLy8gU2tpcCB0aGUgYWN0aW9ucyB3aXRob3V0IGZsYWdzIG9uIHRoZSBERkEgcm9v
dC4gVGhlc2UgYXJlIGFjY2Vzc2VkIHZpYSBhY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nLgogICAg
ICAgICBpZiAoIWRmYVN0YXJ0KSB7CiAgICAgICAgICAgICB3aGlsZSAocHJvZ3JhbUNvdW50ZXIg
PCBkZmFCeXRlY29kZUxlbmd0aCkgewogICAgICAgICAgICAgICAgIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2Rl
TGVuZ3RoLCBwcm9ncmFtQ291bnRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9u
ID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0
KQotICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVX
aXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRT
dHlsZXNoZWV0KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIGlu
dGVycHJldEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwgYWN0aW9ucywgZmFsc2UpOworICAg
ICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpB
cHBlbmRBY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3Ry
dWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0
aW9uKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pCisgICAgICAgICAgICAgICAg
ICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0
RmxhZ3NBbmRBcHBlbmRBY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgIGludGVycHJldFRlc3RG
bGFnc0FuZEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwgZmxhZ3MsIGFjdGlvbnMsIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pCisgICAgICAg
ICAgICAgICAgICAgIGludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbihwcm9ncmFtQ291
bnRlciwgZmxhZ3MsIGFjdGlvbnMsIHRydWUpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xOTYsNyArMTkzLDkgQEAg
REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgICAgICAgICAgICAg
IHJldHVybiBhY3Rpb25zOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBw
cm9ncmFtQ291bnRlcikgIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uCi0g
ICAgICAgICAgICAgICAgJiYgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxl
bmd0aCwgcHJvZ3JhbUNvdW50ZXIpICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFn
c0FuZEFwcGVuZEFjdGlvbiwKKyAgICAgICAgICAgICAgICAmJiBnZXRJbnN0cnVjdGlvbihtX2J5
dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgIT0gREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluCisgICAgICAgICAgICAgICAgJiYg
Z2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50
ZXIpICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbgor
ICAgICAgICAgICAgICAgICYmIGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVM
ZW5ndGgsIHByb2dyYW1Db3VudGVyKSAhPSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0Rmxh
Z3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4sCiAgICAgICAgICAgICAgICAgIlRyaWdnZXJz
IHRoYXQgbWF0Y2ggZXZlcnl0aGluZyBzaG91bGQgb25seSBiZSBpbiB0aGUgZmlyc3QgREZBLiIp
OwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24g
MTg2OTEzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJ
bnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICBBY3Rpb25zIGludGVycHJldChjb25zdCBDU3RyaW5nJiwgdWludDE2X3QgZmxhZ3Mp
OwogICAgIEFjdGlvbnMgaW50ZXJwcmV0V2l0aERvbWFpbnMoY29uc3QgQ1N0cmluZyYsIHVpbnQx
Nl90IGZsYWdzLCBjb25zdCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zJiBkb21haW5B
Y3Rpb25zKTsKLSAgICBBY3Rpb25zIGFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFS
b290KCk7CisgICAgQWN0aW9ucyBhY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCk7CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBpbnRlcnByZXRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1Db3Vu
dGVyLCBBY3Rpb25zJiwgYm9vbCBpZkRvbWFpbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRJbmZvLmgJKHJldmlzaW9uIDE4NjkxMykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDYg
QEAgdHlwZWRlZiB1aW50MTZfdCBSZXNvdXJjZUZsYWdzOwogLy8gVGhlIHZhbHVlcyAtMSBhbmQg
LTIgYXJlIHVzZWQgZm9yIHJlbW92ZWQgYW5kIGVtcHR5IHZhbHVlcyBpbiBIYXNoVGFibGVzLgog
Y29uc3QgdWludDY0X3QgQWN0aW9uRmxhZ01hc2sgPSAweDAwMDBGRkZGMDAwMDAwMDA7CiBjb25z
dCB1aW50NjRfdCBJZkRvbWFpbkZsYWcgPSAweDAwMDEwMDAwMDAwMDAwMDA7Ci1jb25zdCB1aW50
NjRfdCBEaXNwbGF5Tm9uZVN0eWxlU2hlZXRGbGFnID0gMHgwMDAyMDAwMDAwMDAwMDAwOwogCiBS
ZXNvdXJjZVR5cGUgdG9SZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUpOwogdWludDE2
X3QgcmVhZFJlc291cmNlVHlwZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE4Njk2NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDE1LTA3LTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gQ2FjaGUgYWN0
aW9ucyB3aXRoIGRvbWFpbnMgdGhhdCBtYXRjaCBldmVyeXRoaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcwNTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oOgorCiAyMDE1LTA3LTE3ICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0MiBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8y
MTgwMzc4MT4gVGhlIGV4dGVybmFsIFVSTCBwb2xpY3kgaXMgbm90IHJlcG9ydGVkIGNvcnJlY3Rs
eSBpbiBuYXZpZ2F0aW9uIGFjdGlvbnMgdGhhdCBjcmVhdGUgbmV3IHdpbmRvd3MKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lvbiAxODY5MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVGhpcyBzaG91bGQgYmUg
aW5jcmVtZW50ZWQgZXZlcnkgdGltZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIG1hZGUgdG8gdGhl
IGJ5dGVjb2RlLCBmaWxlIGZvcm1hdCwgZXRjLgogICAgIC8vIHRvIHByZXZlbnQgY3Jhc2hpbmcg
d2hpbGUgbG9hZGluZyBvbGQgZGF0YS4KLSAgICBjb25zdCBzdGF0aWMgdWludDMyX3QgQ3VycmVu
dENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiA9IDU7CisgICAgY29uc3Qgc3RhdGljIHVpbnQz
Ml90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9uRmlsZVZlcnNpb24gPSA2OwogCiAgICAgc3RhdGlj
IFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUmIGRlZmF1bHRTdG9yZSgpOwogICAgIHN0YXRpYyBS
ZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZT4gc3RvcmVXaXRoUGF0aChjb25zdCBXVEY6OlN0
cmluZyYgc3RvcmVQYXRoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256998</attachid>
            <date>2015-07-17 15:16:26 -0700</date>
            <delta_ts>2015-07-20 15:41:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147050-20150717151516.patch</filename>
            <type>text/plain</type>
            <size>34322</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Njk2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE1LTA3LTE3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ2FjaGUgYWN0aW9ucyB3aXRoIGRvbWFpbnMgdGhhdCBtYXRjaCBldmVyeXRo
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcw
NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB5
b3UgaGF2ZSBsb3RzIG9mIHJ1bGVzIHdpdGggdHJpZ2dlcnMgbGlrZSB7InVybC1maWx0ZXIiOiIu
KiIsImlmLWRvbWFpbiI6WyIqd2Via2l0Lm9yZyJdfQorICAgICAgICB3ZSB3aWxsIHNwZW5kIGEg
bG90IG9mIHRpbWUgYWRkaW5nIHVubmVjZXNzYXJ5IGFjdGlvbnMgdG8gSGFzaFNldHMgd2hlbiB5
b3UgYXJlIG5vdCBvbiB3ZWJraXQub3JnLgorICAgICAgICBDYWNoaW5nIGFsbCB0aGUgcnVsZXMg
YW5kIG9ubHkgYWRkaW5nIHRoZW0gdG8gYSBjb2xsZWN0aW9uIG9uY2Ugd2hlbiB0aGUgZG9tYWlu
IGNoYW5nZXMgc2F2ZXMgYSBsb3Qgb2YgVVJMIGludGVycHJldGluZyB0aW1lLgorCisgICAgICAg
IFdlIGFscmVhZHkgaGFkIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIGNzcy1kaXNwbGF5LW5vbmUg
YWN0aW9ucyB3aXRoIHRyaWdnZXJzIHRoYXQgbWF0Y2hlZCBldmVyeXRoaW5nIHVzaW5nIGEgc3Bl
Y2lhbCBieXRlY29kZSBvcGVyYXRpb24uCisgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCBm
b3IgYSBzcGVjaWFsIGJ5dGVjb2RlIG9wZXJhdGlvbiBieSBjYWNoaW5nIHRoZSB0cmlnZ2VycyB0
aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgd2l0aCBhbmQgd2l0aG91dCBkb21haW5zLAorICAgICAgICB0
aGVuIGZyb20gdGhvc2UgY2FjaGVkIGFjdGlvbnMgd2UgY29tcGlsZSBhIHN0eWxlc2hlZXQsIGFu
ZCBjcmVhdGUgY2FjaGVkIGFjdGlvbnMgZm9yIGV2ZXJ5IG5ldyBkb21haW4gd2UgdmlzaXQuCisK
KyAgICAgICAgQWxsIGZ1bmN0aW9uYWxpdHkgaXMgY292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6fkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxE
aXNwbGF5Tm9uZVNlbGVjdG9ycyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6ZmluZEZpcnN0SWdub3Jl
UHJldmlvdXNSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpjYWNoZWREb21haW5B
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0
ZW5zaW9uOjp1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMpOgorICAgICAgICAqIGNvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpjb21waWxlZEV4dGVuc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6dW5pdmVyc2Fs
QWN0aW9uc1dpdGhvdXREb21haW5zKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25SdWxlOjpDb250ZW50RXh0ZW5zaW9uUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2VyaWFsaXpl
ZExlbmd0aCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2V0
RXh0ZW5zaW9uSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uOjpleHRlbnNpb25JZGVudGlmaWVyKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclJlc291
cmNlTG9hZCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRoQXJn
dW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNv
bXBpbGVyOjplbWl0QXBwZW5kQWN0aW9uKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc01hdGNo
aW5nRXZlcnl0aGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVmYXVsdFN0
eWxlc2hlZXRGcm9tREZBUm9vdCk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRJbmZvLmg6CisKIDIwMTUtMDctMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4K
IAogICAgICAgICBXZWJDb3JlIHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzIxODAzNzgxPiBUaGUg
ZXh0ZXJuYWwgVVJMIHBvbGljeSBpcyBub3QgcmVwb3J0ZWQgY29ycmVjdGx5IGluIG5hdmlnYXRp
b24gYWN0aW9ucyB0aGF0IGNyZWF0ZSBuZXcgd2luZG93cwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRl
bnNpb24uY3BwCShyZXZpc2lvbiAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwyNCArMzUsNiBAQCBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjp+Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCkKIHsKIH0KLQotVmVjdG9y
PFN0cmluZz4gQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxEaXNwbGF5Tm9uZVNlbGVj
dG9ycygpCi17Ci0gICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihmaWx0ZXJz
V2l0aG91dERvbWFpbnNCeXRlY29kZSgpLCBmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZUxl
bmd0aCgpKTsKLSAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIGFjdGlvbkxvY2F0
aW9ucyA9IGludGVycHJldGVyLmFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290
KCk7Ci0gICAgCi0gICAgVmVjdG9yPEFjdGlvbj4gZ2xvYmFsQWN0aW9uczsKLSAgICBmb3IgKHVp
bnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogYWN0aW9uTG9jYXRpb25zKQotICAgICAgICBnbG9iYWxB
Y3Rpb25zLmFwcGVuZChBY3Rpb246OmRlc2VyaWFsaXplKGFjdGlvbnMoKSwgYWN0aW9uc0xlbmd0
aCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uTG9jYXRpb24pKSk7Ci0gICAgCi0gICAg
VmVjdG9yPFN0cmluZz4gc2VsZWN0b3JzOwotICAgIGZvciAoQWN0aW9uJiBhY3Rpb24gOiBnbG9i
YWxBY3Rpb25zKSB7Ci0gICAgICAgIGlmIChhY3Rpb24udHlwZSgpID09IEFjdGlvblR5cGU6OkNT
U0Rpc3BsYXlOb25lU2VsZWN0b3IpCi0gICAgICAgICAgICBzZWxlY3RvcnMuYXBwZW5kKGFjdGlv
bi5zdHJpbmdBcmd1bWVudCgpKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHNlbGVjdG9yczsK
LX0KICAgICAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxl
ZENvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uaAkocmV2aXNpb24gMTg2OTEzKQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdW5zaWduZWQgZG9tYWluRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgY29uc3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIFZl
Y3RvcjxTdHJpbmc+IGdsb2JhbERpc3BsYXlOb25lU2VsZWN0b3JzKCk7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDE4Njkx
MykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyOCArNDQsNTggQEAgUmVmUHRyPENvbnRlbnRFeHRl
bnNpb24+IENvbnRlbnRFeHRlbnNpbwogQ29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+
JiYgY29tcGlsZWRFeHRlbnNpb24pCiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAg
ICAsIG1fY29tcGlsZWRFeHRlbnNpb24oV1RGOjptb3ZlKGNvbXBpbGVkRXh0ZW5zaW9uKSkKLSAg
ICAsIG1fcGFyc2VkR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KGZhbHNlKQogeworICAgIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIgd2l0aG91dERvbWFpbnMobV9jb21waWxlZEV4dGVuc2lvbi0+
ZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwgbV9jb21waWxlZEV4dGVuc2lvbi0+Zmls
dGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7CisgICAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlciB3aXRoRG9tYWlucyhtX2NvbXBpbGVkRXh0ZW5zaW9uLT5maWx0ZXJzV2l0aERvbWFp
bnNCeXRlY29kZSgpLCBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5maWx0ZXJzV2l0aERvbWFpbnNCeXRl
Y29kZUxlbmd0aCgpKTsKKyAgICBjb3B5VG9WZWN0b3Iod2l0aG91dERvbWFpbnMuYWN0aW9uc01h
dGNoaW5nRXZlcnl0aGluZygpLCBtX3VuaXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucyk7Cisg
ICAgY29weVRvVmVjdG9yKHdpdGhEb21haW5zLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKSwg
bV91bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMpOwogfQogCit1aW50MzJfdCBDb250ZW50RXh0
ZW5zaW9uOjpmaW5kRmlyc3RJZ25vcmVQcmV2aW91c1J1bGVzKCkgY29uc3QKK3sKKyAgICBhdXRv
KiBhY3Rpb25zID0gbV9jb21waWxlZEV4dGVuc2lvbi0+YWN0aW9ucygpOworICAgIHVpbnQzMl90
IGFjdGlvbnNMZW5ndGggPSBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5hY3Rpb25zTGVuZ3RoKCk7Cisg
ICAgdWludDMyX3QgY3VycmVudEFjdGlvbkluZGV4ID0gMDsKKyAgICB3aGlsZSAoY3VycmVudEFj
dGlvbkluZGV4IDwgYWN0aW9uc0xlbmd0aCkgeworICAgICAgICBpZiAoQWN0aW9uOjpkZXNlcmlh
bGl6ZVR5cGUoYWN0aW9ucywgYWN0aW9uc0xlbmd0aCwgY3VycmVudEFjdGlvbkluZGV4KSA9PSBB
Y3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRBY3Rpb25JbmRleDsKKyAgICAgICAgY3VycmVudEFjdGlvbkluZGV4ICs9IEFjdGlvbjo6c2Vy
aWFsaXplZExlbmd0aChhY3Rpb25zLCBhY3Rpb25zTGVuZ3RoLCBjdXJyZW50QWN0aW9uSW5kZXgp
OworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
OworfQorICAgIAogU3R5bGVTaGVldENvbnRlbnRzKiBDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxE
aXNwbGF5Tm9uZVN0eWxlU2hlZXQoKQogewogICAgIGlmIChtX3BhcnNlZEdsb2JhbERpc3BsYXlO
b25lU3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIG1fZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNo
ZWV0LmdldCgpOwotCiAgICAgbV9wYXJzZWRHbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQgPSB0
cnVlOwogCi0gICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0b3JzID0gbV9jb21waWxlZEV4dGVuc2lv
bi0+Z2xvYmFsRGlzcGxheU5vbmVTZWxlY3RvcnMoKTsKLSAgICBpZiAoc2VsZWN0b3JzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgdWludDMyX3QgZmlyc3RJZ25vcmVQ
cmV2aW91c1J1bGVzID0gZmluZEZpcnN0SWdub3JlUHJldmlvdXNSdWxlcygpOworICAgIAorICAg
IGF1dG8qIGFjdGlvbnMgPSBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5hY3Rpb25zKCk7CisgICAgdWlu
dDMyX3QgYWN0aW9uc0xlbmd0aCA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmFjdGlvbnNMZW5ndGgo
KTsKIAorICAgIGF1dG8gaW5HbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQgPSBbJl0oY29uc3Qg
dWludDMyX3QgbG9jYXRpb24pCisgICAgeworICAgICAgICByZXR1cm4gbG9jYXRpb24gPCBmaXJz
dElnbm9yZVByZXZpb3VzUnVsZXMgJiYgQWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUoYWN0aW9ucywg
YWN0aW9uc0xlbmd0aCwgbG9jYXRpb24pID09IEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3I7CisgICAgfTsKKyAgICAKICAgICBTdHJpbmdCdWlsZGVyIGNzczsKLSAgICBmb3IgKGF1
dG8mIHNlbGVjdG9yIDogc2VsZWN0b3JzKSB7Ci0gICAgICAgIGNzcy5hcHBlbmQoc2VsZWN0b3Ip
OwotICAgICAgICBjc3MuYXBwZW5kKCJ7Iik7Ci0gICAgICAgIGNzcy5hcHBlbmQoQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjpkaXNwbGF5Tm9uZUNTU1J1bGUoKSk7Ci0gICAgICAgIGNzcy5hcHBl
bmQoIn0iKTsKKyAgICBmb3IgKHVpbnQzMl90IHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9uIDogbV91
bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMpIHsKKyAgICAgICAgaWYgKGluR2xvYmFsRGlz
cGxheU5vbmVTdHlsZVNoZWV0KHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9uKSkgeworICAgICAgICAg
ICAgQWN0aW9uIGFjdGlvbiA9IEFjdGlvbjo6ZGVzZXJpYWxpemUoYWN0aW9ucywgYWN0aW9uc0xl
bmd0aCwgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb24pOworICAgICAgICAgICAgQVNTRVJUKGFjdGlv
bi50eXBlKCkgPT0gQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvcik7CisgICAgICAg
ICAgICBjc3MuYXBwZW5kKGFjdGlvbi5zdHJpbmdBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIGNz
cy5hcHBlbmQoInsiKTsKKyAgICAgICAgICAgIGNzcy5hcHBlbmQoQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kOjpkaXNwbGF5Tm9uZUNTU1J1bGUoKSk7CisgICAgICAgICAgICBjc3MuYXBwZW5kKCJ9
Iik7CisgICAgICAgIH0KICAgICB9CisgICAgaWYgKGNzcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgIC8vIFRoZXNlIGFjdGlvbnMgZG9uJ3QgbmVlZCB0byBi
ZSBhcHBsaWVkIGluZGl2aWR1YWxseSBhbnkgbW9yZS4gVGhleSB3aWxsIGFsbCBiZSBhcHBsaWVk
IHRvIGV2ZXJ5IHBhZ2UgYXMgYSBwcmVjb21waWxlZCBzdHlsZSBzaGVldC4KKyAgICBtX3VuaXZl
cnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucy5yZW1vdmVBbGxNYXRjaGluZyhpbkdsb2JhbERpc3Bs
YXlOb25lU3R5bGVTaGVldCk7CiAKICAgICBtX2dsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCA9
IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCk7CiAgICAgbV9nbG9iYWxEaXNwbGF5Tm9uZVN0
eWxlU2hlZXQtPnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7CkBAIC04NSwxMCArMTE1LDI0IEBA
IGNvbnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIEMKICAgICAgICAgbV9jYWNo
ZWREb21haW5BY3Rpb25zLmNsZWFyKCk7CiAgICAgICAgIGZvciAodWludDY0X3QgYWN0aW9uIDog
ZG9tYWluQWN0aW9ucykKICAgICAgICAgICAgIG1fY2FjaGVkRG9tYWluQWN0aW9ucy5hZGQoYWN0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fY2FjaGVkVW5pdmVyc2FsRG9tYWluQWN0aW9ucy5j
bGVhcigpOworICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG1fdW5pdmVyc2FsQWN0aW9u
c1dpdGhEb21haW5zKSB7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKChhY3Rpb24g
JiB+SWZEb21haW5GbGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0aW9uKSwgIlVuaXZl
cnNhbCBhY3Rpb25zIHdpdGggZG9tYWlucyBzaG91bGQgbm90IGhhdmUgZmxhZ3MuIik7CisgICAg
ICAgICAgICBpZiAoISEoYWN0aW9uICYgSWZEb21haW5GbGFnKSA9PSBtX2NhY2hlZERvbWFpbkFj
dGlvbnMuY29udGFpbnMoYWN0aW9uKSkKKyAgICAgICAgICAgICAgICBtX2NhY2hlZFVuaXZlcnNh
bERvbWFpbkFjdGlvbnMuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb24pKTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9jYWNoZWREb21haW4gPSBkb21haW47CiAgICAg
fQogICAgIHJldHVybiBtX2NhY2hlZERvbWFpbkFjdGlvbnM7CiB9CisKK2NvbnN0IFZlY3Rvcjx1
aW50MzJfdD4mIENvbnRlbnRFeHRlbnNpb246OnVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucyhj
b25zdCBTdHJpbmcmIGRvbWFpbikKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRChk
b21haW4sIGRvbWFpbiA9PSBtX2NhY2hlZERvbWFpbiwgInVuaXZlcnNhbFdpdGhEb21haW5zIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCByaWdodCBhZnRlciBjYWNoZWREb21haW5BY3Rpb25zIHdpdGgg
dGhlIHNhbWUgZG9tYWluLCBzbyB0aGUgY2FjaGUgc2hvdWxkIGF3YXlzIGJlIGNvcnJlY3QiKTsK
KyAgICByZXR1cm4gbV9jYWNoZWRVbml2ZXJzYWxEb21haW5BY3Rpb25zOworfQogICAgIAogfSAv
LyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uLmgJKHJldmlzaW9uIDE4NjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTcgKzQ5LDI0
IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBpbGVk
RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxlZEV4dGVuc2lvbi5nZXQoKTsgfQog
ICAgIFN0eWxlU2hlZXRDb250ZW50cyogZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KCk7CiAg
ICAgY29uc3QgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyYgY2FjaGVkRG9tYWluQWN0
aW9ucyhjb25zdCBTdHJpbmcmIGRvbWFpbik7CisgICAgY29uc3QgVmVjdG9yPHVpbnQzMl90PiYg
dW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zKCkgeyByZXR1cm4gbV91bml2ZXJzYWxBY3Rp
b25zV2l0aG91dERvbWFpbnM7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB1bml2ZXJz
YWxBY3Rpb25zV2l0aERvbWFpbnMoY29uc3QgU3RyaW5nJiBkb21haW4pOwogCiBwcml2YXRlOgog
ICAgIENvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZWY8Q29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKLQorICAgIHVpbnQzMl90IGZpbmRGaXJzdElnbm9yZVBy
ZXZpb3VzUnVsZXMoKSBjb25zdDsKKyAgICAKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwogICAg
IFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IG1fY29tcGlsZWRFeHRlbnNpb247CiAgICAg
UmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gbV9nbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ7
Ci0gICAgYm9vbCBtX3BhcnNlZEdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldDsKKyAgICBib29s
IG1fcGFyc2VkR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0IHsgZmFsc2UgfTsKICAgICAKICAg
ICBTdHJpbmcgbV9jYWNoZWREb21haW47CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0
aW9ucyBtX2NhY2hlZERvbWFpbkFjdGlvbnM7CisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2NhY2hl
ZFVuaXZlcnNhbERvbWFpbkFjdGlvbnM7CisKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fdW5pdmVy
c2FsQWN0aW9uc1dpdGhvdXREb21haW5zOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbV91bml2ZXJz
YWxBY3Rpb25zV2l0aERvbWFpbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODY5MTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsMTEgKzI2Nyw2IEBAIHN0ZDo6ZXJyb3JfY29k
ZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAgICAgICAgIEFTU0VSVCh0cmlnZ2VyLmRv
bWFpbkNvbmRpdGlvbiA9PSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246Ok5vbmUpOwogICAgICAg
ICAgICAgc3RhdHVzID0gZmlsdGVyc1dpdGhvdXREb21haW5QYXJzZXIuYWRkUGF0dGVybih0cmln
Z2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxv
Y2F0aW9uQW5kRmxhZ3MpOwogICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJz
ZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpZ25vcmVQcmV2
aW91c1J1bGVzU2VlbgotICAgICAgICAgICAgICAgICAgICAmJiB0cmlnZ2VyLmRvbWFpbkNvbmRp
dGlvbiA9PSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246Ok5vbmUKLSAgICAgICAgICAgICAgICAg
ICAgJiYgYWN0aW9uLnR5cGUoKSA9PSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9y
Ci0gICAgICAgICAgICAgICAgICAgICYmICF0cmlnZ2VyLmZsYWdzKQotICAgICAgICAgICAgICAg
ICAgICBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzIHw9IERpc3BsYXlOb25lU3R5bGVTaGVldEZsYWc7
CiAgICAgICAgICAgICAgICAgdW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zLmFkZChhY3Rp
b25Mb2NhdGlvbkFuZEZsYWdzKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBVUkxGaWx0ZXJQ
YXJzZXI6Ok9rOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmNwcAkocmV2aXNp
b24gMTg2OTEzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvblJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw5IEBAIENvbnRlbnRF
eHRlbnNpb25SdWxlOjpDb250ZW50RXh0ZW5zaW9uUnUKICAgICBBU1NFUlQoIW1fdHJpZ2dlci51
cmxGaWx0ZXIuaXNFbXB0eSgpKTsKIH0KIAotQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29u
c3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVuc2lnbmVkIGFjdGlvbnNM
ZW5ndGgsIHVuc2lnbmVkIGxvY2F0aW9uKQorQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29u
c3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVpbnQzMl90IGFjdGlvbnNM
ZW5ndGgsIHVpbnQzMl90IGxvY2F0aW9uKQogeworICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9u
IDwgYWN0aW9uc0xlbmd0aCk7CiAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxBY3Rpb25UeXBlPihh
Y3Rpb25zW2xvY2F0aW9uXSkpIHsKICAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2llczoK
ICAgICAgICAgcmV0dXJuIEFjdGlvbihBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIGxvY2F0aW9u
KTsKQEAgLTQ5LDEwICs1MCwxMSBAQCBBY3Rpb24gQWN0aW9uOjpkZXNlcmlhbGl6ZShjb25zdCBT
ZXJpYWxpCiAgICAgY2FzZSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzOgogICAgICAg
ICByZXR1cm4gQWN0aW9uKEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXMsIGxvY2F0aW9u
KTsKICAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3I6IHsKLSAgICAg
ICAgdW5zaWduZWQgc3RyaW5nU3RhcnRJbmRleCA9IGxvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5
cGUpICsgc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihib29sKTsKKyAgICAgICAgdWludDMyX3Qg
aGVhZGVyTGVuZ3RoID0gc2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVpbnQzMl90KSArIHNp
emVvZihib29sKTsKKyAgICAgICAgdWludDMyX3Qgc3RyaW5nU3RhcnRJbmRleCA9IGxvY2F0aW9u
ICsgaGVhZGVyTGVuZ3RoOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChhY3Rpb25zTGVuZ3RoID49
IHN0cmluZ1N0YXJ0SW5kZXgpOwotICAgICAgICB1bnNpZ25lZCBzZWxlY3Rvckxlbmd0aCA9ICpy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oJmFjdGlvbnNbbG9jYXRpb24gKyBzaXpl
b2YoQWN0aW9uVHlwZSldKTsKLSAgICAgICAgYm9vbCB3aWRlQ2hhcmFjdGVycyA9IGFjdGlvbnNb
bG9jYXRpb24gKyBzaXplb2YoQWN0aW9uVHlwZSkgKyBzaXplb2YodW5zaWduZWQpXTsKKyAgICAg
ICAgdWludDMyX3Qgc2VsZWN0b3JMZW5ndGggPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCo+KCZhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpXSk7CisgICAgICAg
IGJvb2wgd2lkZUNoYXJhY3RlcnMgPSBhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5
cGUpICsgc2l6ZW9mKHVpbnQzMl90KV07CiAgICAgICAgIAogICAgICAgICBpZiAod2lkZUNoYXJh
Y3RlcnMpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjdGlvbnNMZW5ndGggPj0gc3Ry
aW5nU3RhcnRJbmRleCArIHNlbGVjdG9yTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CkBAIC02Mywx
MiArNjUsNTYgQEAgQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29uc3QgU2VyaWFsaQogICAg
IH0KICAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU3R5bGVTaGVldDoKICAgICBj
YXNlIEFjdGlvblR5cGU6OkludmFsaWRBY3Rpb246CisgICAgZGVmYXVsdDoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiB9Ci0KKyAgICAKK0FjdGlvblR5cGUg
QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUoY29uc3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlv
bnMsIGNvbnN0IHVpbnQzMl90IGFjdGlvbnNMZW5ndGgsIHVpbnQzMl90IGxvY2F0aW9uKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uIDwgYWN0aW9uc0xlbmd0aCk7CisgICAgQWN0aW9u
VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QWN0aW9uVHlwZT4oYWN0aW9uc1tsb2NhdGlvbl0pOwor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzOgor
ICAgIGNhc2UgQWN0aW9uVHlwZTo6QmxvY2tMb2FkOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdu
b3JlUHJldmlvdXNSdWxlczoKKyAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2Vs
ZWN0b3I6CisgICAgICAgIHJldHVybiB0eXBlOworICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlz
cGxheU5vbmVTdHlsZVNoZWV0OgorICAgIGNhc2UgQWN0aW9uVHlwZTo6SW52YWxpZEFjdGlvbjoK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKyAgICAKK3VpbnQzMl90IEFjdGlvbjo6c2VyaWFsaXplZExlbmd0aChjb25zdCBTZXJp
YWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdWludDMyX3QgYWN0aW9uc0xlbmd0aCwg
dWludDMyX3QgbG9jYXRpb24pCit7CisgICAgUkVMRUFTRV9BU1NFUlQobG9jYXRpb24gPCBhY3Rp
b25zTGVuZ3RoKTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEFjdGlvblR5cGU+KGFjdGlvbnNb
bG9jYXRpb25dKSkgeworICAgIGNhc2UgQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzOgorICAgIGNh
c2UgQWN0aW9uVHlwZTo6QmxvY2tMb2FkOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdub3JlUHJl
dmlvdXNSdWxlczoKKyAgICAgICAgcmV0dXJuIHNpemVvZihBY3Rpb25UeXBlKTsKKyAgICBjYXNl
IEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3I6IHsKKyAgICAgICAgdWludDMyX3Qg
aGVhZGVyTGVuZ3RoID0gc2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVpbnQzMl90KSArIHNp
emVvZihib29sKTsKKyAgICAgICAgdWludDMyX3Qgc3RyaW5nU3RhcnRJbmRleCA9IGxvY2F0aW9u
ICsgaGVhZGVyTGVuZ3RoOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhY3Rpb25zTGVuZ3RoID49
IHN0cmluZ1N0YXJ0SW5kZXgpOworICAgICAgICB1aW50MzJfdCBzZWxlY3Rvckxlbmd0aCA9ICpy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oJmFjdGlvbnNbbG9jYXRpb24gKyBzaXpl
b2YoQWN0aW9uVHlwZSldKTsKKyAgICAgICAgYm9vbCB3aWRlQ2hhcmFjdGVycyA9IGFjdGlvbnNb
bG9jYXRpb24gKyBzaXplb2YoQWN0aW9uVHlwZSkgKyBzaXplb2YodWludDMyX3QpXTsKKyAgICAg
ICAgCisgICAgICAgIGlmICh3aWRlQ2hhcmFjdGVycykKKyAgICAgICAgICAgIHJldHVybiBoZWFk
ZXJMZW5ndGggKyBzZWxlY3Rvckxlbmd0aCAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIHJldHVy
biBoZWFkZXJMZW5ndGggKyBzZWxlY3Rvckxlbmd0aCAqIHNpemVvZihMQ2hhcik7CisgICAgfQor
ICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTdHlsZVNoZWV0OgorICAgIGNhc2Ug
QWN0aW9uVHlwZTo6SW52YWxpZEFjdGlvbjoKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAorfSAvLyBuYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAkocmV2aXNpb24gMTg2OTEz
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsOSBAQCBzdHJ1Y3QgQWN0aW9uIHsKICAg
ICAgICAgICAgICYmIG1fc3RyaW5nQXJndW1lbnQgPT0gb3RoZXIubV9zdHJpbmdBcmd1bWVudDsK
ICAgICB9CiAKLSAgICBzdGF0aWMgQWN0aW9uIGRlc2VyaWFsaXplKGNvbnN0IFNlcmlhbGl6ZWRB
Y3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoLCB1aW50MzJf
dCBsb2NhdGlvbik7CisgICAgc3RhdGljIEFjdGlvbiBkZXNlcmlhbGl6ZShjb25zdCBTZXJpYWxp
emVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdWludDMyX3QgYWN0aW9uc0xlbmd0aCwgdWlu
dDMyX3QgbG9jYXRpb24pOworICAgIHN0YXRpYyBBY3Rpb25UeXBlIGRlc2VyaWFsaXplVHlwZShj
b25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdWludDMyX3QgYWN0aW9u
c0xlbmd0aCwgdWludDMyX3QgbG9jYXRpb24pOworICAgIHN0YXRpYyB1aW50MzJfdCBzZXJpYWxp
emVkTGVuZ3RoKGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1aW50
MzJfdCBhY3Rpb25zTGVuZ3RoLCB1aW50MzJfdCBsb2NhdGlvbik7CiAKICAgICB2b2lkIHNldEV4
dGVuc2lvbklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBleHRlbnNpb25JZGVudGlmaWVyKSB7IG1f
ZXh0ZW5zaW9uSWRlbnRpZmllciA9IGV4dGVuc2lvbklkZW50aWZpZXI7IH0KICAgICBjb25zdCBT
dHJpbmcmIGV4dGVuc2lvbklkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2V4dGVuc2lvbklk
ZW50aWZpZXI7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2aXNpb24gMTg2
OTEzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMjAgKzkyLDI3IEBAIFZlY3RvcjxB
Y3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoKICAgICAgICAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlciB3aXRob3V0RG9tYWluc0ludGVycHJldGVyKGNvbXBpbGVkRXh0ZW5zaW9uLmZpbHRl
cnNXaXRob3V0RG9tYWluc0J5dGVjb2RlKCksIGNvbXBpbGVkRXh0ZW5zaW9uLmZpbHRlcnNXaXRo
b3V0RG9tYWluc0J5dGVjb2RlTGVuZ3RoKCkpOwogICAgICAgICBERkFCeXRlY29kZUludGVycHJl
dGVyOjpBY3Rpb25zIHdpdGhvdXREb21haW5zQWN0aW9ucyA9IHdpdGhvdXREb21haW5zSW50ZXJw
cmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKICAgICAgICAgCisgICAgICAgIFN0
cmluZyBkb21haW4gPSByZXNvdXJjZUxvYWRJbmZvLm1haW5Eb2N1bWVudFVSTC5ob3N0KCk7CiAg
ICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgd2l0aERvbWFpbnNJbnRlcnByZXRlcihjb21w
aWxlZEV4dGVuc2lvbi5maWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVu
c2lvbi5maWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZUxlbmd0aCgpKTsKLSAgICAgICAgREZBQnl0
ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB3aXRoRG9tYWluc0FjdGlvbnMgPSB3aXRoRG9tYWlu
c0ludGVycHJldGVyLmludGVycHJldFdpdGhEb21haW5zKHVybENTdHJpbmcsIGZsYWdzLCBjb250
ZW50RXh0ZW5zaW9uLT5jYWNoZWREb21haW5BY3Rpb25zKHJlc291cmNlTG9hZEluZm8ubWFpbkRv
Y3VtZW50VVJMLmhvc3QoKSkpOworICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rp
b25zIHdpdGhEb21haW5zQWN0aW9ucyA9IHdpdGhEb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0
V2l0aERvbWFpbnModXJsQ1N0cmluZywgZmxhZ3MsIGNvbnRlbnRFeHRlbnNpb24tPmNhY2hlZERv
bWFpbkFjdGlvbnMoZG9tYWluKSk7CiAgICAgICAgIAogICAgICAgICBjb25zdCBTZXJpYWxpemVk
QWN0aW9uQnl0ZSogYWN0aW9ucyA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlvbnMoKTsKICAgICAg
ICAgY29uc3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlv
bnNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgc2F3SWdub3JlUHJldmlvdXNSdWxl
cyA9IGZhbHNlOwotICAgICAgICBpZiAoIXdpdGhvdXREb21haW5zQWN0aW9ucy5pc0VtcHR5KCkg
fHwgIXdpdGhEb21haW5zQWN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29uc3QgVmVjdG9y
PHVpbnQzMl90PiYgdW5pdmVyc2FsV2l0aERvbWFpbnMgPSBjb250ZW50RXh0ZW5zaW9uLT51bml2
ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMoZG9tYWluKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVp
bnQzMl90PiYgdW5pdmVyc2FsV2l0aG91dERvbWFpbnMgPSBjb250ZW50RXh0ZW5zaW9uLT51bml2
ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMoKTsKKyAgICAgICAgaWYgKCF3aXRob3V0RG9tYWlu
c0FjdGlvbnMuaXNFbXB0eSgpIHx8ICF3aXRoRG9tYWluc0FjdGlvbnMuaXNFbXB0eSgpIHx8ICF1
bml2ZXJzYWxXaXRoRG9tYWlucy5pc0VtcHR5KCkgfHwgIXVuaXZlcnNhbFdpdGhvdXREb21haW5z
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBhY3Rpb25Mb2NhdGlv
bnM7Ci0gICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh3
aXRob3V0RG9tYWluc0FjdGlvbnMuc2l6ZSgpICsgd2l0aERvbWFpbnNBY3Rpb25zLnNpemUoKSk7
CisgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh3aXRo
b3V0RG9tYWluc0FjdGlvbnMuc2l6ZSgpICsgd2l0aERvbWFpbnNBY3Rpb25zLnNpemUoKSArIHVu
aXZlcnNhbFdpdGhvdXREb21haW5zLnNpemUoKSArIHVuaXZlcnNhbFdpdGhEb21haW5zLnNpemUo
KSk7CiAgICAgICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogd2l0aG91dERv
bWFpbnNBY3Rpb25zKQogICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy51bmNoZWNrZWRB
cHBlbmQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlvbkxvY2F0aW9uKSk7CiAgICAgICAgICAg
ICBmb3IgKHVpbnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogd2l0aERvbWFpbnNBY3Rpb25zKQogICAg
ICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGFjdGlvbkxvY2F0aW9uKSk7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGFj
dGlvbkxvY2F0aW9uIDogdW5pdmVyc2FsV2l0aG91dERvbWFpbnMpCisgICAgICAgICAgICAgICAg
YWN0aW9uTG9jYXRpb25zLnVuY2hlY2tlZEFwcGVuZChhY3Rpb25Mb2NhdGlvbik7CisgICAgICAg
ICAgICBmb3IgKHVpbnQzMl90IGFjdGlvbkxvY2F0aW9uIDogdW5pdmVyc2FsV2l0aERvbWFpbnMp
CisgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnVuY2hlY2tlZEFwcGVuZChhY3Rpb25M
b2NhdGlvbik7CiAgICAgICAgICAgICBzdGQ6OnNvcnQoYWN0aW9uTG9jYXRpb25zLmJlZ2luKCks
IGFjdGlvbkxvY2F0aW9ucy5lbmQoKSk7CiAKICAgICAgICAgICAgIC8vIEFkZCBhY3Rpb25zIGlu
IHJldmVyc2Ugb3JkZXIgdG8gcHJvcGVybHkgZGVhbCB3aXRoIElnbm9yZVByZXZpb3VzUnVsZXMu
CkBAIC0xMjYsNyArMTMzLDcgQEAgVmVjdG9yPEFjdGlvbj4gQ29udGVudEV4dGVuc2lvbnNCYWNr
ZW5kOgogICAgIH0KICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5H
CiAgICAgZG91YmxlIGFkZGVkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
OwotICAgIFdURkxvZ0Fsd2F5cygiVGltZSBhZGRlZDogJWYgbWljcm9zZWNvbmRzICVzIiwgKGFk
ZGVkVGltZUVuZCAtIGFkZGVkVGltZVN0YXJ0KSAqIDEuMGU2LCByZXNvdXJjZUxvYWRJbmZvLnJl
c291cmNlVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGRhdGFMb2dGKCJUaW1lIGFk
ZGVkOiAlZiBtaWNyb3NlY29uZHMgJXMgXG4iLCAoYWRkZWRUaW1lRW5kIC0gYWRkZWRUaW1lU3Rh
cnQpICogMS4wZTYsIHJlc291cmNlTG9hZEluZm8ucmVzb3VyY2VVUkwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gZmluYWxBY3Rpb25zOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCShyZXZpc2lv
biAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwyMSArNTUsMjAgQEAgZW51bSBjbGFzcyBERkFCeXRl
Y29kZUluc3RydWN0aW9uIDogdWludAogICAgIC8vIEFwcGVuZEFjdGlvbiBoYXMgb25lIGFyZ3Vt
ZW50OgogICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5kICg0IGJ5dGVzKS4KICAgICBBcHBlbmRB
Y3Rpb24gPSAweDQsCi0gICAgQXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQgPSAweDUsCi0g
ICAgQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluID0gMHg2LAorICAgIEFwcGVuZEFjdGlvbldpdGhJ
ZkRvbWFpbiA9IDB4NSwKICAgICAKICAgICAvLyBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24gaGFz
IHR3byBhcmd1bWVudHM6CiAgICAgLy8gVGhlIGZsYWdzIHRvIGNoZWNrIGJlZm9yZSBhcHBlbmRp
bmcgKDIgYnl0ZXMpLgogICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5kICg0IGJ5dGVzKS4KLSAg
ICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24gPSAweDcsCi0gICAgVGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uV2l0aElmRG9tYWluID0gMHg4LAorICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiA9
IDB4NiwKKyAgICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4gPSAweDcsCiAK
ICAgICAvLyBUZXJtaW5hdGUgaGFzIG5vIGFyZ3VtZW50cy4KLSAgICBUZXJtaW5hdGUgPSAweDks
CisgICAgVGVybWluYXRlID0gMHg4LAogCiAgICAgLy8gSnVtcCBoYXMgb25lIGFyZ3VtZW50Ogog
ICAgIC8vIFRoZSBkaXN0YW5jZSB0byBqdW1wICgxLTQgYnl0ZXMsIHNpZ25lZCkuCi0gICAgSnVt
cCA9IDB4QSwKKyAgICBKdW1wID0gMHg5LAogfTsKIAogLy8gVGhlIGxhc3QgZm91ciBiaXRzIGNv
bnRhaW4gdGhlIGluc3RydWN0aW9uIHR5cGUuCkBAIC0xMTAsNyArMTA5LDYgQEAgc3RhdGljIGlu
bGluZSBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplV2l0aAogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6SnVtcDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
VmFyaWFibGUgaW5zdHJ1Y3Rpb24gc2l6ZS4KICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbjoKLSAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVu
ZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0OgogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQzMl90KTsKICAgICBjYXNlIERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbjoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEs
NiBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3RpCiB7CiAgICAgLy8g
SGlnaCBiaXRzIGFyZSB1c2VkIHRvIHN0b3JlIGZsYWdzLiBTZWUgY29tcGlsZVJ1bGVMaXN0Lgog
ICAgIGlmIChhY3Rpb24gJiBBY3Rpb25GbGFnTWFzaykgewotICAgICAgICBBU1NFUlQoIShhY3Rp
b24gJiBEaXNwbGF5Tm9uZVN0eWxlU2hlZXRGbGFnKSk7CiAgICAgICAgIGlmIChhY3Rpb24gJiBJ
ZkRvbWFpbkZsYWcpCiAgICAgICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4o
bV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluKTsKICAgICAgICAgZWxzZQpAQCAtODksMTAgKzg4LDcgQEAgdm9pZCBE
RkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aQogICAgICAgICBhcHBlbmQ8dWludDE2
X3Q+KG1fYnl0ZWNvZGUsIHN0YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb24gPj4gMzIpKTsKICAg
ICAgICAgYXBwZW5kPHVpbnQzMl90PihtX2J5dGVjb2RlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YWN0aW9uKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGFjdGlvbiAmIERpc3BsYXlOb25l
U3R5bGVTaGVldEZsYWcpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoYWN0aW9uICYg
SWZEb21haW5GbGFnKSk7Ci0gICAgICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlv
bj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVs
dFN0eWxlc2hlZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiAmIElmRG9tYWluRmxhZykK
KyAgICAgICAgaWYgKGFjdGlvbiAmIElmRG9tYWluRmxhZykKICAgICAgICAgICAgIGFwcGVuZDxE
RkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBh
cHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCShyZXZp
c2lvbiAxODY5MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTUgKzk2LDEzIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBtYXRjaGVzRG9tYWluKHVpbnQ2NF8KIHZvaWQgREZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVpbnQzMl90JiBwcm9ncmFtQ291bnRl
ciwgQWN0aW9ucyYgYWN0aW9ucywgYm9vbCBpZkRvbWFpbikKIHsKICAgICBBU1NFUlQoZ2V0SW5z
dHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpID09
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbgotICAgICAgICB8fCBnZXRJbnN0
cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgPT0g
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluCi0gICAgICAg
IHx8IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5
bGVzaGVldCk7CisgICAgICAgIHx8IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBl
bmRBY3Rpb25XaXRoSWZEb21haW4pOwogICAgIHVpbnQ2NF90IGFjdGlvbiA9IChpZkRvbWFpbiA/
IElmRG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dWludDMy
X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9m
KERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pKSk7CiAgICAgaWYgKCFtX2RvbWFpbkFjdGlvbnMgfHwg
bWF0Y2hlc0RvbWFpbihhY3Rpb24sICptX2RvbWFpbkFjdGlvbnMpKQogICAgICAgICBhY3Rpb25z
LmFkZChhY3Rpb24pOwogICAgIAogICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6
ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKICAg
ICBBU1NFUlQoaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKSk7Ci0gICAgQVNTRVJU
KGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uKSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KSk7CiB9CiAKIHZvaWQgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVp
bnQzMl90JiBwcm9ncmFtQ291bnRlciwgdWludDE2X3QgZmxhZ3MsIEFjdGlvbnMmIGFjdGlvbnMs
IGJvb2wgaWZEb21haW4pCkBAIC0xMjgsNyArMTI2LDcgQEAgdm9pZCBERkFCeXRlY29kZUludGVy
cHJldGVyOjppbnRlcnByZXRUZQogICAgIEFTU0VSVChpbnN0cnVjdGlvblNpemVXaXRoQXJndW1l
bnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbikgPT0g
aW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0
RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pKTsKIH0KIAotREZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6QWN0aW9ucyBERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVmYXVs
dFN0eWxlc2hlZXRGcm9tREZBUm9vdCgpCitERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25z
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKQogewog
ICAgIEFjdGlvbnMgYWN0aW9uczsKIApAQCAtMTM4LDE5ICsxMzYsMTYgQEAgREZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogCiAgICAgd2hpbGUgKHByb2dyYW1Db3VudGVy
IDwgZGZhQnl0ZWNvZGVMZW5ndGgpIHsKICAgICAgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBp
bnN0cnVjdGlvbiA9IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgs
IHByb2dyYW1Db3VudGVyKTsKLSAgICAgICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KQorICAgICAgICBpZiAo
aW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKQogICAg
ICAgICAgICAgaW50ZXJwcmV0QXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zLCBm
YWxzZSk7Ci0gICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkFwcGVuZEFjdGlvbikKLSAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3Ry
dWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0
aW9uKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKQorICAgICAgICAgICAgaW50ZXJwcmV0QXBw
ZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zLCB0cnVlKTsKICAgICAgICAgZWxzZSBp
ZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBw
ZW5kQWN0aW9uKQogICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXpl
V2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRB
Y3Rpb24pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIGFjdGlvbnNGb3JEZWZhdWx0
U3R5bGVzaGVldEZyb21ERkFSb290IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgREZBIHdp
dGhvdXQgZG9tYWlucywKLSAgICAgICAgICAgIC8vIHdoaWNoIHNob3VsZCBuZXZlciBoYXZlIGFu
eSBhY3Rpb25zIHdpdGggaWYtZG9tYWluLgotICAgICAgICAgICAgQVNTRVJUKGluc3RydWN0aW9u
ICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJ
ZkRvbWFpbik7Ci0gICAgICAgICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24gIT0gREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKKyAgICAgICAgZWxzZSBpZiAo
aW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uV2l0aElmRG9tYWluKQorICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1
Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NB
bmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gYWN0aW9uczsKIH0KQEAgLTE3OSwx
NiArMTc0LDE4IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAg
ICAgICAgdWludDMyX3QgZGZhQnl0ZWNvZGVMZW5ndGggPSBnZXRCaXRzPHVpbnQzMl90PihtX2J5
dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcik7CiAgICAgICAgIHByb2dy
YW1Db3VudGVyICs9IHNpemVvZih1aW50MzJfdCk7CiAKLSAgICAgICAgLy8gU2tpcCB0aGUgZGVm
YXVsdCBzdHlsZXNoZWV0IGFjdGlvbnMgb24gdGhlIERGQSByb290LiBUaGVzZSBhcmUgYWNjZXNz
ZWQgdmlhIGFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290LgorICAgICAgICAv
LyBTa2lwIHRoZSBhY3Rpb25zIHdpdGhvdXQgZmxhZ3Mgb24gdGhlIERGQSByb290LiBUaGVzZSBh
cmUgYWNjZXNzZWQgdmlhIGFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcuCiAgICAgICAgIGlmICgh
ZGZhU3RhcnQpIHsKICAgICAgICAgICAgIHdoaWxlIChwcm9ncmFtQ291bnRlciA8IGRmYUJ5dGVj
b2RlTGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBpbnN0
cnVjdGlvbiA9IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHBy
b2dyYW1Db3VudGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpCi0gICAgICAg
ICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVu
dHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0QXBw
ZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXpl
V2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3Jh
bUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOwogICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFw
cGVuZEFjdGlvbikKICAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBw
ZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBmbGFncywgYWN0aW9ucywgZmFsc2UpOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikKKyAgICAgICAgICAgICAgICAg
ICAgaW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBmbGFn
cywgYWN0aW9ucywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE5Niw3ICsxOTMsOSBAQCBERkFCeXRlY29k
ZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFj
dGlvbnM7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3Vu
dGVyKSAhPSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24KLSAgICAgICAgICAg
ICAgICAmJiBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9n
cmFtQ291bnRlcikgIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uLAorICAgICAgICAgICAgICAgICYmIGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyKSAhPSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4KKyAgICAgICAgICAgICAgICAmJiBnZXRJbnN0cnVj
dGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgIT0gREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uCisgICAgICAgICAg
ICAgICAgJiYgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJv
Z3JhbUNvdW50ZXIpICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVu
ZEFjdGlvbldpdGhJZkRvbWFpbiwKICAgICAgICAgICAgICAgICAiVHJpZ2dlcnMgdGhhdCBtYXRj
aCBldmVyeXRoaW5nIHNob3VsZCBvbmx5IGJlIGluIHRoZSBmaXJzdCBERkEuIik7CiAgICAgICAg
IH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZUludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODY5MTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgIEFj
dGlvbnMgaW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmLCB1aW50MTZfdCBmbGFncyk7CiAgICAgQWN0
aW9ucyBpbnRlcnByZXRXaXRoRG9tYWlucyhjb25zdCBDU3RyaW5nJiwgdWludDE2X3QgZmxhZ3Ms
IGNvbnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIGRvbWFpbkFjdGlvbnMpOwot
ICAgIEFjdGlvbnMgYWN0aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3QoKTsKKyAg
ICBBY3Rpb25zIGFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKTsKIAogcHJpdmF0ZToKICAgICB2
b2lkIGludGVycHJldEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIEFjdGlv
bnMmLCBib29sIGlmRG9tYWluKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZEluZm8uaAkocmV2aXNpb24gMTg2OTEzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNiBAQCB0eXBlZGVm
IHVpbnQxNl90IFJlc291cmNlRmxhZ3M7CiAvLyBUaGUgdmFsdWVzIC0xIGFuZCAtMiBhcmUgdXNl
ZCBmb3IgcmVtb3ZlZCBhbmQgZW1wdHkgdmFsdWVzIGluIEhhc2hUYWJsZXMuCiBjb25zdCB1aW50
NjRfdCBBY3Rpb25GbGFnTWFzayA9IDB4MDAwMEZGRkYwMDAwMDAwMDsKIGNvbnN0IHVpbnQ2NF90
IElmRG9tYWluRmxhZyA9IDB4MDAwMTAwMDAwMDAwMDAwMDsKLWNvbnN0IHVpbnQ2NF90IERpc3Bs
YXlOb25lU3R5bGVTaGVldEZsYWcgPSAweDAwMDIwMDAwMDAwMDAwMDA7CiAKIFJlc291cmNlVHlw
ZSB0b1Jlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSk7CiB1aW50MTZfdCByZWFkUmVz
b3VyY2VUeXBlKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTg2OTY0
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTIgQEAKKzIwMTUtMDctMTcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBDYWNoZSBhY3Rpb25zIHdpdGgg
ZG9tYWlucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLmg6CisKIDIwMTUtMDctMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWJLaXQyIHBhcnQgb2YgPHJkYXI6Ly9wcm9ibGVtLzIxODAzNzgxPiBU
aGUgZXh0ZXJuYWwgVVJMIHBvbGljeSBpcyBub3QgcmVwb3J0ZWQgY29ycmVjdGx5IGluIG5hdmln
YXRpb24gYWN0aW9ucyB0aGF0IGNyZWF0ZSBuZXcgd2luZG93cwpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLmgJKHJldmlzaW9uIDE4NjkxMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUaGlzIHNob3VsZCBiZSBpbmNyZW1lbnRl
ZCBldmVyeSB0aW1lIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgYnl0ZWNvZGUs
IGZpbGUgZm9ybWF0LCBldGMuCiAgICAgLy8gdG8gcHJldmVudCBjcmFzaGluZyB3aGlsZSBsb2Fk
aW5nIG9sZCBkYXRhLgotICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBDdXJyZW50Q29udGVudEV4
dGVuc2lvbkZpbGVWZXJzaW9uID0gNTsKKyAgICBjb25zdCBzdGF0aWMgdWludDMyX3QgQ3VycmVu
dENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lvbiA9IDY7CiAKICAgICBzdGF0aWMgVXNlckNvbnRl
bnRFeHRlbnNpb25TdG9yZSYgZGVmYXVsdFN0b3JlKCk7CiAgICAgc3RhdGljIFJlZjxVc2VyQ29u
dGVudEV4dGVuc2lvblN0b3JlPiBzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9y
ZVBhdGgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257136</attachid>
            <date>2015-07-20 15:41:16 -0700</date>
            <delta_ts>2015-07-20 15:42:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147050-20150720154002.patch</filename>
            <type>text/plain</type>
            <size>36528</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzAyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE1LTA3LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ2FjaGUgYWN0aW9ucyB3aXRoIGRvbWFpbnMgdGhhdCBtYXRjaCBldmVyeXRo
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcw
NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB5
b3UgaGF2ZSBsb3RzIG9mIHJ1bGVzIHdpdGggdHJpZ2dlcnMgbGlrZSB7InVybC1maWx0ZXIiOiIu
KiIsImlmLWRvbWFpbiI6WyIqd2Via2l0Lm9yZyJdfQorICAgICAgICB3ZSB3aWxsIHNwZW5kIGEg
bG90IG9mIHRpbWUgYWRkaW5nIHVubmVjZXNzYXJ5IGFjdGlvbnMgdG8gSGFzaFNldHMgd2hlbiB5
b3UgYXJlIG5vdCBvbiB3ZWJraXQub3JnLgorICAgICAgICBDYWNoaW5nIGFsbCB0aGUgcnVsZXMg
YW5kIG9ubHkgYWRkaW5nIHRoZW0gdG8gYSBjb2xsZWN0aW9uIG9uY2Ugd2hlbiB0aGUgZG9tYWlu
IGNoYW5nZXMgc2F2ZXMgYSBsb3Qgb2YgVVJMIGludGVycHJldGluZyB0aW1lLgorCisgICAgICAg
IFdlIGFscmVhZHkgaGFkIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIGNzcy1kaXNwbGF5LW5vbmUg
YWN0aW9ucyB3aXRoIHRyaWdnZXJzIHRoYXQgbWF0Y2hlZCBldmVyeXRoaW5nIHVzaW5nIGEgc3Bl
Y2lhbCBieXRlY29kZSBvcGVyYXRpb24uCisgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCBm
b3IgYSBzcGVjaWFsIGJ5dGVjb2RlIG9wZXJhdGlvbiBieSBjYWNoaW5nIHRoZSB0cmlnZ2VycyB0
aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgd2l0aCBhbmQgd2l0aG91dCBkb21haW5zLAorICAgICAgICB0
aGVuIGZyb20gdGhvc2UgY2FjaGVkIGFjdGlvbnMgd2UgY29tcGlsZSBhIHN0eWxlc2hlZXQsIGFu
ZCBjcmVhdGUgY2FjaGVkIGFjdGlvbnMgZm9yIGV2ZXJ5IG5ldyBkb21haW4gd2UgdmlzaXQuCisK
KyAgICAgICAgQWxsIGZ1bmN0aW9uYWxpdHkgaXMgY292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6fkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxE
aXNwbGF5Tm9uZVNlbGVjdG9ycyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6ZmluZEZpcnN0SWdub3Jl
UHJldmlvdXNSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpjYWNoZWREb21haW5B
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0
ZW5zaW9uOjp1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMpOgorICAgICAgICAqIGNvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpjb21waWxlZEV4dGVuc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6dW5pdmVyc2Fs
QWN0aW9uc1dpdGhvdXREb21haW5zKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkNvbnRlbnRFeHRlbnNpb25SdWxlOjpDb250ZW50RXh0ZW5zaW9uUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2VyaWFsaXpl
ZExlbmd0aCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbjo6c2V0
RXh0ZW5zaW9uSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uOjpleHRlbnNpb25JZGVudGlmaWVyKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6YWN0aW9uc0ZvclJlc291
cmNlTG9hZCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRoQXJn
dW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNv
bXBpbGVyOjplbWl0QXBwZW5kQWN0aW9uKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXRBcHBlbmRBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc01hdGNo
aW5nRXZlcnl0aGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVmYXVsdFN0
eWxlc2hlZXRGcm9tREZBUm9vdCk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRJbmZvLmg6CisKIDIwMTUtMDctMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXN1cnJlY3QgQ01ha2UgYnVpbGQgb24gV2luZG93cy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29udGVudEV4
dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMTg3MDIzKQorKysgU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsMjQgKzM1LDYgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRl
bnNpb25zIHsKIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6fkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbigpCiB7CiB9Ci0KLVZlY3RvcjxTdHJpbmc+IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6
Z2xvYmFsRGlzcGxheU5vbmVTZWxlY3RvcnMoKQotewotICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIgaW50ZXJwcmV0ZXIoZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUoKSwgZmlsdGVyc1dp
dGhvdXREb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7Ci0gICAgREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6QWN0aW9ucyBhY3Rpb25Mb2NhdGlvbnMgPSBpbnRlcnByZXRlci5hY3Rpb25zRm9yRGVmYXVs
dFN0eWxlc2hlZXRGcm9tREZBUm9vdCgpOwotICAgIAotICAgIFZlY3RvcjxBY3Rpb24+IGdsb2Jh
bEFjdGlvbnM7Ci0gICAgZm9yICh1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbiA6IGFjdGlvbkxvY2F0
aW9ucykKLSAgICAgICAgZ2xvYmFsQWN0aW9ucy5hcHBlbmQoQWN0aW9uOjpkZXNlcmlhbGl6ZShh
Y3Rpb25zKCksIGFjdGlvbnNMZW5ndGgoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFjdGlvbkxv
Y2F0aW9uKSkpOwotICAgIAotICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdG9yczsKLSAgICBmb3Ig
KEFjdGlvbiYgYWN0aW9uIDogZ2xvYmFsQWN0aW9ucykgewotICAgICAgICBpZiAoYWN0aW9uLnR5
cGUoKSA9PSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yKQotICAgICAgICAgICAg
c2VsZWN0b3JzLmFwcGVuZChhY3Rpb24uc3RyaW5nQXJndW1lbnQoKSk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBzZWxlY3RvcnM7Ci19CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0
ZW5zaW9ucwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmgJKHJldmlzaW9uIDE4NzAyMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRvbWFpbkZpbHRlcnNCeXRlY29kZUxl
bmd0aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRl
KiBhY3Rpb25zKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgYWN0aW9uc0xlbmd0
aCgpIGNvbnN0ID0gMDsKLSAgICBWZWN0b3I8U3RyaW5nPiBnbG9iYWxEaXNwbGF5Tm9uZVNlbGVj
dG9ycygpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b24uY3BwCShyZXZpc2lvbiAxODcwMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMzggKzQ0LDc5
IEBAIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9uPiBDb250ZW50RXh0ZW5zaW8KIENvbnRlbnRFeHRl
bnNpb246OkNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZWY8Q29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbXBpbGVkRXh0ZW5zaW9uKQogICAgIDogbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX2NvbXBpbGVkRXh0ZW5zaW9uKFdURjo6bW92ZShj
b21waWxlZEV4dGVuc2lvbikpCi0gICAgLCBtX3BhcnNlZEdsb2JhbERpc3BsYXlOb25lU3R5bGVT
aGVldChmYWxzZSkKIHsKKyAgICBERkFCeXRlY29kZUludGVycHJldGVyIHdpdGhvdXREb21haW5z
KG1fY29tcGlsZWRFeHRlbnNpb24tPmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlKCksIG1f
Y29tcGlsZWRFeHRlbnNpb24tPmZpbHRlcnNXaXRob3V0RG9tYWluc0J5dGVjb2RlTGVuZ3RoKCkp
OworICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgd2l0aERvbWFpbnMobV9jb21waWxlZEV4dGVu
c2lvbi0+ZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoKSwgbV9jb21waWxlZEV4dGVuc2lvbi0+
ZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7CisgICAgZm9yICh1aW50NjRfdCBh
Y3Rpb24gOiB3aXRob3V0RG9tYWlucy5hY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCkpIHsKKyAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb24pID09IGFjdGlvbik7Cisg
ICAgICAgIG1fdW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zLmFwcGVuZChzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oYWN0aW9uKSk7CisgICAgfQorICAgIGZvciAodWludDY0X3QgYWN0aW9uIDog
d2l0aERvbWFpbnMuYWN0aW9uc01hdGNoaW5nRXZlcnl0aGluZygpKSB7CisgICAgICAgIEFTU0VS
VCgoYWN0aW9uICYgfklmRG9tYWluRmxhZykgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlv
bikpOworICAgICAgICBtX3VuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucy5hcHBlbmQoYWN0aW9u
KTsKKyAgICB9CisgICAgCisgICAgY29tcGlsZUdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgp
OworICAgIG1fdW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zLnNocmlua1RvRml0KCk7Cisg
ICAgbV91bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMuc2hyaW5rVG9GaXQoKTsKIH0KIAordWlu
dDMyX3QgQ29udGVudEV4dGVuc2lvbjo6ZmluZEZpcnN0SWdub3JlUHJldmlvdXNSdWxlcygpIGNv
bnN0Cit7CisgICAgYXV0byogYWN0aW9ucyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmFjdGlvbnMo
KTsKKyAgICB1aW50MzJfdCBhY3Rpb25zTGVuZ3RoID0gbV9jb21waWxlZEV4dGVuc2lvbi0+YWN0
aW9uc0xlbmd0aCgpOworICAgIHVpbnQzMl90IGN1cnJlbnRBY3Rpb25JbmRleCA9IDA7CisgICAg
d2hpbGUgKGN1cnJlbnRBY3Rpb25JbmRleCA8IGFjdGlvbnNMZW5ndGgpIHsKKyAgICAgICAgaWYg
KEFjdGlvbjo6ZGVzZXJpYWxpemVUeXBlKGFjdGlvbnMsIGFjdGlvbnNMZW5ndGgsIGN1cnJlbnRB
Y3Rpb25JbmRleCkgPT0gQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlcykKKyAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50QWN0aW9uSW5kZXg7CisgICAgICAgIGN1cnJlbnRBY3Rpb25JbmRl
eCArPSBBY3Rpb246OnNlcmlhbGl6ZWRMZW5ndGgoYWN0aW9ucywgYWN0aW9uc0xlbmd0aCwgY3Vy
cmVudEFjdGlvbkluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKTsKK30KKyAgICAKIFN0eWxlU2hlZXRDb250ZW50cyogQ29udGVudEV4
dGVuc2lvbjo6Z2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KCkKIHsKLSAgICBpZiAobV9wYXJz
ZWRHbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBtX2dsb2JhbERp
c3BsYXlOb25lU3R5bGVTaGVldC5nZXQoKTsKLQotICAgIG1fcGFyc2VkR2xvYmFsRGlzcGxheU5v
bmVTdHlsZVNoZWV0ID0gdHJ1ZTsKKyAgICByZXR1cm4gbV9nbG9iYWxEaXNwbGF5Tm9uZVN0eWxl
U2hlZXQuZ2V0KCk7Cit9CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RvcnMgPSBtX2NvbXBp
bGVkRXh0ZW5zaW9uLT5nbG9iYWxEaXNwbGF5Tm9uZVNlbGVjdG9ycygpOwotICAgIGlmIChzZWxl
Y3RvcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKK3ZvaWQgQ29udGVudEV4
dGVuc2lvbjo6Y29tcGlsZUdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpCit7CisgICAgdWlu
dDMyX3QgZmlyc3RJZ25vcmVQcmV2aW91c1J1bGVzID0gZmluZEZpcnN0SWdub3JlUHJldmlvdXNS
dWxlcygpOworICAgIAorICAgIGF1dG8qIGFjdGlvbnMgPSBtX2NvbXBpbGVkRXh0ZW5zaW9uLT5h
Y3Rpb25zKCk7CisgICAgdWludDMyX3QgYWN0aW9uc0xlbmd0aCA9IG1fY29tcGlsZWRFeHRlbnNp
b24tPmFjdGlvbnNMZW5ndGgoKTsKIAorICAgIGF1dG8gaW5HbG9iYWxEaXNwbGF5Tm9uZVN0eWxl
U2hlZXQgPSBbJl0oY29uc3QgdWludDMyX3QgbG9jYXRpb24pCisgICAgeworICAgICAgICByZXR1
cm4gbG9jYXRpb24gPCBmaXJzdElnbm9yZVByZXZpb3VzUnVsZXMgJiYgQWN0aW9uOjpkZXNlcmlh
bGl6ZVR5cGUoYWN0aW9ucywgYWN0aW9uc0xlbmd0aCwgbG9jYXRpb24pID09IEFjdGlvblR5cGU6
OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3I7CisgICAgfTsKKyAgICAKICAgICBTdHJpbmdCdWlsZGVy
IGNzczsKLSAgICBmb3IgKGF1dG8mIHNlbGVjdG9yIDogc2VsZWN0b3JzKSB7Ci0gICAgICAgIGNz
cy5hcHBlbmQoc2VsZWN0b3IpOwotICAgICAgICBjc3MuYXBwZW5kKCJ7Iik7Ci0gICAgICAgIGNz
cy5hcHBlbmQoQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpkaXNwbGF5Tm9uZUNTU1J1bGUoKSk7
Ci0gICAgICAgIGNzcy5hcHBlbmQoIn0iKTsKKyAgICBmb3IgKHVpbnQzMl90IHVuaXZlcnNhbEFj
dGlvbkxvY2F0aW9uIDogbV91bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMpIHsKKyAgICAg
ICAgaWYgKGluR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KHVuaXZlcnNhbEFjdGlvbkxvY2F0
aW9uKSkgeworICAgICAgICAgICAgaWYgKCFjc3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IGNzcy5hcHBlbmQoJywnKTsKKyAgICAgICAgICAgIEFjdGlvbiBhY3Rpb24gPSBBY3Rpb246OmRl
c2VyaWFsaXplKGFjdGlvbnMsIGFjdGlvbnNMZW5ndGgsIHVuaXZlcnNhbEFjdGlvbkxvY2F0aW9u
KTsKKyAgICAgICAgICAgIEFTU0VSVChhY3Rpb24udHlwZSgpID09IEFjdGlvblR5cGU6OkNTU0Rp
c3BsYXlOb25lU2VsZWN0b3IpOworICAgICAgICAgICAgY3NzLmFwcGVuZChhY3Rpb24uc3RyaW5n
QXJndW1lbnQoKSk7CisgICAgICAgIH0KICAgICB9CisgICAgaWYgKGNzcy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBjc3MuYXBwZW5kKCJ7Iik7CisgICAgY3NzLmFwcGVuZChDb250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmRpc3BsYXlOb25lQ1NTUnVsZSgpKTsKKyAgICBjc3MuYXBw
ZW5kKCJ9Iik7CiAKICAgICBtX2dsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCA9IFN0eWxlU2hl
ZXRDb250ZW50czo6Y3JlYXRlKCk7CiAgICAgbV9nbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQt
PnNldElzVXNlclN0eWxlU2hlZXQodHJ1ZSk7CiAgICAgaWYgKCFtX2dsb2JhbERpc3BsYXlOb25l
U3R5bGVTaGVldC0+cGFyc2VTdHJpbmcoY3NzLnRvU3RyaW5nKCkpKQogICAgICAgICBtX2dsb2Jh
bERpc3BsYXlOb25lU3R5bGVTaGVldCA9IG51bGxwdHI7CiAKLSAgICByZXR1cm4gbV9nbG9iYWxE
aXNwbGF5Tm9uZVN0eWxlU2hlZXQuZ2V0KCk7CisgICAgLy8gVGhlc2UgYWN0aW9ucyBkb24ndCBu
ZWVkIHRvIGJlIGFwcGxpZWQgaW5kaXZpZHVhbGx5IGFueSBtb3JlLiBUaGV5IHdpbGwgYWxsIGJl
IGFwcGxpZWQgdG8gZXZlcnkgcGFnZSBhcyBhIHByZWNvbXBpbGVkIHN0eWxlIHNoZWV0LgorICAg
IG1fdW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zLnJlbW92ZUFsbE1hdGNoaW5nKGluR2xv
YmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KTsKIH0KIAotY29uc3QgREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlcjo6QWN0aW9ucyYgQ29udGVudEV4dGVuc2lvbjo6Y2FjaGVkRG9tYWluQWN0aW9ucyhjb25z
dCBTdHJpbmcmIGRvbWFpbikKK3ZvaWQgQ29udGVudEV4dGVuc2lvbjo6cG9wdWxhdGVEb21haW5D
YWNoZUlmTmVlZGVkKGNvbnN0IFN0cmluZyYgZG9tYWluKQogewogICAgIGlmIChtX2NhY2hlZERv
bWFpbiAhPSBkb21haW4pIHsKICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnBy
ZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT5kb21haW5GaWx0ZXJzQnl0ZWNvZGUoKSwgbV9jb21w
aWxlZEV4dGVuc2lvbi0+ZG9tYWluRmlsdGVyc0J5dGVjb2RlTGVuZ3RoKCkpOwpAQCAtODUsMTAg
KzEyNiwyOSBAQCBjb25zdCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zJiBDCiAgICAg
ICAgIG1fY2FjaGVkRG9tYWluQWN0aW9ucy5jbGVhcigpOwogICAgICAgICBmb3IgKHVpbnQ2NF90
IGFjdGlvbiA6IGRvbWFpbkFjdGlvbnMpCiAgICAgICAgICAgICBtX2NhY2hlZERvbWFpbkFjdGlv
bnMuYWRkKGFjdGlvbik7CisgICAgICAgIAorICAgICAgICBtX2NhY2hlZFVuaXZlcnNhbERvbWFp
bkFjdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBtX3VuaXZl
cnNhbEFjdGlvbnNXaXRoRG9tYWlucykgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSgoYWN0aW9uICYgfklmRG9tYWluRmxhZykgPT0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlv
biksICJVbml2ZXJzYWwgYWN0aW9ucyB3aXRoIGRvbWFpbnMgc2hvdWxkIG5vdCBoYXZlIGZsYWdz
LiIpOworICAgICAgICAgICAgaWYgKCEhKGFjdGlvbiAmIElmRG9tYWluRmxhZykgPT0gbV9jYWNo
ZWREb21haW5BY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpCisgICAgICAgICAgICAgICAgbV9jYWNo
ZWRVbml2ZXJzYWxEb21haW5BY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0
aW9uKSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1fY2FjaGVkRG9tYWluID0gZG9t
YWluOwogICAgIH0KK30KKworY29uc3QgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyYg
Q29udGVudEV4dGVuc2lvbjo6Y2FjaGVkRG9tYWluQWN0aW9ucyhjb25zdCBTdHJpbmcmIGRvbWFp
bikKK3sKKyAgICBwb3B1bGF0ZURvbWFpbkNhY2hlSWZOZWVkZWQoZG9tYWluKTsKICAgICByZXR1
cm4gbV9jYWNoZWREb21haW5BY3Rpb25zOwogfQorCitjb25zdCBWZWN0b3I8dWludDMyX3Q+JiBD
b250ZW50RXh0ZW5zaW9uOjp1bml2ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMoY29uc3QgU3RyaW5n
JiBkb21haW4pCit7CisgICAgcG9wdWxhdGVEb21haW5DYWNoZUlmTmVlZGVkKGRvbWFpbik7Cisg
ICAgcmV0dXJuIG1fY2FjaGVkVW5pdmVyc2FsRG9tYWluQWN0aW9uczsKK30KICAgICAKIH0gLy8g
bmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbi5oCShyZXZpc2lvbiAxODcwMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE3ICs0OSwyNiBA
QCBwdWJsaWM6CiAgICAgY29uc3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4
dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7IH0KICAg
ICBTdHlsZVNoZWV0Q29udGVudHMqIGdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpOwogICAg
IGNvbnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIGNhY2hlZERvbWFpbkFjdGlv
bnMoY29uc3QgU3RyaW5nJiBkb21haW4pOworICAgIGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIHVu
aXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucygpIHsgcmV0dXJuIG1fdW5pdmVyc2FsQWN0aW9u
c1dpdGhvdXREb21haW5zOyB9CisgICAgY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgdW5pdmVyc2Fs
QWN0aW9uc1dpdGhEb21haW5zKGNvbnN0IFN0cmluZyYgZG9tYWluKTsKIAogcHJpdmF0ZToKICAg
ICBDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmVmPENvbXBpbGVk
Q29udGVudEV4dGVuc2lvbj4mJik7Ci0KKyAgICB1aW50MzJfdCBmaW5kRmlyc3RJZ25vcmVQcmV2
aW91c1J1bGVzKCkgY29uc3Q7CisgICAgCiAgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKICAgICBS
ZWY8Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBtX2NvbXBpbGVkRXh0ZW5zaW9uOworCiAgICAg
UmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gbV9nbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ7
Ci0gICAgYm9vbCBtX3BhcnNlZEdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldDsKLSAgICAKKyAg
ICB2b2lkIGNvbXBpbGVHbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQoKTsKKwogICAgIFN0cmlu
ZyBtX2NhY2hlZERvbWFpbjsKKyAgICB2b2lkIHBvcHVsYXRlRG9tYWluQ2FjaGVJZk5lZWRlZChj
b25zdCBTdHJpbmcmIGRvbWFpbik7CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9u
cyBtX2NhY2hlZERvbWFpbkFjdGlvbnM7CisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2NhY2hlZFVu
aXZlcnNhbERvbWFpbkFjdGlvbnM7CisKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fdW5pdmVyc2Fs
QWN0aW9uc1dpdGhvdXREb21haW5zOworICAgIFZlY3Rvcjx1aW50NjRfdD4gbV91bml2ZXJzYWxB
Y3Rpb25zV2l0aERvbWFpbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9u
cwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODcwMjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsMTEgKzI1MSw5IEBAIHN0ZDo6ZXJyb3JfY29kZSBj
b21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICBVUkxGaWx0ZXJQYXJzZXIgZmlsdGVyc1dpdGhv
dXREb21haW5QYXJzZXIoZmlsdGVyc1dpdGhvdXREb21haW5zKTsKICAgICBVUkxGaWx0ZXJQYXJz
ZXIgZmlsdGVyc1dpdGhEb21haW5QYXJzZXIoZmlsdGVyc1dpdGhEb21haW5zKTsKICAgICAKLSAg
ICBib29sIGlnbm9yZVByZXZpb3VzUnVsZXNTZWVuID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25l
ZCBydWxlSW5kZXggPSAwOyBydWxlSW5kZXggPCBwYXJzZWRSdWxlTGlzdC5zaXplKCk7ICsrcnVs
ZUluZGV4KSB7CiAgICAgICAgIGNvbnN0IENvbnRlbnRFeHRlbnNpb25SdWxlJiBjb250ZW50RXh0
ZW5zaW9uUnVsZSA9IHBhcnNlZFJ1bGVMaXN0W3J1bGVJbmRleF07CiAgICAgICAgIGNvbnN0IFRy
aWdnZXImIHRyaWdnZXIgPSBjb250ZW50RXh0ZW5zaW9uUnVsZS50cmlnZ2VyKCk7Ci0gICAgICAg
IGNvbnN0IEFjdGlvbiYgYWN0aW9uID0gY29udGVudEV4dGVuc2lvblJ1bGUuYWN0aW9uKCk7CiAg
ICAgICAgIEFTU0VSVCh0cmlnZ2VyLnVybEZpbHRlci5sZW5ndGgoKSk7CiAKICAgICAgICAgLy8g
SGlnaCBiaXRzIGFyZSB1c2VkIGZvciBmbGFncy4gVGhpcyBzaG91bGQgbWF0Y2ggaG93IHRoZXkg
YXJlIHVzZWQgaW4gREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUuCkBAIC0yNjcsMTEg
KzI2NSw2IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICAg
ICAgICAgIEFTU0VSVCh0cmlnZ2VyLmRvbWFpbkNvbmRpdGlvbiA9PSBUcmlnZ2VyOjpEb21haW5D
b25kaXRpb246Ok5vbmUpOwogICAgICAgICAgICAgc3RhdHVzID0gZmlsdGVyc1dpdGhvdXREb21h
aW5QYXJzZXIuYWRkUGF0dGVybih0cmlnZ2VyLnVybEZpbHRlciwgdHJpZ2dlci51cmxGaWx0ZXJJ
c0Nhc2VTZW5zaXRpdmUsIGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MpOwogICAgICAgICAgICAgaWYg
KHN0YXR1cyA9PSBVUkxGaWx0ZXJQYXJzZXI6Ok1hdGNoZXNFdmVyeXRoaW5nKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFpZ25vcmVQcmV2aW91c1J1bGVzU2VlbgotICAgICAgICAgICAgICAgICAg
ICAmJiB0cmlnZ2VyLmRvbWFpbkNvbmRpdGlvbiA9PSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246
Ok5vbmUKLSAgICAgICAgICAgICAgICAgICAgJiYgYWN0aW9uLnR5cGUoKSA9PSBBY3Rpb25UeXBl
OjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yCi0gICAgICAgICAgICAgICAgICAgICYmICF0cmlnZ2Vy
LmZsYWdzKQotICAgICAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzIHw9IERp
c3BsYXlOb25lU3R5bGVTaGVldEZsYWc7CiAgICAgICAgICAgICAgICAgdW5pdmVyc2FsQWN0aW9u
c1dpdGhvdXREb21haW5zLmFkZChhY3Rpb25Mb2NhdGlvbkFuZEZsYWdzKTsKICAgICAgICAgICAg
ICAgICBzdGF0dXMgPSBVUkxGaWx0ZXJQYXJzZXI6Ok9rOwogICAgICAgICAgICAgfQpAQCAtMzAw
LDkgKzI5Myw2IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAg
ICAgICAgICAgICAgICBkb21haW5GaWx0ZXJzLmFkZERvbWFpbihhY3Rpb25Mb2NhdGlvbkFuZEZs
YWdzLCBkb21haW4pOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChzdGF0dXMgPT0gVVJMRmls
dGVyUGFyc2VyOjpPayk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYWN0aW9uLnR5cGUoKSA9PSBB
Y3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzKQotICAgICAgICAgICAgaWdub3JlUHJldmlv
dXNSdWxlc1NlZW4gPSB0cnVlOwogICAgIH0KICAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhwYXJz
ZWRSdWxlTGlzdCwgcGFyc2VkUnVsZUxpc3QuY2FwYWNpdHkoKSAqIHNpemVvZihDb250ZW50RXh0
ZW5zaW9uUnVsZSkpOyAvLyBEb2Vzbid0IGluY2x1ZGUgc3RyaW5ncy4KICAgICBMT0dfTEFSR0Vf
U1RSVUNUVVJFUyhhY3Rpb25Mb2NhdGlvbnMsIGFjdGlvbkxvY2F0aW9ucy5jYXBhY2l0eSgpICog
c2l6ZW9mKHVuc2lnbmVkKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwCShyZXZpc2lvbiAxODcw
MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDkgQEAgQ29udGVudEV4dGVuc2lv
blJ1bGU6OkNvbnRlbnRFeHRlbnNpb25SdQogICAgIEFTU0VSVCghbV90cmlnZ2VyLnVybEZpbHRl
ci5pc0VtcHR5KCkpOwogfQogCi1BY3Rpb24gQWN0aW9uOjpkZXNlcmlhbGl6ZShjb25zdCBTZXJp
YWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCwg
dW5zaWduZWQgbG9jYXRpb24pCitBY3Rpb24gQWN0aW9uOjpkZXNlcmlhbGl6ZShjb25zdCBTZXJp
YWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdWludDMyX3QgYWN0aW9uc0xlbmd0aCwg
dWludDMyX3QgbG9jYXRpb24pCiB7CisgICAgUkVMRUFTRV9BU1NFUlQobG9jYXRpb24gPCBhY3Rp
b25zTGVuZ3RoKTsKICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEFjdGlvblR5cGU+KGFjdGlvbnNb
bG9jYXRpb25dKSkgewogICAgIGNhc2UgQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzOgogICAgICAg
ICByZXR1cm4gQWN0aW9uKEFjdGlvblR5cGU6OkJsb2NrQ29va2llcywgbG9jYXRpb24pOwpAQCAt
NDksMTAgKzUwLDExIEBAIEFjdGlvbiBBY3Rpb246OmRlc2VyaWFsaXplKGNvbnN0IFNlcmlhbGkK
ICAgICBjYXNlIEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6CiAgICAgICAgIHJldHVy
biBBY3Rpb24oQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlcywgbG9jYXRpb24pOwogICAg
IGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjogewotICAgICAgICB1bnNp
Z25lZCBzdHJpbmdTdGFydEluZGV4ID0gbG9jYXRpb24gKyBzaXplb2YoQWN0aW9uVHlwZSkgKyBz
aXplb2YodW5zaWduZWQpICsgc2l6ZW9mKGJvb2wpOworICAgICAgICB1aW50MzJfdCBoZWFkZXJM
ZW5ndGggPSBzaXplb2YoQWN0aW9uVHlwZSkgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKGJv
b2wpOworICAgICAgICB1aW50MzJfdCBzdHJpbmdTdGFydEluZGV4ID0gbG9jYXRpb24gKyBoZWFk
ZXJMZW5ndGg7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjdGlvbnNMZW5ndGggPj0gc3RyaW5n
U3RhcnRJbmRleCk7Ci0gICAgICAgIHVuc2lnbmVkIHNlbGVjdG9yTGVuZ3RoID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPigmYWN0aW9uc1tsb2NhdGlvbiArIHNpemVvZihBY3Rp
b25UeXBlKV0pOwotICAgICAgICBib29sIHdpZGVDaGFyYWN0ZXJzID0gYWN0aW9uc1tsb2NhdGlv
biArIHNpemVvZihBY3Rpb25UeXBlKSArIHNpemVvZih1bnNpZ25lZCldOworICAgICAgICB1aW50
MzJfdCBzZWxlY3Rvckxlbmd0aCA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4o
JmFjdGlvbnNbbG9jYXRpb24gKyBzaXplb2YoQWN0aW9uVHlwZSldKTsKKyAgICAgICAgYm9vbCB3
aWRlQ2hhcmFjdGVycyA9IGFjdGlvbnNbbG9jYXRpb24gKyBzaXplb2YoQWN0aW9uVHlwZSkgKyBz
aXplb2YodWludDMyX3QpXTsKICAgICAgICAgCiAgICAgICAgIGlmICh3aWRlQ2hhcmFjdGVycykg
ewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWN0aW9uc0xlbmd0aCA+PSBzdHJpbmdTdGFy
dEluZGV4ICsgc2VsZWN0b3JMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKQEAgLTYzLDEyICs2NSw1
NiBAQCBBY3Rpb24gQWN0aW9uOjpkZXNlcmlhbGl6ZShjb25zdCBTZXJpYWxpCiAgICAgfQogICAg
IGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTdHlsZVNoZWV0OgogICAgIGNhc2UgQWN0
aW9uVHlwZTo6SW52YWxpZEFjdGlvbjoKKyAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIH0KLQorICAgIAorQWN0aW9uVHlwZSBBY3Rpb246
OmRlc2VyaWFsaXplVHlwZShjb25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29u
c3QgdWludDMyX3QgYWN0aW9uc0xlbmd0aCwgdWludDMyX3QgbG9jYXRpb24pCit7CisgICAgUkVM
RUFTRV9BU1NFUlQobG9jYXRpb24gPCBhY3Rpb25zTGVuZ3RoKTsKKyAgICBBY3Rpb25UeXBlIHR5
cGUgPSBzdGF0aWNfY2FzdDxBY3Rpb25UeXBlPihhY3Rpb25zW2xvY2F0aW9uXSk7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CisgICAgY2Fz
ZSBBY3Rpb25UeXBlOjpCbG9ja0xvYWQ6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2
aW91c1J1bGVzOgorICAgIGNhc2UgQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjoK
KyAgICAgICAgcmV0dXJuIHR5cGU7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9u
ZVN0eWxlU2hlZXQ6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpJbnZhbGlkQWN0aW9uOgorICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
ICAgIAordWludDMyX3QgQWN0aW9uOjpzZXJpYWxpemVkTGVuZ3RoKGNvbnN0IFNlcmlhbGl6ZWRB
Y3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1aW50MzJfdCBhY3Rpb25zTGVuZ3RoLCB1aW50MzJf
dCBsb2NhdGlvbikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbiA8IGFjdGlvbnNMZW5n
dGgpOworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8QWN0aW9uVHlwZT4oYWN0aW9uc1tsb2NhdGlv
bl0pKSB7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CisgICAgY2FzZSBBY3Rp
b25UeXBlOjpCbG9ja0xvYWQ6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1
bGVzOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEFjdGlvblR5cGUpOworICAgIGNhc2UgQWN0aW9u
VHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjogeworICAgICAgICB1aW50MzJfdCBoZWFkZXJM
ZW5ndGggPSBzaXplb2YoQWN0aW9uVHlwZSkgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKGJv
b2wpOworICAgICAgICB1aW50MzJfdCBzdHJpbmdTdGFydEluZGV4ID0gbG9jYXRpb24gKyBoZWFk
ZXJMZW5ndGg7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjdGlvbnNMZW5ndGggPj0gc3RyaW5n
U3RhcnRJbmRleCk7CisgICAgICAgIHVpbnQzMl90IHNlbGVjdG9yTGVuZ3RoID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPigmYWN0aW9uc1tsb2NhdGlvbiArIHNpemVvZihBY3Rp
b25UeXBlKV0pOworICAgICAgICBib29sIHdpZGVDaGFyYWN0ZXJzID0gYWN0aW9uc1tsb2NhdGlv
biArIHNpemVvZihBY3Rpb25UeXBlKSArIHNpemVvZih1aW50MzJfdCldOworICAgICAgICAKKyAg
ICAgICAgaWYgKHdpZGVDaGFyYWN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGhlYWRlckxlbmd0
aCArIHNlbGVjdG9yTGVuZ3RoICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgcmV0dXJuIGhlYWRl
ckxlbmd0aCArIHNlbGVjdG9yTGVuZ3RoICogc2l6ZW9mKExDaGFyKTsKKyAgICB9CisgICAgY2Fz
ZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ6CisgICAgY2FzZSBBY3Rpb25U
eXBlOjpJbnZhbGlkQWN0aW9uOgorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQogfQogCit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5z
aW9ucworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAxODcwMjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDkgQEAgc3RydWN0IEFjdGlvbiB7CiAgICAgICAg
ICAgICAmJiBtX3N0cmluZ0FyZ3VtZW50ID09IG90aGVyLm1fc3RyaW5nQXJndW1lbnQ7CiAgICAg
fQogCi0gICAgc3RhdGljIEFjdGlvbiBkZXNlcmlhbGl6ZShjb25zdCBTZXJpYWxpemVkQWN0aW9u
Qnl0ZSogYWN0aW9ucywgY29uc3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCwgdWludDMyX3QgbG9j
YXRpb24pOworICAgIHN0YXRpYyBBY3Rpb24gZGVzZXJpYWxpemUoY29uc3QgU2VyaWFsaXplZEFj
dGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVpbnQzMl90IGFjdGlvbnNMZW5ndGgsIHVpbnQzMl90
IGxvY2F0aW9uKTsKKyAgICBzdGF0aWMgQWN0aW9uVHlwZSBkZXNlcmlhbGl6ZVR5cGUoY29uc3Qg
U2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVpbnQzMl90IGFjdGlvbnNMZW5n
dGgsIHVpbnQzMl90IGxvY2F0aW9uKTsKKyAgICBzdGF0aWMgdWludDMyX3Qgc2VyaWFsaXplZExl
bmd0aChjb25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdWludDMyX3Qg
YWN0aW9uc0xlbmd0aCwgdWludDMyX3QgbG9jYXRpb24pOwogCiAgICAgdm9pZCBzZXRFeHRlbnNp
b25JZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uSWRlbnRpZmllcikgeyBtX2V4dGVu
c2lvbklkZW50aWZpZXIgPSBleHRlbnNpb25JZGVudGlmaWVyOyB9CiAgICAgY29uc3QgU3RyaW5n
JiBleHRlbnNpb25JZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnNpb25JZGVudGlm
aWVyOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAJKHJldmlzaW9uIDE4NzAyMykK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFj
a2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDIwICs5MiwyNyBAQCBWZWN0b3I8QWN0aW9u
PiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6CiAgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXIgd2l0aG91dERvbWFpbnNJbnRlcnByZXRlcihjb21waWxlZEV4dGVuc2lvbi5maWx0ZXJzV2l0
aG91dERvbWFpbnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVuc2lvbi5maWx0ZXJzV2l0aG91dERv
bWFpbnNCeXRlY29kZUxlbmd0aCgpKTsKICAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
QWN0aW9ucyB3aXRob3V0RG9tYWluc0FjdGlvbnMgPSB3aXRob3V0RG9tYWluc0ludGVycHJldGVy
LmludGVycHJldCh1cmxDU3RyaW5nLCBmbGFncyk7CiAgICAgICAgIAorICAgICAgICBTdHJpbmcg
ZG9tYWluID0gcmVzb3VyY2VMb2FkSW5mby5tYWluRG9jdW1lbnRVUkwuaG9zdCgpOwogICAgICAg
ICBERkFCeXRlY29kZUludGVycHJldGVyIHdpdGhEb21haW5zSW50ZXJwcmV0ZXIoY29tcGlsZWRF
eHRlbnNpb24uZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGUoKSwgY29tcGlsZWRFeHRlbnNpb24u
ZmlsdGVyc1dpdGhEb21haW5zQnl0ZWNvZGVMZW5ndGgoKSk7Ci0gICAgICAgIERGQUJ5dGVjb2Rl
SW50ZXJwcmV0ZXI6OkFjdGlvbnMgd2l0aERvbWFpbnNBY3Rpb25zID0gd2l0aERvbWFpbnNJbnRl
cnByZXRlci5pbnRlcnByZXRXaXRoRG9tYWlucyh1cmxDU3RyaW5nLCBmbGFncywgY29udGVudEV4
dGVuc2lvbi0+Y2FjaGVkRG9tYWluQWN0aW9ucyhyZXNvdXJjZUxvYWRJbmZvLm1haW5Eb2N1bWVu
dFVSTC5ob3N0KCkpKTsKKyAgICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB3
aXRoRG9tYWluc0FjdGlvbnMgPSB3aXRoRG9tYWluc0ludGVycHJldGVyLmludGVycHJldFdpdGhE
b21haW5zKHVybENTdHJpbmcsIGZsYWdzLCBjb250ZW50RXh0ZW5zaW9uLT5jYWNoZWREb21haW5B
Y3Rpb25zKGRvbWFpbikpOwogICAgICAgICAKICAgICAgICAgY29uc3QgU2VyaWFsaXplZEFjdGlv
bkJ5dGUqIGFjdGlvbnMgPSBjb21waWxlZEV4dGVuc2lvbi5hY3Rpb25zKCk7CiAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGFjdGlvbnNMZW5ndGggPSBjb21waWxlZEV4dGVuc2lvbi5hY3Rpb25zTGVu
Z3RoKCk7CiAgICAgICAgIAogICAgICAgICBib29sIHNhd0lnbm9yZVByZXZpb3VzUnVsZXMgPSBm
YWxzZTsKLSAgICAgICAgaWYgKCF3aXRob3V0RG9tYWluc0FjdGlvbnMuaXNFbXB0eSgpIHx8ICF3
aXRoRG9tYWluc0FjdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50
MzJfdD4mIHVuaXZlcnNhbFdpdGhEb21haW5zID0gY29udGVudEV4dGVuc2lvbi0+dW5pdmVyc2Fs
QWN0aW9uc1dpdGhEb21haW5zKGRvbWFpbik7CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50MzJf
dD4mIHVuaXZlcnNhbFdpdGhvdXREb21haW5zID0gY29udGVudEV4dGVuc2lvbi0+dW5pdmVyc2Fs
QWN0aW9uc1dpdGhvdXREb21haW5zKCk7CisgICAgICAgIGlmICghd2l0aG91dERvbWFpbnNBY3Rp
b25zLmlzRW1wdHkoKSB8fCAhd2l0aERvbWFpbnNBY3Rpb25zLmlzRW1wdHkoKSB8fCAhdW5pdmVy
c2FsV2l0aERvbWFpbnMuaXNFbXB0eSgpIHx8ICF1bml2ZXJzYWxXaXRob3V0RG9tYWlucy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50MzJfdD4gYWN0aW9uTG9jYXRpb25zOwot
ICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkod2l0aG91
dERvbWFpbnNBY3Rpb25zLnNpemUoKSArIHdpdGhEb21haW5zQWN0aW9ucy5zaXplKCkpOworICAg
ICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkod2l0aG91dERv
bWFpbnNBY3Rpb25zLnNpemUoKSArIHdpdGhEb21haW5zQWN0aW9ucy5zaXplKCkgKyB1bml2ZXJz
YWxXaXRob3V0RG9tYWlucy5zaXplKCkgKyB1bml2ZXJzYWxXaXRoRG9tYWlucy5zaXplKCkpOwog
ICAgICAgICAgICAgZm9yICh1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbiA6IHdpdGhvdXREb21haW5z
QWN0aW9ucykKICAgICAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMudW5jaGVja2VkQXBwZW5k
KHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3Rpb25Mb2NhdGlvbikpOwogICAgICAgICAgICAgZm9y
ICh1aW50NjRfdCBhY3Rpb25Mb2NhdGlvbiA6IHdpdGhEb21haW5zQWN0aW9ucykKICAgICAgICAg
ICAgICAgICBhY3Rpb25Mb2NhdGlvbnMudW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhY3Rpb25Mb2NhdGlvbikpOworICAgICAgICAgICAgZm9yICh1aW50MzJfdCBhY3Rpb25M
b2NhdGlvbiA6IHVuaXZlcnNhbFdpdGhvdXREb21haW5zKQorICAgICAgICAgICAgICAgIGFjdGlv
bkxvY2F0aW9ucy51bmNoZWNrZWRBcHBlbmQoYWN0aW9uTG9jYXRpb24pOworICAgICAgICAgICAg
Zm9yICh1aW50MzJfdCBhY3Rpb25Mb2NhdGlvbiA6IHVuaXZlcnNhbFdpdGhEb21haW5zKQorICAg
ICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy51bmNoZWNrZWRBcHBlbmQoYWN0aW9uTG9jYXRp
b24pOwogICAgICAgICAgICAgc3RkOjpzb3J0KGFjdGlvbkxvY2F0aW9ucy5iZWdpbigpLCBhY3Rp
b25Mb2NhdGlvbnMuZW5kKCkpOwogCiAgICAgICAgICAgICAvLyBBZGQgYWN0aW9ucyBpbiByZXZl
cnNlIG9yZGVyIHRvIHByb3Blcmx5IGRlYWwgd2l0aCBJZ25vcmVQcmV2aW91c1J1bGVzLgpAQCAt
MTI2LDcgKzEzMyw3IEBAIFZlY3RvcjxBY3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoK
ICAgICB9CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAg
IGRvdWJsZSBhZGRlZFRpbWVFbmQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKLSAg
ICBXVEZMb2dBbHdheXMoIlRpbWUgYWRkZWQ6ICVmIG1pY3Jvc2Vjb25kcyAlcyIsIChhZGRlZFRp
bWVFbmQgLSBhZGRlZFRpbWVTdGFydCkgKiAxLjBlNiwgcmVzb3VyY2VMb2FkSW5mby5yZXNvdXJj
ZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBkYXRhTG9nRigiVGltZSBhZGRlZDog
JWYgbWljcm9zZWNvbmRzICVzIFxuIiwgKGFkZGVkVGltZUVuZCAtIGFkZGVkVGltZVN0YXJ0KSAq
IDEuMGU2LCByZXNvdXJjZUxvYWRJbmZvLnJlc291cmNlVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZpbmFsQWN0aW9uczsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAkocmV2aXNpb24gMTg3
MDIzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTUsMjEgKzU1LDIwIEBAIGVudW0gY2xhc3MgREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbiA6IHVpbnQKICAgICAvLyBBcHBlbmRBY3Rpb24gaGFzIG9uZSBhcmd1bWVudDoK
ICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCiAgICAgQXBwZW5kQWN0aW9u
ID0gMHg0LAotICAgIEFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0ID0gMHg1LAotICAgIEFw
cGVuZEFjdGlvbldpdGhJZkRvbWFpbiA9IDB4NiwKKyAgICBBcHBlbmRBY3Rpb25XaXRoSWZEb21h
aW4gPSAweDUsCiAgICAgCiAgICAgLy8gVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uIGhhcyB0d28g
YXJndW1lbnRzOgogICAgIC8vIFRoZSBmbGFncyB0byBjaGVjayBiZWZvcmUgYXBwZW5kaW5nICgy
IGJ5dGVzKS4KICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCi0gICAgVGVz
dEZsYWdzQW5kQXBwZW5kQWN0aW9uID0gMHg3LAotICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlv
bldpdGhJZkRvbWFpbiA9IDB4OCwKKyAgICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24gPSAweDYs
CisgICAgVGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluID0gMHg3LAogCiAgICAg
Ly8gVGVybWluYXRlIGhhcyBubyBhcmd1bWVudHMuCi0gICAgVGVybWluYXRlID0gMHg5LAorICAg
IFRlcm1pbmF0ZSA9IDB4OCwKIAogICAgIC8vIEp1bXAgaGFzIG9uZSBhcmd1bWVudDoKICAgICAv
LyBUaGUgZGlzdGFuY2UgdG8ganVtcCAoMS00IGJ5dGVzLCBzaWduZWQpLgotICAgIEp1bXAgPSAw
eEEsCisgICAgSnVtcCA9IDB4OSwKIH07CiAKIC8vIFRoZSBsYXN0IGZvdXIgYml0cyBjb250YWlu
IHRoZSBpbnN0cnVjdGlvbiB0eXBlLgpAQCAtMTEwLDcgKzEwOSw2IEBAIHN0YXRpYyBpbmxpbmUg
c2l6ZV90IGluc3RydWN0aW9uU2l6ZVdpdGgKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246Okp1bXA6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIFZhcmlh
YmxlIGluc3RydWN0aW9uIHNpemUuCiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpB
cHBlbmRBY3Rpb246Ci0gICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rp
b25EZWZhdWx0U3R5bGVzaGVldDoKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFw
cGVuZEFjdGlvbldpdGhJZkRvbWFpbjoKICAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29k
ZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50MzJfdCk7CiAgICAgY2FzZSBERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb246CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNw
cAkocmV2aXNpb24gMTg3MDIzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBQnl0ZWNvZGVDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDYgQEAg
dm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aQogewogICAgIC8vIEhpZ2gg
Yml0cyBhcmUgdXNlZCB0byBzdG9yZSBmbGFncy4gU2VlIGNvbXBpbGVSdWxlTGlzdC4KICAgICBp
ZiAoYWN0aW9uICYgQWN0aW9uRmxhZ01hc2spIHsKLSAgICAgICAgQVNTRVJUKCEoYWN0aW9uICYg
RGlzcGxheU5vbmVTdHlsZVNoZWV0RmxhZykpOwogICAgICAgICBpZiAoYWN0aW9uICYgSWZEb21h
aW5GbGFnKQogICAgICAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0
ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldp
dGhJZkRvbWFpbik7CiAgICAgICAgIGVsc2UKQEAgLTg5LDEwICs4OCw3IEBAIHZvaWQgREZBQnl0
ZWNvZGVDb21waWxlcjo6ZW1pdEFwcGVuZEFjdGkKICAgICAgICAgYXBwZW5kPHVpbnQxNl90Piht
X2J5dGVjb2RlLCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oYWN0aW9uID4+IDMyKSk7CiAgICAgICAg
IGFwcGVuZDx1aW50MzJfdD4obV9ieXRlY29kZSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlv
bikpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChhY3Rpb24gJiBEaXNwbGF5Tm9uZVN0eWxl
U2hlZXRGbGFnKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghKGFjdGlvbiAmIElmRG9t
YWluRmxhZykpOwotICAgICAgICAgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1f
Ynl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHls
ZXNoZWV0KTsKLSAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gJiBJZkRvbWFpbkZsYWcpCisgICAg
ICAgIGlmIChhY3Rpb24gJiBJZkRvbWFpbkZsYWcpCiAgICAgICAgICAgICBhcHBlbmQ8REZBQnl0
ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXBwZW5k
PERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkocmV2aXNpb24g
MTg3MDIzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJ
bnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDE1ICs5NiwxMyBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgbWF0Y2hlc0RvbWFpbih1aW50NjRfCiB2b2lkIERGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXI6OmludGVycHJldEFwcGVuZEFjdGlvbih1aW50MzJfdCYgcHJvZ3JhbUNvdW50ZXIsIEFj
dGlvbnMmIGFjdGlvbnMsIGJvb2wgaWZEb21haW4pCiB7CiAgICAgQVNTRVJUKGdldEluc3RydWN0
aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyKSA9PSBERkFC
eXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24KLSAgICAgICAgfHwgZ2V0SW5zdHJ1Y3Rp
b24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpID09IERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbgotICAgICAgICB8fCBn
ZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRl
cikgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hl
ZXQpOworICAgICAgICB8fCBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVu
Z3RoLCBwcm9ncmFtQ291bnRlcikgPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluKTsKICAgICB1aW50NjRfdCBhY3Rpb24gPSAoaWZEb21haW4gPyBJZkRv
bWFpbkZsYWcgOiAwKSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVpbnQzMl90Piht
X2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFC
eXRlY29kZUluc3RydWN0aW9uKSkpOwogICAgIGlmICghbV9kb21haW5BY3Rpb25zIHx8IG1hdGNo
ZXNEb21haW4oYWN0aW9uLCAqbV9kb21haW5BY3Rpb25zKSkKICAgICAgICAgYWN0aW9ucy5hZGQo
YWN0aW9uKTsKICAgICAKICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAgICAgQVNT
RVJUKGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
QXBwZW5kQWN0aW9uKSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikpOwotICAgIEFTU0VSVChpbnN0
cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFj
dGlvbikgPT0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCkpOwogfQogCiB2b2lkIERGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXI6OmludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbih1aW50MzJf
dCYgcHJvZ3JhbUNvdW50ZXIsIHVpbnQxNl90IGZsYWdzLCBBY3Rpb25zJiBhY3Rpb25zLCBib29s
IGlmRG9tYWluKQpAQCAtMTI4LDcgKzEyNiw3IEBAIHZvaWQgREZBQnl0ZWNvZGVJbnRlcnByZXRl
cjo6aW50ZXJwcmV0VGUKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24pID09IGluc3Ry
dWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdz
QW5kQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKSk7CiB9CiAKLURGQUJ5dGVjb2RlSW50ZXJwcmV0
ZXI6OkFjdGlvbnMgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6YWN0aW9uc0ZvckRlZmF1bHRTdHls
ZXNoZWV0RnJvbURGQVJvb3QoKQorREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFC
eXRlY29kZUludGVycHJldGVyOjphY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCkKIHsKICAgICBB
Y3Rpb25zIGFjdGlvbnM7CiAKQEAgLTEzOCwxOSArMTM2LDE2IEBAIERGQUJ5dGVjb2RlSW50ZXJw
cmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKIAogICAgIHdoaWxlIChwcm9ncmFtQ291bnRlciA8IGRm
YUJ5dGVjb2RlTGVuZ3RoKSB7CiAgICAgICAgIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1
Y3Rpb24gPSBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9n
cmFtQ291bnRlcik7Ci0gICAgICAgIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5bGVzaGVldCkKKyAgICAgICAgaWYgKGluc3Ry
dWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikKICAgICAgICAg
ICAgIGludGVycHJldEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwgYWN0aW9ucywgZmFsc2Up
OwotICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb24pCi0gICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlv
blNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7
CisgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikKKyAgICAgICAgICAgIGludGVycHJldEFwcGVuZEFj
dGlvbihwcm9ncmFtQ291bnRlciwgYWN0aW9ucywgdHJ1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGlu
c3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFj
dGlvbikKICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhB
cmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9u
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBhY3Rpb25zRm9yRGVmYXVsdFN0eWxl
c2hlZXRGcm9tREZBUm9vdCBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIERGQSB3aXRob3V0
IGRvbWFpbnMsCi0gICAgICAgICAgICAvLyB3aGljaCBzaG91bGQgbmV2ZXIgaGF2ZSBhbnkgYWN0
aW9ucyB3aXRoIGlmLWRvbWFpbi4KLSAgICAgICAgICAgIEFTU0VSVChpbnN0cnVjdGlvbiAhPSBE
RkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21h
aW4pOwotICAgICAgICAgICAgQVNTRVJUKGluc3RydWN0aW9uICE9IERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbik7CisgICAgICAgIGVsc2UgaWYgKGluc3Ry
dWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlv
bldpdGhJZkRvbWFpbikKKyAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9u
U2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBw
ZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGFjdGlvbnM7CiB9CkBAIC0xNzksMTYgKzE3
NCwxOCBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAg
IHVpbnQzMl90IGRmYUJ5dGVjb2RlTGVuZ3RoID0gZ2V0Qml0czx1aW50MzJfdD4obV9ieXRlY29k
ZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpOwogICAgICAgICBwcm9ncmFtQ291
bnRlciArPSBzaXplb2YodWludDMyX3QpOwogCi0gICAgICAgIC8vIFNraXAgdGhlIGRlZmF1bHQg
c3R5bGVzaGVldCBhY3Rpb25zIG9uIHRoZSBERkEgcm9vdC4gVGhlc2UgYXJlIGFjY2Vzc2VkIHZp
YSBhY3Rpb25zRm9yRGVmYXVsdFN0eWxlc2hlZXRGcm9tREZBUm9vdC4KKyAgICAgICAgLy8gU2tp
cCB0aGUgYWN0aW9ucyB3aXRob3V0IGZsYWdzIG9uIHRoZSBERkEgcm9vdC4gVGhlc2UgYXJlIGFj
Y2Vzc2VkIHZpYSBhY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nLgogICAgICAgICBpZiAoIWRmYVN0
YXJ0KSB7CiAgICAgICAgICAgICB3aGlsZSAocHJvZ3JhbUNvdW50ZXIgPCBkZmFCeXRlY29kZUxl
bmd0aCkgewogICAgICAgICAgICAgICAgIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rp
b24gPSBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFt
Q291bnRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KQotICAgICAgICAgICAg
ICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KTsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIGludGVycHJldEFwcGVuZEFj
dGlvbihwcm9ncmFtQ291bnRlciwgYWN0aW9ucywgZmFsc2UpOworICAgICAgICAgICAgICAgIGlm
IChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pCisg
ICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhB
cmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpB
cHBlbmRBY3Rpb25XaXRoSWZEb21haW4pCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3Vu
dGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChp
bnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRB
Y3Rpb24pCiAgICAgICAgICAgICAgICAgICAgIGludGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFj
dGlvbihwcm9ncmFtQ291bnRlciwgZmxhZ3MsIGFjdGlvbnMsIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChpbnN0cnVjdGlvbiA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0
RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pCisgICAgICAgICAgICAgICAgICAgIGlu
dGVycHJldFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbihwcm9ncmFtQ291bnRlciwgZmxhZ3MsIGFj
dGlvbnMsIHRydWUpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xOTYsNyArMTkzLDkgQEAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25z
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShnZXRJ
bnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikg
IT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uCi0gICAgICAgICAgICAgICAg
JiYgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNv
dW50ZXIpICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlv
biwKKyAgICAgICAgICAgICAgICAmJiBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVj
b2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uV2l0aElmRG9tYWluCisgICAgICAgICAgICAgICAgJiYgZ2V0SW5zdHJ1Y3Rpb24o
bV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpICE9IERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbgorICAgICAgICAgICAgICAg
ICYmIGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyKSAhPSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rp
b25XaXRoSWZEb21haW4sCiAgICAgICAgICAgICAgICAgIlRyaWdnZXJzIHRoYXQgbWF0Y2ggZXZl
cnl0aGluZyBzaG91bGQgb25seSBiZSBpbiB0aGUgZmlyc3QgREZBLiIpOwogICAgICAgICB9CiAg
ICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGVJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTg3MDIzKQorKysgU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBBY3Rpb25z
IGludGVycHJldChjb25zdCBDU3RyaW5nJiwgdWludDE2X3QgZmxhZ3MpOwogICAgIEFjdGlvbnMg
aW50ZXJwcmV0V2l0aERvbWFpbnMoY29uc3QgQ1N0cmluZyYsIHVpbnQxNl90IGZsYWdzLCBjb25z
dCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zJiBkb21haW5BY3Rpb25zKTsKLSAgICBB
Y3Rpb25zIGFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290KCk7CisgICAgQWN0
aW9ucyBhY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBp
bnRlcnByZXRBcHBlbmRBY3Rpb24odW5zaWduZWQmIHByb2dyYW1Db3VudGVyLCBBY3Rpb25zJiwg
Ym9vbCBpZkRvbWFpbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRJ
bmZvLmgJKHJldmlzaW9uIDE4NzAyMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDYgQEAgdHlwZWRlZiB1aW50
MTZfdCBSZXNvdXJjZUZsYWdzOwogLy8gVGhlIHZhbHVlcyAtMSBhbmQgLTIgYXJlIHVzZWQgZm9y
IHJlbW92ZWQgYW5kIGVtcHR5IHZhbHVlcyBpbiBIYXNoVGFibGVzLgogY29uc3QgdWludDY0X3Qg
QWN0aW9uRmxhZ01hc2sgPSAweDAwMDBGRkZGMDAwMDAwMDA7CiBjb25zdCB1aW50NjRfdCBJZkRv
bWFpbkZsYWcgPSAweDAwMDEwMDAwMDAwMDAwMDA7Ci1jb25zdCB1aW50NjRfdCBEaXNwbGF5Tm9u
ZVN0eWxlU2hlZXRGbGFnID0gMHgwMDAyMDAwMDAwMDAwMDAwOwogCiBSZXNvdXJjZVR5cGUgdG9S
ZXNvdXJjZVR5cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUpOwogdWludDE2X3QgcmVhZFJlc291cmNl
VHlwZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzAyMykKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDE1LTA3LTIwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gQ2FjaGUgYWN0aW9ucyB3aXRoIGRvbWFp
bnMgdGhhdCBtYXRjaCBldmVyeXRoaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDcwNTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZS5oOgorCiAyMDE1LTA3LTE2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgV2Vic2l0ZURhdGFTdG9yZSBvcGVyYXRpb25zIG5lZWQgdG8gZ3JhYiBi
YWNrZ3JvdW5kIGFzc2VydGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5oCShyZXZpc2lv
biAxODcwMjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgLy8gVGhpcyBzaG91bGQgYmUgaW5jcmVtZW50ZWQgZXZlcnkgdGltZSBhIGZ1
bmN0aW9uYWwgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGJ5dGVjb2RlLCBmaWxlIGZvcm1hdCwgZXRj
LgogICAgIC8vIHRvIHByZXZlbnQgY3Jhc2hpbmcgd2hpbGUgbG9hZGluZyBvbGQgZGF0YS4KLSAg
ICBjb25zdCBzdGF0aWMgdWludDMyX3QgQ3VycmVudENvbnRlbnRFeHRlbnNpb25GaWxlVmVyc2lv
biA9IDU7CisgICAgY29uc3Qgc3RhdGljIHVpbnQzMl90IEN1cnJlbnRDb250ZW50RXh0ZW5zaW9u
RmlsZVZlcnNpb24gPSA2OwogCiAgICAgc3RhdGljIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUm
IGRlZmF1bHRTdG9yZSgpOwogICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZT4gc3RvcmVXaXRoUGF0aChjb25zdCBXVEY6OlN0cmluZyYgc3RvcmVQYXRoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257137</attachid>
            <date>2015-07-20 15:42:36 -0700</date>
            <delta_ts>2015-07-20 16:32:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147050-20150720154123.patch</filename>
            <type>text/plain</type>
            <size>36761</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE1LTA3LTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQ2FjaGUgYWN0aW9ucyB3aXRoIGRvbWFpbnMgdGhhdCBtYXRjaCBldmVyeXRo
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcw
NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB5
b3UgaGF2ZSBsb3RzIG9mIHJ1bGVzIHdpdGggdHJpZ2dlcnMgbGlrZSB7InVybC1maWx0ZXIiOiIu
KiIsImlmLWRvbWFpbiI6WyIqd2Via2l0Lm9yZyJdfQorICAgICAgICB3ZSB3aWxsIHNwZW5kIGEg
bG90IG9mIHRpbWUgYWRkaW5nIHVubmVjZXNzYXJ5IGFjdGlvbnMgdG8gSGFzaFNldHMgd2hlbiB5
b3UgYXJlIG5vdCBvbiB3ZWJraXQub3JnLgorICAgICAgICBDYWNoaW5nIGFsbCB0aGUgcnVsZXMg
YW5kIG9ubHkgYWRkaW5nIHRoZW0gdG8gYSBjb2xsZWN0aW9uIG9uY2Ugd2hlbiB0aGUgZG9tYWlu
IGNoYW5nZXMgc2F2ZXMgYSBsb3Qgb2YgVVJMIGludGVycHJldGluZyB0aW1lLgorCisgICAgICAg
IFdlIGFscmVhZHkgaGFkIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIGNzcy1kaXNwbGF5LW5vbmUg
YWN0aW9ucyB3aXRoIHRyaWdnZXJzIHRoYXQgbWF0Y2hlZCBldmVyeXRoaW5nIHVzaW5nIGEgc3Bl
Y2lhbCBieXRlY29kZSBvcGVyYXRpb24uCisgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCBm
b3IgYSBzcGVjaWFsIGJ5dGVjb2RlIG9wZXJhdGlvbiBieSBjYWNoaW5nIHRoZSB0cmlnZ2VycyB0
aGF0IG1hdGNoIGV2ZXJ5dGhpbmcgd2l0aCBhbmQgd2l0aG91dCBkb21haW5zLAorICAgICAgICB0
aGVuIGZyb20gdGhvc2UgY2FjaGVkIGFjdGlvbnMgd2UgY29tcGlsZSBhIHN0eWxlc2hlZXQsIGFu
ZCBjcmVhdGUgY2FjaGVkIGFjdGlvbnMgZm9yIGV2ZXJ5IG5ldyBkb21haW4gd2UgdmlzaXQuCisK
KyAgICAgICAgQWxsIGZ1bmN0aW9uYWxpdHkgaXMgY292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbjo6fkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpnbG9iYWxE
aXNwbGF5Tm9uZVNlbGVjdG9ycyk6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmg6CisgICAgICAgICogY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6ZmluZEZpcnN0SWdub3Jl
UHJldmlvdXNSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbjo6Z2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpjb21waWxlR2xvYmFs
RGlzcGxheU5vbmVTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpDb250ZW50RXh0ZW5zaW9uOjpwb3B1bGF0ZURvbWFpbkNhY2hlSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246OmNhY2hl
ZERvbWFpbkFjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb246OnVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucyk6CisgICAgICAgICog
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246OmNvbXBpbGVkRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjp1
bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvblJ1bGU6OkNvbnRlbnRFeHRlbnNpb25SdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246OmRlc2VyaWFsaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb246OmRlc2VyaWFs
aXplVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpz
ZXJpYWxpemVkTGVuZ3RoKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGlv
bjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uOjpzZXRFeHRlbnNpb25JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb246OmV4dGVuc2lvbklkZW50aWZpZXIpOgorICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25z
Rm9yUmVzb3VyY2VMb2FkKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29k
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Omluc3RydWN0aW9uU2l6
ZVdpdGhBcmd1bWVudHMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
Q29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3Rpb24pOgorICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmludGVycHJldEFwcGVuZEFj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rp
b25zTWF0Y2hpbmdFdmVyeXRoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmFjdGlvbnNGb3JE
ZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290KTogRGVsZXRlZC4KKyAgICAgICAgKiBjb250ZW50
ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmg6CisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlTG9hZEluZm8uaDoKKwogMjAxNS0wNy0yMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTc0Mjg3KTogRmxhc2ggb2Yg
YmxhY2sgd2hlbiBvcGVuaW5nIGEgbmV3IHdlYiB2aWV3IG9yIG5hdmlnYXRpbmcgdG8gYSBuZXcg
cGFnZQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAxODcwMjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyNCArMzUsNiBAQCBuYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMgewogQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp+Q29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uKCkKIHsKIH0KLQotVmVjdG9yPFN0cmluZz4gQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uOjpnbG9iYWxEaXNwbGF5Tm9uZVNlbGVjdG9ycygpCi17Ci0gICAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlciBpbnRlcnByZXRlcihmaWx0ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZSgpLCBmaWx0
ZXJzV2l0aG91dERvbWFpbnNCeXRlY29kZUxlbmd0aCgpKTsKLSAgICBERkFCeXRlY29kZUludGVy
cHJldGVyOjpBY3Rpb25zIGFjdGlvbkxvY2F0aW9ucyA9IGludGVycHJldGVyLmFjdGlvbnNGb3JE
ZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290KCk7Ci0gICAgCi0gICAgVmVjdG9yPEFjdGlvbj4g
Z2xvYmFsQWN0aW9uczsKLSAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogYWN0aW9u
TG9jYXRpb25zKQotICAgICAgICBnbG9iYWxBY3Rpb25zLmFwcGVuZChBY3Rpb246OmRlc2VyaWFs
aXplKGFjdGlvbnMoKSwgYWN0aW9uc0xlbmd0aCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0
aW9uTG9jYXRpb24pKSk7Ci0gICAgCi0gICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0b3JzOwotICAg
IGZvciAoQWN0aW9uJiBhY3Rpb24gOiBnbG9iYWxBY3Rpb25zKSB7Ci0gICAgICAgIGlmIChhY3Rp
b24udHlwZSgpID09IEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IpCi0gICAgICAg
ICAgICBzZWxlY3RvcnMuYXBwZW5kKGFjdGlvbi5zdHJpbmdBcmd1bWVudCgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIHNlbGVjdG9yczsKLX0KICAgICAKIH0gLy8gbmFtZXNwYWNlIENvbnRl
bnRFeHRlbnNpb25zCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21waWxlZENvbnRlbnRFeHRl
bnNpb24uaAkocmV2aXNpb24gMTg3MDIzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgZG9tYWluRmlsdGVyc0J5dGVj
b2RlTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgU2VyaWFsaXplZEFjdGlv
bkJ5dGUqIGFjdGlvbnMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBhY3Rpb25z
TGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIFZlY3RvcjxTdHJpbmc+IGdsb2JhbERpc3BsYXlOb25l
U2VsZWN0b3JzKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbi5jcHAJKHJldmlzaW9uIDE4NzAyMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzOCAr
NDQsNzkgQEAgUmVmUHRyPENvbnRlbnRFeHRlbnNpb24+IENvbnRlbnRFeHRlbnNpbwogQ29udGVu
dEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJl
ZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYgY29tcGlsZWRFeHRlbnNpb24pCiAgICAgOiBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fY29tcGlsZWRFeHRlbnNpb24oV1RGOjpt
b3ZlKGNvbXBpbGVkRXh0ZW5zaW9uKSkKLSAgICAsIG1fcGFyc2VkR2xvYmFsRGlzcGxheU5vbmVT
dHlsZVNoZWV0KGZhbHNlKQogeworICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgd2l0aG91dERv
bWFpbnMobV9jb21waWxlZEV4dGVuc2lvbi0+ZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGUo
KSwgbV9jb21waWxlZEV4dGVuc2lvbi0+ZmlsdGVyc1dpdGhvdXREb21haW5zQnl0ZWNvZGVMZW5n
dGgoKSk7CisgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciB3aXRoRG9tYWlucyhtX2NvbXBpbGVk
RXh0ZW5zaW9uLT5maWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZSgpLCBtX2NvbXBpbGVkRXh0ZW5z
aW9uLT5maWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZUxlbmd0aCgpKTsKKyAgICBmb3IgKHVpbnQ2
NF90IGFjdGlvbiA6IHdpdGhvdXREb21haW5zLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKSkg
eworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlvbikgPT0gYWN0aW9u
KTsKKyAgICAgICAgbV91bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMuYXBwZW5kKHN0YXRp
Y19jYXN0PHVpbnQzMl90PihhY3Rpb24pKTsKKyAgICB9CisgICAgZm9yICh1aW50NjRfdCBhY3Rp
b24gOiB3aXRoRG9tYWlucy5hY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCkpIHsKKyAgICAgICAg
QVNTRVJUKChhY3Rpb24gJiB+SWZEb21haW5GbGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YWN0aW9uKSk7CisgICAgICAgIG1fdW5pdmVyc2FsQWN0aW9uc1dpdGhEb21haW5zLmFwcGVuZChh
Y3Rpb24pOworICAgIH0KKyAgICAKKyAgICBjb21waWxlR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNo
ZWV0KCk7CisgICAgbV91bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMuc2hyaW5rVG9GaXQo
KTsKKyAgICBtX3VuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucy5zaHJpbmtUb0ZpdCgpOwogfQog
Cit1aW50MzJfdCBDb250ZW50RXh0ZW5zaW9uOjpmaW5kRmlyc3RJZ25vcmVQcmV2aW91c1J1bGVz
KCkgY29uc3QKK3sKKyAgICBhdXRvKiBhY3Rpb25zID0gbV9jb21waWxlZEV4dGVuc2lvbi0+YWN0
aW9ucygpOworICAgIHVpbnQzMl90IGFjdGlvbnNMZW5ndGggPSBtX2NvbXBpbGVkRXh0ZW5zaW9u
LT5hY3Rpb25zTGVuZ3RoKCk7CisgICAgdWludDMyX3QgY3VycmVudEFjdGlvbkluZGV4ID0gMDsK
KyAgICB3aGlsZSAoY3VycmVudEFjdGlvbkluZGV4IDwgYWN0aW9uc0xlbmd0aCkgeworICAgICAg
ICBpZiAoQWN0aW9uOjpkZXNlcmlhbGl6ZVR5cGUoYWN0aW9ucywgYWN0aW9uc0xlbmd0aCwgY3Vy
cmVudEFjdGlvbkluZGV4KSA9PSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzKQorICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnRBY3Rpb25JbmRleDsKKyAgICAgICAgY3VycmVudEFjdGlv
bkluZGV4ICs9IEFjdGlvbjo6c2VyaWFsaXplZExlbmd0aChhY3Rpb25zLCBhY3Rpb25zTGVuZ3Ro
LCBjdXJyZW50QWN0aW9uSW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOworfQorICAgIAogU3R5bGVTaGVldENvbnRlbnRzKiBDb250
ZW50RXh0ZW5zaW9uOjpnbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQoKQogewotICAgIGlmICht
X3BhcnNlZEdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuIG1fZ2xv
YmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0LmdldCgpOwotCi0gICAgbV9wYXJzZWRHbG9iYWxEaXNw
bGF5Tm9uZVN0eWxlU2hlZXQgPSB0cnVlOworICAgIHJldHVybiBtX2dsb2JhbERpc3BsYXlOb25l
U3R5bGVTaGVldC5nZXQoKTsKK30KIAotICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdG9ycyA9IG1f
Y29tcGlsZWRFeHRlbnNpb24tPmdsb2JhbERpc3BsYXlOb25lU2VsZWN0b3JzKCk7Ci0gICAgaWYg
KHNlbGVjdG9ycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwordm9pZCBDb250
ZW50RXh0ZW5zaW9uOjpjb21waWxlR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KCkKK3sKKyAg
ICB1aW50MzJfdCBmaXJzdElnbm9yZVByZXZpb3VzUnVsZXMgPSBmaW5kRmlyc3RJZ25vcmVQcmV2
aW91c1J1bGVzKCk7CisgICAgCisgICAgYXV0byogYWN0aW9ucyA9IG1fY29tcGlsZWRFeHRlbnNp
b24tPmFjdGlvbnMoKTsKKyAgICB1aW50MzJfdCBhY3Rpb25zTGVuZ3RoID0gbV9jb21waWxlZEV4
dGVuc2lvbi0+YWN0aW9uc0xlbmd0aCgpOwogCisgICAgYXV0byBpbkdsb2JhbERpc3BsYXlOb25l
U3R5bGVTaGVldCA9IFsmXShjb25zdCB1aW50MzJfdCBsb2NhdGlvbikKKyAgICB7CisgICAgICAg
IHJldHVybiBsb2NhdGlvbiA8IGZpcnN0SWdub3JlUHJldmlvdXNSdWxlcyAmJiBBY3Rpb246OmRl
c2VyaWFsaXplVHlwZShhY3Rpb25zLCBhY3Rpb25zTGVuZ3RoLCBsb2NhdGlvbikgPT0gQWN0aW9u
VHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3RvcjsKKyAgICB9OworICAgIAogICAgIFN0cmluZ0J1
aWxkZXIgY3NzOwotICAgIGZvciAoYXV0byYgc2VsZWN0b3IgOiBzZWxlY3RvcnMpIHsKLSAgICAg
ICAgY3NzLmFwcGVuZChzZWxlY3Rvcik7Ci0gICAgICAgIGNzcy5hcHBlbmQoInsiKTsKLSAgICAg
ICAgY3NzLmFwcGVuZChDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OmRpc3BsYXlOb25lQ1NTUnVs
ZSgpKTsKLSAgICAgICAgY3NzLmFwcGVuZCgifSIpOworICAgIGZvciAodWludDMyX3QgdW5pdmVy
c2FsQWN0aW9uTG9jYXRpb24gOiBtX3VuaXZlcnNhbEFjdGlvbnNXaXRob3V0RG9tYWlucykgewor
ICAgICAgICBpZiAoaW5HbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQodW5pdmVyc2FsQWN0aW9u
TG9jYXRpb24pKSB7CisgICAgICAgICAgICBpZiAoIWNzcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgY3NzLmFwcGVuZCgnLCcpOworICAgICAgICAgICAgQWN0aW9uIGFjdGlvbiA9IEFjdGlv
bjo6ZGVzZXJpYWxpemUoYWN0aW9ucywgYWN0aW9uc0xlbmd0aCwgdW5pdmVyc2FsQWN0aW9uTG9j
YXRpb24pOworICAgICAgICAgICAgQVNTRVJUKGFjdGlvbi50eXBlKCkgPT0gQWN0aW9uVHlwZTo6
Q1NTRGlzcGxheU5vbmVTZWxlY3Rvcik7CisgICAgICAgICAgICBjc3MuYXBwZW5kKGFjdGlvbi5z
dHJpbmdBcmd1bWVudCgpKTsKKyAgICAgICAgfQogICAgIH0KKyAgICBpZiAoY3NzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGNzcy5hcHBlbmQoInsiKTsKKyAgICBjc3MuYXBwZW5k
KENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6ZGlzcGxheU5vbmVDU1NSdWxlKCkpOworICAgIGNz
cy5hcHBlbmQoIn0iKTsKIAogICAgIG1fZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0ID0gU3R5
bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoKTsKICAgICBtX2dsb2JhbERpc3BsYXlOb25lU3R5bGVT
aGVldC0+c2V0SXNVc2VyU3R5bGVTaGVldCh0cnVlKTsKICAgICBpZiAoIW1fZ2xvYmFsRGlzcGxh
eU5vbmVTdHlsZVNoZWV0LT5wYXJzZVN0cmluZyhjc3MudG9TdHJpbmcoKSkpCiAgICAgICAgIG1f
Z2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0ID0gbnVsbHB0cjsKIAotICAgIHJldHVybiBtX2ds
b2JhbERpc3BsYXlOb25lU3R5bGVTaGVldC5nZXQoKTsKKyAgICAvLyBUaGVzZSBhY3Rpb25zIGRv
bid0IG5lZWQgdG8gYmUgYXBwbGllZCBpbmRpdmlkdWFsbHkgYW55IG1vcmUuIFRoZXkgd2lsbCBh
bGwgYmUgYXBwbGllZCB0byBldmVyeSBwYWdlIGFzIGEgcHJlY29tcGlsZWQgc3R5bGUgc2hlZXQu
CisgICAgbV91bml2ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMucmVtb3ZlQWxsTWF0Y2hpbmco
aW5HbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQpOwogfQogCi1jb25zdCBERkFCeXRlY29kZUlu
dGVycHJldGVyOjpBY3Rpb25zJiBDb250ZW50RXh0ZW5zaW9uOjpjYWNoZWREb21haW5BY3Rpb25z
KGNvbnN0IFN0cmluZyYgZG9tYWluKQordm9pZCBDb250ZW50RXh0ZW5zaW9uOjpwb3B1bGF0ZURv
bWFpbkNhY2hlSWZOZWVkZWQoY29uc3QgU3RyaW5nJiBkb21haW4pCiB7CiAgICAgaWYgKG1fY2Fj
aGVkRG9tYWluICE9IGRvbWFpbikgewogICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGlu
dGVycHJldGVyKG1fY29tcGlsZWRFeHRlbnNpb24tPmRvbWFpbkZpbHRlcnNCeXRlY29kZSgpLCBt
X2NvbXBpbGVkRXh0ZW5zaW9uLT5kb21haW5GaWx0ZXJzQnl0ZWNvZGVMZW5ndGgoKSk7CkBAIC04
NSwxMCArMTI2LDI5IEBAIGNvbnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIEMK
ICAgICAgICAgbV9jYWNoZWREb21haW5BY3Rpb25zLmNsZWFyKCk7CiAgICAgICAgIGZvciAodWlu
dDY0X3QgYWN0aW9uIDogZG9tYWluQWN0aW9ucykKICAgICAgICAgICAgIG1fY2FjaGVkRG9tYWlu
QWN0aW9ucy5hZGQoYWN0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fY2FjaGVkVW5pdmVyc2Fs
RG9tYWluQWN0aW9ucy5jbGVhcigpOworICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IG1f
dW5pdmVyc2FsQWN0aW9uc1dpdGhEb21haW5zKSB7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKChhY3Rpb24gJiB+SWZEb21haW5GbGFnKSA9PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YWN0aW9uKSwgIlVuaXZlcnNhbCBhY3Rpb25zIHdpdGggZG9tYWlucyBzaG91bGQgbm90IGhhdmUg
ZmxhZ3MuIik7CisgICAgICAgICAgICBpZiAoISEoYWN0aW9uICYgSWZEb21haW5GbGFnKSA9PSBt
X2NhY2hlZERvbWFpbkFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkKKyAgICAgICAgICAgICAgICBt
X2NhY2hlZFVuaXZlcnNhbERvbWFpbkFjdGlvbnMuYXBwZW5kKHN0YXRpY19jYXN0PHVpbnQzMl90
PihhY3Rpb24pKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9jYWNoZWREb21haW4g
PSBkb21haW47CiAgICAgfQorfQorCitjb25zdCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rp
b25zJiBDb250ZW50RXh0ZW5zaW9uOjpjYWNoZWREb21haW5BY3Rpb25zKGNvbnN0IFN0cmluZyYg
ZG9tYWluKQoreworICAgIHBvcHVsYXRlRG9tYWluQ2FjaGVJZk5lZWRlZChkb21haW4pOwogICAg
IHJldHVybiBtX2NhY2hlZERvbWFpbkFjdGlvbnM7CiB9CisKK2NvbnN0IFZlY3Rvcjx1aW50MzJf
dD4mIENvbnRlbnRFeHRlbnNpb246OnVuaXZlcnNhbEFjdGlvbnNXaXRoRG9tYWlucyhjb25zdCBT
dHJpbmcmIGRvbWFpbikKK3sKKyAgICBwb3B1bGF0ZURvbWFpbkNhY2hlSWZOZWVkZWQoZG9tYWlu
KTsKKyAgICByZXR1cm4gbV9jYWNoZWRVbml2ZXJzYWxEb21haW5BY3Rpb25zOworfQogICAgIAog
fSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDE4NzAyMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTcgKzQ5
LDI2IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb21waWxlZENvbnRlbnRFeHRlbnNpb24mIGNvbXBp
bGVkRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21waWxlZEV4dGVuc2lvbi5nZXQoKTsg
fQogICAgIFN0eWxlU2hlZXRDb250ZW50cyogZ2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KCk7
CiAgICAgY29uc3QgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyYgY2FjaGVkRG9tYWlu
QWN0aW9ucyhjb25zdCBTdHJpbmcmIGRvbWFpbik7CisgICAgY29uc3QgVmVjdG9yPHVpbnQzMl90
PiYgdW5pdmVyc2FsQWN0aW9uc1dpdGhvdXREb21haW5zKCkgeyByZXR1cm4gbV91bml2ZXJzYWxB
Y3Rpb25zV2l0aG91dERvbWFpbnM7IH0KKyAgICBjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB1bml2
ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMoY29uc3QgU3RyaW5nJiBkb21haW4pOwogCiBwcml2YXRl
OgogICAgIENvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZWY8Q29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmKTsKLQorICAgIHVpbnQzMl90IGZpbmRGaXJzdElnbm9y
ZVByZXZpb3VzUnVsZXMoKSBjb25zdDsKKyAgICAKICAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwog
ICAgIFJlZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IG1fY29tcGlsZWRFeHRlbnNpb247CisK
ICAgICBSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBtX2dsb2JhbERpc3BsYXlOb25lU3R5bGVT
aGVldDsKLSAgICBib29sIG1fcGFyc2VkR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0OwotICAg
IAorICAgIHZvaWQgY29tcGlsZUdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpOworCiAgICAg
U3RyaW5nIG1fY2FjaGVkRG9tYWluOworICAgIHZvaWQgcG9wdWxhdGVEb21haW5DYWNoZUlmTmVl
ZGVkKGNvbnN0IFN0cmluZyYgZG9tYWluKTsKICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpB
Y3Rpb25zIG1fY2FjaGVkRG9tYWluQWN0aW9uczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fY2Fj
aGVkVW5pdmVyc2FsRG9tYWluQWN0aW9uczsKKworICAgIFZlY3Rvcjx1aW50MzJfdD4gbV91bml2
ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnM7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBtX3VuaXZl
cnNhbEFjdGlvbnNXaXRoRG9tYWluczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRl
bnNpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHJldmlzaW9uIDE4NzAyMykK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21w
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSwxMSArMjUxLDkgQEAgc3RkOjplcnJvcl9j
b2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgIFVSTEZpbHRlclBhcnNlciBmaWx0ZXJz
V2l0aG91dERvbWFpblBhcnNlcihmaWx0ZXJzV2l0aG91dERvbWFpbnMpOwogICAgIFVSTEZpbHRl
clBhcnNlciBmaWx0ZXJzV2l0aERvbWFpblBhcnNlcihmaWx0ZXJzV2l0aERvbWFpbnMpOwogICAg
IAotICAgIGJvb2wgaWdub3JlUHJldmlvdXNSdWxlc1NlZW4gPSBmYWxzZTsKICAgICBmb3IgKHVu
c2lnbmVkIHJ1bGVJbmRleCA9IDA7IHJ1bGVJbmRleCA8IHBhcnNlZFJ1bGVMaXN0LnNpemUoKTsg
KytydWxlSW5kZXgpIHsKICAgICAgICAgY29uc3QgQ29udGVudEV4dGVuc2lvblJ1bGUmIGNvbnRl
bnRFeHRlbnNpb25SdWxlID0gcGFyc2VkUnVsZUxpc3RbcnVsZUluZGV4XTsKICAgICAgICAgY29u
c3QgVHJpZ2dlciYgdHJpZ2dlciA9IGNvbnRlbnRFeHRlbnNpb25SdWxlLnRyaWdnZXIoKTsKLSAg
ICAgICAgY29uc3QgQWN0aW9uJiBhY3Rpb24gPSBjb250ZW50RXh0ZW5zaW9uUnVsZS5hY3Rpb24o
KTsKICAgICAgICAgQVNTRVJUKHRyaWdnZXIudXJsRmlsdGVyLmxlbmd0aCgpKTsKIAogICAgICAg
ICAvLyBIaWdoIGJpdHMgYXJlIHVzZWQgZm9yIGZsYWdzLiBUaGlzIHNob3VsZCBtYXRjaCBob3cg
dGhleSBhcmUgdXNlZCBpbiBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZS4KQEAgLTI2
NywxMSArMjY1LDYgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQog
ICAgICAgICAgICAgQVNTRVJUKHRyaWdnZXIuZG9tYWluQ29uZGl0aW9uID09IFRyaWdnZXI6OkRv
bWFpbkNvbmRpdGlvbjo6Tm9uZSk7CiAgICAgICAgICAgICBzdGF0dXMgPSBmaWx0ZXJzV2l0aG91
dERvbWFpblBhcnNlci5hZGRQYXR0ZXJuKHRyaWdnZXIudXJsRmlsdGVyLCB0cmlnZ2VyLnVybEZp
bHRlcklzQ2FzZVNlbnNpdGl2ZSwgYWN0aW9uTG9jYXRpb25BbmRGbGFncyk7CiAgICAgICAgICAg
ICBpZiAoc3RhdHVzID09IFVSTEZpbHRlclBhcnNlcjo6TWF0Y2hlc0V2ZXJ5dGhpbmcpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWlnbm9yZVByZXZpb3VzUnVsZXNTZWVuCi0gICAgICAgICAgICAg
ICAgICAgICYmIHRyaWdnZXIuZG9tYWluQ29uZGl0aW9uID09IFRyaWdnZXI6OkRvbWFpbkNvbmRp
dGlvbjo6Tm9uZQotICAgICAgICAgICAgICAgICAgICAmJiBhY3Rpb24udHlwZSgpID09IEFjdGlv
blR5cGU6OkNTU0Rpc3BsYXlOb25lU2VsZWN0b3IKLSAgICAgICAgICAgICAgICAgICAgJiYgIXRy
aWdnZXIuZmxhZ3MpCi0gICAgICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3Mg
fD0gRGlzcGxheU5vbmVTdHlsZVNoZWV0RmxhZzsKICAgICAgICAgICAgICAgICB1bml2ZXJzYWxB
Y3Rpb25zV2l0aG91dERvbWFpbnMuYWRkKGFjdGlvbkxvY2F0aW9uQW5kRmxhZ3MpOwogICAgICAg
ICAgICAgICAgIHN0YXR1cyA9IFVSTEZpbHRlclBhcnNlcjo6T2s7CiAgICAgICAgICAgICB9CkBA
IC0zMDAsOSArMjkzLDYgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50
RQogICAgICAgICAgICAgICAgIGRvbWFpbkZpbHRlcnMuYWRkRG9tYWluKGFjdGlvbkxvY2F0aW9u
QW5kRmxhZ3MsIGRvbWFpbik7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKHN0YXR1cyA9PSBV
UkxGaWx0ZXJQYXJzZXI6Ok9rKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhY3Rpb24udHlwZSgp
ID09IEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXMpCi0gICAgICAgICAgICBpZ25vcmVQ
cmV2aW91c1J1bGVzU2VlbiA9IHRydWU7CiAgICAgfQogICAgIExPR19MQVJHRV9TVFJVQ1RVUkVT
KHBhcnNlZFJ1bGVMaXN0LCBwYXJzZWRSdWxlTGlzdC5jYXBhY2l0eSgpICogc2l6ZW9mKENvbnRl
bnRFeHRlbnNpb25SdWxlKSk7IC8vIERvZXNuJ3QgaW5jbHVkZSBzdHJpbmdzLgogICAgIExPR19M
QVJHRV9TVFJVQ1RVUkVTKGFjdGlvbkxvY2F0aW9ucywgYWN0aW9uTG9jYXRpb25zLmNhcGFjaXR5
KCkgKiBzaXplb2YodW5zaWduZWQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5jcHAJKHJldmlzaW9u
IDE4NzAyMykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25SdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOSBAQCBDb250ZW50RXh0
ZW5zaW9uUnVsZTo6Q29udGVudEV4dGVuc2lvblJ1CiAgICAgQVNTRVJUKCFtX3RyaWdnZXIudXJs
RmlsdGVyLmlzRW1wdHkoKSk7CiB9CiAKLUFjdGlvbiBBY3Rpb246OmRlc2VyaWFsaXplKGNvbnN0
IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1bnNpZ25lZCBhY3Rpb25zTGVu
Z3RoLCB1bnNpZ25lZCBsb2NhdGlvbikKK0FjdGlvbiBBY3Rpb246OmRlc2VyaWFsaXplKGNvbnN0
IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1aW50MzJfdCBhY3Rpb25zTGVu
Z3RoLCB1aW50MzJfdCBsb2NhdGlvbikKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbiA8
IGFjdGlvbnNMZW5ndGgpOwogICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8QWN0aW9uVHlwZT4oYWN0
aW9uc1tsb2NhdGlvbl0pKSB7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CiAg
ICAgICAgIHJldHVybiBBY3Rpb24oQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzLCBsb2NhdGlvbik7
CkBAIC00OSwxMCArNTAsMTEgQEAgQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29uc3QgU2Vy
aWFsaQogICAgIGNhc2UgQWN0aW9uVHlwZTo6SWdub3JlUHJldmlvdXNSdWxlczoKICAgICAgICAg
cmV0dXJuIEFjdGlvbihBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzLCBsb2NhdGlvbik7
CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOiB7Ci0gICAgICAg
IHVuc2lnbmVkIHN0cmluZ1N0YXJ0SW5kZXggPSBsb2NhdGlvbiArIHNpemVvZihBY3Rpb25UeXBl
KSArIHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoYm9vbCk7CisgICAgICAgIHVpbnQzMl90IGhl
YWRlckxlbmd0aCA9IHNpemVvZihBY3Rpb25UeXBlKSArIHNpemVvZih1aW50MzJfdCkgKyBzaXpl
b2YoYm9vbCk7CisgICAgICAgIHVpbnQzMl90IHN0cmluZ1N0YXJ0SW5kZXggPSBsb2NhdGlvbiAr
IGhlYWRlckxlbmd0aDsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWN0aW9uc0xlbmd0aCA+PSBz
dHJpbmdTdGFydEluZGV4KTsKLSAgICAgICAgdW5zaWduZWQgc2VsZWN0b3JMZW5ndGggPSAqcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KCZhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9m
KEFjdGlvblR5cGUpXSk7Ci0gICAgICAgIGJvb2wgd2lkZUNoYXJhY3RlcnMgPSBhY3Rpb25zW2xv
Y2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVuc2lnbmVkKV07CisgICAgICAg
IHVpbnQzMl90IHNlbGVjdG9yTGVuZ3RoID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQqPigmYWN0aW9uc1tsb2NhdGlvbiArIHNpemVvZihBY3Rpb25UeXBlKV0pOworICAgICAgICBi
b29sIHdpZGVDaGFyYWN0ZXJzID0gYWN0aW9uc1tsb2NhdGlvbiArIHNpemVvZihBY3Rpb25UeXBl
KSArIHNpemVvZih1aW50MzJfdCldOwogICAgICAgICAKICAgICAgICAgaWYgKHdpZGVDaGFyYWN0
ZXJzKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhY3Rpb25zTGVuZ3RoID49IHN0cmlu
Z1N0YXJ0SW5kZXggKyBzZWxlY3Rvckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwpAQCAtNjMsMTIg
KzY1LDU2IEBAIEFjdGlvbiBBY3Rpb246OmRlc2VyaWFsaXplKGNvbnN0IFNlcmlhbGkKICAgICB9
CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVN0eWxlU2hlZXQ6CiAgICAgY2Fz
ZSBBY3Rpb25UeXBlOjpJbnZhbGlkQWN0aW9uOgorICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQotCisgICAgCitBY3Rpb25UeXBlIEFj
dGlvbjo6ZGVzZXJpYWxpemVUeXBlKGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25z
LCBjb25zdCB1aW50MzJfdCBhY3Rpb25zTGVuZ3RoLCB1aW50MzJfdCBsb2NhdGlvbikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbiA8IGFjdGlvbnNMZW5ndGgpOworICAgIEFjdGlvblR5
cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFjdGlvblR5cGU+KGFjdGlvbnNbbG9jYXRpb25dKTsKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2llczoKKyAg
ICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKKyAgICBjYXNlIEFjdGlvblR5cGU6Oklnbm9y
ZVByZXZpb3VzUnVsZXM6CisgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVj
dG9yOgorICAgICAgICByZXR1cm4gdHlwZTsKKyAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU3R5bGVTaGVldDoKKyAgICBjYXNlIEFjdGlvblR5cGU6OkludmFsaWRBY3Rpb246Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisgICAgCit1aW50MzJfdCBBY3Rpb246OnNlcmlhbGl6ZWRMZW5ndGgoY29uc3QgU2VyaWFs
aXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMsIGNvbnN0IHVpbnQzMl90IGFjdGlvbnNMZW5ndGgsIHVp
bnQzMl90IGxvY2F0aW9uKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uIDwgYWN0aW9u
c0xlbmd0aCk7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxBY3Rpb25UeXBlPihhY3Rpb25zW2xv
Y2F0aW9uXSkpIHsKKyAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2llczoKKyAgICBjYXNl
IEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKKyAgICBjYXNlIEFjdGlvblR5cGU6Oklnbm9yZVByZXZp
b3VzUnVsZXM6CisgICAgICAgIHJldHVybiBzaXplb2YoQWN0aW9uVHlwZSk7CisgICAgY2FzZSBB
Y3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZVNlbGVjdG9yOiB7CisgICAgICAgIHVpbnQzMl90IGhl
YWRlckxlbmd0aCA9IHNpemVvZihBY3Rpb25UeXBlKSArIHNpemVvZih1aW50MzJfdCkgKyBzaXpl
b2YoYm9vbCk7CisgICAgICAgIHVpbnQzMl90IHN0cmluZ1N0YXJ0SW5kZXggPSBsb2NhdGlvbiAr
IGhlYWRlckxlbmd0aDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWN0aW9uc0xlbmd0aCA+PSBz
dHJpbmdTdGFydEluZGV4KTsKKyAgICAgICAgdWludDMyX3Qgc2VsZWN0b3JMZW5ndGggPSAqcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KCZhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9m
KEFjdGlvblR5cGUpXSk7CisgICAgICAgIGJvb2wgd2lkZUNoYXJhY3RlcnMgPSBhY3Rpb25zW2xv
Y2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVpbnQzMl90KV07CisgICAgICAg
IAorICAgICAgICBpZiAod2lkZUNoYXJhY3RlcnMpCisgICAgICAgICAgICByZXR1cm4gaGVhZGVy
TGVuZ3RoICsgc2VsZWN0b3JMZW5ndGggKiBzaXplb2YoVUNoYXIpOworICAgICAgICByZXR1cm4g
aGVhZGVyTGVuZ3RoICsgc2VsZWN0b3JMZW5ndGggKiBzaXplb2YoTENoYXIpOworICAgIH0KKyAg
ICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lU3R5bGVTaGVldDoKKyAgICBjYXNlIEFj
dGlvblR5cGU6OkludmFsaWRBY3Rpb246CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRF
eHRlbnNpb25zCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmgJKHJldmlzaW9uIDE4NzAyMykK
KysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsOSBAQCBzdHJ1Y3QgQWN0aW9uIHsKICAg
ICAgICAgICAgICYmIG1fc3RyaW5nQXJndW1lbnQgPT0gb3RoZXIubV9zdHJpbmdBcmd1bWVudDsK
ICAgICB9CiAKLSAgICBzdGF0aWMgQWN0aW9uIGRlc2VyaWFsaXplKGNvbnN0IFNlcmlhbGl6ZWRB
Y3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1bnNpZ25lZCBhY3Rpb25zTGVuZ3RoLCB1aW50MzJf
dCBsb2NhdGlvbik7CisgICAgc3RhdGljIEFjdGlvbiBkZXNlcmlhbGl6ZShjb25zdCBTZXJpYWxp
emVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdWludDMyX3QgYWN0aW9uc0xlbmd0aCwgdWlu
dDMyX3QgbG9jYXRpb24pOworICAgIHN0YXRpYyBBY3Rpb25UeXBlIGRlc2VyaWFsaXplVHlwZShj
b25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdWludDMyX3QgYWN0aW9u
c0xlbmd0aCwgdWludDMyX3QgbG9jYXRpb24pOworICAgIHN0YXRpYyB1aW50MzJfdCBzZXJpYWxp
emVkTGVuZ3RoKGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCB1aW50
MzJfdCBhY3Rpb25zTGVuZ3RoLCB1aW50MzJfdCBsb2NhdGlvbik7CiAKICAgICB2b2lkIHNldEV4
dGVuc2lvbklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBleHRlbnNpb25JZGVudGlmaWVyKSB7IG1f
ZXh0ZW5zaW9uSWRlbnRpZmllciA9IGV4dGVuc2lvbklkZW50aWZpZXI7IH0KICAgICBjb25zdCBT
dHJpbmcmIGV4dGVuc2lvbklkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2V4dGVuc2lvbklk
ZW50aWZpZXI7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2aXNpb24gMTg3
MDIzKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMjAgKzkyLDI3IEBAIFZlY3RvcjxB
Y3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoKICAgICAgICAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlciB3aXRob3V0RG9tYWluc0ludGVycHJldGVyKGNvbXBpbGVkRXh0ZW5zaW9uLmZpbHRl
cnNXaXRob3V0RG9tYWluc0J5dGVjb2RlKCksIGNvbXBpbGVkRXh0ZW5zaW9uLmZpbHRlcnNXaXRo
b3V0RG9tYWluc0J5dGVjb2RlTGVuZ3RoKCkpOwogICAgICAgICBERkFCeXRlY29kZUludGVycHJl
dGVyOjpBY3Rpb25zIHdpdGhvdXREb21haW5zQWN0aW9ucyA9IHdpdGhvdXREb21haW5zSW50ZXJw
cmV0ZXIuaW50ZXJwcmV0KHVybENTdHJpbmcsIGZsYWdzKTsKICAgICAgICAgCisgICAgICAgIFN0
cmluZyBkb21haW4gPSByZXNvdXJjZUxvYWRJbmZvLm1haW5Eb2N1bWVudFVSTC5ob3N0KCk7CiAg
ICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgd2l0aERvbWFpbnNJbnRlcnByZXRlcihjb21w
aWxlZEV4dGVuc2lvbi5maWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZSgpLCBjb21waWxlZEV4dGVu
c2lvbi5maWx0ZXJzV2l0aERvbWFpbnNCeXRlY29kZUxlbmd0aCgpKTsKLSAgICAgICAgREZBQnl0
ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyB3aXRoRG9tYWluc0FjdGlvbnMgPSB3aXRoRG9tYWlu
c0ludGVycHJldGVyLmludGVycHJldFdpdGhEb21haW5zKHVybENTdHJpbmcsIGZsYWdzLCBjb250
ZW50RXh0ZW5zaW9uLT5jYWNoZWREb21haW5BY3Rpb25zKHJlc291cmNlTG9hZEluZm8ubWFpbkRv
Y3VtZW50VVJMLmhvc3QoKSkpOworICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rp
b25zIHdpdGhEb21haW5zQWN0aW9ucyA9IHdpdGhEb21haW5zSW50ZXJwcmV0ZXIuaW50ZXJwcmV0
V2l0aERvbWFpbnModXJsQ1N0cmluZywgZmxhZ3MsIGNvbnRlbnRFeHRlbnNpb24tPmNhY2hlZERv
bWFpbkFjdGlvbnMoZG9tYWluKSk7CiAgICAgICAgIAogICAgICAgICBjb25zdCBTZXJpYWxpemVk
QWN0aW9uQnl0ZSogYWN0aW9ucyA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlvbnMoKTsKICAgICAg
ICAgY29uc3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCA9IGNvbXBpbGVkRXh0ZW5zaW9uLmFjdGlv
bnNMZW5ndGgoKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgc2F3SWdub3JlUHJldmlvdXNSdWxl
cyA9IGZhbHNlOwotICAgICAgICBpZiAoIXdpdGhvdXREb21haW5zQWN0aW9ucy5pc0VtcHR5KCkg
fHwgIXdpdGhEb21haW5zQWN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29uc3QgVmVjdG9y
PHVpbnQzMl90PiYgdW5pdmVyc2FsV2l0aERvbWFpbnMgPSBjb250ZW50RXh0ZW5zaW9uLT51bml2
ZXJzYWxBY3Rpb25zV2l0aERvbWFpbnMoZG9tYWluKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPHVp
bnQzMl90PiYgdW5pdmVyc2FsV2l0aG91dERvbWFpbnMgPSBjb250ZW50RXh0ZW5zaW9uLT51bml2
ZXJzYWxBY3Rpb25zV2l0aG91dERvbWFpbnMoKTsKKyAgICAgICAgaWYgKCF3aXRob3V0RG9tYWlu
c0FjdGlvbnMuaXNFbXB0eSgpIHx8ICF3aXRoRG9tYWluc0FjdGlvbnMuaXNFbXB0eSgpIHx8ICF1
bml2ZXJzYWxXaXRoRG9tYWlucy5pc0VtcHR5KCkgfHwgIXVuaXZlcnNhbFdpdGhvdXREb21haW5z
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBhY3Rpb25Mb2NhdGlv
bnM7Ci0gICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh3
aXRob3V0RG9tYWluc0FjdGlvbnMuc2l6ZSgpICsgd2l0aERvbWFpbnNBY3Rpb25zLnNpemUoKSk7
CisgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh3aXRo
b3V0RG9tYWluc0FjdGlvbnMuc2l6ZSgpICsgd2l0aERvbWFpbnNBY3Rpb25zLnNpemUoKSArIHVu
aXZlcnNhbFdpdGhvdXREb21haW5zLnNpemUoKSArIHVuaXZlcnNhbFdpdGhEb21haW5zLnNpemUo
KSk7CiAgICAgICAgICAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogd2l0aG91dERv
bWFpbnNBY3Rpb25zKQogICAgICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy51bmNoZWNrZWRB
cHBlbmQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdGlvbkxvY2F0aW9uKSk7CiAgICAgICAgICAg
ICBmb3IgKHVpbnQ2NF90IGFjdGlvbkxvY2F0aW9uIDogd2l0aERvbWFpbnNBY3Rpb25zKQogICAg
ICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9ucy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGFjdGlvbkxvY2F0aW9uKSk7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGFj
dGlvbkxvY2F0aW9uIDogdW5pdmVyc2FsV2l0aG91dERvbWFpbnMpCisgICAgICAgICAgICAgICAg
YWN0aW9uTG9jYXRpb25zLnVuY2hlY2tlZEFwcGVuZChhY3Rpb25Mb2NhdGlvbik7CisgICAgICAg
ICAgICBmb3IgKHVpbnQzMl90IGFjdGlvbkxvY2F0aW9uIDogdW5pdmVyc2FsV2l0aERvbWFpbnMp
CisgICAgICAgICAgICAgICAgYWN0aW9uTG9jYXRpb25zLnVuY2hlY2tlZEFwcGVuZChhY3Rpb25M
b2NhdGlvbik7CiAgICAgICAgICAgICBzdGQ6OnNvcnQoYWN0aW9uTG9jYXRpb25zLmJlZ2luKCks
IGFjdGlvbkxvY2F0aW9ucy5lbmQoKSk7CiAKICAgICAgICAgICAgIC8vIEFkZCBhY3Rpb25zIGlu
IHJldmVyc2Ugb3JkZXIgdG8gcHJvcGVybHkgZGVhbCB3aXRoIElnbm9yZVByZXZpb3VzUnVsZXMu
CkBAIC0xMjYsNyArMTMzLDcgQEAgVmVjdG9yPEFjdGlvbj4gQ29udGVudEV4dGVuc2lvbnNCYWNr
ZW5kOgogICAgIH0KICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5H
CiAgICAgZG91YmxlIGFkZGVkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
OwotICAgIFdURkxvZ0Fsd2F5cygiVGltZSBhZGRlZDogJWYgbWljcm9zZWNvbmRzICVzIiwgKGFk
ZGVkVGltZUVuZCAtIGFkZGVkVGltZVN0YXJ0KSAqIDEuMGU2LCByZXNvdXJjZUxvYWRJbmZvLnJl
c291cmNlVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGRhdGFMb2dGKCJUaW1lIGFk
ZGVkOiAlZiBtaWNyb3NlY29uZHMgJXMgXG4iLCAoYWRkZWRUaW1lRW5kIC0gYWRkZWRUaW1lU3Rh
cnQpICogMS4wZTYsIHJlc291cmNlTG9hZEluZm8ucmVzb3VyY2VVUkwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gZmluYWxBY3Rpb25zOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCShyZXZpc2lv
biAxODcwMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwyMSArNTUsMjAgQEAgZW51bSBjbGFzcyBERkFCeXRl
Y29kZUluc3RydWN0aW9uIDogdWludAogICAgIC8vIEFwcGVuZEFjdGlvbiBoYXMgb25lIGFyZ3Vt
ZW50OgogICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5kICg0IGJ5dGVzKS4KICAgICBBcHBlbmRB
Y3Rpb24gPSAweDQsCi0gICAgQXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQgPSAweDUsCi0g
ICAgQXBwZW5kQWN0aW9uV2l0aElmRG9tYWluID0gMHg2LAorICAgIEFwcGVuZEFjdGlvbldpdGhJ
ZkRvbWFpbiA9IDB4NSwKICAgICAKICAgICAvLyBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24gaGFz
IHR3byBhcmd1bWVudHM6CiAgICAgLy8gVGhlIGZsYWdzIHRvIGNoZWNrIGJlZm9yZSBhcHBlbmRp
bmcgKDIgYnl0ZXMpLgogICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5kICg0IGJ5dGVzKS4KLSAg
ICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb24gPSAweDcsCi0gICAgVGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uV2l0aElmRG9tYWluID0gMHg4LAorICAgIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiA9
IDB4NiwKKyAgICBUZXN0RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4gPSAweDcsCiAK
ICAgICAvLyBUZXJtaW5hdGUgaGFzIG5vIGFyZ3VtZW50cy4KLSAgICBUZXJtaW5hdGUgPSAweDks
CisgICAgVGVybWluYXRlID0gMHg4LAogCiAgICAgLy8gSnVtcCBoYXMgb25lIGFyZ3VtZW50Ogog
ICAgIC8vIFRoZSBkaXN0YW5jZSB0byBqdW1wICgxLTQgYnl0ZXMsIHNpZ25lZCkuCi0gICAgSnVt
cCA9IDB4QSwKKyAgICBKdW1wID0gMHg5LAogfTsKIAogLy8gVGhlIGxhc3QgZm91ciBiaXRzIGNv
bnRhaW4gdGhlIGluc3RydWN0aW9uIHR5cGUuCkBAIC0xMTAsNyArMTA5LDYgQEAgc3RhdGljIGlu
bGluZSBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplV2l0aAogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6SnVtcDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
VmFyaWFibGUgaW5zdHJ1Y3Rpb24gc2l6ZS4KICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbjoKLSAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVu
ZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0OgogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluOgogICAgICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQzMl90KTsKICAgICBjYXNlIERGQUJ5dGVj
b2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbjoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGls
ZXIuY3BwCShyZXZpc2lvbiAxODcwMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEs
NiBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRBcHBlbmRBY3RpCiB7CiAgICAgLy8g
SGlnaCBiaXRzIGFyZSB1c2VkIHRvIHN0b3JlIGZsYWdzLiBTZWUgY29tcGlsZVJ1bGVMaXN0Lgog
ICAgIGlmIChhY3Rpb24gJiBBY3Rpb25GbGFnTWFzaykgewotICAgICAgICBBU1NFUlQoIShhY3Rp
b24gJiBEaXNwbGF5Tm9uZVN0eWxlU2hlZXRGbGFnKSk7CiAgICAgICAgIGlmIChhY3Rpb24gJiBJ
ZkRvbWFpbkZsYWcpCiAgICAgICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4o
bV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0
aW9uV2l0aElmRG9tYWluKTsKICAgICAgICAgZWxzZQpAQCAtODksMTAgKzg4LDcgQEAgdm9pZCBE
RkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QXBwZW5kQWN0aQogICAgICAgICBhcHBlbmQ8dWludDE2
X3Q+KG1fYnl0ZWNvZGUsIHN0YXRpY19jYXN0PHVpbnQxNl90PihhY3Rpb24gPj4gMzIpKTsKICAg
ICAgICAgYXBwZW5kPHVpbnQzMl90PihtX2J5dGVjb2RlLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YWN0aW9uKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGFjdGlvbiAmIERpc3BsYXlOb25l
U3R5bGVTaGVldEZsYWcpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoYWN0aW9uICYg
SWZEb21haW5GbGFnKSk7Ci0gICAgICAgICAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlv
bj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVs
dFN0eWxlc2hlZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiAmIElmRG9tYWluRmxhZykK
KyAgICAgICAgaWYgKGFjdGlvbiAmIElmRG9tYWluRmxhZykKICAgICAgICAgICAgIGFwcGVuZDxE
RkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBh
cHBlbmQ8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCShyZXZp
c2lvbiAxODcwMjMpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTUgKzk2LDEzIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBtYXRjaGVzRG9tYWluKHVpbnQ2NF8KIHZvaWQgREZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6aW50ZXJwcmV0QXBwZW5kQWN0aW9uKHVpbnQzMl90JiBwcm9ncmFtQ291bnRl
ciwgQWN0aW9ucyYgYWN0aW9ucywgYm9vbCBpZkRvbWFpbikKIHsKICAgICBBU1NFUlQoZ2V0SW5z
dHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIpID09
IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbgotICAgICAgICB8fCBnZXRJbnN0
cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgPT0g
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluCi0gICAgICAg
IHx8IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb25EZWZhdWx0U3R5
bGVzaGVldCk7CisgICAgICAgIHx8IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyKSA9PSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBl
bmRBY3Rpb25XaXRoSWZEb21haW4pOwogICAgIHVpbnQ2NF90IGFjdGlvbiA9IChpZkRvbWFpbiA/
IElmRG9tYWluRmxhZyA6IDApIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dWludDMy
X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9m
KERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pKSk7CiAgICAgaWYgKCFtX2RvbWFpbkFjdGlvbnMgfHwg
bWF0Y2hlc0RvbWFpbihhY3Rpb24sICptX2RvbWFpbkFjdGlvbnMpKQogICAgICAgICBhY3Rpb25z
LmFkZChhY3Rpb24pOwogICAgIAogICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6
ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKTsKICAg
ICBBU1NFUlQoaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0
aW9uOjpBcHBlbmRBY3Rpb24pID09IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKSk7Ci0gICAgQVNTRVJU
KGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBw
ZW5kQWN0aW9uKSA9PSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KSk7CiB9CiAKIHZvaWQgREZB
Qnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHVp
bnQzMl90JiBwcm9ncmFtQ291bnRlciwgdWludDE2X3QgZmxhZ3MsIEFjdGlvbnMmIGFjdGlvbnMs
IGJvb2wgaWZEb21haW4pCkBAIC0xMjgsNyArMTI2LDcgQEAgdm9pZCBERkFCeXRlY29kZUludGVy
cHJldGVyOjppbnRlcnByZXRUZQogICAgIEFTU0VSVChpbnN0cnVjdGlvblNpemVXaXRoQXJndW1l
bnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbikgPT0g
aW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0
RmxhZ3NBbmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pKTsKIH0KIAotREZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6QWN0aW9ucyBERkFCeXRlY29kZUludGVycHJldGVyOjphY3Rpb25zRm9yRGVmYXVs
dFN0eWxlc2hlZXRGcm9tREZBUm9vdCgpCitERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25z
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKQogewog
ICAgIEFjdGlvbnMgYWN0aW9uczsKIApAQCAtMTM4LDE5ICsxMzYsMTYgQEAgREZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogCiAgICAgd2hpbGUgKHByb2dyYW1Db3VudGVy
IDwgZGZhQnl0ZWNvZGVMZW5ndGgpIHsKICAgICAgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBp
bnN0cnVjdGlvbiA9IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgs
IHByb2dyYW1Db3VudGVyKTsKLSAgICAgICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbkRlZmF1bHRTdHlsZXNoZWV0KQorICAgICAgICBpZiAo
aW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uKQogICAg
ICAgICAgICAgaW50ZXJwcmV0QXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zLCBm
YWxzZSk7Ci0gICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkFwcGVuZEFjdGlvbikKLSAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3Ry
dWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0
aW9uKTsKKyAgICAgICAgZWxzZSBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKQorICAgICAgICAgICAgaW50ZXJwcmV0QXBw
ZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zLCB0cnVlKTsKICAgICAgICAgZWxzZSBp
ZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBw
ZW5kQWN0aW9uKQogICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXpl
V2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NBbmRBcHBlbmRB
Y3Rpb24pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIGFjdGlvbnNGb3JEZWZhdWx0
U3R5bGVzaGVldEZyb21ERkFSb290IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgREZBIHdp
dGhvdXQgZG9tYWlucywKLSAgICAgICAgICAgIC8vIHdoaWNoIHNob3VsZCBuZXZlciBoYXZlIGFu
eSBhY3Rpb25zIHdpdGggaWYtZG9tYWluLgotICAgICAgICAgICAgQVNTRVJUKGluc3RydWN0aW9u
ICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJ
ZkRvbWFpbik7Ci0gICAgICAgICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24gIT0gREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uV2l0aElmRG9tYWluKTsKKyAgICAgICAgZWxzZSBpZiAo
aW5zdHJ1Y3Rpb24gPT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uV2l0aElmRG9tYWluKQorICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1
Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXN0RmxhZ3NB
bmRBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gYWN0aW9uczsKIH0KQEAgLTE3OSwx
NiArMTc0LDE4IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMKICAg
ICAgICAgdWludDMyX3QgZGZhQnl0ZWNvZGVMZW5ndGggPSBnZXRCaXRzPHVpbnQzMl90PihtX2J5
dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcik7CiAgICAgICAgIHByb2dy
YW1Db3VudGVyICs9IHNpemVvZih1aW50MzJfdCk7CiAKLSAgICAgICAgLy8gU2tpcCB0aGUgZGVm
YXVsdCBzdHlsZXNoZWV0IGFjdGlvbnMgb24gdGhlIERGQSByb290LiBUaGVzZSBhcmUgYWNjZXNz
ZWQgdmlhIGFjdGlvbnNGb3JEZWZhdWx0U3R5bGVzaGVldEZyb21ERkFSb290LgorICAgICAgICAv
LyBTa2lwIHRoZSBhY3Rpb25zIHdpdGhvdXQgZmxhZ3Mgb24gdGhlIERGQSByb290LiBUaGVzZSBh
cmUgYWNjZXNzZWQgdmlhIGFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcuCiAgICAgICAgIGlmICgh
ZGZhU3RhcnQpIHsKICAgICAgICAgICAgIHdoaWxlIChwcm9ncmFtQ291bnRlciA8IGRmYUJ5dGVj
b2RlTGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbiBpbnN0
cnVjdGlvbiA9IGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHBy
b2dyYW1Db3VudGVyKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gPT0gREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQpCi0gICAgICAg
ICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVu
dHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uRGVmYXVsdFN0eWxlc2hlZXQp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5z
dHJ1Y3Rpb246OkFwcGVuZEFjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0QXBw
ZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBhY3Rpb25zLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXpl
V2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24pOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3Jh
bUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4pOwogICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFw
cGVuZEFjdGlvbikKICAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBw
ZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBmbGFncywgYWN0aW9ucywgZmFsc2UpOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGluc3RydWN0aW9uID09IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246
OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbldpdGhJZkRvbWFpbikKKyAgICAgICAgICAgICAgICAg
ICAgaW50ZXJwcmV0VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uKHByb2dyYW1Db3VudGVyLCBmbGFn
cywgYWN0aW9ucywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE5Niw3ICsxOTMsOSBAQCBERkFCeXRlY29k
ZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFj
dGlvbnM7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3Vu
dGVyKSAhPSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb24KLSAgICAgICAgICAg
ICAgICAmJiBnZXRJbnN0cnVjdGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9n
cmFtQ291bnRlcikgIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uLAorICAgICAgICAgICAgICAgICYmIGdldEluc3RydWN0aW9uKG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyKSAhPSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb25XaXRoSWZEb21haW4KKyAgICAgICAgICAgICAgICAmJiBnZXRJbnN0cnVj
dGlvbihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlcikgIT0gREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVzdEZsYWdzQW5kQXBwZW5kQWN0aW9uCisgICAgICAgICAg
ICAgICAgJiYgZ2V0SW5zdHJ1Y3Rpb24obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJv
Z3JhbUNvdW50ZXIpICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVu
ZEFjdGlvbldpdGhJZkRvbWFpbiwKICAgICAgICAgICAgICAgICAiVHJpZ2dlcnMgdGhhdCBtYXRj
aCBldmVyeXRoaW5nIHNob3VsZCBvbmx5IGJlIGluIHRoZSBmaXJzdCBERkEuIik7CiAgICAgICAg
IH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZUludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODcwMjMpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIAogICAgIEFj
dGlvbnMgaW50ZXJwcmV0KGNvbnN0IENTdHJpbmcmLCB1aW50MTZfdCBmbGFncyk7CiAgICAgQWN0
aW9ucyBpbnRlcnByZXRXaXRoRG9tYWlucyhjb25zdCBDU3RyaW5nJiwgdWludDE2X3QgZmxhZ3Ms
IGNvbnN0IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIGRvbWFpbkFjdGlvbnMpOwot
ICAgIEFjdGlvbnMgYWN0aW9uc0ZvckRlZmF1bHRTdHlsZXNoZWV0RnJvbURGQVJvb3QoKTsKKyAg
ICBBY3Rpb25zIGFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKTsKIAogcHJpdmF0ZToKICAgICB2
b2lkIGludGVycHJldEFwcGVuZEFjdGlvbih1bnNpZ25lZCYgcHJvZ3JhbUNvdW50ZXIsIEFjdGlv
bnMmLCBib29sIGlmRG9tYWluKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZEluZm8uaAkocmV2aXNpb24gMTg3MDIzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNiBAQCB0eXBlZGVm
IHVpbnQxNl90IFJlc291cmNlRmxhZ3M7CiAvLyBUaGUgdmFsdWVzIC0xIGFuZCAtMiBhcmUgdXNl
ZCBmb3IgcmVtb3ZlZCBhbmQgZW1wdHkgdmFsdWVzIGluIEhhc2hUYWJsZXMuCiBjb25zdCB1aW50
NjRfdCBBY3Rpb25GbGFnTWFzayA9IDB4MDAwMEZGRkYwMDAwMDAwMDsKIGNvbnN0IHVpbnQ2NF90
IElmRG9tYWluRmxhZyA9IDB4MDAwMTAwMDAwMDAwMDAwMDsKLWNvbnN0IHVpbnQ2NF90IERpc3Bs
YXlOb25lU3R5bGVTaGVldEZsYWcgPSAweDAwMDIwMDAwMDAwMDAwMDA7CiAKIFJlc291cmNlVHlw
ZSB0b1Jlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSk7CiB1aW50MTZfdCByZWFkUmVz
b3VyY2VUeXBlKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3MDIz
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTIgQEAKKzIwMTUtMDctMjAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBDYWNoZSBhY3Rpb25zIHdpdGgg
ZG9tYWlucyB0aGF0IG1hdGNoIGV2ZXJ5dGhpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzA1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVu
c2lvblN0b3JlLmg6CisKIDIwMTUtMDctMTYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWJzaXRlRGF0YVN0b3JlIG9wZXJhdGlvbnMgbmVlZCB0byBn
cmFiIGJhY2tncm91bmQgYXNzZXJ0aW9ucwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmgJKHJl
dmlzaW9uIDE4NzAyMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1
YmxpYzoKICAgICAKICAgICAvLyBUaGlzIHNob3VsZCBiZSBpbmNyZW1lbnRlZCBldmVyeSB0aW1l
IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgYnl0ZWNvZGUsIGZpbGUgZm9ybWF0
LCBldGMuCiAgICAgLy8gdG8gcHJldmVudCBjcmFzaGluZyB3aGlsZSBsb2FkaW5nIG9sZCBkYXRh
LgotICAgIGNvbnN0IHN0YXRpYyB1aW50MzJfdCBDdXJyZW50Q29udGVudEV4dGVuc2lvbkZpbGVW
ZXJzaW9uID0gNTsKKyAgICBjb25zdCBzdGF0aWMgdWludDMyX3QgQ3VycmVudENvbnRlbnRFeHRl
bnNpb25GaWxlVmVyc2lvbiA9IDY7CiAKICAgICBzdGF0aWMgVXNlckNvbnRlbnRFeHRlbnNpb25T
dG9yZSYgZGVmYXVsdFN0b3JlKCk7CiAgICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlPiBzdG9yZVdpdGhQYXRoKGNvbnN0IFdURjo6U3RyaW5nJiBzdG9yZVBhdGgpOwo=
</data>
<flag name="review"
          id="282265"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>