<?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>136500</bug_id>
          
          <creation_ts>2014-09-03 14:15:26 -0700</creation_ts>
          <short_desc>Web Inspector: Modify the type profiler runtime protocol to transfer some computation into the WebInspector</short_desc>
          <delta_ts>2014-09-10 19:39:55 -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>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1033017</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-03 14:15:26 -0700</bug_when>
    <thetext>Currently, the displayTypeName property is computed inside Source/JavaScriptCore/runtime/TypeSet.cpp,
but, because this is a String that is displayed in the UI, it should be computed inside the WebInspector.
There is also more flexibility in changing the UI if it is computed in the Web Inspector instead of in JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033018</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-09-03 14:16:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/18220160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034377</commentid>
    <comment_count>2</comment_count>
      <attachid>237900</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-10 13:15:46 -0700</bug_when>
    <thetext>Created attachment 237900
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034378</commentid>
    <comment_count>3</comment_count>
      <attachid>237901</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-10 13:18:44 -0700</bug_when>
    <thetext>Created attachment 237901
patch

(remove whitespace change from above patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034399</commentid>
    <comment_count>4</comment_count>
      <attachid>237901</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-09-10 14:01:55 -0700</bug_when>
    <thetext>Comment on attachment 237901
patch

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

I&apos;d like to see some renames, but the patch itself looks good. r=me. Feel free to put up another if you want changes reviewed.

&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:123
&gt; +                { &quot;name&quot;: &quot;isInDictionaryMode&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;If true, it indicates that the fields in this StructureDescription may be inaccurate. I.e, there might have been fields that have been deleted before it was profiled or it has fields we haven&apos;t profiled.&quot; }

This field name is unclear to me. I wonder if there is an adjective that might better describe this state. &quot;isInaccurate&quot;? &quot;isLossy&quot;?  &quot;isImprecise&quot;? &quot;isInexact&quot;? &quot;isUnstable&quot;? &quot;

&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:127
&gt; +            &quot;id&quot;: &quot;TypeSetBooleans&quot;,

How about just &quot;TypeSet&quot;? It is name spaced to not conflict with JSC::TypeSet. Also, labelling it &quot;Booleans&quot; might hamper future extensions.

&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:137
&gt; +                { &quot;name&quot;: &quot;isFunction&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false, &quot;description&quot;: &quot;Indicates if this type description has been type Function.&quot; },
&gt; +                { &quot;name&quot;: &quot;isUndefined&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false, &quot;description&quot;: &quot;Indicates if this type description has been type Undefined.&quot; },
&gt; +                { &quot;name&quot;: &quot;isNull&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false, &quot;description&quot;: &quot;Indicates if this type description has been type Null.&quot; },
&gt; +                { &quot;name&quot;: &quot;isBoolean&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false, &quot;description&quot;: &quot;Indicates if this type description has been type Boolean.&quot; },
&gt; +                { &quot;name&quot;: &quot;isInteger&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false, &quot;description&quot;: &quot;Indicates if this type description has been type Integer.&quot; },
&gt; +                { &quot;name&quot;: &quot;isNumber&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false, &quot;description&quot;: &quot;Indicates if this type description has been type Number.&quot; },
&gt; +                { &quot;name&quot;: &quot;isString&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false, &quot;description&quot;: &quot;Indicates if this type description has been type String.&quot; },
&gt; +                { &quot;name&quot;: &quot;isObject&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false, &quot;description&quot;: &quot;Indicates if this type description has been type Object.&quot; }

You should leave off the  `&quot;optional&quot;: false` part. When left off, we know it is required.

&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:145
&gt; +                { &quot;name&quot;: &quot;isValid&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;If true, we were able to correlate the offset successfuly with a program location. If false, the offset may be bogus or the offset may be from a CodeBlock that hasn&apos;t executed.&quot; },

Seems this property could be made non-optional. You always define it below.

&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:146
&gt; +                { &quot;name&quot;: &quot;leastCommonAncestor&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Least common ancestor of all Constructors if the TypeDescription has seen any structures.&quot; },

It would help to know what this string is. Is it the constructor name? The display name of the constructor function?

&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:147
&gt; +                { &quot;name&quot;: &quot;typeSetBooleans&quot;, &quot;$ref&quot;: &quot;TypeSetBooleans&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;Set of booleans for determining the aggregate type of this type description.&quot; },

If you change the type name we can make this &quot;typeSet&quot;.

&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:153
&gt; +                { &quot;name&quot;: &quot;isOverflown&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;If true, this indicates that no more structures are being profiled because some maximum threshold has been reached and profiling has stopped because of memory pressure.&quot; }

I feel like the name could be clearer. Overflow feels like loaded terminology. How about &quot;isProfilingSuspended&quot; or &quot;isProfilingDisabled&quot;.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:163
&gt; +            if (scriptSyntaxTree.containsNonEmptyReturnStatement(node.body) 
&gt; +                || (WebInspector.TypeSet.fromPayload(functionReturnType)).hasSeenTypesOtherThan(WebInspector.TypeSet.TypeBit.Undefined)) {

You can put this all on one line. And the extra ()s around the second expression can be removed.

&gt; Source/WebInspectorUI/UserInterface/Models/TypeSet.js:2
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.

You can also keep the Apple since a lot of this code stems from the JSC file with the Apple license, but I think you aren&apos;t employeed by Apple while writing this so you could include yourself:

    * Copyright (C) 2014 Saam Barati

&gt; Source/WebInspectorUI/UserInterface/Models/TypeSet.js:74
&gt; +        // This function checks if types in bitString is contained in the types described by the &apos;test&apos; bitstring. (i.e we haven&apos;t seen more types than &apos;test&apos;).

Nit: &quot;if types in bitString is contained&quot; =&gt; &quot;if types in bitString are contained&quot;

&gt; Source/WebInspectorUI/UserInterface/Models/TypeSet.js:97
&gt; +        return ((~test) &amp; this._bitString) &gt; 0x0;

Hmm, could this just be:

    return this._bitString === test;

Or am I overlooking something?

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:61
&gt; +        if (this.types.isOverflown)
&gt; +            properties.push({name: &quot;...&quot;, structure: null});

If this is shown in the UI we probably want the Unicode ellipsis character. &quot;\u2026&quot;

    …
    HORIZONTAL ELLIPSIS
    Unicode: U+2026, UTF-8: E2 80 A6

&gt; Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js:173
&gt;              properties.push({name: &quot;...&quot;, structure: null});

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:174
&gt; +        if (typeSet.isContainedIn(WebInspector.TypeSet.TypeBit.Function | WebInspector.TypeSet.TypeBit.Null | WebInspector.TypeSet.TypeBit.Undefined))

Since these are checked so frequently in pairs, it might be nice to have:

    WebInspector.TypeSet.NullOrUndefinedTypeBits = WebInspector.TypeSet.TypeBit.Null | WebInspector.TypeSet.TypeBit.Undefined;

&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:190
&gt; +        return &quot;(many)&quot;;

I wonder if this one we should make a UIString. I think the others shouldn&apos;t be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034450</commentid>
    <comment_count>5</comment_count>
      <attachid>237901</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-09-10 16:05:21 -0700</bug_when>
    <thetext>Comment on attachment 237901
patch

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

&gt;&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:123
&gt;&gt; +                { &quot;name&quot;: &quot;isInDictionaryMode&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;If true, it indicates that the fields in this StructureDescription may be inaccurate. I.e, there might have been fields that have been deleted before it was profiled or it has fields we haven&apos;t profiled.&quot; }
&gt; 
&gt; This field name is unclear to me. I wonder if there is an adjective that might better describe this state. &quot;isInaccurate&quot;? &quot;isLossy&quot;?  &quot;isImprecise&quot;? &quot;isInexact&quot;? &quot;isUnstable&quot;? &quot;

Thinking ahead to explaining performance issues, we may want to think of this as a flag that the structure has been deoptimized because it is/was used like a dictionary.

&gt;&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:153
&gt;&gt; +                { &quot;name&quot;: &quot;isOverflown&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;If true, this indicates that no more structures are being profiled because some maximum threshold has been reached and profiling has stopped because of memory pressure.&quot; }
&gt; 
&gt; I feel like the name could be clearer. Overflow feels like loaded terminology. How about &quot;isProfilingSuspended&quot; or &quot;isProfilingDisabled&quot;.

isTruncated?

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js:190
&gt;&gt; +        return &quot;(many)&quot;;
&gt; 
&gt; I wonder if this one we should make a UIString. I think the others shouldn&apos;t be.

This suggestion seems in line with previous distinctions between source-level items that should be verbatim and those that should be translated. I think (?) might also be worth translating. It might be worth it for someone at Apple to check with translators as to whether appending &apos;?&apos; to source-level items is going to make sense in other languages. If not, maybe use UIString(&quot;%s?&quot;) to parameterize it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034451</commentid>
    <comment_count>6</comment_count>
      <attachid>237901</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-09-10 16:09:06 -0700</bug_when>
    <thetext>Comment on attachment 237901
patch

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

&gt; Source/JavaScriptCore/runtime/TypeProfiler.cpp:-71
&gt; -    if (!location)

I generally prefer building up protocol objects inside Inspector*Agent.cpp files using static methods, as long as the necessary data is available through a public API. That way, this function could just return the TypeLocation for the {descriptor, divot, sourceId}. The agent can separate the complexity/quirks of building protocol objects (which is likely to be improved in the near future) from the actual data sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034483</commentid>
    <comment_count>7</comment_count>
      <attachid>237922</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-10 17:25:10 -0700</bug_when>
    <thetext>Created attachment 237922
patch

Took into account suggestions.

I&apos;m going to leave the concern regarding question marks for another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034494</commentid>
    <comment_count>8</comment_count>
      <attachid>237922</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-09-10 17:49:20 -0700</bug_when>
    <thetext>Comment on attachment 237922
patch

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

r=me!

&gt; Source/JavaScriptCore/inspector/protocol/Runtime.json:148
&gt; +                { &quot;name&quot;: &quot;primitiveTypeNames&quot;, &quot;type&quot;: &quot;array&quot;, &quot;items&quot;: { &quot;type&quot;: &quot;string&quot; }, &quot;optional&quot;: true, &quot;description&quot;: &quot;Array of type names for primtive types (int, string, etc) seen at an instruction&quot; },

Typo: &quot;primtive&quot; =&gt; &quot;primitive&quot;
Nit: Comment should end in a period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034508</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-09-10 19:39:55 -0700</bug_when>
    <thetext>landed in: http://trac.webkit.org/changeset/173505</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237900</attachid>
            <date>2014-09-10 13:15:46 -0700</date>
            <delta_ts>2014-09-10 13:18:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>29166</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczNDc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDE0LTA5LTEwICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBNb2RpZnkgdGhlIHR5cGUgcHJvZmlsZXIgcnVudGltZSBwcm90
b2NvbCB0byB0cmFuc2ZlciBzb21lIGNvbXB1dGF0aW9uIGludG8gdGhlIFdlYkluc3BlY3Rvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NTAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBjaGFuZ2VzIHRoZSB0eXBlIHByb2ZpbGVyIHByb3RvY29sIHRvIHRoZSBXZWIgSW5zcGVjdG9y
CisgICAgICAgIGJ5IG1vdmluZyB0aGUgd29yayBvZiBjYWxjdWxhdGluZyBjb21wdXRlZCBwcm9w
ZXJ0aWVzIHRoYXQgZWZmZWN0IHRoZSBVSSAKKyAgICAgICAgaW50byB0aGUgV2ViIEluc3BlY3Rv
ci4gVGhpcyBtYWtlcyB0aGUgV2ViIEluc3BlY3RvciBoYXZlIGNvbnRyb2wgb3ZlciB0aGUgCisg
ICAgICAgIHN0cmluZ3MgaXQgZGlzcGxheXMgYXMgVUkgZWxlbWVudHMgcmVwcmVzZW50aW5nIHR5
cGUgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgCisgICAgICAgIGluc3RlYWQgb2YgSmF2YVNjcmlw
dENvcmUgZGVjaWRpbmcgb24gYSBjb252ZW50aW9uIGZvciB0aGVzZSBzdHJpbmdzLgorICAgICAg
ICBKYXZhU2NyaXB0Q29yZSBub3cgc2VuZHMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRoZSBXZWIg
SW5zcGVjdG9yIHNvIHRoYXQgCisgICAgICAgIGl0IGNhbiBjb21wdXRlIHRoZSBwcm9wZXJ0aWVz
IEphdmFTY3JpcHRDb3JlIHVzZWQgdG8gY29tcHV0ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9w
cm90b2NvbC9SdW50aW1lLmpzb246CisgICAgICAgICogcnVudGltZS9UeXBlUHJvZmlsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6OmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNl
dEZvckluc3BlY3Rvcik6CisgICAgICAgICogcnVudGltZS9UeXBlU2V0LmNwcDoKKyAgICAgICAg
KEpTQzo6VHlwZVNldDo6dHlwZVNldEJvb2xlYW5zKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U2hhcGU6OmxlYXN0Q29tbW9uQW5jZXN0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFw
ZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5o
OgorCiAyMDE0LTA5LTEwICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KIAog
ICAgICAgICBUeXBlU2V0IG5lZWRzIGEgbW9kZSB3aGVyZSBpdCBubyBsb25nZXIgcHJvZmlsZXMg
c3RydWN0dXJlIHNoYXBlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9SdW50aW1lLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24JKHJldmlzaW9uIDE3MzQ2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsOCArMTE3LDI0IEBACiAgICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAogICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJmaWVsZHMiLCAidHlwZSI6ICJhcnJheSIsICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmlu
ZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHN0cmluZ3Ms
IHdoZXJlIHRoZSBzdHJpbmdzIHJlcHJlc2VudCBvYmplY3QgcHJvcGVydGllcy4iIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJvcHRpb25hbEZpZWxkcyIsICJ0eXBlIjogImFycmF5Iiwg
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiQXJyYXkgb2Ygc3RyaW5ncywgd2hlcmUgdGhlIHN0cmluZ3MgcmVwcmVzZW50IG9w
dGlvbmFsIG9iamVjdCBwcm9wZXJ0aWVzLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbnN0cnVjdG9yTmFtZSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJOYW1lIG9mIHRoZSBjb25zdHJ1Y3Rvci4iIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcm90b3R5cGVTdHJ1Y3R1cmUiLCAiJHJlZiI6ICJTdHJ1Y3R1cmVEZXNj
cmlwdGlvbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJQb2ludGVyIHRvIHRo
ZSBTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvdG95cGUgaWYgb25lIGV4aXN0cy4i
IH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb3RvdHlwZVN0cnVjdHVyZSIsICIkcmVm
IjogIlN0cnVjdHVyZURlc2NyaXB0aW9uIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIlBvaW50ZXIgdG8gdGhlIFN0cnVjdHVyZVJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm90b3lw
ZSBpZiBvbmUgZXhpc3RzLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzSW5EaWN0
aW9uYXJ5TW9kZSIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiSWYgdHJ1ZSwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGZpZWxkcyBpbiB0aGlzIFN0
cnVjdHVyZURlc2NyaXB0aW9uIG1heSBiZSBpbmFjY3VyYXRlLiBJLmUsIHRoZXJlIG1pZ2h0IGhh
dmUgYmVlbiBmaWVsZHMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZCBiZWZvcmUgaXQgd2FzIHByb2Zp
bGVkIG9yIGl0IGhhcyBmaWVsZHMgd2UgaGF2ZW4ndCBwcm9maWxlZC4iIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR5cGVTZXRCb29s
ZWFucyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc0Z1bmN0aW9uIiwgInR5cGUi
OiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IGZhbHNlLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNhdGVz
IGlmIHRoaXMgdHlwZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIEZ1bmN0aW9uLiIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImlzVW5kZWZpbmVkIiwgInR5cGUiOiAiYm9vbGVhbiIs
ICJvcHRpb25hbCI6IGZhbHNlLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNhdGVzIGlmIHRoaXMgdHlw
ZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIFVuZGVmaW5lZC4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJpc051bGwiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogZmFs
c2UsICJkZXNjcmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhh
cyBiZWVuIHR5cGUgTnVsbC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc0Jvb2xl
YW4iLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogZmFsc2UsICJkZXNjcmlwdGlvbiI6
ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5cGUgQm9vbGVh
bi4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc0ludGVnZXIiLCAidHlwZSI6ICJi
b29sZWFuIiwgIm9wdGlvbmFsIjogZmFsc2UsICJkZXNjcmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYg
dGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5cGUgSW50ZWdlci4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJpc051bWJlciIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9u
YWwiOiBmYWxzZSwgImRlc2NyaXB0aW9uIjogIkluZGljYXRlcyBpZiB0aGlzIHR5cGUgZGVzY3Jp
cHRpb24gaGFzIGJlZW4gdHlwZSBOdW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaXNTdHJpbmciLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogZmFsc2UsICJkZXNj
cmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5
cGUgU3RyaW5nLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzT2JqZWN0IiwgInR5
cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IGZhbHNlLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNh
dGVzIGlmIHRoaXMgdHlwZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIE9iamVjdC4iIH0KICAg
ICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpAQCAtMTI2LDEzICsxNDIsMTUgQEAK
ICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiQ29udGFpbmVyIGZvciB0eXBlIGluZm9ybWF0aW9uIHRoYXQgaGFzIGJlZW4gZ2F0aGVyZWQu
IiwKICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGlzcGxheVR5cGVOYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIldoYXQgdGhlIGluc3BlY3RvciBzaG91bGQgZGlzcGxheSBhcyBhIHNp
bXBsZSB0eXBlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzVmFsaWQiLCAidHlw
ZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIklmIHRydWUs
IHdlIHdlcmUgYWJsZSB0byBjb3JyZWxhdGUgdGhlIG9mZnNldCBzdWNjZXNzZnVseSB3aXRoIGEg
cHJvZ3JhbSBsb2NhdGlvbi4gSWYgZmFsc2UsIHRoZSBvZmZzZXQgbWF5IGJlIGJvZ3VzIG9yIHRo
ZSBvZmZzZXQgbWF5IGJlIGZyb20gYSBDb2RlQmxvY2sgdGhhdCBoYXNuJ3QgZXhlY3V0ZWQuIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibGVhc3RDb21tb25BbmNlc3RvciIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJMZWFzdCBjb21t
b24gYW5jZXN0b3Igb2YgYWxsIENvbnN0cnVjdG9ycyBpZiB0aGUgVHlwZURlc2NyaXB0aW9uIGhh
cyBzZWVuIGFueSBzdHJ1Y3R1cmVzLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5
cGVTZXRCb29sZWFucyIsICIkcmVmIjogIlR5cGVTZXRCb29sZWFucyIsICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJTZXQgb2YgYm9vbGVhbnMgZm9yIGRldGVybWluaW5nIHRoZSBh
Z2dyZWdhdGUgdHlwZSBvZiB0aGlzIHR5cGUgZGVzY3JpcHRpb24uIiB9LAogICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibG9jYWxQcmltaXRpdmVUeXBlTmFtZXMiLCAidHlwZSI6ICJhcnJheSIs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiQXJyYXkgb2YgdHlwZSBuYW1lcyBmb3IgcHJpbXRpdmUgdHlwZXMgKGludCwgc3Ry
aW5nLCBldGMpIHNlZW4gYXQgYW4gaW5zdHJ1Y3Rpb24iIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJsb2NhbE9iamVjdFR5cGVOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJB
cnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgb2JqZWN0IHNlZW4gYXQgYW4gaW5zdHJ1Y3Rpb24i
IH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhbFN0cnVjdHVyZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU3RydWN0dXJlRGVzY3JpcHRpb24iIH0sICJv
cHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiBkZXNjcmlwdGlvbnMgZm9y
IGFsbCBzdHJ1Y3R1cmVzIHNlZW4gYXQgdGhpcyB0aGlzIGluc3RydWN0aW9uLiIgfSwKICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgcHJpbWl0aXZlIHR5
cGVzIHNlZW4gZ2xvYmFsbHkuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZ2xvYmFs
T2JqZWN0VHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHR5cGUg
bmFtZXMgZm9yIGFsbCBwcmltaXRpdmUgdHlwZXMgc2VlbiBnbG9iYWxseS4iIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJnbG9iYWxTdHJ1Y3R1cmVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
aXRlbXMiOiB7ICIkcmVmIjogIlN0cnVjdHVyZURlc2NyaXB0aW9uIiB9LCAib3B0aW9uYWwiOiB0
cnVlLCAiZGVzY3JpcHRpb24iOiAiQXJyYXkgb2YgZGVzY3JpcHRpb25zIGZvciBhbGwgc3RydWN0
dXJlcyBzZWVuIGZvciB0aGlzIHZhcmlhYmxlLiIgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZ2xvYmFsU3RydWN0dXJlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6
ICJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIkFycmF5IG9mIGRlc2NyaXB0aW9ucyBmb3IgYWxsIHN0cnVjdHVyZXMgc2VlbiBmb3IgdGhp
cyB2YXJpYWJsZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc092ZXJmbG93biIs
ICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWYg
dHJ1ZSwgdGhpcyBpbmRpY2F0ZXMgdGhhdCBubyBtb3JlIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBy
b2ZpbGVkIGJlY2F1c2Ugc29tZSBtYXhpbXVtIHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVkIGFu
ZCBwcm9maWxpbmcgaGFzIHN0b3BwZWQgYmVjYXVzZSBvZiBtZW1vcnkgcHJlc3N1cmUuIiB9CiAg
ICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTczNDY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsMTUgKzY4LDI2IEBAIHZvaWQgVHlwZVByb2ZpbGVyOjppbnNlcnROZXdM
b2NhdGlvbihUeXAKIHZvaWQgVHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZz
ZXRGb3JJbnNwZWN0b3IoVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yLCB1
bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+JiBkZXNjcmlwdGlvbikKIHsKICAgICBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3VyY2VJRCwgZGVzY3Jp
cHRvcik7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoIWxvY2F0aW9uKSB7CisgICAgICAg
IGRlc2NyaXB0aW9uLT5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBkZXNjcmlwdGlvbi0+c2V0SXNWYWxpZCh0cnVlKTsKIAogICAgIGlmIChsb2NhdGlvbi0+
bV9nbG9iYWxUeXBlU2V0ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gVHlwZVBy
b2ZpbGVyTm9HbG9iYWxJREV4aXN0cykgewotICAgICAgICBkZXNjcmlwdGlvbi0+c2V0RGlzcGxh
eVR5cGVOYW1lKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmRpc3BsYXlOYW1lKCkpOworICAg
ICAgICBkZXNjcmlwdGlvbi0+c2V0TGVhc3RDb21tb25BbmNlc3Rvcihsb2NhdGlvbi0+bV9nbG9i
YWxUeXBlU2V0LT5sZWFzdENvbW1vbkFuY2VzdG9yKCkpOwogICAgICAgICBkZXNjcmlwdGlvbi0+
c2V0R2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmFs
bFByaW1pdGl2ZVR5cGVOYW1lcygpKTsKICAgICAgICAgZGVzY3JpcHRpb24tPnNldEdsb2JhbFN0
cnVjdHVyZXMobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWxsU3RydWN0dXJlUmVwcmVzZW50
YXRpb25zKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkZXNjcmlwdGlvbi0+c2V0RGlzcGxheVR5
cGVOYW1lKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+ZGlzcGxheU5hbWUoKSk7Cisg
ICAgICAgIGRlc2NyaXB0aW9uLT5zZXRUeXBlU2V0Qm9vbGVhbnMobG9jYXRpb24tPm1fZ2xvYmFs
VHlwZVNldC0+dHlwZVNldEJvb2xlYW5zKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlc2Ny
aXB0aW9uLT5zZXRMZWFzdENvbW1vbkFuY2VzdG9yKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlw
ZVNldC0+bGVhc3RDb21tb25BbmNlc3RvcigpKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnNldFR5
cGVTZXRCb29sZWFucyhsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPnR5cGVTZXRCb29s
ZWFucygpKTsKKyAgICB9CisKKyAgICBpZiAobG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0
LT5pc092ZXJmbG93bigpIHx8IChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0ICYmIGxvY2F0aW9u
LT5tX2dsb2JhbFR5cGVTZXQtPmlzT3ZlcmZsb3duKCkpKQorICAgICAgICBkZXNjcmlwdGlvbi0+
c2V0SXNPdmVyZmxvd24odHJ1ZSk7CisgICAgZWxzZQorICAgICAgICBkZXNjcmlwdGlvbi0+c2V0
SXNPdmVyZmxvd24oZmFsc2UpOwogCiAgICAgZGVzY3JpcHRpb24tPnNldExvY2FsUHJpbWl0aXZl
VHlwZU5hbWVzKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWxsUHJpbWl0aXZlVHlw
ZU5hbWVzKCkpOwogICAgIGRlc2NyaXB0aW9uLT5zZXRMb2NhbFN0cnVjdHVyZXMobG9jYXRpb24t
Pm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkocmV2aXNpb24g
MTczNDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2NSw2ICsyNjUsMjAgQEAgU3RyaW5nIFR5cGVTZXQ6OmxlYXN0Q29t
bW9uQW5jZXN0b3IoKSBjbwogICAgIHJldHVybiBTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RDb21tb25B
bmNlc3RvcihtX3N0cnVjdHVyZUhpc3RvcnkpOwogfQogCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXRCb29sZWFucz4gVHlwZVNldDo6dHlwZVNldEJvb2xl
YW5zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHlwZVNldEJvb2xlYW5zOjpjcmVhdGUoKQorICAgICAgICAuc2V0SXNGdW5jdGlvbihkb2VzVHlw
ZUNvbmZvcm1UbyhUeXBlRnVuY3Rpb24pKQorICAgICAgICAuc2V0SXNVbmRlZmluZWQoZG9lc1R5
cGVDb25mb3JtVG8oVHlwZVVuZGVmaW5lZCkpCisgICAgICAgIC5zZXRJc051bGwoZG9lc1R5cGVD
b25mb3JtVG8oVHlwZU51bGwpKQorICAgICAgICAuc2V0SXNCb29sZWFuKGRvZXNUeXBlQ29uZm9y
bVRvKFR5cGVCb29sZWFuKSkKKyAgICAgICAgLnNldElzSW50ZWdlcihkb2VzVHlwZUNvbmZvcm1U
byhUeXBlTWFjaGluZUludCkpCisgICAgICAgIC5zZXRJc051bWJlcihkb2VzVHlwZUNvbmZvcm1U
byhUeXBlTnVtYmVyKSkKKyAgICAgICAgLnNldElzU3RyaW5nKGRvZXNUeXBlQ29uZm9ybVRvKFR5
cGVTdHJpbmcpKQorICAgICAgICAuc2V0SXNPYmplY3QoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9i
amVjdCkpCisgICAgICAgIC5yZWxlYXNlKCk7Cit9CisKIFN0cmluZyBUeXBlU2V0Ojp0b0pTT05T
dHJpbmcoKSBjb25zdAogewogICAgIC8vIFRoaXMgcmV0dXJucyBhIEpTT04gc3RyaW5nIHJlcHJl
c2VudGluZyBhbiBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CkBAIC0zOTIs
NyArNDA2LDcgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpwcm9wZXJ0eUhhc2goKSAKIFN0cmlu
ZyBTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RDb21tb25BbmNlc3Rvcihjb25zdCBWZWN0b3I8UmVmUHRy
PFN0cnVjdHVyZVNoYXBlPj4gc2hhcGVzKQogewogICAgIGlmICghc2hhcGVzLnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuICIiOworICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFJl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gb3JpZ2luID0gc2hhcGVzLmF0KDApOwogICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgc2hhcGVzLnNpemUoKTsgaSsrKSB7CkBAIC01MjYsMTMgKzU0MCwxNiBA
QCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6CiAKICAgICB3aGlsZSAo
Y3VycmVudFNoYXBlKSB7CiAgICAgICAgIGF1dG8gZmllbGRzID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gb3B0aW9uYWxGaWVsZHMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAg
Zm9yIChhdXRvIGZpZWxkIDogY3VycmVudFNoYXBlLT5tX2ZpZWxkcykKICAgICAgICAgICAgIGZp
ZWxkcy0+YWRkSXRlbShmaWVsZC5nZXQoKSk7CiAgICAgICAgIGZvciAoYXV0byBmaWVsZCA6IGN1
cnJlbnRTaGFwZS0+bV9vcHRpb25hbEZpZWxkcykKLSAgICAgICAgICAgIGZpZWxkcy0+YWRkSXRl
bShmaWVsZC5nZXQoKSArIFN0cmluZygiPyIpKTsKKyAgICAgICAgICAgIG9wdGlvbmFsRmllbGRz
LT5hZGRJdGVtKGZpZWxkLmdldCgpKTsKIAogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVs
ZHMoZmllbGRzKTsKKyAgICAgICAgY3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMob3B0
aW9uYWxGaWVsZHMpOwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRDb25zdHJ1Y3Rvck5hbWUo
Y3VycmVudFNoYXBlLT5tX2NvbnN0cnVjdG9yTmFtZSk7CisgICAgICAgIGN1cnJlbnRPYmplY3Qt
PnNldElzSW5EaWN0aW9uYXJ5TW9kZShjdXJyZW50U2hhcGUtPm1faXNJbkRpY3Rpb25hcnlNb2Rl
KTsKIAogICAgICAgICBpZiAoY3VycmVudFNoYXBlLT5tX3Byb3RvKSB7CiAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+
IG5leHRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNj
cmlwdGlvbjo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5oCShyZXZpc2lvbiAxNzM0NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY2xhc3MgQXJyYXk7CiAKIG5hbWVzcGFjZSBSdW50aW1lIHsKIGNsYXNzIFN0cnVj
dHVyZURlc2NyaXB0aW9uOworY2xhc3MgVHlwZVNldEJvb2xlYW5zOwogfQogCiB9CkBAIC0xMDUs
OSArMTA2LDEwIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9u
Pj4gYWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3Q7CiAgICAgU3RyaW5nIHRvSlNP
TlN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgaXNPdmVyZmxvd24oKSBjb25zdCB7IHJldHVybiBt
X2lzT3ZlcmZsb3duOyB9CisgICAgU3RyaW5nIGxlYXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXRCb29s
ZWFucz4gdHlwZVNldEJvb2xlYW5zKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGxl
YXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdDsKICAgICB2b2lkIGR1bXBTZWVuVHlwZXMoKTsKICAg
ICBib29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OwogCkluZGV4OiBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzQ3OSkKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAorMjAxNC0w
OS0xMCAgU2FhbSBCYXJhdGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogTW9kaWZ5IHRoZSB0eXBlIHByb2ZpbGVyIHJ1bnRpbWUgcHJvdG9jb2wgdG8g
dHJhbnNmZXIgc29tZSBjb21wdXRhdGlvbiBpbnRvIHRoZSBXZWJJbnNwZWN0b3IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjUwMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFpbnRh
aW5zIHRoZSBzYW1lIFVJIGluIHRoZSBXZWIgSW5zcGVjdG9yIGZvciBkaXNwbGF5aW5nCisgICAg
ICAgIHR5cGUgaW5mb3JtYXRpb24sIGJ1dCBub3cgYWNjb3VudHMgZm9yIHRoZSBuZXcgcHJvdG9j
b2wgZm9yIHR5cGUgcHJvZmlsaW5nLgorICAgICAgICAKKyAgICAgICAgVGhlIEluc3BlY3RvciBu
b3cgaGFzIGEgVHlwZVNldCBjbGFzcyB0aGF0IHdyYXBzIHRoZSBUeXBlRGVzY3JpcHRpb24gCisg
ICAgICAgIHByb3RvY29sIG9iamVjdCBhbmQgY3JlYXRlcyBhIHNpbXBsZSBpbnRlcmZhY2UgZm9y
IGFza2luZyBwcm90b2NvbCBvYmplY3RzIAorICAgICAgICBhYm91dCB0aGVpciB0eXBlLgorCisg
ICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5faW5z
ZXJ0VHlwZVRva2Vuc0ZvckVhY2hOb2RlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4u
aHRtbDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9UeXBlU2V0LmpzOiBBZGRlZC4K
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlU2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
eXBlU2V0LmZyb21QYXlsb2FkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlU2V0LnByb3Rv
dHlwZS5pc0NvbnRhaW5lZEluKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlU2V0LnByb3Rv
dHlwZS5oYXNTZWVuVHlwZXNPdGhlclRoYW4pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90eXBlLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdo
dGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbi5oYW5kbGVyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Rva2VuVHJhY2tpbmdDb250cm9s
bGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLm9ucG9wdWxhdGUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnBv
cHVsYXRlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5wcm90b3R5cGUudXBkYXRlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZS5fc2hvdWxkU2hv
d1BvcG92ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBl
Ll9kaXNwbGF5VHlwZU5hbWUpOgorCiAyMDE0LTA5LTEwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRml4IEVTTGludCBjb25z
aXN0ZW50LXJldHVybiB3YXJuaW5ncwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uaHRtbAkocmV2aXNpb24gMTczNDY3KQorKysgU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEs
NiArMjcxLDcgQEAKICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RleHRSYW5nZS5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZU1hcmtlci5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZVJlY29yZGluZy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9UeXBlU2V0LmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iTW9kZWxzL1VuaXRCZXppZXIuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBz
cmM9IlZpZXdzL0NvbnNvbGVNZXNzYWdlLmpzIj48L3NjcmlwdD4KSW5kZXg6IFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHJldmlzaW9uIDE3MzQ2NykKKysrIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90
YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUwLDIzICsxNTAsMjQgQEAgV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cAogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNz
aW9uOgogICAgICAgICAgICAgZm9yICh2YXIgcGFyYW0gb2Ygbm9kZS5wYXJhbXMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXBhcmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIHBhcmFtLmF0
dGFjaG1lbnRzLnR5cGVzICYmIHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzLmRpc3BsYXlUeXBlTmFt
ZSkKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYm
IHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzICYmIHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzLmlzVmFs
aWQpCiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydFRva2VuKHBhcmFtLnJhbmdlWzBd
LCBwYXJhbSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJp
YWJsZSwgcGFyYW0ubmFtZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIElmIGEg
ZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdCByZXR1cm4gdHlwZSwgdGhlbiBkb24n
dCBzaG93IGEgcmV0dXJuIHR5cGUgdW5sZXNzIHdlIHRoaW5rIGl0J3MgYSBjb25zdHJ1Y3Rvci4K
ICAgICAgICAgICAgIHZhciBmdW5jdGlvblJldHVyblR5cGUgPSBub2RlLmF0dGFjaG1lbnRzLnJl
dHVyblR5cGVzOwotICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4g
fHwgIWZ1bmN0aW9uUmV0dXJuVHlwZSB8fCAhZnVuY3Rpb25SZXR1cm5UeXBlLmRpc3BsYXlUeXBl
TmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuIHx8ICFm
dW5jdGlvblJldHVyblR5cGUgfHwgIWZ1bmN0aW9uUmV0dXJuVHlwZS5pc1ZhbGlkKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBpZiAoc2NyaXB0U3ludGF4VHJlZS5jb250
YWluc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50KG5vZGUuYm9keSkgfHwgZnVuY3Rpb25SZXR1cm5U
eXBlLmRpc3BsYXlUeXBlTmFtZSAhPT0gIlVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgIGlmIChz
Y3JpcHRTeW50YXhUcmVlLmNvbnRhaW5zTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQobm9kZS5ib2R5
KSAKKyAgICAgICAgICAgICAgICB8fCAoV2ViSW5zcGVjdG9yLlR5cGVTZXQuZnJvbVBheWxvYWQo
ZnVuY3Rpb25SZXR1cm5UeXBlKSkuaGFzU2VlblR5cGVzT3RoZXJUaGFuKFdlYkluc3BlY3Rvci5U
eXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkgewogICAgICAgICAgICAgICAgIHZhciBmdW5jdGlv
bk5hbWUgPSBub2RlLmlkID8gbm9kZS5pZC5uYW1lIDogbnVsbDsKICAgICAgICAgICAgICAgICB0
aGlzLl9pbnNlcnRUb2tlbihub2RlLmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdldHRlck9yU2V0
dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdLCBub2RlLAogICAgICAgICAgICAgICAgICAgICB0
cnVlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVtZW50
LCBmdW5jdGlvbk5hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVE
ZWNsYXJhdG9yOgotICAgICAgICAgICAgaWYgKCFub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2Vu
ICYmIG5vZGUuYXR0YWNobWVudHMudHlwZXMgJiYgbm9kZS5hdHRhY2htZW50cy50eXBlcy5kaXNw
bGF5VHlwZU5hbWUpCisgICAgICAgICAgICBpZiAoIW5vZGUuYXR0YWNobWVudHMuX190eXBlVG9r
ZW4gJiYgbm9kZS5hdHRhY2htZW50cy50eXBlcyAmJiBub2RlLmF0dGFjaG1lbnRzLnR5cGVzLmlz
VmFsaWQpCiAgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VG9rZW4obm9kZS5pZC5yYW5nZVsw
XSwgbm9kZSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJp
YWJsZSwgbm9kZS5pZC5uYW1lKTsKIAogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvVHlwZVNldC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvVHlwZVNldC5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9UeXBlU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCitXZWJJbnNwZWN0b3IuVHlwZVNldCA9IGZ1bmN0aW9uKHJ1bnRpbWVUeXBlRGVzY3JpcHRp
b25QYXlsb2FkKQoreworICAgIHRoaXMuX3R5cGVzID0gcnVudGltZVR5cGVEZXNjcmlwdGlvblBh
eWxvYWQ7CisKKyAgICB2YXIgdHlwZVNldEJvb2xlYW5zID0gdGhpcy5fdHlwZXMudHlwZVNldEJv
b2xlYW5zOworICAgIHZhciBiaXRTdHJpbmcgPSAweDA7CisgICAgaWYgKHR5cGVTZXRCb29sZWFu
cy5pc0Z1bmN0aW9uKQorICAgICAgICBiaXRTdHJpbmcgfD0gV2ViSW5zcGVjdG9yLlR5cGVTZXQu
VHlwZUJpdC5GdW5jdGlvbjsKKyAgICBpZiAodHlwZVNldEJvb2xlYW5zLmlzVW5kZWZpbmVkKQor
ICAgICAgICBiaXRTdHJpbmcgfD0gV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5VbmRlZmlu
ZWQ7CisgICAgaWYgKHR5cGVTZXRCb29sZWFucy5pc051bGwpCisgICAgICAgIGJpdFN0cmluZyB8
PSBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0Lk51bGw7CisgICAgaWYgKHR5cGVTZXRCb29s
ZWFucy5pc0Jvb2xlYW4pCisgICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlwZVNl
dC5UeXBlQml0LkJvb2xlYW47CisgICAgaWYgKHR5cGVTZXRCb29sZWFucy5pc0ludGVnZXIpCisg
ICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LkludGVnZXI7
CisgICAgaWYgKHR5cGVTZXRCb29sZWFucy5pc051bWJlcikKKyAgICAgICAgYml0U3RyaW5nIHw9
IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuTnVtYmVyOworICAgIGlmICh0eXBlU2V0Qm9v
bGVhbnMuaXNTdHJpbmcpCisgICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlwZVNl
dC5UeXBlQml0LlN0cmluZzsKKyAgICBpZiAodHlwZVNldEJvb2xlYW5zLmlzT2JqZWN0KQorICAg
ICAgICBiaXRTdHJpbmcgfD0gV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5PYmplY3Q7CisK
KyAgICB0aGlzLl9iaXRTdHJpbmcgPSBiaXRTdHJpbmc7Cit9OworCitXZWJJbnNwZWN0b3IuVHlw
ZVNldC5mcm9tUGF5bG9hZCA9IGZ1bmN0aW9uKHBheWxvYWQpCit7CisgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuVHlwZVNldChwYXlsb2FkKTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlU2V0
LlR5cGVCaXQgPSB7CisgICAgIkZ1bmN0aW9uIiAgICA6ICAweDEsCisgICAgIlVuZGVmaW5lZCIg
ICA6ICAweDIsCisgICAgIk51bGwiICAgICAgICA6ICAweDQsCisgICAgIkJvb2xlYW4iICAgICA6
ICAweDgsCisgICAgIkludGVnZXIiICAgICA6ICAweDEwLAorICAgICJOdW1iZXIiICAgICAgOiAg
MHgyMCwKKyAgICAiU3RyaW5nIiAgICAgIDogIDB4NDAsCisgICAgIk9iamVjdCIgICAgICA6ICAw
eDgwCit9OworCitXZWJJbnNwZWN0b3IuVHlwZVNldC5wcm90b3R5cGUgPSB7CisgICAgY29uc3Ry
dWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlU2V0LAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9y
Lk9iamVjdC5wcm90b3R5cGUsCisKKyAgICBpc0NvbnRhaW5lZEluOiBmdW5jdGlvbih0ZXN0KQor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdHlwZXMgaW4gYml0U3Ry
aW5nIGlzIGNvbnRhaW5lZCBpbiB0aGUgdHlwZXMgZGVzY3JpYmVkIGJ5IHRoZSAndGVzdCcgYml0
c3RyaW5nLiAoaS5lIHdlIGhhdmVuJ3Qgc2VlbiBtb3JlIHR5cGVzIHRoYW4gJ3Rlc3QnKS4KKyAg
ICAgICAgLy8gV2UgaGF2ZSBzZWVuIGZld2VyIG9yIGVxdWFsIG51bWJlciBvZiB0eXBlcyBhcyAn
dGVzdCcgaWYgQU5EaW5nIGJpdFN0cmluZyB3aXRoIHRlc3QgZG9lc24ndCB6ZXJvIG91dCBhbnkg
b2Ygb3VyIGJpdHMuCisKKyAgICAgICAgLy8gRm9yIGV4YW1wbGU6CisKKyAgICAgICAgLy8gMGIw
MTEwIChiaXRTdHJpbmcpCisgICAgICAgIC8vIDBiMTExMSAodGVzdCkKKyAgICAgICAgLy8gLS0t
LS0tIChBTkQpCisgICAgICAgIC8vIDBiMDExMCA9PSBiaXRTdHJpbmcKKworICAgICAgICAvLyAw
YjAxMTAgKGJpdFN0cmluZykKKyAgICAgICAgLy8gMGIwMDEwICh0ZXN0KQorICAgICAgICAvLyAt
LS0tLS0gKEFORCkKKyAgICAgICAgLy8gMGIwMDEwICE9IGJpdFN0cmluZworCisgICAgICAgIHJl
dHVybiAodGhpcy5fYml0U3RyaW5nICYgdGVzdCkgPT09IHRoaXMuX2JpdFN0cmluZzsKKyAgICB9
LAorCisgICAgaGFzU2VlblR5cGVzT3RoZXJUaGFuOiBmdW5jdGlvbih0ZXN0KQorICAgIHsKKyAg
ICAgICAgLy8gV2UncmUgaW50ZXJlc3RlZCBpZiBBTkRpbmcgd2l0aCB0aGUgaW52ZXJzZSBvZiB0
ZXN0IGxlYXZlcyBhdCBsZWFzdCBvbmUgb2Ygb3VyIGJpdHMgYWxpdmUuCisgICAgICAgIC8vIFRo
aXMgbWVhbnMgdGhhdCB3ZSBoYWQgYXQgbGVhc3Qgb25lIG90aGVyIGJpdCB0aGFuIHRob3NlIHJl
cHJlc2VudGVkIGluIHRlc3QgYXMgYmVpbmcgdHVybmVkIG9uLgorCisgICAgICAgIHJldHVybiAo
KH50ZXN0KSAmIHRoaXMuX2JpdFN0cmluZykgPiAweDA7CisgICAgfQorfTsKSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9y
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzM0NjcpCisrKyBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTI0MCw3ICsxMjQwLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgaWYgKCFhbGxUeXBlcy5sZW5ndGgp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgdmFyIHR5cGVzID0gYWxsVHlw
ZXNbMF07Ci0gICAgICAgICAgICBpZiAodHlwZXMuZGlzcGxheVR5cGVOYW1lKSB7CisgICAgICAg
ICAgICBpZiAodHlwZXMuaXNWYWxpZCkgewogICAgICAgICAgICAgICAgIHZhciBwb3BvdmVyVGl0
bGUgPSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy50aXRsZUZvclBvcG92ZXIoV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlLCBjYW5kaWRhdGUuZXhwcmVzc2lv
bik7CiAgICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wb3ZlckZvclR5cGVzKHR5cGVzLCBudWxs
LCBwb3BvdmVyVGl0bGUpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9w
ZXJ0aWVzU2VjdGlvbi5qcwkocmV2aXNpb24gMTczNDY3KQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw2ICs1NiwxMCBAQCBXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0
aW9uLnByb3RvCiAgICAgICAgIH0KIAogICAgICAgICBwcm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVj
dG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IpOworCisgICAgICAg
IGlmICh0aGlzLnR5cGVzLmlzT3ZlcmZsb3duKQorICAgICAgICAgICAgcHJvcGVydGllcy5wdXNo
KHtuYW1lOiAiLi4uIiwgc3RydWN0dXJlOiBudWxsfSk7CisKICAgICAgICAgZm9yICh2YXIgcHJv
cGVydHkgb2YgcHJvcGVydGllcykKICAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRs
aW5lLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQo
cHJvcGVydHkpKTsKIApAQCAtMTUyLDYgKzE1NiwyMiBAQCBXZWJJbnNwZWN0b3IuVHlwZVByb3Bl
cnR5VHJlZUVsZW1lbnQucHJvCiAKICAgICAgICAgcHJvcGVydGllcy5zb3J0KFdlYkluc3BlY3Rv
ci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlDb21wYXJhdG9yKTsKIAorICAgICAgICBm
b3IgKHZhciBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgdGhpcy5hcHBlbmRD
aGlsZChuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3BlcnR5KSk7
CisKKyAgICAgICAgcHJvcGVydGllcyA9IFtdOworICAgICAgICBmb3IgKHZhciBmaWVsZE5hbWUg
b2YgdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUub3B0aW9uYWxGaWVsZHMpIHsKKyAgICAgICAgICAg
IHByb3BlcnRpZXMucHVzaCh7CisgICAgICAgICAgICAgICAgbmFtZTogZmllbGROYW1lICsgIj8i
LAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogbnVsbAorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKworICAgICAgICBwcm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0
aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IpOworCisgICAgICAgIGlmICh0aGlzLnByb3Bl
cnR5LnN0cnVjdHVyZS5pc0luRGljdGlvbmFyeU1vZGUpCisgICAgICAgICAgICBwcm9wZXJ0aWVz
LnB1c2goe25hbWU6ICIuLi4iLCBzdHJ1Y3R1cmU6IG51bGx9KTsKKwogICAgICAgICBpZiAodGhp
cy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJvdG90eXBlU3RydWN0dXJlKSB7CiAgICAgICAgICAgICBw
cm9wZXJ0aWVzLnB1c2goewogICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMucHJvcGVydHkuc3Ry
dWN0dXJlLnByb3RvdHlwZVN0cnVjdHVyZS5jb25zdHJ1Y3Rvck5hbWUgKyAiICgiICsgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJQcm90b3R5cGUiKSArICIpIiwKSW5kZXg6IFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmll
dy5qcwkocmV2aXNpb24gMTczNDY3KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYs
NiBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUgPSB7CiAgICAgUmV0dXJu
U3RhdGVtZW50OiAidGl0bGUtdHlwZS1yZXR1cm4tc3RhdGVtZW50IgogfTsKIAotLy8gVGhlc2Ug
dHlwZSBzdHJpbmdzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0eXBlIGluZm9ybWF0aW9u
IGluIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKIFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5WaWV3LkNvbG9yQ2xhc3NGb3JUeXBlID0gewogICAgICJTdHJpbmciOiAidHlwZS10b2tl
bi1zdHJpbmciLAogICAgICJGdW5jdGlvbiI6ICJ0eXBlLXRva2VuLWZ1bmN0aW9uIiwKQEAgLTgx
LDYgKzgwLDcgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuQ29sb3JDbGFzc0ZvcgogCiBX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5EZWxheUhvdmVyVGltZSA9IDM1MDsKIAorCiBXZWJJ
bnNwZWN0b3IuVHlwZVRva2VuVmlldy5wcm90b3R5cGUgPSB7CiAgICAgY29uc3RydWN0b3I6IFdl
Ykluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LAogICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9i
amVjdC5wcm90b3R5cGUsCkBAIC04OSw5ICs4OSwxMCBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICB1cGRhdGU6IGZ1bmN0aW9uKHR5cGVzKQogICAgIHsK
LSAgICAgICAgdmFyIHRpdGxlID0gdHlwZXMuZGlzcGxheVR5cGVOYW1lOwotICAgICAgICB0aGlz
LmVsZW1lbnQudGV4dENvbnRlbnQgPSB0aXRsZTsKICAgICAgICAgdGhpcy5fdHlwZXMgPSB0eXBl
czsKKworICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLl9kaXNwbGF5VHlwZU5hbWUoKTsKKyAgICAg
ICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7CiAgICAgICAgIHZhciBoYXNoU3Ry
aW5nID0gdGl0bGVbdGl0bGUubGVuZ3RoIC0gMV0gPT09ICI/IiA/IHRpdGxlLnNsaWNlKDAsIHRp
dGxlLmxlbmd0aCAtIDEpIDogdGl0bGU7CiAKICAgICAgICAgaWYgKHRoaXMuX2NvbG9yQ2xhc3Mp
CkBAIC0xMzYsNSArMTM3LDU3IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9LAorCisgICAgX2Rpc3BsYXlUeXBlTmFtZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciB0eXBlU2V0ID0gV2ViSW5zcGVjdG9yLlR5cGVTZXQuZnJvbVBheWxvYWQodGhpcy5fdHlwZXMp
OworCisgICAgICAgIGlmICh0aGlzLl90eXBlcy5sZWFzdENvbW1vbkFuY2VzdG9yKSB7CisgICAg
ICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5
cGVCaXQuT2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHlwZXMubGVhc3RD
b21tb25BbmNlc3RvcjsKKyAgICAgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2Vi
SW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5PYmplY3QgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5U
eXBlQml0Lk51bGwgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlVuZGVmaW5lZCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVzLmxlYXN0Q29tbW9uQW5jZXN0b3IgKyAi
PyI7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlc2UgY2hlY2tzIGFy
ZSBpbXBvcnRhbnQuIAorICAgICAgICAvLyBGb3IgZXhhbXBsZSwgaWYgYSB2YWx1ZSBpcyBvbmx5
IGEgZnVuY3Rpb24sIGl0IGNvbmZvcm1zIHRvIFR5cGVGdW5jdGlvbiwgYnV0IGl0IGFsc28gY29u
Zm9ybXMgdG8gVHlwZUZ1bmN0aW9uIHwgVHlwZU51bGwuCisgICAgICAgIC8vIFRoZXJlZm9yZSwg
bW9yZSBzcGVjaWZpYyB0eXBlcyBtdXN0IGJlIGNoZWNrZWQgZmlyc3QuCisKKyAgICAgICAgLy8g
VGhlIHN0cmluZ3MgcmV0dXJuZWQgaGVyZSBzaG91bGQgbWF0Y2ggdGhvc2UgaW4gVHlwZVRva2Vu
Vmlldy5Db2xvckNsYXNzRm9yVHlwZQorICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZElu
KFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuRnVuY3Rpb24pKQorICAgICAgICAgICAgcmV0
dXJuICJGdW5jdGlvbiI7CisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5z
cGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5VbmRlZmluZWQpKQorICAgICAgICAgICAgcmV0dXJuICJV
bmRlZmluZWQiOworICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rv
ci5UeXBlU2V0LlR5cGVCaXQuTnVsbCkpCisgICAgICAgICAgICByZXR1cm4gIk51bGwiOworICAg
ICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVC
aXQuQm9vbGVhbikpCisgICAgICAgICAgICByZXR1cm4gIkJvb2xlYW4iOworICAgICAgICBpZiAo
dHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuSW50ZWdl
cikpCisgICAgICAgICAgICByZXR1cm4gIkludGVnZXIiOworICAgICAgICBpZiAodHlwZVNldC5p
c0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuTnVtYmVyIHwgV2ViSW5z
cGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5JbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVybiAiTnVt
YmVyIjsKKyAgICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlw
ZVNldC5UeXBlQml0LlN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gIlN0cmluZyI7CisKKyAg
ICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBl
Qml0Lk51bGwgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlVuZGVmaW5lZCkpCisgICAg
ICAgICAgICByZXR1cm4gIig/KSI7CisKKyAgICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJ
bihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LkZ1bmN0aW9uIHwgV2ViSW5zcGVjdG9yLlR5
cGVTZXQuVHlwZUJpdC5OdWxsIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5VbmRlZmlu
ZWQpKQorICAgICAgICAgICAgcmV0dXJuICJGdW5jdGlvbj8iOworICAgICAgICBpZiAodHlwZVNl
dC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuQm9vbGVhbiB8IFdl
Ykluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuTnVsbCB8IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5
cGVCaXQuVW5kZWZpbmVkKSkKKyAgICAgICAgICAgIHJldHVybiAiQm9vbGVhbj8iOworICAgICAg
ICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQu
SW50ZWdlciB8IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuTnVsbCB8IFdlYkluc3BlY3Rv
ci5UeXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkKKyAgICAgICAgICAgIHJldHVybiAiSW50ZWdl
cj8iOworICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBl
U2V0LlR5cGVCaXQuTnVtYmVyIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5JbnRlZ2Vy
IHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5OdWxsIHwgV2ViSW5zcGVjdG9yLlR5cGVT
ZXQuVHlwZUJpdC5VbmRlZmluZWQpKQorICAgICAgICAgICAgcmV0dXJuICJOdW1iZXI/IjsKKyAg
ICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBl
Qml0LlN0cmluZyB8IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuTnVsbCB8IFdlYkluc3Bl
Y3Rvci5UeXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkKKyAgICAgICAgICAgIHJldHVybiAiU3Ry
aW5nPyI7CisgICAgICAgCisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5z
cGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5PYmplY3QgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBl
Qml0LkZ1bmN0aW9uIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5TdHJpbmcpKQorICAg
ICAgICAgICAgcmV0dXJuICJPYmplY3QiOworICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5l
ZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuT2JqZWN0IHwgV2ViSW5zcGVjdG9yLlR5
cGVTZXQuVHlwZUJpdC5GdW5jdGlvbiB8IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuU3Ry
aW5nIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5OdWxsIHwgV2ViSW5zcGVjdG9yLlR5
cGVTZXQuVHlwZUJpdC5VbmRlZmluZWQpKQorICAgICAgICAgICAgcmV0dXJuICJPYmplY3Q/IjsK
KworICAgICAgICByZXR1cm4gIihtYW55KSI7CiAgICAgfQogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237901</attachid>
            <date>2014-09-10 13:18:44 -0700</date>
            <delta_ts>2014-09-10 17:25:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>28916</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczNDc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDE0LTA5LTEwICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBNb2RpZnkgdGhlIHR5cGUgcHJvZmlsZXIgcnVudGltZSBwcm90
b2NvbCB0byB0cmFuc2ZlciBzb21lIGNvbXB1dGF0aW9uIGludG8gdGhlIFdlYkluc3BlY3Rvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NTAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBjaGFuZ2VzIHRoZSB0eXBlIHByb2ZpbGVyIHByb3RvY29sIHRvIHRoZSBXZWIgSW5zcGVjdG9y
CisgICAgICAgIGJ5IG1vdmluZyB0aGUgd29yayBvZiBjYWxjdWxhdGluZyBjb21wdXRlZCBwcm9w
ZXJ0aWVzIHRoYXQgZWZmZWN0IHRoZSBVSSAKKyAgICAgICAgaW50byB0aGUgV2ViIEluc3BlY3Rv
ci4gVGhpcyBtYWtlcyB0aGUgV2ViIEluc3BlY3RvciBoYXZlIGNvbnRyb2wgb3ZlciB0aGUgCisg
ICAgICAgIHN0cmluZ3MgaXQgZGlzcGxheXMgYXMgVUkgZWxlbWVudHMgcmVwcmVzZW50aW5nIHR5
cGUgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgCisgICAgICAgIGluc3RlYWQgb2YgSmF2YVNjcmlw
dENvcmUgZGVjaWRpbmcgb24gYSBjb252ZW50aW9uIGZvciB0aGVzZSBzdHJpbmdzLgorICAgICAg
ICBKYXZhU2NyaXB0Q29yZSBub3cgc2VuZHMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRoZSBXZWIg
SW5zcGVjdG9yIHNvIHRoYXQgCisgICAgICAgIGl0IGNhbiBjb21wdXRlIHRoZSBwcm9wZXJ0aWVz
IEphdmFTY3JpcHRDb3JlIHVzZWQgdG8gY29tcHV0ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9w
cm90b2NvbC9SdW50aW1lLmpzb246CisgICAgICAgICogcnVudGltZS9UeXBlUHJvZmlsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6OmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNl
dEZvckluc3BlY3Rvcik6CisgICAgICAgICogcnVudGltZS9UeXBlU2V0LmNwcDoKKyAgICAgICAg
KEpTQzo6VHlwZVNldDo6dHlwZVNldEJvb2xlYW5zKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U2hhcGU6OmxlYXN0Q29tbW9uQW5jZXN0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFw
ZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5o
OgorCiAyMDE0LTA5LTEwICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KIAog
ICAgICAgICBUeXBlU2V0IG5lZWRzIGEgbW9kZSB3aGVyZSBpdCBubyBsb25nZXIgcHJvZmlsZXMg
c3RydWN0dXJlIHNoYXBlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9SdW50aW1lLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24JKHJldmlzaW9uIDE3MzQ2NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsOCArMTE3LDI0IEBACiAgICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAogICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJmaWVsZHMiLCAidHlwZSI6ICJhcnJheSIsICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmlu
ZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHN0cmluZ3Ms
IHdoZXJlIHRoZSBzdHJpbmdzIHJlcHJlc2VudCBvYmplY3QgcHJvcGVydGllcy4iIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJvcHRpb25hbEZpZWxkcyIsICJ0eXBlIjogImFycmF5Iiwg
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiQXJyYXkgb2Ygc3RyaW5ncywgd2hlcmUgdGhlIHN0cmluZ3MgcmVwcmVzZW50IG9w
dGlvbmFsIG9iamVjdCBwcm9wZXJ0aWVzLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbnN0cnVjdG9yTmFtZSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJOYW1lIG9mIHRoZSBjb25zdHJ1Y3Rvci4iIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcm90b3R5cGVTdHJ1Y3R1cmUiLCAiJHJlZiI6ICJTdHJ1Y3R1cmVEZXNj
cmlwdGlvbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJQb2ludGVyIHRvIHRo
ZSBTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvdG95cGUgaWYgb25lIGV4aXN0cy4i
IH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByb3RvdHlwZVN0cnVjdHVyZSIsICIkcmVm
IjogIlN0cnVjdHVyZURlc2NyaXB0aW9uIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIlBvaW50ZXIgdG8gdGhlIFN0cnVjdHVyZVJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm90b3lw
ZSBpZiBvbmUgZXhpc3RzLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzSW5EaWN0
aW9uYXJ5TW9kZSIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiSWYgdHJ1ZSwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGZpZWxkcyBpbiB0aGlzIFN0
cnVjdHVyZURlc2NyaXB0aW9uIG1heSBiZSBpbmFjY3VyYXRlLiBJLmUsIHRoZXJlIG1pZ2h0IGhh
dmUgYmVlbiBmaWVsZHMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZCBiZWZvcmUgaXQgd2FzIHByb2Zp
bGVkIG9yIGl0IGhhcyBmaWVsZHMgd2UgaGF2ZW4ndCBwcm9maWxlZC4iIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR5cGVTZXRCb29s
ZWFucyIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc0Z1bmN0aW9uIiwgInR5cGUi
OiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IGZhbHNlLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNhdGVz
IGlmIHRoaXMgdHlwZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIEZ1bmN0aW9uLiIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImlzVW5kZWZpbmVkIiwgInR5cGUiOiAiYm9vbGVhbiIs
ICJvcHRpb25hbCI6IGZhbHNlLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNhdGVzIGlmIHRoaXMgdHlw
ZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIFVuZGVmaW5lZC4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJpc051bGwiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogZmFs
c2UsICJkZXNjcmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhh
cyBiZWVuIHR5cGUgTnVsbC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc0Jvb2xl
YW4iLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogZmFsc2UsICJkZXNjcmlwdGlvbiI6
ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5cGUgQm9vbGVh
bi4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc0ludGVnZXIiLCAidHlwZSI6ICJi
b29sZWFuIiwgIm9wdGlvbmFsIjogZmFsc2UsICJkZXNjcmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYg
dGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5cGUgSW50ZWdlci4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJpc051bWJlciIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9u
YWwiOiBmYWxzZSwgImRlc2NyaXB0aW9uIjogIkluZGljYXRlcyBpZiB0aGlzIHR5cGUgZGVzY3Jp
cHRpb24gaGFzIGJlZW4gdHlwZSBOdW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaXNTdHJpbmciLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogZmFsc2UsICJkZXNj
cmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5
cGUgU3RyaW5nLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzT2JqZWN0IiwgInR5
cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IGZhbHNlLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNh
dGVzIGlmIHRoaXMgdHlwZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIE9iamVjdC4iIH0KICAg
ICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpAQCAtMTI2LDEzICsxNDIsMTUgQEAK
ICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiQ29udGFpbmVyIGZvciB0eXBlIGluZm9ybWF0aW9uIHRoYXQgaGFzIGJlZW4gZ2F0aGVyZWQu
IiwKICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGlzcGxheVR5cGVOYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIldoYXQgdGhlIGluc3BlY3RvciBzaG91bGQgZGlzcGxheSBhcyBhIHNp
bXBsZSB0eXBlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzVmFsaWQiLCAidHlw
ZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIklmIHRydWUs
IHdlIHdlcmUgYWJsZSB0byBjb3JyZWxhdGUgdGhlIG9mZnNldCBzdWNjZXNzZnVseSB3aXRoIGEg
cHJvZ3JhbSBsb2NhdGlvbi4gSWYgZmFsc2UsIHRoZSBvZmZzZXQgbWF5IGJlIGJvZ3VzIG9yIHRo
ZSBvZmZzZXQgbWF5IGJlIGZyb20gYSBDb2RlQmxvY2sgdGhhdCBoYXNuJ3QgZXhlY3V0ZWQuIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibGVhc3RDb21tb25BbmNlc3RvciIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJMZWFzdCBjb21t
b24gYW5jZXN0b3Igb2YgYWxsIENvbnN0cnVjdG9ycyBpZiB0aGUgVHlwZURlc2NyaXB0aW9uIGhh
cyBzZWVuIGFueSBzdHJ1Y3R1cmVzLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5
cGVTZXRCb29sZWFucyIsICIkcmVmIjogIlR5cGVTZXRCb29sZWFucyIsICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJTZXQgb2YgYm9vbGVhbnMgZm9yIGRldGVybWluaW5nIHRoZSBh
Z2dyZWdhdGUgdHlwZSBvZiB0aGlzIHR5cGUgZGVzY3JpcHRpb24uIiB9LAogICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibG9jYWxQcmltaXRpdmVUeXBlTmFtZXMiLCAidHlwZSI6ICJhcnJheSIs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiQXJyYXkgb2YgdHlwZSBuYW1lcyBmb3IgcHJpbXRpdmUgdHlwZXMgKGludCwgc3Ry
aW5nLCBldGMpIHNlZW4gYXQgYW4gaW5zdHJ1Y3Rpb24iIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJsb2NhbE9iamVjdFR5cGVOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJB
cnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgb2JqZWN0IHNlZW4gYXQgYW4gaW5zdHJ1Y3Rpb24i
IH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhbFN0cnVjdHVyZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU3RydWN0dXJlRGVzY3JpcHRpb24iIH0sICJv
cHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiBkZXNjcmlwdGlvbnMgZm9y
IGFsbCBzdHJ1Y3R1cmVzIHNlZW4gYXQgdGhpcyB0aGlzIGluc3RydWN0aW9uLiIgfSwKICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgcHJpbWl0aXZlIHR5
cGVzIHNlZW4gZ2xvYmFsbHkuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZ2xvYmFs
T2JqZWN0VHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHR5cGUg
bmFtZXMgZm9yIGFsbCBwcmltaXRpdmUgdHlwZXMgc2VlbiBnbG9iYWxseS4iIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJnbG9iYWxTdHJ1Y3R1cmVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
aXRlbXMiOiB7ICIkcmVmIjogIlN0cnVjdHVyZURlc2NyaXB0aW9uIiB9LCAib3B0aW9uYWwiOiB0
cnVlLCAiZGVzY3JpcHRpb24iOiAiQXJyYXkgb2YgZGVzY3JpcHRpb25zIGZvciBhbGwgc3RydWN0
dXJlcyBzZWVuIGZvciB0aGlzIHZhcmlhYmxlLiIgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZ2xvYmFsU3RydWN0dXJlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6
ICJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIkFycmF5IG9mIGRlc2NyaXB0aW9ucyBmb3IgYWxsIHN0cnVjdHVyZXMgc2VlbiBmb3IgdGhp
cyB2YXJpYWJsZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc092ZXJmbG93biIs
ICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWYg
dHJ1ZSwgdGhpcyBpbmRpY2F0ZXMgdGhhdCBubyBtb3JlIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBy
b2ZpbGVkIGJlY2F1c2Ugc29tZSBtYXhpbXVtIHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVkIGFu
ZCBwcm9maWxpbmcgaGFzIHN0b3BwZWQgYmVjYXVzZSBvZiBtZW1vcnkgcHJlc3N1cmUuIiB9CiAg
ICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTczNDY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsMTUgKzY4LDI2IEBAIHZvaWQgVHlwZVByb2ZpbGVyOjppbnNlcnROZXdM
b2NhdGlvbihUeXAKIHZvaWQgVHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZz
ZXRGb3JJbnNwZWN0b3IoVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yLCB1
bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+JiBkZXNjcmlwdGlvbikKIHsKICAgICBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3VyY2VJRCwgZGVzY3Jp
cHRvcik7Ci0gICAgaWYgKCFsb2NhdGlvbikKKyAgICBpZiAoIWxvY2F0aW9uKSB7CisgICAgICAg
IGRlc2NyaXB0aW9uLT5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBkZXNjcmlwdGlvbi0+c2V0SXNWYWxpZCh0cnVlKTsKIAogICAgIGlmIChsb2NhdGlvbi0+
bV9nbG9iYWxUeXBlU2V0ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gVHlwZVBy
b2ZpbGVyTm9HbG9iYWxJREV4aXN0cykgewotICAgICAgICBkZXNjcmlwdGlvbi0+c2V0RGlzcGxh
eVR5cGVOYW1lKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmRpc3BsYXlOYW1lKCkpOworICAg
ICAgICBkZXNjcmlwdGlvbi0+c2V0TGVhc3RDb21tb25BbmNlc3Rvcihsb2NhdGlvbi0+bV9nbG9i
YWxUeXBlU2V0LT5sZWFzdENvbW1vbkFuY2VzdG9yKCkpOwogICAgICAgICBkZXNjcmlwdGlvbi0+
c2V0R2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmFs
bFByaW1pdGl2ZVR5cGVOYW1lcygpKTsKICAgICAgICAgZGVzY3JpcHRpb24tPnNldEdsb2JhbFN0
cnVjdHVyZXMobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWxsU3RydWN0dXJlUmVwcmVzZW50
YXRpb25zKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkZXNjcmlwdGlvbi0+c2V0RGlzcGxheVR5
cGVOYW1lKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+ZGlzcGxheU5hbWUoKSk7Cisg
ICAgICAgIGRlc2NyaXB0aW9uLT5zZXRUeXBlU2V0Qm9vbGVhbnMobG9jYXRpb24tPm1fZ2xvYmFs
VHlwZVNldC0+dHlwZVNldEJvb2xlYW5zKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlc2Ny
aXB0aW9uLT5zZXRMZWFzdENvbW1vbkFuY2VzdG9yKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlw
ZVNldC0+bGVhc3RDb21tb25BbmNlc3RvcigpKTsKKyAgICAgICAgZGVzY3JpcHRpb24tPnNldFR5
cGVTZXRCb29sZWFucyhsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPnR5cGVTZXRCb29s
ZWFucygpKTsKKyAgICB9CisKKyAgICBpZiAobG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0
LT5pc092ZXJmbG93bigpIHx8IChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0ICYmIGxvY2F0aW9u
LT5tX2dsb2JhbFR5cGVTZXQtPmlzT3ZlcmZsb3duKCkpKQorICAgICAgICBkZXNjcmlwdGlvbi0+
c2V0SXNPdmVyZmxvd24odHJ1ZSk7CisgICAgZWxzZQorICAgICAgICBkZXNjcmlwdGlvbi0+c2V0
SXNPdmVyZmxvd24oZmFsc2UpOwogCiAgICAgZGVzY3JpcHRpb24tPnNldExvY2FsUHJpbWl0aXZl
VHlwZU5hbWVzKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWxsUHJpbWl0aXZlVHlw
ZU5hbWVzKCkpOwogICAgIGRlc2NyaXB0aW9uLT5zZXRMb2NhbFN0cnVjdHVyZXMobG9jYXRpb24t
Pm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkocmV2aXNpb24g
MTczNDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2NSw2ICsyNjUsMjAgQEAgU3RyaW5nIFR5cGVTZXQ6OmxlYXN0Q29t
bW9uQW5jZXN0b3IoKSBjbwogICAgIHJldHVybiBTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RDb21tb25B
bmNlc3RvcihtX3N0cnVjdHVyZUhpc3RvcnkpOwogfQogCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXRCb29sZWFucz4gVHlwZVNldDo6dHlwZVNldEJvb2xl
YW5zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHlwZVNldEJvb2xlYW5zOjpjcmVhdGUoKQorICAgICAgICAuc2V0SXNGdW5jdGlvbihkb2VzVHlw
ZUNvbmZvcm1UbyhUeXBlRnVuY3Rpb24pKQorICAgICAgICAuc2V0SXNVbmRlZmluZWQoZG9lc1R5
cGVDb25mb3JtVG8oVHlwZVVuZGVmaW5lZCkpCisgICAgICAgIC5zZXRJc051bGwoZG9lc1R5cGVD
b25mb3JtVG8oVHlwZU51bGwpKQorICAgICAgICAuc2V0SXNCb29sZWFuKGRvZXNUeXBlQ29uZm9y
bVRvKFR5cGVCb29sZWFuKSkKKyAgICAgICAgLnNldElzSW50ZWdlcihkb2VzVHlwZUNvbmZvcm1U
byhUeXBlTWFjaGluZUludCkpCisgICAgICAgIC5zZXRJc051bWJlcihkb2VzVHlwZUNvbmZvcm1U
byhUeXBlTnVtYmVyKSkKKyAgICAgICAgLnNldElzU3RyaW5nKGRvZXNUeXBlQ29uZm9ybVRvKFR5
cGVTdHJpbmcpKQorICAgICAgICAuc2V0SXNPYmplY3QoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9i
amVjdCkpCisgICAgICAgIC5yZWxlYXNlKCk7Cit9CisKIFN0cmluZyBUeXBlU2V0Ojp0b0pTT05T
dHJpbmcoKSBjb25zdAogewogICAgIC8vIFRoaXMgcmV0dXJucyBhIEpTT04gc3RyaW5nIHJlcHJl
c2VudGluZyBhbiBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CkBAIC0zOTIs
NyArNDA2LDcgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpwcm9wZXJ0eUhhc2goKSAKIFN0cmlu
ZyBTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RDb21tb25BbmNlc3Rvcihjb25zdCBWZWN0b3I8UmVmUHRy
PFN0cnVjdHVyZVNoYXBlPj4gc2hhcGVzKQogewogICAgIGlmICghc2hhcGVzLnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuICIiOworICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFJl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gb3JpZ2luID0gc2hhcGVzLmF0KDApOwogICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgc2hhcGVzLnNpemUoKTsgaSsrKSB7CkBAIC01MjYsMTMgKzU0MCwxNiBA
QCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6CiAKICAgICB3aGlsZSAo
Y3VycmVudFNoYXBlKSB7CiAgICAgICAgIGF1dG8gZmllbGRzID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gb3B0aW9uYWxGaWVsZHMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAg
Zm9yIChhdXRvIGZpZWxkIDogY3VycmVudFNoYXBlLT5tX2ZpZWxkcykKICAgICAgICAgICAgIGZp
ZWxkcy0+YWRkSXRlbShmaWVsZC5nZXQoKSk7CiAgICAgICAgIGZvciAoYXV0byBmaWVsZCA6IGN1
cnJlbnRTaGFwZS0+bV9vcHRpb25hbEZpZWxkcykKLSAgICAgICAgICAgIGZpZWxkcy0+YWRkSXRl
bShmaWVsZC5nZXQoKSArIFN0cmluZygiPyIpKTsKKyAgICAgICAgICAgIG9wdGlvbmFsRmllbGRz
LT5hZGRJdGVtKGZpZWxkLmdldCgpKTsKIAogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVs
ZHMoZmllbGRzKTsKKyAgICAgICAgY3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMob3B0
aW9uYWxGaWVsZHMpOwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRDb25zdHJ1Y3Rvck5hbWUo
Y3VycmVudFNoYXBlLT5tX2NvbnN0cnVjdG9yTmFtZSk7CisgICAgICAgIGN1cnJlbnRPYmplY3Qt
PnNldElzSW5EaWN0aW9uYXJ5TW9kZShjdXJyZW50U2hhcGUtPm1faXNJbkRpY3Rpb25hcnlNb2Rl
KTsKIAogICAgICAgICBpZiAoY3VycmVudFNoYXBlLT5tX3Byb3RvKSB7CiAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+
IG5leHRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNj
cmlwdGlvbjo6Y3JlYXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5oCShyZXZpc2lvbiAxNzM0NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY2xhc3MgQXJyYXk7CiAKIG5hbWVzcGFjZSBSdW50aW1lIHsKIGNsYXNzIFN0cnVj
dHVyZURlc2NyaXB0aW9uOworY2xhc3MgVHlwZVNldEJvb2xlYW5zOwogfQogCiB9CkBAIC0xMDUs
OSArMTA2LDEwIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9u
Pj4gYWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3Q7CiAgICAgU3RyaW5nIHRvSlNP
TlN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgaXNPdmVyZmxvd24oKSBjb25zdCB7IHJldHVybiBt
X2lzT3ZlcmZsb3duOyB9CisgICAgU3RyaW5nIGxlYXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXRCb29s
ZWFucz4gdHlwZVNldEJvb2xlYW5zKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGxl
YXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdDsKICAgICB2b2lkIGR1bXBTZWVuVHlwZXMoKTsKICAg
ICBib29sIGRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OwogCkluZGV4OiBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzQ3OSkKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAorMjAxNC0w
OS0xMCAgU2FhbSBCYXJhdGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogTW9kaWZ5IHRoZSB0eXBlIHByb2ZpbGVyIHJ1bnRpbWUgcHJvdG9jb2wgdG8g
dHJhbnNmZXIgc29tZSBjb21wdXRhdGlvbiBpbnRvIHRoZSBXZWJJbnNwZWN0b3IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjUwMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFpbnRh
aW5zIHRoZSBzYW1lIFVJIGluIHRoZSBXZWIgSW5zcGVjdG9yIGZvciBkaXNwbGF5aW5nCisgICAg
ICAgIHR5cGUgaW5mb3JtYXRpb24sIGJ1dCBub3cgYWNjb3VudHMgZm9yIHRoZSBuZXcgcHJvdG9j
b2wgZm9yIHR5cGUgcHJvZmlsaW5nLgorICAgICAgICAKKyAgICAgICAgVGhlIEluc3BlY3RvciBu
b3cgaGFzIGEgVHlwZVNldCBjbGFzcyB0aGF0IHdyYXBzIHRoZSBUeXBlRGVzY3JpcHRpb24gCisg
ICAgICAgIHByb3RvY29sIG9iamVjdCBhbmQgY3JlYXRlcyBhIHNpbXBsZSBpbnRlcmZhY2UgZm9y
IGFza2luZyBwcm90b2NvbCBvYmplY3RzIAorICAgICAgICBhYm91dCB0aGVpciB0eXBlLgorCisg
ICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5faW5z
ZXJ0VHlwZVRva2Vuc0ZvckVhY2hOb2RlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4u
aHRtbDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9UeXBlU2V0LmpzOiBBZGRlZC4K
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlU2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
eXBlU2V0LmZyb21QYXlsb2FkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlU2V0LnByb3Rv
dHlwZS5pc0NvbnRhaW5lZEluKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlU2V0LnByb3Rv
dHlwZS5oYXNTZWVuVHlwZXNPdGhlclRoYW4pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90eXBlLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdo
dGVkSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbi5oYW5kbGVyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Rva2VuVHJhY2tpbmdDb250cm9s
bGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLm9ucG9wdWxhdGUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnBv
cHVsYXRlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5wcm90b3R5cGUudXBkYXRlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZS5fc2hvdWxkU2hv
d1BvcG92ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBl
Ll9kaXNwbGF5VHlwZU5hbWUpOgorCiAyMDE0LTA5LTEwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRml4IEVTTGludCBjb25z
aXN0ZW50LXJldHVybiB3YXJuaW5ncwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uaHRtbAkocmV2aXNpb24gMTczNDY3KQorKysgU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEs
NiArMjcxLDcgQEAKICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RleHRSYW5nZS5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZU1hcmtlci5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZVJlY29yZGluZy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9UeXBlU2V0LmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHNyYz0iTW9kZWxzL1VuaXRCZXppZXIuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBz
cmM9IlZpZXdzL0NvbnNvbGVNZXNzYWdlLmpzIj48L3NjcmlwdD4KSW5kZXg6IFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHJldmlzaW9uIDE3MzQ2NykKKysrIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90
YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTUwLDIzICsxNTAsMjQgQEAgV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cAogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNz
aW9uOgogICAgICAgICAgICAgZm9yICh2YXIgcGFyYW0gb2Ygbm9kZS5wYXJhbXMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXBhcmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIHBhcmFtLmF0
dGFjaG1lbnRzLnR5cGVzICYmIHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzLmRpc3BsYXlUeXBlTmFt
ZSkKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYm
IHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzICYmIHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzLmlzVmFs
aWQpCiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydFRva2VuKHBhcmFtLnJhbmdlWzBd
LCBwYXJhbSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJp
YWJsZSwgcGFyYW0ubmFtZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIElmIGEg
ZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdCByZXR1cm4gdHlwZSwgdGhlbiBkb24n
dCBzaG93IGEgcmV0dXJuIHR5cGUgdW5sZXNzIHdlIHRoaW5rIGl0J3MgYSBjb25zdHJ1Y3Rvci4K
ICAgICAgICAgICAgIHZhciBmdW5jdGlvblJldHVyblR5cGUgPSBub2RlLmF0dGFjaG1lbnRzLnJl
dHVyblR5cGVzOwotICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4g
fHwgIWZ1bmN0aW9uUmV0dXJuVHlwZSB8fCAhZnVuY3Rpb25SZXR1cm5UeXBlLmRpc3BsYXlUeXBl
TmFtZSkKKyAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuIHx8ICFm
dW5jdGlvblJldHVyblR5cGUgfHwgIWZ1bmN0aW9uUmV0dXJuVHlwZS5pc1ZhbGlkKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBpZiAoc2NyaXB0U3ludGF4VHJlZS5jb250
YWluc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50KG5vZGUuYm9keSkgfHwgZnVuY3Rpb25SZXR1cm5U
eXBlLmRpc3BsYXlUeXBlTmFtZSAhPT0gIlVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgIGlmIChz
Y3JpcHRTeW50YXhUcmVlLmNvbnRhaW5zTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQobm9kZS5ib2R5
KSAKKyAgICAgICAgICAgICAgICB8fCAoV2ViSW5zcGVjdG9yLlR5cGVTZXQuZnJvbVBheWxvYWQo
ZnVuY3Rpb25SZXR1cm5UeXBlKSkuaGFzU2VlblR5cGVzT3RoZXJUaGFuKFdlYkluc3BlY3Rvci5U
eXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkgewogICAgICAgICAgICAgICAgIHZhciBmdW5jdGlv
bk5hbWUgPSBub2RlLmlkID8gbm9kZS5pZC5uYW1lIDogbnVsbDsKICAgICAgICAgICAgICAgICB0
aGlzLl9pbnNlcnRUb2tlbihub2RlLmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdldHRlck9yU2V0
dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdLCBub2RlLAogICAgICAgICAgICAgICAgICAgICB0
cnVlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVtZW50
LCBmdW5jdGlvbk5hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVE
ZWNsYXJhdG9yOgotICAgICAgICAgICAgaWYgKCFub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2Vu
ICYmIG5vZGUuYXR0YWNobWVudHMudHlwZXMgJiYgbm9kZS5hdHRhY2htZW50cy50eXBlcy5kaXNw
bGF5VHlwZU5hbWUpCisgICAgICAgICAgICBpZiAoIW5vZGUuYXR0YWNobWVudHMuX190eXBlVG9r
ZW4gJiYgbm9kZS5hdHRhY2htZW50cy50eXBlcyAmJiBub2RlLmF0dGFjaG1lbnRzLnR5cGVzLmlz
VmFsaWQpCiAgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VG9rZW4obm9kZS5pZC5yYW5nZVsw
XSwgbm9kZSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJp
YWJsZSwgbm9kZS5pZC5uYW1lKTsKIAogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvVHlwZVNldC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvVHlwZVNldC5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9UeXBlU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCitXZWJJbnNwZWN0b3IuVHlwZVNldCA9IGZ1bmN0aW9uKHJ1bnRpbWVUeXBlRGVzY3JpcHRp
b25QYXlsb2FkKQoreworICAgIHRoaXMuX3R5cGVzID0gcnVudGltZVR5cGVEZXNjcmlwdGlvblBh
eWxvYWQ7CisKKyAgICB2YXIgdHlwZVNldEJvb2xlYW5zID0gdGhpcy5fdHlwZXMudHlwZVNldEJv
b2xlYW5zOworICAgIHZhciBiaXRTdHJpbmcgPSAweDA7CisgICAgaWYgKHR5cGVTZXRCb29sZWFu
cy5pc0Z1bmN0aW9uKQorICAgICAgICBiaXRTdHJpbmcgfD0gV2ViSW5zcGVjdG9yLlR5cGVTZXQu
VHlwZUJpdC5GdW5jdGlvbjsKKyAgICBpZiAodHlwZVNldEJvb2xlYW5zLmlzVW5kZWZpbmVkKQor
ICAgICAgICBiaXRTdHJpbmcgfD0gV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5VbmRlZmlu
ZWQ7CisgICAgaWYgKHR5cGVTZXRCb29sZWFucy5pc051bGwpCisgICAgICAgIGJpdFN0cmluZyB8
PSBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0Lk51bGw7CisgICAgaWYgKHR5cGVTZXRCb29s
ZWFucy5pc0Jvb2xlYW4pCisgICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlwZVNl
dC5UeXBlQml0LkJvb2xlYW47CisgICAgaWYgKHR5cGVTZXRCb29sZWFucy5pc0ludGVnZXIpCisg
ICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LkludGVnZXI7
CisgICAgaWYgKHR5cGVTZXRCb29sZWFucy5pc051bWJlcikKKyAgICAgICAgYml0U3RyaW5nIHw9
IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuTnVtYmVyOworICAgIGlmICh0eXBlU2V0Qm9v
bGVhbnMuaXNTdHJpbmcpCisgICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlwZVNl
dC5UeXBlQml0LlN0cmluZzsKKyAgICBpZiAodHlwZVNldEJvb2xlYW5zLmlzT2JqZWN0KQorICAg
ICAgICBiaXRTdHJpbmcgfD0gV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5PYmplY3Q7CisK
KyAgICB0aGlzLl9iaXRTdHJpbmcgPSBiaXRTdHJpbmc7Cit9OworCitXZWJJbnNwZWN0b3IuVHlw
ZVNldC5mcm9tUGF5bG9hZCA9IGZ1bmN0aW9uKHBheWxvYWQpCit7CisgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuVHlwZVNldChwYXlsb2FkKTsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlU2V0
LlR5cGVCaXQgPSB7CisgICAgIkZ1bmN0aW9uIiAgICA6ICAweDEsCisgICAgIlVuZGVmaW5lZCIg
ICA6ICAweDIsCisgICAgIk51bGwiICAgICAgICA6ICAweDQsCisgICAgIkJvb2xlYW4iICAgICA6
ICAweDgsCisgICAgIkludGVnZXIiICAgICA6ICAweDEwLAorICAgICJOdW1iZXIiICAgICAgOiAg
MHgyMCwKKyAgICAiU3RyaW5nIiAgICAgIDogIDB4NDAsCisgICAgIk9iamVjdCIgICAgICA6ICAw
eDgwCit9OworCitXZWJJbnNwZWN0b3IuVHlwZVNldC5wcm90b3R5cGUgPSB7CisgICAgY29uc3Ry
dWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlU2V0LAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9y
Lk9iamVjdC5wcm90b3R5cGUsCisKKyAgICBpc0NvbnRhaW5lZEluOiBmdW5jdGlvbih0ZXN0KQor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdHlwZXMgaW4gYml0U3Ry
aW5nIGlzIGNvbnRhaW5lZCBpbiB0aGUgdHlwZXMgZGVzY3JpYmVkIGJ5IHRoZSAndGVzdCcgYml0
c3RyaW5nLiAoaS5lIHdlIGhhdmVuJ3Qgc2VlbiBtb3JlIHR5cGVzIHRoYW4gJ3Rlc3QnKS4KKyAg
ICAgICAgLy8gV2UgaGF2ZSBzZWVuIGZld2VyIG9yIGVxdWFsIG51bWJlciBvZiB0eXBlcyBhcyAn
dGVzdCcgaWYgQU5EaW5nIGJpdFN0cmluZyB3aXRoIHRlc3QgZG9lc24ndCB6ZXJvIG91dCBhbnkg
b2Ygb3VyIGJpdHMuCisKKyAgICAgICAgLy8gRm9yIGV4YW1wbGU6CisKKyAgICAgICAgLy8gMGIw
MTEwIChiaXRTdHJpbmcpCisgICAgICAgIC8vIDBiMTExMSAodGVzdCkKKyAgICAgICAgLy8gLS0t
LS0tIChBTkQpCisgICAgICAgIC8vIDBiMDExMCA9PSBiaXRTdHJpbmcKKworICAgICAgICAvLyAw
YjAxMTAgKGJpdFN0cmluZykKKyAgICAgICAgLy8gMGIwMDEwICh0ZXN0KQorICAgICAgICAvLyAt
LS0tLS0gKEFORCkKKyAgICAgICAgLy8gMGIwMDEwICE9IGJpdFN0cmluZworCisgICAgICAgIHJl
dHVybiAodGhpcy5fYml0U3RyaW5nICYgdGVzdCkgPT09IHRoaXMuX2JpdFN0cmluZzsKKyAgICB9
LAorCisgICAgaGFzU2VlblR5cGVzT3RoZXJUaGFuOiBmdW5jdGlvbih0ZXN0KQorICAgIHsKKyAg
ICAgICAgLy8gV2UncmUgaW50ZXJlc3RlZCBpZiBBTkRpbmcgd2l0aCB0aGUgaW52ZXJzZSBvZiB0
ZXN0IGxlYXZlcyBhdCBsZWFzdCBvbmUgb2Ygb3VyIGJpdHMgYWxpdmUuCisgICAgICAgIC8vIFRo
aXMgbWVhbnMgdGhhdCB3ZSBoYWQgYXQgbGVhc3Qgb25lIG90aGVyIGJpdCB0aGFuIHRob3NlIHJl
cHJlc2VudGVkIGluIHRlc3QgYXMgYmVpbmcgdHVybmVkIG9uLgorCisgICAgICAgIHJldHVybiAo
KH50ZXN0KSAmIHRoaXMuX2JpdFN0cmluZykgPiAweDA7CisgICAgfQorfTsKSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9y
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzM0NjcpCisrKyBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTI0MCw3ICsxMjQwLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAgICAgaWYgKCFhbGxUeXBlcy5sZW5ndGgp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgdmFyIHR5cGVzID0gYWxsVHlw
ZXNbMF07Ci0gICAgICAgICAgICBpZiAodHlwZXMuZGlzcGxheVR5cGVOYW1lKSB7CisgICAgICAg
ICAgICBpZiAodHlwZXMuaXNWYWxpZCkgewogICAgICAgICAgICAgICAgIHZhciBwb3BvdmVyVGl0
bGUgPSBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy50aXRsZUZvclBvcG92ZXIoV2ViSW5zcGVj
dG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlLCBjYW5kaWRhdGUuZXhwcmVzc2lv
bik7CiAgICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wb3ZlckZvclR5cGVzKHR5cGVzLCBudWxs
LCBwb3BvdmVyVGl0bGUpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVQcm9w
ZXJ0aWVzU2VjdGlvbi5qcwkocmV2aXNpb24gMTczNDY3KQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw2ICs1NiwxMCBAQCBXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0
aW9uLnByb3RvCiAgICAgICAgIH0KIAogICAgICAgICBwcm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVj
dG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IpOworCisgICAgICAg
IGlmICh0aGlzLnR5cGVzLmlzT3ZlcmZsb3duKQorICAgICAgICAgICAgcHJvcGVydGllcy5wdXNo
KHtuYW1lOiAiLi4uIiwgc3RydWN0dXJlOiBudWxsfSk7CisKICAgICAgICAgZm9yICh2YXIgcHJv
cGVydHkgb2YgcHJvcGVydGllcykKICAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRs
aW5lLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQo
cHJvcGVydHkpKTsKIApAQCAtMTUyLDYgKzE1NiwyMiBAQCBXZWJJbnNwZWN0b3IuVHlwZVByb3Bl
cnR5VHJlZUVsZW1lbnQucHJvCiAKICAgICAgICAgcHJvcGVydGllcy5zb3J0KFdlYkluc3BlY3Rv
ci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlDb21wYXJhdG9yKTsKIAorICAgICAgICBm
b3IgKHZhciBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgdGhpcy5hcHBlbmRD
aGlsZChuZXcgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3BlcnR5KSk7
CisKKyAgICAgICAgcHJvcGVydGllcyA9IFtdOworICAgICAgICBmb3IgKHZhciBmaWVsZE5hbWUg
b2YgdGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUub3B0aW9uYWxGaWVsZHMpIHsKKyAgICAgICAgICAg
IHByb3BlcnRpZXMucHVzaCh7CisgICAgICAgICAgICAgICAgbmFtZTogZmllbGROYW1lICsgIj8i
LAorICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogbnVsbAorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKworICAgICAgICBwcm9wZXJ0aWVzLnNvcnQoV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0
aWVzU2VjdGlvbi5Qcm9wZXJ0eUNvbXBhcmF0b3IpOworCisgICAgICAgIGlmICh0aGlzLnByb3Bl
cnR5LnN0cnVjdHVyZS5pc0luRGljdGlvbmFyeU1vZGUpCisgICAgICAgICAgICBwcm9wZXJ0aWVz
LnB1c2goe25hbWU6ICIuLi4iLCBzdHJ1Y3R1cmU6IG51bGx9KTsKKwogICAgICAgICBpZiAodGhp
cy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJvdG90eXBlU3RydWN0dXJlKSB7CiAgICAgICAgICAgICBw
cm9wZXJ0aWVzLnB1c2goewogICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMucHJvcGVydHkuc3Ry
dWN0dXJlLnByb3RvdHlwZVN0cnVjdHVyZS5jb25zdHJ1Y3Rvck5hbWUgKyAiICgiICsgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJQcm90b3R5cGUiKSArICIpIiwKSW5kZXg6IFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmll
dy5qcwkocmV2aXNpb24gMTczNDY3KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYs
NiBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUgPSB7CiAgICAgUmV0dXJu
U3RhdGVtZW50OiAidGl0bGUtdHlwZS1yZXR1cm4tc3RhdGVtZW50IgogfTsKIAotLy8gVGhlc2Ug
dHlwZSBzdHJpbmdzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0eXBlIGluZm9ybWF0aW9u
IGluIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKIFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5WaWV3LkNvbG9yQ2xhc3NGb3JUeXBlID0gewogICAgICJTdHJpbmciOiAidHlwZS10b2tl
bi1zdHJpbmciLAogICAgICJGdW5jdGlvbiI6ICJ0eXBlLXRva2VuLWZ1bmN0aW9uIiwKQEAgLTg5
LDkgKzg4LDEwIEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZSA9IHsKIAog
ICAgIHVwZGF0ZTogZnVuY3Rpb24odHlwZXMpCiAgICAgewotICAgICAgICB2YXIgdGl0bGUgPSB0
eXBlcy5kaXNwbGF5VHlwZU5hbWU7Ci0gICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9
IHRpdGxlOwogICAgICAgICB0aGlzLl90eXBlcyA9IHR5cGVzOworCisgICAgICAgIHZhciB0aXRs
ZSA9IHRoaXMuX2Rpc3BsYXlUeXBlTmFtZSgpOworICAgICAgICB0aGlzLmVsZW1lbnQudGV4dENv
bnRlbnQgPSB0aXRsZTsKICAgICAgICAgdmFyIGhhc2hTdHJpbmcgPSB0aXRsZVt0aXRsZS5sZW5n
dGggLSAxXSA9PT0gIj8iID8gdGl0bGUuc2xpY2UoMCwgdGl0bGUubGVuZ3RoIC0gMSkgOiB0aXRs
ZTsKIAogICAgICAgICBpZiAodGhpcy5fY29sb3JDbGFzcykKQEAgLTEzNiw1ICsxMzYsNTcgQEAg
V2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICBfZGlzcGxh
eVR5cGVOYW1lOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHR5cGVTZXQgPSBXZWJJbnNwZWN0
b3IuVHlwZVNldC5mcm9tUGF5bG9hZCh0aGlzLl90eXBlcyk7CisKKyAgICAgICAgaWYgKHRoaXMu
X3R5cGVzLmxlYXN0Q29tbW9uQW5jZXN0b3IpIHsKKyAgICAgICAgICAgIGlmICh0eXBlU2V0Lmlz
Q29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5PYmplY3QpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl90eXBlcy5sZWFzdENvbW1vbkFuY2VzdG9yOworICAgICAg
ICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBl
Qml0Lk9iamVjdCB8IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuTnVsbCB8IFdlYkluc3Bl
Y3Rvci5UeXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5fdHlwZXMubGVhc3RDb21tb25BbmNlc3RvciArICI/IjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFRoZSBvcmRlciBvZiB0aGVzZSBjaGVja3MgYXJlIGltcG9ydGFudC4gCisgICAgICAg
IC8vIEZvciBleGFtcGxlLCBpZiBhIHZhbHVlIGlzIG9ubHkgYSBmdW5jdGlvbiwgaXQgY29uZm9y
bXMgdG8gVHlwZUZ1bmN0aW9uLCBidXQgaXQgYWxzbyBjb25mb3JtcyB0byBUeXBlRnVuY3Rpb24g
fCBUeXBlTnVsbC4KKyAgICAgICAgLy8gVGhlcmVmb3JlLCBtb3JlIHNwZWNpZmljIHR5cGVzIG11
c3QgYmUgY2hlY2tlZCBmaXJzdC4KKworICAgICAgICAvLyBUaGUgc3RyaW5ncyByZXR1cm5lZCBo
ZXJlIHNob3VsZCBtYXRjaCB0aG9zZSBpbiBUeXBlVG9rZW5WaWV3LkNvbG9yQ2xhc3NGb3JUeXBl
CisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQu
VHlwZUJpdC5GdW5jdGlvbikpCisgICAgICAgICAgICByZXR1cm4gIkZ1bmN0aW9uIjsKKyAgICAg
ICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0
LlVuZGVmaW5lZCkpCisgICAgICAgICAgICByZXR1cm4gIlVuZGVmaW5lZCI7CisgICAgICAgIGlm
ICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5OdWxs
KSkKKyAgICAgICAgICAgIHJldHVybiAiTnVsbCI7CisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29u
dGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5Cb29sZWFuKSkKKyAgICAgICAg
ICAgIHJldHVybiAiQm9vbGVhbiI7CisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4o
V2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5JbnRlZ2VyKSkKKyAgICAgICAgICAgIHJldHVy
biAiSW50ZWdlciI7CisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVj
dG9yLlR5cGVTZXQuVHlwZUJpdC5OdW1iZXIgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0
LkludGVnZXIpKQorICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiOworICAgICAgICBpZiAodHlw
ZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuU3RyaW5nKSkK
KyAgICAgICAgICAgIHJldHVybiAiU3RyaW5nIjsKKworICAgICAgICBpZiAodHlwZVNldC5pc0Nv
bnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuTnVsbCB8IFdlYkluc3BlY3Rv
ci5UeXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkKKyAgICAgICAgICAgIHJldHVybiAiKD8pIjsK
KworICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0
LlR5cGVCaXQuRnVuY3Rpb24gfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0Lk51bGwgfCBX
ZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlVuZGVmaW5lZCkpCisgICAgICAgICAgICByZXR1
cm4gIkZ1bmN0aW9uPyI7CisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5z
cGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5Cb29sZWFuIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlw
ZUJpdC5OdWxsIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5VbmRlZmluZWQpKQorICAg
ICAgICAgICAgcmV0dXJuICJCb29sZWFuPyI7CisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFp
bmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5JbnRlZ2VyIHwgV2ViSW5zcGVjdG9y
LlR5cGVTZXQuVHlwZUJpdC5OdWxsIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5VbmRl
ZmluZWQpKQorICAgICAgICAgICAgcmV0dXJuICJJbnRlZ2VyPyI7CisgICAgICAgIGlmICh0eXBl
U2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5OdW1iZXIgfCBX
ZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LkludGVnZXIgfCBXZWJJbnNwZWN0b3IuVHlwZVNl
dC5UeXBlQml0Lk51bGwgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlVuZGVmaW5lZCkp
CisgICAgICAgICAgICByZXR1cm4gIk51bWJlcj8iOworICAgICAgICBpZiAodHlwZVNldC5pc0Nv
bnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuU3RyaW5nIHwgV2ViSW5zcGVj
dG9yLlR5cGVTZXQuVHlwZUJpdC5OdWxsIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5V
bmRlZmluZWQpKQorICAgICAgICAgICAgcmV0dXJuICJTdHJpbmc/IjsKKyAgICAgICAKKyAgICAg
ICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0
Lk9iamVjdCB8IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuRnVuY3Rpb24gfCBXZWJJbnNw
ZWN0b3IuVHlwZVNldC5UeXBlQml0LlN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gIk9iamVj
dCI7CisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVT
ZXQuVHlwZUJpdC5PYmplY3QgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LkZ1bmN0aW9u
IHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5TdHJpbmcgfCBXZWJJbnNwZWN0b3IuVHlw
ZVNldC5UeXBlQml0Lk51bGwgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlVuZGVmaW5l
ZCkpCisgICAgICAgICAgICByZXR1cm4gIk9iamVjdD8iOworCisgICAgICAgIHJldHVybiAiKG1h
bnkpIjsKICAgICB9CiB9Owo=
</data>
<flag name="review"
          id="262660"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237922</attachid>
            <date>2014-09-10 17:25:10 -0700</date>
            <delta_ts>2014-09-10 17:49:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>32629</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDE0LTA5LTEwICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBNb2RpZnkgdGhlIHR5cGUgcHJvZmlsZXIgcnVudGltZSBwcm90
b2NvbCB0byB0cmFuc2ZlciBzb21lIGNvbXB1dGF0aW9uIGludG8gdGhlIFdlYkluc3BlY3Rvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NTAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBjaGFuZ2VzIHRoZSB0eXBlIHByb2ZpbGVyIHByb3RvY29sIHRvIHRoZSBXZWIgSW5zcGVjdG9y
CisgICAgICAgIGJ5IG1vdmluZyB0aGUgd29yayBvZiBjYWxjdWxhdGluZyBjb21wdXRlZCBwcm9w
ZXJ0aWVzIHRoYXQgZWZmZWN0IHRoZSBVSSAKKyAgICAgICAgaW50byB0aGUgV2ViIEluc3BlY3Rv
ci4gVGhpcyBtYWtlcyB0aGUgV2ViIEluc3BlY3RvciBoYXZlIGNvbnRyb2wgb3ZlciB0aGUgCisg
ICAgICAgIHN0cmluZ3MgaXQgZGlzcGxheXMgYXMgVUkgZWxlbWVudHMgcmVwcmVzZW50aW5nIHR5
cGUgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgCisgICAgICAgIGluc3RlYWQgb2YgSmF2YVNjcmlw
dENvcmUgZGVjaWRpbmcgb24gYSBjb252ZW50aW9uIGZvciB0aGVzZSBzdHJpbmdzLgorICAgICAg
ICBKYXZhU2NyaXB0Q29yZSBub3cgc2VuZHMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHRoZSBXZWIg
SW5zcGVjdG9yIHNvIHRoYXQgCisgICAgICAgIGl0IGNhbiBjb21wdXRlIHRoZSBwcm9wZXJ0aWVz
IEphdmFTY3JpcHRDb3JlIHVzZWQgdG8gY29tcHV0ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMp
OgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb246CisgICAgICAgICog
cnVudGltZS9UeXBlUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXI6Omdl
dFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3Rvcik6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9UeXBlUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3Bw
OgorICAgICAgICAoSlNDOjpUeXBlU2V0OjppbnNwZWN0b3JUeXBlU2V0KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU2hhcGU6OmxlYXN0Q29tbW9uQW5jZXN0b3IpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHJ1bnRp
bWUvVHlwZVNldC5oOgorCiAyMDE0LTA5LTEwICBBa29zIEtpc3MgIDxha2lzc0BpbmYudS1zemVn
ZWQuaHU+CiAKICAgICAgICAgQXBwbHkgQVJNNjQtc3BlY2lmaWMgbG93ZXJpbmcgdG8gbG9hZC9z
dG9yZSBpbnN0cnVjdGlvbnMgaW4gb2ZmbGluZWFzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwCShyZXZpc2lvbiAxNzM0NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjUsMTAgKzIyNSwyNSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVu
dGltZVR5CiAgICAgICAgIGxvY2F0aW9uLT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzb3VyY2VJ
RCIpLCAmc291cmNlSURBc1N0cmluZyk7CiAgICAgICAgIGxvY2F0aW9uLT5nZXROdW1iZXIoQVND
SUlMaXRlcmFsKCJkaXZvdCIpLCAmZGl2b3QpOwogCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+IHR5cGVEZXNjcmlwdGlvbiA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbjo6Y3JlYXRlKCk7CiAg
ICAgICAgIGJvb2wgb2theTsKLSAgICAgICAgdm0udHlwZVByb2ZpbGVyKCktPmdldFR5cGVzRm9y
VmFyaWFibGVBdE9mZnNldEZvckluc3BlY3RvcihzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFy
Y2hEZXNjcmlwdG9yPihkZXNjcmlwdG9yKSwgZGl2b3QsIHNvdXJjZUlEQXNTdHJpbmcudG9JbnRQ
dHJTdHJpY3QoJm9rYXkpLCB0eXBlRGVzY3JpcHRpb24pOwotICAgICAgICB0eXBlRGVzY3JpcHRp
b25zLT5hZGRJdGVtKHR5cGVEZXNjcmlwdGlvbik7CisgICAgICAgIFR5cGVMb2NhdGlvbiogdHlw
ZUxvY2F0aW9uID0gdm0udHlwZVByb2ZpbGVyKCktPmZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNl
SURBc1N0cmluZy50b0ludFB0clN0cmljdCgmb2theSksIHN0YXRpY19jYXN0PFR5cGVQcm9maWxl
clNlYXJjaERlc2NyaXB0b3I+KGRlc2NyaXB0b3IpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4gZGVzY3JpcHRpb24gPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb246OmNyZWF0ZSgpCisgICAg
ICAgICAgICAuc2V0SXNWYWxpZCghIXR5cGVMb2NhdGlvbik7CisgICAgICAgIGlmICh0eXBlTG9j
YXRpb24pIHsKKyAgICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiB0eXBlU2V0OworICAgICAgICAg
ICAgaWYgKHR5cGVMb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0ICYmIHR5cGVMb2NhdGlvbi0+bV9n
bG9iYWxWYXJpYWJsZUlEICE9IFR5cGVQcm9maWxlck5vR2xvYmFsSURFeGlzdHMpCisgICAgICAg
ICAgICAgICAgdHlwZVNldCA9IHR5cGVMb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0OworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHR5cGVTZXQgPSB0eXBlTG9jYXRpb24tPm1faW5z
dHJ1Y3Rpb25UeXBlU2V0OworCisgICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0TGVhc3RDb21t
b25BbmNlc3Rvcih0eXBlU2V0LT5sZWFzdENvbW1vbkFuY2VzdG9yKCkpOworICAgICAgICAgICAg
ZGVzY3JpcHRpb24tPnNldFByaW1pdGl2ZVR5cGVOYW1lcyh0eXBlU2V0LT5hbGxQcmltaXRpdmVU
eXBlTmFtZXMoKSk7CisgICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0U3RydWN0dXJlcyh0eXBl
U2V0LT5hbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSk7CisgICAgICAgICAgICBkZXNjcmlw
dGlvbi0+c2V0VHlwZVNldCh0eXBlU2V0LT5pbnNwZWN0b3JUeXBlU2V0KCkpOworICAgICAgICAg
ICAgZGVzY3JpcHRpb24tPnNldElzVHJ1bmNhdGVkKHR5cGVTZXQtPmlzT3ZlcmZsb3duKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgdHlwZURlc2NyaXB0aW9ucy0+YWRkSXRlbShkZXNjcmlwdGlv
bik7CiAgICAgfQogCiAgICAgZG91YmxlIGVuZCA9IGN1cnJlbnRUaW1lTVMoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGlt
ZS5qc29uCShyZXZpc2lvbiAxNzM0NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTE3LDggKzExNywy
NCBAQAogICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmllbGRzIiwgInR5cGUiOiAiYXJy
YXkiLCAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJBcnJheSBvZiBzdHJpbmdzLCB3aGVyZSB0aGUgc3RyaW5ncyByZXByZXNl
bnQgb2JqZWN0IHByb3BlcnRpZXMuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib3B0
aW9uYWxGaWVsZHMiLCAidHlwZSI6ICJhcnJheSIsICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmlu
ZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHN0cmluZ3Ms
IHdoZXJlIHRoZSBzdHJpbmdzIHJlcHJlc2VudCBvcHRpb25hbCBvYmplY3QgcHJvcGVydGllcy4i
IH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb25zdHJ1Y3Rvck5hbWUiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiTmFtZSBvZiB0aGUg
Y29uc3RydWN0b3IuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvdG90eXBlU3Ry
dWN0dXJlIiwgIiRyZWYiOiAiU3RydWN0dXJlRGVzY3JpcHRpb24iLCAib3B0aW9uYWwiOiB0cnVl
LCAiZGVzY3JpcHRpb24iOiAiUG9pbnRlciB0byB0aGUgU3RydWN0dXJlUmVwcmVzZW50YXRpb24g
b2YgdGhlIHByb3RveXBlIGlmIG9uZSBleGlzdHMuIiB9CisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcm90b3R5cGVTdHJ1Y3R1cmUiLCAiJHJlZiI6ICJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIs
ICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJQb2ludGVyIHRvIHRoZSBTdHJ1Y3R1
cmVSZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvdG95cGUgaWYgb25lIGV4aXN0cy4iIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJpc0ltcHJlY2lzZSIsICJ0eXBlIjogImJvb2xlYW4iLCAi
b3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWYgdHJ1ZSwgaXQgaW5kaWNhdGVzIHRo
YXQgdGhlIGZpZWxkcyBpbiB0aGlzIFN0cnVjdHVyZURlc2NyaXB0aW9uIG1heSBiZSBpbmFjY3Vy
YXRlLiBJLmUsIHRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBmaWVsZHMgdGhhdCBoYXZlIGJlZW4gZGVs
ZXRlZCBiZWZvcmUgaXQgd2FzIHByb2ZpbGVkIG9yIGl0IGhhcyBmaWVsZHMgd2UgaGF2ZW4ndCBw
cm9maWxlZC4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlR5cGVTZXQiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNG
dW5jdGlvbiIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNhdGVzIGlm
IHRoaXMgdHlwZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIEZ1bmN0aW9uLiIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImlzVW5kZWZpbmVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJk
ZXNjcmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVu
IHR5cGUgVW5kZWZpbmVkLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzTnVsbCIs
ICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiSW5kaWNhdGVzIGlmIHRoaXMgdHlw
ZSBkZXNjcmlwdGlvbiBoYXMgYmVlbiB0eXBlIE51bGwuIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiaXNCb29sZWFuIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJJ
bmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5cGUgQm9vbGVhbi4i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc0ludGVnZXIiLCAidHlwZSI6ICJib29s
ZWFuIiwgImRlc2NyaXB0aW9uIjogIkluZGljYXRlcyBpZiB0aGlzIHR5cGUgZGVzY3JpcHRpb24g
aGFzIGJlZW4gdHlwZSBJbnRlZ2VyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlz
TnVtYmVyIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYg
dGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5cGUgTnVtYmVyLiIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImlzU3RyaW5nIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlw
dGlvbiI6ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHR5cGUg
U3RyaW5nLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzT2JqZWN0IiwgInR5cGUi
OiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJJbmRpY2F0ZXMgaWYgdGhpcyB0eXBlIGRlc2Ny
aXB0aW9uIGhhcyBiZWVuIHR5cGUgT2JqZWN0LiIgfQogICAgICAgICAgICAgXQogICAgICAgICB9
LAogICAgICAgICB7CkBAIC0xMjYsMTMgKzE0MiwxMiBAQAogICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb250YWluZXIgZm9yIHR5cGUg
aW5mb3JtYXRpb24gdGhhdCBoYXMgYmVlbiBnYXRoZXJlZC4iLAogICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXNwbGF5VHlwZU5hbWUiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hhdCB0
aGUgaW5zcGVjdG9yIHNob3VsZCBkaXNwbGF5IGFzIGEgc2ltcGxlIHR5cGUuIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibG9jYWxQcmltaXRpdmVUeXBlTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAi
ZGVzY3JpcHRpb24iOiAiQXJyYXkgb2YgdHlwZSBuYW1lcyBmb3IgcHJpbXRpdmUgdHlwZXMgKGlu
dCwgc3RyaW5nLCBldGMpIHNlZW4gYXQgYW4gaW5zdHJ1Y3Rpb24iIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJsb2NhbE9iamVjdFR5cGVOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0
ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlv
biI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgb2JqZWN0IHNlZW4gYXQgYW4gaW5zdHJ1
Y3Rpb24iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhbFN0cnVjdHVyZXMiLCAi
dHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU3RydWN0dXJlRGVzY3JpcHRpb24i
IH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiBkZXNjcmlwdGlv
bnMgZm9yIGFsbCBzdHJ1Y3R1cmVzIHNlZW4gYXQgdGhpcyB0aGlzIGluc3RydWN0aW9uLiIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcyIsICJ0
eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgcHJpbWl0
aXZlIHR5cGVzIHNlZW4gZ2xvYmFsbHkuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Z2xvYmFsT2JqZWN0VHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9m
IHR5cGUgbmFtZXMgZm9yIGFsbCBwcmltaXRpdmUgdHlwZXMgc2VlbiBnbG9iYWxseS4iIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJnbG9iYWxTdHJ1Y3R1cmVzIiwgInR5cGUiOiAiYXJy
YXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlN0cnVjdHVyZURlc2NyaXB0aW9uIiB9LCAib3B0aW9u
YWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQXJyYXkgb2YgZGVzY3JpcHRpb25zIGZvciBhbGwg
c3RydWN0dXJlcyBzZWVuIGZvciB0aGlzIHZhcmlhYmxlLiIgfQorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiaXNWYWxpZCIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiSWYg
dHJ1ZSwgd2Ugd2VyZSBhYmxlIHRvIGNvcnJlbGF0ZSB0aGUgb2Zmc2V0IHN1Y2Nlc3NmdWx5IHdp
dGggYSBwcm9ncmFtIGxvY2F0aW9uLiBJZiBmYWxzZSwgdGhlIG9mZnNldCBtYXkgYmUgYm9ndXMg
b3IgdGhlIG9mZnNldCBtYXkgYmUgZnJvbSBhIENvZGVCbG9jayB0aGF0IGhhc24ndCBleGVjdXRl
ZC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsZWFzdENvbW1vbkFuY2VzdG9yIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkxlYXN0
IGNvbW1vbiBhbmNlc3RvciBvZiBhbGwgQ29uc3RydWN0b3JzIGlmIHRoZSBUeXBlRGVzY3JpcHRp
b24gaGFzIHNlZW4gYW55IHN0cnVjdHVyZXMuIFRoaXMgc3RyaW5nIGlzIHRoZSBkaXNwbGF5IG5h
bWUgb2YgdGhlIHNoYXJlZCBjb25zdHJ1Y3RvciBmdW5jdGlvbi4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ0eXBlU2V0IiwgIiRyZWYiOiAiVHlwZVNldCIsICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJTZXQgb2YgYm9vbGVhbnMgZm9yIGRldGVybWluaW5nIHRoZSBh
Z2dyZWdhdGUgdHlwZSBvZiB0aGlzIHR5cGUgZGVzY3JpcHRpb24uIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicHJpbWl0aXZlVHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIkFycmF5IG9mIHR5cGUgbmFtZXMgZm9yIHByaW10aXZlIHR5cGVzIChpbnQsIHN0cmluZywg
ZXRjKSBzZWVuIGF0IGFuIGluc3RydWN0aW9uIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3RydWN0dXJlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJTdHJ1
Y3R1cmVEZXNjcmlwdGlvbiIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFy
cmF5IG9mIGRlc2NyaXB0aW9ucyBmb3IgYWxsIHN0cnVjdHVyZXMgc2VlbiBmb3IgdGhpcyB2YXJp
YWJsZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc1RydW5jYXRlZCIsICJ0eXBl
IjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWYgdHJ1ZSwg
dGhpcyBpbmRpY2F0ZXMgdGhhdCBubyBtb3JlIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHByb2ZpbGVk
IGJlY2F1c2Ugc29tZSBtYXhpbXVtIHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVkIGFuZCBwcm9m
aWxpbmcgaGFzIHN0b3BwZWQgYmVjYXVzZSBvZiBtZW1vcnkgcHJlc3N1cmUuIiB9CiAgICAgICAg
ICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTczNDY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjUsMjMgKzY1LDYgQEAgdm9pZCBUeXBlUHJvZmlsZXI6Omluc2VydE5ld0xvY2F0aW9u
KFR5cAogICAgIGJ1Y2tldC5hcHBlbmQobG9jYXRpb24pOwogfQogCi12b2lkIFR5cGVQcm9maWxl
cjo6Z2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0Rm9ySW5zcGVjdG9yKFR5cGVQcm9maWxlclNl
YXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciwgdW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJj
ZUlELCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9u
PiYgZGVzY3JpcHRpb24pCi17Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGZpbmRMb2Nh
dGlvbihkaXZvdCwgc291cmNlSUQsIGRlc2NyaXB0b3IpOwotICAgIGlmICghbG9jYXRpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0ICYmIGxv
Y2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gVHlwZVByb2ZpbGVyTm9HbG9iYWxJREV4aXN0
cykgewotICAgICAgICBkZXNjcmlwdGlvbi0+c2V0RGlzcGxheVR5cGVOYW1lKGxvY2F0aW9uLT5t
X2dsb2JhbFR5cGVTZXQtPmRpc3BsYXlOYW1lKCkpOwotICAgICAgICBkZXNjcmlwdGlvbi0+c2V0
R2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmFsbFBy
aW1pdGl2ZVR5cGVOYW1lcygpKTsKLSAgICAgICAgZGVzY3JpcHRpb24tPnNldEdsb2JhbFN0cnVj
dHVyZXMobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWxsU3RydWN0dXJlUmVwcmVzZW50YXRp
b25zKCkpOwotICAgIH0gZWxzZQotICAgICAgICBkZXNjcmlwdGlvbi0+c2V0RGlzcGxheVR5cGVO
YW1lKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+ZGlzcGxheU5hbWUoKSk7Ci0KLSAg
ICBkZXNjcmlwdGlvbi0+c2V0TG9jYWxQcmltaXRpdmVUeXBlTmFtZXMobG9jYXRpb24tPm1faW5z
dHJ1Y3Rpb25UeXBlU2V0LT5hbGxQcmltaXRpdmVUeXBlTmFtZXMoKSk7Ci0gICAgZGVzY3JpcHRp
b24tPnNldExvY2FsU3RydWN0dXJlcyhsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmFs
bFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpKTsKLX0KLQogU3RyaW5nIFR5cGVQcm9maWxlcjo6
dHlwZUluZm9ybWF0aW9uRm9yRXhwcmVzc2lvbkF0T2Zmc2V0KFR5cGVQcm9maWxlclNlYXJjaERl
c2NyaXB0b3IgZGVzY3JpcHRvciwgdW5zaWduZWQgb2Zmc2V0LCBpbnRwdHJfdCBzb3VyY2VJRCkK
IHsKICAgICAvLyBUaGlzIHJldHVybnMgYSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgYW4gT2Jq
ZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmgJKHJldmlzaW9uIDE3MzQ2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NSwxNCArOTUsMTMgQEAgZW51bSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIHsK
IGNsYXNzIFR5cGVQcm9maWxlciB7CiBwdWJsaWM6CiAgICAgdm9pZCBsb2dUeXBlc0ZvclR5cGVM
b2NhdGlvbihUeXBlTG9jYXRpb24qKTsKLSAgICB2b2lkIGdldFR5cGVzRm9yVmFyaWFibGVBdE9m
ZnNldEZvckluc3BlY3RvcihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLCB1bnNpZ25lZCBk
aXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpUeXBlRGVzY3JpcHRpb24+Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHR5
cGVJbmZvcm1hdGlvbkZvckV4cHJlc3Npb25BdE9mZnNldChUeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yLCB1bnNpZ25lZCBvZmZzZXQsIGludHB0cl90IHNvdXJjZUlEKTsKICAgICB2b2lkIGlu
c2VydE5ld0xvY2F0aW9uKFR5cGVMb2NhdGlvbiopOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZSogZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCkgeyByZXR1cm4gJm1fZnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlOyB9CiAgICAgVHlwZUxvY2F0aW9uQ2FjaGUqIHR5cGVMb2NhdGlvbkNhY2hl
KCkgeyByZXR1cm4gJm1fdHlwZUxvY2F0aW9uQ2FjaGU7IH0KKyAgICBUeXBlTG9jYXRpb24qIGZp
bmRMb2NhdGlvbih1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFR5cGVQcm9maWxl
clNlYXJjaERlc2NyaXB0b3IpOwogICAgIAogcHJpdmF0ZToKLSAgICBUeXBlTG9jYXRpb24qIGZp
bmRMb2NhdGlvbih1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFR5cGVQcm9maWxl
clNlYXJjaERlc2NyaXB0b3IpOwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgVmVjdG9y
PFR5cGVMb2NhdGlvbio+PiBTb3VyY2VJRFRvTG9jYXRpb25CdWNrZXRNYXA7CiAgICAgU291cmNl
SURUb0xvY2F0aW9uQnVja2V0TWFwIG1fYnVja2V0TWFwOwogICAgIEZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCShyZXZpc2lvbiAxNzM0NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY1
LDYgKzI2NSwyMCBAQCBTdHJpbmcgVHlwZVNldDo6bGVhc3RDb21tb25BbmNlc3RvcigpIGNvCiAg
ICAgcmV0dXJuIFN0cnVjdHVyZVNoYXBlOjpsZWFzdENvbW1vbkFuY2VzdG9yKG1fc3RydWN0dXJl
SGlzdG9yeSk7CiB9CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHlwZVNldD4gVHlwZVNldDo6aW5zcGVjdG9yVHlwZVNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVTZXQ6OmNyZWF0ZSgpCisgICAgICAg
IC5zZXRJc0Z1bmN0aW9uKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVGdW5jdGlvbikpCisgICAgICAg
IC5zZXRJc1VuZGVmaW5lZChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlVW5kZWZpbmVkKSkKKyAgICAg
ICAgLnNldElzTnVsbChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlTnVsbCkpCisgICAgICAgIC5zZXRJ
c0Jvb2xlYW4oZG9lc1R5cGVDb25mb3JtVG8oVHlwZUJvb2xlYW4pKQorICAgICAgICAuc2V0SXNJ
bnRlZ2VyKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVNYWNoaW5lSW50KSkKKyAgICAgICAgLnNldElz
TnVtYmVyKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdW1iZXIpKQorICAgICAgICAuc2V0SXNTdHJp
bmcoZG9lc1R5cGVDb25mb3JtVG8oVHlwZVN0cmluZykpCisgICAgICAgIC5zZXRJc09iamVjdChk
b2VzVHlwZUNvbmZvcm1UbyhUeXBlT2JqZWN0KSkKKyAgICAgICAgLnJlbGVhc2UoKTsKK30KKwog
U3RyaW5nIFR5cGVTZXQ6OnRvSlNPTlN0cmluZygpIGNvbnN0CiB7CiAgICAgLy8gVGhpcyByZXR1
cm5zIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIE9iamVjdCB3aXRoIHRoZSBmb2xsb3dp
bmcgcHJvcGVydGllczoKQEAgLTM5Miw3ICs0MDYsNyBAQCBTdHJpbmcgU3RydWN0dXJlU2hhcGU6
OnByb3BlcnR5SGFzaCgpIAogU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpsZWFzdENvbW1vbkFuY2Vz
dG9yKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiBzaGFwZXMpCiB7CiAgICAg
aWYgKCFzaGFwZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwogCiAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBvcmlnaW4gPSBzaGFw
ZXMuYXQoMCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaGFwZXMuc2l6ZSgpOyBpKysp
IHsKQEAgLTUyNiwxMyArNTQwLDE2IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZToKIAogICAgIHdoaWxlIChjdXJyZW50U2hhcGUpIHsKICAgICAgICAgYXV0byBmaWVs
ZHMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAg
ICAgYXV0byBvcHRpb25hbEZpZWxkcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKGF1dG8gZmllbGQgOiBjdXJyZW50U2hhcGUtPm1f
ZmllbGRzKQogICAgICAgICAgICAgZmllbGRzLT5hZGRJdGVtKGZpZWxkLmdldCgpKTsKICAgICAg
ICAgZm9yIChhdXRvIGZpZWxkIDogY3VycmVudFNoYXBlLT5tX29wdGlvbmFsRmllbGRzKQotICAg
ICAgICAgICAgZmllbGRzLT5hZGRJdGVtKGZpZWxkLmdldCgpICsgU3RyaW5nKCI/IikpOworICAg
ICAgICAgICAgb3B0aW9uYWxGaWVsZHMtPmFkZEl0ZW0oZmllbGQuZ2V0KCkpOwogCiAgICAgICAg
IGN1cnJlbnRPYmplY3QtPnNldEZpZWxkcyhmaWVsZHMpOworICAgICAgICBjdXJyZW50T2JqZWN0
LT5zZXRPcHRpb25hbEZpZWxkcyhvcHRpb25hbEZpZWxkcyk7CiAgICAgICAgIGN1cnJlbnRPYmpl
Y3QtPnNldENvbnN0cnVjdG9yTmFtZShjdXJyZW50U2hhcGUtPm1fY29uc3RydWN0b3JOYW1lKTsK
KyAgICAgICAgY3VycmVudE9iamVjdC0+c2V0SXNJbXByZWNpc2UoY3VycmVudFNoYXBlLT5tX2lz
SW5EaWN0aW9uYXJ5TW9kZSk7CiAKICAgICAgICAgaWYgKGN1cnJlbnRTaGFwZS0+bV9wcm90bykg
ewogICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVj
dHVyZURlc2NyaXB0aW9uPiBuZXh0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6U3RydWN0dXJlRGVzY3JpcHRpb246OmNyZWF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkocmV2aXNpb24gMTczNDY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEFycmF5OwogCiBuYW1lc3BhY2UgUnVudGlt
ZSB7CiBjbGFzcyBTdHJ1Y3R1cmVEZXNjcmlwdGlvbjsKK2NsYXNzIFR5cGVTZXQ7CiB9CiAKIH0K
QEAgLTEwNSw5ICsxMDYsMTAgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVz
Y3JpcHRpb24+PiBhbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdDsKICAgICBTdHJp
bmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBpc092ZXJmbG93bigpIGNvbnN0IHsg
cmV0dXJuIG1faXNPdmVyZmxvd247IH0KKyAgICBTdHJpbmcgbGVhc3RDb21tb25BbmNlc3Rvcigp
IGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHlw
ZVNldD4gaW5zcGVjdG9yVHlwZVNldCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFN0cmluZyBs
ZWFzdENvbW1vbkFuY2VzdG9yKCkgY29uc3Q7CiAgICAgdm9pZCBkdW1wU2VlblR5cGVzKCk7CiAg
ICAgYm9vbCBkb2VzVHlwZUNvbmZvcm1Ubyh1aW50MzJfdCB0ZXN0KSBjb25zdDsKIApJbmRleDog
U291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzM0OTgpCisrKyBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTQt
MDktMTAgIFNhYW0gQmFyYXRpICA8c2FhbWJhcmF0aTFAZ21haWwuY29tPgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IE1vZGlmeSB0aGUgdHlwZSBwcm9maWxlciBydW50aW1lIHByb3RvY29sIHRv
IHRyYW5zZmVyIHNvbWUgY29tcHV0YXRpb24gaW50byB0aGUgV2ViSW5zcGVjdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY1MDAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1haW50
YWlucyB0aGUgc2FtZSBVSSBpbiB0aGUgV2ViIEluc3BlY3RvciBmb3IgZGlzcGxheWluZworICAg
ICAgICB0eXBlIGluZm9ybWF0aW9uLCBidXQgbm93IGFjY291bnRzIGZvciB0aGUgbmV3IHByb3Rv
Y29sIGZvciB0eXBlIHByb2ZpbGluZy4KKyAgICAgICAgCisgICAgICAgIFRoZSBJbnNwZWN0b3Ig
bm93IGhhcyBhIFR5cGVTZXQgY2xhc3MgdGhhdCB3cmFwcyB0aGUgVHlwZURlc2NyaXB0aW9uIAor
ICAgICAgICBwcm90b2NvbCBvYmplY3QgYW5kIGNyZWF0ZXMgYSBzaW1wbGUgaW50ZXJmYWNlIGZv
ciBhc2tpbmcgcHJvdG9jb2wgb2JqZWN0cyAKKyAgICAgICAgYWJvdXQgdGhlaXIgdHlwZS4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUuX2lu
c2VydFR5cGVUb2tlbnNGb3JFYWNoTm9kZSk6CisgICAgICAgICogVXNlckludGVyZmFjZS9NYWlu
Lmh0bWw6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvVHlwZVNldC5qczogQWRkZWQu
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VHlwZVNldC5mcm9tUGF5bG9hZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVNldC5wcm90
b3R5cGUuaXNDb250YWluZWRJbik6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5wcm90b3R5cGUuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZh
U2NyaXB0VHlwZUluZm9ybWF0aW9uLmhhbmRsZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdo
bGlnaHRlZEphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb24pOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvVmlld3MvVHlwZVByb3BlcnRpZXNTZWN0aW9uLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUub25wb3B1bGF0ZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVHlwZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLm9ucG9wdWxhdGUp
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlwZS51cGRhdGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcucHJvdG90eXBlLl9zaG91bGRTaG93UG9wb3Zl
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5wcm90b3R5cGUuX2Rpc3Bs
YXlUeXBlTmFtZSk6CisKIDIwMTQtMDktMTAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBFbGltaW5hdGUgdHlwZW9mICJ1bmRl
ZmluZWQiIGNoZWNrcwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TWFpbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01haW4uaHRtbAkocmV2aXNpb24gMTczNDY5KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDcg
QEAKICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RleHRSYW5nZS5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZU1hcmtlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9Ik1vZGVscy9UaW1lbGluZVJlY29yZGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ik1vZGVscy9UeXBlU2V0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
TW9kZWxzL1VuaXRCZXppZXIuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IlZpZXdz
L0NvbnNvbGVNZXNzYWdlLmpzIj48L3NjcmlwdD4KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9U
eXBlVG9rZW5Bbm5vdGF0b3IuanMJKHJldmlzaW9uIDE3MzQ2OSkKKysrIFNvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMTUwLDIzICsxNTAsMjMgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tl
bkFubm90YXRvci5wcm90b3R5cAogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uOgogICAg
ICAgICAgICAgZm9yICh2YXIgcGFyYW0gb2Ygbm9kZS5wYXJhbXMpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXBhcmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIHBhcmFtLmF0dGFjaG1lbnRz
LnR5cGVzICYmIHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzLmRpc3BsYXlUeXBlTmFtZSkKKyAgICAg
ICAgICAgICAgICBpZiAoIXBhcmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIHBhcmFtLmF0
dGFjaG1lbnRzLnR5cGVzICYmIHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzLmlzVmFsaWQpCiAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydFRva2VuKHBhcmFtLnJhbmdlWzBdLCBwYXJhbSwg
ZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwgcGFy
YW0ubmFtZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIElmIGEgZnVuY3Rpb24g
ZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdCByZXR1cm4gdHlwZSwgdGhlbiBkb24ndCBzaG93IGEg
cmV0dXJuIHR5cGUgdW5sZXNzIHdlIHRoaW5rIGl0J3MgYSBjb25zdHJ1Y3Rvci4KICAgICAgICAg
ICAgIHZhciBmdW5jdGlvblJldHVyblR5cGUgPSBub2RlLmF0dGFjaG1lbnRzLnJldHVyblR5cGVz
OwotICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gfHwgIWZ1bmN0
aW9uUmV0dXJuVHlwZSB8fCAhZnVuY3Rpb25SZXR1cm5UeXBlLmRpc3BsYXlUeXBlTmFtZSkKKyAg
ICAgICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuIHx8ICFmdW5jdGlvblJl
dHVyblR5cGUgfHwgIWZ1bmN0aW9uUmV0dXJuVHlwZS5pc1ZhbGlkKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICBpZiAoc2NyaXB0U3ludGF4VHJlZS5jb250YWluc05vbkVt
cHR5UmV0dXJuU3RhdGVtZW50KG5vZGUuYm9keSkgfHwgZnVuY3Rpb25SZXR1cm5UeXBlLmRpc3Bs
YXlUeXBlTmFtZSAhPT0gIlVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgIGlmIChzY3JpcHRTeW50
YXhUcmVlLmNvbnRhaW5zTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQobm9kZS5ib2R5KSB8fCAhV2Vi
SW5zcGVjdG9yLlR5cGVTZXQuZnJvbVBheWxvYWQoZnVuY3Rpb25SZXR1cm5UeXBlKS5pc0NvbnRh
aW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkgewogICAgICAg
ICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBub2RlLmlkID8gbm9kZS5pZC5uYW1lIDogbnVs
bDsKICAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihub2RlLmlzR2V0dGVyT3JTZXR0
ZXIgPyBub2RlLmdldHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdLCBub2RlLAog
ICAgICAgICAgICAgICAgICAgICB0cnVlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRs
ZVR5cGUuUmV0dXJuU3RhdGVtZW50LCBmdW5jdGlvbk5hbWUpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yOgotICAgICAgICAgICAgaWYgKCFub2RlLmF0
dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIG5vZGUuYXR0YWNobWVudHMudHlwZXMgJiYgbm9kZS5h
dHRhY2htZW50cy50eXBlcy5kaXNwbGF5VHlwZU5hbWUpCisgICAgICAgICAgICBpZiAoIW5vZGUu
YXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgbm9kZS5hdHRhY2htZW50cy50eXBlcyAmJiBub2Rl
LmF0dGFjaG1lbnRzLnR5cGVzLmlzVmFsaWQpCiAgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0
VG9rZW4obm9kZS5pZC5yYW5nZVswXSwgbm9kZSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9r
ZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwgbm9kZS5pZC5uYW1lKTsKIAogICAgICAgICAgICAg
YnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
VHlwZVNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Nb2RlbHMvVHlwZVNldC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9UeXBlU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBTYWFtIEJhcmF0aS4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
V2ViSW5zcGVjdG9yLlR5cGVTZXQgPSBmdW5jdGlvbihydW50aW1lVHlwZURlc2NyaXB0aW9uUGF5
bG9hZCkKK3sKKyAgICB0aGlzLl90eXBlcyA9IHJ1bnRpbWVUeXBlRGVzY3JpcHRpb25QYXlsb2Fk
OworCisgICAgdmFyIHR5cGVTZXQgPSB0aGlzLl90eXBlcy50eXBlU2V0OworICAgIHZhciBiaXRT
dHJpbmcgPSAweDA7CisgICAgaWYgKHR5cGVTZXQuaXNGdW5jdGlvbikKKyAgICAgICAgYml0U3Ry
aW5nIHw9IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuRnVuY3Rpb247CisgICAgaWYgKHR5
cGVTZXQuaXNVbmRlZmluZWQpCisgICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlw
ZVNldC5UeXBlQml0LlVuZGVmaW5lZDsKKyAgICBpZiAodHlwZVNldC5pc051bGwpCisgICAgICAg
IGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0Lk51bGw7CisgICAgaWYg
KHR5cGVTZXQuaXNCb29sZWFuKQorICAgICAgICBiaXRTdHJpbmcgfD0gV2ViSW5zcGVjdG9yLlR5
cGVTZXQuVHlwZUJpdC5Cb29sZWFuOworICAgIGlmICh0eXBlU2V0LmlzSW50ZWdlcikKKyAgICAg
ICAgYml0U3RyaW5nIHw9IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuSW50ZWdlcjsKKyAg
ICBpZiAodHlwZVNldC5pc051bWJlcikKKyAgICAgICAgYml0U3RyaW5nIHw9IFdlYkluc3BlY3Rv
ci5UeXBlU2V0LlR5cGVCaXQuTnVtYmVyOworICAgIGlmICh0eXBlU2V0LmlzU3RyaW5nKQorICAg
ICAgICBiaXRTdHJpbmcgfD0gV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5TdHJpbmc7Cisg
ICAgaWYgKHR5cGVTZXQuaXNPYmplY3QpCisgICAgICAgIGJpdFN0cmluZyB8PSBXZWJJbnNwZWN0
b3IuVHlwZVNldC5UeXBlQml0Lk9iamVjdDsKKworICAgIHRoaXMuX2JpdFN0cmluZyA9IGJpdFN0
cmluZzsKK307CisKK1dlYkluc3BlY3Rvci5UeXBlU2V0LmZyb21QYXlsb2FkID0gZnVuY3Rpb24o
cGF5bG9hZCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UeXBlU2V0KHBheWxvYWQp
OworfTsKKworV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdCA9IHsKKyAgICAiRnVuY3Rpb24i
ICAgIDogIDB4MSwKKyAgICAiVW5kZWZpbmVkIiAgIDogIDB4MiwKKyAgICAiTnVsbCIgICAgICAg
IDogIDB4NCwKKyAgICAiQm9vbGVhbiIgICAgIDogIDB4OCwKKyAgICAiSW50ZWdlciIgICAgIDog
IDB4MTAsCisgICAgIk51bWJlciIgICAgICA6ICAweDIwLAorICAgICJTdHJpbmciICAgICAgOiAg
MHg0MCwKKyAgICAiT2JqZWN0IiAgICAgIDogIDB4ODAKK307CisKK1dlYkluc3BlY3Rvci5UeXBl
U2V0Lk51bGxPclVuZGVmaW5lZFR5cGVCaXRzID0gV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJp
dC5OdWxsIHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5VbmRlZmluZWQ7CisKK1dlYklu
c3BlY3Rvci5UeXBlU2V0LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVj
dG9yLlR5cGVTZXQsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlw
ZSwKKworICAgIGlzQ29udGFpbmVkSW46IGZ1bmN0aW9uKHRlc3QpCisgICAgeworICAgICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0eXBlcyBpbiBiaXRTdHJpbmcgYXJlIGNvbnRhaW5l
ZCBpbiB0aGUgdHlwZXMgZGVzY3JpYmVkIGJ5IHRoZSAndGVzdCcgYml0c3RyaW5nLiAoaS5lIHdl
IGhhdmVuJ3Qgc2VlbiBtb3JlIHR5cGVzIHRoYW4gJ3Rlc3QnKS4KKyAgICAgICAgLy8gV2UgaGF2
ZSBzZWVuIGZld2VyIG9yIGVxdWFsIG51bWJlciBvZiB0eXBlcyBhcyAndGVzdCcgaWYgQU5EaW5n
IGJpdFN0cmluZyB3aXRoIHRlc3QgZG9lc24ndCB6ZXJvIG91dCBhbnkgb2Ygb3VyIGJpdHMuCisK
KyAgICAgICAgLy8gRm9yIGV4YW1wbGU6CisKKyAgICAgICAgLy8gMGIwMTEwIChiaXRTdHJpbmcp
CisgICAgICAgIC8vIDBiMTExMSAodGVzdCkKKyAgICAgICAgLy8gLS0tLS0tIChBTkQpCisgICAg
ICAgIC8vIDBiMDExMCA9PSBiaXRTdHJpbmcKKworICAgICAgICAvLyAwYjAxMTAgKGJpdFN0cmlu
ZykKKyAgICAgICAgLy8gMGIwMDEwICh0ZXN0KQorICAgICAgICAvLyAtLS0tLS0gKEFORCkKKyAg
ICAgICAgLy8gMGIwMDEwICE9IGJpdFN0cmluZworCisgICAgICAgIHJldHVybiAodGhpcy5fYml0
U3RyaW5nICYgdGVzdCkgPT09IHRoaXMuX2JpdFN0cmluZzsKKyAgICB9Cit9OwpJbmRleDogU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0
b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMJKHJldmlzaW9uIDE3MzQ2OSkKKysrIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9y
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQwLDcgKzEyNDAsNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgICAgICBpZiAoIWFsbFR5cGVzLmxlbmd0
aCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB2YXIgdHlwZXMgPSBhbGxU
eXBlc1swXTsKLSAgICAgICAgICAgIGlmICh0eXBlcy5kaXNwbGF5VHlwZU5hbWUpIHsKKyAgICAg
ICAgICAgIGlmICh0eXBlcy5pc1ZhbGlkKSB7CiAgICAgICAgICAgICAgICAgdmFyIHBvcG92ZXJU
aXRsZSA9IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnRpdGxlRm9yUG9wb3ZlcihXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuVmFyaWFibGUsIGNhbmRpZGF0ZS5leHByZXNz
aW9uKTsKICAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3BvdmVyRm9yVHlwZXModHlwZXMsIG51
bGwsIHBvcG92ZXJUaXRsZSk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVBy
b3BlcnRpZXNTZWN0aW9uLmpzCShyZXZpc2lvbiAxNzM0NjkpCisrKyBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0aWVzU2Vj
dGlvbi5wcm90bwogICAgIHsKICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUucmVt
b3ZlQ2hpbGRyZW4oKTsKIAotICAgICAgICB2YXIgcHJpbWl0aXZlVHlwZU5hbWVzID0gdGhpcy50
eXBlcy5nbG9iYWxQcmltaXRpdmVUeXBlTmFtZXMgfHwgdGhpcy50eXBlcy5sb2NhbFByaW1pdGl2
ZVR5cGVOYW1lczsKLSAgICAgICAgdmFyIHN0cnVjdHVyZXMgPSB0aGlzLnR5cGVzLmdsb2JhbFN0
cnVjdHVyZXMgfHwgdGhpcy50eXBlcy5sb2NhbFN0cnVjdHVyZXM7CisgICAgICAgIHZhciBwcmlt
aXRpdmVUeXBlTmFtZXMgPSB0aGlzLnR5cGVzLnByaW1pdGl2ZVR5cGVOYW1lczsKKyAgICAgICAg
dmFyIHN0cnVjdHVyZXMgPSB0aGlzLnR5cGVzLnN0cnVjdHVyZXM7CiAgICAgICAgIHZhciBwcm9w
ZXJ0aWVzID0gW107CiAgICAgICAgIGZvciAodmFyIHN0cnVjdCBvZiBzdHJ1Y3R1cmVzKSB7CiAg
ICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goewpAQCAtNTYsNiArNTYsMTAgQEAgV2ViSW5zcGVj
dG9yLlR5cGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90bwogICAgICAgICB9CiAKICAgICAgICAgcHJv
cGVydGllcy5zb3J0KFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlD
b21wYXJhdG9yKTsKKworICAgICAgICBpZiAodGhpcy50eXBlcy5pc1RydW5jYXRlZCkKKyAgICAg
ICAgICAgIHByb3BlcnRpZXMucHVzaCh7bmFtZTogIlx1MjAyNiIsIHN0cnVjdHVyZTogbnVsbH0p
OworCiAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IG9mIHByb3BlcnRpZXMpCiAgICAgICAgICAg
ICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9y
LlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50KHByb3BlcnR5KSk7CiAKQEAgLTE1Miw2ICsxNTYsMjIg
QEAgV2ViSW5zcGVjdG9yLlR5cGVQcm9wZXJ0eVRyZWVFbGVtZW50LnBybwogCiAgICAgICAgIHBy
b3BlcnRpZXMuc29ydChXZWJJbnNwZWN0b3IuVHlwZVByb3BlcnRpZXNTZWN0aW9uLlByb3BlcnR5
Q29tcGFyYXRvcik7CiAKKyAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgb2YgcHJvcGVydGllcykK
KyAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5UeXBlUHJvcGVy
dHlUcmVlRWxlbWVudChwcm9wZXJ0eSkpOworCisgICAgICAgIHByb3BlcnRpZXMgPSBbXTsKKyAg
ICAgICAgZm9yICh2YXIgZmllbGROYW1lIG9mIHRoaXMucHJvcGVydHkuc3RydWN0dXJlLm9wdGlv
bmFsRmllbGRzKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goeworICAgICAgICAgICAg
ICAgIG5hbWU6IGZpZWxkTmFtZSArICI/IiwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IG51
bGwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcHJvcGVydGllcy5zb3J0
KFdlYkluc3BlY3Rvci5UeXBlUHJvcGVydGllc1NlY3Rpb24uUHJvcGVydHlDb21wYXJhdG9yKTsK
KworICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUuaXNJbXByZWNpc2UpCisgICAg
ICAgICAgICBwcm9wZXJ0aWVzLnB1c2goe25hbWU6ICJcdTIwMjYiLCBzdHJ1Y3R1cmU6IG51bGx9
KTsKKwogICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS5zdHJ1Y3R1cmUucHJvdG90eXBlU3RydWN0
dXJlKSB7CiAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goewogICAgICAgICAgICAgICAgIG5h
bWU6IHRoaXMucHJvcGVydHkuc3RydWN0dXJlLnByb3RvdHlwZVN0cnVjdHVyZS5jb25zdHJ1Y3Rv
ck5hbWUgKyAiICgiICsgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm90b3R5cGUiKSArICIpIiwK
SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tl
blZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwkocmV2aXNpb24gMTczNDY5KQorKysgU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVHlwZVRva2VuVmlldy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNyArNjYsNiBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRs
ZVR5cGUgPSB7CiAgICAgUmV0dXJuU3RhdGVtZW50OiAidGl0bGUtdHlwZS1yZXR1cm4tc3RhdGVt
ZW50IgogfTsKIAotLy8gVGhlc2UgdHlwZSBzdHJpbmdzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMg
d2l0aCB0eXBlIGluZm9ybWF0aW9uIGluIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5j
cHAKIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LkNvbG9yQ2xhc3NGb3JUeXBlID0gewogICAg
ICJTdHJpbmciOiAidHlwZS10b2tlbi1zdHJpbmciLAogICAgICJGdW5jdGlvbiI6ICJ0eXBlLXRv
a2VuLWZ1bmN0aW9uIiwKQEAgLTg5LDkgKzg4LDEwIEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5W
aWV3LnByb3RvdHlwZSA9IHsKIAogICAgIHVwZGF0ZTogZnVuY3Rpb24odHlwZXMpCiAgICAgewot
ICAgICAgICB2YXIgdGl0bGUgPSB0eXBlcy5kaXNwbGF5VHlwZU5hbWU7Ci0gICAgICAgIHRoaXMu
ZWxlbWVudC50ZXh0Q29udGVudCA9IHRpdGxlOwogICAgICAgICB0aGlzLl90eXBlcyA9IHR5cGVz
OworCisgICAgICAgIHZhciB0aXRsZSA9IHRoaXMuX2Rpc3BsYXlUeXBlTmFtZSgpOworICAgICAg
ICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSB0aXRsZTsKICAgICAgICAgdmFyIGhhc2hTdHJp
bmcgPSB0aXRsZVt0aXRsZS5sZW5ndGggLSAxXSA9PT0gIj8iID8gdGl0bGUuc2xpY2UoMCwgdGl0
bGUubGVuZ3RoIC0gMSkgOiB0aXRsZTsKIAogICAgICAgICBpZiAodGhpcy5fY29sb3JDbGFzcykK
QEAgLTEyOSwxMiArMTI5LDY1IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LnByb3RvdHlw
ZSA9IHsKIAogICAgIF9zaG91bGRTaG93UG9wb3ZlcjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAg
ICAgaWYgKCh0aGlzLl90eXBlcy5nbG9iYWxQcmltaXRpdmVUeXBlTmFtZXMgJiYgdGhpcy5fdHlw
ZXMuZ2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzLmxlbmd0aCA+IDEpIHx8ICh0aGlzLl90eXBlcy5s
b2NhbFByaW1pdGl2ZVR5cGVOYW1lcyAmJiB0aGlzLl90eXBlcy5sb2NhbFByaW1pdGl2ZVR5cGVO
YW1lcy5sZW5ndGggPiAxKSkKKyAgICAgICAgaWYgKHRoaXMuX3R5cGVzLnByaW1pdGl2ZVR5cGVO
YW1lcyAmJiB0aGlzLl90eXBlcy5wcmltaXRpdmVUeXBlTmFtZXMubGVuZ3RoID4gMSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmICgodGhpcy5fdHlwZXMuZ2xvYmFsU3Ry
dWN0dXJlcyAmJiB0aGlzLl90eXBlcy5nbG9iYWxTdHJ1Y3R1cmVzLmxlbmd0aCkgfHwgKHRoaXMu
X3R5cGVzLmxvY2FsU3RydWN0dXJlcyAmJiB0aGlzLl90eXBlcy5sb2NhbFN0cnVjdHVyZXMubGVu
Z3RoKSkKKyAgICAgICAgaWYgKHRoaXMuX3R5cGVzLnN0cnVjdHVyZXMgJiYgdGhpcy5fdHlwZXMu
c3RydWN0dXJlcykKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9LAorCisgICAgX2Rpc3BsYXlUeXBlTmFtZTogZnVuY3Rpb24oKSAKKyAgICB7
CisgICAgICAgIHZhciB0eXBlU2V0ID0gV2ViSW5zcGVjdG9yLlR5cGVTZXQuZnJvbVBheWxvYWQo
dGhpcy5fdHlwZXMpOworCisgICAgICAgIGlmICh0aGlzLl90eXBlcy5sZWFzdENvbW1vbkFuY2Vz
dG9yKSB7CisgICAgICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rv
ci5UeXBlU2V0LlR5cGVCaXQuT2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
dHlwZXMubGVhc3RDb21tb25BbmNlc3RvcjsKKyAgICAgICAgICAgIGlmICh0eXBlU2V0LmlzQ29u
dGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5PYmplY3QgfCBXZWJJbnNwZWN0
b3IuVHlwZVNldC5OdWxsT3JVbmRlZmluZWRUeXBlQml0cykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3R5cGVzLmxlYXN0Q29tbW9uQW5jZXN0b3IgKyAiPyI7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlc2UgY2hlY2tzIGFyZSBpbXBvcnRhbnQuIAorICAg
ICAgICAvLyBGb3IgZXhhbXBsZSwgaWYgYSB2YWx1ZSBpcyBvbmx5IGEgZnVuY3Rpb24sIGl0IGlz
IGNvbnRhaW5lZCBpbiBUeXBlRnVuY3Rpb24sIGJ1dCBpdCBpcyBhbHNvIGNvbnRhaW5lZCBpbiAo
VHlwZUZ1bmN0aW9uIHwgVHlwZU51bGwpLgorICAgICAgICAvLyBUaGVyZWZvcmUsIG1vcmUgc3Bl
Y2lmaWMgdHlwZXMgbXVzdCBiZSBjaGVja2VkIGZpcnN0LgorCisgICAgICAgIC8vIFRoZSBzdHJp
bmdzIHJldHVybmVkIGhlcmUgc2hvdWxkIG1hdGNoIHRob3NlIGluIFR5cGVUb2tlblZpZXcuQ29s
b3JDbGFzc0ZvclR5cGUKKyAgICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNw
ZWN0b3IuVHlwZVNldC5UeXBlQml0LkZ1bmN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiAiRnVu
Y3Rpb24iOworICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5U
eXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkKKyAgICAgICAgICAgIHJldHVybiAiVW5kZWZpbmVk
IjsKKyAgICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNl
dC5UeXBlQml0Lk51bGwpKQorICAgICAgICAgICAgcmV0dXJuICJOdWxsIjsKKyAgICAgICAgaWYg
KHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LkJvb2xl
YW4pKQorICAgICAgICAgICAgcmV0dXJuICJCb29sZWFuIjsKKyAgICAgICAgaWYgKHR5cGVTZXQu
aXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LkludGVnZXIpKQorICAg
ICAgICAgICAgcmV0dXJuICJJbnRlZ2VyIjsKKyAgICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWlu
ZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0Lk51bWJlciB8IFdlYkluc3BlY3Rvci5U
eXBlU2V0LlR5cGVCaXQuSW50ZWdlcikpCisgICAgICAgICAgICByZXR1cm4gIk51bWJlciI7Cisg
ICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlw
ZUJpdC5TdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuICJTdHJpbmciOworCisgICAgICAgIGlm
ICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuTnVsbE9yVW5kZWZp
bmVkVHlwZUJpdHMpKQorICAgICAgICAgICAgcmV0dXJuICIoPykiOworCisgICAgICAgIGlmICh0
eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5GdW5jdGlv
biB8IFdlYkluc3BlY3Rvci5UeXBlU2V0Lk51bGxPclVuZGVmaW5lZFR5cGVCaXRzKSkKKyAgICAg
ICAgICAgIHJldHVybiAiRnVuY3Rpb24/IjsKKyAgICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWlu
ZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LkJvb2xlYW4gfCBXZWJJbnNwZWN0b3Iu
VHlwZVNldC5OdWxsT3JVbmRlZmluZWRUeXBlQml0cykpCisgICAgICAgICAgICByZXR1cm4gIkJv
b2xlYW4/IjsKKyAgICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3Iu
VHlwZVNldC5UeXBlQml0LkludGVnZXIgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5OdWxsT3JVbmRl
ZmluZWRUeXBlQml0cykpCisgICAgICAgICAgICByZXR1cm4gIkludGVnZXI/IjsKKyAgICAgICAg
aWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0Lk51
bWJlciB8IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuSW50ZWdlciB8IFdlYkluc3BlY3Rv
ci5UeXBlU2V0Lk51bGxPclVuZGVmaW5lZFR5cGVCaXRzKSkKKyAgICAgICAgICAgIHJldHVybiAi
TnVtYmVyPyI7CisgICAgICAgIGlmICh0eXBlU2V0LmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9y
LlR5cGVTZXQuVHlwZUJpdC5TdHJpbmcgfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5OdWxsT3JVbmRl
ZmluZWRUeXBlQml0cykpCisgICAgICAgICAgICByZXR1cm4gIlN0cmluZz8iOworICAgICAgIAor
ICAgICAgICBpZiAodHlwZVNldC5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5
cGVCaXQuT2JqZWN0IHwgV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5GdW5jdGlvbiB8IFdl
Ykluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiAi
T2JqZWN0IjsKKyAgICAgICAgaWYgKHR5cGVTZXQuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3Iu
VHlwZVNldC5UeXBlQml0Lk9iamVjdCB8IFdlYkluc3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuRnVu
Y3Rpb24gfCBXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0LlN0cmluZyB8IFdlYkluc3BlY3Rv
ci5UeXBlU2V0Lk51bGxPclVuZGVmaW5lZFR5cGVCaXRzKSkKKyAgICAgICAgICAgIHJldHVybiAi
T2JqZWN0PyI7CisKKyAgICAgICAgcmV0dXJuICIoIiArIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
bWFueSIpICsgIikiOwogICAgIH0KIH07Cg==
</data>
<flag name="review"
          id="262680"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>